From a7d2035e70b08b91c2cf2d02e10852e610153cc9 Mon Sep 17 00:00:00 2001 From: wucongxing <815046773@qq.com> Date: Tue, 18 Nov 2025 15:12:24 +0800 Subject: [PATCH] 33 --- .../activity/AccumulatePointsActivity.java | 461 ++ .../activity/AddBankCardActivity.java | 257 + .../activity/AddBankCardFirstActivity.java | 264 + .../activity/AddBankCardSecondActivity.java | 868 +++ .../activity/AddCaseRecordActivity.java | 1049 ++++ .../gdxzExpert/activity/AddGroupActivity.java | 613 ++ .../AddOutpatientAppointmentActivity.java | 521 ++ .../AddOutpatientArrangement1Activity.java | 612 ++ .../AddOutpatientArrangement1NewActivity.java | 741 +++ .../AddPractisingaddressActivity.java | 642 +++ .../activity/AddProclamationActivity.java | 197 + .../activity/AddSecletBankCardActivity.java | 96 + .../activity/AddVisitDateActivity.java | 366 ++ .../activity/AddVisitPlanActivity.java | 601 ++ .../activity/AddcasediscussionActivity.java | 1217 ++++ .../gdxzExpert/activity/AddtagActivity.java | 222 + .../gdxzExpert/activity/AdvertActivity.java | 362 ++ .../activity/BillDetailActivity.java | 178 + .../activity/BillDetailsActivity.java | 251 + .../activity/BindNumberActivity.java | 513 ++ .../activity/BindWeChatActivity.java | 379 ++ .../activity/BiochemistryActivity.java | 1128 ++++ .../activity/BookDetailActivity.java | 1571 ++++++ .../activity/BookMagazineDetailActivity.java | 278 + .../activity/BookTop10Activity.java | 384 ++ .../activity/BookshelfListActivity.java | 798 +++ .../activity/BookshelfListActivity2.java | 939 ++++ .../CaseCourisiuuonCollectBIngliActivity.java | 322 ++ .../activity/CaseCussionDetailActivity.java | 1218 ++++ .../activity/CaseDetailActivity.java | 930 ++++ .../activity/CaseHistoryDetailActivity.java | 310 ++ .../activity/CaseRecordActivity.java | 304 + .../activity/CasediscussionActivity.java | 121 + .../CasediscussioncollentActivity.java | 91 + .../activity/CasehistoryActivity.java | 382 ++ .../activity/ChangePasswordActivity.java | 236 + .../activity/ChoosehospitalActivity.java | 1109 ++++ .../activity/CommunicationActivity.java | 99 + .../gdxzExpert/activity/ConfirmActivity.java | 202 + .../activity/ContriButingEditActivity.java | 119 + .../ContriButingEditTitleActivity.java | 98 + .../activity/ContributingActivity.java | 163 + .../activity/CoollectCourseActivity.java | 292 + .../activity/CoollectNewsActivity.java | 274 + .../activity/CoollectTeachActivity.java | 286 + .../activity/CoollectVideoActivity.java | 278 + .../gdxzExpert/activity/CourseActivity.java | 192 + .../activity/CourseDetailOrderActivity.java | 532 ++ .../activity/CourseUrlDetailActivity.java | 1253 +++++ .../activity/CoursewareActivity.java | 657 +++ .../gdxzExpert/activity/CtActivity.java | 1129 ++++ .../gdxzExpert/activity/DonatingActivity.java | 229 + .../activity/DownloadCollectActivity.java | 166 + .../activity/DrawWith2Atvitity.java | 986 ++++ .../gdxzExpert/activity/DrawWithActivity.java | 206 + .../gdxzExpert/activity/DuiFuliActivity.java | 324 ++ .../activity/EditEmailActivity.java | 152 + .../activity/EditOfficePhoneActivity.java | 168 + .../activity/EditPhoneActivity.java | 673 +++ .../activity/EditProfileActivity.java | 220 + .../activity/EnglishDetailActivity.java | 316 ++ .../gdxzExpert/activity/EvaluateActivity.java | 234 + .../gdxzExpert/activity/ExitDialog.java | 70 + .../activity/ExpertDetailActivity.java | 928 ++++ .../gdxzExpert/activity/FaPiaoActivity.java | 640 +++ .../gdxzExpert/activity/FibroActivity.java | 1038 ++++ .../activity/FileDisplayActivity.java | 239 + .../gdxzExpert/activity/FindHelpActivity.java | 118 + .../gdxzExpert/activity/ForgetActivity.java | 726 +++ .../activity/ForgetRestPwdActivity.java | 188 + .../activity/FreeagentsearchActivity.java | 150 + .../activity/GDEventDetailActivity.java | 548 ++ .../activity/GDEventDetailTopActivity.java | 1187 ++++ .../activity/GDLiveBroadcastActivity.java | 236 + .../activity/GanDanDoctorActivity.java | 232 + .../activity/GanDanEventActivity.java | 241 + .../activity/GanDanHospitalActivity.java | 151 + .../activity/GanDanHouseActivity.java | 156 + .../activity/GanDanHouseDetialActivity.java | 1263 +++++ .../activity/GandanConsultActivity.java | 222 + .../activity/GandanMeetingActivity.java | 331 ++ .../activity/GetInterrogationActivity.java | 563 ++ .../activity/GroupChatPatientActivity.java | 289 + .../GroupChatSelectPatientActivity.java | 593 ++ .../activity/GroupManageActivity.java | 360 ++ .../activity/GroupSelectParentActivity.java | 615 ++ .../gdxzExpert/activity/GroupingActivity.java | 407 ++ .../activity/GuanggaoDetailActivity.java | 362 ++ .../gdxzExpert/activity/H5AllActivity.java | 91 + .../gdxzExpert/activity/HbvdnaActivity.java | 1217 ++++ .../gdxzExpert/activity/HeroListActivity.java | 392 ++ .../gdxzExpert/activity/HistoryActivity.java | 636 +++ .../activity/HistoryMettingActivity.java | 406 ++ .../gdxzExpert/activity/HomeActivity.java | 54 + .../activity/HospitalDetialActivity.java | 1062 ++++ .../activity/HospitalSearchActivity.java | 234 + .../activity/IWantDonateActivity.java | 432 ++ .../activity/IncomeDetailActivity.java | 92 + .../activity/InfomationActivity.java | 1798 ++++++ .../activity/IntroductionActivity.java | 51 + .../activity/InviteContactActivity.java | 83 + .../activity/InvitePatientActivity.java | 204 + .../activity/KePuDetailActivity.java | 208 + .../gdxzExpert/activity/KeyWordActivity.java | 470 ++ .../gdxzExpert/activity/LeaveMsgActivity.java | 415 ++ .../activity/LinChuangActivity.java | 242 + .../gdxzExpert/activity/LoginActivity.java | 1107 ++++ .../gdxzExpert/activity/LoginNewActivity.java | 1606 ++++++ .../activity/LoginSetInfoActivity.java | 1833 ++++++ .../activity/LoginSetInfoActivity1.java | 1062 ++++ .../activity/LogisticsActivity.java | 114 + .../gdxzExpert/activity/LoveActivity.java | 306 + .../activity/LoveContentEditActivity.java | 166 + .../gdxzExpert/activity/LoveEditName.java | 174 + .../gdxzExpert/activity/MainActivity.java | 3743 +++++++++++++ .../activity/MindDetailActivity.java | 347 ++ .../activity/MonthlyServiceActivity.java | 373 ++ .../gdxzExpert/activity/MoocimglActivity.java | 409 ++ .../activity/MoreDoctorActivity.java | 298 + .../activity/MoreDongtaiActivity.java | 334 ++ .../activity/MoreLeaveMsgActivity.java | 346 ++ .../activity/MoreNoticeActivity.java | 211 + .../activity/MoreVideoActivity.java | 290 + .../activity/MyAccount2Activity.java | 385 ++ .../activity/MyAccountActivity.java | 200 + .../activity/MyBankCardActivity.java | 438 ++ .../gdxzExpert/activity/MyBillActivity.java | 240 + .../gdxzExpert/activity/MyCicleActivity.java | 103 + .../MyCircleCommunicationActivity.java | 109 + .../activity/MyCollectActivity.java | 321 ++ .../activity/MyCollectBIngliActivity.java | 135 + .../activity/MyCoursewareActivity.java | 114 + .../activity/MyDetailInfoActivity.java | 1296 +++++ .../activity/MyDownLoadCourseActivity.java | 444 ++ .../activity/MyDownLoadsActivity.java | 236 + .../activity/MyDownloadActivity.java | 643 +++ .../gdxzExpert/activity/MyFlowerActivity.java | 381 ++ .../activity/MyFuliCardActivity.java | 711 +++ .../gdxzExpert/activity/MyIdeaActivity.java | 819 +++ .../activity/MyLibraryActivity.java | 455 ++ .../gdxzExpert/activity/MyMindActivity.java | 257 + .../activity/MyPatientActivity.java | 753 +++ .../activity/MyProjectsDetailActivity.java | 396 ++ .../gdxzExpert/activity/MyQrCodeActivity.java | 617 +++ .../MyScientificResearchActivity.java | 115 + .../activity/MyUserIconActivity.java | 237 + .../gdxzExpert/activity/MyVIPActivity.java | 108 + .../activity/MyVisitsDressActivity.java | 613 ++ .../activity/MyWFArticleActivity.java | 198 + .../activity/MyWelfAreActivity.java | 180 + .../activity/MyWorkTableActivity.java | 516 ++ .../activity/MylanFollowActivity.java | 113 + .../MylanFollow_upProjectActivity.java | 223 + .../activity/NavigationActivity.java | 595 ++ .../activity/NewContributingActivity.java | 559 ++ .../activity/NewLessonsActivity.java | 625 +++ .../activity/NewPatientActivity.java | 643 +++ .../gdxzExpert/activity/NewsActivity.java | 60 + .../activity/NewsDetailActivity.java | 2131 +++++++ .../activity/NoteDressEditActivity.java | 142 + .../activity/OrderListActivity.java | 910 +++ .../activity/OutofPatientNoticeActivity.java | 759 +++ .../activity/OutpatientInfoActivity.java | 184 + .../activity/PastHistoryActivity.java | 56 + .../gdxzExpert/activity/PatientActivity.java | 918 +++ .../activity/PatientDetailActivity.java | 164 + .../activity/PatientEditActivity.java | 429 ++ .../PatientEducationApplyActivity.java | 487 ++ .../PatientEducationNoticeActivity.java | 184 + .../activity/PatientGroupActivity.java | 311 ++ .../activity/PatientNickNameEditActivity.java | 171 + .../PatientNoteContentEditActivity.java | 165 + .../activity/PatientTeachActivity.java | 418 ++ .../activity/PatientVideoActivity.java | 1079 ++++ .../gdxzExpert/activity/PayActivity.java | 692 +++ .../gdxzExpert/activity/PayClassActivity.java | 724 +++ .../activity/PayCourseActivity.java | 617 +++ .../activity/PayResultActivity.java | 95 + .../gdxzExpert/activity/PdfViewActivity.java | 160 + .../activity/PhotoAlbum2Activity.java | 329 ++ .../activity/PhotoAlbumActivity.java | 415 ++ .../activity/PoMessageActivity.java | 312 ++ .../PractiseAddressManagementActivity.java | 459 ++ .../activity/ProjectDetailActivity.java | 313 ++ .../activity/PublicConsultationActivity.java | 123 + .../activity/PublicSearchActivity.java | 619 +++ .../activity/PublicServiceActivity.java | 245 + .../PublicServiceDetailsActivity.java | 699 +++ .../activity/QuckMessageActivity.java | 346 ++ .../gdxzExpert/activity/QuestionActivity.java | 174 + .../activity/QuestionListActivity.java | 340 ++ .../gdxzExpert/activity/RankingActivity.java | 319 ++ .../gdxzExpert/activity/RegistActivity.java | 1009 ++++ .../activity/ReleaseStopActivity.java | 1037 ++++ .../activity/ReplyFeedbackActivity.java | 141 + .../gdxzExpert/activity/ResearchActivity.java | 220 + .../activity/ScientificDetailActivity.java | 145 + .../activity/SearchClassActivity.java | 722 +++ .../activity/SearchCourseActivity.java | 477 ++ .../activity/SearchForGroupActivity.java | 573 ++ .../activity/SearchHistoryActivity.java | 333 ++ .../activity/SearchNewsActivity.java | 264 + .../activity/SearchPatientActivity.java | 304 + .../activity/SearchPatientTeachActivity.java | 361 ++ .../activity/SearchScienceActivity.java | 293 + .../activity/SearchVideoActivity.java | 470 ++ .../activity/SearchVideoTeachActivity.java | 376 ++ .../activity/SelectBankCardActivity.java | 230 + .../activity/SelectDateClinicActivity.java | 350 ++ .../activity/SelectDateTimeActivity.java | 358 ++ .../activity/SelectedPhotoActivity.java | 453 ++ .../activity/SendGroupMsgListActivity.java | 691 +++ .../SendGroupMsgPatientNameActicity.java | 55 + .../gdxzExpert/activity/SendMindActivity.java | 547 ++ .../activity/SettingAndHelpActivity.java | 964 ++++ .../activity/SettingFeedbackActivity.java | 475 ++ .../activity/SettingServiceActivity.java | 74 + .../activity/SettingVersionActivity.java | 835 +++ .../SettingZhiboFeedbackActivity.java | 216 + .../gdxzExpert/activity/SuifangActivity.java | 114 + .../activity/SuifangNewActivity.java | 588 ++ .../activity/SystemMessageActivity.java | 505 ++ .../activity/SystemMessageDetailActivity.java | 164 + .../TelephoneConsultationActivity.java | 486 ++ .../activity/TerminationActivity.java | 1568 ++++++ .../activity/TerminationDetailActivity.java | 86 + .../gdxzExpert/activity/TestingActivity.java | 271 + .../activity/TestingDetailActivity.java | 254 + .../activity/TestingUrlDetailActivity.java | 213 + .../cn/shangyu/gdxzExpert/activity/Text.java | 19 + .../activity/TicketDetailActivity.java | 653 +++ .../gdxzExpert/activity/ToolsActivity.java | 4921 +++++++++++++++++ .../gdxzExpert/activity/TopicAcitivty.java | 457 ++ .../activity/UpanExchangeActivity.java | 174 + .../gdxzExpert/activity/VideoActivity.java | 1302 +++++ .../activity/VideoDetilActivity.java | 1305 +++++ .../gdxzExpert/activity/VideoJHActivity.java | 312 ++ .../activity/VideoMoreActivity.java | 406 ++ .../activity/VideoTeachActivity.java | 525 ++ .../activity/VisitDerailActivity.java | 304 + .../activity/VisitPlanActivity.java | 457 ++ .../activity/WFArticleListActivity.java | 632 +++ .../gdxzExpert/activity/WebActivity.java | 139 + .../activity/WelfareDetailActivity.java | 300 + .../activity/WriteTopicActivity.java | 1109 ++++ .../activity/XHYKMedicionDetailActivity.java | 87 + .../activity/XHYKMedicionListActivity.java | 272 + .../activity/YKMedicionDetailActivity.java | 258 + .../activity/YKMediconActivity.java | 481 ++ .../activity/YKMediconListActivity.java | 351 ++ .../gdxzExpert/activity/ZhiBoActivity.java | 563 ++ .../adapter/AddCaseRecordAdapter.java | 101 + .../adapter/AddCaseRecordAdapter01.java | 101 + .../adapter/AppliedListAdapter.java | 83 + .../gdxzExpert/adapter/ArrayAdapterNew.java | 24 + .../gdxzExpert/adapter/BankListAdapter.java | 61 + .../gdxzExpert/adapter/BarAdapter.java | 77 + .../adapter/BaseFragemetAdapter.java | 48 + .../gdxzExpert/adapter/BillDetailAdapter.java | 87 + .../adapter/BookshelfListAdapter.java | 1155 ++++ .../gdxzExpert/adapter/CaseRecordAdapter.java | 121 + .../adapter/Casediscussion01Adapter.java | 360 ++ .../adapter/CasediscussionAdapter.java | 318 ++ .../adapter/CasediscussionCollentAdapter.java | 318 ++ .../gdxzExpert/adapter/CellAdapter.java | 116 + .../gdxzExpert/adapter/CellHonorAdapter.java | 79 + .../adapter/CollcetNewsAdataper.java | 88 + .../adapter/CollectVideoAdapter.java | 86 + .../gdxzExpert/adapter/CommentAdapter.java | 227 + .../adapter/CommentExpandAdapter1.java | 312 ++ .../adapter/CompletedListAdapter.java | 66 + .../gdxzExpert/adapter/ComplexViewMF.java | 62 + .../adapter/ConfirmedListAdapter.java | 68 + .../gdxzExpert/adapter/ConsultAdapter.java | 353 ++ .../gdxzExpert/adapter/CourseAdapter.java | 102 + .../adapter/CourseFirstAdapter.java | 101 + .../adapter/CourseFirstListAdapter.java | 287 + .../gdxzExpert/adapter/CourseFuAdapter.java | 93 + .../adapter/CourseMyListAdapter.java | 168 + .../gdxzExpert/adapter/CourseTuiAdapter.java | 352 ++ .../gdxzExpert/adapter/CourseTuiAdapter1.java | 343 ++ .../adapter/DetailCommentAdapter.java | 224 + .../adapter/DownloadCollectAdapter.java | 70 + .../gdxzExpert/adapter/ENDownloadAdapter.java | 179 + .../adapter/EnglishCollectAdapter.java | 96 + .../adapter/GDLiveBroadcastAdapter.java | 162 + .../gdxzExpert/adapter/GanDanAdapter.java | 105 + .../adapter/GanDanDoctorAdapter.java | 202 + .../adapter/GanDanHospitalAdapter.java | 136 + .../adapter/GanDanHouseAdapter.java | 315 ++ .../gdxzExpert/adapter/GroupingAdapter.java | 300 + .../gdxzExpert/adapter/HbsagAdapter.java | 112 + .../gdxzExpert/adapter/HistoryAdapter.java | 171 + .../adapter/HistoryMeetingAdapter.java | 225 + .../gdxzExpert/adapter/HonorAdapter.java | 116 + .../gdxzExpert/adapter/HospitalAdapter.java | 87 + .../gdxzExpert/adapter/HuiAdapter.java | 103 + .../adapter/ImageIllnessAdapter.java | 70 + .../adapter/IncomeDetailsAdapter.java | 121 + .../gdxzExpert/adapter/JingAdapter.java | 123 + .../gdxzExpert/adapter/KejianAdapter.java | 591 ++ .../adapter/LibraryBookshelfAdapter.java | 128 + .../adapter/LibraryListAdapter.java | 70 + .../gdxzExpert/adapter/LinChuangAdapter.java | 105 + .../gdxzExpert/adapter/LogistAdapter.java | 81 + .../gdxzExpert/adapter/LoveListAdapter.java | 113 + .../gdxzExpert/adapter/MeetingAdapter.java | 241 + .../adapter/MeetingTimeAdapter.java | 78 + .../gdxzExpert/adapter/MessageAdapter.java | 77 + .../gdxzExpert/adapter/MindAdapter.java | 100 + .../gdxzExpert/adapter/MoreNoticeAdapter.java | 77 + .../gdxzExpert/adapter/MyCollectAdapter.java | 74 + .../gdxzExpert/adapter/MyDownloadAdapter.java | 365 ++ .../gdxzExpert/adapter/MyMindAdapter.java | 80 + .../gdxzExpert/adapter/MyPagerAdapter.java | 69 + .../gdxzExpert/adapter/MyProjectAdapter.java | 87 + .../gdxzExpert/adapter/MyUserIconAdapter.java | 158 + .../gdxzExpert/adapter/NewPatientAdapter.java | 155 + .../gdxzExpert/adapter/NewsAdapter.java | 198 + .../OnRecyclerViewItemClickListener.java | 7 + .../gdxzExpert/adapter/OrderAdapter.java | 252 + .../gdxzExpert/adapter/PaperAdapter.java | 246 + .../gdxzExpert/adapter/PatientAdapter.java | 243 + .../gdxzExpert/adapter/PatientAdapter2.java | 138 + .../adapter/PatientTeachAdapter.java | 185 + .../gdxzExpert/adapter/PhotoAdappter2.java | 123 + .../gdxzExpert/adapter/PhotoAdapter.java | 74 + .../gdxzExpert/adapter/PhotoAibumAdapter.java | 136 + .../gdxzExpert/adapter/PointListAdapter.java | 89 + .../gdxzExpert/adapter/ProjectAdapter.java | 73 + .../gdxzExpert/adapter/ProxyAdapter.java | 205 + .../gdxzExpert/adapter/PublishingAdapter.java | 66 + .../gdxzExpert/adapter/QuestionAdapter.java | 66 + .../gdxzExpert/adapter/RollAdapter.java | 52 + .../adapter/ScienceListAdapter.java | 159 + .../adapter/SelectBankCardAdapter.java | 177 + .../adapter/SelectCourseAdapter.java | 77 + .../gdxzExpert/adapter/SuifangAdapter.java | 129 + .../gdxzExpert/adapter/TermAdapter.java | 132 + .../gdxzExpert/adapter/TermAdapterNew.java | 152 + .../gdxzExpert/adapter/VideoAdapter.java | 143 + .../adapter/VideoCommentAdapter.java | 223 + .../VideoCommentPolyVplayerAdapter.java | 273 + .../gdxzExpert/adapter/VideoGVAdapter.java | 85 + .../gdxzExpert/adapter/VideoMoreAdapter.java | 86 + .../gdxzExpert/adapter/VideoSAdapter.java | 171 + .../gdxzExpert/adapter/VideoTeachAdapter.java | 149 + .../gdxzExpert/adapter/VisitPlanAdapter.java | 139 + .../gdxzExpert/adapter/WFArticleAdapter.java | 131 + .../gdxzExpert/adapter/WFArticleAdapter1.java | 115 + .../adapter/WFArticleDownloadAdapter.java | 94 + .../gdxzExpert/adapter/WFCollectAdapter.java | 80 + .../gdxzExpert/adapter/endpointImgBean.java | 71 + .../application/BaseApplication.java | 748 +++ .../shangyu/gdxzExpert/base/AppManager.java | 154 + .../shangyu/gdxzExpert/base/BaseActivity.java | 1435 +++++ .../shangyu/gdxzExpert/base/BaseFragment.java | 637 +++ .../gdxzExpert/base/yongyaoTotalBean.java | 16 + .../shangyu/gdxzExpert/bean/AddBitmaps.java | 43 + .../bean/AddBonusPointsSuccessBean.java | 148 + .../bean/AddCaseNewRecordAdapter.java | 159 + .../gdxzExpert/bean/AddPatientBean.java | 341 ++ .../cn/shangyu/gdxzExpert/bean/AreaBean.java | 54 + .../java/cn/shangyu/gdxzExpert/bean/Bank.java | 7 + .../shangyu/gdxzExpert/bean/BankCardBean.java | 88 + .../cn/shangyu/gdxzExpert/bean/BaseBean.java | 26 + .../shangyu/gdxzExpert/bean/BaseBeanList.java | 40 + .../shangyu/gdxzExpert/bean/BaseBeanNew.java | 22 + .../shangyu/gdxzExpert/bean/BaseInfoBean.java | 290 + .../cn/shangyu/gdxzExpert/bean/BillBean.java | 22 + .../shangyu/gdxzExpert/bean/BillListBean.java | 169 + .../gdxzExpert/bean/BonusPointsListBean.java | 137 + .../gdxzExpert/bean/BookDetailBean.java | 134 + .../gdxzExpert/bean/CaseAssembleListBean.java | 196 + .../gdxzExpert/bean/CaseDetailBean.java | 30 + .../gdxzExpert/bean/CaseRecordBean.java | 75 + .../gdxzExpert/bean/CasediscussionBean.java | 204 + .../bean/CasediscussionCollentBean.java | 49 + .../gdxzExpert/bean/CasesuiondelBean.java | 80 + .../gdxzExpert/bean/ChangeMyInfoBean.java | 64 + .../cn/shangyu/gdxzExpert/bean/Child.java | 87 + .../cn/shangyu/gdxzExpert/bean/ChildTree.java | 79 + .../shangyu/gdxzExpert/bean/CircleBean.java | 43 + .../bean/CircleCollectBIngliBean.java | 20 + .../java/cn/shangyu/gdxzExpert/bean/City.java | 64 + .../gdxzExpert/bean/ClassDetailBean.java | 404 ++ .../gdxzExpert/bean/CollectListBean.java | 32 + .../gdxzExpert/bean/CollectNewsBean.java | 150 + .../gdxzExpert/bean/CollectVideoBean.java | 113 + .../shangyu/gdxzExpert/bean/CommentBean.java | 106 + .../gdxzExpert/bean/ConsultListBean.java | 227 + .../gdxzExpert/bean/ConsultListBeanHis.java | 23 + .../gdxzExpert/bean/CourseDetailBean.java | 30 + .../gdxzExpert/bean/CourseDetailBeanNew.java | 40 + .../gdxzExpert/bean/CourseEvaBean.java | 288 + .../gdxzExpert/bean/CourseGanExBean.java | 108 + .../gdxzExpert/bean/CourseIconBean.java | 72 + .../gdxzExpert/bean/CourseIndexBean.java | 262 + .../bean/CourseIndexSearchBean.java | 221 + .../gdxzExpert/bean/CourseOrderBean.java | 114 + .../gdxzExpert/bean/CourseOrderListBean.java | 202 + .../gdxzExpert/bean/CourseUrlDetailBean.java | 7 + .../gdxzExpert/bean/CoursewareListBean.java | 171 + .../gdxzExpert/bean/CreateGoodsOrderBean.java | 183 + .../gdxzExpert/bean/CreateOrderBean1.java | 426 ++ .../gdxzExpert/bean/CustomViewsInfo.java | 30 + .../gdxzExpert/bean/DownListenerEvent.java | 19 + .../shangyu/gdxzExpert/bean/EvenBusEvent.java | 37 + .../gdxzExpert/bean/EventListBean.java | 143 + .../shangyu/gdxzExpert/bean/ExpertDetail.java | 432 ++ .../gdxzExpert/bean/ExpertFlowerList.java | 199 + .../gdxzExpert/bean/ExpertHonorBean.java | 70 + .../gdxzExpert/bean/ExpertMindList.java | 119 + .../gdxzExpert/bean/ExperteDetailBean.java | 7 + .../shangyu/gdxzExpert/bean/FapiaoBean.java | 83 + .../shangyu/gdxzExpert/bean/FuCardBean.java | 184 + .../gdxzExpert/bean/GDLiveBroadcastBean.java | 194 + .../gdxzExpert/bean/GanDanHospitalBean.java | 239 + .../bean/GanDanHouseDetialBean.java | 159 + .../gdxzExpert/bean/GandanDoctorListBean.java | 200 + .../gdxzExpert/bean/GetAppActivityBean.java | 105 + .../gdxzExpert/bean/GetFollowUpBean.java | 148 + .../shangyu/gdxzExpert/bean/GetGoodsBean.java | 121 + .../gdxzExpert/bean/GetGoodsOrderBean.java | 212 + .../gdxzExpert/bean/GetHospitalListBean.java | 27 + .../gdxzExpert/bean/GetInterrogationBean.java | 371 ++ .../shangyu/gdxzExpert/bean/GetListBean.java | 42 + .../gdxzExpert/bean/GetUserIconBean.java | 90 + .../gdxzExpert/bean/GetWelfarePageBean.java | 130 + .../gdxzExpert/bean/GethonorDetailBean.java | 117 + .../gdxzExpert/bean/GoodsListBean.java | 213 + .../gdxzExpert/bean/GoodsNewsListBean.java | 75 + .../gdxzExpert/bean/GoodsOrderListBean.java | 224 + .../gdxzExpert/bean/GroupListBean.java | 70 + .../gdxzExpert/bean/GroupManageBean.java | 36 + .../gdxzExpert/bean/GroupPatientList.java | 203 + .../gdxzExpert/bean/GroupPatientListBean.java | 366 ++ .../cn/shangyu/gdxzExpert/bean/HeroBean.java | 88 + .../cn/shangyu/gdxzExpert/bean/HomeBean.java | 673 +++ .../cn/shangyu/gdxzExpert/bean/HomeList.java | 174 + .../gdxzExpert/bean/HomeModalBean.java | 79 + .../gdxzExpert/bean/HomeTrollNewBean.java | 191 + .../shangyu/gdxzExpert/bean/HospitalBean.java | 76 + .../gdxzExpert/bean/HospitalDetialBean.java | 528 ++ .../gdxzExpert/bean/HospitalListBean.java | 70 + .../gdxzExpert/bean/HospitalRollListBean.java | 38 + .../cn/shangyu/gdxzExpert/bean/HouseBean.java | 134 + .../cn/shangyu/gdxzExpert/bean/IconBean.java | 42 + .../bean/InterrogationPatientInfoBean.java | 231 + .../shangyu/gdxzExpert/bean/KeyWordBean.java | 84 + .../gdxzExpert/bean/LeaseMsgDataBean.java | 25 + .../gdxzExpert/bean/LeaseMsgListBean.java | 65 + .../gdxzExpert/bean/LessonTageBean.java | 30 + .../gdxzExpert/bean/LibraryListBean.java | 224 + .../shangyu/gdxzExpert/bean/ListFreeBean.java | 207 + .../gdxzExpert/bean/ListGroupSendMsgBean.java | 187 + .../bean/ListNewInterrogationBean.java | 225 + .../gdxzExpert/bean/ListOutPatientBean.java | 234 + .../gdxzExpert/bean/ListSeriesTypeBean.java | 244 + .../bean/ListSeriesVideoByTypeBean.java | 350 ++ .../gdxzExpert/bean/ListWorkPlaceBean.java | 121 + .../gdxzExpert/bean/LogisticsBean.java | 76 + .../shangyu/gdxzExpert/bean/LoveListBean.java | 28 + .../gdxzExpert/bean/MailanListBean.java | 184 + .../shangyu/gdxzExpert/bean/MedicineBean.java | 24 + .../shangyu/gdxzExpert/bean/MedicineBook.java | 57 + .../shangyu/gdxzExpert/bean/MeetingBean.java | 181 + .../shangyu/gdxzExpert/bean/MessageBean.java | 252 + .../gdxzExpert/bean/MessageListBean.java | 25 + .../bean/MessageListDetailBean.java | 24 + .../gdxzExpert/bean/MessageNumBean.java | 80 + .../gdxzExpert/bean/MindDateilBean.java | 113 + .../gdxzExpert/bean/MonthDetailBean.java | 56 + .../gdxzExpert/bean/MoreDoctorBean.java | 57 + .../gdxzExpert/bean/MoreDongtaiBean.java | 160 + .../gdxzExpert/bean/MoreLeaveMsgBean.java | 58 + .../gdxzExpert/bean/MoreNoticeBean.java | 95 + .../gdxzExpert/bean/MoreVideoBean.java | 54 + .../gdxzExpert/bean/MyBankCardBean.java | 18 + .../gdxzExpert/bean/MyCasediscussionBean.java | 227 + .../shangyu/gdxzExpert/bean/MyCourseBean.java | 177 + .../gdxzExpert/bean/MyDetailInfoBean.java | 31 + .../shangyu/gdxzExpert/bean/MyFlowerBean.java | 20 + .../cn/shangyu/gdxzExpert/bean/MyNewBean.java | 141 + .../shangyu/gdxzExpert/bean/MyOrderBean.java | 251 + .../shangyu/gdxzExpert/bean/MyPointsBean.java | 90 + .../gdxzExpert/bean/MyWorkTableBean.java | 33 + .../cn/shangyu/gdxzExpert/bean/MylanBean.java | 99 + .../gdxzExpert/bean/NewCommentBean.java | 201 + .../shangyu/gdxzExpert/bean/NewListBean.java | 58 + .../shangyu/gdxzExpert/bean/NewTeachData.java | 121 + .../gdxzExpert/bean/NewsTagListBean.java | 29 + .../gdxzExpert/bean/OldCommentBean.java | 19 + .../cn/shangyu/gdxzExpert/bean/OrderBean.java | 193 + .../cn/shangyu/gdxzExpert/bean/PageBean.java | 70 + .../cn/shangyu/gdxzExpert/bean/PaperBean.java | 31 + .../gdxzExpert/bean/PatientCardBean.java | 173 + .../gdxzExpert/bean/PatientCaseBean.java | 130 + .../gdxzExpert/bean/PatientDetailBean.java | 152 + .../gdxzExpert/bean/PatientListBean.java | 159 + .../gdxzExpert/bean/PatientNoticeBean.java | 68 + .../gdxzExpert/bean/PatientTeachBean.java | 175 + .../gdxzExpert/bean/PatientVideoTypeBean.java | 110 + .../cn/shangyu/gdxzExpert/bean/PayBean.java | 128 + .../gdxzExpert/bean/PayGoodsOrderbean.java | 163 + .../gdxzExpert/bean/PayWechatBean.java | 116 + .../shangyu/gdxzExpert/bean/PhotoAibum.java | 77 + .../cn/shangyu/gdxzExpert/bean/PhotoItem.java | 58 + .../gdxzExpert/bean/PoMessageBean.java | 34 + .../gdxzExpert/bean/PointTicketlistBean.java | 166 + .../gdxzExpert/bean/PolyvDownloadInfo.java | 140 + .../gdxzExpert/bean/PolyvUploadInfo.java | 102 + .../bean/PublicSercicePhotoBean.java | 144 + .../shangyu/gdxzExpert/bean/QuestionBean.java | 158 + .../gdxzExpert/bean/QuickReplyBean.java | 24 + .../shangyu/gdxzExpert/bean/RankingBean.java | 58 + .../shangyu/gdxzExpert/bean/RegistBean.java | 69 + .../shangyu/gdxzExpert/bean/RetrieveUser.java | 58 + .../gdxzExpert/bean/ScienceListBean.java | 55 + .../gdxzExpert/bean/ScientificBean.java | 42 + .../gdxzExpert/bean/SearchHospitalBean.java | 16 + .../bean/SeriesVideoNewsListBean.java | 81 + .../gdxzExpert/bean/SettingInfoBean.java | 70 + .../gdxzExpert/bean/ShareCollectListBean.java | 32 + .../cn/shangyu/gdxzExpert/bean/ShowBean.java | 27 + .../shangyu/gdxzExpert/bean/SimpleBean.java | 40 + .../gdxzExpert/bean/SpinnerOption.java | 29 + .../cn/shangyu/gdxzExpert/bean/StartBean.java | 70 + .../bean/StopOutPatientListBean.java | 147 + .../shangyu/gdxzExpert/bean/SuggestBean.java | 166 + .../shangyu/gdxzExpert/bean/SuifagnBean.java | 143 + .../cn/shangyu/gdxzExpert/bean/TagList.java | 67 + .../shangyu/gdxzExpert/bean/TestingBean.java | 88 + .../gdxzExpert/bean/TestingDetailBean.java | 47 + .../cn/shangyu/gdxzExpert/bean/Testqqqqq.java | 249 + .../shangyu/gdxzExpert/bean/TicketBean.java | 157 + .../gdxzExpert/bean/TicketDetailBean.java | 153 + .../gdxzExpert/bean/TimestampBean.java | 15 + .../cn/shangyu/gdxzExpert/bean/TreeBean.java | 17 + .../gdxzExpert/bean/TreeDetailBean.java | 80 + .../shangyu/gdxzExpert/bean/UGoodsBean.java | 124 + .../shangyu/gdxzExpert/bean/UserDataBean.java | 41 + .../shangyu/gdxzExpert/bean/VersionBean.java | 15 + .../cn/shangyu/gdxzExpert/bean/VideoBean.java | 211 + .../shangyu/gdxzExpert/bean/VideoBeanNew.java | 68 + .../gdxzExpert/bean/VideoDetailBean.java | 406 ++ .../gdxzExpert/bean/VideoMoreBean.java | 139 + .../gdxzExpert/bean/VideoOrderBean.java | 42 + .../gdxzExpert/bean/VideoRollBean.java | 95 + .../gdxzExpert/bean/VideoTeachDetailBean.java | 180 + .../gdxzExpert/bean/VideoWatchRecordBean.java | 232 + .../shangyu/gdxzExpert/bean/VipOrderBean.java | 47 + .../gdxzExpert/bean/VisitPlanBean.java | 47 + .../gdxzExpert/bean/VisitPlanListBean.java | 132 + .../gdxzExpert/bean/WFArticleListBean.java | 99 + .../gdxzExpert/bean/WFCollectBean.java | 179 + .../shangyu/gdxzExpert/bean/WFDetailBean.java | 140 + .../gdxzExpert/bean/WFSearchListBean.java | 125 + .../gdxzExpert/bean/WFYKArticleListBean.java | 168 + .../gdxzExpert/bean/WelfareListBean.java | 156 + .../bean/XHYKMediconDetailBean.java | 31 + .../gdxzExpert/bean/YKMediconBean.java | 49 + .../gdxzExpert/bean/YKMediconDetailBean.java | 78 + .../gdxzExpert/bean/YKMediconTitleBean.java | 49 + .../gdxzExpert/bean/YKMediconXHTitleBean.java | 41 + .../cn/shangyu/gdxzExpert/bean/YearsBean.java | 58 + .../shangyu/gdxzExpert/bean/ZengshuBean.java | 64 + .../cn/shangyu/gdxzExpert/bean/ctIdBean.java | 96 + .../cn/shangyu/gdxzExpert/bean/ctIdBeans.java | 13 + .../cn/shangyu/gdxzExpert/bean/endpoing.java | 70 + .../gdxzExpert/bean/endpoingetDetailBean.java | 44 + .../gdxzExpert/bean/hbvSymbolIdBean.java | 117 + .../gdxzExpert/bean/hbvSymbolIdBeans.java | 13 + .../cn/shangyu/gdxzExpert/bean/imBean.java | 104 + .../bean/liverElasticityIdBean.java | 87 + .../bean/liverElasticityIdBeans.java | 13 + .../gdxzExpert/bean/liverFunctionIdBean.java | 150 + .../gdxzExpert/bean/liverFunctionIdBeans.java | 13 + .../gdxzExpert/bean/patientExBean.java | 13 + .../gdxzExpert/bean/proDetailBean.java | 154 + .../gdxzExpert/bean/proMyListBean.java | 119 + .../shangyu/gdxzExpert/bean/proRoleBean.java | 48 + .../gdxzExpert/bean/proRoleTokenBean.java | 82 + .../shangyu/gdxzExpert/bean/proRuzuBean.java | 37 + .../gdxzExpert/bean/projectQueryForm.java | 66 + .../gdxzExpert/bean/projectQueryForm1.java | 24 + .../gdxzExpert/bean/projectQueryForm2.java | 13 + .../gdxzExpert/bean/projectQueryForm3.java | 31 + .../gdxzExpert/bean/projectQueryForm4.java | 206 + .../gdxzExpert/bean/projectQueryForm5.java | 49 + .../cn/shangyu/gdxzExpert/bean/sortItem.java | 28 + .../shangyu/gdxzExpert/bean/yongyaoBean.java | 663 +++ .../java/cn/shangyu/gdxzExpert/big/MyIm.java | 46 + .../big/activity/BeginBigActivity.java | 55 + .../big/activity/BigCoursewareActivity.java | 657 +++ .../big/activity/BigMainActivity.java | 161 + .../big/activity/BigMettingActivity.java | 579 ++ .../big/activity/BigMyLibraryActivity.java | 451 ++ .../big/activity/BigNewPatientActivity.java | 938 ++++ .../activity/BigNewSystemMessageActivity.java | 696 +++ .../big/activity/BigPatientActivity.java | 1284 +++++ .../big/activity/BigPatientVideoActivity.java | 1013 ++++ .../big/activity/BigPointsMallActivity.java | 800 +++ .../big/activity/BigPublicSearchActivity.java | 622 +++ .../big/activity/BigToolActivity.java | 80 + .../big/activity/BigVideoActivity.java | 1305 +++++ .../big/activity/BiggNewPatientActivity.java | 1139 ++++ .../big/activity/NormNewPatientActivity.java | 1156 ++++ .../big/activity/SetInformActivity.java | 310 ++ .../big/adapter/BigComplexViewMF.java | 61 + .../gdxzExpert/big/adapter/BigHuiAdapter.java | 118 + .../big/adapter/BigKejianAdapter.java | 414 ++ .../adapter/BigLibraryBookshelfAdapter.java | 112 + .../big/adapter/BigMeetingAdapter.java | 265 + .../big/adapter/BigNormalItemView.java | 84 + .../big/adapter/BigRollAdapter.java | 53 + .../big/adapter/BigToolAdapter.java | 13 + .../big/adapter/BigVideoSAdapter.java | 110 + .../big/adapter/BigVideoTeachAdapter.java | 147 + .../big/adapter/NormalItemViewBig.java | 130 + .../adapter/RecyclerItemClickListener.java | 59 + .../gdxzExpert/big/bean/OldPatientBean.java | 185 + .../big/fragment/BIgBookshelfFragment.java | 549 ++ .../big/fragment/BigFuMessageFragment.java | 325 ++ .../big/fragment/BigHomeFragment.java | 857 +++ .../big/fragment/BigHuiMessageFragment.java | 388 ++ .../big/fragment/BigMyFragment.java | 1009 ++++ .../big/fragment/BigOrderMessageFragment.java | 316 ++ .../big/fragment/BigRecommendFragment.java | 580 ++ .../big/fragment/BigSuiMessageFragment.java | 327 ++ .../cast/AbsRecyclerViewAdapter.java | 137 + .../cast/IPLVScreencastPlayerListener.java | 23 + .../shangyu/gdxzExpert/cast/PolyvAllCast.java | 184 + .../cast/PolyvIUIUpdateListener.java | 26 + .../gdxzExpert/cast/PolyvNetworkUtils.java | 261 + .../PolyvScreencastDeviceListAdapter.java | 108 + .../cast/PolyvScreencastManager.java | 340 ++ .../widget/PolyvScreencastSearchLayout.java | 703 +++ .../widget/PolyvScreencastStatusLayout.java | 427 ++ .../CustomStyleChartComposer.java | 2188 ++++++++ .../gdxzExpert/component/SimpleComponent.java | 81 + .../component/SimpleComponentNext.java | 72 + .../gdxzExpert/ecdemo/ECAsyncTask.java | 115 + .../gdxzExpert/ecdemo/RichTextBean.java | 98 + .../ecdemo/common/ActivityTaskUtils.java | 63 + .../ecdemo/common/AnimatorUtils.java | 71 + .../ecdemo/common/CCPAppManager.java | 406 ++ .../ecdemo/common/ECPreferenceSettings.java | 113 + .../ecdemo/common/ECPreferences.java | 195 + .../ecdemo/common/MethodInvoke.java | 110 + .../ecdemo/common/ObjectStringIdentifier.java | 28 + .../ecdemo/common/SDKVersionUtils.java | 22 + .../common/SwipTranslucentMethodUtils.java | 84 + .../ecdemo/common/SwipeActivityManager.java | 101 + .../ecdemo/common/ViewDragHelper.java | 1581 ++++++ .../ecdemo/common/base/CCPDotView.java | 162 + .../ecdemo/common/base/CCPFlipper.java | 555 ++ .../common/base/CCPLayoutListenerView.java | 114 + .../ecdemo/common/base/CommAdapter.java | 61 + .../base/OnLayoutChangedLinearLayout.java | 41 + .../common/utils/AudioManagerTools.java | 53 + .../ecdemo/common/utils/BitmapUtil.java | 213 + .../common/utils/ChattingAysnImageLoader.java | 397 ++ .../ecdemo/common/utils/ClipboardUtils.java | 69 + .../ecdemo/common/utils/CommomUtil.java | 450 ++ .../ecdemo/common/utils/CoreHandler.java | 114 + .../ecdemo/common/utils/CrashHandler.java | 431 ++ .../ecdemo/common/utils/DateUtil.java | 190 + .../ecdemo/common/utils/DemoUtils.java | 1395 +++++ .../ecdemo/common/utils/DensityUtil.java | 106 + .../ecdemo/common/utils/DialNumberMap.java | 78 + .../ecdemo/common/utils/ECPropertiesUtil.java | 46 + .../ecdemo/common/utils/EmoticonUtil.java | 423 ++ .../ecdemo/common/utils/ExportImgUtil.java | 50 + .../ecdemo/common/utils/FileAccessor.java | 370 ++ .../ecdemo/common/utils/FileUtils.java | 469 ++ .../ecdemo/common/utils/MediaPlayTools.java | 380 ++ .../ecdemo/common/utils/MimeTypeParser.java | 113 + .../ecdemo/common/utils/MimeTypes.java | 80 + .../ecdemo/common/utils/MimeTypesTools.java | 79 + .../ecdemo/common/utils/NotificationUtil.java | 85 + .../ecdemo/common/utils/ResourceHelper.java | 119 + .../common/utils/SupportSwipeModeUtils.java | 44 + .../gdxzExpert/ecdemo/photoview/Compat.java | 59 + .../photoview/DefaultOnDoubleTapListener.java | 98 + .../ecdemo/photoview/IPhotoView.java | 332 ++ .../ecdemo/photoview/PhotoView.java | 283 + .../ecdemo/photoview/PhotoViewAttacher.java | 1095 ++++ .../gestures/CupcakeGestureDetector.java | 142 + .../gestures/EclairGestureDetector.java | 86 + .../gestures/FroyoGestureDetector.java | 68 + .../photoview/gestures/GestureDetector.java | 28 + .../photoview/gestures/OnGestureListener.java | 27 + .../gestures/VersionedGestureDetector.java | 42 + .../ecdemo/photoview/log/LogManager.java | 33 + .../ecdemo/photoview/log/Logger.java | 116 + .../ecdemo/photoview/log/LoggerDefault.java | 76 + .../scrollerproxy/GingerScroller.java | 68 + .../photoview/scrollerproxy/IcsScroller.java | 33 + .../scrollerproxy/PreGingerScroller.java | 58 + .../scrollerproxy/ScrollerProxy.java | 48 + .../ecdemo/storage/AbstractSQLManager.java | 1575 ++++++ .../storage/BookDownloadSqlManager.java | 367 ++ .../ecdemo/storage/ContactSqlManager.java | 403 ++ .../storage/ConversationSqlManager.java | 385 ++ .../CoursewareBookDownloadSqlManager.java | 392 ++ .../ecdemo/storage/ECObservable.java | 67 + .../storage/ENBookDownloadSqlManager.java | 389 ++ .../ecdemo/storage/GroupMemberSqlManager.java | 392 ++ .../ecdemo/storage/GroupNoticeSqlManager.java | 214 + .../ecdemo/storage/GroupSqlManager.java | 598 ++ .../ecdemo/storage/IMessageSqlManager.java | 1661 ++++++ .../ecdemo/storage/ImgInfoSqlManager.java | 447 ++ .../ecdemo/storage/MeetingSqlManager.java | 16 + .../ecdemo/storage/MessageObservable.java | 33 + .../ecdemo/storage/OnMessageChange.java | 22 + .../ecdemo/storage/PatientSqlManager.java | 594 ++ .../storage/WFBookDownloadSqlManager.java | 394 ++ .../ecdemo/storage/_DatabaseManager.java | 50 + .../ecdemo/ui/ActivityTransition.java | 15 + .../gdxzExpert/ecdemo/ui/BaseFragment.java | 90 + .../gdxzExpert/ecdemo/ui/CCPActivityBase.java | 534 ++ .../gdxzExpert/ecdemo/ui/CCPActivityImpl.java | 55 + .../gdxzExpert/ecdemo/ui/CCPFragment.java | 347 ++ .../gdxzExpert/ecdemo/ui/CCPFragmentImpl.java | 46 + .../gdxzExpert/ecdemo/ui/CCPListAdapter.java | 162 + .../ecdemo/ui/ContactListFragment.java | 314 ++ .../ecdemo/ui/ConversationAdapter.java | 328 ++ .../ecdemo/ui/ConversationListFragment.java | 612 ++ .../ecdemo/ui/DiscussionListFragment.java | 289 + .../ecdemo/ui/ECFragmentActivity.java | 288 + .../gdxzExpert/ecdemo/ui/ECSuperActivity.java | 498 ++ .../ecdemo/ui/GroupListFragment.java | 241 + .../ecdemo/ui/LauncherActivity.java | 1024 ++++ .../gdxzExpert/ecdemo/ui/SDKCoreHelper.java | 413 ++ .../gdxzExpert/ecdemo/ui/SettingItem.java | 244 + .../gdxzExpert/ecdemo/ui/TabFragment.java | 55 + .../ecdemo/ui/chatting/Capability.java | 79 + .../ecdemo/ui/chatting/ChattingActivity.java | 166 + .../ecdemo/ui/chatting/ChattingFragment.java | 3942 +++++++++++++ .../ui/chatting/ChattingListAdapter2.java | 420 ++ .../chatting/ChattingListClickListener.java | 181 + .../ecdemo/ui/chatting/ChattingsRowUtils.java | 101 + .../ui/chatting/CustomerServiceHelper.java | 206 + .../ecdemo/ui/chatting/GlobalConstant.java | 8 + .../ecdemo/ui/chatting/HackyViewPager.java | 38 + .../ecdemo/ui/chatting/IMChattingHelper.java | 1092 ++++ .../ui/chatting/ImageGalleryActivity.java | 279 + .../ui/chatting/ImageGalleryFragment.java | 332 ++ .../chatting/ImageGralleryPagerActivity.java | 408 ++ .../ecdemo/ui/chatting/ImageMsgInfoEntry.java | 204 + .../ui/chatting/ImagePreviewActivity.java | 129 + .../ecdemo/ui/chatting/MsgInfo.java | 9 + .../ui/chatting/VideoRecordActivity.java | 477 ++ .../ecdemo/ui/chatting/ViewImageInfo.java | 142 + .../ui/chatting/base/ECPullDownView.java | 403 ++ .../ui/chatting/base/EmojiconEditText.java | 95 + .../ui/chatting/base/EmojiconHandler.java | 127 + .../ui/chatting/base/EmojiconRecents.java | 26 + .../chatting/base/EmojiconRecentsManager.java | 139 + .../ecdemo/ui/chatting/base/EmojiconSpan.java | 92 + .../ui/chatting/base/EmojiconTextView.java | 89 + .../base/OnListViewBottomListener.java | 5 + .../chatting/base/OnListViewTopListener.java | 5 + .../base/OnRefreshAdapterDataListener.java | 5 + .../ui/chatting/base/emoji/Emojicon.java | 88 + .../ecdemo/ui/chatting/base/emoji/Nature.java | 138 + .../ui/chatting/base/emoji/Objects.java | 252 + .../ecdemo/ui/chatting/base/emoji/People.java | 211 + .../ecdemo/ui/chatting/base/emoji/Places.java | 123 + .../ui/chatting/base/emoji/Symbols.java | 234 + .../ecdemo/ui/chatting/holder/BaseHolder.java | 169 + .../holder/DescriptionViewHolder.java | 100 + .../ui/chatting/holder/FileRowViewHolder.java | 68 + .../chatting/holder/ImageRowViewHolder.java | 72 + .../chatting/holder/RichTextViewHolder.java | 101 + .../ui/chatting/holder/SystemViewHolder.java | 36 + .../chatting/holder/VoiceRowViewHolder.java | 186 + .../ui/chatting/model/BaseChattingRow.java | 290 + .../ecdemo/ui/chatting/model/CCPEmoji.java | 63 + .../ui/chatting/model/ChattingRowType.java | 157 + .../ui/chatting/model/ChattingSystemRow.java | 81 + .../chatting/model/ContactStorageLogic.java | 23 + .../ui/chatting/model/Conversation.java | 185 + .../ui/chatting/model/ConversationItem.java | 25 + .../ui/chatting/model/DescriptionRxRow.java | 78 + .../ui/chatting/model/DescriptionTxRow.java | 81 + .../ui/chatting/model/DownloadModel.java | 193 + .../ecdemo/ui/chatting/model/FileRxRow.java | 155 + .../ecdemo/ui/chatting/model/FileTxRow.java | 152 + .../ui/chatting/model/IChattingRow.java | 51 + .../ecdemo/ui/chatting/model/ImageRxRow.java | 176 + .../ecdemo/ui/chatting/model/ImageTxRow.java | 140 + .../ecdemo/ui/chatting/model/ImgInfo.java | 281 + .../ui/chatting/model/PatientModel.java | 209 + .../ui/chatting/model/RichTextRxRow.java | 71 + .../ui/chatting/model/RichTextTxRow.java | 67 + .../ui/chatting/model/ViewHolderTag.java | 87 + .../ecdemo/ui/chatting/model/VoiceRxRow.java | 75 + .../ecdemo/ui/chatting/model/VoiceTxRow.java | 89 + .../ecdemo/ui/chatting/view/AppGrid.java | 272 + .../ecdemo/ui/chatting/view/AppPanel.java | 398 ++ .../ui/chatting/view/AppPanelControl.java | 148 + .../ui/chatting/view/CCPAnimImageView.java | 230 + .../ui/chatting/view/CCPChattingFooter2.java | 1449 +++++ .../ui/chatting/view/CCPMaskLayout.java | 121 + .../ui/chatting/view/ChatFooterPanel.java | 76 + .../chatting/view/ChattingItemContainer.java | 89 + .../view/ChattingListClickListener.java | 124 + .../ecdemo/ui/chatting/view/EmojiApapter.java | 142 + .../ecdemo/ui/chatting/view/EmojiGrid.java | 256 + .../ui/chatting/view/RecordPopupWindow.java | 48 + .../ecdemo/ui/chatting/view/SmileyPanel.java | 311 ++ .../ecdemo/ui/contact/AtSomeoneUI.java | 152 + .../ecdemo/ui/contact/BladeView.java | 175 + .../ecdemo/ui/contact/ContactLogic.java | 627 +++ .../ui/contact/ContactSelectListActivity.java | 187 + .../ui/contact/CustomSectionIndexer.java | 76 + .../ecdemo/ui/contact/ECContacts.java | 238 + .../ecdemo/ui/contact/GroupCardSelectUI.java | 195 + .../ecdemo/ui/contact/IndexScroller.java | 293 + .../ui/contact/MobileContactActivity.java | 654 +++ .../contact/MobileContactSelectActivity.java | 152 + .../ui/contact/PinnedHeaderListView.java | 167 + .../ecdemo/ui/contact/StringMatcher.java | 75 + .../ApplyWithGroupPermissionActivity.java | 226 + .../ecdemo/ui/group/BaseSearch.java | 59 + .../ecdemo/ui/group/DemoGroupNotice.java | 192 + .../ecdemo/ui/group/ECDiscussionActivity.java | 47 + .../ecdemo/ui/group/GroupNoticeActivity.java | 346 ++ .../ecdemo/ui/group/GroupProfileView.java | 107 + .../ecdemo/ui/group/GroupService.java | 536 ++ .../ecdemo/ui/group/NoticeSystemMessage.java | 187 + .../ecdemo/ui/group/SearchGroupActivity.java | 287 + .../ui/settings/EditConfigureActivity.java | 172 + .../settings/SettingPersionInfoActivity.java | 323 ++ .../ecdemo/ui/settings/SettingsActivity.java | 376 ++ .../ecdemo/ui/xiaomi/DemoMessageReceiver.java | 309 ++ .../ecdemo/ui/xiaomi/PermissionActivity.java | 49 + .../gdxzExpert/ecdemo/view/CCPTextView.java | 128 + .../gdxzExpert/ecdemo/view/ECListDialog.java | 124 + .../gdxzExpert/ecdemo/view/IBaseAdapter.java | 178 + .../ecdemo/view/NetWarnBannerView.java | 126 + .../ecdemo/view/PhotoBitmapDrawable.java | 78 + .../ecdemo/view/SwipeBackLayout.java | 461 ++ .../gdxzExpert/ecdemo/view/TopBarView.java | 455 ++ .../gdxzExpert/ecdemo/view/TopBarViewNew.java | 277 + .../ecdemo/view/VerticalImageSpan.java | 54 + .../gdxzExpert/fragment/AppliedFragment.java | 246 + .../fragment/BIngliCollectFragment.java | 295 + .../fragment/BasicInfoFragment.java | 127 + .../fragment/BookshelfFragment.java | 546 ++ .../fragment/BookshelfFragment2.java | 630 +++ .../CasediscussionCollentFragment.java | 236 + .../fragment/CasediscussionFragment.java | 279 + .../fragment/ChangjianQuestionFragment.java | 212 + .../fragment/ChinWFCollectFragment.java | 348 ++ .../fragment/ChineaseWFFragment.java | 285 + .../gdxzExpert/fragment/CicleFragment.java | 386 ++ .../fragment/CompletedFragment.java | 218 + .../fragment/ConfirmedFragment.java | 226 + .../fragment/DownloadCollectFragment.java | 211 + .../fragment/EEWFCollectFragment.java | 313 ++ .../gdxzExpert/fragment/EarningsFragment.java | 277 + .../gdxzExpert/fragment/Englishragment.java | 519 ++ .../gdxzExpert/fragment/ExCourseFragment.java | 605 ++ .../fragment/ExpenditureFragment.java | 260 + .../fragment/FuMessageFragment.java | 231 + .../fragment/GanDanDepartmentFragment.java | 762 +++ .../fragment/GanDanDoctorFragment.java | 812 +++ .../fragment/GanDanHospitalFragment.java | 765 +++ .../gdxzExpert/fragment/GanExFragment.java | 662 +++ .../fragment/GetWelfAreFragment.java | 378 ++ .../fragment/HepatopathyInfoFragment.java | 106 + .../HistoryPublicServiceFragment.java | 442 ++ .../HistoryPublicServiceFragment1.java | 393 ++ .../gdxzExpert/fragment/HomeFragment.java | 1914 +++++++ .../gdxzExpert/fragment/HomeNewFragment.java | 2098 +++++++ .../fragment/HuiMessageFragment.java | 293 + .../gdxzExpert/fragment/HuodongFragment.java | 271 + .../fragment/InteractionFragment.java | 21 + .../fragment/IntroduceClassFragment.java | 163 + .../fragment/IntroduceDetailFragment.java | 534 ++ .../fragment/IntroduceEvaluateFragment.java | 837 +++ .../fragment/KePuPublisheingFragment.java | 337 ++ .../fragment/KeepEducationFragment.java | 114 + .../fragment/KepuPublishedFragment.java | 363 ++ .../fragment/LibraryListFragment.java | 222 + .../fragment/MedicineBookFragment.java | 350 ++ .../gdxzExpert/fragment/MeetingFragment.java | 986 ++++ .../gdxzExpert/fragment/MinFragment.java | 318 ++ .../fragment/MoreToOneConsultFragment.java | 193 + .../fragment/MyCasediscussionFragment.java | 281 + .../fragment/MyCoolectCourseFragment.java | 348 ++ .../fragment/MyDownloadCourseFragment.java | 364 ++ .../gdxzExpert/fragment/MyFragment.java | 843 +++ .../fragment/MyHuodongFragment.java | 266 + .../gdxzExpert/fragment/MyNewFragment.java | 966 ++++ .../fragment/MyProjectFragment.java | 522 ++ .../fragment/NewPublicServiceFragment.java | 519 ++ .../fragment/NewPublicServiceFragment1.java | 368 ++ .../gdxzExpert/fragment/NewsFragment.java | 872 +++ .../fragment/OrderMessageFragment.java | 223 + .../OutpatientArrangementFragment.java | 479 ++ .../gdxzExpert/fragment/OverviewFragment.java | 792 +++ .../fragment/PatientListFragment.java | 777 +++ .../fragment/PatientTeachFragment.java | 669 +++ .../fragment/ProjectManageFragment.java | 430 ++ .../gdxzExpert/fragment/PubMedFragment.java | 124 + .../fragment/ScientificMyFragment.java | 362 ++ .../fragment/ScientificOtherFragment.java | 352 ++ .../fragment/ScientificSystemFragment.java | 403 ++ .../fragment/SearchLibiaryFragment.java | 171 + .../fragment/SearchPaperFragment.java | 485 ++ .../fragment/ShareCaseCollectFragment.java | 308 ++ .../fragment/ShareCaseFragment.java | 385 ++ .../fragment/SmallCourseFragment.java | 552 ++ .../fragment/StopNoticeFragment.java | 295 + .../gdxzExpert/fragment/SuggestFragment.java | 272 + .../fragment/SuiMessageFragment.java | 224 + .../fragment/ToolsListFragment.java | 119 + .../fragment/VipCompleteFragment.java | 489 ++ .../fragment/VipPendingFragment.java | 522 ++ .../fragment/VipServicesFragment.java | 522 ++ .../fragment/VisitPlanFragment.java | 384 ++ .../gdxzExpert/fragment/WFSearchFragment.java | 807 +++ .../gdxzExpert/fragment/WelfAreFragment.java | 367 ++ .../fragment/WelfareDetailFragment.java | 236 + .../gdxzExpert/fragment/YiganFragment.java | 2207 ++++++++ .../gdxzExpert/http/HttpClientFactory.java | 188 + .../shangyu/gdxzExpert/http/HttpHelper.java | 386 ++ .../cn/shangyu/gdxzExpert/http/HttpRetry.java | 78 + .../http/OnCallBackFromActivity.java | 5 + .../gdxzExpert/http/OnCallBackFromNet.java | 13 + .../listener/InteractiveListener.java | 5 + .../gdxzExpert/manager/ThreadManager.java | 74 + .../shangyu/gdxzExpert/netease/DemoCache.java | 66 + .../netease/DemoPrivatizationConfig.java | 284 + .../gdxzExpert/netease/NIMInitManager.java | 126 + .../netease/NimSDKOptionConfig.java | 223 + .../netease/activity/MessageInfoActivity.java | 181 + .../gdxzExpert/netease/bagder/Badger.java | 58 + .../big/BigCommonRecentViewHolder.java | 70 + .../netease/big/BigRecentViewHolder.java | 314 ++ .../netease/chatroom/ChatRoomActivity.java | 283 + .../netease/chatroom/ChatRoomFragment.java | 169 + .../chatroom/ChatRoomSessionHelper.java | 42 + .../netease/chatroom/ChatRoomTab.java | 42 + .../netease/chatroom/ChatRoomTabFragment.java | 58 + .../chatroom/ChatRoomTabPagerAdapter.java | 69 + .../netease/chatroom/MasterFragment.java | 141 + .../netease/chatroom/MasterTabFragment.java | 27 + .../netease/chatroom/MessageTabFragment.java | 59 + .../config/DefaultContactProvider.java | 44 + .../netease/config/DemoServers.java | 18 + .../netease/config/ExtraOptions.java | 11 + .../netease/config/LogoutHelper.java | 72 + .../netease/config/NimUserInfoProvider.java | 119 + .../netease/config/ServerConfig.java | 19 + .../gdxzExpert/netease/config/ServerEnvs.java | 12 + .../config/preference/Preferences.java | 99 + .../config/preference/UserPreferences.java | 283 + .../netease/constants/EnterMode.java | 11 + .../gdxzExpert/netease/constants/Extras.java | 19 + .../netease/contact/ContactHelper.java | 38 + .../netease/contact/ContactHttpClient.java | 135 + .../netease/contact/UserConstant.java | 14 + .../netease/contact/UserProfileActivity.java | 644 +++ .../netease/contact/UserUpdateHelper.java | 48 + .../event/DemoOnlineStateContentProvider.java | 45 + .../gdxzExpert/netease/event/EventFilter.java | 92 + .../netease/event/NetStateCode.java | 57 + .../gdxzExpert/netease/event/OnlineState.java | 62 + .../netease/event/OnlineStateCode.java | 40 + .../netease/event/OnlineStateEventCache.java | 65 + .../netease/event/OnlineStateEventConfig.java | 46 + .../event/OnlineStateEventManager.java | 450 ++ .../event/OnlineStateEventSubscribe.java | 234 + .../netease/main/CustomNotificationCache.java | 38 + .../gdxzExpert/netease/main/MainActivity.java | 528 ++ .../gdxzExpert/netease/main/ReminderId.java | 7 + .../gdxzExpert/netease/main/ReminderItem.java | 53 + .../netease/main/ReminderManager.java | 98 + .../netease/main/ReminderSettings.java | 12 + .../main/SystemMessageUnreadManager.java | 23 + .../main/adapter/MainTabPagerAdapter.java | 62 + .../main/fragment/ChatRoomListFragment.java | 31 + .../main/fragment/ContactListFragment.java | 88 + .../main/fragment/MainTabFragment.java | 58 + .../main/fragment/SessionListFragment.java | 286 + .../main/fragment/SessionListFragmentNew.java | 410 ++ .../main/viewholder/FuncViewHolder.java | 157 + .../mixpush/DemoHwPushMessageService.java | 35 + .../mixpush/DemoMixPushMessageHandler.java | 132 + .../mixpush/DemoPushContentProvider.java | 87 + .../netease/mixpush/MixPushActivity.java | 58 + .../gdxzExpert/netease/model/Extras.java | 8 + .../gdxzExpert/netease/model/MainTab.java | 58 + .../netease/model/SettingTemplate.java | 103 + .../gdxzExpert/netease/model/SettingType.java | 13 + .../netease/ptop/BaseMessageActivity.java | 172 + .../netease/ptop/CommonRecentViewHolder.java | 61 + .../netease/ptop/MessageFragment.java | 1587 ++++++ .../netease/ptop/P2PMessageActivity.java | 548 ++ .../netease/ptop/RecentContactAdapter.java | 70 + .../netease/ptop/RecentContactsFragment.java | 1080 ++++ .../netease/ptop/RecentViewHolder.java | 238 + .../netease/session/InputPanel.java | 955 ++++ .../netease/session/SessionHelper.java | 786 +++ .../netease/session/action/EasyAction.java | 43 + .../session/action/HospitalAction.java | 56 + .../netease/session/action/ImageAction.java | 183 + .../session/action/ShoppingAction.java | 168 + .../netease/session/action/TeachAction.java | 135 + .../netease/session/action/VideoAction.java | 297 + .../netease/session/action/VisitAction.java | 89 + .../session/extension/CustomAttachParser.java | 74 + .../session/extension/CustomAttachment.java | 35 + .../extension/CustomAttachmentType.java | 21 + .../extension/DefaultCustomAttachment.java | 35 + .../session/extension/GuessAttachment.java | 70 + .../extension/MultiRetweetAttachment.java | 263 + .../extension/RedPacketAttachment.java | 59 + .../extension/RedPacketOpenedAttachment.java | 120 + .../session/extension/TeachAttachment.java | 120 + .../viewholder/MsgViewHolderPicture.java | 123 + .../viewholder/MsgViewHolderTeach.java | 229 + .../session/viewholder/MsgViewHolderTip.java | 60 + .../thridparty/ChatRoomHttpClient.java | 231 + .../netease/ui/FadeInOutPageTransformer.java | 34 + .../netease/ui/PagerSlidingTabStrip.java | 663 +++ .../netease/ui/SlidingTabPagerAdapter.java | 130 + .../netease/uinfo/UserInfoHelper.java | 355 ++ .../gdxzExpert/netease/util/LogHelper.java | 33 + .../netease/util/crash/AppCrashHandler.java | 51 + .../netease/util/crash/CrashSaver.java | 122 + .../netease/util/crash/CrashSnapshot.java | 239 + .../netease/util/sys/InstallUtil.java | 116 + .../netease/util/sys/SysInfoUtil.java | 69 + .../netease/widget/ChatRoomImageView.java | 85 + .../patientlist/CharacterParser.java | 217 + .../patientlist/PinyinComparator.java | 21 + .../gdxzExpert/patientlist/SideBar.java | 140 + .../gdxzExpert/patientlist/SortModel.java | 20 + .../photo/AlbumPreviewActivity.java | 299 + .../gdxzExpert/photo/PreviewViewPager.java | 39 + .../pointsmall/BuyIntegerActivty.java | 514 ++ .../pointsmall/ContactEmailActivity.java | 763 +++ .../pointsmall/ExchangeDetailActivity.java | 432 ++ .../gdxzExpert/pointsmall/HeaderGridView.java | 397 ++ .../pointsmall/IntegralTicketActivity.java | 407 ++ .../pointsmall/MyExchangeActivity.java | 347 ++ .../pointsmall/OnlineExchangeActivity.java | 283 + .../pointsmall/PointsMallActivity.java | 793 +++ .../pointsmall/ProductDetailActivity.java | 404 ++ .../pointsmall/PullToRefreshHeadGridView.java | 107 + .../pointsmall/ShippingAddressActivity.java | 43 + .../pointsmall/YuanJiaoImageView.java | 37 + .../CourseDetailPolyvPlayerActivity.java | 1685 ++++++ .../polyvplayer/ExchangeAreaActivity.java | 718 +++ .../polyvplayer/FreeAreaActivity.java | 699 +++ .../polyvplayer/MyDownLoadVideoActivity.java | 74 + .../OnlineVideoExchangeActivity.java | 347 ++ .../polyvplayer/PolyvDownloadActivity.java | 164 + .../polyvplayer/PolyvPermission.java | 221 + .../polyvplayer/PolyvPlayerActivity.java | 1491 +++++ .../polyvplayer/QualityCourseActivity.java | 337 ++ .../VideoDetailPolyvPlayerActivity.java | 3995 +++++++++++++ .../polyvplayer/VideohistoryActivity.java | 468 ++ .../adapter/AbsRecyclerViewAdapter.java | 140 + .../adapter/CurriculumAdapter.java | 99 + .../polyvplayer/adapter/ExchangeAdapter.java | 110 + .../polyvplayer/adapter/FreeAdapter.java | 97 + .../adapter/MyListSeriesAdapter.java | 90 + .../adapter/PolyvDownloadListViewAdapter.java | 804 +++ .../adapter/PolyvPlayerFragmentAdapter.java | 32 + .../cast/PolyvIUIUpdateListener.java | 26 + .../database/PolyvDownloadSQLiteHelper.java | 161 + .../database/PolyvUploadSQLiteHelper.java | 135 + .../fragment/CurriculumFragment.java | 91 + .../fragment/ExchangeFragment.java | 131 + .../fragment/LazyLoadFragment.java | 128 + .../fragment/PolyvDownloadFragment.java | 269 + .../fragment/PolyvPlayerTabFragment.java | 145 + .../PolyvPlayerViewPagerFragment.java | 166 + .../polyvplayer/fragment/SummaryFragment.java | 114 + .../fragment/VideoCurriculumFragment.java | 43 + .../VideoDetailPolyvPlayerTabFragment.java | 149 + ...deoDetailPolyvPlayerViewPagerFragment.java | 132 + .../fragment/VideoInfoFragment.java | 43 + .../listener/GetHeightListener.java | 9 + .../polyvplayer/listener/GetVidListener.java | 9 + .../PolyvAnimateFirstDisplayListener.java | 33 + .../player/PolyvPlayerAudioCoverView.java | 165 + .../player/PolyvPlayerAuxiliaryView.java | 147 + .../player/PolyvPlayerLightView.java | 51 + .../player/PolyvPlayerMediaController.java | 1922 +++++++ .../player/PolyvPlayerPreviewView.java | 179 + .../player/PolyvPlayerProgressView.java | 76 + .../player/PolyvPlayerVolumeView.java | 51 + .../polyvplayer/ppt/PolyvPPTView.java | 153 + .../ppt/PolyvViceScreenLayout.java | 293 + .../server/PolyvVodBusinessServer.java | 83 + .../server/request/PolyvGetByUploader.java | 100 + .../server/request/PolyvPlayTimes.java | 72 + .../server/vo/PolyvGetByUploaderResult.java | 229 + .../server/vo/PolyvPlayTimesResult.java | 93 + .../service/PolyvBackgroundPlayService.java | 96 + .../polyvplayer/service/PolyvPlayService.java | 54 + .../util/PolyvErrorMessageUtils.java | 315 ++ .../polyvplayer/util/PolyvImageLoader.java | 150 + .../polyvplayer/util/PolyvKeyBoardUtils.java | 32 + .../polyvplayer/util/PolyvNetworkUtils.java | 230 + .../polyvplayer/util/PolyvScreenUtils.java | 138 + .../polyvplayer/util/PolyvSensorHelper.java | 57 + .../polyvplayer/util/PolyvStorageUtils.java | 57 + .../polyvplayer/util/PolyvTimeUtils.java | 108 + .../polyvplayer/view/IcsLinearLayout.java | 431 ++ .../polyvplayer/view/LinearListView.java | 356 ++ .../view/PolyvCircleProgressView.java | 156 + .../polyvplayer/view/PolyvGrayImageView.java | 40 + .../polyvplayer/view/PolyvLoadingLayout.java | 126 + .../view/PolyvSimpleSwipeRefreshLayout.java | 41 + .../polyvplayer/view/PolyvTickSeekBar.java | 283 + .../polyvplayer/view/PolyvTickTips.java | 149 + .../gdxzExpert/protocol/BaseProtocol.java | 151 + .../protocol/PatientListProtocol.java | 48 + .../pulltorefreshview/ILoadingLayout.java | 57 + .../pulltorefreshview/IPullToRefresh.java | 245 + .../pulltorefreshview/LoadingLayoutProxy.java | 72 + .../pulltorefreshview/OverscrollHelper.java | 177 + .../PullToRefreshAdapterViewBase.java | 475 ++ .../pulltorefreshview/PullToRefreshBase.java | 1668 ++++++ .../PullToRefreshExpandableListView.java | 102 + .../PullToRefreshGridView.java | 102 + .../PullToRefreshHorizontalScrollView.java | 111 + .../PullToRefreshListView.java | 337 ++ .../PullToRefreshScrollView.java | 110 + .../PullToRefreshWebView.java | 166 + .../extras/PullToRefreshWebView2.java | 131 + .../extras/SoundPullEventListener.java | 95 + .../internal/EmptyViewMethodAccessor.java | 43 + .../internal/FlipLoadingLayout.java | 145 + .../internal/IndicatorLayout.java | 146 + .../internal/LoadingLayout.java | 394 ++ .../internal/LoadingLayoutNew.java | 383 ++ .../internal/RotateLoadingLayout.java | 109 + .../internal/TweenAnimLoadingLayout.java | 62 + .../internal/TweenAnimLoadingLayoutNew.java | 60 + .../pulltorefreshview/internal/Utils.java | 13 + .../internal/ViewCompat.java | 70 + .../gdxzExpert/report/BaseReportBean.java | 42 + .../shangyu/gdxzExpert/report/CommUtil.java | 246 + .../gdxzExpert/report/ReportService.java | 320 ++ .../shangyu/gdxzExpert/report/reportBean.java | 191 + .../gdxzExpert/service/NotifyUtil.java | 424 ++ .../gdxzExpert/service/UpdateService.java | 271 + .../cn/shangyu/gdxzExpert/splash/GuideUI.java | 239 + .../gdxzExpert/splash/UniappSplashView.java | 86 + .../shangyu/gdxzExpert/splash/WelcomeUI.java | 638 +++ .../gdxzExpert/ui/CircleImageDrawable.java | 73 + .../gdxzExpert/ui/CustomProgressDialog.java | 78 + .../gdxzExpert/ui/RoundCornerImageView.java | 90 + .../shangyu/gdxzExpert/ui/SuperFileView2.java | 129 + .../cn/shangyu/gdxzExpert/umeng/AppUtils.java | 45 + .../gdxzExpert/umeng/AuthPageConfig.java | 18 + .../gdxzExpert/umeng/BaseUIConfig.java | 131 + .../gdxzExpert/umeng/FullPortBindConfig.java | 196 + .../gdxzExpert/umeng/FullPortConfig.java | 413 ++ .../gdxzExpert/umeng/MfrMessageActivity.java | 316 ++ .../umeng/NewSystemMessageActivity.java | 624 +++ .../cn/shangyu/gdxzExpert/umeng/PushBean.java | 130 + .../gdxzExpert/umeng/PushConstants.java | 65 + .../umeng/PushCourseUrlDetailActivity.java | 1088 ++++ .../shangyu/gdxzExpert/umeng/PushHelper.java | 378 ++ .../umeng/PushNewsDetailActivity.java | 1686 ++++++ .../gdxzExpert/umeng/PushZhiBoActivity.java | 685 +++ .../shangyu/gdxzExpert/umeng/UverifyHelp.java | 64 + .../gdxzExpert/umeng/WebH5Activity.java | 199 + .../cn/shangyu/gdxzExpert/utils/AESUtil.java | 70 + .../gdxzExpert/utils/AppFrontBackHelper.java | 94 + .../shangyu/gdxzExpert/utils/AutoGetCode.java | 51 + .../gdxzExpert/utils/BackHandlerHelper.java | 61 + .../gdxzExpert/utils/BadgeCountUtils.java | 24 + .../shangyu/gdxzExpert/utils/BadgeUtil.java | 87 + .../shangyu/gdxzExpert/utils/BadgeUtils.java | 38 + .../shangyu/gdxzExpert/utils/Base64Util.java | 202 + .../shangyu/gdxzExpert/utils/Base64Utils.java | 137 + .../gdxzExpert/utils/Base64Utils11.java | 225 + .../shangyu/gdxzExpert/utils/CommonUtil.java | 492 ++ .../gdxzExpert/utils/ConfigCacheUtil.java | 146 + .../cn/shangyu/gdxzExpert/utils/Constant.java | 216 + .../gdxzExpert/utils/CopyButtonLibrary.java | 35 + .../gdxzExpert/utils/CrashHandler.java | 417 ++ .../gdxzExpert/utils/DataCleanManager.java | 257 + .../shangyu/gdxzExpert/utils/DateGetAge.java | 37 + .../cn/shangyu/gdxzExpert/utils/DateUtil.java | 562 ++ .../gdxzExpert/utils/DecimalInputFilter.java | 73 + .../shangyu/gdxzExpert/utils/DensityUtil.java | 181 + .../gdxzExpert/utils/DestroyActivityUtil.java | 33 + .../shangyu/gdxzExpert/utils/DialogUtil.java | 151 + .../gdxzExpert/utils/DownLoadUrlImage.java | 172 + .../gdxzExpert/utils/EncryptionKit.java | 61 + .../gdxzExpert/utils/ExitReceiver.java | 55 + .../shangyu/gdxzExpert/utils/FileUtils.java | 265 + .../shangyu/gdxzExpert/utils/GrayManager.java | 41 + .../shangyu/gdxzExpert/utils/GsonTools.java | 78 + .../shangyu/gdxzExpert/utils/HashTools.java | 119 + .../gdxzExpert/utils/HmacSha256ApiVerify.java | 144 + .../gdxzExpert/utils/HttpMD5SendInfoUtil.java | 363 ++ .../shangyu/gdxzExpert/utils/HttpUtils.java | 57 + .../gdxzExpert/utils/ImageOptions.java | 52 + .../cn/shangyu/gdxzExpert/utils/IoUtils.java | 18 + .../utils/ItemDragHelperCallback.java | 82 + .../shangyu/gdxzExpert/utils/JsonParser.java | 119 + .../gdxzExpert/utils/KeDaXunFeiUtil.java | 123 + .../cn/shangyu/gdxzExpert/utils/Keys.java | 36 + .../utils/ListViewForScrollView.java | 36 + .../cn/shangyu/gdxzExpert/utils/LogUtil.java | 203 + .../cn/shangyu/gdxzExpert/utils/MD5Utils.java | 44 + .../cn/shangyu/gdxzExpert/utils/MathUtil.java | 155 + .../cn/shangyu/gdxzExpert/utils/Md5Tool.java | 37 + .../shangyu/gdxzExpert/utils/MemoryTools.java | 115 + .../gdxzExpert/utils/MyUserIconUtil.java | 228 + .../gdxzExpert/utils/NotificationUtils.java | 135 + .../gdxzExpert/utils/OneClickUtil.java | 46 + .../gdxzExpert/utils/PermissionActivity.java | 146 + .../gdxzExpert/utils/PermissionListener.java | 23 + .../gdxzExpert/utils/PermissionUtils.java | 326 ++ .../gdxzExpert/utils/PermissionsUtil.java | 142 + .../gdxzExpert/utils/PlistHandler.java | 132 + .../shangyu/gdxzExpert/utils/RSA1Utils.java | 379 ++ .../shangyu/gdxzExpert/utils/RSAUtils11.java | 358 ++ .../shangyu/gdxzExpert/utils/RSAUtils2.java | 224 + .../cn/shangyu/gdxzExpert/utils/RsaUtils.java | 60 + .../cn/shangyu/gdxzExpert/utils/SQLdm.java | 81 + .../gdxzExpert/utils/SendCardUtils.java | 84 + .../gdxzExpert/utils/ServiceUtils.java | 36 + .../SetListViewHeightBasedOnChildrenUtil.java | 71 + .../gdxzExpert/utils/SharePrefUtil.java | 311 ++ .../shangyu/gdxzExpert/utils/ShareUtils.java | 241 + .../cn/shangyu/gdxzExpert/utils/Sign.java | 60 + .../cn/shangyu/gdxzExpert/utils/SignUtil.java | 127 + .../shangyu/gdxzExpert/utils/SmsObserver.java | 69 + .../cn/shangyu/gdxzExpert/utils/StaUtil.java | 56 + .../shangyu/gdxzExpert/utils/StreamTool.java | 17 + .../shangyu/gdxzExpert/utils/StringUtil.java | 505 ++ .../cn/shangyu/gdxzExpert/utils/TikaUtil.java | 107 + .../shangyu/gdxzExpert/utils/ToastUtil.java | 98 + .../cn/shangyu/gdxzExpert/utils/UIUtils.java | 217 + .../gdxzExpert/utils/UMengShareHelper.java | 73 + .../gdxzExpert/utils/UpdateVersionUtils.java | 337 ++ .../java/cn/shangyu/gdxzExpert/utils/Url.java | 726 +++ .../gdxzExpert/utils/ValidateUtils.java | 159 + .../gdxzExpert/utils/WebClientDevWrapper.java | 122 + .../view/AutoHideIMEFrameLayout.java | 65 + .../gdxzExpert/view/AutoScaleTextView.java | 98 + .../gdxzExpert/view/CommonProgressDialog.java | 176 + .../gdxzExpert/view/DrawableCenterButton.java | 44 + .../view/DrawableCenterButtonR.java | 47 + .../view/DrawableCenterCheckBox.java | 47 + .../cn/shangyu/gdxzExpert/view/DrugView.java | 322 ++ .../gdxzExpert/view/GSpaceItemDecoration.java | 262 + .../view/GroupManageSingleView.java | 287 + .../gdxzExpert/view/GroupmanageView.java | 333 ++ .../shangyu/gdxzExpert/view/HideIMEUtil.java | 37 + .../gdxzExpert/view/IndexViewPager.java | 68 + .../java/cn/shangyu/gdxzExpert/view/Info.java | 40 + .../view/ItemLongClickedPopWindow.java | 81 + .../gdxzExpert/view/KeyboardLayout.java | 67 + .../gdxzExpert/view/MyDatePickerDialog.java | 131 + .../cn/shangyu/gdxzExpert/view/MyEditext.java | 31 + .../shangyu/gdxzExpert/view/MyGridView.java | 33 + .../cn/shangyu/gdxzExpert/view/MyLine.java | 39 + .../shangyu/gdxzExpert/view/MyListView.java | 35 + .../shangyu/gdxzExpert/view/MyScrollView.java | 24 + .../shangyu/gdxzExpert/view/MyTextView.java | 45 + .../gdxzExpert/view/NormalItemView.java | 83 + .../gdxzExpert/view/NotNormalItemView.java | 84 + .../gdxzExpert/view/PhotoGridItem.java | 64 + .../cn/shangyu/gdxzExpert/view/PhotoView.java | 1484 +++++ .../gdxzExpert/view/RollViewPager.java | 372 ++ .../view/RotateGestureDetector.java | 67 + .../gdxzExpert/view/RoundImageView.java | 38 + .../gdxzExpert/view/ScollViewGridView.java | 29 + .../gdxzExpert/view/ScollViewListView.java | 29 + .../gdxzExpert/view/SpaceItemDecoration.java | 51 + .../gdxzExpert/view/TwoRoundImageView.java | 46 + .../cn/shangyu/gdxzExpert/view/X5WebView.java | 90 + .../gdxzExpert/view/pullable/Pullable.java | 19 + .../view/pullable/PullableScrollView.java | 85 + .../gdxzExpert/view/viewbadger/BadgeView.java | 472 ++ .../cn/shangyu/gdxzExpert/web/WeBean.java | 194 + .../widge/pickerview/EditPopupWindow.java | 167 + .../widge/pickerview/OptionsPopupWindow.java | 233 + .../widge/pickerview/OverflowAdapter.java | 248 + .../widge/pickerview/OverflowHelper.java | 157 + .../gdxzExpert/widge/pickerview/PopMenu.java | 145 + .../pickerview/SelectedPhotoPopupWindow.java | 163 + .../widge/pickerview/TimePopupWindow.java | 179 + .../pickerview/lib/ArrayWheelAdapter.java | 55 + .../widge/pickerview/lib/DensityUtil.java | 25 + .../pickerview/lib/NumericWheelAdapter.java | 73 + .../lib/OnWheelChangedListener.java | 20 + .../pickerview/lib/OnWheelScrollListener.java | 18 + .../widge/pickerview/lib/ScreenInfo.java | 74 + .../widge/pickerview/lib/WheelAdapter.java | 25 + .../widge/pickerview/lib/WheelOptions.java | 262 + .../widge/pickerview/lib/WheelTime.java | 248 + .../widge/pickerview/lib/WheelView.java | 1022 ++++ .../widge/pickerview/lib/WheelViewNew.java | 91 + .../gdxzExpert/widget/BitmapCache.java | 35 + .../gdxzExpert/widget/CircleImageView.java | 349 ++ .../gdxzExpert/widget/CircularRectangle.java | 161 + .../widget/CommentExpandableListView.java | 105 + .../widget/CustomClearEditText.java | 130 + .../gdxzExpert/widget/CustomToast.java | 62 + .../gdxzExpert/widget/CustomerDialog.java | 84 + .../gdxzExpert/widget/ECAlertDialog.java | 465 ++ .../gdxzExpert/widget/ECListDialog.java | 124 + .../gdxzExpert/widget/ECProgressDialog.java | 106 + .../gdxzExpert/widget/ExpandTextView.java | 528 ++ .../gdxzExpert/widget/GridRadioGroup.java | 71 + .../gdxzExpert/widget/LoadingPage.java | 197 + .../gdxzExpert/widget/MyAlertDialog.java | 233 + .../widget/NestedScrollWebView.java | 148 + .../gdxzExpert/widget/NewECListDialog.java | 124 + .../widget/OverLinkMovementMethod.java | 35 + .../PullToRefreshExpandableListView.java | 742 +++ .../shangyu/gdxzExpert/widget/RatingBar.java | 259 + .../gdxzExpert/widget/ResizeLayout.java | 39 + .../gdxzExpert/widget/SimpleTextWatcher.java | 21 + .../widget/SnapUpCountDownTimerView.java | 172 + .../shangyu/gdxzExpert/widget/TimeButton.java | 170 + .../gdxzExpert/widget/WordWrapView.java | 171 + .../widget/goodratingbar/BaseDrawable.java | 174 + .../goodratingbar/ClipDrawableCompat.java | 96 + .../widget/goodratingbar/DrawableCompat.java | 26 + .../goodratingbar/MaterialRatingBar.java | 671 +++ .../goodratingbar/MaterialRatingBarOld.java | 668 +++ .../goodratingbar/MaterialRatingDrawable.java | 108 + .../widget/goodratingbar/ThemeUtils.java | 32 + .../widget/goodratingbar/TileDrawable.java | 75 + .../goodratingbar/TintableDrawable.java | 79 + .../gdxzExpert/wxapi/WXEntryActivity.java | 308 ++ .../gdxzExpert/wxapi/WXPayEntryActivity.java | 76 + .../java/com/zbar/lib/CaptureActivity.java | 581 ++ .../main/java/com/zbar/lib/ZbarManager.java | 19 + .../lib/bitmap/InvertedLuminanceSource.java | 67 + .../com/zbar/lib/bitmap/LuminanceSource.java | 142 + .../lib/bitmap/PlanarYUVLuminanceSource.java | 132 + .../zbar/lib/camera/AutoFocusCallback.java | 41 + .../camera/CameraConfigurationManager.java | 251 + .../com/zbar/lib/camera/CameraManager.java | 143 + .../zbar/lib/camera/FlashlightManager.java | 127 + .../com/zbar/lib/camera/PreviewCallback.java | 52 + .../lib/decode/CaptureActivityHandler.java | 83 + .../com/zbar/lib/decode/DecodeHandler.java | 104 + .../com/zbar/lib/decode/DecodeThread.java | 47 + .../com/zbar/lib/decode/FinishListener.java | 35 + .../com/zbar/lib/decode/InactivityTimer.java | 57 + 1361 files changed, 367452 insertions(+) create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AccumulatePointsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardFirstActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardSecondActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddCaseRecordActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddGroupActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientAppointmentActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1Activity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1NewActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddPractisingaddressActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddProclamationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddSecletBankCardActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitDateActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitPlanActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddcasediscussionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AddtagActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/AdvertActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BindNumberActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BindWeChatActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BiochemistryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BookDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BookMagazineDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BookTop10Activity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCourisiuuonCollectBIngliActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCussionDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseHistoryDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseRecordActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussioncollentActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CasehistoryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ChangePasswordActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ChoosehospitalActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CommunicationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ConfirmActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditTitleActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ContributingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectCourseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectNewsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectTeachActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseDetailOrderActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseUrlDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CoursewareActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/CtActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/DonatingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/DownloadCollectActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWith2Atvitity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWithActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/DuiFuliActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/EditEmailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/EditOfficePhoneActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/EditPhoneActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/EditProfileActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/EnglishDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/EvaluateActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ExitDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ExpertDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/FaPiaoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/FibroActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/FileDisplayActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/FindHelpActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetRestPwdActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/FreeagentsearchActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailTopActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GDLiveBroadcastActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanDoctorActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanEventActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHospitalActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseDetialActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanConsultActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanMeetingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GetInterrogationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatSelectPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupManageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupSelectParentActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/GuanggaoDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/H5AllActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HbvdnaActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HeroListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryMettingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HomeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalDetialActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalSearchActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/IWantDonateActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/IncomeDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/InfomationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/IntroductionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/InviteContactActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/InvitePatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/KePuDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/KeyWordActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LeaveMsgActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LinChuangActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginNewActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LogisticsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveContentEditActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveEditName.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MainActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MindDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MonthlyServiceActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MoocimglActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDoctorActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDongtaiActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreLeaveMsgActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreNoticeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccount2Activity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccountActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBankCardActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBillActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCicleActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCircleCommunicationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectBIngliActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCoursewareActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDetailInfoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadCourseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownloadActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFlowerActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFuliCardActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyIdeaActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyLibraryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyMindActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyProjectsDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyQrCodeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyScientificResearchActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyUserIconActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVIPActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVisitsDressActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWFArticleActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWelfAreActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWorkTableActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollowActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollow_upProjectActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NavigationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NewContributingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NewLessonsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NewPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/NoteDressEditActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/OrderListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/OutofPatientNoticeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/OutpatientInfoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PastHistoryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEditActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationApplyActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationNoticeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientGroupActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNickNameEditActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNoteContentEditActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientTeachActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PayActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PayClassActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PayCourseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PayResultActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PdfViewActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbum2Activity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbumActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PoMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PractiseAddressManagementActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ProjectDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicConsultationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicSearchActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceDetailsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/QuckMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/RankingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/RegistActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ReleaseStopActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ReplyFeedbackActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ResearchActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ScientificDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchClassActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchCourseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchForGroupActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchHistoryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchNewsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientTeachActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchScienceActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoTeachActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectBankCardActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateClinicActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateTimeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectedPhotoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgPatientNameActicity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SendMindActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingAndHelpActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingFeedbackActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingServiceActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingVersionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingZhiboFeedbackActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangNewActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TelephoneConsultationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingUrlDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/Text.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TicketDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ToolsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/TopicAcitivty.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/UpanExchangeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoDetilActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoJHActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoMoreActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoTeachActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitDerailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitPlanActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/WFArticleListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/WebActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/WelfareDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/WriteTopicActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMedicionDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/activity/ZhiBoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter01.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/AppliedListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ArrayAdapterNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/BankListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/BarAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/BaseFragemetAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/BillDetailAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/BookshelfListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CaseRecordAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/Casediscussion01Adapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionCollentAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellHonorAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollcetNewsAdataper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollectVideoAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentExpandAdapter1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CompletedListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ComplexViewMF.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConfirmedListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConsultAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFuAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseMyListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/DetailCommentAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/DownloadCollectAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ENDownloadAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/EnglishCollectAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/GDLiveBroadcastAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanDoctorAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHospitalAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHouseAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/GroupingAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/HbsagAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryMeetingAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/HonorAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/HospitalAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/HuiAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ImageIllnessAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/IncomeDetailsAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/JingAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/KejianAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryBookshelfAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/LinChuangAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/LogistAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/LoveListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingTimeAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MessageAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MindAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MoreNoticeAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyCollectAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyDownloadAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyMindAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyPagerAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyProjectAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyUserIconAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewPatientAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewsAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/OnRecyclerViewItemClickListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/OrderAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PaperAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientTeachAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdappter2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAibumAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PointListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProjectAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProxyAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/PublishingAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/QuestionAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/RollAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/ScienceListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectBankCardAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectCourseAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/SuifangAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapterNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentPolyVplayerAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoGVAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoMoreAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoSAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoTeachAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/VisitPlanAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleDownloadAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFCollectAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/adapter/endpointImgBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/application/BaseApplication.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/base/AppManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/base/yongyaoTotalBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBitmaps.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBonusPointsSuccessBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/AddCaseNewRecordAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/AddPatientBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/AreaBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/Bank.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BankCardBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanList.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseInfoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BillBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BillListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BonusPointsListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/BookDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseAssembleListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseRecordBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionCollentBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CasesuiondelBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ChangeMyInfoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/Child.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ChildTree.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleCollectBIngliBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/City.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ClassDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectNewsBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectVideoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CommentBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBeanHis.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBeanNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseEvaBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseGanExBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIconBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexSearchBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseUrlDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CoursewareListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateGoodsOrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateOrderBean1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/CustomViewsInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/DownListenerEvent.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/EvenBusEvent.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/EventListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertDetail.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertFlowerList.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertHonorBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertMindList.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ExperteDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/FapiaoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/FuCardBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GDLiveBroadcastBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHospitalBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHouseDetialBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GandanDoctorListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetAppActivityBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetFollowUpBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsOrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetHospitalListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetInterrogationBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetUserIconBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GetWelfarePageBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GethonorDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsNewsListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsOrderListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupManageBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientList.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HeroBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeList.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeModalBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeTrollNewBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalDetialBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalRollListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/HouseBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/IconBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/InterrogationPatientInfoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/KeyWordBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgDataBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/LessonTageBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/LibraryListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListFreeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListGroupSendMsgBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListNewInterrogationBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListOutPatientBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesTypeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesVideoByTypeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ListWorkPlaceBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/LogisticsBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/LoveListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MailanListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBook.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MeetingBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageNumBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MindDateilBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MonthDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDoctorBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDongtaiBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreLeaveMsgBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreNoticeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreVideoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyBankCardBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCasediscussionBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCourseBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyDetailInfoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyFlowerBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyNewBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyOrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyPointsBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MyWorkTableBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/MylanBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/NewCommentBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/NewListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/NewTeachData.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/NewsTagListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/OldCommentBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/OrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PageBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PaperBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCardBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCaseBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientNoticeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientTeachBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientVideoTypeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PayBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PayGoodsOrderbean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PayWechatBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoAibum.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoItem.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PoMessageBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PointTicketlistBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvDownloadInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvUploadInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/PublicSercicePhotoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/QuestionBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/QuickReplyBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/RankingBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/RegistBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/RetrieveUser.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ScienceListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ScientificBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SearchHospitalBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SeriesVideoNewsListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SettingInfoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ShareCollectListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ShowBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SimpleBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SpinnerOption.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/StartBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/StopOutPatientListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SuggestBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/SuifagnBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TagList.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/Testqqqqq.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TimestampBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/UGoodsBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/UserDataBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VersionBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBeanNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoMoreBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoOrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoRollBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoTeachDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoWatchRecordBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VipOrderBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/WFArticleListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/WFCollectBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/WFDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/WFSearchListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/WFYKArticleListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/WelfareListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/XHYKMediconDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconTitleBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconXHTitleBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/YearsBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ZengshuBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBeans.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoing.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoingetDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBeans.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/imBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBeans.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBeans.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/patientExBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/proDetailBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/proMyListBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleTokenBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/proRuzuBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm3.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm4.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm5.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/sortItem.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/bean/yongyaoBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/MyIm.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BeginBigActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigCoursewareActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMainActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMettingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMyLibraryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewSystemMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPointsMallActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPublicSearchActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigToolActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BiggNewPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/NormNewPatientActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/activity/SetInformActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigComplexViewMF.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigHuiAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigKejianAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigLibraryBookshelfAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigMeetingAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigNormalItemView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigRollAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigToolAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoSAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoTeachAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/NormalItemViewBig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/RecyclerItemClickListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/bean/OldPatientBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BIgBookshelfFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigFuMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHomeFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHuiMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigMyFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigOrderMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigRecommendFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigSuiMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/AbsRecyclerViewAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/IPLVScreencastPlayerListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvAllCast.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvIUIUpdateListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvNetworkUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastDeviceListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastSearchLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastStatusLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/chartcomposer/CustomStyleChartComposer.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponent.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponentNext.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ECAsyncTask.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/RichTextBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ActivityTaskUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/AnimatorUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/CCPAppManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferenceSettings.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferences.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/MethodInvoke.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ObjectStringIdentifier.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SDKVersionUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipTranslucentMethodUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipeActivityManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ViewDragHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPDotView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPFlipper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPLayoutListenerView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CommAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/OnLayoutChangedLinearLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/AudioManagerTools.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/BitmapUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ChattingAysnImageLoader.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ClipboardUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CommomUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CoreHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CrashHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DateUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DemoUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DensityUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DialNumberMap.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ECPropertiesUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/EmoticonUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ExportImgUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileAccessor.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MediaPlayTools.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypeParser.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypes.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypesTools.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/NotificationUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ResourceHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/SupportSwipeModeUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/Compat.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/DefaultOnDoubleTapListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/IPhotoView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoViewAttacher.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/CupcakeGestureDetector.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/EclairGestureDetector.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/FroyoGestureDetector.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/GestureDetector.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/OnGestureListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/VersionedGestureDetector.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LogManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/Logger.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LoggerDefault.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/GingerScroller.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/IcsScroller.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/PreGingerScroller.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/ScrollerProxy.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/AbstractSQLManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/BookDownloadSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ContactSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ConversationSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/CoursewareBookDownloadSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ECObservable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ENBookDownloadSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupMemberSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupNoticeSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/IMessageSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ImgInfoSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MeetingSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MessageObservable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/OnMessageChange.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/PatientSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/WFBookDownloadSqlManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/_DatabaseManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ActivityTransition.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/BaseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityBase.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityImpl.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragmentImpl.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPListAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ContactListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/DiscussionListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECFragmentActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECSuperActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/GroupListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/LauncherActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SDKCoreHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SettingItem.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/TabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/Capability.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListAdapter2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListClickListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingsRowUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/CustomerServiceHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/GlobalConstant.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/HackyViewPager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/IMChattingHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGralleryPagerActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageMsgInfoEntry.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImagePreviewActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/MsgInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/VideoRecordActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ViewImageInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/ECPullDownView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconEditText.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecents.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecentsManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconSpan.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconTextView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewBottomListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewTopListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnRefreshAdapterDataListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Emojicon.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Nature.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Objects.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/People.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Places.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Symbols.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/BaseHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/DescriptionViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/FileRowViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/ImageRowViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/RichTextViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/SystemViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/VoiceRowViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/BaseChattingRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/CCPEmoji.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingRowType.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingSystemRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ContactStorageLogic.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/Conversation.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ConversationItem.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionRxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionTxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DownloadModel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileRxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileTxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/IChattingRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageRxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageTxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImgInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/PatientModel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextRxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextTxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ViewHolderTag.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceRxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceTxRow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppGrid.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanelControl.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPAnimImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPChattingFooter2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPMaskLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChatFooterPanel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingItemContainer.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingListClickListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiApapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiGrid.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/RecordPopupWindow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/SmileyPanel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/AtSomeoneUI.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/BladeView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactLogic.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactSelectListActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/CustomSectionIndexer.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ECContacts.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/GroupCardSelectUI.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/IndexScroller.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactSelectActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/PinnedHeaderListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/StringMatcher.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ApplyWithGroupPermissionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/BaseSearch.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/DemoGroupNotice.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ECDiscussionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupNoticeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupProfileView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupService.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/NoticeSystemMessage.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/SearchGroupActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/EditConfigureActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingPersionInfoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingsActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/DemoMessageReceiver.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/PermissionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/CCPTextView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/ECListDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/IBaseAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/NetWarnBannerView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/PhotoBitmapDrawable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/SwipeBackLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarViewNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/VerticalImageSpan.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/AppliedFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/BIngliCollectFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/BasicInfoFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionCollentFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChangjianQuestionFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChinWFCollectFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChineaseWFFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/CicleFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/CompletedFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ConfirmedFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/DownloadCollectFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/EEWFCollectFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/EarningsFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/Englishragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExCourseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExpenditureFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/FuMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDepartmentFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDoctorFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanHospitalFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanExFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/GetWelfAreFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HepatopathyInfoFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HistoryPublicServiceFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HistoryPublicServiceFragment1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeNewFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuiMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuodongFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/InteractionFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceClassFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceDetailFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceEvaluateFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/KePuPublisheingFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/KeepEducationFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/KepuPublishedFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/LibraryListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MedicineBookFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MeetingFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MinFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MoreToOneConsultFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCasediscussionFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCoolectCourseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyDownloadCourseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyHuodongFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyNewFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyProjectFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment1.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewsFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/OrderMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/OutpatientArrangementFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/OverviewFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientTeachFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ProjectManageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/PubMedFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificMyFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificOtherFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificSystemFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchLibiaryFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchPaperFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseCollectFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/SmallCourseFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/StopNoticeFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuggestFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuiMessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/ToolsListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipCompleteFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipPendingFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipServicesFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/VisitPlanFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/WFSearchFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfAreFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfareDetailFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/fragment/YiganFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/http/HttpClientFactory.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/http/HttpRetry.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromNet.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/listener/InteractiveListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/manager/ThreadManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoCache.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoPrivatizationConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/NIMInitManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/NimSDKOptionConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/activity/MessageInfoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/bagder/Badger.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigCommonRecentViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigRecentViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomSessionHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTab.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabPagerAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterTabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MessageTabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DefaultContactProvider.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DemoServers.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ExtraOptions.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/LogoutHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/NimUserInfoProvider.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerEnvs.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/Preferences.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/UserPreferences.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/EnterMode.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/Extras.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHttpClient.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserConstant.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserProfileActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserUpdateHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/DemoOnlineStateContentProvider.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/EventFilter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/NetStateCode.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineState.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateCode.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventCache.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventSubscribe.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/CustomNotificationCache.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/MainActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderId.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderItem.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderSettings.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/SystemMessageUnreadManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/adapter/MainTabPagerAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ChatRoomListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ContactListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/MainTabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragmentNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/main/viewholder/FuncViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoHwPushMessageService.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoMixPushMessageHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoPushContentProvider.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/MixPushActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/model/Extras.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/model/MainTab.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingTemplate.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingType.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/BaseMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/CommonRecentViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/MessageFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/P2PMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactsFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentViewHolder.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/InputPanel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/SessionHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/EasyAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/HospitalAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ImageAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ShoppingAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/TeachAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VideoAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VisitAction.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachParser.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachmentType.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/DefaultCustomAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/GuessAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/MultiRetweetAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketOpenedAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/TeachAttachment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderPicture.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTeach.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTip.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/thridparty/ChatRoomHttpClient.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/FadeInOutPageTransformer.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/PagerSlidingTabStrip.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/SlidingTabPagerAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/uinfo/UserInfoHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/util/LogHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/AppCrashHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSaver.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSnapshot.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/InstallUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/SysInfoUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/netease/widget/ChatRoomImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/patientlist/CharacterParser.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/patientlist/PinyinComparator.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SideBar.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SortModel.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/photo/AlbumPreviewActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/photo/PreviewViewPager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/BuyIntegerActivty.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ContactEmailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ExchangeDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/HeaderGridView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/IntegralTicketActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/MyExchangeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/OnlineExchangeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PointsMallActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ProductDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PullToRefreshHeadGridView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ShippingAddressActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/YuanJiaoImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/CourseDetailPolyvPlayerActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ExchangeAreaActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/FreeAreaActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/MyDownLoadVideoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/OnlineVideoExchangeActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvDownloadActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPermission.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPlayerActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/QualityCourseActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideoDetailPolyvPlayerActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideohistoryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/AbsRecyclerViewAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/CurriculumAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/ExchangeAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/FreeAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/MyListSeriesAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvDownloadListViewAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvPlayerFragmentAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/cast/PolyvIUIUpdateListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvDownloadSQLiteHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvUploadSQLiteHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/CurriculumFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/ExchangeFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/LazyLoadFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvDownloadFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvPlayerTabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvPlayerViewPagerFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/SummaryFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoCurriculumFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerTabFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerViewPagerFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoInfoFragment.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetHeightListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetVidListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvAnimateFirstDisplayListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAudioCoverView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAuxiliaryView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerLightView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerMediaController.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerPreviewView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerProgressView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerVolumeView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvPPTView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvViceScreenLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/PolyvVodBusinessServer.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvGetByUploader.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvPlayTimes.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvGetByUploaderResult.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvPlayTimesResult.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvBackgroundPlayService.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvPlayService.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvErrorMessageUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvImageLoader.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvKeyBoardUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvNetworkUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvScreenUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvSensorHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvStorageUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvTimeUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/IcsLinearLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/LinearListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvCircleProgressView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvGrayImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvLoadingLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvSimpleSwipeRefreshLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickSeekBar.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickTips.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/protocol/BaseProtocol.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/protocol/PatientListProtocol.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/ILoadingLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/IPullToRefresh.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/LoadingLayoutProxy.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/OverscrollHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshAdapterViewBase.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshBase.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshExpandableListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshGridView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshHorizontalScrollView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshScrollView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshWebView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/PullToRefreshWebView2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/SoundPullEventListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/EmptyViewMethodAccessor.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/FlipLoadingLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/IndicatorLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayoutNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/RotateLoadingLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayoutNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/Utils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/ViewCompat.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/report/BaseReportBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/report/CommUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/report/ReportService.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/report/reportBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/service/NotifyUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/service/UpdateService.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/splash/GuideUI.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/splash/UniappSplashView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/splash/WelcomeUI.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ui/CircleImageDrawable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ui/CustomProgressDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ui/RoundCornerImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/ui/SuperFileView2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/AppUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/AuthPageConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/BaseUIConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortBindConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortConfig.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/MfrMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/NewSystemMessageActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushConstants.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushCourseUrlDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushNewsDetailActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushZhiBoActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/UverifyHelp.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/umeng/WebH5Activity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/AESUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/AppFrontBackHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/AutoGetCode.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/BackHandlerHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeCountUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Util.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils11.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/CommonUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ConfigCacheUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Constant.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/CopyButtonLibrary.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/CrashHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DataCleanManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DateGetAge.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DateUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DecimalInputFilter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DensityUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DestroyActivityUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DialogUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/DownLoadUrlImage.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/EncryptionKit.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ExitReceiver.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/FileUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/GrayManager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/GsonTools.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/HashTools.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/HmacSha256ApiVerify.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ImageOptions.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/IoUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ItemDragHelperCallback.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/JsonParser.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/KeDaXunFeiUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Keys.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ListViewForScrollView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/LogUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/MD5Utils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/MathUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Md5Tool.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/MemoryTools.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/MyUserIconUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/NotificationUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/OneClickUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionsUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/PlistHandler.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/RSA1Utils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils11.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils2.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/RsaUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/SQLdm.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/SendCardUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ServiceUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/SetListViewHeightBasedOnChildrenUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/SharePrefUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ShareUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Sign.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/SignUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/SmsObserver.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/StaUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/StreamTool.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/StringUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/TikaUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ToastUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/UMengShareHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/UpdateVersionUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/Url.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/ValidateUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/utils/WebClientDevWrapper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/AutoHideIMEFrameLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/AutoScaleTextView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/CommonProgressDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButton.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButtonR.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterCheckBox.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/DrugView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/GSpaceItemDecoration.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/GroupManageSingleView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/GroupmanageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/HideIMEUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/IndexViewPager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/Info.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/ItemLongClickedPopWindow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/KeyboardLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyDatePickerDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyEditext.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyGridView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyLine.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyScrollView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/MyTextView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/NormalItemView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/NotNormalItemView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoGridItem.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/RollViewPager.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/RotateGestureDetector.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/RoundImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewGridView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/SpaceItemDecoration.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/TwoRoundImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/X5WebView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/Pullable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/PullableScrollView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/view/viewbadger/BadgeView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/web/WeBean.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/EditPopupWindow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OptionsPopupWindow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowHelper.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/PopMenu.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/SelectedPhotoPopupWindow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/TimePopupWindow.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ArrayWheelAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/DensityUtil.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/NumericWheelAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelChangedListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelScrollListener.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ScreenInfo.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelAdapter.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelOptions.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelTime.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelViewNew.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/BitmapCache.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/CircleImageView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/CircularRectangle.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/CommentExpandableListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomClearEditText.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomToast.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomerDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/ECAlertDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/ECListDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/ECProgressDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/ExpandTextView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/GridRadioGroup.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/LoadingPage.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/MyAlertDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/NestedScrollWebView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/NewECListDialog.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/OverLinkMovementMethod.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/PullToRefreshExpandableListView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/RatingBar.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/ResizeLayout.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/SimpleTextWatcher.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/SnapUpCountDownTimerView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/TimeButton.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/WordWrapView.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/BaseDrawable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/ClipDrawableCompat.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/DrawableCompat.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/MaterialRatingBar.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/MaterialRatingBarOld.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/MaterialRatingDrawable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/ThemeUtils.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/TileDrawable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/widget/goodratingbar/TintableDrawable.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/wxapi/WXEntryActivity.java create mode 100644 app/src/main/java/cn/shangyu/gdxzExpert/wxapi/WXPayEntryActivity.java create mode 100644 app/src/main/java/com/zbar/lib/CaptureActivity.java create mode 100644 app/src/main/java/com/zbar/lib/ZbarManager.java create mode 100644 app/src/main/java/com/zbar/lib/bitmap/InvertedLuminanceSource.java create mode 100644 app/src/main/java/com/zbar/lib/bitmap/LuminanceSource.java create mode 100644 app/src/main/java/com/zbar/lib/bitmap/PlanarYUVLuminanceSource.java create mode 100644 app/src/main/java/com/zbar/lib/camera/AutoFocusCallback.java create mode 100644 app/src/main/java/com/zbar/lib/camera/CameraConfigurationManager.java create mode 100644 app/src/main/java/com/zbar/lib/camera/CameraManager.java create mode 100644 app/src/main/java/com/zbar/lib/camera/FlashlightManager.java create mode 100644 app/src/main/java/com/zbar/lib/camera/PreviewCallback.java create mode 100644 app/src/main/java/com/zbar/lib/decode/CaptureActivityHandler.java create mode 100644 app/src/main/java/com/zbar/lib/decode/DecodeHandler.java create mode 100644 app/src/main/java/com/zbar/lib/decode/DecodeThread.java create mode 100644 app/src/main/java/com/zbar/lib/decode/FinishListener.java create mode 100644 app/src/main/java/com/zbar/lib/decode/InactivityTimer.java diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AccumulatePointsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AccumulatePointsActivity.java new file mode 100644 index 0000000..7088100 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AccumulatePointsActivity.java @@ -0,0 +1,461 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.viewpager.widget.ViewPager; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBonusPointsSuccessBean; +import cn.shangyu.gdxzExpert.bean.MyPointsBean; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.fragment.EarningsFragment; +import cn.shangyu.gdxzExpert.fragment.ExpenditureFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.pointsmall.IntegralTicketActivity; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +public class AccumulatePointsActivity extends BaseActivity implements OnCallBackFromNet ,OnClickListener{ + private ArrayList fragment_list; + private FragmentPagerAdapter mAdapter; + private ViewPager frame_container; + private EarningsFragment dis; + private ExpenditureFragment myDis; + private TextView tv_totalday,tv_jifen,tv_benzhouqiandaoday,tv_signday; + private MyPointsBean fromJson; + private ImageView iv_1,iv_2,iv_3,iv_4,iv_5,iv_6,iv_7; + private RadioButton my_casediscussion,my_case; + private Button bt_signIn; + private CustomProgressDialog pd; + private boolean isSign; + private ECAlertDialog dilaog2; + private AddBonusPointsSuccessBean addBonusPointsBean; + private LinearLayout ll_jifenshop,ll_integraltickit,ll_buy_point; + private TextView tv_jifenshop; + + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("积分"); + top_back_layout.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("规则"); + top_right_text.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setText("我的积分"); + top_title.setTextSize(23); + top_right_text.setTextSize(18); + + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_accumulatepoints_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_accumulatepoints); + } + frame_container = (ViewPager) view.findViewById(R.id.frame_container); + tv_jifenshop = view.findViewById(R.id.tv_jifenshop); + ll_jifenshop = view.findViewById(R.id.ll_point_shop); + ll_integraltickit = view.findViewById(R.id.ll_integraltickit); + ll_buy_point = view.findViewById(R.id.ll_buy_point); + my_casediscussion = (RadioButton) view.findViewById(R.id.my_casediscussion); + my_case = (RadioButton) view.findViewById(R.id.my_case); + tv_totalday = (TextView) view.findViewById(R.id.tv_totalday); + tv_jifen = (TextView) view.findViewById(R.id.tv_jifen); + tv_benzhouqiandaoday = (TextView) view.findViewById(R.id.tv_benzhouqiandaoday); + tv_signday = (TextView) view.findViewById(R.id.tv_signday); + bt_signIn = (Button) view.findViewById(R.id.bt_signIn); + iv_1 = (ImageView) view.findViewById(R.id.iv_1); + iv_2 = (ImageView) view.findViewById(R.id.iv_2); + iv_3 = (ImageView) view.findViewById(R.id.iv_3); + iv_4 = (ImageView) view.findViewById(R.id.iv_4); + iv_5 = (ImageView) view.findViewById(R.id.iv_5); + iv_6 = (ImageView) view.findViewById(R.id.iv_6); + iv_7 = (ImageView) view.findViewById(R.id.iv_7); + if (Constant.isSignIn) { + bt_signIn.setBackgroundResource(R.drawable.signin_true); + } + initListener(); + initFragment(); + return view; + } + + + @Override + protected void onResume() { + // TODO Auto-generated method stub + getData(); + super.onResume(); + needreportPage("我的积分"); + } + private void initFragment() { + // TODO Auto-generated method stub + fragment_list = new ArrayList<>(); + dis = new EarningsFragment(); + myDis = new ExpenditureFragment(); + fragment_list.add(dis); + fragment_list.add(myDis); + mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { + + @Override + public int getCount() { + return fragment_list.size(); + } + + @Override + public Fragment getItem(int arg0) { + return fragment_list.get(arg0); + } + }; + frame_container.setAdapter(mAdapter); + } + + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.myBonusPoints, param, 1, this); + } + + private void initListener() { + // TODO Auto-generated method stub +// tv_jifenshop.setOnClickListener(this); + ll_jifenshop.setOnClickListener(this); + ll_buy_point.setOnClickListener(this); + ll_integraltickit.setOnClickListener(this); + my_casediscussion.setOnClickListener(this); + my_case.setOnClickListener(this); + bt_signIn.setOnClickListener(this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+"resultCode "+resultJson); + // TODO Auto-generated method stub + switch (resultCode) { + case 1: + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, MyPointsBean.class); + if (fromJson!=null&&"1".equals(fromJson.getCode())) { + tv_totalday.setText("今天是我们相识的第"+fromJson.getGdxzday()+"天"); + tv_jifen.setText(fromJson.getTotalPoints()+""); + tv_benzhouqiandaoday.setText(fromJson.getContinuous_day()+"天"); + tv_signday.setText(fromJson.getTotalDay()+""); + for (int i = 0; i < fromJson.getThisWeek().size(); i++) { + String string = fromJson.getThisWeek().get(i); + int week = getWeek(string); + switch (week) { + case 1: + iv_1.setImageResource(R.drawable.sign_day_true); + break; + case 2: + iv_2.setImageResource(R.drawable.sign_day_true); + break; + case 3: + iv_3.setImageResource(R.drawable.sign_day_true); + break; + case 4: + iv_4.setImageResource(R.drawable.sign_day_true); + break; + case 5: + iv_5.setImageResource(R.drawable.sign_day_true); + break; + case 6: + iv_6.setImageResource(R.drawable.sign_day_true); + break; + case 7: + iv_7.setImageResource(R.drawable.sign_day_true); + break; + } + } + }else { + ToastUtil.showMessage("请求失败"); + } + + break; + + case 2: + Log.i("TAG", resultJson); + if (pd!=null) { + pd.dismiss(); + } + try { + JSONObject jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(optString)) { +// ToastUtil.showMessage(jsonObject.optString("bonuspoints")); + Constant.isRefreshpoint = true;//个人中心界面刷新 + Gson gson1 = new Gson(); + addBonusPointsBean = gson1.fromJson(resultJson,AddBonusPointsSuccessBean.class); + top_sgin.setImageResource(R.drawable.homesign_true); + needreportSimple("signin"); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.myBonusPoints, param, 1, this); + //本地广播 + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(AccumulatePointsActivity.this); + Intent intent = new Intent("SIGNIN_ACTION"); + intent.putExtra("sign", true); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + //点击签到 + showSignInDailog(); + bt_signIn.setBackgroundResource(R.drawable.signin_true); + + }else if("201".equals(optString)){ + dilaog2 = ECAlertDialog.buildAlert(AccumulatePointsActivity.this, + "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + }else{ + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + } + } + + + private void showSignInDailog() { + // TODO Auto-generated method stub + //com.ta.utdid2.a.a.a(this);wcx + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout; + if(CommonUtil.BigModule()) + { + layout = (RelativeLayout) inflater.inflate(R.layout.dailog_signin_big, null); + } + else + { + layout = (RelativeLayout) inflater.inflate(R.layout.dailog_signin, null); + } + TextView tv_gdxzday = (TextView) layout.findViewById(R.id.tv_gdxzday); + TextView tv_totalDay = (TextView) layout.findViewById(R.id.tv_totalDay); + TextView tv_continuous_day = (TextView) layout.findViewById(R.id.tv_continuous_day); + TextView tv_contenttext = (TextView) layout.findViewById(R.id.tv_text1); + ImageView iv_close = (ImageView) layout.findViewById(R.id.iv_close); + tv_gdxzday.setText("今天是我们相识的第"+addBonusPointsBean.getGdxzday()+"天"); + tv_totalDay.setText(addBonusPointsBean.getTotalDay()+""); + tv_continuous_day.setText(addBonusPointsBean.getContinuous_day()+""); + tv_contenttext.setText(addBonusPointsBean.getQuestionAndAnswer().getTitle()); + + final Dialog dialog = new AlertDialog.Builder( + AccumulatePointsActivity.this).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + + dialog.getWindow().setContentView(layout); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); + + iv_close.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + tv_contenttext.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent broadc = new Intent(AccumulatePointsActivity.this, NewsDetailActivity.class); + broadc.putExtra("url", Url.urlHtml+addBonusPointsBean.getQuestionAndAnswer().getPath()); + broadc.putExtra("newsTitle",addBonusPointsBean.getQuestionAndAnswer().getTitle()); + broadc.putExtra("summary", addBonusPointsBean.getQuestionAndAnswer().getSummary()); + broadc.putExtra("flag", 1); + startActivity(broadc); + dialog.dismiss(); + } + }); + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { + finish(); + } else if (id == R.id.top_right_text) { + Intent broadc = new Intent(AccumulatePointsActivity.this, NewsDetailActivity.class); + broadc.putExtra("url","http://doc.igandan.com/app/integral/integral_doctor.html"); + broadc.putExtra("title","积分规则"); + broadc.setType("qiandao"); + startActivity(broadc); + } else if (id == R.id.my_case) { + frame_container.setCurrentItem(1); + } else if (id == R.id.my_casediscussion) { + frame_container.setCurrentItem(0); + } else if (id == R.id.ll_point_shop) {//积分商城 + if(BigModule()) + { + Intent intent = new Intent(AccumulatePointsActivity.this, BigPointsMallActivity.class); + startActivity(intent); + } + else + { + Intent intent = new Intent(AccumulatePointsActivity.this, PointsMallActivity.class); + startActivity(intent); + } + } else if (id == R.id.ll_integraltickit) {//积分券 + Intent intent1 = new Intent(AccumulatePointsActivity.this, IntegralTicketActivity.class); + startActivity(intent1); + } else if (id == R.id.ll_buy_point) {//购买积分 + Intent intent2 = new Intent(AccumulatePointsActivity.this, BuyIntegerActivty.class); + startActivity(intent2); + } else if (id == R.id.bt_signIn) { + if (Constant.isSignIn) { + dilaog2 = ECAlertDialog.buildAlert(AccumulatePointsActivity.this, + "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + }else{ + pd = new CustomProgressDialog(AccumulatePointsActivity.this, "请稍候"); + pd.show(); + Map param = new HashMap<>(); + param.put("score_type","1"); +// param.put("debug","true");//测试签到成功返回数据 + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 2, AccumulatePointsActivity.this); + } + } + } + + /** + * 根据当前日期获得是星期几 + * time=yyyy-MM-dd + * @return + */ + public static int getWeek(String time) { + String Week = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + Calendar c = Calendar.getInstance(); + try { + c.setTime(format.parse(time)); + } catch (ParseException e) { + e.printStackTrace(); + } + + int wek=c.get(Calendar.DAY_OF_WEEK); + + if (wek == 1) { + Week += "星期日"; + } + if (wek == 2) { + Week += "星期一"; + } + if (wek == 3) { + Week += "星期二"; + } + if (wek == 4) { + Week += "星期三"; + } + if (wek == 5) { + Week += "星期四"; + } + if (wek == 6) { + Week += "星期五"; + } + if (wek == 7) { + Week += "星期六"; + } + + return wek; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardActivity.java new file mode 100644 index 0000000..b15e207 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardActivity.java @@ -0,0 +1,257 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.io.InputStream; +import java.util.HashMap; + +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.PlistHandler; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * AddBankCardActivity.java + * + * @author JX 记肖 + * @date 2015-12-07 我的->常用银行卡->添加常用银行卡activity 功能说明:添加银行卡页面 + */ +public class AddBankCardActivity extends BaseActivity { + private EditText bank_username; + private EditText bank_number; + private TextView bank_name; + private Button btsu; + private String banknumber; + private String bankname; + private String expertUuid; + private String usercardname; + private String result; + private int resultIcon; + private String nameforSelect; + private static String addBankCardUrl = Url.getaddBankCard;// 提交链接 + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("添加银行卡"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_add_bank_card); + bank_username = (EditText) view.findViewById(R.id.ed_name);// 银行卡持有人姓名 + bank_username.setOnFocusChangeListener(onFocusAutoClearHintListener); + bank_number = (EditText) view.findViewById(R.id.ed_banknumber);// 银行卡号 + bank_number.setOnFocusChangeListener(onFocusAutoClearHintListener); + bank_name = (TextView) view.findViewById(R.id.ed_select_bankname);// 发卡银行 + btsu = (Button) view.findViewById(R.id.bt_seclet_sure);// 确定添加按钮 + // ImageView icon = (ImageView)view.findViewById(R.id.item_img); + btsu.setOnClickListener(this);// 设置监听 + bank_name.setOnClickListener(this); + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");// 取出专家的uuid + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + // 填写银行卡数据并提交 + private void btsu() { + + usercardname = bank_username.getText().toString().trim();// 获取输入的银行卡持有人姓名 + banknumber = bank_number.getText().toString().trim();// 获取输入的银行卡号 + bankname = bank_name.getText().toString().trim();// 获取输入的发卡银行 + + if (!UIUtils.isNetWorkConnected(this)) { + Toast.makeText(this, "网络暂时不可用", Toast.LENGTH_SHORT).show(); + return; + } + + if (TextUtils.isEmpty(bankname)) { + ToastUtil.showToast("请选择常用银行卡"); + return; + } + if (TextUtils.isEmpty(banknumber)) { + ToastUtil.showToast("请输入银行卡号码"); + return; + } + if (TextUtils.isEmpty(usercardname)) { + ToastUtil.showToast("请输入持卡人姓名"); + return; + } + // if(banknumber.length() < 16 ){ + // ToastUtil.showToast("请输入正确的银行卡号"); + // return; + // } + try { + InputStream in; + in = getResources().getAssets().open("bankNameAndCard.plist");// 从资源读取银行卡卡号规则 + SAXParserFactory factorys = SAXParserFactory.newInstance(); + SAXParser saxparser = factorys.newSAXParser(); + PlistHandler plistHandler = new PlistHandler(); + saxparser.parse(in, plistHandler); + HashMap hash = (HashMap) plistHandler + .getMapResult(); + for (int i = 0; i < hash.size(); i++) { + String bn = banknumber; + LogUtil.i("banknumber==========" + banknumber); + nameforSelect = hash.get(bn.substring(0, 6)); + + } + // if (!bankname.equals(nameforSelect)) + if (!nameforSelect.contains(bankname)) { + Toast.makeText(this, "填写的银行卡号与所选银行不匹配", Toast.LENGTH_SHORT) + .show(); + LogUtil.i("nameforSelect-=============" + nameforSelect); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + showProgressDialog("提交中,请稍候..."); + addBankCard(addBankCardUrl); + } + + /** + * 提交数据 addBankCard + * + * @param url + * void + */ + private void addBankCard(String url) { + RequestParams params = new RequestParams(); + params.addBodyParameter("ownerUuid", expertUuid); + // params.addBodyParameter("bankUuid", "");//银行UUID,备用 + params.addBodyParameter("bankName", bankname); + params.addBodyParameter("cardNum", banknumber); + params.addBodyParameter("holderName", usercardname); + + HttpHelper.loadData(HttpMethod.POST, url, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo arg0) { + // TODO Auto-generated method stub + LogUtil.i("str=====" + arg0.result); + processData(arg0.result); + Intent intent = new Intent(); + // 把返回数据存入Intent + intent.putExtra("resultIcon", resultIcon); + // 设置返回数据 + setResult(RESULT_OK, intent); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // TODO Auto-generated method stub + closeProgressDialog(); + ToastUtil.showToast("添加失败"); + } + }); + LogUtil.i("url====" + url + "ownerUuid====" + expertUuid + + "bankName===" + bankname + "cardNum====" + banknumber + + "holderName====" + usercardname); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + closeProgressDialog(); + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + // 数据为空 + if ("1".equals(bean.code)) { + ToastUtil.showToast("添加银行卡成功"); + this.setResult(RESULT_OK); + finish(); + } else { + ToastUtil.showMessage(bean.message); + } + } + + @Override + protected void onResume() { + if (result != null && bank_name != null) { + bank_name.setText(result); + } + super.onResume(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_seclet_sure) {// 提交数据 + btsu(); + } else if (id == R.id.ed_select_bankname) {// 选择银行卡 + Intent intent = new Intent(ct, AddSecletBankCardActivity.class); + startActivityForResult(intent, 1); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (data != null) { + result = data.getExtras().getString("result"); + resultIcon = data.getExtras().getInt("result_icon"); + } + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardFirstActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardFirstActivity.java new file mode 100644 index 0000000..b980209 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardFirstActivity.java @@ -0,0 +1,264 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.CustomClearEditText; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class AddBankCardFirstActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private CustomClearEditText mEt_name, mEt_card; + private Button mBt_next; + private AddBankCardFirstActivity mActivity; + private String name, card; + private double ableBlance, mFwMoney,mOneDraw; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("身份验证"); + ableBlance = getIntent().getDoubleExtra("ableBlance", 0); + mFwMoney = getIntent().getDoubleExtra("mFwMoney", 0); + mOneDraw = getIntent().getDoubleExtra("mOneDraw", 0); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_add_card_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_add_card); + } + mEt_name = (CustomClearEditText) view + .findViewById(R.id.et_addcard_name); + mActivity = this; + mEt_card = (CustomClearEditText) view + .findViewById(R.id.et_addcard_card); + mBt_next = (Button) view.findViewById(R.id.bt_add_card_first); + + initListener(); + return view; + } + + public void initListener() { + mBt_next.setOnClickListener(this); + mEt_name.addTextChangedListener(new LimitInputTextWatcher(mEt_name)); + mEt_card.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (!StringUtil.isEmpty(mEt_card.getText().toString()) + && !StringUtil.isEmpty(mEt_name.getText().toString())) { + mBt_next.setClickable(true); + mBt_next.setBackgroundResource(R.drawable.selector_btn); + } else { + mBt_next.setClickable(false); + mBt_next.setBackgroundResource(R.drawable.bg_next_btnbar); + } + } + }); + } + + // public void getPayResult(String name, String number) { + // String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + // Map param = new HashMap(); + // param.put("user_uuid", uuid); + // param.put("id_name", name); + // param.put("id_number", number); + // sendParamtoNet(Url.getIdentificationIdCard, param, 101, mActivity, true); + // } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_add_card_first) { + name = mEt_name.getText().toString(); + if (name.length() < 2 || name.length() > 15) { + aaa("请输入正确的姓名"); + return; + } + card = mEt_card.getText().toString().trim(); + if (!ValidateUtils.isCardId(card)) { + aaa("请输入正确的身份证号"); + return; + } + BaseApplication.addActivity(mActivity); + Intent intent = new Intent(mActivity, + AddBankCardSecondActivity.class); + intent.putExtra("name", name); + intent.putExtra("card", card); + intent.putExtra("ableBlance", ableBlance); + intent.putExtra("mFwMoney", mFwMoney); + intent.putExtra("mOneDraw", mOneDraw); + startActivity(intent); + } + } + + private ECAlertDialog buildAlert; + + public void aaa(String message) { + buildAlert = ECAlertDialog.buildAlert(mActivity, message, null, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * Created by junweiliu on 17/1/6. + */ + public class LimitInputTextWatcher implements TextWatcher { + /** + * et + */ + private EditText et = null; + /** + * 筛选条件 + */ + private String regex; + /** + * 默认的筛选条件(正则:只能输入中文) + */ + private String DEFAULT_REGEX = "[^\u4E00-\u9FA5]"; + + /** + * 构造方法 + * + * @param et + */ + public LimitInputTextWatcher(EditText et) { + this.et = et; + this.regex = DEFAULT_REGEX; + } + + /** + * 构造方法 + * + * @param et + * et + * @param regex + * 筛选条件 + */ + public LimitInputTextWatcher(EditText et, String regex) { + this.et = et; + this.regex = regex; + } + + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, + int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, + int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + String str = editable.toString(); + String inputStr = clearLimitStr(regex, str); + et.removeTextChangedListener(this); + // et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容 + editable.replace(0, editable.length(), inputStr.trim()); + et.addTextChangedListener(this); + if (!StringUtil.isEmpty(mEt_card.getText().toString()) + && !StringUtil.isEmpty(mEt_name.getText().toString())) { + mBt_next.setClickable(true); + mBt_next.setBackgroundResource(R.drawable.selector_btn); + } else { + mBt_next.setClickable(false); + mBt_next.setBackgroundResource(R.drawable.bg_next_btnbar); + } + + } + + /** + * 清除不符合条件的内容 + * + * @param regex + * @return + */ + private String clearLimitStr(String regex, String str) { + return str.replaceAll(regex, ""); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardSecondActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardSecondActivity.java new file mode 100644 index 0000000..25158d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddBankCardSecondActivity.java @@ -0,0 +1,868 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.text.Editable; +import android.text.Selection; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.TimeButton; + +public class AddBankCardSecondActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private EditText mEt_num; + private EditText mEt_yzm; + private EditText mEt_phone; + private Button mBt_next; + private ImageView mIv_Prompt, mIv_card_promit; + private AddBankCardSecondActivity mActivity; + private Intent getIntent; + private String name, idCard; + private String phoneNum, cardNum, yzmNum, messageNum; + private double ableBlance, mFwMoney, mOneDraw; +// private SmsObserver mObserver; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("添加银行卡"); + getIntent = getIntent(); + name = getIntent.getStringExtra("name"); + idCard = getIntent.getStringExtra("card"); + ableBlance = getIntent.getDoubleExtra("ableBlance", 0); + mFwMoney = getIntent.getDoubleExtra("mFwMoney", 0); + mOneDraw = getIntent.getDoubleExtra("mOneDraw", 0); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_add_card_second_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_add_card_second); + } + mActivity = this; + mEt_phone = (EditText) view.findViewById(R.id.et_addcard_phone); + mEt_num = (EditText) view.findViewById(R.id.et_addcard_num); + mBt_next = (Button) view.findViewById(R.id.bt_add_card_second); + mIv_Prompt = (ImageView) view + .findViewById(R.id.iv_add_card_phone_prompt); + mIv_card_promit = (ImageView) view + .findViewById(R.id.iv_add_card_prompt); + mIv_num = (ImageView) view.findViewById(R.id.iv_get_num); + mEt_yzm = (EditText) view.findViewById(R.id.et_yzm); +// mObserver = new SmsObserver(AddBankCardSecondActivity.this, mHandler); +// Uri uri = Uri.parse("content://sms/"); +// // 注册短信的监听 +// getContentResolver().registerContentObserver(uri, true, mObserver); + initListener(); + // new Thread(networkTask).start(); + + return view; + } + + public void initListener() { + mBt_next.setOnClickListener(this); + mIv_Prompt.setOnClickListener(this); + mIv_num.setOnClickListener(this); + mIv_card_promit.setOnClickListener(this); + + mEt_phone.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (!StringUtil.isEmpty(mEt_phone.getText().toString()) + && !StringUtil.isEmpty(mEt_num.getText().toString())) { + mBt_next.setClickable(true); + mBt_next.setBackgroundResource(R.drawable.selector_btn); + } else { + mBt_next.setClickable(false); + mBt_next.setBackgroundResource(R.drawable.bg_next_btnbar); + } + } + }); + mEt_num.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (!StringUtil.isEmpty(mEt_phone.getText().toString()) + && !StringUtil.isEmpty(mEt_num.getText().toString())) { + mBt_next.setClickable(true); + mBt_next.setBackgroundResource(R.drawable.selector_btn); + } else { + mBt_next.setClickable(false); + mBt_next.setBackgroundResource(R.drawable.bg_next_btnbar); + } + } + }); + bankCardNumAddSpace(mEt_num); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_add_card_second) { + phoneNum = mEt_phone.getText().toString().trim(); + cardNum = mEt_num.getText().toString().trim(); + + if (cardNum.length() < 18 || cardNum.length() > 27) { + aaa("请输入正确的银行卡号"); + return; + } + if (!ValidateUtils.isMobileNum(phoneNum)) { + aaa("请输入正确的手机号码"); + return; + } + + // if (StringUtil.isEmpty(mEt_yzm.getText().toString().trim())) { + // aaa("请输入图形验证码"); + // return; + // } + // new Thread(networkTask2).start(); + sendMessageDialog(phoneNum); + } else if (id == R.id.iv_add_card_phone_prompt) { + aaa(); + } else if (id == R.id.iv_add_card_prompt) { + card_p(); + } else if (id == R.id.iv_get_num) { + new Thread(networkTask).start(); + } + } + + private ECAlertDialog buildAlert2; + + public void aaa(String message) { + buildAlert2 = ECAlertDialog.buildAlert(mActivity, message, null, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert2.dismiss(); + + } + }); + buildAlert2.setTitle("温馨提示"); + buildAlert2.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert2.show(); + } + + private ECAlertDialog buildAlert_card; + + public void card_p() { + buildAlert_card = ECAlertDialog.buildAlert(mActivity, getResources() + .getString(R.string.add_card_card_prompt), null, "知道了", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert_card.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert_card.dismiss(); + + } + }); + buildAlert_card.setTitle("银行卡说明"); + buildAlert_card.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert_card.show(); + } + + private ECAlertDialog buildAlert; + + public void aaa() { + buildAlert = ECAlertDialog.buildAlert(mActivity, getResources() + .getString(R.string.add_card_phone_prompt), null, "知道了", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("手机号说明"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + private Dialog dialog; + TimeButton mtb_getNum; + EditText mEt_getnum; + ImageView mIv_num; + + protected void sendMessageDialog(String phoneNum) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(mActivity); + RelativeLayout layout = (RelativeLayout) inflater.inflate( + R.layout.dialog_get_num, null); + // 2. 新建对话框对象 + dialog = new AlertDialog.Builder(mActivity, + R.style.Theme_Light_FullScreenDialogAct).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + // 只用下面这一行弹出对话框时需要点击输入框才能弹出软键盘 + dialog.getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + // 加上下面这一行弹出对话框时软键盘随之弹出 + // dialog.getWindow().setSoftInputMode( + // WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + // 3. 消息内容 + TextView btn_content = (TextView) layout + .findViewById(R.id.dialog_tv_content);// 手机号 + StringBuilder sb = new StringBuilder(phoneNum); + String content = "请输入手机" + sb.replace(3, 7, "****") + "收到的验证码"; + btn_content.setText(content); + mEt_getnum = (EditText) layout.findViewById(R.id.et_get_num); + mtb_getNum = (TimeButton) layout.findViewById(R.id.tv_get_num);// 时间按钮 + mtb_getNum.onCreate(); + mtb_getNum.clearTimer(); + mtb_getNum.setTextBefore("获取验证码").setLenght(60 * 1000); + Button btn_ignore = (Button) layout.findViewById(R.id.dilaog_button1); + Button btn_update = (Button) layout.findViewById(R.id.dilaog_button2); + + btn_ignore.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + dialog.dismiss(); + } + }); + btn_update.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + InputMethodManager inputMethodManager = (InputMethodManager) ct + .getSystemService(Context.INPUT_METHOD_SERVICE); + IBinder windowToken = v.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + // TODO Auto-generated method stub + String messageNum = mEt_getnum.getText().toString().trim(); + if (!StringUtil.isEmpty(messageNum)) { + getPayResult(messageNum); + + } else { + ToastUtil.showMessage("请输入短信验证码"); + } + + } + }); + mtb_getNum.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + ToastUtil.showMessage("网络异常"); + return; + } + + getSystemTime(); + + + } + }); + + } + + public void getPayResult(String messageNum) { + +// String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); +// param.put("user_uuid", uuid); + param.put("id_name", name); + param.put("id_number", idCard); + param.put("card_number", cardNum.replaceAll(" ", "")); + param.put("phone_number", phoneNum); + param.put("sms", messageNum); + sendJsonPostParamtoNetSignMD5(Url.getIdentificationBankCard, param, 101,this); +// sendParamtoNet(Url.getIdentificationBankCard, param, 101, mActivity, +// true); + } + + public final static int GET_SYSTEM_TIME_RESULT = 103; + private String system_time = null; + + public void getSystemTime() { + String username = mEt_phone.getText().toString().trim(); + Map param = new HashMap<>(); + param.put("mobile",username); + param.put("type","3"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); +// Map param = new HashMap(); +// sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, +// AddBankCardSecondActivity.this, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case MSG_SEND: + + + try { + JSONObject objs2 = new JSONObject(resultJson); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals("200")) { + mtb_getNum.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showMessage(message, 3000); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case 101: + double withdrawableBalance = 0;// 可提款金额 + JSONObject jsonObject = null; + String code = null; + String message = null; + if (resultJson != null) { + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + if (code.equals("200")) { + dialog.dismiss(); + BaseApplication.finishActivity(); + if (ableBlance != 0 && mFwMoney != 0) { + Intent intent = new Intent(ct, + DrawWith2Atvitity.class); + intent.putExtra("ableBlance", ableBlance); + intent.putExtra("mFwMoney", mFwMoney); + intent.putExtra("mOneDraw", mOneDraw); + startActivity(intent); + + } + this.finish(); + ToastUtil.showMessage(message); + } else { + ToastUtil.showMessage(message); + } + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("服务器异常"); + } + } else { + ToastUtil.showMessage("服务器异常"); + } + break; + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + new Thread(networkTask3).start(); + break; + default: + break; + } + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + long times = System.currentTimeMillis(); + mbBitmap = getInternetPicture(Url.getImagecode + "?t=" + times); + handler1.sendEmptyMessage(1); + + } + }; + Bitmap mbBitmap = null; + Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + switch (msg.what) { + case 1: + if (mbBitmap != null) + mIv_num.setImageBitmap(mbBitmap); + + break; + case 2: + String str = (String) msg.obj; + + JSONObject objs; + try { + objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (retcode.equals(String.valueOf(1))) { + // sendMessageDialog(phoneNum); + new Thread(networkTask3).start(); + } else { + aaa(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 3: + String str2 = (String) msg.obj; + JSONObject objs2; + try { + objs2 = new JSONObject(str2); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals(String.valueOf(1))) { + mtb_getNum.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showMessage(message, 3000); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + default: + break; + } + } + + }; + String sessionid = null; + + public Bitmap getInternetPicture(String UrlPath) { + Bitmap bm = null; + // 1、确定网址 + // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg + String urlpath = UrlPath; + // 2、获取Uri + try { + URL uri = new URL(urlpath); + + // 3、获取连接对象、此时还没有建立连接 + HttpURLConnection connection = (HttpURLConnection) uri + .openConnection(); + // 4、初始化连接对象 + // 设置请求的方法,注意大写 + connection.setRequestMethod("GET"); + // 读取超时 + connection.setReadTimeout(5000); + // 设置连接超时 + connection.setConnectTimeout(5000); + // 5、建立连接 + connection.connect(); + String cookieval = connection.getHeaderField("set-cookie"); + + if (cookieval != null) { + sessionid = cookieval.substring(0, cookieval.indexOf(";")); + } + + // 6、获取成功判断,获取响应码 + if (connection.getResponseCode() == 200) { + // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中 + InputStream is = connection.getInputStream(); + // 8、从流中读取数据,构造一个图片对象GoogleAPI + bm = BitmapFactory.decodeStream(is); + // 9、把图片设置到UI主线程 + // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件; + is.close(); + + } else { + bm = null; + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return bm; + + } + + Runnable networkTask3 = new Runnable() { + + @Override + public void run() { + // TODO + yzCode(); + + } + }; + + // 获取验证码 + private void yzCode() { + final String username = mEt_phone.getText().toString().trim(); + try { + // 对输入的内容进行编码,防止中文乱码 + String usernum = URLEncoder.encode(mEt_yzm.getText().toString() + .trim(), "UTF-8"); + int a = StringUtil.getnum(); + String mc = null; + // SimpleDateFormat fmt = new + // SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // String timestr = fmt.format(new Date()); + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(username + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getsendSms + "?mc=" + mc + "&type=4&a=" + a); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 3; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onDestroy() { + if (mtb_getNum != null) { + mtb_getNum.onDestroy(); + } + super.onDestroy(); +// getContentResolver().unregisterContentObserver(mObserver); + } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + + mIsRight(); + + } + }; + + private void mIsRight() { + try { + // 对输入的内容进行编码,防止中文乱码 + String username = URLEncoder.encode(mEt_yzm.getText().toString() + .trim(), "UTF-8"); + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getvalide + "?valicode=" + username); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 2; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * 银行卡四位加空格 + * + * @param mEditText + */ + protected void bankCardNumAddSpace(final EditText mEditText) { + mEditText.addTextChangedListener(new TextWatcher() { + int beforeTextLength = 0; + int onTextLength = 0; + boolean isChanged = false; + + int location = 0;// 记录光标的位置 + private char[] tempChar; + private StringBuffer buffer = new StringBuffer(); + int konggeNumberB = 0; + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + beforeTextLength = s.length(); + if (buffer.length() > 0) { + buffer.delete(0, buffer.length()); + } + konggeNumberB = 0; + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == ' ') { + konggeNumberB++; + } + } + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + onTextLength = s.length(); + buffer.append(s.toString()); + if (onTextLength == beforeTextLength || onTextLength <= 3 + || isChanged) { + isChanged = false; + return; + } + isChanged = true; + } + + @Override + public void afterTextChanged(Editable s) { + if (!StringUtil.isEmpty(mEt_phone.getText().toString()) + && !StringUtil.isEmpty(mEt_num.getText().toString())) { + mBt_next.setClickable(true); + mBt_next.setBackgroundResource(R.drawable.selector_btn); + } else { + mBt_next.setClickable(false); + mBt_next.setBackgroundResource(R.drawable.bg_next_btnbar); + } + if (isChanged) { + location = mEditText.getSelectionEnd(); + int index = 0; + while (index < buffer.length()) { + if (buffer.charAt(index) == ' ') { + buffer.deleteCharAt(index); + } else { + index++; + } + } + + index = 0; + int konggeNumberC = 0; + while (index < buffer.length()) { + if ((index == 4 || index == 9 || index == 14 + || index == 19 || index == 24)) { + buffer.insert(index, ' '); + konggeNumberC++; + } + index++; + } + + if (konggeNumberC > konggeNumberB) { + location += (konggeNumberC - konggeNumberB); + } + + tempChar = new char[buffer.length()]; + buffer.getChars(0, buffer.length(), tempChar, 0); + String str = buffer.toString(); + if (location > str.length()) { + location = str.length(); + } else if (location < 0) { + location = 0; + } + + mEditText.setText(str); + Editable etable = mEditText.getText(); + Selection.setSelection(etable, location); + isChanged = false; + } + } + }); + } + + +// private Handler mHandler = new Handler() { +// @Override +// public void handleMessage(Message msg) { +// if (msg.what == LoginActivity.MSG_RECEIVED_CODE) { +// String code = (String) msg.obj; +// if (code != null) { +// mEt_getnum.setText(code.trim()); +// } +// +// } +// } +// }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddCaseRecordActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddCaseRecordActivity.java new file mode 100644 index 0000000..e02eace --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddCaseRecordActivity.java @@ -0,0 +1,1049 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat4; +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat5; + +import android.Manifest; +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.provider.MediaStore; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.DecimalFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.AddCaseRecordAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.CaseRecordBean.DatasCase; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +public class AddCaseRecordActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private View mView; + private AddCaseRecordActivity mActivity; + public static final int GET_RESULT_ADD_CASERECORD = 201; + public static final int GET_RESULT_MODIFY_CASERECORD = 202; + public static final int GET_RESULT_DELETE_CASERECORD = 203; + private static final int HANDLER_PHOTOS = 3; + private String patientUuid; + private String mExpertUuid; + private Intent getIntent; + private RelativeLayout mRl_date; + private EditText mEt_note; + private GridView mGv_photos; + private TextView mTv_date; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddCaseRecordAdapter gv_adapter; + private AddBitmaps mAddBitmaps; + Calendar dateAndTime; + int v_year, v_month, v_day; + private String mUpTime = null; + private RelativeLayout mRl_bigPhoto; + private Button mTv_delete, mBt_deleteRecord; + private ImageView mIv_bigPhoto; + private boolean mIsModify = false; + private DatasCase mDatasCase; + ArrayList images = new ArrayList(); + private ViewPager mPager; + + // private List picPaths = new ArrayList(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub + getIntent = getIntent(); + if (getIntent.getType().equals("modify")) { + mIsModify = true; + } + top_title.setText("病情记录"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + mView = UIUtils.inflate(R.layout.activity_add_case_record); + + mActivity = this; + initIntent(); + initView(); + initLisener(); + return mView; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + } + + private void initLisener() { + mBt_deleteRecord.setOnClickListener(this); + mRl_date.setOnClickListener(this); + mGv_photos.setOnItemClickListener(this); + // mRl_bigPhoto.setOnClickListener(this); + mGv_photos.setAdapter(gv_adapter); + bottomSelectDate(); + } + + private void initIntent() { + mExpertUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + if (mIsModify) { + dateAndTime = Calendar.getInstance(); + mDatasCase = (DatasCase) getIntent + .getSerializableExtra("caseRecord"); + + top_right_text.setText("修改"); + SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); + + try { + Date date = fmt.parse(mDatasCase.getCreate_date()); + dateAndTime.setTime(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } else { + patientUuid = getIntent.getStringExtra("patientUuid"); + top_right_text.setText("提交"); + dateAndTime = Calendar.getInstance(Locale.CHINA); + + } + v_year = dateAndTime.get(Calendar.YEAR); + v_month = dateAndTime.get(Calendar.MONTH); + v_day = dateAndTime.get(Calendar.DAY_OF_MONTH); + } + + private DatePickerDialog mPickerDialog; + + public void initView() { + String s_month = v_month + ""; + String s_day = v_day + ""; + mRl_bigPhoto = (RelativeLayout) mView + .findViewById(R.id.rl_addcase_bigphoto); + // mTv_delete = (Button) mView.findViewById(R.id.bt_addcase_delete); + mBt_deleteRecord = (Button) mView.findViewById(R.id.bt_delete_record); + // mIv_bigPhoto = (ImageView) mView.findViewById(R.id.iv_addcase_big); + mRl_date = (RelativeLayout) mView.findViewById(R.id.rl_addrecord_time); + mEt_note = (EditText) mView.findViewById(R.id.et_addrecord_note); + mTv_date = (TextView) mView.findViewById(R.id.tv_add_case_time); + mGv_photos = (GridView) mView.findViewById(R.id.gv_case_photos); + mPager = (ViewPager) mView.findViewById(R.id.pager); + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + if (v_month < 9) { + s_month = "0" + (v_month + 1); + } else { + s_month = (v_month + 1) + ""; + } + if (v_day < 10) { + s_day = "0" + v_day; + } + mUpTime = v_year + "-" + s_month + "-" + s_day; + mTv_date.setText(v_year + "年" + s_month + "月" + s_day + "日"); + if (mIsModify) { + mEt_note.setText(mDatasCase.getDes()); + } + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); + PutPhotos(); + gv_adapter = new AddCaseRecordAdapter(mActivity, mBitmaps, mAddBitmaps); + } + + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(AddCaseRecordActivity.this); + + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + mRl_bigPhoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + + public void PutPhotos() { + if (mIsModify) { + mBt_deleteRecord.setVisibility(View.VISIBLE); + if (mDatasCase.getPhoto().size() > 0) { + for (int i = 0; i < mDatasCase.getPhoto().size(); i++) { + mBitmaps.add(new AddBitmaps(false, null, mDatasCase + .getPhoto().get(i))); + } + if (mDatasCase.getPhoto().size() < 8) { + mBitmaps.add(mAddBitmaps); + } + } else { + mBitmaps.add(mAddBitmaps); + } + + } else { + mBt_deleteRecord.setVisibility(View.GONE); + mBitmaps.add(mAddBitmaps); + } + + } + + public Calendar mGoCaTime = Calendar.getInstance(Locale.CHINA); + + public void getTime(int v_year1, int v_month1, int v_day1) { + final Date time = new Date(); + if (mPickerDialog == null) { + mPickerDialog = new DatePickerDialog(mActivity, null, v_year, + v_month, v_day); + mPickerDialog.setTitle("时间日期"); + mPickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DatePicker datePicker = mPickerDialog.getDatePicker(); + int year = datePicker.getYear(); + int month = datePicker.getMonth(); + int day = datePicker.getDayOfMonth(); + mGoCaTime.set(Calendar.YEAR, year); + mGoCaTime.set(Calendar.MONTH, month); + mGoCaTime.set(Calendar.DAY_OF_MONTH, day); + if (time.getTime() - mGoCaTime.getTimeInMillis() < 0) { + ToastUtil.showMessage("所选时间无效"); + return; + } + DecimalFormat decimalFormat = new DecimalFormat( + "00"); + String m = decimalFormat.format(month + 1); + String d = decimalFormat.format(day); + mUpTime = year + "-" + m + "-" + d; + mTv_date.setText(year + "年" + m + "月" + d + "日"); + + } + }); + mPickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mPickerDialog.dismiss(); + } + }); + + } + if (!mPickerDialog.isShowing()) { + mPickerDialog.show(); + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case 0: + break; + case HANDLER_PHOTOS: + if (mBitmaps.size() < 8) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + } + } + }; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + hideSoftKeyboard(); + showProgressDialog("提交中,请稍候..."); + new Thread() { + public void run() { + if (mIsModify) { + modifyCaseRecord(); + } else { + addCaseRecord(); + } + handler.sendEmptyMessage(0); + }; + }.start(); + } else if (id == R.id.bt_delete_record) { + final ECListDialog dialog = new ECListDialog(mActivity, + new String[] { getString(R.string.caserecord_delete, "") }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + + deleteCaseRecord(); + dialog.dismiss(); + } + }); + dialog.setTitle("删除此病情记录"); + dialog.show(); + } else if (id == R.id.rl_addrecord_time) { +// getTime(v_year, v_month, v_day); + pwTime.showAtLocation(mRl_date, Gravity.BOTTOM, 0, 0); + } + } + private TimePopupWindow pwTime; + private void bottomSelectDate() { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY); + pwTime.setTime(new Date()); + + + + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR)+10; + // 设置标题 + pwTime.setPopupTitle("请选择日期"); + // 设置起始时间 + pwTime.setRange(1900, year); + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { +// if (date.getTime() - new Date().getTime() <= -24 * 60 * 60) { +// ToastUtil.showMessage("所选期无效"); +// return; +// } + mTv_date.setText( simpleDateFormat4.format(date)); + mUpTime =simpleDateFormat5.format(date); + } + }); + } + private ArrayList paths; + + public String getPhotoBase64(int position) { + if (mBitmaps.size() > position) { + if (!mBitmaps.get(position).isAdd()) { + if (mBitmaps.get(position).getBitmap() != null) { + + return Base64Util.BitmaptoBase64(mBitmaps.get(position) + .getBitmap()); + } else { + ToastUtil.showMessage("图片还未加载完毕"); + return "0.0"; + } + + } else { + return ""; + } + + } else { + return ""; + } + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + AddCaseRecordActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // picPaths.add(Base64Util.BitmaptoBase64(loadedImage)); + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于100kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 8) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + + // 添加 + public void addCaseRecord() { + + if (StringUtil.isEmpty(mEt_note.getText().toString().trim())) { + closeProgressDialog(); + ToastUtil.showMessage("记录内容不能为空"); + return; + } + top_right_text.setClickable(false); + + Map param = new HashMap(); + param.put("patient_uuid", patientUuid); + param.put("expert_uuid", mExpertUuid); + param.put("create_date", mUpTime); + param.put("des", mEt_note.getText().toString().trim()); + param.put("img1", getPhotoBase64(0)); + param.put("img2", getPhotoBase64(1)); + param.put("img3", getPhotoBase64(2)); + param.put("img4", getPhotoBase64(3)); + param.put("img5", getPhotoBase64(4)); + param.put("img6", getPhotoBase64(5)); + param.put("img7", getPhotoBase64(6)); + param.put("img8", getPhotoBase64(7)); + sendParamtoNet(Url.getAddConditionRecord, param, + GET_RESULT_ADD_CASERECORD, mActivity, true); + needreport(patientUuid); + } + + // 修改 + public void modifyCaseRecord() { + + if (StringUtil.isEmpty(mEt_note.getText().toString().trim())) { + ToastUtil.showMessage("记录内容不能为空"); + closeProgressDialog(); + return; + } + top_right_text.setClickable(false); + Map param = new HashMap(); + param.put("uuid", mDatasCase.getUuid()); + param.put("create_date", mUpTime); + param.put("des", mEt_note.getText().toString().trim()); + String imag1 = getPhotoBase64(0); + String imag2 = getPhotoBase64(1); + String imag3 = getPhotoBase64(2); + String imag4 = getPhotoBase64(3); + String imag5 = getPhotoBase64(4); + String imag6 = getPhotoBase64(5); + String imag7 = getPhotoBase64(6); + String imag8 = getPhotoBase64(7); + + if (imag1.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag2.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag3.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag4.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag5.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + param.put("img1", imag1); + param.put("img2", imag2); + param.put("img3", imag3); + param.put("img4", imag4); + param.put("img5", imag5); + param.put("img6", imag6); + param.put("img7", imag7); + param.put("img8", imag8); + sendParamtoNet(Url.getUpdateFollowUp, param, + GET_RESULT_MODIFY_CASERECORD, mActivity, true); + } + + // 删除 + public void deleteCaseRecord() { + showProgressDialog("提交中,请稍候..."); + Map param = new HashMap(); + param.put("uuid", mDatasCase.getUuid()); + sendParamtoNet(Url.getDelConditionRecord, param, + GET_RESULT_DELETE_CASERECORD, mActivity, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + // TODO Auto-generated method stub + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + Intent intent = new Intent(); + // setResult(201, intent); + // finish(); + switch (resultCode) { + // 增加 + case GET_RESULT_ADD_CASERECORD: + + top_right_text.setClickable(true); + setResult(201, intent); + finish(); + + break; + // 修改 + case GET_RESULT_MODIFY_CASERECORD: + top_right_text.setClickable(true); + intent.putExtra("uuid", mDatasCase.getUuid()); + setResult(202, intent); + finish(); + + break; + // 删除 + case GET_RESULT_DELETE_CASERECORD: + + intent.putExtra("uuid", mDatasCase.getUuid()); + setResult(203, intent); + finish(); + + break; + + default: + break; + } + + } + + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + hideSoftKeyboard(); + // TODO Auto-generated method stub + if (mBitmaps.get(position).isAdd()) { + + // Intent intent = new Intent(mActivity, + // SelectedPhotoActivity.class); + // mActivity.startActivityForResult(intent, 101); + selectedPhotoView = UIUtils + .inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + // imageView.setVisibility(View.GONE); + imageView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(mView, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + selectedPhoto(); + + } else { + // GetBytes(); + mRl_bigPhoto.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + PagerSetAdapter(position); + } + } + + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + + } else { + EasyWindow.with(AddCaseRecordActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(AddCaseRecordActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读写的申请 + EasyWindow.cancelAll(); return; + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11(); + } else { + EasyWindow.with(AddCaseRecordActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(AddCaseRecordActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问摄像头的申请 + EasyWindow.cancelAll(); + } + + }, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto(); + } + + + } + }); + + ll_selected_photo.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(AddCaseRecordActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + mActivity.startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(AddCaseRecordActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(AddCaseRecordActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + mActivity.startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读写的申请 + EasyWindow.cancelAll(); + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + mActivity.startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } + + } + }); + tv_cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = Uri.fromFile(new File(Environment + .getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(AddCaseRecordActivity.this, "photoUri", + photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + if (!top_right_text.isClickable()) { + top_right_text.setClickable(true); + + } + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (mRl_bigPhoto.getVisibility() == View.VISIBLE) { + mRl_bigPhoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.VISIBLE); + return false; + } else { + return super.onKeyDown(keyCode, event); + } + + } else { + return super.onKeyDown(keyCode, event); + } + + } + private void needreport(String id) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("record_case"); + rbens.setDeal_object(id); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddGroupActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddGroupActivity.java new file mode 100644 index 0000000..7eb5a9c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddGroupActivity.java @@ -0,0 +1,613 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.GroupPatientList; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.PatientData; +import cn.shangyu.gdxzExpert.bean.GroupPatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + + +public class AddGroupActivity extends BaseActivity implements OnCallBackFromNet { + View view; + private String uuid; + private AddGroupActivity mActivity; + private EditText mEt_add_name; + private ImageView mIv_delete_name; + private String mName; + private RelativeLayout mRl_addPatient; + private GroupPatientList bean; + private ArrayList PatientList = new ArrayList(); + private ArrayList AllPatientList = new ArrayList();//所有患者列表 + PatientAdapter patientAdapter; + private ListView mLv_patients; + private Intent getIntent; + private String GroupUuid, GroupName; + private boolean isUpdate = false; + private Button mBt_delete; + private int type; + private String list_sort = "0";//0 按首字母排序 1 随访时间排序 + private CheckBox cb_sort; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("保存"); + top_right_text.setOnClickListener(this); + // top_title.setText("患者分组"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_make_group_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_make_group); + } + mEt_add_name = (EditText) view.findViewById(R.id.et_add_group_name); + mIv_delete_name = (ImageView) view + .findViewById(R.id.iv_add_group_delete); + mRl_addPatient = (RelativeLayout) view + .findViewById(R.id.rl_add_group_patient); + mLv_patients = (ListView) view.findViewById(R.id.lv_add_group); + mBt_delete = (Button) view.findViewById(R.id.bt_delete_group); + cb_sort = (CheckBox) view.findViewById(R.id.cb_sort); + mBt_delete.setOnClickListener(this); + mRl_addPatient.setOnClickListener(this); + mIv_delete_name.setOnClickListener(this); + mActivity = this; + getIntent = getIntent(); + GroupUuid = getIntent.getStringExtra("uuid"); + getPatientList(); +// String result = SharePrefUtil.getString(mActivity, Url.getGroupList, ""); +// LogUtil.i("groupListresult = "+result); +// // 解析列表 +// if (!TextUtils.isEmpty(result)) { +// bean = GsonTools.fromGsonToBean(result, GroupPatientList.class); +// // 初始化列表的数据 +// PatientList.clear(); +// AllPatientList.clear(); +// for (int i = 0; i < bean.data.size(); i++) { +//// if (bean.data.get(i).uuid.equals("0")) { +//// AllPatientList.addAll(bean.data.get(i).patientList); +//// // PatientList.addAll(bean.data.get(i).patientList); +//// +//// // mResultView.setAdapter(patientAdapter); +//// } +// if (!bean.data.get(i).uuid.equals(GroupUuid)) { +// AllPatientList.addAll(bean.data.get(i).patientList); +// } +// } +// +// } + uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + initIntent(); + cb_sort.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked){ + list_sort = "1"; + cb_sort.setText("按随访时间"); + }else { + list_sort = "0"; + cb_sort.setText("按首字母"); + } + getGroup(); + } + }); + return view; + } + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param + * + * @param + */ + private void getPatientList() { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", SharePrefUtil.getString(mActivity, Constant.uuid, "")); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getpatientList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + if (!TextUtils.isEmpty(info.result)) { + PatientListBean bean1 = GsonTools.fromGsonToBean(info.result, PatientListBean.class); + // 初始化列表的数据 +// PatientList.clear(); +// AllPatientList.clear(); + for (int i = 0; i < bean1.data.size(); i++) { + PatientListBean.PatientData patientData = bean1.data.get(i); + if (patientData!=null){ + PatientData date = new PatientData(); + date.setUuid(patientData.getUuid()); + date.setType(patientData.getType()); + date.setRealName(patientData.getRealName()); + date.setNickname(patientData.nickname); + date.setPhoto(patientData.getPhoto()); + date.setPhoto(patientData.getPhoto()); + date.setJoin_date(patientData.getJoin_date()); + AllPatientList.add(date); + } + + } + LogUtil.i("AllPatientList = "+AllPatientList.size());//797 + +// +// +// +// } + + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + public void initIntent() { + + GroupName = getIntent.getStringExtra("groupname"); + type = getIntent.getIntExtra("type",0); + + if (!StringUtil.isEmpty(GroupUuid)) { + getGroup(); + top_title.setText("编辑分组"); + mEt_add_name.setText(GroupName); + mEt_add_name.setSelection(GroupName.length()); + isUpdate = true; + mBt_delete.setVisibility(View.VISIBLE); + } else { + top_title.setText("新建分组"); + } + +// if (type==1){ +// mRl_addPatient.setVisibility(View.GONE); +// mIv_delete_name.setVisibility(View.GONE); +// mBt_delete.setVisibility(View.GONE); +// } + } + + public void getGroup() { + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + param.put("group_uuid", GroupUuid); + param.put("list_sort", list_sort); + sendParamtoNet(Url.getPatientListByGroup, param, + GET_GROUP_EDTAIL_RESULT, mActivity, true); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + mName = mEt_add_name.getText().toString().trim(); + if (StringUtil.isEmpty(mName)) { + ToastUtil.showMessage("请填写组名"); + return; + } else { + if (isUpdate) { + getUpdateGroup(); + } else { + getGroupAndPatient(); + } + } + } else if (id == R.id.rl_add_group_patient) { + hideSoftKeyboard(); + Intent intent = new Intent(mActivity, SearchForGroupActivity.class); + intent.putExtra("PatientList",PatientList); + intent.putExtra("GroupUuid",GroupUuid); + startActivityForResult(intent, GET_PATIENTS_RESULT); + } else if (id == R.id.iv_add_group_delete) { + mEt_add_name.setText(""); + } else if (id == R.id.bt_delete_group) { + delVisit(); + } + } + + ECAlertDialog buildAlert; + + public void delVisit() { + buildAlert = ECAlertDialog.buildAlert(mActivity, "删除分组?", "取消", "确认", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + getDeleteGroup(); + buildAlert.dismiss(); + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + public static final int GET_PATIENTS_RESULT = 201; + // 添加 修改 删除 + public static final int GET_ADD_GROUP_RESULT = 101; + public static final int GET_GROUP_EDTAIL_RESULT = 102; + public static final int GET_GROUP_UPDATE_RESULT = 103; + + public void getGroupAndPatient() { + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + param.put("name", mName); + param.put("patient_uuid", getUuids()); + sendParamtoNet(Url.getAddGroup, param, GET_ADD_GROUP_RESULT, mActivity, + true); + needreportSimple("add_group"); + } + + public void getUpdateGroup() { + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("uuid", GroupUuid); + param.put("name", mName); + param.put("patient_uuid", getUuids()); + sendParamtoNet(Url.getUpdateGroup, param, GET_ADD_GROUP_RESULT, + mActivity, true); + needreportSimple("update_group"); + } + + public void getDeleteGroup() { + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("group_uuid", GroupUuid); + param.put("expert_uuid", uuid); + sendParamtoNet(Url.getDeleteGroup, param, GET_ADD_GROUP_RESULT, + mActivity, true); + needreportSimple("del_group"); + } + + public String getUuids() { + StringBuilder sb = new StringBuilder(); + if (PatientList.size() > 0) { + for (int i = 0; i < PatientList.size(); i++) { + sb.append(PatientList.get(i).getUuid() + ","); + } + return sb.toString(); + } + + return ""; + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + closeProgressDialog(); + switch (resultCode) { + // 添加 + case GET_ADD_GROUP_RESULT: + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + if (bean.code.equals("2")) { + ToastUtil.showToast("该分组已存在"); + } else { + + ToastUtil.showToast(bean.message); + } + + return; + } else { + Intent intent = new Intent(); + setResult(GroupingActivity.GET_GROUP_RESULt, intent); + finish(); + } + break; + // 分组详情 + case GET_GROUP_EDTAIL_RESULT: + LogUtil.i("resultJson = "+resultJson); + GroupPatientListBean gbean = GsonTools.fromGsonToBean(resultJson, + GroupPatientListBean.class); + + if (1==gbean.getCode()) { +// PatientList.clear(); + + for (int i = 0; i < gbean.getData().size(); i++) { + GroupPatientListBean.DataBean dataBean = gbean.getData().get(i); + if (dataBean!=null){ + PatientData date = new PatientData(); + date.setUuid(dataBean.getUuid()); + date.setType(dataBean.getType()); + date.setRealName(dataBean.getRealName()); + date.setNickname(dataBean.getNickname()); + date.setPhoto(dataBean.getPhoto()); + PatientList.add(date); + } + + } + patientAdapter = new PatientAdapter(mActivity); + mLv_patients.setAdapter(patientAdapter); + + } + LogUtil.i("PatientList = "+PatientList.size()); + break; + default: + break; + } + + } + + ArrayList uuids; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + LogUtil.i("执行了"); + switch (resultCode) { + case GET_PATIENTS_RESULT: + // uuids = new ArrayList(); + uuids = data.getStringArrayListExtra("uuids"); + + int sssss = uuids.size(); + // PatientList.clear(); + if (PatientList.size() > 0) { + for (int i = 0; i < PatientList.size(); i++) { + if (uuids.contains(PatientList.get(i).getUuid())) { + uuids.remove(PatientList.get(i).getUuid()); + } + } + } + for (int i = 0; i < AllPatientList.size(); i++) { + for (int j = uuids.size()-1;j>=0;j--){ + LogUtil.i("AllPatientList = "+AllPatientList.get(i)); + if (AllPatientList.get(i)!=null&&uuids.get(j).equals(AllPatientList.get(i).getUuid())){ + PatientList.add(AllPatientList.get(i)); + uuids.remove(j); + continue; + } +// if (uuids.contains(AllPatientList.get(i).getUuid())) { +// PatientList.add(AllPatientList.get(i)); +// +// } + } + + } + if (PatientList.size() > 0) { + if (patientAdapter == null) { + patientAdapter = new PatientAdapter(mActivity); + mLv_patients.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + + } + break; + + default: + break; + } + } + + public class PatientAdapter extends BaseAdapter { + + private Context context; + + public PatientAdapter(Context context) { + this.context = context; + } + + @Override + public int getCount() { + LogUtil.i("PatientListAdapter.size() = "+PatientList.size()); + return PatientList.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, R.layout.item_patient_list_big1, + null); + } + else + { + convertView = View.inflate(context, R.layout.item_patient_list, + null); + } + + mHolder = new Holder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_touxiang); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name); + mHolder.tvnickname = (TextView) convertView + .findViewById(R.id.tv_nick_name); + mHolder.mIv_delete = (ImageView) convertView + .findViewById(R.id.iv_item_delete); + convertView.setTag(mHolder); + } else { + mHolder = (Holder) convertView.getTag(); + } + mHolder.mIv_delete.setVisibility(View.VISIBLE); + mHolder.mIv_delete.setTag(position); + mHolder.mIv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + PatientList.remove(PatientList.get((Integer) v.getTag())); + patientAdapter.notifyDataSetChanged(); + } + }); + // 给控件赋值. + PatientData p = PatientList.get(position); + if (p!=null){ + // 1.随访关系 2.包月服务关系 (type==2即为VIP)3.既是随访又是vip + Drawable rightDrawable; + if (2 == p.type || 3 == p.type) { + rightDrawable = context.getResources().getDrawable( + R.drawable.vip); + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + } else { + rightDrawable = null; + } + mHolder.tvTitle.setCompoundDrawables(null, null, rightDrawable, + null); + // 姓名 + if (StringUtil.isEmpty(p.nickname)){ + mHolder.tvTitle.setText(p.realName); + }else { + mHolder.tvTitle.setText(p.nickname); + } + if(CommonUtil.BigModule()) + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + else + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + + }else { + + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return PatientList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + private class Holder { + public TextView tvnickname; + public ImageView ivImage; + public TextView tvTitle; + public ImageView mIv_delete; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientAppointmentActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientAppointmentActivity.java new file mode 100644 index 0000000..5963893 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientAppointmentActivity.java @@ -0,0 +1,521 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean.DataTime; +import cn.shangyu.gdxzExpert.ecdemo.ui.SettingItem; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:门诊预约 + */ +public class AddOutpatientAppointmentActivity extends BaseActivity { + + private TextView tv_howLong; + private EditText et_price; + private EditText et_num; + private SettingItem m_outpatient; + private String price = ""; + private String isEnable = ""; + // 门诊服务查看 + public static String clinicDetailUrl = Url.getclinicDetail; + // 预约门诊服务设置1(价格、人次等设置) + public static String addClinicUrl = Url.getaddClinic; + // 预约门诊服务设置2(时间设置) + public static String addClinicTimeUrl = Url.getaddClinicTime; + private String places; + private String clinicWeek = ""; + private String morAft = ""; + private Button bt_ok; + private LinearLayout m_service; + + @Override + public void setTitle() { + top_title.setText("门诊预约"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_outpatient_appointment); + m_outpatient = (SettingItem) view.findViewById(R.id.switch_outpatient);// 是否开启服务 + et_price = (EditText) view.findViewById(R.id.et_price);// 价格 + et_num = (EditText) view.findViewById(R.id.et_num);// 半天的次数 + m_service = (LinearLayout) view.findViewById(R.id.rl_setting_howLong); + tv_howLong = (TextView) view.findViewById(R.id.tv_howLong);// 服务时段回显 + bt_ok = (Button) view.findViewById(R.id.bt_ok); + + // 初始化是否开启 + boolean isOpen = SharePrefUtil.getBoolean(ct, + "Outpatient_m_outpatient", false); + m_outpatient.setChecked(isOpen); + // 是否开启服务 + m_outpatient.getCheckedTextView().setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + m_outpatient.toggle(); + if (m_outpatient.isChecked()) { + setEnable(true); + operaterVIP(1); + } else { + setEnable(false); + operaterVIP(0); + } + } + }); + + if (m_outpatient.isChecked()) { + setEnable(true); + } else { + setEnable(false); + } + + m_service.setOnClickListener(this); + bt_ok.setOnClickListener(this); + + // 从sp里取出缓存 + String monthDetail = SharePrefUtil.getString(ct, clinicDetailUrl, null); + if (!TextUtils.isEmpty(monthDetail)) { + processData(monthDetail, true, 0, true); + } else { + showProgressDialog("正在加载"); + } + // showProgressDialog("加载中..."); + // String places = SharePrefUtil.getString(ct, "Monthly_et_num", null); + // if (!TextUtils.isEmpty(places)) { + // et_num.setText(places); + // } + // String price = SharePrefUtil.getString(ct, "Monthly_et_price", null); + // if (!TextUtils.isEmpty(price)) { + // et_price.setText(price); + // } + // 查看服务设置 + lookAndSetMonth(clinicDetailUrl, true, 0, false); + + return view; + } + + private void setEnable(boolean isEnable) { + et_price.setEnabled(isEnable); + et_num.setEnabled(isEnable); + bt_ok.setEnabled(isEnable); + m_service.setEnabled(isEnable); + if (isEnable) { + bt_ok.setVisibility(View.VISIBLE); + } else { + bt_ok.setVisibility(View.GONE); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 修改设置提交 submitSetting + * + * void + */ + private void submitSetting() { + price = et_price.getText().toString();// 价格 + places = et_num.getText().toString();// 次数 + if (m_outpatient.isChecked()) { + isEnable = "1";// 开启 + } else { + isEnable = "0";// 关闭 + } + if (TextUtils.isEmpty(price)) { + ToastUtil.showToast("请输入价格"); + return; + } + if (0 > Double.parseDouble(price)) { + ToastUtil.showToast("价格最小0元"); + return; + } + if (100000 < Double.parseDouble(price)) { + ToastUtil.showToast("价格最大100000元"); + return; + } + if (TextUtils.isEmpty(places)) { + ToastUtil.showToast("请输入次数"); + return; + } + if (0 > Double.parseDouble(places)) { + ToastUtil.showToast("名额最少0名"); + return; + } + if (50 < Double.parseDouble(places)) { + ToastUtil.showToast("名额最多50名"); + return; + } + if (TextUtils.isEmpty(clinicWeek) && TextUtils.isEmpty(morAft)) { + ToastUtil.showToast("请设置门诊时间"); + return; + } + + // 修改服务设置 + // 价格、人次等设置 + showProgressDialog("提交中..."); + lookAndSetMonth(addClinicUrl, false, 1, false); + + } + + /** + * 提交与查看数据 lookAndSetMonth + * + * @param loadUrl + * @param isLook + * @param type + * @param isCache + * void + */ + private void lookAndSetMonth(final String loadUrl, final boolean isLook, + final int type, final boolean isCache) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + Constant.uuid, ""); + RequestParams params = new RequestParams();// 封装参数 + if (isLook && 0 == type) {// 判断是查看服务,还是设置服务 + params.addBodyParameter("expertUuid", expertUuid); + } else if (!isLook && 1 == type) {// 价格,人次设置 + params.addBodyParameter("price", price); + params.addBodyParameter("places", places); + params.addBodyParameter("isEnable", isEnable); + params.addBodyParameter("expertUuid", expertUuid); + + // String time = SharePrefUtil.getString(ct, + // "key_outpatient_submit_time", ""); + // if (!StringUtil.isBland(time)) { + // int minute = DateUtil.compareTime(time, 5); + // if (minute < 5) { + // closeProgressDialog(); + // ToastUtil.showToast("您的提交太频繁,请等待5分钟后再提交!"); + // return; + // } + // } + } else if (!isLook && 2 == type) {// 时间设置 + // 取出门诊uuid + String clinicServiceUuid = SharePrefUtil.getString(ct, + "clinicServiceUuid", ""); + + params.addBodyParameter("clinicWeek", clinicWeek); + params.addBodyParameter("morAft", morAft); + params.addBodyParameter("clinicServiceUuid", clinicServiceUuid); + } + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("response_json---" + info.result); + if (isCache) { + SharePrefUtil.saveString(ct, clinicDetailUrl, + info.result); + } else { + processData(info.result, isLook, type, false); + } + // if (!isLook && 1 == type) { + // SharePrefUtil.saveString(ct, + // "key_outpatient_submit_time", + // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + // } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // ToastUtil.showToast("请求失败,请稍后再试"); + } + }); + } + + /** + * 解析数据 processData + * + * @param result + * @param isLook + * @param type + * @param isCache + * void + */ + protected void processData(String result, boolean isLook, int type, + boolean isCache) { + + MonthDetailBean bean = GsonTools.fromGsonToBean(result, + MonthDetailBean.class); + // 判断是查看还是修改 + if (isLook) { + closeProgressDialog(); + SharePrefUtil.saveString(ct, clinicDetailUrl, result); + if ("1".equals(bean.code)) {// 查询成功 + + if (bean.data != null) { + if (!isCache) { + if (1 == bean.data.isEnable) {// 是否开启,1是,0否 + m_outpatient.setChecked(true); + } else { + m_outpatient.setChecked(false); + } + SharePrefUtil.saveBoolean(ct, + "Outpatient_m_outpatient", + m_outpatient.isChecked()); + } + // 价格 + + if (!TextUtils.isEmpty(bean.data.price)) { + int price = (int) Math.round(Double + .parseDouble(bean.data.price)); + et_price.setText(price + ""); + SharePrefUtil.saveString(ct, "Monthly_et_price", + bean.data.price); + } else { + et_price.setText(""); + } + // 次数 + if (!TextUtils.isEmpty(bean.data.places)) { + et_num.setText(bean.data.places); + SharePrefUtil.saveString(ct, "Monthly_et_num", + bean.data.places); + } else { + et_num.setText(""); + } + } + + List time = bean.time; + tv_howLong.setText(""); + clinicWeek = ""; + morAft = ""; + if (time != null && time.size() > 0) {// 门诊时间 + for (int i = 0; i < time.size(); i++) { + String cw = time.get(i).clinicWeek; + String w = ""; + if (!TextUtils.isEmpty(cw)) { + clinicWeek += cw + ","; + switch (Integer.parseInt(cw)) { + case 1: + w = "星期日 "; + break; + case 2: + w = "星期一 "; + break; + case 3: + w = "星期二 "; + break; + case 4: + w = "星期三 "; + break; + case 5: + w = "星期四 "; + break; + case 6: + w = "星期五 "; + break; + case 7: + w = "星期六 "; + break; + + default: + break; + } + } + String ma = time.get(i).morAft; + String m = ""; + morAft = morAft + ma + ","; + if ("0".equals(ma)) { + m = "全天"; + } else if ("1".equals(ma)) { + m = "上午"; + } else if ("2".equals(ma)) { + m = "下午"; + } + // 查看的回显 + if (i == time.size() - 1) { + tv_howLong.append(w + m); + } else { + tv_howLong.append(w + m + ","); + } + } + } + // 如果返回的code是 3 说明该服务已经被禁用 + } else if ("3".equals(bean.code)) { + SharePrefUtil.saveString(ct, clinicDetailUrl, null); + setEnable(false); + m_outpatient.setChecked(false); + m_outpatient.setEnabled(false);// radiobutton禁止点击 + // operaterVIP(0); + ToastUtil.showMessage(bean.message, 1); + } + + } else {// 修改设置 + if ("1".equals(bean.code)) {// 设置成功 + if (1 == type) { + // 时间设置 + // 保存门诊uuid到sp + MonthDetailBean b = GsonTools.fromGsonToBean(result, + MonthDetailBean.class); + SharePrefUtil.saveString(ct, "clinicServiceUuid", + b.data.uuid); + if (1 == bean.data.isEnable) {// 是否开启,1是,0否 + SharePrefUtil.saveBoolean(ct, + "Outpatient_m_outpatient", true); + } else { + SharePrefUtil.saveBoolean(ct, + "Outpatient_m_outpatient", false); + } + SharePrefUtil.saveString(ct, "Monthly_et_price", et_price + .getText().toString()); + SharePrefUtil.saveString(ct, "Monthly_et_num", et_num + .getText().toString()); + lookAndSetMonth(addClinicTimeUrl, false, 2, false); + } else if (2 == type) { + closeProgressDialog(); + ToastUtil.showToast("设置成功"); + lookAndSetMonth(clinicDetailUrl, true, 0, true); + } + } else { + closeProgressDialog(); + ToastUtil.showToast(bean.message); + } + } + + if (m_outpatient.isChecked()) { + setEnable(true); + } else { + setEnable(false); + } + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_ok) { + // 确定提交设置 + submitSetting(); + } else if (id == R.id.rl_setting_howLong) { + // 服务时段 + Intent intent = new Intent(ct, SelectDateClinicActivity.class); + intent.putExtra("week", clinicWeek); + intent.putExtra("dateTime", morAft); + startActivityForResult(intent, 88); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == 88 && resultCode == Activity.RESULT_OK) { + clinicWeek = data.getStringExtra("Week"); + morAft = data.getStringExtra("DateTime"); + String WeekDate = data.getStringExtra("WeekDate");// 回显 + + tv_howLong.setText(WeekDate); + } + } + + /** + * 服务是否开启 + */ + private void operaterVIP(int type) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + Constant.uuid, ""); + + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + params.addBodyParameter("VIPType", String.valueOf(2)); + params.addBodyParameter("operaterType", String.valueOf(type)); + LogUtil.d("expertUuid = " + expertUuid + ", VIPType = 2" + + ", operaterType = " + type); + showProgressDialog("操作中..."); + HttpHelper.loadData(HttpMethod.POST, Url.operaterVIP, params, + new RequestCallBack() { + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + // ToastUtil.showToast(arg1); + LogUtil.d("onFailure = " + arg1); + m_outpatient.toggle(); + setEnable(false); + SharePrefUtil.saveBoolean(ct, + "Outpatient_m_outpatient", + m_outpatient.isChecked()); + } + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + LogUtil.d("onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + // ToastUtil.showToast("开启成功!"); + } else if (retcode.equals(String.valueOf(3))) { + // ToastUtil.showToast("关闭成功"); + // 如果返回状态是5 说明该专家所在医院或地区限制开启服务 默认关闭该服务 + } else if (retcode.equals(String.valueOf(5))) { + ToastUtil.showToast(message); + setEnable(false); + m_outpatient.toggle(); + m_outpatient.setEnabled(false); + // operaterVIP(0);//调用关闭服务接口像服务器传参 + } else { + ToastUtil.showToast(message); + m_outpatient.toggle(); + setEnable(false); + } + SharePrefUtil.saveBoolean(ct, + "Outpatient_m_outpatient", + m_outpatient.isChecked()); + } catch (JSONException e) { + e.printStackTrace(); + m_outpatient.toggle(); + setEnable(false); + SharePrefUtil.saveBoolean(ct, + "Outpatient_m_outpatient", + m_outpatient.isChecked()); + } + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1Activity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1Activity.java new file mode 100644 index 0000000..759c166 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1Activity.java @@ -0,0 +1,612 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.TextPaint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.ListOutPatientBean; +import cn.shangyu.gdxzExpert.bean.ListWorkPlaceBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/1/10. + */ + +public class AddOutpatientArrangement1Activity extends BaseActivity implements RadioGroup.OnCheckedChangeListener,OnCallBackFromNet,AdapterView.OnItemClickListener{ + + private RadioGroup rg_group,rg_group1,rg_group2; + private static final int listWorkPlace = 1; + private static final int addOutPatient = 2; + private ListWorkPlaceBean fromJson; + private PullToRefreshListView ll_list; + private int listSize; + private Drawable icon_1,icon_2; + private String weektypeName;//周一 周日 + private String weektype;//1-7 + private String daytypeName;//上午 下午 + private String daytype;//abcd + private RadioButton rb_1,rb_2,rb_3,rb_4,rb_5,rb_6,rb_7,rb_9,rb_10,rb_11,rb_12; + private String workplace_uuid; + private StopOutPatientListAdapter adapter; + private TextView bt_delete_visit; + private int choose_position; + private String uuid1; + private CustomProgressDialog pd; + private ECAlertDialog dilaog2; + + @Override + public void setTitle() { + top_title.setText("增加门诊安排"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_addoutpatientarrangment1_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_addoutpatientarrangment1); + } + initView(view); + initOnClick(); + initData(); + return view; + } + + private void initData() { + Intent intent = getIntent(); + Bundle extras = intent.getExtras(); + if (intent!=null&&extras!=null){ + top_title.setText("修改门诊安排"); + bt_delete_visit.setText("确认修改"); + ListOutPatientBean.DataBean.ListBean dataBean = (ListOutPatientBean.DataBean.ListBean)intent.getSerializableExtra("dataBean"); + daytype = dataBean.getDay(); + uuid1 = dataBean.getUuid(); + workplace_uuid = dataBean.getWorkplace_uuid(); + int week = dataBean.getWeek(); + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true); + if ("a".equals(daytype)){ + rb_9.setBackground(icon_new); + daytypeName = "上午"; + }else if ("b".equals(daytype)){ + rb_10.setBackground(icon_new); + daytypeName = "下午"; + }else if ("c".equals(daytype)){ + rb_11.setBackground(icon_new); + daytypeName = "晚上"; + }else if ("d".equals(daytype)){ + rb_12.setBackground(icon_new); + daytypeName = "全天"; + } + + switch (week){ + case 1: + rb_1.setBackground(icon_new); + weektypeName = "周一"; + weektype = "1"; + break; + case 2: + rb_2.setBackground(icon_new); + weektypeName = "周二"; + weektype = "2"; + break; + case 3: + rb_3.setBackground(icon_new); + weektypeName = "周三"; + weektype = "3"; + break; + case 4: + rb_4.setBackground(icon_new); + weektypeName = "周四"; + weektype = "4"; + break; + case 5: + rb_5.setBackground(icon_new); + weektypeName = "周五"; + weektype = "5"; + break; + case 6: + rb_6.setBackground(icon_new); + weektypeName = "周六"; + weektype = "6"; + break; + case 7: + rb_7.setBackground(icon_new); + weektypeName = "周日"; + weektype = "7"; + break; + } + } + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.listWorkPlace, param, listWorkPlace, this); + + } + + private void initOnClick() { + rg_group.setOnCheckedChangeListener(this); + rg_group1.setOnCheckedChangeListener(this); + rg_group2.setOnCheckedChangeListener(this); + ll_list.setOnItemClickListener(this); + bt_delete_visit.setOnClickListener(this); + } + + private void initView(View view) { + rg_group = view.findViewById(R.id.rg_group); + rg_group1 = view.findViewById(R.id.rg_group1); + rg_group2 = view.findViewById(R.id.rg_group2); + ll_list = view.findViewById(R.id.ll_list); + ll_list.setMode(PullToRefreshBase.Mode.DISABLED); + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + rb_4 = view.findViewById(R.id.rb_4); + rb_5 = view.findViewById(R.id.rb_5); + rb_6 = view.findViewById(R.id.rb_6); + rb_7 = view.findViewById(R.id.rb_7); + rb_9 = view.findViewById(R.id.rb_9); + rb_10 = view.findViewById(R.id.rb_10); + rb_11= view.findViewById(R.id.rb_11); + rb_12 = view.findViewById(R.id.rb_12); + bt_delete_visit = view.findViewById(R.id.bt_delete_visit); + + + icon_1 = UIUtils.getDrawable(R.drawable.shap_addoutpa1); + icon_2 = UIUtils.getDrawable(R.drawable.shap_addoutpa2); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_delete_visit) { + if (StringUtil.isEmpty(weektypeName)||StringUtil.isEmpty(daytypeName)){ + ToastUtil.showMessage("请选择门诊时间"); + return; + } + if (StringUtil.isEmpty(workplace_uuid)){ + ToastUtil.showMessage("请选择门诊地点"); + return; + } + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_addouroa, null); + final Dialog dialog1 = new AlertDialog.Builder(this).create(); + TextView tv_name = layout.findViewById(R.id.tv_name); + TextView tv_name1 = layout.findViewById(R.id.tv_name1); + TextView tv_addressdetail = layout.findViewById(R.id.tv_addressdetail); + + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog1.show(); + Window window =dialog1.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + tv_name.setText(weektypeName); + tv_name1.setText(daytypeName); + ListWorkPlaceBean.ListBean listBean; + if (fromJson.getList().size()==1){ + listBean = fromJson.getList().get(0); + }else { + listBean = fromJson.getList().get(choose_position); + } + int type = listBean.getType(); + String typename = null; + switch (type){ + case 1: + typename = "普通门诊"; + break; + case 2: + typename = "专家门诊"; + break; + case 3: + typename = "特需门诊"; + break; + case 4: + typename = "专科/专病门诊"; + break; + } + tv_addressdetail.setText(listBean.getHospital_name()+";"+listBean.getOffice_name()+";"+listBean.getLocation()+";"+typename+"。"); + + + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + dialog1.dismiss(); + } + }); + + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + pd.show(); + Map param = new HashMap<>(); + param.put("workplace_uuid",workplace_uuid); + param.put("week",weektype); + param.put("day",daytype); + param.put("type","1"); + param.put("note",""); + if (!StringUtil.isEmpty(uuid1)){ + param.put("uuid",uuid1); + sendJsonPostParamtoNetSignMD5(Url.updateOutPatientA, param, addOutPatient, AddOutpatientArrangement1Activity.this); + }else { + sendJsonPostParamtoNetSignMD5(Url.addOutPatientA, param, addOutPatient, AddOutpatientArrangement1Activity.this); + } + dialog1.dismiss(); + } + }); + } + } + + @SuppressLint("ResourceType") + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if(group != null && checkedId>0){ + if(group == rg_group){ + rg_group1.clearCheck(); + }else if(group == rg_group1){ + rg_group.clearCheck(); + } + group.check(checkedId); + } + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true); + Drawable icon_1 = UIUtils.getDrawable(R.drawable.shap_addpractisingaddress_normal); + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.rb_1) { + rb_1.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周一"; + weektype = "1"; + } else if (checkedId == R.id.rb_2) { + rb_2.setBackground(icon_new); + rb_1.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周二"; + weektype = "2"; + } else if (checkedId == R.id.rb_3) { + rb_3.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周三"; + weektype = "3"; + } else if (checkedId == R.id.rb_4) { + rb_4.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周四"; + weektype = "4"; + } else if (checkedId == R.id.rb_5) { + rb_5.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周五"; + weektype = "5"; + } else if (checkedId == R.id.rb_6) { + rb_6.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周六"; + weektype = "6"; + } else if (checkedId == R.id.rb_7) { + rb_7.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_1.setBackground(icon_1); + weektypeName = "周日"; + weektype = "7"; + } else if (checkedId == R.id.rb_9) { + rb_9.setBackground(icon_new); + rb_10.setBackground(icon_1); + rb_11.setBackground(icon_1); + rb_12.setBackground(icon_1); + daytypeName = "上午"; + daytype = "a"; + } else if (checkedId == R.id.rb_10) { + rb_10.setBackground(icon_new); + rb_9.setBackground(icon_1); + rb_11.setBackground(icon_1); + rb_12.setBackground(icon_1); + daytypeName = "下午"; + daytype = "b"; + } else if (checkedId == R.id.rb_11) { + rb_11.setBackground(icon_new); + rb_10.setBackground(icon_1); + rb_9.setBackground(icon_1); + rb_12.setBackground(icon_1); + daytypeName = "晚上"; + daytype = "c"; + } else if (checkedId == R.id.rb_12) { + rb_12.setBackground(icon_new); + rb_10.setBackground(icon_1); + rb_11.setBackground(icon_1); + rb_9.setBackground(icon_1); + daytypeName = "全天"; + daytype = "d"; + } + + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("AddOut"+resultJson +"resultCode = "+resultCode); + pd.dismiss(); + switch (resultCode){ + case listWorkPlace: + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, ListWorkPlaceBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())){ + listSize = fromJson.getList().size(); + adapter = new StopOutPatientListAdapter(fromJson.getList()); + ll_list.setAdapter(adapter); + } + break; + case addOutPatient: + + Gson gson1 = new Gson(); + BaseBean basebean = gson1.fromJson(resultJson, BaseBean.class); + if (basebean!=null&&"200".equals(basebean.code)){ + OutofPatientNoticeActivity.flagisListNotice = true; + finish(); +// dilaog2 = ECAlertDialog.buildAlert(AddOutpatientArrangement1Activity.this, +// "是否群发停/出诊公告给您的随访患者?", "取消", "发送", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dilaog2.dismiss(); +// +// finish(); +// } +// }, new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dilaog2.dismiss(); +// startActivity(new Intent(AddOutpatientArrangement1Activity.this,SendGroupMsgListActivity.class)); +// finish(); +// } +// }); +// dilaog2.setTitle("发布成功"); +// dilaog2.setCancelable(false); +// dilaog2.getWindow(); +// dilaog2.show(); + }else if(basebean.message.contains("data repeated")){ + ToastUtil.showMessage("重复添加门诊安排,请重新添加"); + }else { + ToastUtil.showMessage(basebean.message); + } + break; + + } + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if ( adapter!=null){ + choose_position =position-1; + adapter.setPosition(choose_position); + adapter.notifyDataSetChanged(); + } + } + + + class StopOutPatientListAdapter extends BaseAdapter{ + + private List list; + private int location1 = 99; + public StopOutPatientListAdapter(List list) { + this.list = list; + } + public void setPosition(int location){ + this.location1 = location; + + } + @Override + public int getCount() { + return list!=null&&list.size()>0?list.size():0; + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_addoutpatientlist_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_addoutpatientlist); + } + vh = new ViewHolder(); + vh.tv_hospital = convertView.findViewById(R.id.tv_hospital); + vh.tv_department = convertView.findViewById(R.id.tv_department); + vh.tv_address =convertView.findViewById(R.id.tv_address); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_type1 = convertView.findViewById(R.id.tv_type1); + vh.iv_addtrue = convertView.findViewById(R.id.iv_addtrue); + vh.rl_1 = convertView.findViewById(R.id.rl_1); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + final String hospital_name = list.get(position).getHospital_name(); + final String office_name = list.get(position).getOffice_name(); + final String location = list.get(position).getLocation(); + vh.tv_hospital.setText(hospital_name); + vh.tv_department.setText(office_name); + + switch (list.get(position).getType()){ + case 1: + vh.tv_type.setText("普通门诊"); + vh.tv_type1.setText("普通门诊"); + break; + case 2: + vh.tv_type.setText("专家门诊"); + vh.tv_type1.setText("专家门诊"); + break; + case 3: + vh.tv_type.setText("特需门诊"); + vh.tv_type1.setText("特需门诊"); + break; + case 4: + vh.tv_type.setText("专科/专病门诊"); + vh.tv_type1.setText("专科/专病门诊"); + break; + + } + ViewTreeObserver vto = vh.tv_address.getViewTreeObserver(); + final ViewHolder finalVh = vh; + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + TextPaint mTextPaint = finalVh.tv_address.getPaint(); + mTextPaint.setTextSize(finalVh.tv_address.getTextSize()); + int mTextViewWidth = (int) mTextPaint.measureText(location); + finalVh.tv_address.setText(location); + if (mTextViewWidth> finalVh.tv_address.getWidth()||mTextViewWidth>800){ + finalVh.tv_type.setVisibility(View.GONE); + finalVh.tv_type1.setVisibility(View.VISIBLE); + }else { + finalVh.tv_type.setVisibility(View.VISIBLE); + finalVh.tv_type1.setVisibility(View.GONE); + } + + } + }); + + + if (list.size()==1){ + vh.iv_addtrue.setVisibility(View.VISIBLE); + vh.rl_1.setBackground(icon_2); + workplace_uuid = list.get(position).getUuid(); + }else if (location1==position){ + vh.iv_addtrue.setVisibility(View.VISIBLE); + vh.rl_1.setBackground(icon_2); + workplace_uuid = list.get(position).getUuid(); + }else if (list.get(position).getUuid().equals(workplace_uuid)){ + vh.iv_addtrue.setVisibility(View.VISIBLE); + vh.rl_1.setBackground(icon_2); + }else { + vh.iv_addtrue.setVisibility(View.GONE); + vh.rl_1.setBackground(null); + } + if (location1!=position&&location1!=99){ + vh.iv_addtrue.setVisibility(View.GONE); + vh.rl_1.setBackground(null); + } + + return convertView; + } + public class ViewHolder { + + public TextView tv_hospital, tv_department, tv_address,tv_type,tv_type1; + public ImageView iv_addtrue; + public RelativeLayout rl_1; + + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1NewActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1NewActivity.java new file mode 100644 index 0000000..761699e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddOutpatientArrangement1NewActivity.java @@ -0,0 +1,741 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.TextPaint; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.ListOutPatientBean; +import cn.shangyu.gdxzExpert.bean.ListWorkPlaceBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/1/10. + */ + +public class AddOutpatientArrangement1NewActivity extends BaseActivity implements CompoundButton.OnCheckedChangeListener,RadioGroup.OnCheckedChangeListener,OnCallBackFromNet,AdapterView.OnItemClickListener{ + + private RadioGroup rg_group,rg_group1,rg_group2; + private static final int listWorkPlace = 1; + private static final int addOutPatient = 2; + private ListWorkPlaceBean fromJson; + private PullToRefreshListView ll_list; + private int listSize; + private Drawable icon_1,icon_2; + private String weektypeName;//周一 周日 + private String weektype;//1-7 + String[]week=new String[7]; + String[] weekName=new String[7]; + private String daytypeName;//上午 下午 + private String daytype;//abcd + private CheckBox rb_1,rb_2,rb_3,rb_4,rb_5,rb_6,rb_7; + + private RadioButton rb_9,rb_10,rb_11,rb_12; + private String workplace_uuid; + private StopOutPatientListAdapter adapter; + private TextView bt_delete_visit; + private int choose_position; + private String uuid1; + private CustomProgressDialog pd; + private ECAlertDialog dilaog2; + + @Override + public void setTitle() { + top_title.setText("增加门诊安排"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_addoutpatientarrangment1_big_new); + } + else + { + view = UIUtils.inflate(R.layout.activity_addoutpatientarrangment1_new); + } + initView(view); + initOnClick(); + initData(); + return view; + } + + private void initData() { + Intent intent = getIntent(); + Bundle extras = intent.getExtras(); + if (intent!=null&&extras!=null){ + top_title.setText("修改门诊安排"); + bt_delete_visit.setText("确认修改"); + ListOutPatientBean.DataBean.ListBean dataBean = (ListOutPatientBean.DataBean.ListBean)intent.getSerializableExtra("dataBean"); + daytype = dataBean.getDay(); + uuid1 = dataBean.getUuid(); + workplace_uuid = dataBean.getWorkplace_uuid(); + int week = dataBean.getWeek(); + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true); + if ("a".equals(daytype)){ + rb_9.setBackground(icon_new); + daytypeName = "上午"; + }else if ("b".equals(daytype)){ + rb_10.setBackground(icon_new); + daytypeName = "下午"; + }else if ("c".equals(daytype)){ + rb_11.setBackground(icon_new); + daytypeName = "晚上"; + }else if ("d".equals(daytype)){ + rb_12.setBackground(icon_new); + daytypeName = "全天"; + } + + switch (week){ + case 1: + rb_1.setBackground(icon_new); + weektypeName = "周一"; + weektype = "1"; + break; + case 2: + rb_2.setBackground(icon_new); + weektypeName = "周二"; + weektype = "2"; + break; + case 3: + rb_3.setBackground(icon_new); + weektypeName = "周三"; + weektype = "3"; + break; + case 4: + rb_4.setBackground(icon_new); + weektypeName = "周四"; + weektype = "4"; + break; + case 5: + rb_5.setBackground(icon_new); + weektypeName = "周五"; + weektype = "5"; + break; + case 6: + rb_6.setBackground(icon_new); + weektypeName = "周六"; + weektype = "6"; + break; + case 7: + rb_7.setBackground(icon_new); + weektypeName = "周日"; + weektype = "7"; + break; + } + } + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.listWorkPlace, param, listWorkPlace, this); + + } + + private void initOnClick() { + rg_group.setOnCheckedChangeListener(this); + rg_group1.setOnCheckedChangeListener(this); + rg_group2.setOnCheckedChangeListener(this); + ll_list.setOnItemClickListener(this); + bt_delete_visit.setOnClickListener(this); + rb_1.setOnCheckedChangeListener(this); + rb_2.setOnCheckedChangeListener(this); + rb_3.setOnCheckedChangeListener(this); + rb_4.setOnCheckedChangeListener(this); + rb_5.setOnCheckedChangeListener(this); + rb_6.setOnCheckedChangeListener(this); + rb_7.setOnCheckedChangeListener(this); + } + + private void initView(View view) { + rg_group = view.findViewById(R.id.rg_group); + rg_group1 = view.findViewById(R.id.rg_group1); + rg_group2 = view.findViewById(R.id.rg_group2); + ll_list = view.findViewById(R.id.ll_list); + ll_list.setMode(PullToRefreshBase.Mode.DISABLED); + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + rb_4 = view.findViewById(R.id.rb_4); + rb_5 = view.findViewById(R.id.rb_5); + rb_6 = view.findViewById(R.id.rb_6); + rb_7 = view.findViewById(R.id.rb_7); + rb_9 = view.findViewById(R.id.rb_9); + rb_10 = view.findViewById(R.id.rb_10); + rb_11= view.findViewById(R.id.rb_11); + rb_12 = view.findViewById(R.id.rb_12); + bt_delete_visit = view.findViewById(R.id.bt_delete_visit); + + + icon_1 = UIUtils.getDrawable(R.drawable.shap_addoutpa1); + icon_2 = UIUtils.getDrawable(R.drawable.shap_addoutpa2); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_delete_visit) { + weektype=""; + weektypeName=""; + for(int i=0;i<7;i++) + { + if(!StringUtil.isEmpty(week[i])) + { + + weektype+=week[i]+","; + weektypeName+=weekName[i]+","; + + } + } + + if(!StringUtil.isEmpty(weektypeName)) + { + weektypeName=weektypeName.substring(0,weektypeName.length()-1); + } + + Log.d("weektype",weektype+" "+weektypeName); + if (StringUtil.isEmpty(weektypeName)||StringUtil.isEmpty(daytypeName)){ + ToastUtil.showMessage("请选择门诊时间"); + return; + } + if (StringUtil.isEmpty(workplace_uuid)){ + ToastUtil.showMessage("请选择门诊地点"); + return; + } + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_addouroa_new, null); + final Dialog dialog1 = new AlertDialog.Builder(this).create(); + TextView tv_name = layout.findViewById(R.id.tv_name); + + TextView tv_addressdetail = layout.findViewById(R.id.tv_addressdetail); + + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog1.show(); + Window window =dialog1.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + tv_name.setText(weektypeName+" "+daytypeName); + + ListWorkPlaceBean.ListBean listBean; + if (fromJson.getList().size()==1){ + listBean = fromJson.getList().get(0); + }else { + listBean = fromJson.getList().get(choose_position); + } + int type = listBean.getType(); + String typename = null; + switch (type){ + case 1: + typename = "普通门诊"; + break; + case 2: + typename = "专家门诊"; + break; + case 3: + typename = "特需门诊"; + break; + case 4: + typename = "专科/专病门诊"; + break; + } + tv_addressdetail.setText(listBean.getHospital_name()+";"+listBean.getOffice_name()+";"+listBean.getLocation()+";"+typename+"。"); + + + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + dialog1.dismiss(); + } + }); + + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + pd.show(); + Map param = new HashMap<>(); + param.put("workplace_uuid",workplace_uuid); + param.put("week",weektype); + param.put("day",daytype); + param.put("type","1"); + param.put("note",""); + if (!StringUtil.isEmpty(uuid1)){ + param.put("uuid",uuid1); + sendJsonPostParamtoNetSignMD5(Url.updateOutPatientA, param, addOutPatient, AddOutpatientArrangement1NewActivity.this); + }else { + + sendJsonPostParamtoNetSignMD5(Url.addOutPatient, param, addOutPatient, AddOutpatientArrangement1NewActivity.this); + } + dialog1.dismiss(); + } + }); + } + } + + @SuppressLint("ResourceType") + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if(group != null && checkedId>0){ + if(group == rg_group){ + rg_group1.clearCheck(); + }else if(group == rg_group1){ + rg_group.clearCheck(); + } + group.check(checkedId); + } + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true); + Drawable icon_1 = UIUtils.getDrawable(R.drawable.shap_addpractisingaddress_normal); + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.rb_1) { + rb_1.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周一"; + weektype = "1"; + } else if (checkedId == R.id.rb_2) { + rb_2.setBackground(icon_new); + rb_1.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周二"; + weektype = "2"; + } else if (checkedId == R.id.rb_3) { + rb_3.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周三"; + weektype = "3"; + } else if (checkedId == R.id.rb_4) { + rb_4.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周四"; + weektype = "4"; + } else if (checkedId == R.id.rb_5) { + rb_5.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周五"; + weektype = "5"; + } else if (checkedId == R.id.rb_6) { + rb_6.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_1.setBackground(icon_1); + rb_7.setBackground(icon_1); + weektypeName = "周六"; + weektype = "6"; + } else if (checkedId == R.id.rb_7) { + rb_7.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + rb_5.setBackground(icon_1); + rb_6.setBackground(icon_1); + rb_1.setBackground(icon_1); + weektypeName = "周日"; + weektype = "7"; + } else if (checkedId == R.id.rb_9) { + rb_9.setBackground(icon_new); + rb_10.setBackground(icon_1); + rb_11.setBackground(icon_1); + rb_12.setBackground(icon_1); + daytypeName = "上午"; + daytype = "a"; + } else if (checkedId == R.id.rb_10) { + rb_10.setBackground(icon_new); + rb_9.setBackground(icon_1); + rb_11.setBackground(icon_1); + rb_12.setBackground(icon_1); + daytypeName = "下午"; + daytype = "b"; + } else if (checkedId == R.id.rb_11) { + rb_11.setBackground(icon_new); + rb_10.setBackground(icon_1); + rb_9.setBackground(icon_1); + rb_12.setBackground(icon_1); + daytypeName = "晚上"; + daytype = "c"; + } else if (checkedId == R.id.rb_12) { + rb_12.setBackground(icon_new); + rb_10.setBackground(icon_1); + rb_11.setBackground(icon_1); + rb_9.setBackground(icon_1); + daytypeName = "全天"; + daytype = "d"; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("AddOut"+resultJson +"resultCode = "+resultCode); + pd.dismiss(); + switch (resultCode){ + case listWorkPlace: + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, ListWorkPlaceBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())){ + listSize = fromJson.getList().size(); + adapter = new StopOutPatientListAdapter(fromJson.getList()); + ll_list.setAdapter(adapter); + } + break; + case addOutPatient: + + Gson gson1 = new Gson(); + BaseBean basebean = gson1.fromJson(resultJson, BaseBean.class); + if (basebean!=null&&"200".equals(basebean.code)){ + OutofPatientNoticeActivity.flagisListNotice = true; + finish(); +// dilaog2 = ECAlertDialog.buildAlert(AddOutpatientArrangement1Activity.this, +// "是否群发停/出诊公告给您的随访患者?", "取消", "发送", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dilaog2.dismiss(); +// +// finish(); +// } +// }, new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// dilaog2.dismiss(); +// startActivity(new Intent(AddOutpatientArrangement1Activity.this,SendGroupMsgListActivity.class)); +// finish(); +// } +// }); +// dilaog2.setTitle("发布成功"); +// dilaog2.setCancelable(false); +// dilaog2.getWindow(); +// dilaog2.show(); + }else if(basebean.message.contains("data repeated")){ + ToastUtil.showMessage("重复添加门诊安排,请重新添加"); + }else { + ToastUtil.showMessage(basebean.message); + } + break; + + } + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if ( adapter!=null){ + choose_position =position-1; + adapter.setPosition(choose_position); + adapter.notifyDataSetChanged(); + } + } + + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = compoundButton.getId(); + if (id == R.id.rb_1) { + if(rb_1.isChecked()) + { + week[0]="1"; + weekName[0]="周一"; + } + else + { + week[0]=""; + weekName[0]=""; + } + weektype = "1"; + } else if (id == R.id.rb_2) { + + if(rb_2.isChecked()) + { + week[1]="2"; + weekName[1]="周二"; + } + else + { + week[1]=""; + weekName[1]=""; + } + weektype = "2"; + } else if (id == R.id.rb_3) { + + if(rb_3.isChecked()) + { + week[2]="3"; + weekName[2]="周三"; + } + else + { + week[2]=""; + weekName[2]=""; + } + weektype = "3"; + } else if (id == R.id.rb_4) { + + if(rb_4.isChecked()) + { + week[3]="4"; + weekName[3]="周四"; + } + else + { + week[3]=""; + weekName[3]=""; + } + weektype = "4"; + } else if (id == R.id.rb_5) { + + if(rb_5.isChecked()) + { + week[4]="5"; + weekName[4]="周五"; + } + else + { + week[4]=""; + weekName[4]=""; + } + weektype = "5"; + } else if (id == R.id.rb_6) { + + if(rb_6.isChecked()) + { + week[5]="6"; + weekName[5]="周六"; + } + else + { + week[5]=""; + weekName[5]="周六"; + } + weektype = "6"; + } else if (id == R.id.rb_7) { + if(rb_7.isChecked()) + { + week[6]="7"; + weekName[6]="周日"; + } + else + { + week[6]=""; + weekName[6]=""; + } + + weektype = "7"; + } + } + + + class StopOutPatientListAdapter extends BaseAdapter{ + + private List list; + private int location1 = 99; + public StopOutPatientListAdapter(List list) { + this.list = list; + } + public void setPosition(int location){ + this.location1 = location; + + } + @Override + public int getCount() { + return list!=null&&list.size()>0?list.size():0; + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_addoutpatientlist_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_addoutpatientlist); + } + vh = new ViewHolder(); + vh.tv_hospital = convertView.findViewById(R.id.tv_hospital); + vh.tv_department = convertView.findViewById(R.id.tv_department); + vh.tv_address =convertView.findViewById(R.id.tv_address); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_type1 = convertView.findViewById(R.id.tv_type1); + vh.iv_addtrue = convertView.findViewById(R.id.iv_addtrue); + vh.rl_1 = convertView.findViewById(R.id.rl_1); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + final String hospital_name = list.get(position).getHospital_name(); + final String office_name = list.get(position).getOffice_name(); + final String location = list.get(position).getLocation(); + vh.tv_hospital.setText(hospital_name); + vh.tv_department.setText(office_name); + + switch (list.get(position).getType()){ + case 1: + vh.tv_type.setText("普通门诊"); + vh.tv_type1.setText("普通门诊"); + break; + case 2: + vh.tv_type.setText("专家门诊"); + vh.tv_type1.setText("专家门诊"); + break; + case 3: + vh.tv_type.setText("特需门诊"); + vh.tv_type1.setText("特需门诊"); + break; + case 4: + vh.tv_type.setText("专科/专病门诊"); + vh.tv_type1.setText("专科/专病门诊"); + break; + + } + ViewTreeObserver vto = vh.tv_address.getViewTreeObserver(); + final ViewHolder finalVh = vh; + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + TextPaint mTextPaint = finalVh.tv_address.getPaint(); + mTextPaint.setTextSize(finalVh.tv_address.getTextSize()); + int mTextViewWidth = (int) mTextPaint.measureText(location); + finalVh.tv_address.setText(location); + if (mTextViewWidth> finalVh.tv_address.getWidth()||mTextViewWidth>800){ + finalVh.tv_type.setVisibility(View.GONE); + finalVh.tv_type1.setVisibility(View.VISIBLE); + }else { + finalVh.tv_type.setVisibility(View.VISIBLE); + finalVh.tv_type1.setVisibility(View.GONE); + } + + } + }); + + + if (list.size()==1){ + vh.iv_addtrue.setVisibility(View.VISIBLE); + vh.rl_1.setBackground(icon_2); + workplace_uuid = list.get(position).getUuid(); + }else if (location1==position){ + vh.iv_addtrue.setVisibility(View.VISIBLE); + vh.rl_1.setBackground(icon_2); + workplace_uuid = list.get(position).getUuid(); + }else if (list.get(position).getUuid().equals(workplace_uuid)){ + vh.iv_addtrue.setVisibility(View.VISIBLE); + vh.rl_1.setBackground(icon_2); + }else { + vh.iv_addtrue.setVisibility(View.GONE); + vh.rl_1.setBackground(null); + } + if (location1!=position&&location1!=99){ + vh.iv_addtrue.setVisibility(View.GONE); + vh.rl_1.setBackground(null); + } + + return convertView; + } + public class ViewHolder { + + public TextView tv_hospital, tv_department, tv_address,tv_type,tv_type1; + public ImageView iv_addtrue; + public RelativeLayout rl_1; + + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddPractisingaddressActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddPractisingaddressActivity.java new file mode 100644 index 0000000..067f4ce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddPractisingaddressActivity.java @@ -0,0 +1,642 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.Editable; +import android.text.InputFilter; +import android.text.Spanned; +import android.text.TextPaint; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.HospitalListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/1/2. + */ + +public class AddPractisingaddressActivity extends BaseActivity implements View.OnClickListener,OnCallBackFromNet,AdapterView.OnItemClickListener { + private RadioGroup rg_group,rg_group1; + private RadioButton rb_1,rb_2,rb_3,rb_4; + private TextView bt_delete_visit; + private Dialog dialog; + private EditText et_addhospital,et_addhospital2,et_addhospital3; + private static final int HOSPITALLIST = 1; + private static final int ADDWORKPLACE = 2; + private HospitalListBean fromJson; + private ListView lv_plcae; + private String flag = "dfasfsaf"; + private String blackText; + private String type; + private String hospital_uuid; + private String typeName; + private String addhospita2; + private String addhospita3; + private String uuid; + private boolean flag_is_onclic;//判断是否点击了列表 + + @Override + public void setTitle() { + top_title.setText("新增执业地点"); + top_back_layout.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_addpractisingaddress_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_addpractisingaddress); + } + initView(view); + initData(); + initOnClick(); + return view; + } + + private void initData() { + Intent intent = getIntent(); + Bundle extras = intent.getExtras(); + + if (intent!=null&&extras!=null){ + top_title.setText("修改执业地点"); + bt_delete_visit.setText("确定修改"); + String hospital_name = intent.getExtras().getString("tv_hospital"); + String office_name = intent.getExtras().getString("tv_department"); + String location = intent.getExtras().getString("tv_address"); + String Hospital_uuid = intent.getExtras().getString("Hospital_uuid"); + hospital_uuid = Hospital_uuid; + uuid = intent.getExtras().getString("uuid"); + int type1 = intent.getExtras().getInt("tv_type"); + type = type1+""; + et_addhospital.setText(hospital_name); + et_addhospital2.setText(office_name); + et_addhospital3.setText(location); + if(CommonUtil.BigModule()) + { + + } + else + { + TextPaint tp = et_addhospital.getPaint(); + tp.setFakeBoldText(true); + TextPaint tp2 = et_addhospital2.getPaint(); + tp2.setFakeBoldText(true); + TextPaint tp3 = et_addhospital3.getPaint(); + tp3.setFakeBoldText(true); + } + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true); + switch (type1){ + case 1: + typeName = "普通门诊"; + rb_1.setChecked(true); + rb_1.setBackground(icon_new); + break; + case 2: + rb_2.setChecked(true); + typeName = "专家门诊"; + rb_2.setBackground(icon_new); + break; + case 3: + rb_3.setChecked(true); + typeName = "特需门诊"; + rb_3.setBackground(icon_new); + break; + case 4: + rb_4.setChecked(true); + rb_4.setBackground(icon_new); + typeName = "专科/专病门诊"; + break; + } + } + + } + + private void initOnClick() { + bt_delete_visit.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + rg_group1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true_big); + Drawable icon_1 = UIUtils.getDrawable(R.drawable.shap_addpractisingaddress_normal); + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.rb_4) { + if(rb_4.isChecked()) + { + rg_group.clearCheck(); + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_new); + type = "4"; + typeName = "专科/专病门诊"; + } + } + } + }); + } + rg_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + Drawable icon_new; + if(CommonUtil.BigModule()) + { + icon_new = UIUtils.getDrawable(R.drawable.check_true_big); + + } + else + { + icon_new = UIUtils.getDrawable(R.drawable.check_true); + } + Drawable icon_1 = UIUtils.getDrawable(R.drawable.shap_addpractisingaddress_normal); + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.rb_1) { + if(rb_1.isChecked()&&CommonUtil.BigModule()) + { + rg_group1.clearCheck(); + } + + rb_1.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + type = "1"; + typeName = "普通门诊"; + } else if (checkedId == R.id.rb_2) { + if(rb_2.isChecked()&&CommonUtil.BigModule()) + { + rg_group1.clearCheck(); + } + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_new); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + type = "2"; + typeName = "专家门诊"; + } else if (checkedId == R.id.rb_3) { + if(rb_3.isChecked()&&CommonUtil.BigModule()) + { + rg_group1.clearCheck(); + } + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_new); + rb_4.setBackground(icon_1); + type = "3"; + typeName = "特需门诊"; + } else if (checkedId == R.id.rb_4) { + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_new); + type = "4"; + typeName = "专科/专病门诊"; + } + } + }); + et_addhospital.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + if(CommonUtil.BigModule()) + { + String s1 = s.toString().trim(); + blackText = s1; + if (flag.equals(s1)){ + lv_plcae.setVisibility(View.GONE); + + }else if (s1==null||"".equals(s1)){ + lv_plcae.setVisibility(View.GONE); + + }else if (!TextUtils.isEmpty(s1)){ + + Map param = new HashMap<>(); + param.put("name",s1); + sendJsonPostParamtoNetSignMD5(Url.hospitalList, param, HOSPITALLIST, AddPractisingaddressActivity.this); + }else { + lv_plcae.setVisibility(View.GONE); + + } + } + else + { + String s1 = s.toString().trim(); + blackText = s1; + TextPaint tp = et_addhospital.getPaint(); + if (flag.equals(s1)){ + lv_plcae.setVisibility(View.GONE); + tp.setFakeBoldText(false); + }else if (s1==null||"".equals(s1)){ + lv_plcae.setVisibility(View.GONE); + tp.setFakeBoldText(false); + }else if (!TextUtils.isEmpty(s1)){ + tp.setFakeBoldText(true); + Map param = new HashMap<>(); + param.put("name",s1); + sendJsonPostParamtoNetSignMD5(Url.hospitalList, param, HOSPITALLIST, AddPractisingaddressActivity.this); + }else { + lv_plcae.setVisibility(View.GONE); + tp.setFakeBoldText(false); + } + } + + + } + }); + + lv_plcae.setOnItemClickListener(this); + et_addhospital2.addTextChangedListener(new TextWatcher() { + boolean hint; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if(CommonUtil.BigModule()) + { + + } + else + { + TextPaint tp = et_addhospital2.getPaint(); + if(s.length() == 0) { + // no text, hint is visible + hint = true; + tp.setFakeBoldText(false); + } else { + // no hint, text is visible + hint = false; + + tp.setFakeBoldText(true); + } + } + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + et_addhospital3.addTextChangedListener(new TextWatcher() { + boolean hint; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + if(CommonUtil.BigModule()) + { + + } + else + { + TextPaint tp = et_addhospital3.getPaint(); + if(s.length() == 0) { + // no text, hint is visible + hint = true; + tp.setFakeBoldText(false); + } else { + // no hint, text is visible + hint = false; + + tp.setFakeBoldText(true); + } + } + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + } + + private void initView(View view) { + rg_group = view.findViewById(R.id.rg_group); + bt_delete_visit = view.findViewById(R.id.bt_delete_visit); + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + rb_4 = view.findViewById(R.id.rb_4); + if(CommonUtil.BigModule()) + { + rg_group1 = view.findViewById(R.id.rg_group1); + } + et_addhospital = view.findViewById(R.id.et_addhospital); + et_addhospital2 = view.findViewById(R.id.et_addhospital2); + et_addhospital3 = view.findViewById(R.id.et_addhospital3); + lv_plcae = view.findViewById(R.id.lv_plcae); + et_addhospital.setFilters(new InputFilter[]{new SpaceFilter()}); + et_addhospital2.setFilters(new InputFilter[]{new SpaceFilter()}); + et_addhospital3.setFilters(new InputFilter[]{new SpaceFilter()}); + + } + /** + * 禁止输入空格 + * + * @return + */ + public class SpaceFilter implements InputFilter { + @Override + public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { + //返回null表示接收输入的字符,返回空字符串表示不接受输入的字符 + if (source.equals(" ")) + return ""; + return null; + } + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_delete_visit) { + + String addhospital = et_addhospital.getText().toString().trim(); + + addhospita2 = et_addhospital2.getText().toString().trim().replace(" ",""); + addhospita3 = et_addhospital3.getText().toString().trim().replace(" ",""); + + if (TextUtils.isEmpty(addhospital)||StringUtil.isEmpty(hospital_uuid)) { + ToastUtil.showToast("请输入您的医院"); + } + if (TextUtils.isEmpty(addhospita2)) { + ToastUtil.showToast("请输入您的科室"); + } + if (TextUtils.isEmpty(addhospita3)) { + ToastUtil.showToast("请填写您的地址"); + } + if (StringUtil.isEmpty(type)) { + ToastUtil.showToast("请选择门诊类型"); + } + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_addpractisingaddress, null); + dialog = new AlertDialog.Builder(AddPractisingaddressActivity.this).create(); + TextView tv_infotitle = (TextView) layout.findViewById(R.id.tv_infotitle); + TextView tv_name = (TextView) layout.findViewById(R.id.tv_name); + TextView tv_tele = (TextView) layout.findViewById(R.id.tv_tele); + TextView tv_address = (TextView) layout.findViewById(R.id.tv_address); + TextView tv_addressdetail = (TextView) layout.findViewById(R.id.tv_addressdetail); + TextView tv_point = (TextView) layout.findViewById(R.id.tv_point); + TextView tv_baoyou = (TextView) layout.findViewById(R.id.tv_baoyou); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + tv_name.setText(addhospital); + tv_tele.setText(addhospita2); + tv_addressdetail.setText(addhospita3); + tv_point.setText(typeName); + + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(this); + } else if (id == R.id.btn_sure) { + dialog.dismiss(); + Map param = new HashMap<>(); + param.put("hospital_uuid",hospital_uuid); + param.put("office_name",addhospita2); + param.put("location",addhospita3); + param.put("type",type); + + if (!StringUtil.isEmpty(uuid)){ + param.put("uuid",uuid); + + sendJsonPostParamtoNetSignMD5(Url.editWorkPlace, param, ADDWORKPLACE, this); + }else { + sendJsonPostParamtoNetSignMD5(Url.addWorkPlace, param, ADDWORKPLACE, this); + } + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case HOSPITALLIST: + LogUtil.i("resultJson = "+resultJson); + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, HospitalListBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())&&fromJson.getData().size()>0){ + lv_plcae.setVisibility(View.VISIBLE); + LogUtil.i("点击出现"); + HospitalListAdapter adapter = new HospitalListAdapter(fromJson.getData()); + lv_plcae.setAdapter(adapter); + }else { + lv_plcae.setVisibility(View.GONE); + } + break; + case ADDWORKPLACE: + Gson gson1 = new Gson(); + BaseBean fromJson = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson!=null&&"200".equals(fromJson.code)){ + hideSoftKeyboard(); + Intent intent = new Intent(); + setResult(2, intent); + finish(); + }else if ("Data Repeated".equals(fromJson.message)){ + ToastUtil.showMessage("重复添加执业地点,请重新添加"); + }else { + ToastUtil.showMessage(fromJson.message); + } + break; + } + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + HospitalListBean.DataBean dataBean = fromJson.getData().get(position); + flag = dataBean.getName(); + hospital_uuid = dataBean.getUuid(); + et_addhospital.setText(dataBean.getName()); + et_addhospital.setSelection(et_addhospital.getText().toString().length()); + flag_is_onclic = true; + if(!CommonUtil.BigModule()) + { + TextPaint tp = et_addhospital.getPaint(); + tp.setFakeBoldText(true); + } + lv_plcae.setVisibility(View.GONE); + LogUtil.i("点击消失"); + } + + + class HospitalListAdapter extends BaseAdapter { + + private List data; + public HospitalListAdapter(List data) { + this.data = data; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_hospital_item_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_hospital_item); + } + vh = new ViewHolder(); + vh.tv_name = convertView.findViewById(R.id.tv_name); + vh.tv_name1 = convertView.findViewById(R.id.tv_name1); + vh.tv_name2 = convertView.findViewById(R.id.tv_name2); + + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + + String name = data.get(position).getName(); + String[] split = name.split(blackText); + + if (StringUtil.isEmpty(blackText)){ + lv_plcae.setVisibility(View.GONE); + }else if (split.length>0&&StringUtil.isEmpty(split[0])){ + TextPaint tp = vh.tv_name.getPaint(); + TextPaint tp1 = vh.tv_name1.getPaint(); + TextPaint tp2 = vh.tv_name2.getPaint(); + tp.setFakeBoldText(true); + tp1.setFakeBoldText(false); + tp2.setFakeBoldText(false); + vh.tv_name.setText(blackText); + if (split.length>1){ + vh.tv_name1.setText(split[1]); + } + + }else if (split.length==1){ + TextPaint tp = vh.tv_name.getPaint(); + TextPaint tp1 = vh.tv_name1.getPaint(); + TextPaint tp2 = vh.tv_name2.getPaint(); + tp1.setFakeBoldText(true); + tp2.setFakeBoldText(false); + tp.setFakeBoldText(false); + vh.tv_name1.setText(blackText); + vh.tv_name.setText(split[0]); + }else if (split.length>0){ + TextPaint tp = vh.tv_name.getPaint(); + TextPaint tp1 = vh.tv_name1.getPaint(); + TextPaint tp2 = vh.tv_name2.getPaint(); + tp1.setFakeBoldText(true); + tp2.setFakeBoldText(false); + tp.setFakeBoldText(false); + vh.tv_name1.setText(blackText); + vh.tv_name.setText(split[0]); + if (split.length>1){ + vh.tv_name2.setText(split[1]); + } + + + } + + + + + +// + return convertView; + } + + public class ViewHolder { + + public TextView tv_name,tv_name1,tv_name2; + + + } + + + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddProclamationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddProclamationActivity.java new file mode 100644 index 0000000..1184102 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddProclamationActivity.java @@ -0,0 +1,197 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Context; +import android.os.Build; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我的-设置-意见反馈 + * + * @author susanyuan + * + */ + +public class AddProclamationActivity extends BaseActivity implements + OnClickListener, OnCallBackFromNet { + + private Button bt_submit; + private EditText et_feedbook; + private String content; + boolean isCommen = false; + private String name, text; + private String expert_uuid; + private Button mBt_get_Voice; + private String hospital_uuid; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_add_proclamation); + et_feedbook = (EditText) view.findViewById(R.id.et_feedbook); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + // 字数限制的 + // et_feedbook.addTextChangedListener(tw); + bt_submit = (Button) view.findViewById(R.id.bt_submit); + bt_submit.setOnClickListener(this); + expert_uuid = SharePrefUtil.getString(AddProclamationActivity.this, + "uuid", ""); + hospital_uuid=getIntent().getStringExtra("hospital_uuid"); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("修改公告"); + + } + + /** + * 提交反馈的信息 submit + * + * void + */ + public void submit() { + String content = et_feedbook.getText().toString().trim(); + if (StringUtil.isEmpty(content)) { + ToastUtil.showMessage("内容不能为空"); + return; + + } + showProgressDialog("提交中"); + Map param = new HashMap(); + param.put("other_uuid", hospital_uuid); + param.put("user_uuid", expert_uuid); + param.put("content", content); + sendJsonPostParamtoNet(Url.getaddProclamation, param, 01, this); + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_submit) { // 提交 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + submit(); + } else if (id == R.id.bt_get_voice) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(AddProclamationActivity.this, + et_feedbook); + } else { + EasyWindow.with(AddProclamationActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(AddProclamationActivity.this, + et_feedbook); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问录音的申请 + EasyWindow.cancelAll(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(AddProclamationActivity.this, + et_feedbook); + } +// VoiceUtil = new KeDaXunFeiUtil(AddProclamationActivity.this, +// et_feedbook); +// break; + } + } + + KeDaXunFeiUtil VoiceUtil; + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + + super.onDestroy(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + JSONObject jsob; + String retcode; + String message; + try { + jsob = new JSONObject(resultJson); + retcode = jsob.getString("code"); + message = jsob.getString("message"); + if (retcode.equals("1")) { + ToastUtil.showMessage("提交成功"); + this.finish(); + } else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddSecletBankCardActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddSecletBankCardActivity.java new file mode 100644 index 0000000..076e035 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddSecletBankCardActivity.java @@ -0,0 +1,96 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.BankListAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.Bank; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * AddSecletBankCardActivity.java + * @author jx 记肖 + * @date2015.12.15 我的->添加银行卡->选择银行卡 + */ +public class AddSecletBankCardActivity extends BaseActivity implements + OnItemClickListener { + private ListView bankList;// 银行卡列表 + /** 银行卡列表名称 **/ + private String[] bankName = new String[] { "中国工商银行", "中国建设银行", "中国银行", + "中国农业银行", "招商银行", "中国邮政", "交通银行", "北京银行", "兴业银行", "华夏银行", "中信实业银行", + "中国民生银行", "上海浦东发展银行" }; + /** 银行卡列表logo **/ + private int[] bankPhoto = new int[] { R.drawable.icon_bankcard_gongshang, + R.drawable.icon_bankcard_jianseyinhang, + R.drawable.icon_bankcard_zhongguo, + R.drawable.icon_bankcard_nongyeyinhang, + R.drawable.icon_bankcard_zhaoshangyinhang, + R.drawable.icon_bankcard_youzheng, + R.drawable.icon_bankcard_jiatong, + R.drawable.icon_bankcard_beijingyinhang, + R.drawable.icon_bankcard_xingye, + R.drawable.icon_bankcard_huaxiayinhnag, + R.drawable.icon_bankcard_zhongxinshiye, + R.drawable.icon_bankcard_minshneg, + R.drawable.icon_bankcard_shanghaipudongfazhanyinhang }; + private List bankL; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_bank_list); + bankList = (ListView) view.findViewById(R.id.lv_bank_list); + bankList.setOnItemClickListener(this); + //实例化列表数据 + bankL = new ArrayList<>(); + for (int i = 0; i < bankName.length; i++) { + Bank bank = new Bank(); + bank.bankIcon = bankPhoto[i]; + bank.bankName = bankName[i]; + bankL.add(bank); + } + //设置设配器 + bankList.setAdapter(new BankListAdapter(this, bankL)); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void setTitle() { + top_title.setText("请选择发卡银行"); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + Bank bank = bankL.get(position); + String name = bank.bankName; + Intent intent = new Intent(); + // 把返回数据存入Intent + intent.putExtra("result", name); + intent.putExtra("result_icon", bank.bankIcon); + // 设置返回数据 + this.setResult(RESULT_OK, intent); + this.finish(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitDateActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitDateActivity.java new file mode 100644 index 0000000..6c83ed0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitDateActivity.java @@ -0,0 +1,366 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat4; +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat5; + +import android.app.DatePickerDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.view.KeyEvent; +import android.view.View; +import android.widget.CheckBox; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author zhaodewei 2016-6-20 + * + */ +public class AddVisitDateActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private RelativeLayout mRl_date, mRl_me, mRl_other, mRl_patient; + private DatePickerDialog mPickerDialog; + private TextView mTv_date, mTv_name; + private AddVisitDateActivity mContext; + Calendar dateAndTime; + int v_year, v_month, v_day; + private Intent mIntent; + private String patientUuid; + private String patientName; + public static final int GET_RESULT_ADD_VISITDATA = 101; + public static final int GET_NAME = 201; + private boolean isMain = false; + private String mUpTime = null; + private String mExpertUuid; + private EditText mEt_note; + private CheckBox mCb_me, mCb_other; + int isremindme = 0; + int isremindpatient = 0; + ImageView mImage; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("添加日程"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("提交"); + top_right_text.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + // this.requestWindowFeature(Window.FEATURE_NO_TITLE); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_add_visit_date_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_add_visit_date); + } + dateAndTime = Calendar.getInstance(Locale.CHINA); + dateAndTime.add(Calendar.MONTH, 3); + v_year = dateAndTime.get(Calendar.YEAR); + v_month = dateAndTime.get(Calendar.MONTH); + v_day = dateAndTime.get(Calendar.DAY_OF_MONTH); + mContext = this; + mExpertUuid = SharePrefUtil.getString(mContext, Constant.uuid, ""); + initIntent(); + initView(); + initLisenter(); + return view; + } + + public void getDataResult() { + if (StringUtil.isEmpty(patientUuid)) { + ToastUtil.showMessage("请选择患者"); + return; + } + top_right_text.setClickable(false); + showProgressDialog("提交中,请稍候..."); + if (mCb_me.isChecked()) { + isremindme = 1; + } else { + isremindme = 0; + } + if (mCb_other.isChecked()) { + isremindpatient = 1; + } else { + isremindpatient = 0; + } + Map param = new HashMap(); + param.put("patient_uuid", patientUuid); + param.put("expert_uuid", mExpertUuid); + param.put("datetime", mUpTime); + param.put("note", mEt_note.getText().toString().trim()); + param.put("type", 1 + ""); + param.put("isremindme", isremindme + ""); + param.put("isremindpatient", isremindpatient + ""); + + sendParamtoNet(Url.getAddFollowUp, param, GET_RESULT_ADD_VISITDATA, + mContext, false); + } + + private void initIntent() { + mIntent = getIntent(); + patientUuid = mIntent.getStringExtra("patientUuid"); + patientName = mIntent.getStringExtra("patientName"); + if (mIntent.getType().equals("main")) { + isMain = true; + } + + } + + public void initView() { + mRl_patient = (RelativeLayout) view.findViewById(R.id.rl_add_patient); + String s_month = v_month + ""; + String s_day = v_day + ""; + mRl_date = (RelativeLayout) view.findViewById(R.id.rl_add_date); + mRl_me = (RelativeLayout) view.findViewById(R.id.rl_add_me); + mRl_other = (RelativeLayout) view.findViewById(R.id.rl_add_other); + mTv_date = (TextView) view.findViewById(R.id.tv_add_date); + mTv_name = (TextView) view.findViewById(R.id.tv_add_patientname); + mImage = (ImageView) view.findViewById(R.id.image_arrw_right); + if (!StringUtil.isEmpty(patientName)) { + mTv_name.setText(patientName); + } + + if (v_month < 9) { + s_month = "0" + (v_month + 1); + } else { + s_month = "" + (v_month + 1); + } + if (v_day < 10) { + s_day = "0" + v_day; + } + mUpTime = v_year + "-" + s_month + "-" + s_day; + + mTv_date.setText(v_year + "年" + s_month + "月" + s_day + "日"+"("+initTime()+")"); + mEt_note = (EditText) view.findViewById(R.id.et_addvisit_note); + mCb_me = (CheckBox) view.findViewById(R.id.cb_addvisit_me); + mCb_other = (CheckBox) view.findViewById(R.id.cb_addvisit_other); + } + public String initTime() { + int year = dateAndTime.get(Calendar.YEAR); + int month = dateAndTime.get(Calendar.MONTH); + int day = dateAndTime.get(Calendar.DAY_OF_MONTH); +// DecimalFormat decimalFormat = new DecimalFormat("00"); +// String m = decimalFormat.format(month + 1); +// String d = decimalFormat.format(day); +// String returnTime = year + "." + m + "." + d; + SimpleDateFormat simpledateformat = new SimpleDateFormat("EEEE"); + Date date = new Date(year, month, day-1); + String dayOfWeek = simpledateformat.format(date); + return dayOfWeek; + + } + public void initLisenter() { + if (isMain) { + mRl_patient.setOnClickListener(this); + mImage.setVisibility(View.VISIBLE); + } + mRl_date.setOnClickListener(this); + mRl_me.setOnClickListener(this); + mRl_other.setOnClickListener(this); + bottomSelectDate(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_add_date) { +// pwTime.showAtLocation(mRl_date, Gravity.BOTTOM, 0, 0); + getTime(v_year, v_month, v_day); + } else if (id == R.id.rl_add_patient) { + Intent intent = new Intent(mContext, SearchPatientActivity.class); +// Intent intent = new Intent(mContext, Sear.class); + intent.setType("isVisit"); + startActivityForResult(intent, GET_NAME); + } else if (id == R.id.top_right_text) { + getDataResult(); + } + } + private TimePopupWindow pwTime; + private void bottomSelectDate() { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY); + pwTime.setTime(new Date()); + + + + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR)+10; + // 设置标题 + pwTime.setPopupTitle("请选择随访日期"); + // 设置起始时间 + pwTime.setRange(1900, year); + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + if (date.getTime() - new Date().getTime() <= -24 * 60 * 60) { + ToastUtil.showMessage("所选随访日期无效"); + return; + } + mTv_date.setText( simpleDateFormat4.format(date)); + mUpTime =simpleDateFormat5.format(date); + } + }); + } + + + public Calendar mGoCaTime = Calendar.getInstance(Locale.CHINA); + + public void getTime(int v_year1, int v_month1, int v_day1) { + final Date time = new Date(); + if (mPickerDialog == null) { + mPickerDialog = new DatePickerDialog(mContext, R.style.MyDatePickerDialogTheme,null, v_year, + v_month, v_day); + mPickerDialog.setTitle("时间日期"); + mPickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DatePicker datePicker = mPickerDialog + .getDatePicker(); + + int year = datePicker.getYear(); + int month = datePicker.getMonth(); + int day = datePicker.getDayOfMonth(); + mGoCaTime.set(Calendar.YEAR, year); + mGoCaTime.set(Calendar.MONTH, month); + mGoCaTime.set(Calendar.DAY_OF_MONTH, day); + if (mGoCaTime.getTimeInMillis() - time.getTime() <= -24 * 60 * 60) { + ToastUtil.showMessage("所选随访日期无效"); + return; + } + SimpleDateFormat simpledateformat = new SimpleDateFormat("EEEE"); + Date date = new Date(year, month, day-1); + String dayOfWeek = simpledateformat.format(date); + DecimalFormat decimalFormat = new DecimalFormat( + "00"); + String m = decimalFormat.format(month + 1); + String d = decimalFormat.format(day); + mUpTime = year + "-" + m + "-" + d; + mTv_date.setText(year + "年" + m + "月" + d + "日"+"("+dayOfWeek+")"); + + } + }); + mPickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mPickerDialog.dismiss(); + } + }); + + } + if (!mPickerDialog.isShowing()) { + mPickerDialog.show(); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + closeProgressDialog(); + LogUtil.i("resultJson = "+resultJson); + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + SharePrefUtil.saveString(mContext, "adddate", "add"); + Intent intent = new Intent(); + setResult(201, intent); + + finish(); + } + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_NAME: + // mIntent.putExtra("realName", patient.realName); + // mIntent.putExtra("patientUuid", patient.uuid); + patientName = data.getStringExtra("realName"); + patientUuid = data.getStringExtra("patientUuid"); + mTv_name.setText(patientName); + mImage.setVisibility(View.GONE); + break; + + default: + break; + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + if (!top_right_text.isClickable()) { + top_right_text.setClickable(true); + } + + return super.onKeyDown(keyCode, event); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitPlanActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitPlanActivity.java new file mode 100644 index 0000000..fd971a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddVisitPlanActivity.java @@ -0,0 +1,601 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.DatePickerDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AbsListView.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.DatePicker; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.VisitPlanBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author zhaodewei 2016-6-20 + */ +public class AddVisitPlanActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private View view; + private RelativeLayout mRl_date, mRl_me, mRl_other, mRl_patient; + private DatePickerDialog mPickerDialog; + private TextView mTv_date, mTv_name; + private AddVisitPlanActivity mContext; + Calendar dateAndTime; + int v_year, v_month, v_day; + private Intent mIntent; + private String patientUuid; + private String patientName; + public static final int GET_RESULT_ADD_VISITDATA = 101; + private List mL_visit; + private ListView mLv_plan; + private VisitPlanAdapter mAdapter; + private CheckBox mCb_me, mCb_other; + private boolean isMain = false; + private LinearLayout mLl_addVisit; + private int isremindme = 0; + private int isremindpatient = 0; + private String mExpertUuid; + private ImageView image_arrw_right; + private ArrayList uuids; + private ArrayList names; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("添加随访计划"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("提交"); + top_right_text.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + // this.requestWindowFeature(Window.FEATURE_NO_TITLE); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_add_visit_plan_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_add_visit_plan); + } + + dateAndTime = Calendar.getInstance(Locale.CHINA); + v_year = dateAndTime.get(Calendar.YEAR); + v_month = dateAndTime.get(Calendar.MONTH); + v_day = dateAndTime.get(Calendar.DAY_OF_MONTH); + mL_visit = new ArrayList(); + // v_year = dateAndTime.get(Calendar.YEAR); + // v_month = dateAndTime.get(Calendar.MONTH); + // v_day = dateAndTime.get(Calendar.DAY_OF_MONTH); + mContext = this; + mExpertUuid = SharePrefUtil.getString(mContext, Constant.uuid, ""); + initIntent(); + initView(); + initGetList(); + initLisenter(); + return view; + } + + private void initGetList() { + for (int i = 0; i < 4; i++) { + VisitPlanBean bean = new VisitPlanBean(); + if (i == 0) { + bean.setChecked(true); + } else { + bean.setChecked(false); + } + bean.setContext("请近日来医院复诊、复查"); + bean.setDate(initTime(3)); + bean.setWeek(initTime(3,"")); + mL_visit.add(bean); + } + mAdapter = new VisitPlanAdapter(); + mLv_plan.setAdapter(mAdapter); + } + + public void getDataResult() { + if (StringUtil.isEmpty(patientUuid)) { + ToastUtil.showMessage("请选择患者"); + return; + } + top_right_text.setClickable(false); + showProgressDialog("提交中,请稍候..."); + if (mCb_me.isChecked()) { + isremindme = 1; + } else { + isremindme = 0; + } + if (mCb_other.isChecked()) { + isremindpatient = 1; + } else { + isremindpatient = 0; + } + + Map param = new HashMap(); + param.put("patient_uuid", patientUuid); + param.put("expert_uuid", mExpertUuid); + param.put("datetime", getDateTime()); + param.put("note", getNote()); + param.put("type", 2 + ""); + param.put("isremindme", isremindme + ""); + param.put("isremindpatient", isremindpatient + ""); +// LogUtil.i("patient_uuid = "+patientUuid); +// LogUtil.i("mExpertUuid = "+mExpertUuid); +// LogUtil.i("note = "+getNote()); +// LogUtil.i("isremindme = "+isremindme); +// LogUtil.i("isremindpatient = "+isremindpatient); +// LogUtil.i("datetime = "+getDateTime()); + sendParamtoNet(Url.getAddFollowUps, param, GET_RESULT_ADD_VISITDATA,mContext, true); + } + + public String getDateTime() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < mL_visit.size(); i++) { + if (i == 0) { + sb.append(mL_visit.get(i).getDate().replace(".", "-")); + } else { + sb.append("☆" + mL_visit.get(i).getDate().replace(".", "-")); + } + } + return sb.toString(); + + } + + public String getNote() { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < mL_visit.size(); i++) { + if (i == 0) { + sb.append(mL_visit.get(i).getContext()); + } else { + sb.append("☆" + mL_visit.get(i).getContext()); + } + } + return sb.toString(); + + } + + private void initIntent() { + mIntent = getIntent(); + patientUuid = mIntent.getStringExtra("patientUuid"); + patientName = mIntent.getStringExtra("patientName"); + if ("main".equals(mIntent.getType())) { + isMain = true; + } + } + + public void initView() { + mRl_patient = (RelativeLayout) view.findViewById(R.id.rl_add_patient); + mLv_plan = (ListView) view.findViewById(R.id.lv_add_datas); + mRl_date = (RelativeLayout) view.findViewById(R.id.rl_add_date); + mRl_me = (RelativeLayout) view.findViewById(R.id.rl_add_me); + mRl_other = (RelativeLayout) view.findViewById(R.id.rl_add_other); + mTv_date = (TextView) view.findViewById(R.id.tv_add_date); + mTv_name = (TextView) view.findViewById(R.id.tv_add_patientname); + mCb_me = (CheckBox) view.findViewById(R.id.cb_add_me); + mCb_other = (CheckBox) view.findViewById(R.id.cb_add_other); + mLl_addVisit = (LinearLayout) view.findViewById(R.id.ll_add_date); + image_arrw_right = (ImageView) view.findViewById(R.id.image_arrw_right); + if (!StringUtil.isEmpty(patientName)) { + mTv_name.setText(patientName); + image_arrw_right.setVisibility(View.GONE); + } else { + image_arrw_right.setVisibility(View.VISIBLE); + } + } + + public void initLisenter() { + if (isMain) { + mRl_patient.setOnClickListener(this); + } + // mLv_plan.setOnItemClickListener(this); + mLl_addVisit.setOnClickListener(this); + mRl_me.setOnClickListener(this); + mRl_other.setOnClickListener(this); + + } + private TimePopupWindow pwTime; + + public String initTime(int addMonth) { + dateAndTime.add(Calendar.MONTH, addMonth); + int year = dateAndTime.get(Calendar.YEAR); + int month = dateAndTime.get(Calendar.MONTH); + int day = dateAndTime.get(Calendar.DAY_OF_MONTH); + DecimalFormat decimalFormat = new DecimalFormat("00"); + String m = decimalFormat.format(month + 1); + String d = decimalFormat.format(day); + String returnTime = year + "." + m + "." + d; + return returnTime; + + } + public String initTime(int addMonth ,String week) { +// dateAndTime.add(Calendar.MONTH, addMonth); + int year = dateAndTime.get(Calendar.YEAR); + int month = dateAndTime.get(Calendar.MONTH); + int day = dateAndTime.get(Calendar.DAY_OF_MONTH); +// DecimalFormat decimalFormat = new DecimalFormat("00"); +// String m = decimalFormat.format(month + 1); +// String d = decimalFormat.format(day); +// String returnTime = year + "." + m + "." + d; + SimpleDateFormat simpledateformat = new SimpleDateFormat("EEEE"); + Date date = new Date(year, month, day-1); + String dayOfWeek = simpledateformat.format(date); + return dayOfWeek; + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + + } + + public static final int GET_NAME = 201; + public static final int GET_VILIT_PLAN = 202; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_add_patient) { + Intent intent = new Intent(mContext, GroupChatSelectPatientActivity.class); +// Intent intent = new Intent(mContext, SearchPatientActivity.class); +// intent.setType("isVisit"); + startActivityForResult(intent, GET_NAME); + } else if (id == R.id.top_right_text) { + getDataResult(); + needreportOb("set_plain",patientUuid); + } else if (id == R.id.ll_add_date) { + VisitPlanBean bean = new VisitPlanBean(); + if (mL_visit.size() == 1) { + dateAndTime = Calendar.getInstance(Locale.CHINA); + bean.setDate(initTime(6)); + bean.setWeek(initTime(6,"")); + } else { + bean.setDate(initTime(3)); + bean.setWeek(initTime(3,"")); + } + bean.setContext("请近日来医院复诊、复查"); + mL_visit.add(bean); + mAdapter.notifyDataSetChanged(); + mLv_plan.setSelection(mLv_plan.getBottom()); + } + } + + public Calendar mGoCaTime = Calendar.getInstance(Locale.CHINA); + + public void getTime(final Button tv) { + // 时间选择器 +// pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY); +// pwTime.setTime(new Date()); +// Calendar calendar = Calendar.getInstance(); +// calendar.setTimeInMillis(System.currentTimeMillis()); +// int year = calendar.get(Calendar.YEAR)+10; +// // 设置标题 +// pwTime.setPopupTitle("请选择随访日期"); +// // 设置起始时间 +// pwTime.setRange(1900, year); +// // 时间选择后回调 +// pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { +// +// @Override +// public void onTimeSelect(Date date) { +// if (date.getTime() - new Date().getTime() <= -24 * 60 * 60) { +// ToastUtil.showMessage("所选随访日期无效"); +// return; +// } +// tv.setText(simpleDateFormat6.format(date)); +// mL_visit.get((Integer) tv.getTag()).setDate( +// simpleDateFormat6.format(date)); +// } +// }); +// pwTime.showAtLocation(tv, Gravity.BOTTOM, 0, 0); + final Date time = new Date(); + mPickerDialog = new DatePickerDialog(mContext,R.style.MyDatePickerDialogTheme, null, v_year, v_month, + v_day); +// mPickerDialog.setTitle("时间日期"); + mPickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DatePicker datePicker = mPickerDialog.getDatePicker(); + int year = datePicker.getYear(); + int month = datePicker.getMonth(); + int day = datePicker.getDayOfMonth(); + SimpleDateFormat simpledateformat = new SimpleDateFormat("EEEE"); + Date date = new Date(year, month, day-1); + String dayOfWeek = simpledateformat.format(date); + mGoCaTime.set(Calendar.YEAR, year); + mGoCaTime.set(Calendar.MONTH, month); + mGoCaTime.set(Calendar.DAY_OF_MONTH, day); + if (mGoCaTime.getTimeInMillis() - time.getTime() < -24 * 60 * 60) { + ToastUtil.showMessage("所选随访日期无效"); + return; + } + DecimalFormat decimalFormat = new DecimalFormat("00"); + String m = decimalFormat.format(month + 1); + String d = decimalFormat.format(day); + tv.setText(year + "." + m + "." + d+"("+dayOfWeek+")"); + mL_visit.get((Integer) tv.getTag()).setDate( + year + "." + m + "." + d); + } + }); + mPickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mPickerDialog.dismiss(); + } + }); + + if (!mPickerDialog.isShowing()) { + mPickerDialog.show(); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + closeProgressDialog(); + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + SharePrefUtil.saveString(mContext, "adddate", "add"); + Intent intent = new Intent(); + setResult(201, intent); + finish(); + } + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + public void delVisit(final int positions) { + if (positions == 0) { + return; + } + // final ECListDialog dialog = new ECListDialog(mContext, + // new String[] { getString(R.string.visit_delete, "") }); + // dialog.setOnDialogItemClickListener(new + // ECListDialog.OnDialogItemClickListener() { + // @Override + // public void onDialogItemClick(Dialog d, int position) { + // // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (positions + 1 == mL_visit.size()) { + initTime(-3); + } + mL_visit.remove(positions); + mAdapter.notifyDataSetChanged(); + // // if (View.GONE == mLl_addVisit.getVisibility()) { + // // mLl_addVisit.setVisibility(View.VISIBLE); + // // } + // + // dialog.dismiss(); + // } + // }); + // dialog.setTitle("删除此随访"); + // dialog.show(); + } + + class VisitPlanAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mL_visit.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mL_visit.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + // TODO Auto-generated method stub + View view = View.inflate(mContext, R.layout.item_add_plan, null); + view.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, dip2px(mContext, 49.5))); + TextView mcontext = (TextView) view + .findViewById(R.id.item_addplan_context); + Button mdata = (Button) view.findViewById(R.id.item_addplan_date); + ImageView mIv = (ImageView) view + .findViewById(R.id.item_addplan_image); + LinearLayout mLl=(LinearLayout) view.findViewById(R.id.item_ll_addplan_image); + mcontext.setText((position + 1) + "." + + mL_visit.get(position).getContext()); + mdata.setText(mL_visit.get(position).getDate()+"("+mL_visit.get(position).getWeek()+")"); + if (position == 0) { + mIv.setImageResource(R.drawable.addplan1); + } else { + mIv.setImageResource(R.drawable.addplan2); + } + mLl.setTag(position); + mLl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + delVisit((Integer) v.getTag()); + } + }); + mdata.setTag(position); + mdata.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + getTime((Button) v); + } + }); + mcontext.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + mModifyPosition = position; + Intent intent = new Intent(mContext, + VisitDerailActivity.class); + intent.putExtra("patientName", patientName); + intent.putExtra("patientDate", mL_visit.get(position) + .getDate()); + intent.putExtra("patientNote", mL_visit.get(position) + .getContext()); + intent.setType("nokan"); + startActivityForResult(intent, GET_VILIT_PLAN); + } + }); + return view; + } + + } + + private int mModifyPosition = -1; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub +// LogUtil.i("requestCode = "+requestCode+",resultCode = "+resultCode); + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case 1: + // mIntent.putExtra("realName", patient.realName); + // mIntent.putExtra("patientUuid", patient.uuid); +// uuids = data.getStringArrayListExtra("uuids"); +// names = data.getStringArrayListExtra("names"); +// StringBuffer uuidAll = null; +// StringBuffer namesAll = null; +// for (int i = 0;i parent, View view, int position, + long id) { + // TODO Auto-generated method stub + mModifyPosition = position; + Intent intent = new Intent(mContext, VisitDerailActivity.class); + intent.putExtra("patientName", patientName); + intent.putExtra("patientNote", mL_visit.get(position).getContext()); + intent.setType("nokan"); + startActivityForResult(intent, GET_VILIT_PLAN); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + if (!top_right_text.isClickable()) { + top_right_text.setClickable(true); + } + + return super.onKeyDown(keyCode, event); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddcasediscussionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddcasediscussionActivity.java new file mode 100644 index 0000000..f84f4a2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddcasediscussionActivity.java @@ -0,0 +1,1217 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.app.Activity; +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.AddCaseRecordAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.MyCasediscussionBean.DataBean.MYCasediscussion; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * AddcasediscussionActivity 功能描述:添加病例讨论 + * + */ +@SuppressWarnings("serial") +public class AddcasediscussionActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private View mView; + private AddcasediscussionActivity mActivity; + public static final int GET_RESULT_ADD_CASERECORD = 201; + public static final int GET_RESULT_MODIFY_CASERECORD = 202; + public static final int GET_RESULT_DELETE_CASERECORD = 203; + private static final int PROO = 2; + private static final int HANDLER_PHOTOS = 3; + private String mExpertUuid; + private Intent getIntent; + private RelativeLayout mRl_date; + private EditText mEt_note; + private GridView mGv_photos; + private TextView mTv_date; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddCaseRecordAdapter gv_adapter; + private AddBitmaps mAddBitmaps; + int v_year, v_month, v_day; + private String mUpTime = null; + private RelativeLayout mRl_bigPhoto; + private Button mTv_delete, mBt_deleteRecord; + private ImageView mIv_bigPhoto; + private boolean mIsModify = false; + private MYCasediscussion mDatasCase; + ArrayList images = new ArrayList(); + private ViewPager mPager; + private String a1 = ""; + private String a2 = ""; + private String a3 = ""; + private RadioGroup mLabel_one; + private RadioButton rb; + // private List picPaths = new ArrayList(); + private TextView tvhint; + boolean isFirst = true; + private Button mBt_get_Voice; + private KeDaXunFeiUtil VoiceUtil; + private ECAlertDialog dilaog2; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + getIntent = getIntent(); + if (getIntent.getType().equals("modify")) { + mIsModify = true; + } + top_title.setText("发布病例"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + top_back_layout.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (TextUtils.isEmpty(mEt_note.getText().toString())) { + hideSoftKeyboard(); + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(AddcasediscussionActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(AddcasediscussionActivity.this,"AddcasediscussionActivity",""); + hideSoftKeyboard(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(AddcasediscussionActivity.this,"AddcasediscussionActivity",mEt_note.getText().toString()); + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + } + }); + } + /** + * hide inputMethod + */ + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) + getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + mView = UIUtils.inflate(R.layout.activity_add_case_discussion); + mActivity = this; + mLabel_one = (RadioGroup) mView.findViewById(R.id.label_one_ac_cu);// 初始化RadioGroup布局 + tvhint = (TextView) mView.findViewById(R.id.tv_hint_mess); + mBt_get_Voice = (Button) mView.findViewById(R.id.bt_get_voice); + mBt_get_Voice.setOnClickListener(this); + tvhint.setVisibility(View.VISIBLE); + + initIntent(); + initView(); + initLisener(); + String context = SharePrefUtil.getString(AddcasediscussionActivity.this, "AddcasediscussionActivity", ""); + if (!context.isEmpty()){ + mEt_note.setText(context); + } + + return mView; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + if (BaseApplication.getTagList().size() != 0) { + setLableData(); + } else { + if (!isFirst) { + mLabel_one.addView(tvhint); + tvhint.setVisibility(View.VISIBLE); + } + } + // if (BaseApplication.getTagList().size() == 0) { + // + // } + } + + @Override + protected void onStop() { + // TODO Auto-generated method stub + super.onStop(); + mLabel_one.removeAllViews(); + + } + + private void initLisener() { + mBt_deleteRecord.setOnClickListener(this); + mRl_date.setOnClickListener(this); + mGv_photos.setOnItemClickListener(this); + // mRl_bigPhoto.setOnClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + + private void initIntent() { + mExpertUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + if (mIsModify) { + mDatasCase = (MYCasediscussion) getIntent + .getSerializableExtra("caseRecord"); + BaseApplication.getTagList().clear(); + String a1 = mDatasCase.getTag1(); + String a2 = mDatasCase.getTag2(); + String a3 = mDatasCase.getTag3(); + if (!TextUtils.isEmpty(a1)) { + BaseApplication.getTagList().add(a1); + } + if (!TextUtils.isEmpty(a2)) { + BaseApplication.getTagList().add(a2); + } + if (!TextUtils.isEmpty(a3)) { + BaseApplication.getTagList().add(a3); + } + if (BaseApplication.getTagList().size() != 0) { + setLableData(); + } + // setLableData(); + // onResume(); + top_right_text.setText("修改"); + top_title.setText("修改病例"); + // if(BaseApplication.getTagList().size() == 0){ + // tvhint.setVisibility(mView.VISIBLE); + // }else{ + // tvhint.setVisibility(mView.GONE); + // } + + } else { + top_right_text.setText("提交"); + + } + + } + + private DatePickerDialog mPickerDialog; + private TextView case_biaoqian; + + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 8) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + public void initView() { + mRl_bigPhoto = (RelativeLayout) mView + .findViewById(R.id.rl_addcase_bigphoto); + // mTv_delete = (Button) mView.findViewById(R.id.bt_addcase_delete); + mBt_deleteRecord = (Button) mView.findViewById(R.id.bt_delete_record); + // mIv_bigPhoto = (ImageView) mView.findViewById(R.id.iv_addcase_big); + mRl_date = (RelativeLayout) mView.findViewById(R.id.rl_addrecord_time); + mEt_note = (EditText) mView.findViewById(R.id.et_addrecord_note); + mGv_photos = (GridView) mView.findViewById(R.id.gv_case_photos); + mPager = (ViewPager) mView.findViewById(R.id.pager); + case_biaoqian = (TextView) mView.findViewById(R.id.tv_case_biaoqian); + + case_biaoqian.setOnClickListener(this); + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); + if (mIsModify) { + mEt_note.setText(mDatasCase.getDes()); + } + PutPhotos(); + gv_adapter = new AddCaseRecordAdapter(mActivity, mBitmaps, mAddBitmaps); + } + + // 设置标签数据相关属性 + private void setLableData() { + tvhint.setVisibility(View.GONE); + for (int i = 0; i < BaseApplication.getTagList().size(); i++) { + int padding = dip2px(ct, 10);// 设置padding + rb = new RadioButton(ct); + rb.setBackgroundResource(R.drawable.chose_label_bg_hi);// 设置radiobutton的背景selector + rb.setTextColor(getResources().getColor(R.color.top_title));// 設置字体颜色 + rb.setButtonDrawable(android.R.color.transparent);// 去掉radiobutton的圆圈 + rb.setPadding(padding, dip2px(ct, 3), padding, dip2px(ct, 3));// 设置radiobutton的padding + rb.setText(BaseApplication.getTagList().get(i)); + rb.setTextSize(14);// 设置字体大小 + rb.setGravity(Gravity.CENTER); + RadioGroup.LayoutParams params_rb = new RadioGroup.LayoutParams( + RadioGroup.LayoutParams.WRAP_CONTENT, + RadioGroup.LayoutParams.WRAP_CONTENT);// 设置radiobutton的大小 + int margin = dip2px(ct, 5);// 設置radiobutton的外边距 + params_rb.setMargins(margin, 0, 0, 0); + mLabel_one.addView(rb, params_rb);// 設置radiobutton的大小 + rb.setId(i); + } + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(AddcasediscussionActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + mRl_bigPhoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + // mBt_deleteRecord.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + + public void PutPhotos() { + if (mIsModify) { + // mBt_deleteRecord.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + if (mDatasCase.getPhoto().size() > 0) { + for (int i = 0; i < mDatasCase.getPhoto().size(); i++) { + mBitmaps.add(new AddBitmaps(false, null, mDatasCase + .getPhoto().get(i))); + } + if (mDatasCase.getPhoto().size() < 5) { + mBitmaps.add(mAddBitmaps); + // mBt_deleteRecord.setVisibility(View.VISIBLE); + } + } else { + mBitmaps.add(mAddBitmaps); + } + + } else { + mBt_deleteRecord.setVisibility(View.GONE); + mBitmaps.add(mAddBitmaps); + } + + } + + public Calendar mGoCaTime = Calendar.getInstance(Locale.CHINA); + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + showProgressDialog("提交中,请稍候..."); + new Thread() { + public void run() { + if (mIsModify) { + modifyCaseRecord(); + } else { + addCaseRecord(); + } + handler.sendEmptyMessage(0); + }; + }.start(); + } else if (id == R.id.bt_delete_record) { + final ECListDialog dialog = new ECListDialog(mActivity, + new String[] { "删除病情记录"}); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + + deleteCaseRecord(); + dialog.dismiss(); + } + }); + dialog.setTitle("删除此病情讨论"); + dialog.show(); + } else if (id == R.id.tv_case_biaoqian) {// 启动编辑标签界面 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + isFirst = false; + Intent intent = new Intent(AddcasediscussionActivity.this, + AddtagActivity.class); + // intent.putIntegerArrayListExtra(name, value) + startActivity(intent); + } else if (id == R.id.top_back_layout) { + BaseApplication.getTagList().clear(); + } else if (id == R.id.bt_get_voice) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(AddcasediscussionActivity.this,Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil=new KeDaXunFeiUtil(AddcasediscussionActivity.this, mEt_note); + } else { + EasyWindow.with(AddcasediscussionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(AddcasediscussionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil=new KeDaXunFeiUtil(AddcasediscussionActivity.this, mEt_note); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil=new KeDaXunFeiUtil(AddcasediscussionActivity.this, mEt_note); + } + } + } + + private ArrayList paths; + public static Boolean isfresh = false; + + // public static ArrayList infoList = new ArrayList<>(); + + public String getPhotoBase64(int position) { + if (mBitmaps.size() > position) { + if (!mBitmaps.get(position).isAdd()) { + if (mBitmaps.get(position).getBitmap() != null) { + + return Base64Util.BitmaptoBase64(mBitmaps.get(position) + .getBitmap()); + } else { + ToastUtil.showMessage("图片还未加载完毕"); + return "0.0"; + } + + } else { + return ""; + } + + } else { + return ""; + } + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + AddcasediscussionActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // picPaths.add(Base64Util.BitmaptoBase64(loadedImage)); + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 5) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + + /** + * expert_uuid 医生的uuid tag1 病例标签1 tag2 病例标签2 tag3 病例标签3 desc 病例详细信息 img1 图片1 + * img2 图片2 img3 图片3 img4 图片4 img5 图片5 + */ + // 添加 + public void addCaseRecord() { + + if (StringUtil.isEmpty(mEt_note.getText().toString().trim())) { + closeProgressDialog(); + ToastUtil.showMessage("病例描述内容不能为空"); + return; + } + top_right_text.setClickable(false); + + Map param = new HashMap(); + + for (int i = 0; i < BaseApplication.getTagList().size(); i++) { + int a = i + 1; + param.put("tag" + a, BaseApplication.getTagList().get(i)); + } + param.put("expert_uuid", mExpertUuid); + // param.put("tag1", a1); + // param.put("tag2", a2); + // param.put("tag3", a3); + param.put("des", mEt_note.getText().toString().trim()); + param.put("img1", getPhotoBase64(0)); + param.put("img2", getPhotoBase64(1)); + param.put("img3", getPhotoBase64(2)); + param.put("img4", getPhotoBase64(3)); + param.put("img5", getPhotoBase64(4)); + param.put("img6", getPhotoBase64(5)); + param.put("img7", getPhotoBase64(6)); + param.put("img8", getPhotoBase64(7)); + sendParamtoNet(Url.getAddCaseDiscuss, param, GET_RESULT_ADD_CASERECORD, + mActivity, true); + } + + // 修改 + public void modifyCaseRecord() { + + if (StringUtil.isEmpty(mEt_note.getText().toString().trim())) { + ToastUtil.showMessage("病例描述内容不能为空"); + closeProgressDialog(); + return; + } + top_right_text.setClickable(false); + Map param = new HashMap(); + for (int i = 0; i < BaseApplication.getTagList().size(); i++) { + int a = i + 1; + param.put("tag" + a, BaseApplication.getTagList().get(i)); + } + param.put("uuid", mDatasCase.getUuid()); + param.put("des", mEt_note.getText().toString().trim()); + String imag1 = getPhotoBase64(0); + String imag2 = getPhotoBase64(1); + String imag3 = getPhotoBase64(2); + String imag4 = getPhotoBase64(3); + String imag5 = getPhotoBase64(4); + String imag6 = getPhotoBase64(5); + String imag7 = getPhotoBase64(6); + String imag8 = getPhotoBase64(7); + if (imag1.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag2.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag3.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag4.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + if (imag5.equals("0.0")) { + ToastUtil.showMessage("图片未加载完毕"); + return; + } + param.put("img1", imag1); + param.put("img2", imag2); + param.put("img3", imag3); + param.put("img4", imag4); + param.put("img5", imag5); + param.put("img6", imag6); + param.put("img7", imag7); + param.put("img8", imag8); + sendParamtoNet(Url.getUpCaseDiscuss, param, + GET_RESULT_MODIFY_CASERECORD, mActivity, true); + } + + // 删除 + public void deleteCaseRecord() { + showProgressDialog("提交中,请稍候..."); + Map param = new HashMap(); + param.put("uuid", mDatasCase.getUuid()); + sendParamtoNet(Url.getDelCaseDiscuss, param, + GET_RESULT_DELETE_CASERECORD, mActivity, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + if (resultCode==1) { + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)) { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + e.printStackTrace(); + } + +// LogUtil.e(resultJson); + }else { + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if(bean==null){ + ToastUtil.showMessage("病例创建错误"); + return; + } + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + Intent intent = new Intent(); + // setResult(201, intent); + // finish(); + switch (resultCode) { + // 增加 + case GET_RESULT_ADD_CASERECORD: + //病例讨论发帖加分 + Map param = new HashMap<>(); + param.put("score_type","4"); + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, this); + + top_right_text.setClickable(true); + isfresh = true; + BaseApplication.setNotify(true); + setResult(201, intent); + SharePrefUtil.saveString(AddcasediscussionActivity.this,"AddcasediscussionActivity",""); + BaseApplication.getTagList().clear(); + hideSoftKeyboard(); + finish(); + + break; + // 修改 + case GET_RESULT_MODIFY_CASERECORD: + top_right_text.setClickable(true); + intent.putExtra("uuid", mDatasCase.getUuid()); + setResult(202, intent); + BaseApplication.getTagList().clear(); + isfresh = true; + BaseApplication.setNotifyexit(true); + hideSoftKeyboard(); + finish(); + + break; + // 删除 + case GET_RESULT_DELETE_CASERECORD: + intent.putExtra("uuid", mDatasCase.getUuid()); + setResult(203, intent); + hideSoftKeyboard(); + finish(); + break; + + default: + break; + } + } + } + + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + hideSoftKeyboard(); + // TODO Auto-generated method stub + isFirst = false; + if (mBitmaps.get(position).isAdd()) { + + // Intent intent = new Intent(mActivity, + // SelectedPhotoActivity.class); + // mActivity.startActivityForResult(intent, 101); + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + // imageView.setVisibility(View.GONE); + imageView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(mView, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + } + + selectedPhoto(); + + } else { + // GetBytes(); + mRl_bigPhoto.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + PagerSetAdapter(position); + } + } + + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(AddcasediscussionActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(AddcasediscussionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(AddcasediscussionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + LogUtil.i("以拒绝"); + isFirst = true; + } + + }, new String[]{Manifest.permission.CAMERA, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(AddcasediscussionActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有读写内存 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + mActivity.startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(AddcasediscussionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(AddcasediscussionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + mActivity.startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + isFirst = true; + +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + mActivity.startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } + + } + }); + tv_cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + + + public static void startActionCapture(Activity activity, File file, int requestCode) { + if (activity == null) { + return; + } + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + intent.putExtra(MediaStore.EXTRA_OUTPUT, getUriForFile(activity, file)); + activity.startActivityForResult(intent, requestCode); + } + + + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(AddcasediscussionActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(AddcasediscussionActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + if (!top_right_text.isClickable()) { + top_right_text.setClickable(true); + + } + if (keyCode == KeyEvent.KEYCODE_BACK) { + + if (TextUtils.isEmpty(mEt_note.getText().toString())) { + if (mRl_bigPhoto.getVisibility() == View.VISIBLE) { + mRl_bigPhoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + // mBt_deleteRecord.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + + } + hideSoftKeyboard(); + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(AddcasediscussionActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(AddcasediscussionActivity.this,"AddcasediscussionActivity",""); + if (mRl_bigPhoto.getVisibility() == View.VISIBLE) { + mRl_bigPhoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + // mBt_deleteRecord.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + } + hideSoftKeyboard(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(AddcasediscussionActivity.this,"AddcasediscussionActivity",mEt_note.getText().toString()); + if (mRl_bigPhoto.getVisibility() == View.VISIBLE) { + mRl_bigPhoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + // mBt_deleteRecord.setVisibility(View.VISIBLE); + mBt_deleteRecord.setVisibility(View.GONE); + } + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + } else { + return super.onKeyDown(keyCode, event); + } + return super.onKeyDown(keyCode, event); + } + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + if(VoiceUtil!=null){ + VoiceUtil.dissDialog(); + } + super.onDestroy(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddtagActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddtagActivity.java new file mode 100644 index 0000000..4ec9077 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AddtagActivity.java @@ -0,0 +1,222 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnFocusChangeListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class AddtagActivity extends BaseActivity { + + private ListView listview; + private TextView tvadd; + public MyAdapter adapter; + private View addview; + private EditText ed_add_tag; + private String tsg = ""; + // public static ArrayList arr = new ArrayList<>(); + public ArrayList arr; + public ArrayList arrr = new ArrayList<>(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("编辑标签"); + top_right.setVisibility(View.GONE); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + addview = UIUtils.inflate(R.layout.activity_add_tag); + listview = (ListView) addview.findViewById(R.id.listview); + tvadd = (TextView) addview.findViewById(R.id.tv_add_tag); + ed_add_tag = (EditText) addview.findViewById(R.id.ed_add_tag); + adapter = new MyAdapter(this); + listview.setAdapter(adapter); + ed_add_tag.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + tsg = ed_add_tag.getText().toString(); + if(tsg.length() >= 10){ + ToastUtil.showMessage("标签字数不能超过10个字"); + } + } + }); + // arrr = intent.getStringArrayListExtra("caselist"); + // if (arrr != null) { + // arr = arrr; + // } + tvadd.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + tsg = ed_add_tag.getText().toString(); + // if (arr.size() > 2) { + // ToastUtil.showMessage("每份病例最多添加三个标签"); + // return; + // } else { + // if (TextUtils.isEmpty(tsg) || tsg == null) { + // ToastUtil.showMessage("所添加标签不能为空"); + // } else { + // arr.add(tsg); + // ed_add_tag.setText(""); + // adapter.notifyDataSetChanged(); + // } + // } + if (TextUtils.isEmpty(tsg)) { + ToastUtil.showMessage("所添加标签不能为空"); + return; + } + + if (BaseApplication.getTagList().size() > 2) { + ToastUtil.showMessage("每份病例最多添加三个标签"); + return; + } + BaseApplication.getTagList().add(tsg); + adapter.notifyDataSetChanged(); + ed_add_tag.setText(""); + } + }); + + return addview; + } + + private class MyAdapter extends BaseAdapter { + + private Context context; + private LayoutInflater inflater; + + public MyAdapter(Context context) { + super(); + this.context = context; + inflater = LayoutInflater.from(context); + // arr = new ArrayList(); + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (BaseApplication.getTagList() != null) { + return BaseApplication.getTagList().size(); + } else { + return 0; + } + + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(final int position, View view, ViewGroup arg2) { + // TODO Auto-generated method stub + if (view == null) { + view = inflater.inflate(R.layout.item_add_tag, null); + } + final TextView edit = (TextView) view.findViewById(R.id.tv_add_tag); + edit.setText(BaseApplication.getTagList().get(position)); // 在重构adapter的时候不至于数据错乱 + ImageView del = (ImageView) view.findViewById(R.id.im_del_tag); + edit.setOnFocusChangeListener(new OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + // TODO Auto-generated method stub + if (BaseApplication.getTagList().size() > 0) { + BaseApplication.getTagList().set(position, + edit.getText().toString()); + } + + } + }); + del.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + // 从集合中删除所删除项的EditText的内容 + BaseApplication.getTagList().remove(position); + adapter.notifyDataSetChanged(); + } + }); + return view; + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { +// BaseActivity.getTagList().clear(); +// finish(); + } + + } + + // /** + // * 重寫返回方法 onKeyDown + // */ + // @Override + // public boolean onKeyDown(int keyCode, KeyEvent event) { + // if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { + // // 这里重写返回键 + // Intent intent = getIntent(); + // intent.putStringArrayListExtra("caselist", arr); + // setResult(666, intent); + // this.finish(); + // } + // return false; + // } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/AdvertActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AdvertActivity.java new file mode 100644 index 0000000..98e2279 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/AdvertActivity.java @@ -0,0 +1,362 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebChromeClient.CustomViewCallback; +import android.webkit.WebSettings; +import android.webkit.WebSettings.LayoutAlgorithm; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.RelativeLayout; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; + + +public class AdvertActivity extends AppCompatActivity implements OnClickListener { + private WebView wv_advert; +// private View view; + private RelativeLayout fl_advert; + + private MyWebChromeClient mMyWebChromeClient; + + private View xCustomView; + private CustomViewCallback xCustomViewCallback; +// private myWebChromeClient xwebchromeclient; + private String ganyuanweini = "http://ylxb.igandan.com/bmspatient/toindex"; + private String twoduiban = "http://www.igandan.com/ygzd/index.html"; + private String bingganzhenduan = "http://www.igandan.com/bgzd/index.html"; + private String gdys = "http://wx.igandan.com/video/videoLisByType?share=1&typeUuid=f3d1b0de3cb44d18977f06e714032913&page=1"; + + + private String mWebTitle = ""; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_advert); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); +// view = UIUtils.inflate(R.layout.activity_advert); + wv_advert = (WebView) findViewById(R.id.wv_advert); + fl_advert = findViewById(R.id.fl_advert); + String url = getIntent().getStringExtra("patientmoocurlStr"); + + // wv_quest_detaiil.loadUrl(url) + WebSettings settings = wv_advert.getSettings(); + + // 设置 缓存模式 + settings.setCacheMode(WebSettings.LOAD_DEFAULT); + // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); + // 开启 DOM storage API 功能 + settings.setDomStorageEnabled(true); + // 开启 database storage API 功能 + settings.setDatabaseEnabled(true); + settings.setUseWideViewPort(true); + settings.setLoadWithOverviewMode(true); + + settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 + settings.setJavaScriptEnabled(true);// 启用javascript脚本 + settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 + + settings.setLoadWithOverviewMode(true); + settings.setUseWideViewPort(true); + settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); + settings.setSupportZoom(true); + settings.setBuiltInZoomControls(true); + + mMyWebChromeClient = new MyWebChromeClient() { + @Override + public void onReceivedTitle(WebView view, String title) { + // TODO Auto-generated method stub + super.onReceivedTitle(view, title); + mWebTitle = title; + } + }; + wv_advert.setWebChromeClient(mMyWebChromeClient); + // xwebchromeclient = new myWebChromeClient(); + // wv_advert.setWebChromeClient(xwebchromeclient); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + wv_advert.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + wv_advert.setWebViewClient(new MyWebViewClient()); + // wv_advert.setWebViewClient(new WebViewClient() { + // @Override + // public boolean shouldOverrideUrlLoading(WebView view, String url) { + // // TODO Auto-generated method stub + // view.loadUrl(url); + // return true; + // } + // }); + wv_advert.loadUrl(url); + + } + + + + + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { + finish(); + } + } + + private String shareTitle, shareUrl, shareContent; + +// public void UMengShare() { +// // ToastUtil.showMessage(mWebTitle); +// // newsTitle = getIntent().getStringExtra("newsTitle");// 新闻的标题 +// // summary = getIntent().getStringExtra("summary");// 新闻的摘要 +// if (getIntent().getStringExtra("type").equals("gbjc")) { +// shareTitle = mWebTitle; +// +// shareContent = "首医肝病转化医学研究所|肝胆相照平台联合肝病检测"; +// } else if(getIntent().getStringExtra("patientmoocurlStr").equals( +// ganyuanweini) ){ +// shareTitle = "一路陪伴,肝愿为你"; +// shareContent = "肝胆相照®带您了解乙肝"; +// }else if( getIntent().getStringExtra("patientmoocurlStr").equals( +// twoduiban)){ +// shareTitle = "乙肝五项检查报告在线解读"; +// shareContent = "肝胆相照®肝胆病在线公共服务平台"; +// }else if( getIntent().getStringExtra("patientmoocurlStr").equals( +// bingganzhenduan)){ +// shareTitle = "丙肝检查报告在线解读"; +// shareContent = "肝胆相照®肝胆病在线公共服务平台"; +// }else if(getIntent().getStringExtra("patientmoocurlStr").equals( +// gdys)){ +// shareTitle = "肝胆科普视频,你想了解学习的都在这里"; +// shareContent = "肝胆相照®肝胆病在线公共服务平台"; +// +// }else{ +// shareTitle = "谈丙话肝"; +// shareContent = "肝胆相照®带您了解丙肝"; +// } +// shareUrl = getIntent().getStringExtra("patientmoocurlStr"); +// UMImage shareImg; +// +// shareImg = new UMImage(AdvertActivity.this, +// "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); +// +// UMWeb web = new UMWeb(shareUrl); +// web.setTitle(shareTitle);// 标题 +// web.setThumb(shareImg); // 缩略图 +// web.setDescription(shareContent);// 描述 +// new ShareAction(AdvertActivity.this) +// .withMedia(web) +// .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, +// SHARE_MEDIA.SINA).setCallback(new UMShareListener() { +// +// @Override +// public void onStart(SHARE_MEDIA arg0) { +// // TODO Auto-generated method stub +// switch (arg0) { +// case WEIXIN_CIRCLE: +// if (getIntent().getStringExtra("type").equals("tbhg")|| getIntent().getStringExtra("patientmoocurlStr").equals("http://wx.igandan.com/bing/index?share=1") +// || getIntent() +// .getStringExtra("patientmoocurlStr") +// .equals("http://gdwx.dsz360.com/bing/index?share=1")) { +// shareTitle = "谈丙话肝,肝胆相照®带您了解丙肝"; +// } else if(getIntent().getStringExtra("patientmoocurlStr").equals( +// ganyuanweini) ){ +// shareTitle = "一路陪伴,肝愿为你,肝胆相照®带您了解乙肝"; +// +// }else if( getIntent().getStringExtra("patientmoocurlStr").equals( +// twoduiban)){ +// shareTitle = "乙肝五项检查报告在线解读,肝胆相照®肝胆病在线公共服务平台"; +// +// }else if( getIntent().getStringExtra("patientmoocurlStr").equals( +// bingganzhenduan)){ +// shareTitle = "丙肝检查报告在线解读,肝胆相照®肝胆病在线公共服务平台"; +// +// }else if(getIntent().getStringExtra("patientmoocurlStr").equals( +// gdys)){ +// shareTitle = "肝胆科普视频,你想了解学习的都在这里,肝胆相照®肝胆病在线公共服务平台"; +// } +// +// break; +// +// default: +// break; +// } +// } +// +// @Override +// public void onResult(SHARE_MEDIA arg0) { +// // TODO Auto-generated method stub +// Toast.makeText(AdvertActivity.this, "分享成功", +// Toast.LENGTH_LONG).show(); +// } +// +// @Override +// public void onError(SHARE_MEDIA arg0, Throwable arg1) { +// // TODO Auto-generated method stub +// Toast.makeText(AdvertActivity.this, +// "分享失败" + arg1.getMessage(), Toast.LENGTH_LONG) +// .show(); +// } +// +// @Override +// public void onCancel(SHARE_MEDIA arg0) { +// // TODO Auto-generated method stub +// Toast.makeText(AdvertActivity.this, "分享取消", +// Toast.LENGTH_LONG).show(); +// } +// }).open(); +// } + + // 适配全屏播放 + + private class MyWebChromeClient extends WebChromeClient { + private View mCustomView; + private CustomViewCallback mCustomViewCallback; + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + super.onShowCustomView(view, callback); + if (mCustomView != null) { + callback.onCustomViewHidden(); + return; + } + mCustomView = view; + fl_advert.addView(mCustomView); + mCustomViewCallback = callback; +// layout_top.setVisibility(View.GONE); + wv_advert.setVisibility(View.GONE); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + + } + + public void onHideCustomView() { + wv_advert.setVisibility(View.VISIBLE); + if (mCustomView == null) { + return; + } + mCustomView.setVisibility(View.GONE); + fl_advert.removeView(mCustomView); +// layout_top.setVisibility(View.VISIBLE); + mCustomViewCallback.onCustomViewHidden(); + mCustomView = null; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + final WindowManager.LayoutParams attrs = getWindow() + .getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + super.onHideCustomView(); + } + } + + @Override + public void onConfigurationChanged(Configuration config) { + super.onConfigurationChanged(config); + switch (config.orientation) { + case Configuration.ORIENTATION_LANDSCAPE: + getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + break; + case Configuration.ORIENTATION_PORTRAIT: + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().addFlags( + WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); + break; + } + } + + @Override + public void onPause() { + super.onPause(); + } + + @Override + public void onBackPressed() { + if (wv_advert.canGoBack()) { + wv_advert.goBack(); + return; + } + super.onBackPressed(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + wv_advert.destroy(); + } + + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + } + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + + public class MyWebViewClient extends WebViewClient { + + // private ProgressDialog loadingBar; + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + // loadingView.setVisibility(View.VISIBLE); + + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailActivity.java new file mode 100644 index 0000000..754fb69 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailActivity.java @@ -0,0 +1,178 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class BillDetailActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private TextView mTv_lsnum, mTv_get_type, mTv_money, mTv_pay_type, + mTv_time, mTv_beizhu, mTv_type, mTv_card; + private String lsnum, get_type, money, pay_type, time, beizhu, user_name, + order_tpye; + private LinearLayout mLl_card; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("详情"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_bill_detail_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_bill_detail); + } + + mTv_beizhu = (TextView) view.findViewById(R.id.tv_bill_beizhu); + mTv_get_type = (TextView) view.findViewById(R.id.tv_bill_get_type); + mTv_money = (TextView) view.findViewById(R.id.tv_bill_money); + mTv_pay_type = (TextView) view.findViewById(R.id.tv_bill_pay_type); + mTv_time = (TextView) view.findViewById(R.id.tv_bill_time); + mTv_lsnum = (TextView) view.findViewById(R.id.tv_bill_lsnum); + mTv_type = (TextView) view.findViewById(R.id.tv_bill_pay_type2); + mLl_card = (LinearLayout) view.findViewById(R.id.ll_bill_card); + mTv_card = (TextView) view.findViewById(R.id.tv_bill_card); + initIntent(); + initView(); + return view; + } + + private void initView() { + // TODO Auto-generated method stub + mTv_lsnum.setText(lsnum); + mTv_get_type.setText(get_type); + mTv_money.setText(money + "元"); + if ("wx".equals(pay_type)) { + mTv_pay_type.setText("微信支付"); + } + if ("balance".equals(pay_type)) { + mTv_pay_type.setText("余额支付"); + } + if ("alipay".equals(pay_type)) { + mTv_pay_type.setText("支付宝支付"); + } + if (("upacp").equals(pay_type)) { + mTv_pay_type.setText("银联支付"); + } + if (("患者送花").equals(get_type)) { + mTv_type.setText("患者:"); + mTv_pay_type.setText(user_name); + } + + if ("12".equals(order_tpye)) { + mTv_pay_type.setText("银联"); + mTv_type.setText("提现方式:"); + mLl_card.setVisibility(View.VISIBLE); + getMyAccount(); + } +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// +// String sd = sdf.format(new Date(Long.parseLong(time) * 1000)); + mTv_time.setText(time); + mTv_beizhu.setText(beizhu); + } + + private void initIntent() { + // TODO Auto-generated method stub + Intent getIntent = getIntent(); + lsnum = getIntent.getStringExtra("ls"); + get_type = getIntent.getStringExtra("get_type"); + money = getIntent.getStringExtra("money"); + pay_type = getIntent.getStringExtra("pay_type"); + time = getIntent.getStringExtra("time"); + user_name = getIntent.getStringExtra("pay_user_name"); + beizhu = getIntent.getStringExtra("beizhu"); + order_tpye = getIntent.getStringExtra("order_type"); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + /** + * 获取我的账户数据 + */ + public void getMyAccount() { + showProgressDialog("加载中"); + Map param = new HashMap(); + param.put("withdrawalBalanceId", lsnum); + sendParamtoNet(Url.getWithdrawalBalanceDetial, param, 101, + BillDetailActivity.this, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + // TODO Auto-generated method stub + closeProgressDialog(); + String code = null; + String message = null; + String card_number = null; + String channel = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + card_number = jsonObject.getString("card_number"); + channel = jsonObject.getString("channel"); + mTv_card.setText("尾号" + card_number); + if (code.equals("1")) { + mTv_beizhu.setText("提现成功,一般1-3天内到账"); + } else { + mTv_beizhu.setTextColor(Color.parseColor("#FF0000")); + mTv_beizhu.setText("提现失败"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailsActivity.java new file mode 100644 index 0000000..e6b58ef --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BillDetailsActivity.java @@ -0,0 +1,251 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.BillDetailAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BillListBean; +import cn.shangyu.gdxzExpert.bean.BillListBean.PingOrder.PingOrderBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class BillDetailsActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private View view; + private BillDetailsActivity mActivity; + private int page = 1; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private List beanlists = new ArrayList(); + private BillDetailAdapter mAdapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("账单明细"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_bill_details_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_bill_details); + } + + mActivity = this; + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_my_mind); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无账单信息"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getMyAccount(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getMyAccount(); + } + }); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + getMyAccount(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + /** + * 获取我的账户数据 + */ + public void getMyAccount() { + showProgressDialog("加载中"); +// String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); +// param.put("expert_uuid", uuid); + param.put("page", page + ""); + sendJsonPostParamtoNetSignMD5(Url.getOrderList, param, 101, this); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + Log.d("WXEntryActivity","resultCode "+resultJson); + closeProgressDialog(); + processData(resultJson); + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + BillListBean bean = GsonTools + .fromGsonToBean(result, BillListBean.class); + // + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null + || bean.data.list == null + + || bean.data.list.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无账单信息"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.data.list); + + } + // // 更新 + if (mAdapter == null) { + mAdapter = new BillDetailAdapter(beanlists); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.data.pages; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + PingOrderBean bean = beanlists.get(position - 1); + Intent intent = new Intent(mActivity, BillDetailActivity.class); + intent.putExtra("ls", bean.getTrade_no()); + intent.putExtra("get_type", bean.getType_name()); + intent.putExtra("money", bean.getAccountstr()); + intent.putExtra("pay_type", bean.getPay_channel()); + intent.putExtra("order_type", bean.getOrder_type()); + intent.putExtra("pay_user_name", bean.getUser_name()); + if (StringUtil.isEmpty(bean.getPay_time())) { + intent.putExtra("time", bean.getCreate_time()); + } else { + intent.putExtra("time", bean.getPay_time()); + } + intent.putExtra("beizhu", bean.getOrder_note()); + startActivity(intent); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BindNumberActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BindNumberActivity.java new file mode 100644 index 0000000..ac5423d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BindNumberActivity.java @@ -0,0 +1,513 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.activity.LoginNewActivity.PatientUrl; +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.addUMToken; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.getDeviceInfo; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getHandler; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; +import static cn.shangyu.gdxzExpert.utils.Url.umGetMobile; +import static cn.shangyu.gdxzExpert.utils.Url.umVerifyLogin; +import static cn.shangyu.gdxzExpert.utils.Url.wechatBindMobile; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import com.netease.nimlib.sdk.AbortableFuture; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.LoginInfo; +import com.umeng.message.PushAgent; +import com.umeng.umverify.UMResultCode; +import com.umeng.umverify.UMVerifyHelper; +import com.umeng.umverify.listener.UMTokenResultListener; +import com.umeng.umverify.model.UMTokenRet; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; +import cn.shangyu.gdxzExpert.umeng.AuthPageConfig; +import cn.shangyu.gdxzExpert.umeng.BaseUIConfig; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.TimeButton; + +public class BindNumberActivity extends BaseActivity implements OnCallBackFromNet { + + private TimeButton mTb_message; + private EditText usernameEditText,messageEditText; + private Button bt_login; + private String currentUsername,wechat_user_info; + private String currentPassword; + private String checkInfo; + private UMTokenResultListener mTokenResultListener; + private UMVerifyHelper mPhoneNumberAuthHelper; + private AuthPageConfig mUIConfig; + @Override + public void setTitle() { + top_title.setText("绑定手机"); + + } + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_bind_number); + usernameEditText = (EditText) view.findViewById(R.id.username);// 账号 + // 设置输入框获得焦点hint提示消失添加监听 + usernameEditText.setOnFocusChangeListener(onFocusAutoClearHintListener); + + messageEditText = (EditText) view.findViewById(R.id.et_get_message); + mTb_message = (TimeButton) view.findViewById(R.id.tb_send_message); + + mTb_message.onCreate(); + mTb_message.clearTimer(); + mTb_message.setTextBefore("获取验证码").setLenght(60 * 1000); + bt_login = (Button) view.findViewById(R.id.bt_login);// 登录 + + mTb_message.setOnClickListener(this); + bt_login.setOnClickListener(this);// 登录 + wechat_user_info=getIntent().getStringExtra("wechat_user_info"); + sdkInit(); + return view; + } + + private void login() + { + Map param = new HashMap<>(); + param.put("mobile",currentUsername); + param.put("current_spec",getDeviceInfo()); + param.put("wechat_user_info",wechat_user_info); + param.put("sms", currentPassword); + sendJsonPostParamtoNetSignMD5(wechatBindMobile,param,101,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_login) { + // 登录 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + if (TextUtils.isEmpty(currentUsername)) { + currentUsername = usernameEditText.getText().toString(); + } + currentPassword = messageEditText.getText().toString(); + + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(currentPassword)) { + ToastUtil.showToast("验证码不为空"); + return; + } + + login(); + } else if (id == R.id.tb_send_message) { + // 短信验证码 + currentUsername = usernameEditText.getText().toString(); + Map param = new HashMap<>(); + param.put("mobile",currentUsername); + param.put("type","7"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); + } + } + public void sdkInit() { +// showProgressDialog("网络检测中"); + mTokenResultListener = new UMTokenResultListener() { + @Override + public void onTokenSuccess(String s) { +// closeProgressDialog(); + mPhoneNumberAuthHelper.hideLoginLoading(); + + UMTokenRet tokenRet = null; + try { + tokenRet = UMTokenRet.fromJson(s); + if(UMResultCode.CODE_ERROR_ENV_CHECK_SUCCESS.equals(tokenRet.getCode())) + { + mPhoneNumberAuthHelper.getLoginToken(BindNumberActivity.this,3000); + } + else if(UMResultCode.CODE_ERROR_ENV_CHECK_SUCCESS.equals(tokenRet.getCode())) + { + mPhoneNumberAuthHelper.getLoginToken(BindNumberActivity.this,3000); + } + else if (UMResultCode.CODE_START_AUTHPAGE_SUCCESS.equals(tokenRet.getCode())) { + Log.d("LoginTAG", "唤起授权页成功:" + s); + } + + else if (UMResultCode.CODE_GET_TOKEN_SUCCESS.equals(tokenRet.getCode())) { + Log.d("LoginTAG", "获取token成功:" + s); + // mPhoneNumberAuthHelper.hideLoginLoading(); +// mPhoneNumberAuthHelper.quitLoginPage(); + getResultWithToken(tokenRet.getToken()); + + } + else + { + ToastUtil.showMessage(s); + } + } catch (Exception e) { + e.printStackTrace(); + Log.d("LoginTAG", "获取token失败:" + e.toString()); + } + } + + @Override + public void onTokenFailed(String s) { + Log.d("LoginTAG", "获取token失败:" + s); + + mPhoneNumberAuthHelper.hideLoginLoading(); + +// Toast.makeText(BindNumberActivity.this, s, Toast.LENGTH_SHORT).show(); + + } + }; + mPhoneNumberAuthHelper = UMVerifyHelper.getInstance(this, mTokenResultListener); +// mPhoneNumberAuthHelper.setAuthSDKInfo("UW4GwA7BR6ezYeEym4Dp4foswuAY4SLnFMauEQYaeMAEMzoa8n7TPIVRxIzi7wmoNYgAufQ7kw1GeRIdyouCHNol4UboQ6RGzVjyXFQLrgZjM8yjsEGiDYOPRzn1/EchKMOO3jtYM3XOTqSNnNk/r0NcBdisBINbskO7IojS33SUoym0IIk7xMAIOsKIb/67wM/GrCB0jxs3Jpiv9spflMP+GtwwpvZY9VXOCLWFshi1nhC63GIg0KFHF+wsDZoS9fAlKnRnayReYRQf9dayywdoh8XXrpoeZpu2rnkUDlkqXDZ11fHA5rC5znhkstd7"); + //联通升级 + mPhoneNumberAuthHelper.setAuthSDKInfo("ekYGnmwFM/LIyP8CwBJtN7OPVgg9UJuLlAS2yfVvhHYxbd3zx5mzRtkCU2S+81j5t1NjiHwDiirFISu8mApJhsOHqpqq9fDVfmsrcLhEfDUuzlVpPTVYcN0+B2Rxm+zK1FzLVq6VGf+GOLW2NLmH5VbJXLDX5wPdedcHSgsJikyD6+OypaDr/01DjsVLt8ElMqxcrptYWccUAAPQdvucA0tcjQcUN6beJpcB3zSTZghbvt0K6gjrNfzTb3ypudW5iPb55XYEGeqh0K3YmNphTLhiL+GC5oGJ+tNfsjICKau//5TTTmYGAw=="); + mUIConfig = BaseUIConfig.init(1,this, mPhoneNumberAuthHelper); + mUIConfig.configAuthPage(); + mPhoneNumberAuthHelper.checkEnvAvailable(2); + + + + } + String token; + public void getResultWithToken(String token) { + this.token=token; + showProgressDialog("正在绑定"); + Map param = new HashMap<>(); + param.put("token",token); + sendJsonPostParamtoNetSignMD5(umGetMobile,param,201,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.e("LoginTAG", "resultJson "+resultJson+" resultCode"+resultCode); + switch (resultCode) + { + case MSG_SEND: + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + mTb_message.startTimer(); + } else { + ToastUtil.showToast(message); + mTb_message.clearTimer(); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("获取验证码失败,请重试"); + mTb_message.clearTimer(); + e.printStackTrace(); + } + + break; + case 202: + closeProgressDialog(); + case 101: + try { + + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.optString("code"); + String message = objs.optString("msg"); + if ("200".equals(retcode)) { + getSaveUserInfor(2,objs); + // 得到个人资料,并保存 +// getSaveUserInfor(2,objs); + + } + else { + + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + + } + break; + case 201: + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + if(objs.optJSONObject("data")!=null) + { + if(objs.optJSONObject("data").optJSONObject("data")!=null + &&!StringUtil.isEmpty(objs.optJSONObject("data").optJSONObject("data").optString("mobile"))) + { + + Map param = new HashMap<>(); +// param.put("token",token); + param.put("mobile",objs.optJSONObject("data").optJSONObject("data").optString("mobile")); + param.put("current_spec", getDeviceInfo()); + param.put("wechat_user_info",wechat_user_info); + sendJsonPostParamtoNetSignMD5(umVerifyLogin,param,202,this); + Log.e("LoginTAG", "param "+param.toString()); + } + } + } else { + ToastUtil.showToast(message); + + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("一键登录失败"); + + e.printStackTrace(); + } + break; + } + + } + // 保存个人信息 + public void getSaveUserInfor(int type,JSONObject objs) throws JSONException { + + JSONObject date = objs.getJSONObject("data"); + String uuid = date.optString("uuid"); + String realName = date.optString("realName"); + String mobile = date.optString("mobile"); + String photo = date.optString("photo"); + String email = date.optString("email"); + String birthDate = date.optString("birthDate"); + String hospitalUuid = date.optString("hospitalUuid"); + String hospitalName = date.optString("hospitalName"); + String officeUuid = date.optString("officeUuid"); + String officeName = date.optString("officeName"); + String officePhone = date.optString("officePhone"); + String positionUuid = date.optString("positionUuid"); + String positionName = date.optString("positionName"); + String intro = date.optString("intro"); + String certificate = date.optString("certificate"); + String certificateImg = date.optString("certificateImg"); + String qrcode = date.optString("qrcode"); + checkInfo = date.optString("checkInfo"); + String cityId = date.optString("cityId"); + String countyId = date.optString("countyId"); + String provId = date.optString("provId"); + int isStar = date.optInt("isStar"); + int sex = date.optInt("sex"); + int state = date.optInt("state");// 审核状态( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 6.已通过 + SharePrefUtil.saveString(ct, Constant.USERID, uuid); + SharePrefUtil.saveString(ct, Constant.uuid, uuid);// 唯一标识,我的uuid + SharePrefUtil.saveString(ct, Constant.realName, realName);// 真实姓名 + SharePrefUtil.saveString(ct, Constant.mobile, mobile);// 手机号 + if (!StringUtil.isEmpty(currentUsername) + && ValidateUtils.isMobileNum(currentUsername)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, currentUsername);// 手机号,这个为了重新登录后回显之前的手机号 + } else if (!StringUtil.isEmpty(mobile) + && ValidateUtils.isMobileNum(mobile)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, mobile);// 手机号,这个为了重新登录后回显之前的手机号 + } + SharePrefUtil.saveString(ct, Constant.photo, photo);// 头像路径 + SharePrefUtil.saveString(ct, "email", email);// 邮箱 + SharePrefUtil.saveString(ct, "birthDate", birthDate);// 出生日期 + SharePrefUtil.saveString(ct, "hospitalUuid", hospitalUuid);// 坐诊医院uuid + SharePrefUtil.saveString(ct, "hospitalName", hospitalName);// 坐诊医院名称 + SharePrefUtil.saveString(ct, "officeUuid", officeUuid);// 科室uuid + SharePrefUtil.saveString(ct, "officeName", officeName);// 科室名称 + SharePrefUtil.saveString(ct, "officePhone", officePhone);// 科室电话 + SharePrefUtil.saveString(ct, "positionUuid", positionUuid);// //职称uuid + SharePrefUtil.saveString(ct, "positionName", positionName);// //职称名称 + SharePrefUtil.saveString(ct, "intro", intro);// 简介 + SharePrefUtil.saveString(ct, "certificate", certificate);// 执业资格证 + SharePrefUtil.saveString(ct, "certificateImg", certificateImg);// 执业资格证图片 + SharePrefUtil.saveString(ct, "qrcode", qrcode);// 二维码 + SharePrefUtil.saveString(ct, "checkInfo", checkInfo);// 审核信息 + SharePrefUtil.saveString(ct, "cityId", cityId);// 市id + SharePrefUtil.saveString(ct, "countyId", countyId);// //区县id + SharePrefUtil.saveString(ct, "provId", provId);// 省id + SharePrefUtil.saveInt(ct, "isStar", isStar);// 是否是肝胆名医 0否 1是 + SharePrefUtil.saveInt(ct, "sex", sex);// 性别(0.男 1.女) + SharePrefUtil.saveInt(ct, "state", state);// 审核状态( 1.待审核 + + + addUMToken(PushAgent.getInstance(this).getRegistrationId()); + // 2.审核中3.需要补充修改资料 + // 4.再次提交审核5.拒绝 6.已通过) + // 进行判断是否进入主页面还是进入设置页面 + if(type==1)//老的登录 + { + getLoginInfo(state,objs); + } + else + { + getLoginInfo(state,date);//友盟一键登录 + } + } + public void getYunxin(JSONObject objs) throws JSONException { + + String yx_accid =objs.getString("YX_accid"); + String yx_token =objs.getString("YX_token"); + SharePrefUtil.saveString(ct, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(ct, Constant.yx_token, yx_token); + } + + public void getLoginInfo(int state,JSONObject objs) throws JSONException { + Log.d("LoginTAG","state "+state); + if (state != 6) { + // 需要完善资料,跳转到完善资料页面 + // ToastUtil.showToast("登录成功,请完善资料"); + // 启动登录设置信息界面 + Log.d("LoginTAG","state1 "+state); + Intent intent = new Intent(this, LoginSetInfoActivity.class); + intent.putExtra("checkInfo", checkInfo); + intent.putExtra("state", state); + startActivity(intent); + closeProgressDialog(); + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, false); + this.finish(); + } else { + getYunxin(objs); + + // 获取患者列表 + String USERID = SharePrefUtil.getString(ct, Constant.USERID, ""); + + // 获取患者列表存到数据库 + BaseActivity.getPatientList(this, PatientUrl, USERID); + String yx_accid =SharePrefUtil.getString(ct, Constant.yx_accid, ""); + String yx_token =SharePrefUtil.getString(ct, Constant.yx_token, ""); + doLauncherAction(); + // 登录 + loginYunxin(yx_accid,yx_token); + + } + + }; + private void doLauncherAction() { + + closeProgressDialog(); + // ( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 + // 6.已通过) + // 注册成功跳转 + Intent intent = new Intent(); +// if(BigModule()) +// { +// intent.setClass(this, BigMainActivity.class); +// +// } +// else +// { + intent.setClass(this, MainActivity.class); +// } + intent.putExtra("launcher_from", 1); + + startActivity(intent); + Constant.islogout = 2; + // 保存登陆 + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, true); + + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(BindNumberActivity.this, 1); + } + public void loginYunxin(String yx_accid,String yx_token) + { + // 演示15s后手动登录,登录成功后,可以正常收发数据 + getHandler().postDelayed(() -> { + AbortableFuture loginRequest = NIMClient.getService(AuthService.class).login( + new LoginInfo(yx_accid, yx_token)); + loginRequest.setCallback(new RequestCallbackWrapper() { + + @Override + public void onResult(int code, Object result, Throwable exception) { + Log.i("test", "real login, code=" + code); + if (code == ResponseCode.RES_SUCCESS) { + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + finish(); + } + } + }); + }, 5 * 1000); + } + private void saveLoginInfo(final String account, final String token) { + Preferences.saveUserAccount(account); + Preferences.saveUserToken(token); + } + private void initNotificationConfig() { + // 初始化消息提醒 + NIMClient.toggleNotification(UserPreferences.getNotificationToggle()); + // 加载状态栏配置 + StatusBarNotificationConfig statusBarNotificationConfig = UserPreferences.getStatusConfig(); + if (statusBarNotificationConfig == null) { + statusBarNotificationConfig = DemoCache.getNotificationConfig(); + UserPreferences.setStatusConfig(statusBarNotificationConfig); + } + // 更新配置 + NIMClient.updateStatusBarNotificationConfig(statusBarNotificationConfig); + } + /** + * 设置输入框获得焦点hint提示消失 + */ + public static View.OnFocusChangeListener onFocusAutoClearHintListener = new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + protected void onDestroy() { + super.onDestroy(); + mUIConfig.release(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BindWeChatActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BindWeChatActivity.java new file mode 100644 index 0000000..6f6c2f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BindWeChatActivity.java @@ -0,0 +1,379 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.AlertDialog; +import android.graphics.Color; +import android.text.Html; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.umeng.socialize.UMAuthListener; +import com.umeng.socialize.UMShareAPI; +import com.umeng.socialize.bean.SHARE_MEDIA; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +//import cn.shangyu.gdxzExpert.utils.SharePrefUtil; + +public class BindWeChatActivity extends BaseActivity implements OnCallBackFromNet { + + private BindWeChatActivity ctx; + private String openid; + private String unionid =""; + private static final int ISBOUNDWECHATBYUUID = 200; + private static final int ADDWECHATEXPERT = 201; + private static final int DELWECHATEXPERT = 202; + private TextView bind_state; + private TextView we_name; + private CustomProgressDialog pd; + private AlertDialog dialog4;//提示解绑 + private TextView tip_tv; + @Override + public void setTitle() { + + ctx=this; +// layout_top.setBackgroundColor(BindWeChatActivity.this.getResources().getColor( +// R.color.top_bg)); + top_title.setText("微信关联"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view= UIUtils.inflate(R.layout.activity_bind_we_chat_big); + } + else + { + view= UIUtils.inflate(R.layout.activity_bind_we_chat); + } + bind_state=view.findViewById(R.id.bind_state); + we_name=view.findViewById(R.id.we_name); + tip_tv=view.findViewById(R.id.tip_tv); + bind_state.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if ("绑定".equals(bind_state.getText().toString())){ + BindWX(); + } + else { + + LayoutInflater inflater = LayoutInflater.from(BindWeChatActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + dialog4 = new AlertDialog.Builder( + BindWeChatActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText("您确定要解绑微信吗?"); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + + dialog4.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog4.dismiss(); + UnBindWX(); + + } + }); + + } + + } + }); +// if(SharePrefUtil.getString(ctx, "bind_state", "绑定").equals("绑定")) +// { +// bind_state.setText("绑定"); +// bind_state.setTextColor(Color.WHITE); +// bind_state.setBackground(getResources().getDrawable(R.drawable.btn_all_wecchat)); +// } +// else +// { +// bind_state.setText("解绑"); +// bind_state.setTextColor(getResources().getColor(R.color.c999999)); +// bind_state.setBackground(getResources().getDrawable(R.drawable.btn_all_nine)); +// } + if (!UIUtils.isNetWorkConnected(ctx)) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + } + String str7 = "操作说明:
1.肝胆相照注册账号与微信绑定,肝胆相照相关直播、视频无忧随心看" + + "
2.仅需操作一次,后续通过微信观看直播、视频无需额外操作,立即进入" + + "

若您有任何疑问或需要我们协助,请与您的小助手联系或直接微信联系" + + "igandan1000"; + tip_tv.setText(Html.fromHtml(str7)); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + isBoundWechatByUuid(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("微信关联"); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + //判断用户是否绑定过微信 + private void isBoundWechatByUuid() { + Map map = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.isBoundWechatByUuid,map,ISBOUNDWECHATBYUUID,this); + } + private UMAuthListener umAuthListener = new UMAuthListener() { + @Override + public void onStart(SHARE_MEDIA platform) { + //授权开始的回调 + } + @Override + public void onComplete(SHARE_MEDIA platform, int action, Map data) { +// Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show(); + + if(data.get("name")!=null) + { + data.put("nickname",data.get("name").replaceAll(" +","")); + data.put("screen_name",data.get("name").replaceAll(" +","")); + data.put("name",data.get("name").replaceAll(" +","")); + } + + openid = data.get("openid"); + + + unionid = data.get("unionid"); + if(!StringUtil.isEmpty(unionid)) + SharePrefUtil.saveString(BindWeChatActivity.this,"unionid_wechat",unionid); + Log.d("gdxzwe","参数"+data.toString()); + +// String gender = data.get("gender"); +// String iconurl = data.get("iconurl"); +// String city = data.get("city"); +// String prvinice = data.get("prvinice"); +// String country = data.get("country"); +// String privilege = data.get("privilege"); + +// Log.d("gdxzwe","name = "+name); +// LogUtil.i("openid = "+openid); +// LogUtil.i("gender = "+gender); +// LogUtil.i("iconurl = "+iconurl); +// LogUtil.i("city = "+city); +// LogUtil.i("prvinice = "+prvinice); +// LogUtil.i("country = "+country); +// LogUtil.i("data = "+data.toString()); +// {country=中国, +// unionid=oCwO1wOWbP4RqmG7m5KnSdhLnyzg, +// gender=男, +// city=, +// openid=odr10s9qElmuO4O0GVE_i7RXuJfU, +// language=zh_CN, +// profile_image_url=http://thirdwx.qlogo.cn/mmopen/vi_32/t7KAzibDicb1pRq7VvLct5XGT7SJmTMlawIO9teLSqad0VVljEC1l9HMcibyWKxy07DJlbHkj620hcD6W8d5NXykg/132, +// accessToken=36_YNuIDu65cbK53Eat1CDec0IX8kGRTZePWZZvcEC-7clvoy2SC1qXVAf99RGlX3QyGzqy9sDFGJkyLB1R4YcaRn5f6EFWK6QFAVRQ5LlXg9M, +// access_token=36_YNuIDu65cbK53Eat1CDec0IX8kGRTZePWZZvcEC-7clvoy2SC1qXVAf99RGlX3QyGzqy9sDFGJkyLB1R4YcaRn5f6EFWK6QFAVRQ5LlXg9M, +// uid=oCwO1wOWbP4RqmG7m5KnSdhLnyzg, +// province=, +// screen_name=12355, +// name=12355, +// iconurl=http://thirdwx.qlogo.cn/mmopen/vi_32/t7KAzibDicb1pRq7VvLct5XGT7SJmTMlawIO9teLSqad0VVljEC1l9HMcibyWKxy07DJlbHkj620hcD6W8d5NXykg/132, +// expiration=1597635314447, +// expires_in=1597635314447, +// refreshToken=36_182iVW8iB03NQUXg7ktFTi0Zj4Z6SurQv9MZyYuB1rr3fHcOE-lFqD2Ue6k9X3-JC4BcsmdxqNuFi5vX69_hATi3JKj78g8xi6-xS1udCTI} + + sendJsonPostParamtoNetSignMD5(Url.addWechatExpert,data,ADDWECHATEXPERT,BindWeChatActivity.this); + + } + + @Override + public void onError(SHARE_MEDIA platform, int action, Throwable t) { +// Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCancel(SHARE_MEDIA platform, int action) { +// Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show(); + } + }; + private void UnBindWX() { + UMShareAPI.get(this).deleteOauth(this, SHARE_MEDIA.WEIXIN, new UMAuthListener() { + @Override + public void onStart(SHARE_MEDIA share_media) { + + } + + @Override + public void onComplete(SHARE_MEDIA share_media, int i, Map map) { + unionid=SharePrefUtil.getString(BindWeChatActivity.this,"unionid_wechat", ""); + Map map1 = new HashMap<>(); + map1.put("unionid",unionid); + sendJsonPostParamtoNetSignMD5(Url.delWechatExpert,map1,DELWECHATEXPERT,BindWeChatActivity.this); + } + + @Override + public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) { + + } + + @Override + public void onCancel(SHARE_MEDIA share_media, int i) { + + } + }); + + } + //微信登陆信息 + private void BindWX(){ + + UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, umAuthListener); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("gdxzwe",resultJson); + pd.dismiss(); + switch (resultCode){ + case ISBOUNDWECHATBYUUID: + try { + + JSONObject jsonObject1 = new JSONObject(resultJson); + String code1 = jsonObject1.getString("code"); + if ("200".equals(code1)){ + int isBound = jsonObject1.getInt("isBound"); + if (isBound==0){ + + we_name.setText("未绑定微信"); + bind_state.setText("绑定"); + bind_state.setTextColor(Color.WHITE); + bind_state.setBackground(getResources().getDrawable(R.drawable.btn_all_wecchat)); +// SharePrefUtil.saveString(BindWeChatActivity.this, +// "bind_state", "绑定"); + SharePrefUtil.saveString(BindWeChatActivity.this,"isbound_wechat","no"); + }else { + String name=jsonObject1.getString("nickname"); + if(name!=null) + we_name.setText(name); + bind_state.setText("解绑"); + unionid=jsonObject1.getString("unionid"); + if(!StringUtil.isEmpty(unionid)) + SharePrefUtil.saveString(BindWeChatActivity.this,"unionid_wechat",unionid); + SharePrefUtil.saveString(BindWeChatActivity.this,"isbound_wechat","yes"); + bind_state.setTextColor(getResources().getColor(R.color.c999999)); + bind_state.setBackground(getResources().getDrawable(R.drawable.btn_all_nine)); +// SharePrefUtil.saveString(BindWeChatActivity.this, +// "bind_state", "解绑"); + openid = jsonObject1.getString("openid"); + } + }else { + ToastUtil.showMessage(jsonObject1.getString("message")); + } + + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + break; + case ADDWECHATEXPERT: + + JSONObject jsonObject2 = null; + try { + jsonObject2 = new JSONObject(resultJson); + String code1 = jsonObject2.getString("code"); + if ("200".equals(code1)){ + String name=jsonObject2.getString("nickname"); + if(name!=null) + we_name.setText(name); + bind_state.setText("解绑"); + bind_state.setTextColor(getResources().getColor(R.color.c999999)); + bind_state.setBackground(getResources().getDrawable(R.drawable.btn_all_nine)); + SharePrefUtil.saveString(BindWeChatActivity.this,"isbound_wechat","yes"); +// SharePrefUtil.saveString(BindWeChatActivity.this, +// "bind_state", "解绑"); + } + ToastUtil.showMessage(jsonObject2.getString("message")); + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case DELWECHATEXPERT: + + try { + JSONObject jsonObject3 = new JSONObject(resultJson); + String code1 = jsonObject3.getString("code"); + if ("200".equals(code1)){ + we_name.setText("未绑定微信"); + bind_state.setText("绑定"); + bind_state.setTextColor(Color.WHITE); + bind_state.setBackground(getResources().getDrawable(R.drawable.btn_all_wecchat)); + SharePrefUtil.saveString(BindWeChatActivity.this,"isbound_wechat","no"); +// SharePrefUtil.saveString(BindWeChatActivity.this, +// "bind_state", "绑定"); + } + ToastUtil.showMessage(jsonObject3.getString("message")); + + } catch (JSONException e) { + e.printStackTrace(); + } + break; + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BiochemistryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BiochemistryActivity.java new file mode 100644 index 0000000..dc7d7c1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BiochemistryActivity.java @@ -0,0 +1,1128 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.InputFilter; +import android.text.InputType; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.bean.liverFunctionIdBean; +import cn.shangyu.gdxzExpert.bean.liverFunctionIdBeans; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.DecimalInputFilter; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class BiochemistryActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + + @Override + public void setTitle() { + top_title.setText("肝功生化及肿瘤标志物"); + + } + + String liverFunctionId; + View view; + + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + TextView new_suifang; + + EditText alt,ast,glu,ghb,tg,cho,ldl,hldl,afp,tbil; + String baseinfoDataStatus; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_biochemistry); + alt=view.findViewById(R.id.alt); + alt.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + alt.setFilters(new InputFilter[]{new DecimalInputFilter()}); + ast=view.findViewById(R.id.ast); + ast.setFilters(new InputFilter[]{new DecimalInputFilter()}); + ast.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + tbil=view.findViewById(R.id.tbil); + tbil.setFilters(new InputFilter[]{new DecimalInputFilter()}); + tbil.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + + glu=view.findViewById(R.id.glu); +// glu.setFilters(new InputFilter[]{new DecimalInputFilter()}); + glu.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + ghb=view.findViewById(R.id.ghb); +// ghb.setFilters(new InputFilter[]{new DecimalInputFilter()}); + ghb.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + tg=view.findViewById(R.id.tg); +// tg.setFilters(new InputFilter[]{new DecimalInputFilter()}); + tg.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + cho=view.findViewById(R.id.cho); +// cho.setFilters(new InputFilter[]{new DecimalInputFilter()}); + cho.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + ldl=view.findViewById(R.id.ldl); +// ldl.setFilters(new InputFilter[]{new DecimalInputFilter()}); + ldl.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + hldl=view.findViewById(R.id.hldl); +// hldl.setFilters(new InputFilter[]{new DecimalInputFilter()}); + hldl.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + afp=view.findViewById(R.id.afp); +// afp.setFilters(new InputFilter[]{new DecimalInputFilter()}); + afp.setInputType(InputType.TYPE_CLASS_NUMBER |InputType.TYPE_NUMBER_FLAG_DECIMAL); + + liverFunctionId=getIntent().getStringExtra("liverFunctionId"); + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + view.findViewById(R.id.change_data).setOnClickListener(this); + initView(); + handletoken(Url.suifangLiverFunction); + baseinfoDataStatus=getIntent().getStringExtra("dataStatus"); + return view; + } + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(BiochemistryActivity.this, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + public List imgs= new ArrayList<>();; + liverFunctionIdBeans beans; + private void gettree() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.suifangLiverFunction+liverFunctionId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + beans= GsonTools.fromGsonToBean(response, liverFunctionIdBeans.class); + if(beans.getData()!=null) + { +// baseinfoDataStatus=beans.getData().getDataStatus(); + if(!StringUtil.isEmpty(beans.getData().getAlt())) + { + alt.setText(beans.getData().getAlt()); + } + if(!StringUtil.isEmpty(beans.getData().getAst())) + { + ast.setText(beans.getData().getAst()); + } + if(!StringUtil.isEmpty(beans.getData().getTbil())) + { + tbil.setText(beans.getData().getTbil()); + } + if(!StringUtil.isEmpty(beans.getData().getGlu())) + { + glu.setText(beans.getData().getGlu()); + } + if(!StringUtil.isEmpty(beans.getData().getGhb())) + { + ghb.setText(beans.getData().getGhb()); + } + if(!StringUtil.isEmpty(beans.getData().getTg())) + { + tg.setText(beans.getData().getTg()); + } + if(!StringUtil.isEmpty(beans.getData().getCho())) + { + cho.setText(beans.getData().getCho()); + } + if(!StringUtil.isEmpty(beans.getData().getLdl())) + { + ldl.setText(beans.getData().getLdl()); + } + if(!StringUtil.isEmpty(beans.getData().getHldl())) + { + hldl.setText(beans.getData().getHldl()); + } + if(!StringUtil.isEmpty(beans.getData().getAfp())) + { + afp.setText(beans.getData().getAfp()); + } + if(beans.getData().getImgPath()!=null&&beans.getData().getImgPath().size()>0) + { + imgs.addAll(beans.getData().getImgPath()); + } + if(beans.getData().getImgPath()!=null) + { + for(imBean urlBean:beans.getData().getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangLiverFunction); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(BiochemistryActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.suifangLiverFunction)) + { + gettree(); + } + else if(url.contains(Url.suifangLiverFunctionupdate)) + { + updatedata(); + } + + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.new_suifang) { + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认保存新的信息?"); + } + },300); + } else if (id == R.id.change_data) { + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认本数据项已全部完成?"); + } + },300); + } + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(BiochemistryActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(content.contains("保存")) + { + sendpre(); + hideSoftKeyboard(); + } + else{ + baseinfoDataStatus="2"; + sendpre(); + hideSoftKeyboard(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(BiochemistryActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(BiochemistryActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(BiochemistryActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(BiochemistryActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(BiochemistryActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(BiochemistryActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(BiochemistryActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(BiochemistryActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(BiochemistryActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(BiochemistryActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + if(!StringUtil.isEmpty(mBitmaps.get(position).getPath())) + { + Glide.with(BiochemistryActivity.this).asBitmap().load(mBitmaps.get(position).getPath()) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)) + .into(view); + } + else + { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + BiochemistryActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + private void sendpre() + { + if(StringUtil.isEmpty(alt.getText().toString())) + { + ToastUtil.showToast("丙氨酸氨基转移酶为必填项"); + return; + } + if(StringUtil.isEmpty(ast.getText().toString())) + { + ToastUtil.showToast("门冬氨酸氨基转移酶为必填项"); + return; + } + if(StringUtil.isEmpty(tbil.getText().toString())) + { + ToastUtil.showToast("总胆红素为必填项"); + return; + } + + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { + + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(BiochemistryActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { + liverFunctionIdBean pro=new liverFunctionIdBean(); +// if(!StringUtil.isEmpty(beans.getData().getAlt())) +// { + pro.setAlt(alt.getText().toString()); +// alt.setText(beans.getData().getAlt()); +// } +// if(!StringUtil.isEmpty(beans.getData().getAst())) +// { + pro.setAst(ast.getText().toString()); + pro.setTbil(tbil.getText().toString()); +// ast.setText(beans.getData().getAst()); +// } +// if(!StringUtil.isEmpty(beans.getData().getGlu())) +// { + pro.setGlu(glu.getText().toString()); +// glu.setText(beans.getData().getGlu()); +// } +// if(!StringUtil.isEmpty(beans.getData().getGhb())) +// { + pro.setGhb(ghb.getText().toString()); +// ghb.setText(beans.getData().getGhb()); +// } +// if(!StringUtil.isEmpty(beans.getData().getTg())) +// { + pro.setTg(tg.getText().toString()); +// tg.setText(beans.getData().getTg()); +// } +// if(!StringUtil.isEmpty(beans.getData().getCho())) +// { + pro.setCho(cho.getText().toString()); +// cho.setText(beans.getData().getCho()); +// } +// if(!StringUtil.isEmpty(beans.getData().getLdl())) +// { + pro.setLdl(ldl.getText().toString()); +// ldl.setText(beans.getData().getLdl()); +// } +// if(!StringUtil.isEmpty(beans.getData().getHldl())) +// { + pro.setHldl(hldl.getText().toString()); +// hldl.setText(beans.getData().getHldl()); +// } +// if(!StringUtil.isEmpty(beans.getData().getAfp())) +// { + pro.setAfp(afp.getText().toString()); +// afp.setText(beans.getData().getAfp()); +// } + if(baseinfoDataStatus!=null) + { + pro.setDataStatus(baseinfoDataStatus); + } + pro.setImgPath(imgs); +// pro.setDataStatus(beans.getData().getDataStatus()); +// pro.setSdvStatus(beans.getData().getSdvStatus()); + pro.setLiverFunctionId(liverFunctionId); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(Url.suifangLiverFunctionupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + + if(hasrealtoken(response)>0) + { + finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangLiverFunctionupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookDetailActivity.java new file mode 100644 index 0000000..05943fe --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookDetailActivity.java @@ -0,0 +1,1571 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.WFDetailBean; +import cn.shangyu.gdxzExpert.bean.WFYKArticleListBean.WFYKBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.WFBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.fragment.ChineaseWFFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * BookDetailActivity.java + * + * **************************注意:此页面已弃用,留备用************************************** + * **** ** + * + * 我的图书馆->期刊杂志->杂志详情页面 + * + * @date 2015-11-4 下午3:40:41 + * @author + * @date 2015-12-25 下午1:30:20 + * @author + * + * 功能说明:我的图书馆图书详情 + */ +public class BookDetailActivity extends BaseActivity implements + OnCallBackFromNet { + + private TextView mTv_titleTime, mTv_Title, mTv_Creator, mTv_KeyWords, + mTv_Abstract; + private Button mBt_download; + // private PopMenu popMenu; + BookDetailActivity mActivity; + // private String libraryUuid; + private int btType = 0;// 0下载 ,1没有全文 ,2 查看 + private String mPath; + Intent getIntent; + private String mExpertUuid; + WFBookDownloadSqlManager sq; + SQLiteDatabase db; + WFYKBean ykbean = null; + WFDetailBean wfbean = null; + String articleId = null; + private int hasDownload; + private int welfareNum; + Boolean isneeddown; + + // String dbid = null; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_title.setText("文献详情"); + // 显示收藏按钮 + top_right_rl_bookCollect.setVisibility(View.VISIBLE); + top_right_bookCollect.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_right_rl_bookCollect.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_book_detail, null); + mActivity = this; + mTv_titleTime = (TextView) view + .findViewById(R.id.tv_book_detail_title_time); + mTv_Title = (TextView) view.findViewById(R.id.tv_book_detail_context); + mTv_Creator = (TextView) view.findViewById(R.id.tv_book_detail_creator); + mTv_KeyWords = (TextView) view + .findViewById(R.id.tv_book_detail_keywords); + mTv_Abstract = (TextView) view + .findViewById(R.id.tv_book_detail_abstract); + mBt_download = (Button) view.findViewById(R.id.bt_download_article); + mBt_download.setOnClickListener(this); + isneeddown=getIntent().getBooleanExtra("isneeddown",true); + if(isneeddown==null||isneeddown) + { + mBt_download.setVisibility(View.VISIBLE); + } + else + { + mBt_download.setVisibility(View.GONE); + } + db = openOrCreateDatabase("wfdownload.db", MODE_PRIVATE, null); + sq = new WFBookDownloadSqlManager(db); + initIntent(); + getDetail(); + getIscollectqk(); + return view; + } + + public void initIntent() { + mExpertUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + getIntent = getIntent(); + articleId = getIntent.getStringExtra("articleId"); + // dbid = getIntent.getStringExtra("dbid"); +// Log.i("TAG","articleId = "+articleId); + if(StringUtil.isEmpty(getIntent.getStringExtra("path"))) + { + mPath = filePath + articleId + ".pdf"; + } + else + { + mPath = getIntent.getStringExtra("path"); + } + + if (articleId.contains("zengbu_")){ + mBt_download.setVisibility(View.GONE); + } + int type = getDownloadState(articleId); + if (type == 2) { + btType = 2; + mBt_download.setText("查看"); + } else { + btType = 0; + hasDownloadWanFang();//是否下载过 + } + + } + + // public static final int GET_BOOK_DETAIL_RESULT = 1001; + public static final int GET_DOWNLOAD_RESULT = 102; + public static final int GET_ISCOLLECTQK_RESULT = 103; + public static final int GET_QkCOLLECT_RESULT = 104; + public static final int GET_ADD_COUNT_RESULT = 105; + public static final int GET_EXPERT_COUNT_RESULT = 106; + public static final int HASDOWNLOADWANFANG = 202; + public static final int GETWELFARENUM = 203; + public static final int ADDWANFANGRECORD = 204; + public static final int USEWELFARENUM = 205; + + /** + * 获取该文章的数据 + */ + public void getDetail() { + showProgressDialog("正在加载"); + new Thread(networkTask).start(); + + } + + public static String getStrTime(long cc_time) { + String re_StrTime = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + re_StrTime = sdf.format(new Date(cc_time)); + return re_StrTime; + } + + /** + * 该文章是否收藏 + */ + public void getIscollectqk() { + Map param = new HashMap(); + param.put("ArticleID", articleId); + param.put("expertUuid", mExpertUuid); + sendParamtoNet(Url.getiscollectqk, param, GET_ISCOLLECTQK_RESULT, + mActivity, true); + } + + /** + * 万方期刊专家专家下载记录 + */ + public void getaddWanFangCount() { + Map param = new HashMap(); + param.put("articleid", articleId); +// param.put("title", ykbean.getTitle()); +// param.put("qkname", ykbean.getJournal());//医库 + param.put("title", wfbean.getTitle()); + param.put("qkname", wfbean.getSource());//万方 + param.put("expertUuid", mExpertUuid); + sendParamtoNet(Url.getaddWanFangCount, param, GET_ADD_COUNT_RESULT, + mActivity, true); + } + + /** + * 获取万方期刊专家下载统计 + */ + public void getWanFangCountByExpertUuid() { + Map param = new HashMap(); + param.put("expertUuid", mExpertUuid); + sendParamtoNet(Url.getWanFangCountByExpertUuid, param, + GET_EXPERT_COUNT_RESULT, mActivity, true); + } + + /** + * 0 取消收藏 1 收藏 + */ + int isCollect = 1; + /** + * 万方取消收藏或 收藏 + */ + private void getQkcollect1() { + // TODO Auto-generated method stub + showProgressDialog("收藏中"); + Map param = new HashMap(); + param.put("ArticleID", articleId); + param.put("expertUuid", mExpertUuid); + //作者最大限制100字符 + if (wfbean.getCreator()!=null&&wfbean.getCreator().length()>100){ + wfbean.setCreator(wfbean.getCreator().substring(0,100)); + } + if ("已收藏".equals(getIntent.getStringExtra("from"))) {//收藏进入 + param.put("Title",getIntent.getStringExtra("title")); + if (StringUtil.isEmpty(getIntent.getStringExtra("creator"))) { + param.put("creator",""); + }else { + param.put("creator",getIntent.getStringExtra("creator").replace(";", ",")); + } + if (StringUtil.isEmpty(getIntent.getStringExtra("keyWords"))) { + param.put("KeyWords", ""); + }else { + param.put("KeyWords", getIntent.getStringExtra("keyWords").replace(";", ",")); + } + param.put("Source", getIntent.getStringExtra("source")); + param.put("Year",getIntent.getStringExtra("Year")+""); + }else {//不是收藏 + param.put("Title", wfbean.getTitle()); + if (StringUtil.isEmpty(wfbean.getCreator())) { + param.put("creator",""); + }else { + + param.put("creator",wfbean.getCreator().replace(";", ",")); + } + if (StringUtil.isEmpty(wfbean.getKeyWords())) { + param.put("KeyWords", ""); + }else { + param.put("KeyWords", wfbean.getKeyWords().replace(";", ",")); + } + param.put("Source", wfbean.getSource()); + param.put("Year", wfbean.getYear()+""); + } + + param.put("type", "4"); + param.put("isCollect", isCollect + ""); + Log.i("TAG","isCollect = "+isCollect+""); + sendParamtoNet(Url.getQkcollect, param, GET_QkCOLLECT_RESULT, + mActivity, true); + } + /** + * 医库取消收藏或 收藏 + */ + public void getQkcollect() { + showProgressDialog("收藏中"); + StringBuffer author = new StringBuffer(); + if (ykbean.getAuthorList() != null && ykbean.getAuthorList().length > 0) { + for (int i = 0; i < ykbean.getAuthorList().length; i++) { + if (i == ykbean.getAuthorList().length - 1) { + author.append(ykbean.getAuthorList()[i]); + } else { + author.append(ykbean.getAuthorList()[i] + ","); + } + + } + } + StringBuffer Keyword = new StringBuffer(); + if (ykbean.getKeywordList() != null + && ykbean.getKeywordList().length > 0) { + for (int i = 0; i < ykbean.getKeywordList().length; i++) { + if (i == ykbean.getKeywordList().length - 1) { + Keyword.append(ykbean.getKeywordList()[i]); + } else { + Keyword.append(ykbean.getKeywordList()[i] + ","); + } + + } + } + Map param = new HashMap(); + param.put("ArticleID", articleId); + param.put("expertUuid", mExpertUuid); + param.put("Title", ykbean.getTitle()); + param.put("creator", author.toString()); + param.put("Source", ykbean.getJournal()); + param.put("KeyWords", Keyword.toString()); + param.put("Year", getStrTime(ykbean.getPubDate())); + param.put("type", "4"); + param.put("isCollect", isCollect + ""); + sendParamtoNet(Url.getQkcollect, param, GET_QkCOLLECT_RESULT,mActivity, true); + } + + public String getSign() { + Date d = new Date(); + // 给定模式 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // public final String format(Date date) + String s = sdf.format(d); + Log.i("TAG", "s = "+s); + String encrypt = null; + String s1 = null; + try { + encrypt = AESUtil.Encrypt(Constant.WFUserName + "|" + + Constant.WFPassWord + "|" + s, Constant.WFKey); + s1 = URLEncoder.encode(encrypt, "utf-8"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + try { + String decrypt = AESUtil.Decrypt(encrypt, Constant.WFKey); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return s1; + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * + * @param + * @return 数据库查询下载状态 0未下载,1下载中,2已下载 + */ + + private int getDownloadState(String uuid) { + // TODO Auto-generated method stub + int downloadState = WFBookDownloadSqlManager.getDownloadState(uuid); + return downloadState; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_rl_bookCollect) { +// getQkcollect();// 医库 + getQkcollect1();//万方 + } else if (id == R.id.bt_download_article) { + /*if (btType == 0) {//医库下载判断 + // getWanFangCountByExpertUuid(); + new Thread(networkTask2).start(); + } else if (btType == 2) { + openFile(mPath); + }*/ + if (wfbean!= null) { + if (btType == 0) {//万方下载判断 + // getWanFangCountByExpertUuid(); + if (wfbean.getHasOriginalDoc()==0) { + ToastUtil.showMessage("暂无全文,不支持下载"); + }else{ + isNetWorkDown(); +// +// network("2"); + } + } else if (btType == 2) { + openFile(mPath); +// LogUtil.e("mPath = "+mPath); + }else if (btType == 1) { + ToastUtil.showMessage("正在下载,请稍等..."); + } + } + } + } + //查看是否下载过本篇文章 + private void hasDownloadWanFang() { + Map param = new HashMap(); + LogUtil.i("articleId = "+articleId); + param.put("articleid", articleId); + sendJsonPostParamtoNetSignMD5(Url.hasDownloadWanFang, param, HASDOWNLOADWANFANG, + mActivity); + } + + //查询福利剩余次数 + //参数type (1视频2课件3精品4万方5U盘) + private void getWelfareNum() { + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("type","4"); + sendJsonPostParamtoNetSignMD5(Url.getWelfareNum,map, GETWELFARENUM, + mActivity); + } + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + addYK(); + + } + }; + + public void addYK() { + /* + * 参数封装 + */ + Map param = new HashMap(); + param.put("id", articleId); + param.put("requestType", "Normal"); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + data = params.getBytes(encoding); + URL url = new URL(Url.YKCheck_status); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Cookie", "token=" + Constant.YKToken); + conn.setRequestProperty("Doc-Client", "medicool-android"); + conn.setRequestProperty("Content-Type", + "application/json; charset=" + encoding); + conn.setRequestProperty("Content-Length", + String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + + Message message = new Message(); + message.what = SUCCESS; + message.obj = new String(result); + handler.sendMessage(message); + } else { + handler.sendEmptyMessage(ERROR); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO +// DetailYK(); + DetailWF(); + } + + + }; + /** + * 万方 + * */ + private void DetailWF() { + // TODO Auto-generated method stub +// String encoding = "UTF-8"; +// Gson gson = new Gson(); + String urls =Url.WFDetail+"?articleId="+articleId+"&token="+Constant.WFToken+"&type="+Constant.WFtype; + LogUtil.i("urls = "+urls); + try { + URL url = new URL(urls); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); +// conn.setRequestProperty("Cookie", "token=" + Constant.YKToken); +// conn.setRequestProperty("Doc-Client", "medicool-android"); +// conn.setRequestProperty("Content-Type", +// "application/x-javascript; charset=" + encoding); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = DETAILWF; + message.obj = new String(result); + handler.sendMessage(message); + } else { + handler.sendEmptyMessage(ERROR); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + + } + /** + * 医库 + * */ + public void DetailYK() { + /* + * 参数封装 + */ + String encoding = "UTF-8"; + Gson gson = new Gson(); + String urls = Url.YKDetail + articleId; + try { + URL url = new URL(urls); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Cookie", "token=" + Constant.YKToken); + conn.setRequestProperty("Doc-Client", "medicool-android"); + conn.setRequestProperty("Content-Type", + "application/x-javascript; charset=" + encoding); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = DETAIL; + message.obj = new String(result); + handler.sendMessage(message); + } else { + handler.sendEmptyMessage(ERROR); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + + } + Runnable networkTask3new = new Runnable() { + + @Override + public void run() { + // TODO + + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + String sign = getSign(); + String urls = Url.WFDownload +"?articleId="+articleId+"&sign="+sign+"&token="+Constant.WFToken+"&type="+Constant.WFtype; + // sdcard存在 + HttpUtils http = new HttpUtils(); + final String path = filePath + articleId + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(urls, path, null, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + + // 插入下载数据库 + downloadModel = new DownloadModel(articleId); + + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setState(5); + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + mBt_download.setText("下载中..."); + btType = 1; + if (ChineaseWFFragment.getInstance() != null) { + ChineaseWFFragment.getInstance() + .notifyAdapter(); + } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(articleId); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + WFBookDownloadSqlManager + .updateDownloadFilePath(downloadModel); + + // 异步显示 + + mBt_download.setText("查看"); + ToastUtil.showToast("下载完成!"); +// // 查看 + btType = 2; + mPath=path; + openFile(path); + if (ChineaseWFFragment.getInstance() != null) { + ChineaseWFFragment.getInstance() + .notifyAdapter(); + } + } + + /** 下载失败 **/ + + @Override + public void onFailure(HttpException error, String msg) { + Log.i("TAG", error.getMessage()+",msg = "+msg+",code = "+error.getExceptionCode()); + ToastUtil.showToast("下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(articleId); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + mBt_download.setText("下载"); + btType = 0; + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + + } + + + }; + Runnable networkTask3 = new Runnable() { + + @Override + public void run() { + // TODO +// CanDownYK(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(BookDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + CanDownWF(); + } else { + EasyWindow.with(BookDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(BookDetailActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + CanDownWF(); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + CanDownWF(); + } + + + } + + + }; + /** + * 万方下载 + * */ + private void CanDownWF() { + // TODO Auto-generated method stub + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + String sign = getSign(); + String urls = Url.WFDownload +"?articleId="+articleId+"&sign="+sign+"&token="+Constant.WFToken+"&type="+Constant.WFtype; + Log.i("TAG", "urls = "+urls); + // sdcard存在 + HttpUtils http = new HttpUtils(); +// RequestParams params = new RequestParams(); +// params.addHeader("Cookie", "token=" + Constant.YKToken); +// params.addHeader("Doc-Client", "medicool-android"); + // params.addHeader("Content-Type", "application/json"); + // + "bean.title===" + bean.getTitle()); + // http.download(url, target, params, autoResume, callback) + final String path = filePath + articleId + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + Log.i("TAG", "urls1 = "+urls); + hand = http.download(urls, path, null, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载"); + Log.i("TAG", "1 = "+1); + // 插入下载数据库 + downloadModel = new DownloadModel(articleId); + downloadModel.setTitle(wfbean.getTitle());// 设置标题 + // + downloadModel.setTime(wfbean.getYear() + "");// 设置时间 + downloadModel.setPath(wfbean.getSource()); + + downloadModel.setCurrentProgress(wfbean.getCreator() + "0.0" + + wfbean.getKeyWords()); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.insertDownload(downloadModel); + + // 改变页面状态为下载中 + + // 异步显示 + + mBt_download.setText("下载中..."); + btType = 1; + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(articleId); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager + .updateDownloadState(downloadModel); + + // 异步显示 + + mBt_download.setText("查看"); + ToastUtil.showToast("下载完成!"); + // 查看 + btType = 2; + // openFile(path); + } + + /** 下载失败 **/ + + @Override + public void onFailure(HttpException error, String msg) { + Log.i("TAG", error.getMessage()+",msg = "+msg+",code = "+error.getExceptionCode()); + ToastUtil.showToast("下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(articleId); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + mBt_download.setText("下载"); + btType = 0; + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + /** + * 医库下载 + * */ + public void CanDownYK() { + /* + * 参数封装 + */ + String encoding = "UTF-8"; + Gson gson = new Gson(); + String urls = Url.YKDownload + "?id=" + articleId; + try { + URL url = new URL(urls); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Cookie", "token=" + Constant.YKToken); + conn.setRequestProperty("Doc-Client", "medicool-android"); + conn.setRequestProperty("Content-Type","application/x-javascript; charset=" + encoding); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Log.i("TAG","医库下载 = "+result); + if (result.contains("Waiting")) { + ToastUtil.showMessage("暂无全文"); + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(BookDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + downloadBook(urls); + } else { + PermissionsUtil.requestPermission(BookDetailActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + downloadBook(urls); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + downloadBook(urls); + } + + } + } else { + handler.sendEmptyMessage(ERROR); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + + } + + public static final int ERROR = 101; + public static final int SUCCESS = 102; + public static final int DETAIL = 103; + public static final int DETAILWF = 104; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + switch (msg.what) { + case ERROR: + ToastUtil.showMessage("网络异常"); + break; + case DETAIL: + String str = (String) msg.obj; + Log.i("TAG", "医库详情 = "+str); + if (StringUtil.isEmpty(str)) { + ToastUtil.showMessage("数据异常"); + return; + } + boolean status2 = false; + String data2 = null; + String message2 = null; + JSONObject jsonObject2 = null; + + try { + jsonObject2 = new JSONObject(str); + status2 = jsonObject2.getBoolean("status"); + message2 = jsonObject2.getString("message"); + data2 = jsonObject2.getString("data"); + if (!status2) { + ToastUtil.showMessage("数据异常"); + return; + } + ykbean = GsonTools.fromGsonToBean(data2, WFYKBean.class); + + if (StringUtil.isEmpty(ykbean.getIssue())) { + mTv_titleTime.setText(ykbean.getJournal() + "." + + getStrTime(ykbean.getPubDate()) + ";" + + ykbean.getVolue() + ykbean.getPagination()); + } else { + mTv_titleTime.setText(ykbean.getJournal() + "." + + getStrTime(ykbean.getPubDate()) + ";" + + ykbean.getVolue() + "(" + ykbean.getIssue() + + "):" + ykbean.getPagination()); + } + + mTv_Title.setText(ykbean.getTitle()); + StringBuffer author = new StringBuffer(); + if (ykbean.getAuthorList() != null + && ykbean.getAuthorList().length > 0) { + for (int i = 0; i < ykbean.getAuthorList().length; i++) { + if (i == ykbean.getAuthorList().length - 1) { + author.append(ykbean.getAuthorList()[i]); + } else { + author.append(ykbean.getAuthorList()[i] + ","); + } + } + } + StringBuffer Keyword = new StringBuffer(); + if (ykbean.getKeywordList() != null + && ykbean.getKeywordList().length > 0) { + for (int i = 0; i < ykbean.getKeywordList().length; i++) { + if (i == ykbean.getKeywordList().length - 1) { + Keyword.append(ykbean.getKeywordList()[i]); + } else { + Keyword.append(ykbean.getKeywordList()[i] + ","); + } + } + } + + mTv_Creator.setText("作者:" + author.toString()); + mTv_KeyWords.setText("关键词:" + Keyword.toString()); + mTv_Abstract.setText("\u3000\u3000" + ykbean.getText()); + // + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case DETAILWF: + String str1 = (String) msg.obj; + Log.i("TAG", "万方详情 = "+str1); + if (StringUtil.isEmpty(str1)) { + ToastUtil.showMessage("数据异常"); + return; + } + wfbean = GsonTools.fromGsonToBean(str1, WFDetailBean.class); + String Volum =""; + if (!StringUtil.isEmpty(wfbean.getVolum())) { + Volum = wfbean.getVolum(); + } + if (StringUtil.isEmpty(wfbean.getIssue())) { + mTv_titleTime.setText(wfbean.getSource() + "."+ wfbean.getYear() + ";" + + Volum + wfbean.getPage()); + } else { + mTv_titleTime.setText(wfbean.getSource() + "."+ wfbean.getYear() + ";" + + Volum +"(" + wfbean.getIssue() + + "):"+ wfbean.getPage()); + } + + mTv_Title.setText(wfbean.getTitle()); + if (StringUtil.isEmpty(wfbean.getCreator())) { + mTv_Creator.setText("作者:"); + }else { + mTv_Creator.setText("作者:"+wfbean.getCreator()); + } + if (StringUtil.isEmpty(wfbean.getKeyWords())) { + mTv_KeyWords.setText("关键词:"); + }else { + mTv_KeyWords.setText("关键词:" + wfbean.getKeyWords()); + } + String abstract1 = ""; + if (!StringUtil.isEmpty(wfbean.getAbstract())) { + abstract1 = wfbean.getAbstract(); + } + mTv_Abstract.setText("\u3000\u3000" + abstract1); + break; + case SUCCESS: + String str2 = (String) msg.obj; + if (StringUtil.isEmpty(str2)) { + ToastUtil.showMessage("数据异常"); + return; + } + boolean status = false; + String data = null; + String message = null; + JSONObject jsonObject = null; + + try { + jsonObject = new JSONObject(str2); + status = jsonObject.getBoolean("status"); + message = jsonObject.getString("message"); + data = jsonObject.getString("data"); + if (!status) { + ToastUtil.showMessage("数据异常"); + return; + } + jsonObject = new JSONObject(data); + String nextStep = jsonObject.getString("nextStep"); + if (nextStep != null && "Download".equals(nextStep)) { + network("2"); + } else { + ToastUtil.showMessage("暂无全文"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + default: + break; + } + super.handleMessage(msg); + }; + }; + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + // BookDetailBean bean; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + closeProgressDialog(); + switch (resultCode) { + case USEWELFARENUM: + LogUtil.i("USEWELFARENUM = "+ resultJson); + Gson gsonuse = new Gson(); + BaseBean bean1 = gsonuse.fromJson( resultJson, BaseBean.class); + if (bean1!=null&&"1".equals(bean1.code)) { + + new Thread(networkTask3).start(); + }else{ + ToastUtil.showMessage(bean1.message); + } + + break; + case ADDWANFANGRECORD: + LogUtil.i("ADDWANFANGRECORD = "+resultJson); + Gson gsonadd = new Gson(); + BaseBean bean = gsonadd.fromJson( resultJson, BaseBean.class); + if (bean!=null) { + if ("200".equals(bean.code)){ + new Thread(networkTask3).start(); + }else if ("201".equals(bean.code)){ + jifenbuzu(); + }else if ("202".equals(bean.code)){ + ToastUtil.showMessage("网络错误"); + }else if ("0".equals(bean.code)){ + ToastUtil.showMessage("系统错误"); + } + }else { + ToastUtil.showMessage("请求失败"); + } + break; + case GETWELFARENUM: + LogUtil.i("GETWELFARENUM = "+resultJson); + + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(resultJson); + if ("1".equals(jsonObject.optString("code"))){ + welfareNum = jsonObject.optInt("WelfareNum"); + if (welfareNum>0){ + mBt_download.setText("下载(剩余免费下载"+welfareNum+"次)"); + }else + mBt_download.setText("下载(100积分)"); + + }else { + ToastUtil.showMessage("查询免费福利次数失败"); + } + + + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + // 是否下载过本篇文章 + case HASDOWNLOADWANFANG: + LogUtil.i("HASDOWNLOADWANFANG = "+resultJson); + try { + JSONObject jb= new JSONObject(resultJson); + String code = jb.optString("code"); + if ("200".equals(code)){ + hasDownload = jb.optInt("hasDownload");// 0未下载过 >0下载过 + if (hasDownload==0){ + getWelfareNum();//查询免费次数 + } + }else { + ToastUtil.showMessage("查询是否下载过失败"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + // 是否收藏 + case GET_ISCOLLECTQK_RESULT: + BaseBean beanget = GsonTools + .fromGsonToBean(resultJson, BaseBean.class); + if (beanget.code.equals("0")) { + isCollect = 1; + top_right_bookCollect + .setImageResource(R.drawable.icon_book_collect_nor); + } else { + top_right_bookCollect + .setImageResource(R.drawable.icon_book_collect_sel); + isCollect = 0; + } + break; + // 收藏或取消收藏 + case GET_QkCOLLECT_RESULT: + LogUtil.i("GET_QkCOLLECT_RESULT = "+ resultJson); + closeProgressDialog(); + BaseBean beans = GsonTools.fromGsonToBean(resultJson, + BaseBean.class); + if (beans == null) { + ToastUtil.showMessage("服务器异常"); + return; + } + if (beans.code.equals("1")) { + if (isCollect == 1) { + top_right_bookCollect + .setImageResource(R.drawable.icon_book_collect_sel); + isCollect = 0; + ToastUtil.showMessage("收藏成功"); + } else { + top_right_bookCollect + .setImageResource(R.drawable.icon_book_collect_nor); + isCollect = 1; + ToastUtil.showMessage("取消收藏成功"); + } + } else { + ToastUtil.showMessage(beans.message); + } + break; + // 获取下载次数 + case GET_EXPERT_COUNT_RESULT: + JSONObject jsonObject12; + String code; + String times; + String message; + try { + jsonObject12 = new JSONObject(resultJson); + code = jsonObject12.getString("code"); + message = jsonObject12.getString("message"); + if (code.equals("1")) { + times = jsonObject12.getString("times"); + // 添加dialog + // if (CommonUtil.isNetworkAvailable(mActivity) == 1) { + // 下载 + // downloadBook(geturl()); + // } else { + network(times); + // } + } else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + // 添加下载次数 + case GET_ADD_COUNT_RESULT: + + break; + default: + break; + } + } + + private void jifenbuzu() { + buildAlert = ECAlertDialog.buildAlert(mActivity, "您的积分不足,是否购买积分?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + // String urls = Url.YKDownload + "?id=" + articleId; + // downloadBook(urls); + buildAlert.dismiss(); + startActivity(new Intent(BookDetailActivity.this,BuyIntegerActivty.class)); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + private void addWanFangRecord() { + Map param = new HashMap(); + param.put("articleid", articleId); + param.put("title", wfbean.getTitle().replace(" ","")); + param.put("qkname", wfbean.getSource());//万方 + sendJsonPostParamtoNetSignMD5(Url.addWanFangRecord, param, ADDWANFANGRECORD,mActivity); + } + + private ECAlertDialog buildAlert; + + @SuppressLint("ResourceAsColor") + private void network(String times) { + // TODO Auto-generated method stub + String message = null; + final int count = Integer.parseInt(times); + if (count >0 ) { + if (CommonUtil.isNetworkAvailable(mActivity) == 1) { + // 下载 + // downloadBook(geturl()); + message = "您确定下载该篇文章?"; + } else { + message = "当前正在使用手机网络,是否继续下载?"; + } + } + buildAlert = ECAlertDialog.buildAlert(mActivity, message, "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + // String urls = Url.YKDownload + "?id=" + articleId; + // downloadBook(urls); + if(mPath!=null&&mPath.contains(Constant.OldfilePath)) + { + new Thread(networkTask3new).start(); + } + else + { + new Thread(networkTask3).start(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + private void isJifenDown() { + buildAlert = ECAlertDialog.buildAlert(mActivity, "下载该篇文章需要100积分,若删除可免费再次下载。", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + addWanFangRecord(); + buildAlert.dismiss(); + } + + + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + //先判断是否网络下载 + private void isNetWorkDown(){ + String message = null; + if (CommonUtil.isNetworkAvailable(mActivity) == 1){ + message = "当前为Wifi网络,您确定下载该篇文章?"; + }else if (CommonUtil.isNetworkAvailable(mActivity) == 0){ + ToastUtil.showMessage("无网络,请检查网络连接!"); + }else { + message = "当前为移动网络,您确定下载该篇文章?"; + + } + buildAlert = ECAlertDialog.buildAlert(mActivity, message, "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + if(mPath!=null&&mPath.contains(Constant.OldfilePath)) + { + new Thread(networkTask3new).start(); + } + else if (hasDownload>0){ + new Thread(networkTask3).start(); + buildAlert.dismiss(); + }else { + if (welfareNum>0){ + useWelfareNum(); + buildAlert.dismiss(); + }else { + isJifenDown(); + } + } + + + } + + + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + //使用福利操作 + private void useWelfareNum() { + Map map = new HashMap<>(); + map.put("type","4"); + map.put("other_uuid",articleId); + map.put("title", wfbean.getTitle().replace(" ","")); + map.put("qkname", wfbean.getSource());//万方 + sendJsonPostParamtoNetSignMD5(Url.useWelfareNum, map, USEWELFARENUM,BookDetailActivity.this); + } + private HttpHandler hand; +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/期刊杂志/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/期刊杂志/"; + + public void downloadBook(String url) { + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + RequestParams params = new RequestParams(); + params.addHeader("Cookie", "token=" + Constant.YKToken); + params.addHeader("Doc-Client", "medicool-android"); + // params.addHeader("Content-Type", "application/json"); + // + "bean.title===" + bean.getTitle()); + // http.download(url, target, params, autoResume, callback) + final String path = filePath + articleId + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, params, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载"); + + // 插入下载数据库 + downloadModel = new DownloadModel(articleId); + downloadModel.setTitle(ykbean.getTitle());// 设置标题 + // + downloadModel.setTime(ykbean.getPubDate() + "");// 设置时间 + downloadModel.setPath(ykbean.getJournal()); + + StringBuffer author = new StringBuffer(); + if (ykbean.getAuthorList() != null + && ykbean.getAuthorList().length > 0) { + for (int i = 0; i < ykbean.getAuthorList().length; i++) { + if (i == ykbean.getAuthorList().length - 1) { + author.append(ykbean.getAuthorList()[i]); + } else { + author.append(ykbean.getAuthorList()[i] + + ","); + } + + } + } + StringBuffer Keyword = new StringBuffer(); + if (ykbean.getKeywordList() != null + && ykbean.getKeywordList().length > 0) { + for (int i = 0; i < ykbean.getKeywordList().length; i++) { + if (i == ykbean.getKeywordList().length - 1) { + Keyword.append(ykbean.getKeywordList()[i]); + } else { + Keyword.append(ykbean.getKeywordList()[i] + + ","); + } + + } + } + // downloadModel.setFileSize(bean.getCreator()); + downloadModel.setCurrentProgress(author + "0.0" + + Keyword); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.insertDownload(downloadModel); + + // 改变页面状态为下载中 + + // 异步显示 + + mBt_download.setText("下载中..."); + + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(articleId); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + + // 异步显示 + + mBt_download.setText("查看"); + ToastUtil.showToast("下载完成!"); + // 查看 + btType = 2; + // openFile(path); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + ToastUtil.showToast("下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(articleId); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + mBt_download.setText("下载"); + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + public void showDialog() + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(BookDetailActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new Thread(networkTask3new).start(); + dialog4.dismiss(); + + } + }); + } + + public void openFile(final String path) { + if(path.contains(Constant.OldfilePath)) + { + showDialog(); +// ToastUtil.showToast("请稍后"); +// new Thread(networkTask3new).start(); + return; + } + + File file = new File(path); +// String fileMD5 = TikaUtil.getFileMD5(file); +// LogUtil.e("path = "+path); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(BookDetailActivity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + }else{ + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + mActivity.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } + + +// Intent intent1 = new Intent(BookDetailActivity.this,PdfViewActivity.class); +// intent1.putExtra("path",path); +// intent1.putExtra("title","文献详情"); +// startActivity(intent1); + }else{ + WFBookDownloadSqlManager.delDownladInfo(articleId); + mBt_download.setText("下载"); + ToastUtil.showToast("已经删除,请重新下载!"); + btType = 0; + } + } + + @Override + public void finish() { + // TODO Auto-generated method stub + if (isCollect == 1) { + Intent intent = new Intent(); + intent.putExtra("articleId", articleId); + setResult(201, intent); + } + super.finish(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookMagazineDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookMagazineDetailActivity.java new file mode 100644 index 0000000..d661687 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookMagazineDetailActivity.java @@ -0,0 +1,278 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.text.TextUtils; +import android.view.View; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 类名称:BookMagazineDetailActivity + * 图书馆-期刊杂志 加载期刊杂志详情的webview + * 创建人:苏三元 + * 时间:2015-12-30 下午5:02:17 + * + */ +public class BookMagazineDetailActivity extends BaseActivity { + + private String url; + private String title; + private X5WebView mWebView; + private WebSettings settings; + private String libraryUuid; + private String isCollect; + public final static int REQUESTCODE = 111; + + @Override + public void setTitle() { + // 显示返回 + top_back_layout.setVisibility(View.VISIBLE); + // 显示收藏按钮 + top_right_rl_bookCollect.setVisibility(View.VISIBLE); + top_right_bookCollect.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + // 获取传的值 + url = getIntent().getStringExtra("url"); + title = getIntent().getStringExtra("title"); + libraryUuid = getIntent().getStringExtra("libraryUuid"); + isCollect = getIntent().getStringExtra("isCollect"); + // 判断该文章是否已经收藏,收藏则显示选中状态,否则反之 +// if ("1".equals(isCollect)) { +// top_right_bookCollect.setChecked(true); +// } else { +// top_right_bookCollect.setChecked(false); +// } + // 监听收藏选中状态 +// top_right_bookCollect +// .setOnCheckedChangeListener(new OnCheckedChangeListener() { +// +// @Override +// public void onCheckedChanged(CompoundButton buttonView, +// boolean isChecked) { +// // TODO Auto-generated method stub +// LogUtil.i("是否选中" + isChecked); +// if (isChecked) { +// top_right_bookCollect.setChecked(true);// 改变状态 +// Collect(1);// 收藏 +// } else { +// top_right_bookCollect.setChecked(false); +// Collect(0);// 取消 +// } +// } +// }); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_news_detail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + // 加载中布局,与加载失败的布局 + loadingView = view.findViewById(R.id.loading_view); + loadfailView = (LinearLayout) view.findViewById(R.id.ll_load_fail); + showLoadingView(); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 initData + * + * void + */ + private void initData() { + // 判断标题是否大于7,如果大于则后面为... + if (!TextUtils.isEmpty(title)) { + if (title.length() > 7) { + String concat = title.substring(0, 7).concat("..."); + top_title.setText(concat); + } else { + top_title.setText(title); + } + } else { + top_title.setText("期刊杂志"); + } + dealNewsDetail(); + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + @Override + protected void onDestroy() { + //释放资源 + if (mWebView != null) + mWebView.destroy(); + + super.onDestroy(); + } + /** + * 展示WebView页面 dealNewsDetail + * + * void + */ + private void dealNewsDetail() { + LogUtil.i("详情url:" + url); + // mWebView.setInitialScale(25); + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// // 设置此属性,可任意比例缩放 +// settings.setUseWideViewPort(true); +// // 启用javascript脚本 +// settings.setJavaScriptEnabled(true); +// // 支持通过JS打开新窗口 +// settings.setJavaScriptCanOpenWindowsAutomatically(true); +// // 设置加载模式 +// settings.setLoadWithOverviewMode(true); +// // 设置填充模式 +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// // 支持放大缩小控制器 +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + // 开始加载时显示加载中的进度框 + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + LogUtil.i("onPageFinished", "onPageFinished" + url); + // 加载完成,隐藏加载进度框 + dismissLoadingView(); + // 获取真实的链接地址 + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + // 判断链接是否空,如果为空则显示自定义404页面 + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + loadurl(view, "file:///android_asset/error/error.html"); + } + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // 加载失败的处理 + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + // 失败的页面 + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + loadurl(mWebView, url); + } + + @Override + protected void processClick(View v) { + + } + + /** + * @author 点击收藏 Collect,提交数据 + */ + private void Collect(int type) { + // TODO Auto-generated method stub + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("libraryUuid", libraryUuid); + params.addBodyParameter("isCollect", String.valueOf(type));// 0取消收藏 1收藏 + // if (bookType == 0) { + // params.addBodyParameter("type", "1"); + // }else{ + // params.addBodyParameter("type", "3"); + // } + params.addBodyParameter("type", "3"); + LogUtil.i("expertUuid=" + uuid + "libraryUuid=" + libraryUuid + + "isCollect=" + type); + HttpHelper.loadData(HttpMethod.POST, Url.getCollect, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getPreCashList.onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + ToastUtil.showToast(message); + } else { + ToastUtil.showToast(message); + } + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("提交失败"); +// top_right_bookCollect.toggle(); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + ToastUtil.showToast("提交失败"); +// top_right_bookCollect.toggle(); + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookTop10Activity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookTop10Activity.java new file mode 100644 index 0000000..a0a6999 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookTop10Activity.java @@ -0,0 +1,384 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.net.Uri; +import android.os.Environment; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.BookshelfListAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/2/28. + */ + +public class BookTop10Activity extends BaseActivity implements AdapterView.OnItemClickListener,OnCallBackFromNet{ + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private int bookType = 0; + private String guide_type_uuid; + private List libraryList = new ArrayList(); + private BookshelfListAdapter mAdapter; + private String libraryUuid; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + guide_type_uuid = getIntent().getStringExtra("guide_type_uuid"); + LogUtil.i("guide_type_uuid = "+guide_type_uuid); + bookType = getIntent().getIntExtra("bookType", 0); + top_title.setText("年度Top10"); + if(CommonUtil.BigModule()) { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) { + view = View.inflate(ct, R.layout.activity_booktop10_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_booktop10, null); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + // 设置只有下拉刷新模式 + ptrLv.setMode(PullToRefreshBase.Mode.DISABLED); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + getData(); + return view; + } + + private void getData() { + Map map =new HashMap<>(); + map.put("guide_type_uuid",guide_type_uuid); + map.put("type","1"); + sendJsonPostParamtoNetSignMD5(Url.top10ByType,map,1,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + // 如果点击的是指南的列表则进行判断当前下载状态,如果是已下载,则启动打开该指南 + LibraryListBean.LibraryData list = libraryList.get(p); + libraryUuid = list.uuid; + if (bookType == 0) { + // 从的数据库取出该指南的下载状态 + int downloadState = BookDownloadSqlManager.getDownloadState(libraryUuid); + if (downloadState == 2||downloadState == 4) { + // 如果已下载,取出该指南的本地路径 + String downloadFilePath = BookDownloadSqlManager + .getDownloadFilePath(libraryUuid); + if(downloadFilePath.contains(Constant.OldfilePath)) + { + showDialog(Url.urlHtml + libraryList.get(p).getPath(), libraryList.get(p).getTitle(), + p); +// BookDownloadSqlManager.delDownladInfo(libraryUuid); +// mAdapter.notifyDataSetChanged(); +// ToastUtil.showToast("文件不存在,请重新下载"); + return; + } + if (!TextUtils.isEmpty(downloadFilePath)) { + // 路径不为空,打开该指南 + openFile(downloadFilePath); + } else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(libraryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } + return; + } + } + + /** + * 打开pdf格式文件 openFile + * + * @param path + * void + */ + public void openFile(final String path) { + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + LogUtil.e("fileMD5 = "+fileMD5); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(BookTop10Activity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + }else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + + + } + + } else { + + BookDownloadSqlManager.delDownladInfo(libraryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件已删除,请重新下载!"); + } + } + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("resultJson = "+resultJson); + switch (resultCode){ + case 1: + LibraryListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(resultJson, LibraryListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + if (bean == null || bean.data == null || bean.data.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + return; + } else { + libraryList.addAll(bean.data); + } + if (mAdapter == null) { + mAdapter = new BookshelfListAdapter(ct, libraryList, bookType,false); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + break; + case 010: + ToastUtil.showMessage("请求失败"); + break; + } + } + public void showDialog(String url, final String name, + final int position) + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + downloadPdfennew(url,name,position); + dialog4.dismiss(); + + } + }); + } + private HttpHandler hand; + private String filePath = getContext().getExternalFilesDir("").getAbsolutePath()+ "/gdxzExpert/download/治疗指南/"; + protected void downloadPdfennew(String url, final String name, + final int position) { + // TODO Auto-generated method stub + + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setState(5); + BookDownloadSqlManager + .updateDownloadState(downloadModel); + mAdapter.notifyDataSetChanged(); +// // 改变页面状态为下载中 +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.GONE); +// holder.tv_down.setText("下载中"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + BookDownloadSqlManager + .updateDownloadFilePath(downloadModel); +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.GONE); +// holder.tv_down.setText("查看"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + /** + * 添加下载次数 + * */ +// addGuideDownload(mList.get(position).uuid); + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + LogUtil.e("下载失败","error = "+error.getMessage()+"code ="+error.getExceptionCode()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.VISIBLE); +// holder.tv_down.setVisibility(View.GONE); +// } + mAdapter.notifyDataSetChanged(); + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity.java new file mode 100644 index 0000000..18d36a4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity.java @@ -0,0 +1,798 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.BookshelfListAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ENBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.PopMenu; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * BookshelfListActivity.java + * + * @author liufang 刘方 + * @date 2015-11-4 下午2:05:13 + * + * 图书馆-治疗指南与期刊杂志共用的列表页面 功能说明:(治疗指南,期刊杂志)书目列表 + */ +public class BookshelfListActivity extends BaseActivity implements + OnItemClickListener { + private PullToRefreshListView ptrLv; + private BookshelfListAdapter mAdapter; + private List libraryList = new ArrayList(); + private String libraryUuid; + private String url; + private String uuid; + private String title; + private PopMenu popMenu; + private int bookType = 0; + private ImageButton search; + private EditText search_text; + private int page = 1; + public RelativeLayout rela; + private int type = 2; + private LinearLayout ll_empty; + private static BookshelfListActivity instance; + ENBookDownloadSqlManager sq; + SQLiteDatabase db; + private boolean isSearch = false; + String expertUuid; + private String searchStr; + private String keywords; + Boolean ENGLISH =false; + + public static BookshelfListActivity getInstance() { + return instance; + } + + @Override + public void setTitle() { + instance = this; + top_back_layout.setVisibility(View.VISIBLE); + // top_right.setVisibility(View.VISIBLE); + // top_right.setImageResource(R.drawable.icon_library_right); + // 获取传值数据 + url = getIntent().getStringExtra("loadUrl"); + uuid = getIntent().getStringExtra("typeUuid"); + title = getIntent().getStringExtra("title"); + bookType = getIntent().getIntExtra("type", 0); + ENGLISH=getIntent().getBooleanExtra("ENGLISH",false); + searchStr = getIntent().getStringExtra("search"); + LogUtil.i("getSearchLibrary searchStr = "+searchStr); + if (!StringUtil.isEmpty(searchStr)) { + if (searchStr.contains(",")) { + keywords = getIntent().getStringExtra("search"); + searchStr = ""; + } + } + // 设置标题 + if (StringUtil.isEmpty(title)) { + top_title.setText("我的图书馆"); + } else { + top_title.setText(title); + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + // 初始化弹出菜单 + // if(bookType == 0){ + // popMenu = new PopMenu(this); + // popMenu.addItems(new String[]{getString(R.string.action_download)}); + // }else{ + // popMenu = new PopMenu(this); + // popMenu.addItems(new String[]{getString(R.string.action_collect)}); + // } + popMenu = new PopMenu(this); + // 初始化弹出菜单的选项与选项图标 + popMenu.addItems(new String[] { getString(R.string.action_download), + getString(R.string.action_collect) }, + new int[] { R.drawable.icon_pop_item_down, + R.drawable.icon_pop_item_collect }); + // 菜单项点击监听器 + popMenu.setOnItemClickListener(popmenuItemClickListener); + + } + + // 弹出菜单监听器 + OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + + if (position == 0) { + // ***********下载*********** + Intent intent = new Intent(ct, MyDownloadActivity.class); + intent.setType("0"); + startActivityForResult(intent, MyDownloadActivity.REQUESTCODE); + + } else if (position == 1) { + // ************收藏************ + startActivityForResult(new Intent(ct, MyCollectActivity.class), + BookMagazineDetailActivity.REQUESTCODE); + } + popMenu.dismiss(); + } + }; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_bookshelf_list_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_bookshelf_list, null); + } + + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library); + // 查询输入的内容 + search_text = (EditText) view.findViewById(R.id.et_search_text); + rela = (RelativeLayout) view.findViewById(R.id.rl_search_text); + // 点击查询按钮search + search = (ImageButton) view.findViewById(R.id.ib_search); + search.setOnClickListener(this); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + + if (isSearch) { + Search(searchStr, page); + } else { + getBookshelfList(url); + } + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page++; + if (isSearch) { + Search(searchStr, page); + } else { + getBookshelfList(url); + } + } + + // @Override + // public void onRefresh(PullToRefreshBase refreshView) { + // getBookshelfList(url); + // } + + }); + // 判断是指南还是期刊,如果是指南则隐藏搜索框 + if (bookType == 0) { + if (StringUtil.isEmpty(keywords) && StringUtil.isEmpty(searchStr)) { + rela.setVisibility(View.VISIBLE); + } else { + rela.setVisibility(View.GONE); + } + + type = 1; + } else { + type = 2; + db = openOrCreateDatabase("endownload", MODE_PRIVATE, null); + sq = new ENBookDownloadSqlManager(db); + rela.setVisibility(View.VISIBLE); + } + + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据,即缓存 + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + String result = SharePrefUtil.getString(ct, url + uuid, null); +// String result = "";//2018.8.4 + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + if (!StringUtil.isEmpty(searchStr) || !StringUtil.isEmpty(keywords)) { + isSearch = true; + Search(searchStr, page); + } else { + getBookshelfList(url); + } + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + // getBookshelfList(url); + super.onResume(); + } + + + /** + * 获取书架列表 + * + * @param loadUrl + */ + private void getBookshelfList(String loadUrl) { + + // 取出专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("typeUuid", uuid);// 找到专期刊杂志分类uuid + params.addBodyParameter("page", page + ""); + if (bookType != 0) { + params.addBodyParameter("expertUuid", expertUuid);// 找到专期刊杂志分类uuid + } + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // 根据id缓存数据 + SharePrefUtil.saveString(ct, url + uuid, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getBookshelfList.onFailure = " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showMessage("网络连接失败,请稍候再试!"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + + Log.i("TAG","result = "+result); + LibraryListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + for (int i = 0; i < bean.data.size(); i++) { + String isCollect = bean.data.get(i).getIsCollect(); + Log.i("TAG","isCollect = "+isCollect); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 初始化列表的数据 + if (page == 1) { + libraryList.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + libraryList.addAll(bean.data); + } + } + + else { + if (bean.data==null||bean.data.size()==0) { + ToastUtil.showMessage("没有更多数据了"); + onLoaded(); + setLastUpdateTime(); + ptrLv.setMode(Mode.PULL_FROM_START); + return; + } + libraryList.addAll(bean.data); + } + if (mAdapter == null) { + mAdapter = new BookshelfListAdapter(ct, libraryList, bookType,ENGLISH); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { +// ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + if (totalPage == 0) { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public void notifyAdapter() { + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) { + // 弹出菜单 + popMenu.showAsDropDown(v); + } else if (id == R.id.ib_search) { + // 搜索 + page = 1; + isSearch = true; + searchStr = search_text.getText().toString(); + Search(searchStr, page); + } + } + + /** + * @author 搜索当前杂志内容 + * @param + * @param page + */ + private void Search(String search_text2, int page) { + + if (TextUtils.isEmpty(search_text2) && StringUtil.isEmpty(keywords)) { + // showToast("请输入搜索内容"); + // 内容为空,默认搜索全部 + isSearch = true; + getBookshelfList(url); + return; + } + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("name", search_text2);// 搜索内容1 + params.addBodyParameter("keyWords", keywords);// 搜索内容1 + params.addBodyParameter("expertUuid", expertUuid);// 搜索内容1 + params.addBodyParameter("typeUuid", uuid);// id + params.addBodyParameter("page", String.valueOf(page));// 搜索页码1 + params.addBodyParameter("type", String.valueOf(type));// 搜索类型1 + //2020.2.4搜索排序改为上传时间 + params.addBodyParameter("sort", "2");// 排序类型 + LogUtil.i("getSearchLibrary keywords = "+keywords); + LogUtil.i("getSearchLibrary name = "+search_text2); + LogUtil.i("getSearchLibrary type = "+String.valueOf(type)); + HttpHelper.loadData(HttpMethod.POST, Url.getSearchLibrary, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getPreCashList.onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + processData(info.result, true); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("解析数据失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + } + }); + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = arg2 - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + + + // 如果点击的是指南的列表则进行判断当前下载状态,如果是已下载,则启动打开该指南 + LibraryData list = libraryList.get(p); + libraryUuid = list.uuid; + if (bookType == 0) { + // 从的数据库取出该指南的下载状态 + int downloadState = BookDownloadSqlManager.getDownloadState(libraryUuid); + if (downloadState == 2||downloadState==4) { + if(rela.getVisibility()==View.GONE) + { + needreportDetail("诊疗指南", libraryList.get(p).getTags(),libraryList.get(p).getTitle()); + } + else + { + needreportDetail("期刊杂志", libraryList.get(p).getTags(),libraryList.get(p).getTitle()); + } + + // 如果已下载,取出该指南的本地路径 + String downloadFilePath = BookDownloadSqlManager + .getDownloadFilePath(libraryUuid); + if(downloadFilePath.contains(Constant.OldfilePath)) + { + showDialog(Url.urlHtml + libraryList.get(p).getPath(), libraryList.get(p).getTitle(), + p); +// BookDownloadSqlManager.delDownladInfo(libraryUuid); +// mAdapter.notifyDataSetChanged(); +// ToastUtil.showToast("文件不存在,请重新下载"); + return; + } + if (!TextUtils.isEmpty(downloadFilePath)) { + // 路径不为空,打开该指南 + openFile(downloadFilePath); + + } else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(libraryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } + return; + } + // 因版权问题暂时关闭杂志详情及其收藏功能 + // else { + // //点击的期刊杂志,则进入杂志详情 + // String path = list.path; + // String isCollect = list.isCollect; + // Intent intent = new Intent(ct, EnglishDetailActivity.class); + // intent.putExtra("url", Url.urlHtml + path); + // intent.putExtra("title", "杂志详情"); + // intent.putExtra("libraryUuid", libraryUuid); + // intent.putExtra("bookType", bookType); + // intent.putExtra("isCollect", isCollect); + // startActivityForResult(intent, + // BookMagazineDetailActivity.REQUESTCODE); + // + // } + } + + /** + * 打开pdf格式文件 openFile + * + * @param path + * void + */ + public void openFile(final String path) { + + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + LogUtil.e("fileMD5 = "+fileMD5); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(BookshelfListActivity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + }else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + + + } + // Uri path1 = Uri.fromFile(file); +// Intent intent = new Intent(Intent.ACTION_VIEW); +// intent.setDataAndType(path1, "application/pdf"); +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); +// try { +// startActivity(intent); +// } catch (ActivityNotFoundException e) { +// ToastUtil.showToast("打开失败, 不支持此格式书籍!"); +// } + } else { + // 删除不存在文件的记录 + // DownloadModel downloadModel = new DownloadModel(libraryUuid); + // downloadModel.setState(0); + // BookDownloadSqlManager.updateDownloadState(downloadModel); + BookDownloadSqlManager.delDownladInfo(libraryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件已删除,请重新下载!"); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == BookMagazineDetailActivity.REQUESTCODE + && resultCode == RESULT_OK) { + getBookshelfList(url); + } + if (requestCode == MyDownloadActivity.REQUESTCODE + && resultCode == RESULT_OK) { + mAdapter.notifyDataSetChanged(); + } + super.onActivityResult(requestCode, resultCode, data); + } + + + public void showDialog(String url, final String name, + final int position) + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + downloadPdfennew(url,name,position); + dialog4.dismiss(); + + } + }); + } + private HttpHandler hand; + private String filePath = getContext().getExternalFilesDir("").getAbsolutePath()+ "/gdxzExpert/download/治疗指南/"; + protected void downloadPdfennew(String url, final String name, + final int position) { + // TODO Auto-generated method stub + + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + downloadModel.setFilePath(path);// 设置文件下载路径 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } +// // 改变页面状态为下载中 +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.GONE); +// holder.tv_down.setText("下载中"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + BookDownloadSqlManager + .updateDownloadFilePath(downloadModel); +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.GONE); +// holder.tv_down.setText("查看"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + /** + * 添加下载次数 + * */ +// addGuideDownload(mList.get(position).uuid); + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + LogUtil.e("下载失败","error = "+error.getMessage()+"code ="+error.getExceptionCode()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.VISIBLE); +// holder.tv_down.setVisibility(View.GONE); +// } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance().notifyAdapter(); + } + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + public void reportDown(String page,String tags,String nm) + { + if(rela.getVisibility()==View.GONE) + { + needreportDown(page,tags,title,nm,"诊疗指南"); + } + else + { + needreportDown(page,tags,title,nm,"期刊杂志"); + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity2.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity2.java new file mode 100644 index 0000000..513c22b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/BookshelfListActivity2.java @@ -0,0 +1,939 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Environment; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.BookshelfListAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.big.activity.BigPublicSearchActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ENBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widge.pickerview.PopMenu; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * BookshelfListActivity.java + * + * @author liufang 刘方 + * @date 2015-11-4 下午2:05:13 + * + * 图书馆-治疗指南与期刊杂志共用的列表页面 功能说明:(治疗指南,期刊杂志)书目列表 + */ +public class BookshelfListActivity2 extends BaseActivity implements + OnItemClickListener,OnCallBackFromNet{ + private PullToRefreshListView ptrLv; + private BookshelfListAdapter mAdapter; + private List libraryList = new ArrayList(); + private String libraryUuid; + private String url; + private String uuid; + private String title; + private PopMenu popMenu; + private int bookType = 0; + private DrawableCenterButton bt_book_search; + private DrawableCenterButtonR bt_book_screen; +// private EditText search_text; + private int page = 1; + private int type = 2; + private LinearLayout ll_empty; + private static BookshelfListActivity2 instance; + ENBookDownloadSqlManager sq; + SQLiteDatabase db; + private boolean isSearch = false; + String expertUuid; + private String searchStr; + private String keywords; + private LinearLayout ll_sort; + private LinearLayout mLl_follow, mLl_time,ll_zixun; + private TextView mTv_follow, mTv_time,tv_zixun; + private ImageView mIv_follow, mIv_time,iv_zixun; + private String sort = "2"; + + public static BookshelfListActivity2 getInstance() { + return instance; + } + + @Override + public void setTitle() { + instance = this; + top_back_layout.setVisibility(View.VISIBLE); + // top_right.setVisibility(View.VISIBLE); + // top_right.setImageResource(R.drawable.icon_library_right); + // 获取传值数据 + url = getIntent().getStringExtra("loadUrl"); + uuid = getIntent().getStringExtra("typeUuid"); + title = getIntent().getStringExtra("title"); + bookType = getIntent().getIntExtra("type", 0); + +// searchStr = getIntent().getStringExtra("search"); +// if (!StringUtil.isEmpty(searchStr)) { +// if (searchStr.contains(",")) { +// keywords = getIntent().getStringExtra("search"); +// searchStr = ""; +// } +// } + // 设置标题 + if (StringUtil.isEmpty(title)) { + top_title.setText("我的图书馆"); + } else { + top_title.setText(title); + } + + // 初始化弹出菜单 + // if(bookType == 0){ + // popMenu = new PopMenu(this); + // popMenu.addItems(new String[]{getString(R.string.action_download)}); + // }else{ + // popMenu = new PopMenu(this); + // popMenu.addItems(new String[]{getString(R.string.action_collect)}); + // } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("最热"); + top_right_text.setTextSize(18); + } + else + { + top_right.setImageResource(R.drawable.hot_booklist); + top_right.setVisibility(View.VISIBLE); + } + + +// popMenu = new PopMenu(this); +// // 初始化弹出菜单的选项与选项图标 +// popMenu.addItems(new String[] { getString(R.string.action_download), +// getString(R.string.action_collect) }, +// new int[] { R.drawable.icon_pop_item_down, +// R.drawable.icon_pop_item_collect }); +// // 菜单项点击监听器 +// popMenu.setOnItemClickListener(popmenuItemClickListener); + + } + + // 弹出菜单监听器 + OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + + if (position == 0) { + // ***********下载*********** + Intent intent = new Intent(ct, MyDownloadActivity.class); + intent.setType("0"); + startActivityForResult(intent, MyDownloadActivity.REQUESTCODE); + + } else if (position == 1) { + // ************收藏************ + startActivityForResult(new Intent(ct, MyCollectActivity.class), + BookMagazineDetailActivity.REQUESTCODE); + } + popMenu.dismiss(); + } + }; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_bookshelf_list2_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_bookshelf_list2, null); + } + + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library); + // 点击查询按钮search + bt_book_search = view.findViewById(R.id.bt_book_search); + bt_book_screen = view.findViewById(R.id.bt_book_screen); + ll_sort = view.findViewById(R.id.ll_sort); + mLl_follow = (LinearLayout) view.findViewById(R.id.ll_follow); + ll_zixun = (LinearLayout) view.findViewById(R.id.ll_zixun); + mLl_time = (LinearLayout) view.findViewById(R.id.ll_time); + tv_zixun = (TextView) view.findViewById(R.id.tv_zixun); + mTv_follow = (TextView) view.findViewById(R.id.tv_follow); + mTv_time = (TextView) view.findViewById(R.id.tv_time); + mIv_follow = (ImageView) view.findViewById(R.id.iv_follow); + iv_zixun = (ImageView) view.findViewById(R.id.iv_zixun); + mIv_time = (ImageView) view.findViewById(R.id.iv_time); + bt_book_search.setOnClickListener(this); + bt_book_screen.setOnClickListener(this); + mLl_follow.setOnClickListener(this); + ll_zixun.setOnClickListener(this); + mLl_time.setOnClickListener(this); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + if (isSearch) { + Search(searchStr, page); + } else if (!StringUtil.isEmpty(sort)){ + searchBookshelfList(sort); + }else { + getBookshelfList(url,""); + } + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page++; + if (isSearch) { + Search(searchStr, page); + } else if (!StringUtil.isEmpty(sort)){ + searchBookshelfList(sort); + }else { + getBookshelfList(url,""); + } + } + + // @Override + // public void onRefresh(PullToRefreshBase refreshView) { + // getBookshelfList(url); + // } + + }); + // 判断是指南还是期刊,如果是指南则隐藏搜索框 + if (bookType == 0) { + if (StringUtil.isEmpty(keywords) && StringUtil.isEmpty(searchStr)) { +// rela.setVisibility(View.VISIBLE); + } else { +// rela.setVisibility(View.GONE); + } + + type = 1; + } else { + type = 2; + db = openOrCreateDatabase("endownload", MODE_PRIVATE, null); + sq = new ENBookDownloadSqlManager(db); +// rela.setVisibility(View.VISIBLE); + } + + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据,即缓存 + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + String result = SharePrefUtil.getString(ct, url + uuid, null); +// String result = "";//2018.8.4 + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + if (!StringUtil.isEmpty(searchStr) || !StringUtil.isEmpty(keywords)) { + isSearch = true; + Search(searchStr, page); + } else { +// getBookshelfList(url,""); + searchBookshelfList(sort);//2020.2.4修改默认排序为上传时间-之前是只能排序 + } + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + // getBookshelfList(url); + super.onResume(); + } + + + /** + * 获取书架列表 + * + * @param loadUrl + */ + private void getBookshelfList(String loadUrl,String sort) { + // 取出专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("typeUuid", uuid);// 找到专期刊杂志分类uuid + params.addBodyParameter("page", page + ""); + if (bookType != 0) { + params.addBodyParameter("expertUuid", expertUuid);// 找到专期刊杂志分类uuid + } + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // 根据id缓存数据 + SharePrefUtil.saveString(ct, url + uuid, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getBookshelfList.onFailure = " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showMessage("网络连接失败,请稍候再试!"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + LogUtil.i("result = "+result); + LibraryListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + for (int i = 0; i < bean.data.size(); i++) { + String isCollect = bean.data.get(i).getIsCollect(); +// Log.i("TAG","isCollect = "+isCollect); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 初始化列表的数据 + if (page == 1) { + libraryList.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + libraryList.addAll(bean.data); + } + }else { + if (bean.data==null||bean.data.size()==0) { + ToastUtil.showMessage("没有更多数据了"); + onLoaded(); + setLastUpdateTime(); + ptrLv.setMode(Mode.PULL_FROM_START); + return; + } + libraryList.addAll(bean.data); + } + + if (mAdapter == null) { + mAdapter = new BookshelfListAdapter(ct, libraryList, bookType,uuid); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { +// ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + if (totalPage == 0) { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public void notifyAdapter() { + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text || id == R.id.top_right) { + // 弹出菜单 +// popMenu.showAsDropDown(v); + ll_sort.setVisibility(View.GONE); + Intent intent1 = new Intent(instance,BookTop10Activity.class); + intent1.putExtra("guide_type_uuid",uuid); + intent1.putExtra("bookType",bookType); + startActivity(intent1); + } else if (id == R.id.bt_book_search) { + ll_sort.setVisibility(View.GONE); + if(CommonUtil.BigModule()) + { + // 搜索 + Intent intent = new Intent(instance, + BigPublicSearchActivity.class); + intent.setType("drug"); + startActivity(intent); + } + else + { + // 搜索 + Intent intent = new Intent(instance, + PublicSearchActivity.class); + intent.setType("drug"); + startActivity(intent); + } + } else if (id == R.id.bt_book_screen) { + if (ll_sort.getVisibility()==View.VISIBLE){ + ll_sort.setVisibility(View.GONE); + return; + } + ll_sort.setVisibility(View.VISIBLE); + } else if (id == R.id.ll_follow) { + mTv_time.setTextColor(instance.getResources().getColor( + R.color.text_color)); + mTv_follow.setTextColor(instance.getResources().getColor( + R.color.top_title)); + mIv_follow.setVisibility(View.VISIBLE); + mIv_time.setVisibility(View.GONE); + ll_sort.setVisibility(View.GONE); + tv_zixun.setTextColor(UIUtils.getColor(R.color.text_color)); + iv_zixun.setVisibility(View.GONE); + bt_book_screen.setText("下载量"); + chengeImg(); + page=1; + sort = "1"; + searchBookshelfList(sort); + } else if (id == R.id.ll_time) { + mTv_time.setTextColor(instance.getResources().getColor( + R.color.top_title)); + mTv_follow.setTextColor(instance.getResources().getColor( + R.color.text_color)); + mIv_follow.setVisibility(View.GONE); + mIv_time.setVisibility(View.VISIBLE); + ll_sort.setVisibility(View.GONE); + tv_zixun.setTextColor(UIUtils.getColor(R.color.text_color)); + iv_zixun.setVisibility(View.GONE); + bt_book_screen.setText("标题"); + chengeImg(); + page=1; + sort = "3"; + searchBookshelfList(sort); + } else if (id == R.id.ll_zixun) {//公益咨询数 + tv_zixun.setTextColor(UIUtils.getColor(R.color.top_title)); + iv_zixun.setVisibility(View.VISIBLE); + mTv_time.setTextColor(UIUtils.getColor(R.color.text_color)); + mTv_follow.setTextColor(UIUtils.getColor(R.color.text_color)); + mIv_follow.setVisibility(View.GONE); + mIv_time.setVisibility(View.GONE); + bt_book_screen.setText("上传时间"); + chengeImg(); + page=1; + ll_sort.setVisibility(View.GONE); + sort = "2"; + searchBookshelfList(sort); + } + } + + private void searchBookshelfList( String sort) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("name", "");// 搜索内容 + params.addBodyParameter("keyWords", "");// 搜索内容 + params.addBodyParameter("expertUuid", expertUuid);// 搜索内容 + params.addBodyParameter("typeUuid", uuid);// id + params.addBodyParameter("page", String.valueOf(page));// 搜索页码 + params.addBodyParameter("type", String.valueOf(type));// 搜索类型 + params.addBodyParameter("sort", sort);// 排序类型 + LogUtil.i("type = "+type+",sort = "+sort); + HttpHelper.loadData(HttpMethod.POST, Url.getSearchLibrary, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i(info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + processData(info.result, true); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("解析数据失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + } + }); + + } + + /** + * @author 搜索当前杂志内容 + * @param + * @param page + */ + private void Search(String search_text2, int page) { + + if (TextUtils.isEmpty(search_text2) && StringUtil.isEmpty(keywords)) { + // showToast("请输入搜索内容"); + // 内容为空,默认搜索全部 + isSearch = true; + getBookshelfList(url,""); + return; + } + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("name", search_text2);// 搜索内容 + params.addBodyParameter("keyWords", keywords);// 搜索内容 + params.addBodyParameter("expertUuid", expertUuid);// 搜索内容 + params.addBodyParameter("typeUuid", uuid);// id + params.addBodyParameter("page", String.valueOf(page));// 搜索页码 + params.addBodyParameter("type", String.valueOf(type));// 搜索类型 +// params.addBodyParameter("sort", "2");// 排序类型 + LogUtil.i("getSearchLibrary keywords = "+keywords); + HttpHelper.loadData(HttpMethod.POST, Url.getSearchLibrary, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getPreCashList.onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + processData(info.result, true); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("解析数据失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + } + }); + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = arg2 - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + + + // 如果点击的是指南的列表则进行判断当前下载状态,如果是已下载,则启动打开该指南 + LibraryData list = libraryList.get(p); + libraryUuid = list.uuid; + if (bookType == 0) { + // 从的数据库取出该指南的下载状态 + int downloadState = BookDownloadSqlManager.getDownloadState(libraryUuid); + if (downloadState == 2||downloadState==4) { + needreportDetail("诊疗指南", libraryList.get(p).getTags(),libraryList.get(p).getTitle()); + // 如果已下载,取出该指南的本地路径 + String downloadFilePath = BookDownloadSqlManager + .getDownloadFilePath(libraryUuid); + if(downloadFilePath.contains(Constant.OldfilePath)) + { + showDialog(Url.urlHtml + libraryList.get(p).getPath(), libraryList.get(p).getTitle(), + p); + // 路径为空,则删除不存在文件的记录 +// BookDownloadSqlManager.delDownladInfo(libraryUuid); +// mAdapter.notifyDataSetChanged(); +// ToastUtil.showToast("文件不存在,请重新下载"); + return; + } + if (!TextUtils.isEmpty(downloadFilePath)) { + // 路径不为空,打开该指南 + openFile(downloadFilePath); + + } else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(libraryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } + return; + } + // 因版权问题暂时关闭杂志详情及其收藏功能 + // else { + // //点击的期刊杂志,则进入杂志详情 + // String path = list.path; + // String isCollect = list.isCollect; + // Intent intent = new Intent(ct, EnglishDetailActivity.class); + // intent.putExtra("url", Url.urlHtml + path); + // intent.putExtra("title", "杂志详情"); + // intent.putExtra("libraryUuid", libraryUuid); + // intent.putExtra("bookType", bookType); + // intent.putExtra("isCollect", isCollect); + // startActivityForResult(intent, + // BookMagazineDetailActivity.REQUESTCODE); + // + // } + } + + /** + * 打开pdf格式文件 openFile + * + * @param path + * void + */ + public void openFile(final String path) { + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + LogUtil.e("fileMD5 = "+fileMD5); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(BookshelfListActivity2.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + }else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + + + } + // Uri path1 = Uri.fromFile(file); +// Intent intent = new Intent(Intent.ACTION_VIEW); +// intent.setDataAndType(path1, "application/pdf"); +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); +// try { +// startActivity(intent); +// } catch (ActivityNotFoundException e) { +// ToastUtil.showToast("打开失败, 不支持此格式书籍!"); +// } + } else { + // 删除不存在文件的记录 + // DownloadModel downloadModel = new DownloadModel(libraryUuid); + // downloadModel.setState(0); + // BookDownloadSqlManager.updateDownloadState(downloadModel); + BookDownloadSqlManager.delDownladInfo(libraryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件已删除,请重新下载!"); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == BookMagazineDetailActivity.REQUESTCODE + && resultCode == RESULT_OK) { + getBookshelfList(url,""); + } + if (requestCode == MyDownloadActivity.REQUESTCODE + && resultCode == RESULT_OK) { + mAdapter.notifyDataSetChanged(); + } + super.onActivityResult(requestCode, resultCode, data); + } + + public void chengeImg(){ + Drawable icon_new ; + if(CommonUtil.BigModule()) + { + icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme_big); + } + else + { + icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + } + + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + bt_book_screen.setCompoundDrawables(null, null, icon_new, + null); + bt_book_screen.setTextColor(instance.getResources().getColor( + R.color.top_title)); + } + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + public void showDialog(String url, final String name, + final int position) + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + reportDown(name,libraryList.get(position).getTags(),1+""); + downloadPdfennew(url,name,position); + dialog4.dismiss(); + + } + }); + } + public void reportDown(String page,String tags,String nm) + { + needreportDown(page,tags,title,nm,"诊疗指南"); + } + private HttpHandler hand; + private String filePath = getContext().getExternalFilesDir("").getAbsolutePath()+ "/gdxzExpert/download/治疗指南/"; + protected void downloadPdfennew(String url, final String name, + final int position) { + // TODO Auto-generated method stub + + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setState(5); + BookDownloadSqlManager + .updateDownloadState(downloadModel); + mAdapter.notifyDataSetChanged(); +// // 改变页面状态为下载中 +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.GONE); +// holder.tv_down.setText("下载中"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + BookDownloadSqlManager + .updateDownloadFilePath(downloadModel); +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.GONE); +// holder.tv_down.setText("查看"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + /** + * 添加下载次数 + * */ +// addGuideDownload(mList.get(position).uuid); + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + LogUtil.e("下载失败","error = "+error.getMessage()+"code ="+error.getExceptionCode()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(libraryList + .get(position).uuid); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); +// if ((int) holder.iv_down.getTag() == position) { +// // 异步显示 +// holder.iv_down.setVisibility(View.VISIBLE); +// holder.tv_down.setVisibility(View.GONE); +// } + mAdapter.notifyDataSetChanged(); + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCourisiuuonCollectBIngliActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCourisiuuonCollectBIngliActivity.java new file mode 100644 index 0000000..03ae82d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCourisiuuonCollectBIngliActivity.java @@ -0,0 +1,322 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CircleCollectBIngliBean; +import cn.shangyu.gdxzExpert.bean.CircleCollectBIngliBean.Collection; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author CaseCourisiuuonCollectBIngliActivity.java + * 功能说明:病例讨论收藏列表界面 + */ +public class CaseCourisiuuonCollectBIngliActivity extends BaseActivity + implements OnItemClickListener { + + private ArrayList DataList = new ArrayList(); + private int page = 1; + private int type = 4; + private int totalPage = 0; + public static String CollectListUrl = Url.getcollectionList; + private PullToRefreshListView ptrLv; + private TextView load_empty; + private MessageAdapter ListAdapter; + + @Override + public void setTitle() { + top_title.setText("我的收藏"); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_my_collect); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_collect);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 设置下拉与上啦都可以用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + CollectListData(CollectListUrl, page, true); + } + + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + CollectListData(CollectListUrl, page, false); + } + }); + initData(); + return view; + } + + private void initData() { + String CollectListMessage = SharePrefUtil.getString(ct, CollectListUrl, + null); + if (TextUtils.isEmpty(CollectListMessage)) { + showProgressDialog("正在加载"); + } else { + processData(CollectListMessage, page, true); + } + CollectListData(CollectListUrl, page, true); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + CollectListData(CollectListUrl, page, true); + super.onResume(); + } + + class MessageAdapter extends BaseAdapter { + + List list; + + public MessageAdapter(List data) { + this.list = data; + // TODO Auto-generated constructor stub + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + // 找到自定义item布局 并赋值给 convertView + convertView = View.inflate(ct, + R.layout.list_casesuion_item, null); + holder = new Holder(); + holder.name = (TextView) convertView + .findViewById(R.id.item_name_title); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + final Collection data = list.get(position); + if (!TextUtils.isEmpty(data.title)) { + holder.name.setText(data.title); + } else { + holder.name.setText(""); + } + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + public class Holder { + public ImageView iv_right; + public TextView tv_down; + public ImageView iv_down; + public TextView date; + public TextView name; + } + } + + /** + * 请求服务器。获取病例討論收藏记录 CollectListData + * + * @param loadUrl + * void * 参数 说明 + * page 页数 + * title 病例讨论的des + * type 4 + * user_uuid 医生的uuid + */ + private void CollectListData(final String loadUrl, final int page, + final boolean isRefresh) { + String expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");// 提取专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("page", String.valueOf(page)); + params.addBodyParameter("type", String.valueOf(type)); + params.addBodyParameter("title", "");// 传page参数 + LogUtil.i("========page==" + page + "========expertUuid==" + expertUuid + + "type===========" + type); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + processData(info.result, page, isRefresh); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(load_empty); + } + }); + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, int page, boolean isRefresh) { + + CircleCollectBIngliBean bean = GsonTools.fromGsonToBean(result, + CircleCollectBIngliBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data); + + if (bean.data == null || bean.data.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("您暂未收藏病例"); + } else { + load_empty.setVisibility(View.GONE); + DataList.addAll(bean.data); + } + } else { + // 加载更多下一页时候e + DataList.addAll(bean.data); + + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new MessageAdapter(DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + totalPage = bean.totalPage; + LogUtil.i("totalPage=" + totalPage + "page=" + page); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if (!isRefresh) { + ToastUtil.showMessage("没有更多收藏了"); + } + + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + Collection list = DataList.get(p); + String bookuuid = list.other_uuid; + Intent intent = new Intent(ct, CaseCussionDetailActivity.class); + intent.putExtra("uuid", bookuuid);//传值病例的uuid + startActivity(intent); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCussionDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCussionDetailActivity.java new file mode 100644 index 0000000..82aac10 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseCussionDetailActivity.java @@ -0,0 +1,1218 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.webkit.WebView; +import android.widget.BaseExpandableListAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MyPagerAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CasesuiondelBean; +import cn.shangyu.gdxzExpert.bean.CasesuiondelBean.CasesuiondelData; +import cn.shangyu.gdxzExpert.bean.Child; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.bean.NewCommentBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +//import com.umeng.socialize.net.r; + +/** + * 功能说明: + * + * @author zhaodewei 病例交流详情CaseCussionDetailActivity + */ + +@SuppressWarnings("serial") +public class CaseCussionDetailActivity extends BaseActivity implements + OnClickListener, OnCallBackFromNet { + + private String expertUuid; + private String bookUuid = ""; + + private CaseCussionDetailActivity ctx; + private View view; + private Intent intent; + + private TextView mTvPLNum; + private LinearLayout mLl_AddPL; + private EditText mEt_AddPL; + private Button mBt_AddPL; + ArrayList datas = new ArrayList(); + List datass = new ArrayList(); + + private ArrayList imageSource; + private MyPagerAdapter myPagerAdapter; + private ImageView im_pic; + private TextView case_name; + private TextView case_hos; + private ViewPager vp; + private LinearLayout dots; + private LinearLayout lytag; + private TextView case_date; + private TextView case_des; + private TextView tag_1; + private TextView tag_2; + private TextView tag_3; + private String isCollection; + List mImagePath; + private RelativeLayout ra_al; + boolean isOk1 = false, isOk2 = false; + private int page = 1; + private int ConmmentNum = -1; + private Button btn_add_com; + private int totalcoment=0; + private CommentExpandableListView expandableListView; + private CommentExpandAdapter adapterex; + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.nor_nes_no); + top_right.setOnClickListener(this); + top_title.setText("病例详情"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_case_discussion); + expandableListView = view.findViewById(R.id.detail_page_lv_comment); + ctx = this; + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + loadingView = view.findViewById(R.id.loading_view); + mTvPLNum = (TextView) view.findViewById(R.id.tv_gd_detail_num); + + mLl_AddPL = (LinearLayout) view.findViewById(R.id.ll_pinglun); + mEt_AddPL = (EditText) view.findViewById(R.id.et_add_pinglun); + mBt_AddPL = (Button) view.findViewById(R.id.bt_add_pinglun); + ra_al = (RelativeLayout) view.findViewById(R.id.ac_top_fl); + btn_add_com=(Button) view.findViewById(R.id.btn_add_com); + btn_add_com.setOnClickListener(this); + im_pic = view.findViewById(R.id.im_pic); + case_name = (TextView) view.findViewById(R.id.tv_case_name); + case_date = (TextView) view.findViewById(R.id.tv_case_date); + case_des = (TextView) view.findViewById(R.id.tv_case_mess); + case_hos = (TextView) view.findViewById(R.id.tv_case_hos); + + vp = (ViewPager) view.findViewById(R.id.vp); + + dots = (LinearLayout) view.findViewById(R.id.ll_dots); + lytag = (LinearLayout) view.findViewById(R.id.ly_tag); + // top_fl = (RelativeLayout) view.findViewById(R.id.top_fl); + + tag_1 = (TextView) view.findViewById(R.id.tag_1); + tag_2 = (TextView) view.findViewById(R.id.tag_2); + tag_3 = (TextView) view.findViewById(R.id.tag_3); + + mEt_AddPL.setOnClickListener(this); + mBt_AddPL.setOnClickListener(this); + setitle1(); + showLoadingProgress(); + initData(); + getcaseDetailList(Url.getCaseDiscussDetail);// 病例讨论详情 + return view; + } + + /** + * 请求服务器。获取病例讨论详情数据 + */ + private void getcaseDetailList(final String loadUrl) { + Map map=new HashMap<>(); + map.put("uuid",bookUuid); + sendJsonPostParamtoNetSignMD5(loadUrl,map,301,this); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("uuid", bookUuid);// 病历uuid +// params.addBodyParameter("user_uuid", expertUuid); +// HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(ct, Url.getCaseDiscussDetail, +// info.result); +// +// processData(info.result); +// +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// closeProgressDialog(); +// ToastUtil.showToast("请求数据失败,请稍候再试"); +// } +// }); + } + + /** + * 解析数据 + * + * @param result + */ + CasesuiondelBean bean; + private String des = ""; + + private void processData(String result) { + isOk1 = true; + if (isOk2) { + closeProgressDialog(); + } + + bean = GsonTools.fromGsonToBean(result, CasesuiondelBean.class); + if("36000".equals(bean.code)) + { +// handler.sendEmptyMessageDelayed(101,1000); +// ToastUtil.showMessage(bean.message); + + ECAlertDialog dilaog2 = ECAlertDialog.buildAlert(CaseCussionDetailActivity.this, + bean.message, "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dialog.dismiss(); + finish(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + return; + + } + if (!"200".equals(bean.code)) { + return; + } + datas.clear(); + // 先判断数据是否 为空 + if (bean.data == null) { + return; + } + des = bean.data.data.des; + isCollection = bean.data.isCollection; + if (isCollection.equals("1")) { + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + top_right.setImageResource(R.drawable.nor_nes_no); + } + if (bean.data.data.photo.size() == 0) { + ra_al.setVisibility(View.GONE); + } else { + ra_al.setVisibility(View.VISIBLE); + } + + if (!TextUtils.isEmpty(bean.data.data.create_date)) { + if (bean.data.data.create_date.length() >= 16) { + case_date.setText(bean.data.data.create_date.substring(5, 16)); + } else { + case_date.setText(bean.data.data.create_date); + } + } + if (!TextUtils.isEmpty(bean.data.data.expert_name)) { + case_name.setText(bean.data.data.expert_name); + } + if (!TextUtils.isEmpty(bean.data.data.des)) { + case_des.setText(bean.data.data.des); + } + if (!TextUtils.isEmpty(bean.data.data.expert_hospital_name)) { + case_hos.setText(bean.data.data.expert_hospital_name); + } + if (!TextUtils.isEmpty(bean.data.data.expert_photo)) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + bean.data.data.expert_photo, im_pic); + } + + if (TextUtils.isEmpty(bean.data.data.tag1) + && TextUtils.isEmpty(bean.data.data.tag2) + && TextUtils.isEmpty(bean.data.data.tag3)) { + lytag.setVisibility(View.GONE); + } else { + lytag.setVisibility(View.VISIBLE); + tag_1.setVisibility(View.VISIBLE); + tag_1.setText(bean.data.data.tag1); + if (!TextUtils.isEmpty(bean.data.data.tag2)) { + tag_2.setVisibility(View.VISIBLE); + tag_2.setText(bean.data.data.tag2); + } + if (!TextUtils.isEmpty(bean.data.data.tag3)) { + tag_3.setVisibility(View.VISIBLE); + tag_3.setText(bean.data.data.tag3); + } + } + + init(); + } + + /** + * 功能说明: 更新轮播图 + */ + private void init() { + // 将要显示的图片放到list集合中 + imageSource = new ArrayList(); + imageSource.clear(); + dots.removeAllViews(); + initImageResource(); + // 为viewPager设置适配器 + myPagerAdapter = new MyPagerAdapter(ctx, imageSource); + myPagerAdapter.getPath(mImagePath); + vp.setAdapter(myPagerAdapter); + // 为viewPager添加监听器,该监听器用于当图片变换时,点也跟着变化 + MyPageChangeListener listener = new MyPageChangeListener(); + vp.setOnPageChangeListener(listener); + + } + + // 监听ViewPager的变化 + private class MyPageChangeListener implements ViewPager.OnPageChangeListener { + private int currPage = 0;// 当前显示的页 + private int oldPage = 0;// 上一次显示的页 + + public MyPageChangeListener() { + } + + @Override + public void onPageScrollStateChanged(int arg0) { + + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + public void onPageSelected(int position) { + // 当显示的图片发生变化之后 + // 设置标题 + dots.getChildAt(position).setEnabled(true); + dots.getChildAt(oldPage).setEnabled(false); + oldPage = position; + currPage = position; + } + } + + public void initImageResource() { + mImagePath = new ArrayList(); + for (int i = 0; i < bean.data.data.photo.size(); i++) { + /** + * 加载图片并放在集合中 + */ + mImagePath.add(bean.data.data.photo.get(i)); + ImageView imageview = new ImageView(ctx); + imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); + DisplayImageOptions options = new DisplayImageOptions.Builder() + .showImageOnLoading(R.drawable.home_scroll_default) + .showImageOnFail(R.drawable.home_scroll_default) + .showImageForEmptyUri(R.drawable.home_scroll_default) + .cacheInMemory(true).cacheOnDisk(true) + .imageScaleType(ImageScaleType.EXACTLY)// 设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY) + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// + .displayer(new FadeInBitmapDisplayer(100))// 淡入 + .build(); + ImageLoader.getInstance().displayImage( + Url.urlHtml + bean.data.data.photo.get(i), imageview, options); + imageSource.add(imageview); + // 判断轮播图的点 如果一张图片就不显示 + if (imageSource.size() != 0 && imageSource.size() == 1) { + dots.setVisibility(View.GONE); + } else { + dots.setVisibility(View.VISIBLE); + } + /** + * 初始化小圆点并放在集合中 + */ + ImageView viewPoint = new ImageView(ctx); + viewPoint.setBackgroundResource(R.drawable.select_yes_no); + if (i == 0) { + viewPoint.setEnabled(true); + } else { + viewPoint.setEnabled(false); + } + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + -2, -2); + params.leftMargin = 20; + dots.addView(viewPoint, params); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + bookUuid = getIntent().getStringExtra("uuid"); + getCommentList(); + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) { + if (isCollection != null) { + if (!isCollection.equals("1")) { + CollectListSure(4); + // 收藏 + } else { + // 取消收藏 + CollectListDis(4); + } + } +// case R.id.bt_add_pinglun: +// if (StringUtil.isEmpty(mEt_AddPL.getText().toString().trim())) { +// ToastUtil.showMessage("输入内容"); +// return; +// } +// getAddComment(); +// View view = getWindow().peekDecorView(); +// if (view != null) { +// InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); +// inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); +// } +// break; +// case R.id.et_add_pinglun: +// showPopupWindow(v); +// break; + } else if (id == R.id.btn_add_com) { + Intent intent = new Intent(CaseCussionDetailActivity.this, + ReplyFeedbackActivity.class); + intent.setType("YY"); + startActivityForResult(intent, 111); + } + } + + /** + * other_uuid title type user_uuid + * + * @param i + */ + private void CollectListSure(int i) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid); + params.addBodyParameter("type", String.valueOf(i)); + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", des); + HttpHelper.loadData(HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, Url.getcollection, + info.result); + top_right.setImageResource(R.drawable.nor_news_yes); + ToastUtil.showMessage("收藏成功"); + isCollection = "1"; + BaseApplication.setIscollent(true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + private void CollectListDis(int type) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("type", String.valueOf(type)); + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", des); + HttpHelper.loadData(HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, Url.getdiscollection, + info.result); + top_right.setImageResource(R.drawable.nor_nes_no); + ToastUtil.showMessage("取消收藏成功"); + isCollection = "0"; + BaseApplication.setIscollent(true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + public static final int GET_COMMENT_LIST_RESULT = 101; // 获取评论列表 + public static final int GET_ADD_COMMENT_RESULT = 102; // 添加评论 + public static final int GET_DELETE_COMMENT_RESULT = 103; // 删除评论 + public static final int GET_HF_COMMENT_RESULT = 201; // 回复评论 + + private void getCommentList() { + Map param = new HashMap(); + param.put("uuid", bookUuid); + sendJsonPostParamtoNetSignMD5(Url.getNewCommentList,param,GET_COMMENT_LIST_RESULT,this); + } + + private int deletePosition = -1; + + public void getDeleteComment(String comuid) { + + Map param = new HashMap(); + param.put("uuid", comuid); + sendParamtoNet(Url.getDeleteComment, param, GET_DELETE_COMMENT_RESULT, + ctx, false); + } + + private void getAddComment(String str) { + page = 1; + showLoadingProgress(); + Map param = new HashMap(); + param.put("article_uuid", bookUuid); +// param.put("user_uuid", expertUuid); + param.put("type", "4"); + param.put("page", "1"); + param.put("comment", str.replaceAll(" +","")); + sendJsonPostParamtoNetSignMD5(Url.getAddComment, param, GET_ADD_COMMENT_RESULT, + this); + } + + private void getAddCommentReply(String uuid, String content) { + page = 1; + showLoadingProgress(); + Map param = new HashMap(); + param.put("article_uuid", bookUuid); +// param.put("user_uuid", expertUuid); + param.put("type", 4 + ""); + param.put("reply_uuid", uuid); + param.put("page", "1"); + param.put("comment", content.replaceAll(" +","")); + sendJsonPostParamtoNetSignMD5(Url.getAddCommentReply, param, GET_ADD_COMMENT_RESULT, + this); + } + + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 301: + SharePrefUtil.saveString(ct, Url.getCaseDiscussDetail, + resultJson); + + processData(resultJson); + break; + + case GET_COMMENT_LIST_RESULT: + prossData(resultJson); + if (totalcoment>0) { + //mTvPLNum.setText("评论" + "(" + totalcoment + ")"); + mTvPLNum.setText("评论"); + + } else { + mTvPLNum.setText("待评论"); + + + } + initExpandableListView(mList); + break; + case GET_ADD_COMMENT_RESULT: + mEt_AddPL.setText(""); + getCommentList(); + ToastUtil.showMessage("评论成功"); + + + break; + case GET_DELETE_COMMENT_RESULT: + getCommentList(); + break; + default: + break; + } + } + /** + * 初始化评论和回复列表 + */ + private void initExpandableListView(final List commentList){ + expandableListView.setGroupIndicator(null); + //默认展开所有回复 + adapterex = new CommentExpandAdapter(this, commentList); + expandableListView.setAdapter(adapterex); + + for(int i = 0; i mList = new ArrayList<>();// 评论数据的集合 + public void prossData(String result) { + Log.d("gdxzpyq","result "+result); + isOk2 = true; + if (isOk1) { + closeProgressDialog(); + } + + mList.clear(); + totalcoment=0; + JSONObject jo= null; + try { + jo = new JSONObject(result); + JSONArray jsonArray = jo.getJSONArray("data"); + if(jsonArray==null||jsonArray.length()<1) + { + } + else + { + totalcoment=jsonArray.length(); + for(int j=0;j0) + { + totalcoment+=jArr1.length(); + List childList=new ArrayList<>(); + for(int i=0;i commentBeanList; + private List replyBeanList; + private Context context; + private int pageIndex = 1; + ECAlertDialog buildAlert; + private int delPos;// 删除评论的位置 + public CommentExpandAdapter(Context context, List commentBeanList) { + this.context = context; + this.commentBeanList = commentBeanList; + } + + @Override + public int getGroupCount() { + return commentBeanList.size(); + } + + @Override + public int getChildrenCount(int i) { + if(commentBeanList.get(i).getChildList() == null){ + return 0; + }else { + if(!commentBeanList.get(i).getExpanded()&&commentBeanList.get(i).getChildList().size()>3) + { + return 3; + } + else + { + return commentBeanList.get(i).getChildList().size()>0 ? commentBeanList.get(i).getChildList().size():0; + } + + } + + } + + @Override + public Object getGroup(int i) { + return commentBeanList.get(i); + } + + @Override + public Object getChild(int i, int i1) { + return commentBeanList.get(i).getChildList().get(i1); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(final int groupPosition, boolean isExpand, View convertView, ViewGroup viewGroup) { + final GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new_p, viewGroup, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + if(expertUuid.equals(commentBeanList.get(groupPosition).getUser_uuid())) + { + groupHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); + groupHolder.item_comment_hf.setVisibility(View.GONE); + } + else + { + groupHolder.iv_item_comment_delete.setVisibility(View.GONE); + groupHolder.item_comment_hf.setVisibility(View.VISIBLE); + } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(CaseCussionDetailActivity.this).load( + Url.urlHtml + commentBeanList.get(groupPosition).getPhoto()).apply(requestOptions).into(groupHolder.logo); + } + else + { + Glide.with(CaseCussionDetailActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into(groupHolder.logo); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getPhoto(), +// groupHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if("0".equals(commentBeanList.get(groupPosition).getUser_status())) + { + groupHolder.tv_name.setText("已注销"); + } + else + { + groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + } + groupHolder.tv_time.setText(commentBeanList.get(groupPosition).getCreate_date()); + groupHolder.tv_content.setText(commentBeanList.get(groupPosition).getContent()); + groupHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getComment_uuid(); + getDeleteComment(uid); + //mList.remove(groupPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + groupHolder.item_comment_hf.setOnClickListener(new OnClickListener() { + + // 添加回复 + @Override + public void onClick(View v) { + if("0".equals(mList.get(groupPosition).getUser_status())) + { + ToastUtil.showMessage("该评论无法回复"); + return; + } + // TODO Auto-generated method stub + Intent intent = new Intent(CaseCussionDetailActivity.this, + SettingFeedbackActivity.class); + intent.setType("commentY"); + intent.putExtra("name", mList.get(groupPosition).getName()); + intent.putExtra("uuid", mList.get(groupPosition).getUser_uuid()); + intent.putExtra("content", mList.get(groupPosition).getContent()); + startActivityForResult(intent, + GET_HF_COMMENT_RESULT); + + } + }); + return convertView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean b, View convertView, ViewGroup viewGroup) { + final ChildHolder childHolder; + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new,viewGroup, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + } + else { + childHolder = (ChildHolder) convertView.getTag(); + } + if(childPosition==2&&commentBeanList.get(groupPosition).getChildList().size()>3&&!commentBeanList.get(groupPosition).getExpanded()) + { + childHolder.morer.setVisibility(View.VISIBLE); + childHolder.more.setText("— —展开更多回复"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.exp)); + } + else + { + if(commentBeanList.get(groupPosition).getExpanded()&&(childPosition==(commentBeanList.get(groupPosition).getChildList().size()-1))) + { + childHolder.more.setText("— —收起"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.coll)); + childHolder.morer.setVisibility(View.VISIBLE); + } + else + { + childHolder.morer.setVisibility(View.GONE); + } + } + childHolder.morer.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if(!commentBeanList.get(groupPosition).getExpanded()) + { + commentBeanList.get(groupPosition).setExpanded(true); + + notifyDataSetChanged(); + + } + else + { + commentBeanList.get(groupPosition).setExpanded(false); + + notifyDataSetChanged(); + + } + } + }); +// if(expertUuid.equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_uuid())) +// { +// childHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); +// } +// else +// { +// childHolder.iv_item_comment_delete.setVisibility(View.GONE); +// } + if(!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date())) + { + childHolder.tv_time.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date()); + } + else + { + childHolder.tv_time.setText(""); + } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(CaseCussionDetailActivity.this). + load( Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto()) + .apply(requestOptions).into(childHolder.logo); + + } + else + { + Glide.with(CaseCussionDetailActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into( childHolder.logo); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto(), +// childHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + String replyUser = commentBeanList.get(groupPosition).getChildList().get(childPosition).getName(); + if("0".equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_status())) + { + childHolder.tv_name.setText("已注销"); + } + else + { + childHolder.tv_name.setText(replyUser); + } +// if(!TextUtils.isEmpty(replyUser)){ +// childHolder.tv_name.setText(replyUser); +// }else { +// childHolder.tv_name.setText("无名"+":"); +// } + delPos=childPosition; + childHolder.tv_content.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent()); + childHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getChildList().get(childPosition).getComment_uuid(); + getDeleteComment(uid); + mList.get(groupPosition).getChildList().remove(childPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + return convertView; + } + + @Override + public boolean isChildSelectable(int i, int i1) { + return true; + } + + private class GroupHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete; + private TextView tv_name, tv_content, tv_time,item_comment_hf; + // private ImageView iv_like; + public GroupHolder(View view) { + logo =view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + item_comment_hf=view.findViewById(R.id.item_comment_hf); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + // iv_like = (ImageView) view.findViewById(R.id.comment_item_like); + } + } + + private class ChildHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete,more_i; + private TextView tv_name, tv_content, tv_time,more; + private RelativeLayout all_child,morer; + public ChildHolder(View view) { + all_child=view.findViewById(R.id.all_child); + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + more=view.findViewById(R.id.more); + morer=view.findViewById(R.id.morer); + more_i=view.findViewById(R.id.more_i); + } + } + + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseDetailActivity.java new file mode 100644 index 0000000..b0d7467 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseDetailActivity.java @@ -0,0 +1,930 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebSettings; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.adapter.SuifangAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddPatientBean; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.BaseInfoBean; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.TreeBean; +import cn.shangyu.gdxzExpert.bean.TreeDetailBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm1; +import cn.shangyu.gdxzExpert.bean.projectQueryForm2; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +public class CaseDetailActivity extends BaseActivity { + + + @Override + public void setTitle() { + top_title.setText("病例详情"); + } + LinearLayout classicsFooter,Footer; + SmartRefreshLayout refreshLayout; + RecyclerView recyclerView; + SuifangAdapter suifangAdapter; + LinearLayout l_info,l_base,l_yigan; + TextView num1,num2,num3,change_data; + String patientcaseId; + int freezeFlag; + + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_case_detail); + num1=view.findViewById(R.id.num1); + num2=view.findViewById(R.id.num2); + num3=view.findViewById(R.id.num3); + recyclerView=view.findViewById(R.id.lv_item_c); + refreshLayout=view.findViewById(R.id.refreshLayout); + classicsFooter=view.findViewById(R.id.r_head); + Footer=view.findViewById(R.id.r_foot); + l_info=view.findViewById(R.id.l_info); + l_info.setOnClickListener(this); + l_base=view.findViewById(R.id.l_base); + l_base.setOnClickListener(this); + l_yigan=view.findViewById(R.id.l_yigan); + l_yigan.setOnClickListener(this); + view.findViewById(R.id.l_end).setOnClickListener(this); + view.findViewById(R.id.new_suifang).setOnClickListener(this); + change_data=view.findViewById(R.id.change_data); + change_data.setOnClickListener(this); + + initdata(); + if("create".equals(getIntent().getStringExtra("type"))) + { + popupHandler.sendEmptyMessageDelayed(0, 300); + + } + else + { + patientcaseId=getIntent().getStringExtra("patientcaseId"); + gettree(); + getBaseInfo(); + } + + + return view; + } + private Handler popupHandler = new Handler(){ + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case 0: + showwindow("系统自动生成"); + break; + } + } + + }; + public void initdata() + { + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(CaseDetailActivity.this); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + recyclerView.addItemDecoration(new SpaceItemDecoration(0,10)); + refreshLayout.setEnableNestedScroll(true); + refreshLayout.setEnableLoadMore(false); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(CaseDetailActivity.this,null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(CaseDetailActivity.this,null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayout.refreshing(); + + + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayoutNew.refreshing(); + gettree(); + + + } + + + }); + + } + String jixiantime; + private void settAdapter() + { + if(suifangAdapter==null) + { + suifangAdapter=new SuifangAdapter(CaseDetailActivity.this,list); + recyclerView.setAdapter(suifangAdapter); + suifangAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + + + if((list.get(position).getTitle()+"").contains("主要终点事件")) + { + Intent intent3=new Intent(CaseDetailActivity.this,TerminationActivity.class); + intent3.putExtra("patientcaseId",patientcaseId); + intent3.putExtra("jixiantime",jixiantime); + startActivity(intent3); + } + else if((list.get(position).getKey()+"").contains("BASEINFOSHOW")) + { + Intent intent=new Intent(CaseDetailActivity.this,InfomationActivity.class); + intent.putExtra("patientcaseId",patientcaseId); + intent.putExtra("patientNo",patientNo); + intent.putExtra("name",name); + intent.putExtra("dataStatus",list.get(position).getDataStatus()); + startActivity(intent); + } + else if((list.get(position).getKey()+"").contains("HBVINFOSHOW")) + { + Intent intent1=new Intent(CaseDetailActivity.this,PastHistoryActivity.class); + intent1.putExtra("title","乙肝既往治疗史"); + intent1.putExtra("yongyaoId",list.get(position).getApiId()); + startActivity(intent1); + } + else if((list.get(position).getKey()+"").contains("JIXIANDATESHOW")) + { + Intent intent2=new Intent(CaseDetailActivity.this,SuifangNewActivity.class); + intent2.putExtra("title",list.get(position).getTitle()+""); + intent2.putExtra("type","1"); + intent2.putExtra("date",list.get(position).getDate()); + intent2.putExtra("suifangId",list.get(position).getApiId()); + intent2.putExtra("key",list.get(position).getKey()); + intent2.putExtra("patientcaseId",patientcaseId); +// intent2.putExtra("tree", (Serializable) list.get(position).getChildren()); + startActivity(intent2); + } + else if((list.get(position).getKey()+"").contains("SUIFANGDATESHOW")) + { + Intent intent2=new Intent(CaseDetailActivity.this,SuifangNewActivity.class); + intent2.putExtra("title",list.get(position).getTitle()+""); + intent2.putExtra("type","2"); + intent2.putExtra("patientcaseId",patientcaseId); + intent2.putExtra("key",list.get(position).getKey()); + intent2.putExtra("suifangId",list.get(position).getApiId()); +// intent2.putExtra("tree", (Serializable) list.get(position).getChildren()); + startActivity(intent2); + } + } + }); + } + else + { + suifangAdapter.notifyDataSetChanged(); + } + + + + } + String name=""; + String patientNo=""; + String name1=""; + String patientNo1=""; + String groupNo=""; + public void showwindow(String visiable) + { + + View content = LayoutInflater.from(CaseDetailActivity.this) + .inflate(R.layout.float_select_dialog, null); + TextView num2= content.findViewById(R.id.num2); + EditText editText= content.findViewById(R.id.name); + EditText numb= content.findViewById(R.id.number); + editText.setText(name); + numb.setText(patientNo); + num2.setText(visiable); + final int[] a = {0}; + final PopupWindow popupWindow = new PopupWindow(content, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + + popupWindow.setTouchable(true); + popupWindow.setFocusable(true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + content.findViewById(android.R.id.message) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + a[0] =2; + hidesoft(view); + if(editText.getText()==null|| StringUtil.isEmpty(editText.getText().toString())) + { + ToastUtil.showToast("患者名字缩写不能为空"); + return; + } + if(numb.getText()==null|| StringUtil.isEmpty(numb.getText().toString())) + { + ToastUtil.showToast("患者编号不能为空"); + return; + } + popupWindow.dismiss(); + name=editText.getText().toString(); + patientNo=numb.getText().toString(); + if("系统自动生成".equals(visiable)) + { + createinit(Url.youanadd); + } + else + { + createinits(Url.youanupdate1); + } + } + }); + content.findViewById(R.id.btn_cancel) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + a[0] =0; + hidesoft(view); + popupWindow.dismiss(); +// if("系统自动生成".equals(visiable)) +// { +// finish(); +// } + } + }); + + popupWindow.showAtLocation(l_base, Gravity.CENTER, 0, 0); + popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + if("系统自动生成".equals(visiable)) + { + if( a[0]<1) + { + finish(); + } + + } + } + }); + + } + private void hidesoft(View view) + { +// View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(CaseDetailActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.youanadd)) + { + createinit(Url.youanadd); + } + else if(url.contains(Url.youanupdate1)) + { + createinits(Url.youanupdate1); + } + else if(url.contains(Url.getPatientcaseTree)) + { + gettree(); + } + else if(url.contains(Url.getBaseInfo)) + { + getBaseInfo(); + } else if (url.contains(Url.suifangadd)) { + + suifangadd(); + } + else if (url.contains(Url.freezeData)) { + + freezeData(); + } + + } + AddPatientBean addPatientBean; + private void createinits(String url) + { + projectQueryForm2 pro=new projectQueryForm2(); + pro.setPatientNo(patientNo); + pro.setName(name); + pro.setPatientcaseId(patientcaseId); + + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + updateinfo(); + + } + else if(hasrealtoken(response)==0) + { + gettokens(url); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + name=name1; + patientNo=patientNo1; + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(CaseDetailActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + private void updateinfo() + { + num1.setText("病例入组编号:"+groupNo); + num2.setText("患者编号:"+patientNo); + num3.setText("患者姓名缩写:"+name); + } + private void createinit(String url) + { + projectQueryForm1 pro=new projectQueryForm1(); + pro.setPatientNo(patientNo); + pro.setName(name); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + Log.d("okhttp",""+new Gson().toJson(pro)); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); +// String url = Url.youanadd; + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + addPatientBean= GsonTools.fromGsonToBean(response, AddPatientBean.class); + if(addPatientBean.getData()!=null) + { + patientNo=addPatientBean.getData().getPatientNo(); + if(addPatientBean.getData().getGroupNo()!=null&&addPatientBean.getData().getGroupNo().length()>3) + { + groupNo=addPatientBean.getData().getGroupNo().substring(3); + } + + name=addPatientBean.getData().getName(); + name1=name; + patientNo1=patientNo; + updateinfo(); + + patientcaseId=addPatientBean.getData().getPatientcaseId(); + gettree(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(url); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + name=name1; + patientNo=patientNo1; + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + finish(); + } + + } + }); + } + TreeBean treeBean; + List list=new ArrayList<>(); + private void gettree() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.getPatientcaseTree+patientcaseId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + refreshLayout.finishRefresh(); + if(hasrealtoken(response)>0) + { + treeBean=GsonTools.fromGsonToBean(response,TreeBean.class); + if(treeBean.getData()!=null) + { + list.clear(); + list.addAll(treeBean.getData()); + settAdapter(); + for (TreeDetailBean treeDetailBean:list) + { + if(treeDetailBean.getKey()!=null&&treeDetailBean.getKey().contains("JIXIANDATESHOW")) + { + jixiantime=treeDetailBean.getSuifangDate(); + } + } + + } + + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.getPatientcaseTree); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + BaseInfoBean baseInfoBean; + private void getBaseInfo() + { + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.getBaseInfo+patientcaseId; + OkHttpUtils + .get() + .url(url1) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + baseInfoBean=GsonTools.fromGsonToBean(response,BaseInfoBean.class); + if(baseInfoBean.getData()!=null) + { + if("0".equals(baseInfoBean.getData().getFreezeFlag())) + { + freezeFlag=0; + change_data.setText("解冻数据"); + } + else + { + freezeFlag=1; + change_data.setText("冻结数据"); + } + if(baseInfoBean.getData().getGroupNo()!=null&&baseInfoBean.getData().getGroupNo().length()>3) + { + groupNo=baseInfoBean.getData().getGroupNo().substring(3); + } + patientNo=baseInfoBean.getData().getPatientNo(); + + name=baseInfoBean.getData().getName(); + name1=name; + patientNo1=patientNo; + updateinfo(); + + } + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.getBaseInfo); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.l_end) { + Intent intent3=new Intent(CaseDetailActivity.this,TerminationActivity.class); + startActivity(intent3); + } else if (id == R.id.l_info) { + showwindow(groupNo); + } else if (id == R.id.l_base) { + Intent intent=new Intent(CaseDetailActivity.this,InfomationActivity.class); + startActivity(intent); + } else if (id == R.id.l_yigan) { + Intent intent1=new Intent(CaseDetailActivity.this,PastHistoryActivity.class); + intent1.putExtra("title","乙肝既往治疗史"); + startActivity(intent1); + } else if (id == R.id.new_suifang) { + suifangpop(); + } else if (id == R.id.change_data) { + if(change_data.getText().toString().equals("解冻数据")) + { + freepop("解冻后病例可编辑修改,确认解冻?"); + } + else + { + freepop("病例冻结后不可编辑修改,确认冻结?"); + } + } + + } + private ECAlertDialog buildAlert; + + public void suifangpop() { + buildAlert = ECAlertDialog.buildAlert(CaseDetailActivity.this, "确认创建新的随访吗?创建随访后请先输入随访日期", "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + suifangadd(); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + public void freepop(String content) { + buildAlert = ECAlertDialog.buildAlert(CaseDetailActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + freezeFlag=freezeFlag>0?0:1; + freezeData(); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + private void freezeData() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.freezeData+patientcaseId+"/"+freezeFlag; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + freezeFlag=freezeFlag>0?0:1; + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + + if(freezeFlag==0) + { + + change_data.setText("解冻数据"); + } + else + { + change_data.setText("冻结数据"); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.freezeData); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + freezeFlag=freezeFlag>0?0:1; + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + private void suifangadd() + { + projectQueryForm2 pro=new projectQueryForm2(); + + pro.setPatientcaseId(patientcaseId); + + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + OkHttpUtils + .postString() + .url(Url.suifangadd) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + gettree(); + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangadd); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + if(patientcaseId!=null) + { + gettree(); + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseHistoryDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseHistoryDetailActivity.java new file mode 100644 index 0000000..978cbba --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseHistoryDetailActivity.java @@ -0,0 +1,310 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.CheckBox; +import android.widget.RadioGroup; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientDetailBean.MedicalHistoryContent; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 既往史详情 + * + * 类名称:CaseHistoryDetailActivity + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-16 下午8:07:43 + * + * *********************************已无用模块页面,留备用*************************************** + * + */ +public class CaseHistoryDetailActivity extends BaseActivity{ + private View mView; + private TextView et_dis_name; + private TextView et_dis_date; + private RadioGroup rg_two; + private RadioGroup rg_three; + private RadioGroup rg_four; + private CheckBox cb_five_a; + private CheckBox cb_five_b; + private CheckBox cb_five_c; + private CheckBox cb_five_d; + private CheckBox cb_five_i; + private CheckBox cb_five_h; + private CheckBox cb_five_g; + private CheckBox cb_five_f; + private CheckBox cb_five_e; + private CheckBox cb_six_a; + private CheckBox cb_six_b; + private CheckBox cb_six_c; + private CheckBox cb_six_d; + private CheckBox cb_six_e; + private CheckBox cb_six_f; + private CheckBox cb_six_g; + private CheckBox cb_six_h; + private CheckBox cb_six_i; + private CheckBox cb_six_j; + private CheckBox cb_six_k; + private CheckBox cb_seven_a; + private CheckBox cb_seven_b; + private CheckBox cb_seven_c; + private CheckBox cb_seven_d; + private CheckBox cb_seven_e; + private CheckBox cb_seven_g; + private CheckBox cb_seven_f; + private CheckBox cb_seven_h; + private MedicalHistoryContent historyContent; + + + + @Override + public void setTitle() { + top_title.setText("既往史"); + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + mView = View.inflate(this,R.layout.activity_case_history, null); + initView(); + initData(); + return mView; + } + + + /** + * + * @author ssy + * 功能说明:初始化控件 + * + * method + */ + private void initView() { + + //第一题的填空题 + et_dis_name = (TextView) mView.findViewById(R.id.et_dis_name); + et_dis_date = (TextView) mView.findViewById(R.id.et_dis_date); + //第二题单选 + rg_two = (RadioGroup) mView.findViewById(R.id.rg_two); +// rb_two_a = (RadioButton) mView.findViewById(R.id.rb_two_a); +// rb_two_b = (RadioButton) mView.findViewById(R.id.rb_two_b); +// rb_two_c = (RadioButton) mView.findViewById(R.id.rb_two_c); + //第三题单选 + rg_three = (RadioGroup) mView.findViewById(R.id.rg_three); +// rb_three_a = (RadioButton) mView.findViewById(R.id.rb_three_a); +// rb_three_b = (RadioButton) mView.findViewById(R.id.rb_three_b); +// rb_three_c = (RadioButton) mView.findViewById(R.id.rb_three_c); + //第四题单选 + rg_four = (RadioGroup) mView.findViewById(R.id.rg_four); +// rb_four_a = (RadioButton) mView.findViewById(R.id.rb_four_a); +// rb_four_b = (RadioButton) mView.findViewById(R.id.rb_four_b); + //第五题多选 + cb_five_a = (CheckBox) mView.findViewById(R.id.cb_five_a); + cb_five_b = (CheckBox) mView.findViewById(R.id.cb_five_b); + cb_five_c = (CheckBox) mView.findViewById(R.id.cb_five_c); + cb_five_d = (CheckBox) mView.findViewById(R.id.cb_five_d); + cb_five_e = (CheckBox) mView.findViewById(R.id.cb_five_e); + cb_five_f = (CheckBox) mView.findViewById(R.id.cb_five_f); + cb_five_g = (CheckBox) mView.findViewById(R.id.cb_five_g); + cb_five_h = (CheckBox) mView.findViewById(R.id.cb_five_h); + cb_five_i = (CheckBox) mView.findViewById(R.id.cb_five_i); + //第六题多选 + cb_six_a = (CheckBox) mView.findViewById(R.id.cb_six_a); + cb_six_b = (CheckBox) mView.findViewById(R.id.cb_six_b); + cb_six_c = (CheckBox) mView.findViewById(R.id.cb_six_c); + cb_six_d = (CheckBox) mView.findViewById(R.id.cb_six_d); + cb_six_e = (CheckBox) mView.findViewById(R.id.cb_six_e); + cb_six_f = (CheckBox) mView.findViewById(R.id.cb_six_f); + cb_six_g = (CheckBox) mView.findViewById(R.id.cb_six_g); + cb_six_h = (CheckBox) mView.findViewById(R.id.cb_six_h); + cb_six_i = (CheckBox) mView.findViewById(R.id.cb_six_i); + cb_six_j = (CheckBox) mView.findViewById(R.id.cb_six_j); + cb_six_k = (CheckBox) mView.findViewById(R.id.cb_six_k); + //第7题多选 + cb_seven_a = (CheckBox) mView.findViewById(R.id.cb_seven_a); + cb_seven_b = (CheckBox) mView.findViewById(R.id.cb_seven_b); + cb_seven_c = (CheckBox) mView.findViewById(R.id.cb_seven_c); + cb_seven_d = (CheckBox) mView.findViewById(R.id.cb_seven_d); + cb_seven_e = (CheckBox) mView.findViewById(R.id.cb_seven_e); + cb_seven_f = (CheckBox) mView.findViewById(R.id.cb_seven_f); + cb_seven_g = (CheckBox) mView.findViewById(R.id.cb_seven_g); + cb_seven_h = (CheckBox) mView.findViewById(R.id.cb_seven_h); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + + historyContent=(MedicalHistoryContent)getIntent().getParcelableExtra("content"); + String yi=historyContent.first; + String er=historyContent.second; + String san=historyContent.three; + String si=historyContent.four; + String wu=historyContent.five; + String liu=historyContent.six; + String qi=historyContent.seven; + + //第一题 + if (yi.contains(",")) { + String[] firstResult = yi.split(","); + + et_dis_name.setText(firstResult[0]); + et_dis_date.setText(firstResult[1]); + }else{ + et_dis_name.setText("无"); + et_dis_date.setText("无"); + } + //第2题的 + if ("A".equals(er)) { + rg_two.check(R.id.rb_two_a); + }else if ("B".equals(er)) { + rg_two.check(R.id.rb_two_b); + }else if ("C".equals(er)) { + rg_two.check(R.id.rb_two_c); + + } + //第3题的 + if ("A".equals(san)) { + rg_three.check(R.id.rb_three_a); + }else if ("B".equals(san)) { + rg_three.check(R.id.rb_three_b); + }else if ("C".equals(san)) { + rg_three.check(R.id.rb_three_c); + } + + //第4题的 + if ("A".equals(si)) { + rg_four.check(R.id.rb_four_a); + }else if ("B".equals(si)) { + rg_four.check(R.id.rb_four_b); + } + + //第5题的 + cb_five_a.setChecked(false); + cb_five_b.setChecked(false); + cb_five_c.setChecked(false); + cb_five_d.setChecked(false); + cb_five_e.setChecked(false); + cb_five_f.setChecked(false); + cb_five_g.setChecked(false); + cb_five_i.setChecked(false); + cb_five_h.setChecked(false); + if (wu != null && wu.contains(",")) { + String[] fiveResult = wu.split(","); + for (int i = 0; i < fiveResult.length; i++) { + String result = fiveResult[i]; + if ("A".equals(result)) { + cb_five_a.setChecked(true); + } else if ("B".equals(result)) { + cb_five_b.setChecked(true); + } else if ("C".equals(result)) { + cb_five_c.setChecked(true); + } else if ("D".equals(result)) { + cb_five_d.setChecked(true); + } else if ("E".equals(result)) { + cb_five_e.setChecked(true); + } else if ("F".equals(result)) { + cb_five_f.setChecked(true); + } else if ("I".equals(result)) { + cb_five_i.setChecked(true); + } else if ("G".equals(result)) { + cb_five_g.setChecked(true); + } else if ("H".equals(result)) { + cb_five_h.setChecked(true); + } + + } + } + + //第六题 + cb_six_a.setChecked(false); + cb_six_b.setChecked(false); + cb_six_c.setChecked(false); + cb_six_d.setChecked(false); + cb_six_e.setChecked(false); + cb_six_f.setChecked(false); + cb_six_g.setChecked(false); + cb_six_h.setChecked(false); + cb_six_i.setChecked(false); + cb_six_j.setChecked(false); + cb_six_k.setChecked(false); + if (liu != null && liu.contains(",")) { + String[] sixResult = liu.split(","); + for (int i = 0; i < sixResult.length; i++) { + String result = sixResult[i]; + if ("A".equals(result)) { + cb_six_a.setChecked(true); + } else if ("B".equals(result)) { + cb_six_b.setChecked(true); + } else if ("C".equals(result)) { + cb_six_c.setChecked(true); + } else if ("D".equals(result)) { + cb_six_d.setChecked(true); + } else if ("E".equals(result)) { + cb_six_e.setChecked(true); + } else if ("F".equals(result)) { + cb_six_f.setChecked(true); + } else if ("G".equals(result)) { + cb_six_g.setChecked(true); + } else if ("H".equals(result)) { + cb_six_h.setChecked(true); + }else if ("I".equals(result)) { + cb_six_i.setChecked(true); + }else if ("J".equals(result)) { + cb_six_j.setChecked(true); + }else if ("K".equals(result)) { + cb_six_k.setChecked(true); + } + } + } + //第七题 + cb_seven_a.setChecked(false); + cb_seven_b.setChecked(false); + cb_seven_c.setChecked(false); + cb_seven_d.setChecked(false); + cb_seven_e.setChecked(false); + cb_seven_f.setChecked(false); + cb_seven_g.setChecked(false); + cb_seven_h.setChecked(false); + if (qi != null && qi.contains(",")) { + String[] sevenResult = qi.split(","); + for (int i = 0; i < sevenResult.length; i++) { + String result = sevenResult[i]; + if ("A".equals(result)) { + cb_seven_a.setChecked(true); + } else if ("B".equals(result)) { + cb_seven_b.setChecked(true); + } else if ("C".equals(result)) { + cb_seven_c.setChecked(true); + } else if ("D".equals(result)) { + cb_seven_d.setChecked(true); + } else if ("E".equals(result)) { + cb_seven_e.setChecked(true); + } else if ("F".equals(result)) { + cb_seven_f.setChecked(true); + } else if ("G".equals(result)) { + cb_seven_g.setChecked(true); + } else if ("H".equals(result)) { + cb_seven_h.setChecked(true); + } + } + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseRecordActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseRecordActivity.java new file mode 100644 index 0000000..81746cc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CaseRecordActivity.java @@ -0,0 +1,304 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.CaseRecordAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CaseRecordBean; +import cn.shangyu.gdxzExpert.bean.CaseRecordBean.DatasCase; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class CaseRecordActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + + public static final int GET_CASE_RECORD_RESULT = 101; + private View view; + private PullToRefreshListView mLv_Visit; + private TextView mLoad_empty; + private CaseRecordActivity context; + private String patientUuid;// 患者id + private String patientName;// 患者名字 + private Intent mIntent; + private View ll_loading; + private String mUuid; + private int page = 1; + public static final int GET_CASERECORD_RESULT = 101; + private ArrayList mList = new ArrayList(); + private CaseRecordAdapter mAdapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("病情记录"); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.invite); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(CaseRecordActivity.this, + AddCaseRecordActivity.class); + intent.setType("add"); + intent.putExtra("patientUuid", patientUuid); + startActivityForResult(intent, 201); + } + }); + if(CommonUtil.BigModule()) + { + top_right.setVisibility(View.GONE); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("添加"); + top_right_text.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(CaseRecordActivity.this, + AddCaseRecordActivity.class); + intent.setType("add"); + intent.putExtra("patientUuid", patientUuid); + startActivityForResult(intent, 201); + } + }); + } + } + + /** + * 获取列表数据 + */ + public void getDataListResult() { + Map param = new HashMap(); + param.put("patient_uuid", patientUuid); + param.put("expert_uuid", mUuid); + param.put("page", page + ""); + sendParamtoNet(Url.getConditionRecordList, param, + GET_CASERECORD_RESULT, context, false); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_case_record); + context = this; + mUuid = SharePrefUtil.getString(context, Constant.uuid, ""); + initIntent(); + initView(); + getDataListResult(); + return view; + } + + public void initIntent() { + mIntent = getIntent(); + patientUuid = mIntent.getStringExtra("patientUuid"); + } + + public void initView() { + mLv_Visit = (PullToRefreshListView) view + .findViewById(R.id.lv_case_record); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + mLv_Visit.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + mLv_Visit.getRefreshableView().setOnItemClickListener(this); + + // setLastUpdateTime(); + mLv_Visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataListResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDataListResult(); + } + }); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Visit.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, AddCaseRecordActivity.class); + intent.setType("modify"); + intent.putExtra("caseRecord", (Serializable) mList.get(position - 1)); + startActivityForResult(intent, 202); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + CaseRecordBean bean = GsonTools.fromGsonToBean(result, + CaseRecordBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + mLv_Visit.setEmptyView(mLoad_empty); + // 完成刷新 + loaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + mList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.list); + + if (bean.data.list == null || bean.data.list.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("您暂未添加病情记录"); + } else { + mLoad_empty.setVisibility(View.GONE); + mList.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + mList.addAll(bean.data.list); + + } + // 更新病情记录 + if (mAdapter == null) { + mAdapter = new CaseRecordAdapter(mList, context); + mLv_Visit.getRefreshableView().setAdapter(mAdapter); + } else { + // mAdapter.DatasList.clear(); + // mAdapter.getPosition(); + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); +// if (bean.data.list == null || bean.data.list.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 +// ToastUtil.showMessage("没有更多病情记录了"); +// mLv_Visit.setMode(Mode.PULL_FROM_START); +// if (page > 1) +// page--; +// } else { +// mLv_Visit.setMode(Mode.BOTH); +// } + // 得到总页码数 + int totalPage = bean.totalPage; + // 是否有更多 +// if (bean.data.list == null || bean.data.list.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + if (totalPage <= 1 || totalPage < page) { + if(page != 1){ + ToastUtil.showMessage("没有更多病情记录了"); + } + mLv_Visit.setMode(Mode.PULL_FROM_START); +// if (page > 1) +// page--; + } else { + mLv_Visit.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_CASERECORD_RESULT: + processData(resultJson); + break; + + default: + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + // 添加 + case 201: + page = 1; + getDataListResult(); + break; + // 修改 + case 202: + page = 1; + getDataListResult(); + break; + // 删除 + case 203: + page = 1; + getDataListResult(); + break; + + default: + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussionActivity.java new file mode 100644 index 0000000..1b3badc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussionActivity.java @@ -0,0 +1,121 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.Button; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.CasediscussionFragment; +import cn.shangyu.gdxzExpert.fragment.MyCasediscussionFragment; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * 类名称:CasediscussionActivity + * 类描述:病例讨论 + * + */ + +public class CasediscussionActivity extends BaseActivity implements OnCheckedChangeListener { + + private RadioGroup main_radiogroup; + private FragmentManager fm; +// private LinearLayout addcase; + private Button btadd; + @Override + public void setTitle() { + top_title.setText("病例讨论"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("收藏"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_casediscussion); + main_radiogroup = (RadioGroup) view.findViewById(R.id.my_radiogroup_case); +// addcase = (LinearLayout) view.findViewById(R.id.lv_add_case); + + btadd = (Button)view.findViewById(R.id.bt_add_case_suionn); + main_radiogroup.setOnCheckedChangeListener(this); +// addcase.setOnClickListener(this); + btadd.setOnClickListener(this); + fm = getSupportFragmentManager(); + casediscussion(); + return view; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + needreportPage("病例讨论"); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.my_casediscussion) {//病例讨论 + casediscussion(); + } else if (checkedId == R.id.my_case) {//我的病例 + mycase(); + } + } + + + /** + * 切换到病例讨论 + * changeNewService + * + * void + */ + private void casediscussion() { + CasediscussionFragment casediscussionFragment = new CasediscussionFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, casediscussionFragment, "casediscussionFragment") + .commit(); + } + + /** + * 切换到我的病例 + * changeHistoryService + * + * void + */ + private void mycase() { + // TODO Auto-generated method stub + MyCasediscussionFragment mycasediscussionFragment = new MyCasediscussionFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mycasediscussionFragment, "MYcasediscussionFragment") + .commit(); + } + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + startActivity(new Intent(ct,CasediscussioncollentActivity.class)); + } else if (id == R.id.bt_add_case_suionn) {//发布我的病例 + Intent intent = new Intent(ct,AddcasediscussionActivity.class); + intent.setType("add"); + startActivityForResult(intent, 201); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussioncollentActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussioncollentActivity.java new file mode 100644 index 0000000..0222f7c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasediscussioncollentActivity.java @@ -0,0 +1,91 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.CasediscussionCollentFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * 类名称:CasediscussioncollentActivity + * 类描述:病例讨论收藏列表 + * + */ + +public class CasediscussioncollentActivity extends BaseActivity{ + + private FragmentManager fm; + @Override + public void setTitle() { + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("我的收藏"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } +// top_title.setText("我的收藏"); + top_right_text.setVisibility(View.GONE); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_casediscussion_collent); + fm = getSupportFragmentManager(); + CasediscussionCollentFragment casediscussionCollentFragment = new CasediscussionCollentFragment(); + fm.beginTransaction() + .replace(R.id.frame_collent, casediscussionCollentFragment, "casediscussionCollentFragment") + .commit(); +// casediscussion(); + return view; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + + /** + * 启动病例讨论收藏列表 + * changeNewService + * void + */ + private void casediscussion() { + CasediscussionCollentFragment casediscussionCollentFragment = new CasediscussionCollentFragment(); + fm.beginTransaction() + .replace(R.id.frame_collent, casediscussionCollentFragment, "CasediscussionCollentFragment") + .commit(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasehistoryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasehistoryActivity.java new file mode 100644 index 0000000..8e0bc9b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CasehistoryActivity.java @@ -0,0 +1,382 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CaseDetailBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author jx 记肖 + * @date2015.09.24 CasehistoryActivity.java + * + * 我的患者-患者详情-病历详情 病历详情的展示界面 + */ +public class CasehistoryActivity extends BaseActivity implements + OnItemClickListener { + private TextView tvd,tvdiseaseDate; + private TextView tvdes; + private String caseUuid; + public static String caseDetailurl = Url.getcaseDetail; + ArrayList urls = new ArrayList(); + private FrameLayout caseView; + private View topNewsView; + private RelativeLayout rl_topview; + private LinearLayout dotLl; + private TextView topNewsTitle; + private LinearLayout mViewPagerLay; + private ArrayList titleList; + private ArrayList urlList; + private RollViewPager mViewPager; + + @Override + public void setTitle() { + + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_casehistory_big, null); + tvdiseaseDate=view.findViewById(R.id.tvdiseaseDate); + } + else + { + view = View.inflate(ct, R.layout.activity_casehistory, null); + } + // 获取传值数据 + Intent intent = getIntent(); + caseUuid = intent.getStringExtra("caseUuid"); + String title = intent.getStringExtra("title"); + String des = intent.getStringExtra("des"); + tvd = (TextView) view.findViewById(R.id.tvdiseaseName);// 疾病名称 + tvdes = (TextView) view.findViewById(R.id.tvmsg);// 病情描述s + // TextView tvdiseaseDate = (TextView) + // view.findViewById(R.id.tvdiseaseDate);// 病历时间 + caseView = (FrameLayout) view.findViewById(R.id.caseview);// 病历图片 + if(CommonUtil.BigModule()) + { + + top_title.setText(intent.getStringExtra("diseaseName")); + } + else + { + // 设置标题 + if (!TextUtils.isEmpty(title)) { + top_title.setText(title); + } + } + + // 设置疾病描述 + if (!TextUtils.isEmpty(des)) { + tvdes.setText(des); + } + else + { + tvdes.setText("暂无"); + } + // gridView方式展示图片 + // gridView=(GridView) view.findViewById(R.id.gridView1); + // gridView.setAdapter(new MyAdapter(urls)); + // gridView.setOnItemClickListener(this); + + // 采用顶部viewpager展示图片 + topNewsView = View.inflate(ct, R.layout.layout_roll_case_view, null); + rl_topview = (RelativeLayout) topNewsView.findViewById(R.id.rl_topview); + dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); + dotLl.setVisibility(View.GONE); + topNewsTitle = (TextView) topNewsView.findViewById(R.id.top_news_title); + mViewPagerLay = (LinearLayout) topNewsView + .findViewById(R.id.top_news_viewpager); + // 获取缓存 + String caseInfo = SharePrefUtil.getString(ct, caseUuid, null); + if (TextUtils.isEmpty(caseInfo)) { + showProgressDialog("正在加载"); + } else { + processData(caseInfo); + } + //请求数据 + getcaseDetailList(caseDetailurl); + return view; + + } + + /** + * 类名称:MyAdapter + * gridView数据适配器 + */ + /*class MyAdapter extends BaseAdapter { + + private ArrayList list; + + public MyAdapter(ArrayList list) { + // TODO Auto-generated constructor stub + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = View.inflate(ct, + R.layout.item_casejistory_bingli, null); + mHolder = new NewsViewHolder(); + // 实例化控件 + mHolder.iv_image = (ImageView) convertView + .findViewById(R.id.iv_image); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + list.get(position).getPicurl(), + mHolder.iv_image, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default)); + return convertView; + } + + } + + private class NewsViewHolder { + public ImageView iv_image; + }*/ + + /** + * 解析并处理数据 + * + * @param result + */ + + private void processData(String result) { + closeProgressDialog(); + CaseDetailBean bean = GsonTools.fromGsonToBean(result, + CaseDetailBean.class); + if (StringUtil.isOneToCode(bean.code)) { + return; + } + urls.clear(); + // 先判断数据是否 为空 + if (bean.data == null) { + return; + } + + + +// 显示疾病描述 + if (!TextUtils.isEmpty(bean.data.des)) { + tvdes.setText(bean.data.des); + } + else + { + tvdes.setText("暂无"); + } + if(CommonUtil.BigModule()) + { + //显示标题 + + if (!TextUtils.isEmpty(bean.data.diseaseName)) { + top_title.setText(bean.data.diseaseName); + tvd.setText (bean.data.diseaseName); + } else { + tvd.setText("暂无"); + } + if (!TextUtils.isEmpty(bean.data.createDate) && + bean.data.createDate.length() >= 9) { + tvdiseaseDate.setText(bean.data.createDate.substring(0, 10)); + }else { + tvdiseaseDate.setText(bean.data.createDate); + } + } + else + { + //显示标题 + if (!TextUtils.isEmpty(bean.data.title)) { + top_title.setText(bean.data.title); + } + //显示疾病名称 + if (!TextUtils.isEmpty(bean.data.diseaseName)) { + tvd.setText(getString(R.string.case_diseaseName, + bean.data.diseaseName)); + } else { + tvd.setText(getString(R.string.case_diseaseName, "暂无")); + } + } + + // 初始化图片数据 + titleList = new ArrayList(); + urlList = new ArrayList(); + if (bean.img != null && bean.img.size() != 0) { + for (int i = 0; i < bean.img.size(); i++) { + urls.add(new ViewImageInfo(i, Url.urlHtml+ bean.img.get(i).path, Url.urlHtml+ bean.img.get(i).path)); + + titleList.add(i + 1 + "/" + bean.img.size()); + if (!TextUtils.isEmpty(bean.img.get(i).path)) { + urlList.add(Url.urlHtml + bean.img.get(i).path);// //封面图片 + } else { + urlList.add("");//添加空数据 + } + + } + // 填充适配器 + // MyAdapter adapter = new MyAdapter(urls); + // gridView.setAdapter(adapter); + + // 根据手机尺寸设置顶部轮播图的宽高 + int width = this.getResources().getDisplayMetrics().widthPixels; + int height = this.getResources().getDisplayMetrics().heightPixels; + LayoutParams ivLp = caseView.getLayoutParams(); +// RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( +// ViewGroup.LayoutParams.WRAP_CONTENT, +// ViewGroup.LayoutParams.WRAP_CONTENT); + ivLp.width = width; + ivLp.height = height / 2; + // 动态设置图片宽高 + rl_topview.setLayoutParams(ivLp); + mViewPagerLay.setLayoutParams(ivLp); + caseView.setLayoutParams(ivLp); + caseView.removeAllViews(); + caseView.addView(topNewsView); + // 初始化图片 + ArrayList dotList = new ArrayList(); + mViewPager = new RollViewPager(ct, dotList, R.drawable.dot_focus, + R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + CCPAppManager.startChattingImageViewAction( + CasehistoryActivity.this, position, urls); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + mViewPager.setTitle(topNewsTitle, titleList); + //轮播图开始滚动 + mViewPager.startRoll(); + //加载到控件布局上 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + caseView.removeAllViews(); + caseView.addView(topNewsView); + } else { + titleList.add("无化验报告"); + urlList.add(""); + TextView textView = new TextView(ct); + textView.setText("无检查化验报告"); + if(CommonUtil.BigModule()) + { + textView.setTextSize(20); + } + caseView.removeAllViews(); + caseView.addView(textView); + } + } + + /** + * 请求服务器。获取病例图片列表数据 getcaseDetailList + */ + private void getcaseDetailList(final String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("caseUuid", caseUuid);// 病历uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, caseUuid, info.result); + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("请求数据失败,请稍候再试"); + } + }); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // 启动图片查看器 + CCPAppManager.startChattingImageViewAction(CasehistoryActivity.this, + arg2, urls); + + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ChangePasswordActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ChangePasswordActivity.java new file mode 100644 index 0000000..da47392 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ChangePasswordActivity.java @@ -0,0 +1,236 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ChangePasswordActivity.java + * + * @author JX + * @date 2015-10-21 + * 我的-设置-修改密码 + * 功能说明:修改登录密码页面 + */ +public class ChangePasswordActivity extends BaseActivity { + private EditText old_paw; + private EditText new_paw; + private EditText sure_paw; + private Button btsu; + private String newRePwd; + private String newPwd; + private String oldPwd; + public static int ERROR = 101; + TextView tv_forget; + + @Override + public void setTitle() { + top_title.setText("修改登录密码"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + + { + view = UIUtils.inflate(R.layout.activity_change_password_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_change_password); + } + old_paw = (EditText) view.findViewById(R.id.old_password);// 原密码 + old_paw.setOnFocusChangeListener(onFocusAutoClearHintListener);// 设置输入框获得焦点hint提示消失 + new_paw = (EditText) view.findViewById(R.id.new_password);// 新密码 + new_paw.setOnFocusChangeListener(onFocusAutoClearHintListener); + sure_paw = (EditText) view.findViewById(R.id.sure_password);// 确定新密码 + sure_paw.setOnFocusChangeListener(onFocusAutoClearHintListener); + btsu = (Button) view.findViewById(R.id.bt_sure);// 确定按钮 + btsu.setOnClickListener(this);// 设置监听 + tv_forget=view.findViewById(R.id.tv_forget); + tv_forget.setOnClickListener(this); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("修改登录密码"); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + // 修改密码 + private void btsu() { + + oldPwd = old_paw.getText().toString().trim();// 获取输入的原始密码 + newPwd = new_paw.getText().toString().trim();// 获取输入的新密码 + newRePwd = sure_paw.getText().toString().trim();// 获取在此确定输入的新密码 + // 获取专家的uuid + final String expertUuid = SharePrefUtil + .getString(ct, Constant.uuid, ""); + //数据验证 + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络暂时不可用"); + return; + } + if (TextUtils.isEmpty(oldPwd)) { + ToastUtil.showToast("请输入原密码"); + old_paw.requestFocus(); + return; + } + if (TextUtils.isEmpty(newPwd)) { + ToastUtil.showToast("请输入新密码"); + new_paw.requestFocus(); + return; + } + if (!ValidateUtils.isPassword(newPwd)) { + ToastUtil.showToast("新密码必须为6~16位字母与数字"); + return; + } + if (TextUtils.isEmpty(newRePwd)) { + ToastUtil.showToast("请输入确认的新密码"); + sure_paw.requestFocus(); + return; + } + if (!newPwd.equals(newRePwd)) { + ToastUtil.showToast("输入的两次密码不一致"); + sure_paw.requestFocus(); + return; + } + showProgressDialog("提交中,请稍候..."); +// 提交数据 + new Thread() { + + public void run() { + // 向后台传需要的参数 oriPwd password expertUuid + List parameters = new ArrayList(); + BasicNameValuePair value1 = new BasicNameValuePair("oriPwd", oldPwd); + BasicNameValuePair value2 = new BasicNameValuePair("password", newPwd); + BasicNameValuePair value3 = new BasicNameValuePair("expertUuid", expertUuid); + parameters.add(value1); + parameters.add(value2); + parameters.add(value3); + LogUtil.i("oriPwd=" + oldPwd+" newPwd=" + newPwd+" expertUuid=" + expertUuid); + try { + HttpResult httpResult = HttpHelper.post(Url.getmodifyPwd, + parameters);// 请求网络 + LogUtil.i(httpResult + "httpResult"); + String str = httpResult.getString();// str为服务器返回的json串 + JSONObject objs = new JSONObject(str); + String retcode = objs.getString("code"); // 为返回过来的retcode + LogUtil.i("更改密码str:" + str + "retcode====" + retcode); + if ("1".equals(retcode)) { + handler.sendEmptyMessage(100); + } + if ("2".equals(retcode)) { + handler.sendEmptyMessage(102); + } + if ("3".equals(retcode)) { + handler.sendEmptyMessage(103); + } + } catch (Exception e) { + // 说明自己服务器返回数据失败 + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + }; + }.start(); + } + + public Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + closeProgressDialog(); + if (msg.what == ERROR) { + ToastUtil.showToast("提交失败,请重试"); + } else if (msg.what == 100) { + ToastUtil.showToast("修改密码成功,请下次用新密码登录"); + finish(); + // restartAPP(); + } else if (msg.what == 102) { + ToastUtil.showToast("密码修改失败,请重试"); + } else if (msg.what == 103) { + ToastUtil.showToast("原密码输入错误,请重新输入"); + } + }; + }; + + //重启app + public void restartAPP() { + Intent intent = new Intent(this, LoginNewActivity.class); + + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_forget) { + Intent i = new Intent(this, ForgetActivity.class); + i.putExtra("mobile", ""); + startActivity(i); + } else if (id == R.id.bt_sure) { + btsu(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ChoosehospitalActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ChoosehospitalActivity.java new file mode 100644 index 0000000..6ab9e45 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ChoosehospitalActivity.java @@ -0,0 +1,1109 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.AsyncTask; +import android.os.Build; +import android.os.IBinder; +import android.text.Editable; +import android.text.Html; +import android.text.TextPaint; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import chihane.jdaddressselector.DataProvider; +import chihane.jdaddressselector.ISelectAble; +import chihane.jdaddressselector.SelectedListener; +import chihane.jdaddressselector.Selector; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AreaBean; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.HospitalBean; +import cn.shangyu.gdxzExpert.bean.SearchHospitalBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class ChoosehospitalActivity extends BaseActivity implements AdapterView.OnItemClickListener, OnCallBackFromNet { + private SQLiteDatabase db; + private String prov_id="";// 省ID + private String city_id=""; + private String county_id=""; + String name=""; + private List provinceList; + // 省市区list + private List province = new ArrayList(); + private List> city = new ArrayList>(); + private List>> county = new ArrayList>>(); + private List> cityIdList = new ArrayList>(); + private List>> countyIdList = new ArrayList>>(); + private PullToRefreshListView ptrLv; + RelativeLayout rl,rp; + Boolean isprovince=true,iscity=false,iscounty=false,ishos=false; + private String currentProvince, currentCity, currentCounty; + ArrayList serachdata = new ArrayList<>(); + EditText tv_top_search; + private String parent_id=""; + private List pro=new ArrayList<>(); + private List ci=new ArrayList<>(); + private List co=new ArrayList<>(); +// private String hospitalName="null"; + @Override + public void setTitle() { + top_title.setText("选择医院"); +// top_back_layout.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +//// if(isprovince) +//// { +//// finish(); +//// } +//// else if(iscity) +//// { +//// ptrLv.getRefreshableView().setAdapter(new ArrayAdapter(ChoosehospitalActivity.this, R.layout.item_list_tools, province)); +//// isprovince=true; +//// iscity=false; +//// } +//// else if(iscounty) +//// { +//// ptrLv.getRefreshableView().setAdapter(new ArrayAdapter(ChoosehospitalActivity.this, R.layout.item_list_tools, city.get(oldposition-1))); +//// iscity=true; +//// iscounty=false; +//// } +//// else if(ishos) +//// { +//// +//// } +// } +// }); + } + private String flag = "dfasfsaf"; + private String blackText; + private LinearLayout ll_empty; + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_choosehospital); + + rl=view.findViewById(R.id.rl); + rp=view.findViewById(R.id.rp); + tv_top_search=view.findViewById(R.id.tv_top_search); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + TextView tv_empty_msg =ll_empty.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText(getResources().getString(R.string.nohos)); + ptrLv = view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + ptrLv.setMode(PullToRefreshBase.Mode.DISABLED); +// new InitAreaTask().execute(); + // 得到实际的ListView 设置点击 + showDialog(); +// getFirstArea(); + ptrLv.getRefreshableView().setOnItemClickListener(this); + + + tv_top_search.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) { + rl.setVisibility(View.GONE); + rp.setVisibility(View.VISIBLE); + } else { + + } + } + }); + + tv_top_search.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + + + String s1 = s.toString().trim(); + blackText = s1; + TextPaint tp = tv_top_search.getPaint(); + if (flag.equals(s1)){ + + tp.setFakeBoldText(false); + }else if (s1==null||"".equals(s1)){ + + tp.setFakeBoldText(false); + }else if (!TextUtils.isEmpty(s1)){ + tp.setFakeBoldText(true); + name=s1; + getnameData(); + }else { + + tp.setFakeBoldText(false); + } + } + + + + }); + + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + int oldposition,position; + @Override + public void onItemClick(AdapterView adapterView, View view, int p, long l) { + hideSoftKeyboard(); +// hospitalName=serachdata.get(p-1).getName(); + Intent intent = new Intent(); + intent.putExtra("hospitalName",serachdata.get(p-1).getName()); + intent.putExtra("hospitalUuid",serachdata.get(p-1).getUuid()); + intent.putExtra("provinceId",serachdata.get(p-1).getProv_id()); + intent.putExtra("cityId",serachdata.get(p-1).getCity_id()); + intent.putExtra("disctictId",serachdata.get(p-1).getCounty_id()); + setResult(333, intent); + finish(); +// if(isprovince) +// { +// oldposition=p; +// ptrLv.getRefreshableView().setAdapter(new ArrayAdapter(ChoosehospitalActivity.this, R.layout.item_list_tools, city.get(p-1))); +// isprovince=false; +// iscity=true; +// } else if(iscity) +// { +// position=p; +// ptrLv.getRefreshableView().setAdapter(new ArrayAdapter(ChoosehospitalActivity.this, R.layout.item_list_tools, county.get(oldposition-1).get(p-1))); +// iscity=false; +// iscounty=true; +// } +// else if(iscounty) +// { +// +// } + } + /** + * hide inputMethod + */ + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) + getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + SearchHospitalBean searchHospitalBean; + AreaBean areaBean; +// Map> repeat; + List duplicateId; + @RequiresApi(api = Build.VERSION_CODES.N) + public List getDuplicateValue(List list, Function function) { + + Map frequencies = list.stream().collect(Collectors.groupingBy(function, Collectors.counting())); + return frequencies.entrySet().stream() + .filter(entry -> entry.getValue() > 1).map(entry -> entry.getKey()).collect(Collectors.toList()); + + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 103: + showDialog(); + areaBean= GsonTools.fromGsonToBean(resultJson,AreaBean.class); + if("200".equals(areaBean.code)) { + if (areaBean.getData() != null && areaBean.getData().size() > 0) + { + pro.clear(); + pro.addAll(areaBean.getData()); + receiverr.send(getAreDatas(pro)); + } + + + + } + else + { + ToastUtil.showToast(areaBean.message); + } + break; + case 102: + areaBean= GsonTools.fromGsonToBean(resultJson,AreaBean.class); + + if("200".equals(areaBean.code)) { + if(isprovince) + { + if (areaBean.getData() != null && areaBean.getData().size() > 0) + { + pro.clear(); + pro.addAll(areaBean.getData()); + receiverr.send(getAreDatas(pro)); + } + } + else if(iscity) + { + if (areaBean.getData() != null && areaBean.getData().size() > 0) + { + ci.clear(); + ci.addAll(areaBean.getData()); + receiverr.send(getAreDatas(ci)); + } + } + else if(iscounty) + { + co.clear(); + if (areaBean.getData() != null && areaBean.getData().size() > 0) + { + ishos=false; + co.addAll(areaBean.getData()); + receiverr.send(getAreDatas(co)); + } + if(co.size()==0) + { + ishos=true; + iscounty=false; + prov_id=oldposition+""; + city_id=position+""; + county_id=""; + getData(); + } + + } + + } + else + { + ToastUtil.showToast(areaBean.message); + } + break; + case 101: + searchHospitalBean= GsonTools.fromGsonToBean(resultJson,SearchHospitalBean.class); +// repeat=null; + if("200".equals(searchHospitalBean.code)) { + serachdata.clear(); + if (searchHospitalBean.getData() != null && searchHospitalBean.getData().size() > 0) { + + serachdata.addAll(searchHospitalBean.getData()); +// Map frequencies = serachdata.stream().collect(Collectors.groupingBy(HospitalBean::getName, Collectors.counting())); +// Map collect = serachdata.stream().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); + duplicateId = getDuplicateValue(serachdata,HospitalBean->HospitalBean.getName()); +// repeat= serachdata.stream().collect(groupingBy(HospitalBean::getName)); + rp.setVisibility(View.VISIBLE); + HospitalListAdapter adapter = new HospitalListAdapter(serachdata); + ptrLv.setAdapter(adapter); + } + else + { + + ptrLv.setEmptyView(ll_empty); + } + } + break; + case 1: + searchHospitalBean= GsonTools.fromGsonToBean(resultJson,SearchHospitalBean.class); + + if("200".equals(searchHospitalBean.code)) { + serachdata.clear(); +// if (searchHospitalBean.getData()!=null&&searchHospitalBean.getData().size()>0) { + + serachdata.addAll(searchHospitalBean.getData()); + receiverr.send(getSerDatas()); + +// } + } + else + { + ToastUtil.showToast(searchHospitalBean.message); + } + + break; + } + + } + + // 加载城市数据,耗时操作 + private class InitAreaTask extends AsyncTask { + + public InitAreaTask() { + + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + + if (result) { + // 初始化联动划框 +// ptrLv.getRefreshableView().setAdapter(new ArrayAdapter(ChoosehospitalActivity.this, R.layout.item_list_tools, province)); + showDialog(); + } else { + ToastUtil.showToast("城市数据初始化失败"); + } + +// showDialog(); + } + + } + private void getData() { + Map map = new HashMap<>(); + + map.put("prov_id",prov_id); + map.put("city_id",city_id); + map.put("county_id",county_id); + map.put("name",""); + sendJsonPostParamtoNetSignMD5(Url.hospitalListnew,map,1,this); + } + private void getnameData() { + Map map = new HashMap<>(); + map.put("prov_id",prov_id); + map.put("city_id",city_id); + map.put("county_id",county_id); + map.put("name",name); + sendJsonPostParamtoNetSignMD5(Url.hospitalListnew,map,101,this); + } + private void getArea() { + Map map = new HashMap<>(); + map.put("parent_id",parent_id); + + sendJsonPostParamtoNetSignMD5(Url.areaList,map,102,this); + } + private void getFirstArea() { + Map map = new HashMap<>(); + map.put("parent_id",""); + + sendJsonPostParamtoNetSignMD5(Url.areaList,map,103,this); + } + DataProvider.DataReceiver receiverr; + private void showDialog() { + Selector selector = new Selector(this, 4); + + selector.setDataProvider(new DataProvider() { + @Override + public void provideData(int currentDeep, int preId, DataReceiver receiver) { + receiverr=receiver; + //根据tab的深度和前一项选择的id,获取下一级菜单项 + switch (currentDeep) + { + case 0: + isprovince=true; + iscity=false; + iscounty=false; + parent_id=""; + prov_id=""; + city_id=""; + county_id=""; + getArea(); +// receiver.send(getProDatas()); + break; + case 1: + isprovince=false; + iscity=true; + iscounty=false; + oldposition=preId; + parent_id=preId+""; + prov_id=oldposition+""; + city_id=""; + county_id=""; + getArea(); + +// receiver.send(getCityDatas(preId)); + break; + case 2: + isprovince=false; + iscity=false; + iscounty=true; + parent_id=preId+""; + position=preId; + prov_id=oldposition+""; + city_id=position+""; + county_id=""; + + getArea(); + + + break; + case 3: + if(ishos) + { + + ArrayList data = new ArrayList<>(); + receiver.send(data); + + } + else + { + prov_id=oldposition+""; + city_id=position+""; + county_id=preId+""; + + getData(); + } + + break; + + } + + } + }); + selector.setSelectedListener(new SelectedListener() { + @Override + public void onAddressSelected(ArrayList selectAbles) { + String result = ""; +// for (ISelectAble selectAble : selectAbles) { +// result += selectAble.getName()+" "; +// } + + Intent intent = new Intent(); + if(selectAbles.size()==3||selectAbles.get(3)==null||selectAbles.get(3).getUuid()==null) + { + intent.putExtra("hospitalName",selectAbles.get(2).getName()); + intent.putExtra("hospitalUuid",selectAbles.get(2).getUuid()); + } + else + { + intent.putExtra("hospitalName",selectAbles.get(3).getName()); + intent.putExtra("hospitalUuid",selectAbles.get(3).getUuid()); + } + + intent.putExtra("provinceId",prov_id); + intent.putExtra("cityId",city_id); + intent.putExtra("disctictId",county_id); + setResult(333, intent); + finish(); +// Toast.makeText(MainActivity.this,result,Toast.LENGTH_SHORT).show(); + } + }); + rl.addView(selector.getView()); +// setContentView(selector.getView()); +// BottomDialog dialog = new BottomDialog(this); +// dialog.init(this,selector); +// dialog.show(); + } +// private ArrayList getProDatas() { +// int count = province.size(); +// ArrayList data = new ArrayList<>(count); +// for (int j = 0; j < count; j++) { +// final int finalJ = j; +// data.add(new ISelectAble() { +// @Override +// public String getName() { +// return province.get(finalJ); +// } +// +// @Override +// public int getId() { +// return finalJ; +// } +// +// @Override +// public String county_name() { +// return null; +// } +// +// @Override +// public String city_name() { +// return null; +// } +// +// @Override +// public String prov_name() { +// return null; +// } +// +// +// }); +// } +// return data; +// } +// private ArrayList getCityDatas(int p) { +// int count = city.get(p).size(); +// ArrayList data = new ArrayList<>(count); +// for (int j = 0; j < count; j++) { +// final int finalJ = j; +// data.add(new ISelectAble() { +// @Override +// public String getName() { +// return city.get(p).get(finalJ); +// } +// +// @Override +// public int getId() { +// return finalJ; +// } +// +// @Override +// public String county_name() { +// return null; +// } +// +// @Override +// public String city_name() { +// return null; +// } +// +// @Override +// public String prov_name() { +// return null; +// } +// +// +// }); +// } +// return data; +// } +// private ArrayList getCouDatas(int p) { +// int count = county.get(oldposition).get(p).size(); +// ArrayList data = new ArrayList<>(count); +// for (int j = 0; j < count; j++) { +// final int finalJ = j; +// data.add(new ISelectAble() { +// @Override +// public String getName() { +// return county.get(oldposition).get(p).get(finalJ); +// } +// +// @Override +// public int getId() { +// return finalJ; +// } +// +// @Override +// public String county_name() { +// return null; +// } +// +// @Override +// public String city_name() { +// return null; +// } +// +// @Override +// public String prov_name() { +// return null; +// } +// +// +// }); +// } +// return data; +// } + private ArrayList getNoDatas() { + ArrayList data = new ArrayList<>(); + + + data.add(new ISelectAble() { + @Override + public String getName() { + return null; + } + + @Override + public int getId() { + return -1; + } + + @Override + public String getUuid() { + return null; + } + + @Override + public String county_name() { + return null; + } + + @Override + public String city_name() { + return null; + } + + @Override + public String prov_name() { + return null; + } + + + }); + + return data; + } + private ArrayList getSerDatas() { + int count = serachdata.size(); + ArrayList data = new ArrayList<>(count+1); + for (int j = 0; j < count; j++) { + final int finalJ = j; + data.add(new ISelectAble() { + @Override + public String getName() { + return serachdata.get(finalJ).getName(); + } + + @Override + public int getId() { + return finalJ; + } + + @Override + public String getUuid() { + return serachdata.get(finalJ).getUuid(); + } + + @Override + public String county_name() { + return serachdata.get(finalJ).getCounty_name(); + } + + @Override + public String city_name() { + return serachdata.get(finalJ).getCity_name(); + } + + @Override + public String prov_name() { + return serachdata.get(finalJ).getProv_name(); + } + + + }); + } + data.add(new ISelectAble() { + @Override + public String getName() { + return "其他医院"; + } + + @Override + public int getId() { + return count+1; + } + + @Override + public String getUuid() { + return "1"; + } + + @Override + public String county_name() { + return serachdata.get(0).getCounty_name(); + } + + @Override + public String city_name() { + return serachdata.get(0).getCity_name(); + } + + @Override + public String prov_name() { + return serachdata.get(0).getProv_name(); + } + + + }); + return data; + } + private ArrayList getAreDatas(List are) { + int count ; + if(are==null) + { + count =0; + } + else + { + count =are.size(); + } + ArrayList data = new ArrayList<>(count); + for (int j = 0; j < count; j++) { + final int finalJ = j; + data.add(new ISelectAble() { + @Override + public String getName() { + return are.get(finalJ).getName(); + } + + @Override + public int getId() { + return are.get(finalJ).getId(); + } + + @Override + public String getUuid() { + return null; + } + + @Override + public String county_name() { + + return null; + } + + @Override + public String city_name() { + return null; + } + + @Override + public String prov_name() { + return null; + } + + + }); + } + return data; + } + /* + * 实例化城市,从数据库检出城市列表 + */ + private boolean areaData() { + SQLdm s = new SQLdm(); + db = s.openDatabase(this); + provinceList = new ArrayList(); + if (db != null) { + db.beginTransaction(); + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + + } + // 如果只有市区没有区县,为了不为空,则手动添加“”; + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 + db.endTransaction(); + return true; + } else { + return false; + } + } + class HospitalListAdapter extends BaseAdapter { + + private List data; + public HospitalListAdapter(List data) { + this.data = data; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + + convertView = UIUtils.inflate(R.layout.item_hospital_item_new); + + + vh = new ViewHolder(); + vh.tv_name = convertView.findViewById(R.id.tv_name); + vh.tv_name1 = convertView.findViewById(R.id.tv_name1); + vh.tv_name2 = convertView.findViewById(R.id.tv_name2); + + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + + String name = data.get(position).getName(); + String location=data.get(position).getProv_name()+"-"+data.get(position).getCity_name(); + if(!StringUtil.isEmpty(data.get(position).getCounty_name())) + { + location+="-"+data.get(position).getCounty_name(); + } + location="("+location+")"; + String[] split = name.split(blackText); + if(duplicateId==null||duplicateId.size()==0||(duplicateId.stream() + .filter(customer -> name.equals(customer)) + .findAny() + .orElse(null)==null)) + { + if (StringUtil.isEmpty(blackText)){ + rp.setVisibility(View.GONE); + }else if (split.length>0&&StringUtil.isEmpty(split[0])){ +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp.setFakeBoldText(true); +// tp1.setFakeBoldText(false); +// tp2.setFakeBoldText(false); + String content = "" +blackText+ ""; + vh.tv_name.setText(Html.fromHtml(content)); +// vh.tv_name.setText(blackText); + if (split.length>1){ + content = "" +blackText+ ""+ split[1] ; + vh.tv_name.setText(Html.fromHtml(content)); +// vh.tv_name1.setText(split[1]); + } + + }else if (split.length==1){ +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp1.setFakeBoldText(true); +// tp2.setFakeBoldText(false); +// tp.setFakeBoldText(false); + String content = split[0]+"" + blackText + ""; + vh.tv_name.setText(Html.fromHtml(content)); +// vh.tv_name1.setText(blackText); +// vh.tv_name.setText(split[0]); + }else if (split.length>0){ +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp1.setFakeBoldText(true); +// tp2.setFakeBoldText(false); +// tp.setFakeBoldText(false); + String content = split[0]+"" + blackText + ""; + vh.tv_name.setText(Html.fromHtml(content)); +// vh.tv_name1.setText(blackText); +// vh.tv_name.setText(split[0]); + if (split.length>1){ +// vh.tv_name2.setText(split[1]); + content = split[0]+"" + blackText + ""+split[1]; + vh.tv_name.setText(Html.fromHtml(content)); + } + } + else + { + TextPaint tp = vh.tv_name.getPaint(); + TextPaint tp1 = vh.tv_name1.getPaint(); + TextPaint tp2 = vh.tv_name2.getPaint(); + tp1.setFakeBoldText(true); + tp2.setFakeBoldText(false); + tp.setFakeBoldText(false); +// vh.tv_name1.setText(blackText); + String content = "" + blackText + ""; + vh.tv_name.setText(Html.fromHtml(content)); + } + } + else + { + + if(duplicateId.stream() + .filter(customer -> name.equals(customer)) + .findAny() + .orElse(null)!=null) + { + if (split.length>0&&StringUtil.isEmpty(split[0])){ +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp.setFakeBoldText(true); +// tp1.setFakeBoldText(false); +// tp2.setFakeBoldText(false); + String content = "" +blackText+ ""; + vh.tv_name.setText(Html.fromHtml(content)+location); + if (split.length>1){ + content ="" +blackText+ ""+ split[1]+location ; + vh.tv_name.setText(Html.fromHtml(content)); + } +// vh.tv_name.setText(blackText); +// if (split.length>1){ +// vh.tv_name1.setText(split[1]+location); +// } + + }else if (split.length==1){ +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp1.setFakeBoldText(true); +// tp2.setFakeBoldText(false); +// tp.setFakeBoldText(false); + String content = split[0]+"" + blackText+location + ""; + vh.tv_name.setText(Html.fromHtml(content)); +// vh.tv_name1.setText(blackText+location); +// vh.tv_name.setText(split[0]); + }else if (split.length>0){ +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp1.setFakeBoldText(true); +// tp2.setFakeBoldText(false); +// tp.setFakeBoldText(false); + String content = split[0]+"" + blackText + ""; + vh.tv_name.setText(Html.fromHtml(content)); + if (split.length>1){ + content = split[0]+"" + blackText + ""+split[1]+location; + vh.tv_name.setText(Html.fromHtml(content)); + } +// vh.tv_name1.setText(blackText); +// vh.tv_name.setText(split[0]); +// if (split.length>1){ +// vh.tv_name2.setText(split[1]+location); +// } + } + else + { +// TextPaint tp = vh.tv_name.getPaint(); +// TextPaint tp1 = vh.tv_name1.getPaint(); +// TextPaint tp2 = vh.tv_name2.getPaint(); +// tp1.setFakeBoldText(true); +// tp2.setFakeBoldText(false); +// tp.setFakeBoldText(false); +// vh.tv_name1.setText(blackText+location); + String content = "" + blackText +location+ ""; + vh.tv_name.setText(Html.fromHtml(content)); + } + } + } + + + return convertView; + } + + public class ViewHolder { + + public TextView tv_name,tv_name1,tv_name2; + + + } + + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CommunicationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CommunicationActivity.java new file mode 100644 index 0000000..55b9b75 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CommunicationActivity.java @@ -0,0 +1,99 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RelativeLayout; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author CommunicationActivity 圈内交流启动界面 + * + */ +public class CommunicationActivity extends BaseActivity { + + private RelativeLayout comm,rl_huodong; + private RelativeLayout casedis; + private RelativeLayout office_work; + private RelativeLayout casesuions; + private RelativeLayout mRl_video; + private RelativeLayout mRl_hudong; + private RelativeLayout mRl_zhaomu; + private RelativeLayout mRl_kejian; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("圈内交流"); + top_right.setVisibility(View.GONE); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_communication_icon); + comm = (RelativeLayout) view.findViewById(R.id.rl_communication); + rl_huodong=view.findViewById(R.id.rl_huodong); + office_work = (RelativeLayout) view.findViewById(R.id.rl_office_work); + casesuions = (RelativeLayout) view.findViewById(R.id.rl_casesuions); + casedis = (RelativeLayout) view.findViewById(R.id.rl_casediscussion); + mRl_video = (RelativeLayout) view.findViewById(R.id.rl_video); + mRl_hudong = (RelativeLayout) view.findViewById(R.id.rl_hudong); + mRl_zhaomu = (RelativeLayout) view.findViewById(R.id.rl_lczhaomu); + mRl_kejian=(RelativeLayout) view.findViewById(R.id.rl_kejian); + comm.setOnClickListener(this); + rl_huodong.setOnClickListener(this); + casedis.setOnClickListener(this); + office_work.setOnClickListener(this); + casesuions.setOnClickListener(this); + mRl_video.setOnClickListener(this); + mRl_hudong.setOnClickListener(this); + mRl_zhaomu.setOnClickListener(this); + mRl_kejian.setOnClickListener(this); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_huodong) {//肝胆活动 + startActivity(new Intent(ct, GanDanEventActivity.class)); + } else if (id == R.id.rl_communication) { + startActivity(new Intent(ct, GanDanEventActivity.class)); + } else if (id == R.id.rl_casediscussion) {// 新手教程 + startActivity(new Intent(ct, NewLessonsActivity.class)); + } else if (id == R.id.rl_office_work) {// 经典病例 + Intent intent = new Intent(ct, MyCicleActivity.class); + startActivity(intent); + } else if (id == R.id.rl_casesuions) {// 病例交流 + startActivity(new Intent(ct, CasediscussionActivity.class)); + } else if (id == R.id.rl_video) {// 肝胆视频 + startActivity(new Intent(ct, VideoActivity.class)); + } else if (id == R.id.rl_hudong) {// 互动圈 + startActivity(new Intent(ct, GanDanHouseActivity.class)); + } else if (id == R.id.rl_lczhaomu) {// 临床招募 + startActivity(new Intent(ct, LinChuangActivity.class)); + } else if (id == R.id.top_back_layout) { + finish(); + } else if (id == R.id.rl_kejian) { + startActivity(new Intent(ct, CoursewareActivity.class)); +// ToastUtil.showMessage("开通在即,敬请期待"); + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ConfirmActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ConfirmActivity.java new file mode 100644 index 0000000..c19f986 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ConfirmActivity.java @@ -0,0 +1,202 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.DataOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.scanurl; + +public class ConfirmActivity extends BaseActivity { + + private BaseActivity ctx; + private Button confirm; + private Button cancel; + + String str; + String strcan; + Boolean iscan=true; + + @Override + public void setTitle() { + ctx=this; +// layout_top.setBackgroundColor(ConfirmActivity.this.getResources().getColor( +// R.color.top_bg)); + top_title.setText("扫码登录"); + str=getIntent().getStringExtra("scancode"); + strcan=getIntent().getStringExtra("canfinres"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view= UIUtils.inflate(R.layout.activity_confirm); + confirm=view.findViewById(R.id.confirm); + cancel=view.findViewById(R.id.cancel); + confirm.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + new Thread(new Runnable() { + @Override + public void run() { + if(str!=null) + { + iscan=false; + getTooken1(scanurl,str); + } + + } + }).start(); + } + }); + cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new Thread(new Runnable() { + @Override + public void run() { + if(str!=null) + { + iscan=false; + getTooken1(scanurl,strcan); + } + + } + }).start(); + } + }); + return view; + } + + @Override + protected void onStop() { + super.onStop(); + if(iscan) + { + new Thread(new Runnable() { + @Override + public void run() { + getTooken1(scanurl,strcan); + + + } + }).start(); + } + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + public Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case 101: + finish(); + break; + case 102: + + try { + String str = (String) msg.obj; + Log.d("saoresult" , "授权成功"+str);//{"code":1,"message":"授权成功"} + JSONObject objs = new JSONObject(str); +// int retcode = objs.optInt("code"); +// String expertuuid = objs.getString("expertUuid"); + String message = objs.getString("message"); + + ToastUtil.showMessage(message,1); + // Log.d("saoresult" , "i am here message"); + finish(); + } catch (JSONException e) { + e.printStackTrace(); + // ToastUtil.showMessage("服务器异常!"); + finish(); + } + break; + + + } + + } + + }; + private void getTooken1(String urlStringUtil,String param) { + // TODO Auto-generated method stub + + Log.d("saoresult" , urlStringUtil); + try { + String data="message="+ URLEncoder.encode(param,"UTF-8"); + URL url = new URL(urlStringUtil); + + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); + + conn.setConnectTimeout(5 * 1000); + DataOutputStream dos=new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(data); + dos.flush(); + dos.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Log.d("saoresult" , result); + if(strcan.equals(param)) + { + Message message = new Message(); + message.what = 101; + message.obj = new String(result); + handler1.sendMessage(message); + } + else + { + Message message = new Message(); + message.what = 102; + message.obj = new String(result); + handler1.sendMessage(message); + } + + }else { + Message message = new Message(); + message.what = 105; + handler1.sendMessage(message); + ToastUtil.showMessage("请求失败了,请稍后重试"); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showMessage("请求失败,请稍后重试"); + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditActivity.java new file mode 100644 index 0000000..dd2fe29 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditActivity.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.Editable; +import android.text.InputFilter; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我要投稿-投稿编辑内容 + * @author ContriButingEditActivity + * @author 纪肖 + * + */ + +public class ContriButingEditActivity extends BaseActivity implements OnClickListener{ + private View view; + private EditText et_donate_content; + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { + getIntent(); + Intent intent1=new Intent(); + intent1.putExtra("content",et_donate_content.getText().toString().trim()); + setResult(523, intent1); + finish(); + } else if (id == R.id.top_right_text) { + getIntent(); + if(TextUtils.isEmpty(et_donate_content.getText().toString().trim())){ + ToastUtil.showMessage("请输入投稿内容"); + return; + }else{ + Intent intent=new Intent(); + intent.putExtra("content",et_donate_content.getText().toString().trim()); + setResult(523, intent); + } + finish(); + } + } + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_back_layout.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.contributing_content); + et_donate_content=(EditText)view.findViewById(R.id.et_contributing_content); + getIntent(); + top_title.setText("投稿内容"); + String content = getIntent().getStringExtra("content"); + et_donate_content.setFilters(new InputFilter[]{new InputFilter.LengthFilter(500)});//限制500字 + et_donate_content.setText(content); + et_donate_content.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stubs + } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + String count1 = et_donate_content.getText().toString().trim(); + if(count1.length() >= 1000 ){ + ToastUtil.showMessage("最多输入一千字"); + } + } + }); + return view; + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + getIntent(); + Intent intent1=new Intent(); + intent1.putExtra("content",et_donate_content.getText().toString().trim()); + setResult(523, intent1); + finish(); + } + return false; + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditTitleActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditTitleActivity.java new file mode 100644 index 0000000..e600b4d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContriButingEditTitleActivity.java @@ -0,0 +1,98 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * 我要投稿-标题编辑 + * + * 类名称:ContriButingEditTitleActivity + * 创建人:纪肖 + * + */ +public class ContriButingEditTitleActivity extends BaseActivity implements OnClickListener { + private View view; + private EditText et_name; + private Intent intent; + // private ImageView iv_cancel; + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_back_layout.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + } + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_edit_title); + et_name=(EditText)view.findViewById(R.id.et_name); + top_title.setText("投稿标题"); + String name = getIntent().getStringExtra("name"); +// et_name.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); + et_name.setText(name); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + intent = getIntent(); + + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { + Intent intent1=new Intent(); + intent1.putExtra("name",et_name.getText().toString().trim()); + setResult(521, intent1); + finish(); + } else if (id == R.id.top_right_text) { + //点击保存时进行是否为空的操作 + if(TextUtils.isEmpty(et_name.getText().toString().trim())){ + ToastUtil.showMessage("请输入标题名称"); + return; + } + Intent intent=new Intent(); + intent.putExtra("name",et_name.getText().toString().trim()); + setResult(521, intent); + finish(); + } + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + //这里重写返回键 + intent = getIntent(); + Intent intent1=new Intent(); + intent1.putExtra("name",et_name.getText().toString().trim()); + setResult(521, intent1); + finish(); + } + return false; + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContributingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContributingActivity.java new file mode 100644 index 0000000..db4a0a3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ContributingActivity.java @@ -0,0 +1,163 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.EditText; +import android.widget.RadioGroup; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ContributingActivity.java + * + * @author liufang + * @date 2015-11-6 上午10:25:46 + * + * 功能说明:我讲科普->我要投稿页面 + */ +public class ContributingActivity extends BaseActivity { + private EditText etTitle, etContent; + private RadioGroup rgOriginal; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_title.setText("投稿"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_contributing, null); + etTitle = (EditText) view.findViewById(R.id.contributing_title);//标题 + etTitle.setOnFocusChangeListener(onFocusAutoClearHintListener);// 设置输入框获得焦点hint提示消失 + etContent = (EditText) view.findViewById(R.id.contributing_content);//内容 + etContent.setOnFocusChangeListener(onFocusAutoClearHintListener); + rgOriginal = (RadioGroup) view.findViewById(R.id.rg_is_original);//是否原创 + return view; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + } + + /** + * 提交按钮点击事件 + */ + public void checkInput(View view) { + submit(); + } + + /** + * 提交投稿 + */ + private void submit() { + String strTitle = etTitle.getText().toString(); + String strContent = etContent.getText().toString(); + int isOriginal = 0; + //验证输入数据 + if (StringUtil.isEmpty(strTitle)) { + ToastUtil.showMessage("请输入标题!"); + return; + } + if (StringUtil.isEmpty(strContent)) { + ToastUtil.showMessage("请输入内容!"); + return; + } + if (rgOriginal.getCheckedRadioButtonId() == R.id.rb_true) { + isOriginal = 1; + } else { + isOriginal = 0; + } + //专家uuid + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + showProgressDialog("提交中..."); + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("topic", strTitle);//标题 + params.addBodyParameter("content", strContent);//内容 + params.addBodyParameter("publisherUuid", uuid);//uuid + params.addBodyParameter("isOriginal", String.valueOf(isOriginal));//是否原创 + params.addBodyParameter("type", String.valueOf(1));//类型 + HttpHelper.loadData(HttpMethod.POST, Url.getSubmitScience, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + //提交成功处理 + ToastUtil.showMessage(message); + Intent intent = new Intent(); + intent.putExtra("flag", 1); + setResult(Constant.CONTRIBUTE_CODE, intent); + AppManager.getAppManager().finishActivity( + ContributingActivity.this); + } else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showMessage("提交失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("submit().onFailure = " + arg1); + closeProgressDialog(); + ToastUtil.showMessage("提交失败!"); + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectCourseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectCourseActivity.java new file mode 100644 index 0000000..8b52870 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectCourseActivity.java @@ -0,0 +1,292 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CircleCollectBIngliBean; +import cn.shangyu.gdxzExpert.bean.CircleCollectBIngliBean.Collection; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class CoollectCourseActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + private View view; + private PullToRefreshListView ptrLv; + private TextView load_empty; + private CoollectCourseActivity mActivity; + private String expert_uuid; + private ArrayList DataList = new ArrayList(); + private int page = 1; + private CourseCoolenctAdapter mAdapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("课件文档"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_my_download); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_down);// 下拉刷新的listview控件 + mActivity = this; + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + load_empty.setText("您暂未收藏课件"); + // 设置只有下拉刷新 + ptrLv.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + CollectListDate(); + } + + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + CollectListDate(); + } + }); + expert_uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + CollectListDate(); + return view; + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void CollectListDate() { + StringBuffer Keyword = new StringBuffer(); + Map param = new HashMap(); + param.put("user_uuid", expert_uuid); + param.put("type", "6"); + param.put("page", page + ""); + sendParamtoNet(Url.getcollectionList, param, 106, mActivity, true); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, CourseUrlDetailActivity.class); + intent.putExtra("url", DataList.get(arg2-1).path); + Log.d("gdxzfile ","url1 "+DataList.get(arg2-1).path); + intent.putExtra("uuid", DataList.get(arg2-1).other_uuid); + intent.putExtra("title", DataList.get(arg2-1).title); + intent.putExtra("collect", "collect"); + this.startActivityForResult(intent, 201); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + Log.d("gdxzfile ",resultJson); + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + CircleCollectBIngliBean bean = GsonTools.fromGsonToBean(result, + CircleCollectBIngliBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data); + + if (bean.data == null || bean.data.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("您暂未收藏课件"); + } else { + load_empty.setVisibility(View.GONE); + DataList.addAll(bean.data); + } + } else { + // 加载更多下一页时候e + DataList.addAll(bean.data); + + } + // 实例化适配器 + if (mAdapter == null) { + mAdapter = new CourseCoolenctAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if (page != 1) { + ToastUtil.showMessage("没有更多收藏了"); + } + + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class CourseCoolenctAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return DataList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return DataList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils + .inflate(R.layout.activity_download_course_big); + } + else + { + convertView = UIUtils + .inflate(R.layout.activity_download_course); + } + vh = new ViewHolder(); + vh.mTv = (TextView) convertView + .findViewById(R.id.tv_download_course); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + vh.mTv.setText(DataList.get(position).title); + return convertView; + } + + public class ViewHolder { + TextView mTv; + } + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if(data!=null){ + if(resultCode==201){ + String uuid=data.getStringExtra("uuid"); + for (int i = 0; i < DataList.size(); i++) { + if(uuid.equals(DataList.get(i).other_uuid)){ + DataList.remove(i); + if (DataList.size()==0){ + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("您暂未收藏课件"); + } + mAdapter.notifyDataSetChanged(); + } + } + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectNewsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectNewsActivity.java new file mode 100644 index 0000000..a537466 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoollectNewsActivity.java @@ -0,0 +1,274 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.CollcetNewsAdataper; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CollectNewsBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/2/25. + */ + +public class CoollectNewsActivity extends BaseActivity implements + OnCallBackFromNet, AdapterView.OnItemClickListener { + + private View view; + private PullToRefreshListView mLv_Video; + private View ll_loading; + private TextView mLoad_empty; + private CoollectNewsActivity mActivity; + private String expert_uuid; + private int page = 1; + private List DataList = new ArrayList<>(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub +// top_title.setText("我的收藏"); + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("我的收藏"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_collection_video); + mActivity = this; + initView(); + + return view; + } + + @Override + protected void onResume() { + super.onResume(); +// page = 1; +// getDataResult(); + } + + public void initView() { + mLv_Video = (PullToRefreshListView) view + .findViewById(R.id.lv_collect_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + expert_uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + mLv_Video.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDataResult(); + } + }); + mLv_Video.setOnItemClickListener(this); + getDataResult(); + } + + public void getDataResult() { + Map param = new HashMap(); + param.put("user_uuid", SharePrefUtil.getString(mActivity, Constant.uuid, "")); + param.put("page", page+""); + param.put("type", 1 + ""); + sendParamtoNet(Url.getcollectionList, param, 101, mActivity, true); + + } + + @Override + public LoadingPage.ResultState onLoad() { + // TODO Auto-generated method stub + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + LogUtil.i(resultJson); + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + CollcetNewsAdataper ListAdapter; + + private void processData(String result) { + + CollectNewsBean bean = GsonTools.fromGsonToBean(result, + CollectNewsBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.getCode())) { + ToastUtil.showToast(bean.getMessage()); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.getData()); + + if (bean.getData() == null || bean.getData().size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("您暂未收藏肝胆新闻"); + } else { + mLoad_empty.setVisibility(View.GONE); + DataList.addAll(bean.getData()); + } + } else { + // 加载更多下一页时候e + DataList.addAll(bean.getData()); + + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new CollcetNewsAdataper(DataList); + mLv_Video.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.getTotalPage(); + LogUtil.i("totalPage=" + totalPage + "page=" + page); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if (page != 1) { + ToastUtil.showMessage("没有更多收藏了"); + } + + mLv_Video.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + mLv_Video.setMode(PullToRefreshBase.Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + + intent.putExtra("url", Url.urlHtml + DataList.get(position - 1).getPath()); + // intent.putExtra("title", news.title); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", DataList.get(position - 1).getOther_uuid()); + intent.putExtra("newsagreenum", DataList.get(position - 1).getAgreenum()+""); + intent.putExtra("newsreadnum", DataList.get(position - 1).getReadnum()+""); + intent.putExtra("newsTitle", DataList.get(position - 1).getTitle()); + intent.putExtra("summary",""); + intent.putExtra("imageUrl", DataList.get(position - 1).getImgpath()); + intent.putExtra("flag", 3); + mActivity.startActivityForResult(intent, 201); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + + if (requestCode == 201) { + if (data!=null){ + boolean isCollection = data.getBooleanExtra("isCollection", true); + if (!isCollection){ + String uuid = data.getStringExtra("uuid"); + for (int i = 0;i DataList = new ArrayList<>(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub +// top_title.setText("我的收藏"); + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("我的收藏"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_collection_video); + mActivity = this; + initView(); + + return view; + } + + @Override + protected void onResume() { + super.onResume(); +// page = 1; +// getDataResult(); + } + + public void initView() { + mLv_Video = (PullToRefreshListView) view + .findViewById(R.id.lv_collect_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + expert_uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + mLv_Video.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDataResult(); + } + }); + mLv_Video.setOnItemClickListener(this); + getDataResult(); + } + + public void getDataResult() { + Map param = new HashMap(); + param.put("user_uuid", SharePrefUtil.getString(mActivity, Constant.uuid, "")); + param.put("page", page+""); + param.put("type", 2 + ""); + sendParamtoNet(Url.getcollectionList, param, 101, mActivity, true); + + } + + @Override + public LoadingPage.ResultState onLoad() { + // TODO Auto-generated method stub + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + LogUtil.i(resultJson); + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + CollcetNewsAdataper ListAdapter; + + private void processData(String result) { + + CollectNewsBean bean = GsonTools.fromGsonToBean(result, + CollectNewsBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.getCode())) { + ToastUtil.showToast(bean.getMessage()); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.getData()); + + if (bean.getData() == null || bean.getData().size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("您暂未收藏患教学堂"); + } else { + mLoad_empty.setVisibility(View.GONE); + DataList.addAll(bean.getData()); + } + } else { + // 加载更多下一页时候e + DataList.addAll(bean.getData()); + + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new CollcetNewsAdataper(DataList); + mLv_Video.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.getTotalPage(); + LogUtil.i("totalPage=" + totalPage + "page=" + page); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if (page != 1) { + ToastUtil.showMessage("没有更多收藏了"); + } + + mLv_Video.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + mLv_Video.setMode(PullToRefreshBase.Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + + + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + + intent.putExtra("url", Url.urlHtml + DataList.get(position - 1).getPath()); + // intent.putExtra("title", news.title); + intent.putExtra("title", "患教学堂"); + intent.putExtra("kepuuuid", DataList.get(position - 1).getOther_uuid()); + intent.putExtra("kepuagreenum", DataList.get(position - 1).getAgreenum()+""); + intent.putExtra("kepureadnum", DataList.get(position - 1).getReadnum()+""); + intent.putExtra("newsTitle", DataList.get(position - 1).getTitle()); + intent.putExtra("summary",""); + intent.putExtra("imageUrl", DataList.get(position - 1).getImgpath()); + intent.putExtra("flag", 2); + mActivity.startActivityForResult(intent, 201); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == 201) { + page = 1; + if (data!=null){ + boolean isCollection = data.getBooleanExtra("isCollection", false); + LogUtil.i("isCollection = "+isCollection); + if (!isCollection){ + String uuid = data.getStringExtra("uuid"); + LogUtil.i("uuid = "+uuid); + for (int i = 0;i DataList = new ArrayList(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("我的收藏"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } +// top_title.setText("我的收藏"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_collection_video); + mActivity = this; + initView(); + + return view; + } + + @Override + protected void onResume() { + super.onResume(); +// page = 1; +// getDataResult(); + } + + public void initView() { + mLv_Video = (PullToRefreshListView) view + .findViewById(R.id.lv_collect_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + expert_uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + mLv_Video.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDataResult(); + } + }); + mLv_Video.setOnItemClickListener(this); + getDataResult(); + } + + public void getDataResult() { + Map param = new HashMap(); + param.put("user_uuid", expert_uuid); + param.put("page", page + ""); + param.put("type", 5 + ""); + sendParamtoNet(Url.getcollectionList, param, 101, mActivity, true); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + CollectVideoAdapter ListAdapter; + + private void processData(String result) { + + CollectVideoBean bean = GsonTools.fromGsonToBean(result, + CollectVideoBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data); + + if (bean.data == null || bean.data.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("您暂未收藏肝胆视频"); + } else { + mLoad_empty.setVisibility(View.GONE); + DataList.addAll(bean.data); + } + } else { + // 加载更多下一页时候e + DataList.addAll(bean.data); + + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new CollectVideoAdapter(DataList); + mLv_Video.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + LogUtil.i("totalPage=" + totalPage + "page=" + page); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if (page != 1) { + ToastUtil.showMessage("没有更多收藏了"); + } + + mLv_Video.setMode(Mode.PULL_FROM_START); + } else { + mLv_Video.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", DataList.get(position - 1).getPath()); + intent.putExtra("uuid", DataList.get(position - 1).getOther_uuid()); + intent.putExtra("title", DataList.get(position - 1).getTitle()); + intent.putExtra("readnum", DataList.get(position - 1).getReadnum()); + intent.putExtra("imgpath", DataList.get(position - 1).getImgpath()); + intent.putExtra("public_name", DataList.get(position - 1) + .getPublic_name()); + if("2".equals(DataList.get(position - 1).getVideo_type())) + { + intent.putExtra("ispatientvideo",true); + } + intent.setType("coll"); + mActivity.startActivityForResult(intent, 201); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 201) { + if (data!=null){ + boolean isCollection = data.getBooleanExtra("isCollection", false); + if (!isCollection){ + String uuid = data.getStringExtra("uuid"); + for (int i = 0;i course = new HashMap(); +// course.put("course_type", "精品课");//自定义参数:音乐类型,值:流行 +// course.put("course_name","test"); // +// course.put("course_price",100); //价格:100元 +// MobclickAgent.onEventObject(this, "course", course); + rg_course.setBackground(getResources().getDrawable(R.drawable.unpress1)); + if (fm.getBackStackEntryCount() > 1) + { + if (BackHandlerHelper.handleBackPress(CourseActivity.this)) { + + } + } + + else + showExFragment(); + } else if (checkedId == R.id.rb_mine) { +// Map course1 = new HashMap(); +// course1.put("course_type", "我的");//自定义参数:音乐类型,值:流行 +// course1.put("course_name","test1"); // +// course1.put("course_price",0); //价格:100元 +// MobclickAgent.onEventObject(this, "course", course1); +// MobclickAgent.onEventValue(this, "music", course1, 12000); + rg_course.setBackground(getResources().getDrawable(R.drawable.press1)); + showMinFragment(); + } + } + private void initFragment() + { + +// minFragment=new MinFragment(); + showExFragment(); + } + + private void showExFragment() + { + exCourseFragment=new ExCourseFragment(); + fm.beginTransaction().add(R.id.frame_container, exCourseFragment, + "ex_fragment").addToBackStack(null).commit(); + + } + private void showGanExFragment(String first_type,String name) + { + +// MobclickAgent.onEvent(this,"没有参数"); + ganExFragment=new GanExFragment(); + Bundle bundle = new Bundle(); + bundle.putString("first_type",first_type); + bundle.putString("top_title",name+"精品课"); + ganExFragment.setArguments(bundle);//数据传递到fragment中 + fm.beginTransaction().add(R.id.frame_container, ganExFragment, + "gan_ex_fragment").addToBackStack(null).commit(); + } + private void showXiaoFragment(String special_type,String name) + { + + smallCourseFragment=new SmallCourseFragment(); + Bundle bundle = new Bundle(); + bundle.putString("special_type",special_type); + bundle.putString("top_title",name); + smallCourseFragment.setArguments(bundle);//数据传递到fragment中 + + fm.beginTransaction().add(R.id.frame_container, smallCourseFragment, + "sm_ex_fragment").addToBackStack(null).commit(); + } + private void showMinFragment() + { + minFragment=new MinFragment(); + fm.beginTransaction().add(R.id.frame_container, minFragment, + "m_fragment").addToBackStack(null).commit(); + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + + } + + @Override + public void type(String first_type,String self_type,String name) { + switch (self_type) + { + case Type_XIAOKE: + showXiaoFragment(first_type,name); + break; + case Type_GANRAN: + showGanExFragment(first_type,name); + break; + + } + + } + + @Override + public void onBackPressed() { + if(!rb_excellent.isChecked()) + { + if (fm.getBackStackEntryCount() > 2) + { + rb_excellent.setChecked(true); + } + else + { + finish(); + } + + } + else + { + if (fm.getBackStackEntryCount() > 1) { + + fm.popBackStack(); + + } + else + { + finish(); + } + } + + + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseDetailOrderActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseDetailOrderActivity.java new file mode 100644 index 0000000..dda475e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseDetailOrderActivity.java @@ -0,0 +1,532 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Build; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CourseOrderBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class CourseDetailOrderActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private TextView mTv_course_num, mTv_pay_state, mTv_pay_to, mTv_pay_money, + mTv_creat_time, mTv_pay_mode, mTv_pay_time, mTv_cancel_time, + mTv_course_title; + private LinearLayout mLl_pay_mode, mLl_pay_time; + private RelativeLayout mRl_pay; + private Button mBt_cancel, mBt_pay; + private CourseDetailOrderActivity mActivity; + private String order_id; + private String order_status; + private String providername; + private String file_uuid; + String title; + private String type; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("订单详情"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_course_order); + mActivity = this; + mTv_creat_time = (TextView) view + .findViewById(R.id.tv_course_creat_time); + mTv_pay_state = (TextView) view.findViewById(R.id.tv_course_state); + mTv_pay_to = (TextView) view.findViewById(R.id.tv_pay_to); + mTv_pay_money = (TextView) view.findViewById(R.id.tv_course_money); + mTv_course_num = (TextView) view.findViewById(R.id.tv_course_num); + mTv_pay_mode = (TextView) view.findViewById(R.id.tv_course_pay_mode); + mTv_pay_time = (TextView) view.findViewById(R.id.tv_course_pay_time); + mLl_pay_mode = (LinearLayout) view.findViewById(R.id.ll_pay_mode); + mLl_pay_time = (LinearLayout) view.findViewById(R.id.ll_pay_time); + mRl_pay = (RelativeLayout) view.findViewById(R.id.ll_to_pay); + mTv_cancel_time = (TextView) view.findViewById(R.id.textView1); + mTv_course_title = (TextView) view.findViewById(R.id.tv_course_title); + mBt_cancel = (Button) view.findViewById(R.id.cancel); + mBt_pay = (Button) view.findViewById(R.id.bt_pay); + initIntent(); + mBt_cancel.setOnClickListener(this); + mBt_pay.setOnClickListener(this); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + order_id = getIntent().getStringExtra("order_id"); + order_status = getIntent().getStringExtra("order_status"); + providername = getIntent().getStringExtra("providername"); + title = getIntent().getStringExtra("title"); + type = getIntent().getStringExtra("type"); + file_uuid = getIntent().getStringExtra("file_uuid"); + mTv_course_title.setText(title); + mTv_pay_to.setText(providername); + mTv_course_num.setText(order_id); + showProgressDialog("加载中"); + getDetailResult(); + } + + public void getDetailResult() { + Map param = new HashMap(); + param.put("order_id", order_id); + sendJsonPostParamtoNetSignMD5(Url.getGanDanFileOrderDetial, param, 101,this); + + } + + public void getCancleResult() { + Map param = new HashMap(); + param.put("order_id", order_id); + sendParamtoNet(Url.getCancelGanDanFileOrder, param, 102, mActivity, + true); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_pay) { + Intent intent = new Intent(mActivity, PayCourseActivity.class); + intent.putExtra("money", + (int) bean.data.getAccount() + ""); + intent.putExtra("order_id", order_id); + intent.putExtra("providername", providername); + + // intent.setType("detail"); + startActivityForResult(intent, 201); + } else if (id == R.id.cancel) { + aaa(); + } + } + + private ECAlertDialog buildAlert; + + public void aaa() { + buildAlert = ECAlertDialog.buildAlert(mActivity, "确定取消此次订单", "取消", + "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getCancleResult(); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + private Timer timer; + int time; + + public void WordLight(long times) { + time = (int) times; + final TimerTask tast = new TimerTask() { + @Override + public void run() { + Message message = Message.obtain(); + handler.sendMessage(message); + } + }; + timer = new Timer(); + timer.schedule(tast, 0, 1000); + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + if (time == 0) { + timer.cancel(); + // mTv_pay_state.setText("已取消"); + mRl_pay.setVisibility(View.GONE); + // SEND_FRESH_RESULT = 203; + getDetailResult(); + } + mTv_cancel_time.setText(secToTime(time)); + time--; + } + }; + + public static String secToTime(int time) { + String timeStr = null; + int hour = 0; + int minute = 0; + int second = 0; + if (time <= 0) + return "00:00"; + else { + minute = time / 60; + if (minute < 60) { + second = time % 60; + timeStr = unitFormat(minute) + ":" + unitFormat(second); + } else { + hour = minute / 60; + if (hour > 99) + return "99:59:59"; + minute = minute % 60; + second = time - hour * 3600 - minute * 60; + timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + + unitFormat(second); + } + } + return timeStr; + } + + public static String unitFormat(int i) { + String retStr = null; + if (i >= 0 && i < 10) + retStr = "0" + Integer.toString(i); + else + retStr = "" + i; + return retStr; + } + + /** + * 201 不刷新 202待支付变成已支付 203待支付变成已取消 + */ + public int SEND_FRESH_RESULT = 201; + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private String system_time; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+" "+resultJson); + // TODO Auto-generated method stub + switch (resultCode) { + case 101: + closeProgressDialog(); + preaseData(resultJson); + break; + case 102: + if (resultJson.equals("\"SUCCEED\"")) { + SEND_FRESH_RESULT = 203; + timer.cancel(); + mTv_pay_state.setText("已取消"); + mRl_pay.setVisibility(View.GONE); + ToastUtil.showMessage("取消成功"); + } else { + ToastUtil.showMessage("取消失败"); + } + break; + case 104: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(CourseDetailOrderActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + getDownLoadResult(); + } else { + EasyWindow.with(CourseDetailOrderActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(CourseDetailOrderActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + getDownLoadResult(); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + getDownLoadResult(); + } + + + break; + default: + break; + } + } + + private HttpHandler hand; +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/肝胆课件/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/肝胆课件/"; + public void getDownLoadResult() { + int a = StringUtil.getnum(); + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + RequestParams params = new RequestParams(); + params.addHeader("Cookie", "token=" + Constant.YKToken); + params.addHeader("Doc-Client", "medicool-android"); + // params.addHeader("Content-Type", "application/json"); + // + "bean.title===" + bean.getTitle()); + // http.download(url, target, params, autoResume, callback) + final String path = filePath + file_uuid + "." + type.trim(); + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(Url.getDownloadGanDanFile + "?gdf=" + + getGdf(a) + "&a=" + a, path, params, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载"); + + // 插入下载数据库 + downloadModel = new DownloadModel(file_uuid); + downloadModel.setTitle(title);// 设置标题 + downloadModel.setCurrentProgress(providername); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(type.trim());// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager + .insertDownload(downloadModel); + // 异步显示 + ToastUtil.showMessage("下载中"); + + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(file_uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager + .updateDownloadState(downloadModel); + // 异步显示 + ToastUtil.showToast("下载完成!"); + // 查看 + // getaddWanFangCount(); + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + ToastUtil.showToast("下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(file_uuid); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager + .updateDownloadState(downloadModel); + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + public String getGdf(int a) { + String expert_uuid=SharePrefUtil.getString(mActivity, "uuid", ""); + String mc = null; + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(file_uuid + "|" + order_id + "|" + expert_uuid + + "|" + system_time, "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return mc; + } + CourseOrderBean bean; + + public void preaseData(String result) { + System.out.println(" result == "+result); + try { + bean = GsonTools.fromGsonToBean(result, CourseOrderBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + } + if (bean != null && bean.data != null) { + if (bean.data.getOrder_status().equals("created")) { + mTv_pay_state.setText("待付款"); + SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); +// +// String sd = sdf.format(new Date(bean.pingGanDanFileOrder +// .getCreate_date() * 1000)); +// mTv_creat_time.setText(sd); + mTv_pay_money.setText(String.format("%.2f", + bean.data.getAccount() / 100) + "元"); + mRl_pay.setVisibility(View.VISIBLE); + WordLight(bean.data.getExpire_time() + - bean.data.getSystem_time()); + + } + if (bean.data.getOrder_status().equals("paid")) { + mTv_pay_state.setText("已支付"); + SEND_FRESH_RESULT = 202; +// SimpleDateFormat sdf = new SimpleDateFormat( +// "yyyy-MM-dd HH:mm:ss"); +// +// String CreatTime = sdf.format(new Date(bean.pingGanDanFileOrder +// .getCreate_date() * 1000)); + mTv_creat_time.setText(bean.data + .getCreate_date()); +// String PaytTime = sdf.format(new Date(bean.pingGanDanFileOrder +// .getPay_time() * 1000)); + mTv_pay_time.setText(bean.data + .getPay_time()); + if ("wx".equals(bean.data.getPay_channel())) { + + mTv_pay_mode.setText("微信支付"); + } + if ("balance".equals(bean.data.getPay_channel())) { + mTv_pay_mode.setText("余额支付"); + } + if ("alipay".equals(bean.data.getPay_channel())) { + mTv_pay_mode.setText("支付宝支付"); + } + if ("FREERECORD".equals(bean.data.getPay_channel())) { + mTv_pay_mode.setText("免费次数"); + } + if ("FREE".equals(bean.data.getPay_channel())) { + mTv_pay_mode.setText("免费"); + } + if (bean.data.getPay_channel()!=null&&bean.data.getPay_channel().contains("upacp")) { + mTv_pay_mode.setText("银联支付"); + } + mTv_pay_money.setText(String.format("%.2f", + bean.data.getAccount() / 100) + "元"); + mLl_pay_mode.setVisibility(View.VISIBLE); + mLl_pay_time.setVisibility(View.VISIBLE); + } + if (bean.data.getOrder_status().equals("canceled")) { + if (order_status != null && order_status.equals("created")) { + SEND_FRESH_RESULT = 203; + } + mTv_pay_state.setText("已取消"); + SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); +// +// String sd = sdf.format(new Date(bean.pingGanDanFileOrder +// .getCreate_date() * 1000)); +// mTv_creat_time.setText(sd); + mTv_pay_money.setText(String.format("%.2f", + bean.data.getAccount() / 100) + "元"); + + } + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + SEND_FRESH_RESULT = 202; + timer.cancel(); + mRl_pay.setVisibility(View.GONE); + getDetailResult(); + getSystemTime(); + } + } + + public void getSystemTime() { + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, 104, mActivity, true); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseUrlDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseUrlDetailActivity.java new file mode 100644 index 0000000..7e35091 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CourseUrlDetailActivity.java @@ -0,0 +1,1253 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_COURSEWARE_DETAILS; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.annotation.SuppressLint; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CourseDetailBeanNew; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class CourseUrlDetailActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private String url; + private X5WebView mWebView; + private WebSettings settings; + CourseUrlDetailActivity ct; + private String uuid; + private String title; + CoursewareBookDownloadSqlManager sq; + SQLiteDatabase db; + + private LinearLayout mLl_yuan_download, mLl_look_download, mLl_no_download, + mLl_again_download, mLl_free_download, mLl_ctn_download; + private TextView mTv_course_yuan; + private String providername; + private String expert_uuid; + private String order_id; + private String system_time; + private String type; + private String mPath; + private boolean IsColloction = false; + boolean isCollect = false; + private int freeRecord = 0; + private int state; + private String fileSize; + private String fileMD5_=""; + private TextView tv_downing; + private ECAlertDialog dilaog2; + private RequestCallBack requestCallBack; + public static final int USEWELFARENUM = 202; + private int welfareNum;//剩余福利次数 + private Boolean needset4=false; + + @Override + public void setTitle() { +// if (!UIUtils.isLogined()) +// { +// Intent intent = new Intent(); +// intent.setClass(this, LoginNewActivity.class); +// startActivity(intent); +// finish(); +// return; +// } + // TODO Auto-generated method stub + url = getIntent().getStringExtra("url"); + + Log.d("gdxzfile","url "+url); + title = getIntent().getStringExtra("title"); + uuid = getIntent().getStringExtra("uuid"); + +// if(StringUtil.isEmpty(url)&&StringUtil.isEmpty(title)&&StringUtil.isEmpty(uuid)&&getIntent().getData()!=null) +// { +// +// url = Url.urlHtml+getIntent().getData().getQueryParameter("path"); +// title = getIntent().getData().getQueryParameter("title"); +// uuid =getIntent().getData().getQueryParameter("uuid"); +// } + // type = getIntent().getStringExtra("type"); + String collect = getIntent().getStringExtra("collect"); + if (collect != null && collect.equals("collect")) { + isCollect = true; + } + top_title.setText("课件详情"); + top_back.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_course_datail); + + MobclickAgent.onEvent(this,EXPERT_COURSEWARE_DETAILS); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.course_detail_url); + loadingView = view.findViewById(R.id.loading_view); + mLl_yuan_download = (LinearLayout) view + .findViewById(R.id.ll_yuan_download); + mLl_look_download = (LinearLayout) view + .findViewById(R.id.ll_look_download); + mLl_ctn_download = (LinearLayout) view + .findViewById(R.id.ll_ctn_download); + mLl_no_download = (LinearLayout) view.findViewById(R.id.ll_no_download); + mLl_again_download = (LinearLayout) view + .findViewById(R.id.ll_again_download); + mLl_free_download = (LinearLayout) view + .findViewById(R.id.ll_free_download); + mTv_course_yuan = (TextView) view.findViewById(R.id.tv_course_yuan); + tv_downing = view.findViewById(R.id.tv_downing); + ct = this; + db = openOrCreateDatabase("courseware.db", MODE_PRIVATE, null); + sq = new CoursewareBookDownloadSqlManager(db); + initLinsener(); + dealNewsDetail(); + getCourseType(); +// if(getIntent().getBooleanExtra("again_download",false)) +// { +// mLl_again_download.setVisibility(View.VISIBLE); +// mLl_look_download.setVisibility(View.GONE); +// } + + + return view; + } + + + private void initLinsener() { + // TODO Auto-generated method stub + expert_uuid = SharePrefUtil.getString(ct, "uuid", ""); + top_right.setVisibility(View.VISIBLE); + top_right_search.setVisibility(View.VISIBLE); + top_right_search.setImageResource(R.drawable.share_icon); + top_right.setImageResource(R.drawable.nor_nes_no); + top_right_search.setOnClickListener(this); + top_right.setOnClickListener(this); + mLl_yuan_download.setOnClickListener(this); + mLl_look_download.setOnClickListener(this); + mLl_no_download.setOnClickListener(this); + mLl_again_download.setOnClickListener(this); + mLl_free_download.setOnClickListener(this); + mLl_ctn_download.setOnClickListener(this); + } + + public void getCourseType() { + state = getDownloadState(uuid); + if (state == 2||state == 4) { + if(CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid)!=null + &&CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid).contains(Constant.OldfilePath)) + { + needset4=true; + } + else if(state == 4) + { + needset4=true; + } + else + { + mLl_look_download.setVisibility(View.VISIBLE); + } + + // } else { + + } else if (state == 1) { + mLl_ctn_download.setVisibility(View.VISIBLE); +// boolean ishavedown = SharePrefUtil.getBoolean(this, "ishavedown", false); +// if (ishavedown&&"".equals(Constant.isdown)){ +// String ishavedownname = SharePrefUtil.getString(CourseUrlDetailActivity.this, " ", ""); +// if (title.equals(ishavedownname)){ +// tv_downing.setText("下载失败,点击退出重新下载"); +// } +// } + } + getDataResult(); + + } + + /** + * + * @param + * @return 数据库查询下载状态 0未下载,1下载中,2已下载 + */ + + private int getDownloadState(String uuid) { + // TODO Auto-generated method stub + int downloadState = CoursewareBookDownloadSqlManager.getDownloadState(uuid); + Log.d("aaaaaa","downloadState1"+downloadState +uuid); + return downloadState; + } + + public void getDataResult() { + + Map param = new HashMap(); + param.put("file_uuid", uuid); +// param.put("expert_uuid", expert_uuid); + sendJsonPostParamtoNetSignMD5(Url.getGanDanFileDetials, param, 101, ct); + + } + + public void getOrderResult() { + showProgressDialog("创建订单中"); + String expert_uuid = SharePrefUtil.getString(ct, "uuid", ""); + Map param = new HashMap(); + param.put("file_uuid", uuid); +// param.put("expert_uuid", expert_uuid); + sendJsonPostParamtoNetSignMD5(Url.getCreateGanDanFileOrder, param, 102, this); + } + + public void getSystemTime() { + /** + * 单一下载判断 + * */ +// boolean ishavedown = SharePrefUtil.getBoolean(this, "ishavedown", false); +// if (!ishavedown){ +// Map param = new HashMap(); +// sendParamtoNet(Url.getSystemTime, param, 104, ct, true); +// }else { +// String ishavedownname = SharePrefUtil.getString(CourseUrlDetailActivity.this, "ishavedownname", ""); +// ToastUtil.showMessage("正在下载:"+ishavedownname+",请稍等"); +// } + /******************************************/ + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, 104, ct, true); + + } + + public String getGdf(int a) { + String mc = null; + try { + Log.d("WXEntryActivity ","uuid "+uuid+" order_id "+order_id+" expert_uuid "+expert_uuid+" system_time"+system_time); + System.out.println(uuid + "|" + order_id + "|" + expert_uuid + "|" + + system_time); + + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(uuid + "|" + order_id + "|" + expert_uuid + + "|" + system_time, "deoep09_klodLdAo"); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return mc; + } + + private void dealNewsDetail() { + // mWebView.setInitialScale(25); +// CookieSyncManager.createInstance(this); +// CookieManager.getInstance().removeAllCookie(); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 + settings = mWebView.getSettings(); + String ua = settings.getUserAgentString(); + settings.setUserAgentString(ua + ";GdxzAndroidExpertApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + +// mWebView.evaluateJavascript("accessSource('" + "app" + "')", new ValueCallback() { +// @Override +// public void onReceiveValue(String value) { +// +// } +// }); + dismissLoadingView(); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + setCookie(); + loadurl(mWebView, url); + + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + private ECAlertDialog buildAlert; + + public void showDialoag(int time) { + buildAlert = ECAlertDialog.buildAlert(ct, "您还有" + time + + "次免费下载机会,希望本次下载免费吗?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + getOrderResult(); + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (welfareNum>0){ + order_id = "USEWELFARENUM"; + useWelfareNum(); + }else { + order_id = "FREERECORD"; + getSystemTime(); + } + needreportPays("order_gdfile_download",0+"","元",1+"",title,tags,"肝胆课件"); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(ct.getResources().getColor(R.color.top_title)); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.ll_yuan_download) { + if (freeRecord > 0 || welfareNum>0) { + showDialoag(freeRecord+welfareNum); + } else { + getOrderResult(); + } + } else if (id == R.id.ll_look_download) { + if (type != null && type.trim().contains("pdf")) { + openPDFFile(mPath); + } else if (type != null && type.trim().contains("ppt")) { + openPPTFile(mPath); + } else if (type != null && type.trim().contains("doc")) { + openWordFile(mPath); + } + } else if (id == R.id.ll_again_download) { + getSystemTime(); + needreportPays("order_gdfile_download",0+"","元",1+"",title,tags,"肝胆课件"); + } else if (id == R.id.ll_free_download) { + order_id = "FREE"; + int visibility = mLl_ctn_download.getVisibility(); + if (visibility!=0) { +// mLl_ctn_download.setVisibility(View.VISIBLE); +// mLl_look_download.setVisibility(View.GONE); +// mLl_again_download.setVisibility(View.GONE); +// mLl_free_download.setVisibility(View.GONE); +// mLl_yuan_download.setVisibility(View.GONE); + getSystemTime(); + } + needreportPays("order_gdfile_download",0+"","元",1+"",title,tags,"肝胆课件"); + } else if (id == R.id.top_right) { + if (IsColloction) { + CollectListDis(); + } else { + CollectSure(); + needreportSome("collect",title,tags+"","肝胆课件"); + } + } else if (id == R.id.top_right_search) { + share(); + needreportSome("share",title,tags+"","肝胆课件"); + } else if (id == R.id.ll_ctn_download) { + /** + * 单一下载判断 + * */ +// boolean ishavedown = SharePrefUtil.getBoolean(this, "ishavedown", false); +// if (ishavedown&&"".equals(Constant.isdown)){//说明之前有下载任务,但意外中断,此时下载状态是下载中 +// DownloadModel downloadModel = new DownloadModel(uuid); +// mLl_look_download.setVisibility(View.GONE); +// mLl_again_download.setVisibility(View.VISIBLE); +// mLl_free_download.setVisibility(View.GONE); +// mLl_yuan_download.setVisibility(View.GONE); +// mLl_ctn_download.setVisibility(View.GONE); +// downloadModel.setState(0);// 0未下载,1下载中,2已下载 +// CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; +// ToastUtil.showMessage("下载失败,请重新下载"); +// finish(); +// }else{ +// ToastUtil.showMessage("下载中..."); +// } + ToastUtil.showMessage("下载中..."); + } else if (id == R.id.top_back) { + if (state==1){ + + dilaog2 = ECAlertDialog.buildAlert(this, + "正在下载课件,退出界面将取消下载。是否退出?", "取消", "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (hand!=null){ + hand.cancel(); + } + if (state==1){ + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + if(needset4) + { + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + } + else + { + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + } + + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + dilaog2.dismiss(); +// if (hand!=null){ +// hand.cancel(); +// } + finish(); + }else { + ToastUtil.showMessage("已下载完成"); + } + + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + }else { + finish(); + } + } + } + //使用福利操作 + private void useWelfareNum() { + Map map = new HashMap<>(); + map.put("type","2"); + map.put("other_uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.useWelfareNum,map,USEWELFARENUM,this); + } + /** + * 取消收藏或 收藏 + */ + public void CollectSure() { + showProgressDialog("收藏中"); + StringBuffer Keyword = new StringBuffer(); + Map param = new HashMap(); + param.put("user_uuid", expert_uuid); + param.put("type", "6"); + param.put("other_uuid", uuid); + param.put("title", title); + param.put("path", url); + sendParamtoNet(Url.getcollection, param, 105, ct, true); + } + + public void CollectListDis() { + showProgressDialog("取消收藏中"); + StringBuffer Keyword = new StringBuffer(); + Map param = new HashMap(); + param.put("user_uuid", expert_uuid); + param.put("type", "6"); + param.put("other_uuid", uuid); + sendParamtoNet(Url.getdiscollection, param, 106, ct, true); + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = title; + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的课件:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync( + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + ShareUtils.shareUmeng(ct, shareTitle, "肝胆相照-国内专业优质肝胆课件共享平台", msgSinaContent, + Url.urlHtml, shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + // android获取一个用于打开Word文件的intent + public void openWordFile(String Path) { + File file = new File(Path); + String fileMD5 = TikaUtil.getFileMD5(file); + + if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/msword"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } else { + + if( CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid)!=null + &&CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid).contains(Constant.OldfilePath)) + + { + downloadModel=new DownloadModel(uuid); + downloadModel.setState(4); + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(CourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + return; + } +// CoursewareBookDownloadSqlManager.updateDownloadState(); + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(CourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + } + + + } + + public void openPPTFile(String Path) { + File file = new File(Path); + String fileMD5 = TikaUtil.getFileMD5(file); + if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } else { + if( CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid)!=null + &&CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid).contains(Constant.OldfilePath)) + + { + downloadModel=new DownloadModel(uuid); + downloadModel.setState(4); + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(CourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + return; + } + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(CourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + } + + } + + public void openPDFFile(final String path) { + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + LogUtil.e("fileMD5 = "+fileMD5); + LogUtil.e("fileMD5_" +fileMD5_); + if (file.exists()&&fileMD5_.contains(fileMD5)) { + + Intent intent1 = new Intent(CourseUrlDetailActivity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","课件详情"); + startActivity(intent1); + + } else { + if( CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid)!=null + &&CoursewareBookDownloadSqlManager.getDownloadFilePath(uuid).contains(Constant.OldfilePath)) + + { + downloadModel=new DownloadModel(uuid); + downloadModel.setState(4); + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(CourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + + return; + } + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(CourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + } + + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("WXEntryActivity",resultCode+" "+resultJson); + switch (resultCode) { + case 101: + preaseDate(resultJson); + break; + case 102: + closeProgressDialog(); +// PayWechatBean payBean= GsonTools.fromGsonToBean(resultJson, +// PayWechatBean.class); +// if(payBean!=null&&"200".equals(payBean.getCode())) +// { +// PayReq request = new PayReq(); +// request.appId = payBean.getData().getAppid(); +// request.partnerId = payBean.getData().getPartnerid(); +// request.prepayId= payBean.getData().getPrepayid(); +// request.packageValue = payBean.getData().getPackage_str(); +// request.nonceStr= payBean.getData().getNoncestr(); +// request.timeStamp= payBean.getData().getTimestamp(); +// request.sign=payBean.getData().getSign(); +// api.sendReq(request); +// +// } +// else +// { +// ToastUtil.showToast(payBean.getMessage()); +// } + preaseOrder(resultJson); + break; + case 104: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// if (PermissionsUtil.hasPermission(CourseUrlDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// getDownLoadResult(); +// } else { +// PermissionsUtil.requestPermission(CourseUrlDetailActivity.this, new PermissionListener() { +// @Override +// public void permissionGranted(@NonNull String[] permissions) { +// getDownLoadResult(); +// +// } +// +// @Override +// public void permissionDenied(@NonNull String[] permissions) { +// //用户拒绝了访问读写的申请 +//// +// } +// +// }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); +// } +// +// } else { + getDownLoadResult(); +// } +// getDownLoadResult(); + break; + case 105: + JSONObject objs; + try { + objs = new JSONObject(resultJson); + String code = objs.getString("code"); + closeProgressDialog(); + if (code != null && code.equals("1")) { + IsColloction = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + ToastUtil.showMessage("收藏失败"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + break; + case 106: + JSONObject objs1; + try { + objs1 = new JSONObject(resultJson); + String code = objs1.getString("code"); + closeProgressDialog(); + if (code != null && code.equals("1")) { + IsColloction = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } else { + ToastUtil.showMessage("取消收藏失败"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + + break; + + case USEWELFARENUM: + LogUtil.i("USEWELFARENUM = "+resultJson); + try { + JSONObject jsonObject = new JSONObject(resultJson); + String code = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(code)){ + getSystemTime(); + }else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + default: + break; + } + } + + private HttpHandler hand; +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/肝胆课件/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/肝胆课件/"; + private DownloadModel downloadModel; + public void getDownLoadResult() { + int a = StringUtil.getnum(); + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// sdcard存在 + HttpUtils http = new HttpUtils(); + RequestParams params = new RequestParams(); + params.addHeader("Cookie", "token=" + Constant.YKToken); + params.addHeader("Doc-Client", "medicool-android"); + Log.d("WXEntryActivity","down "+Url.getDownloadGanDanFile + "?gdf="+ getGdf(a) + "&a=" + a); + final String path = filePath + uuid + "." + type.trim(); + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(Url.getDownloadGanDanFile + "?gdf="+ getGdf(a) + "&a=" + a, path, params, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载"); + state = 1; + // 插入下载数据库 + downloadModel = new DownloadModel(uuid); + if(!needset4) + { + downloadModel.setTitle(title);// 设置标题 + downloadModel.setCurrentProgress(providername); + downloadModel.setPath(url); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(type.trim());// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.insertDownload(downloadModel); + } + else + { + + downloadModel.setFilePath(path);// 设置文件下载路径 +// downloadModel.setState(5);// 0未下载,1下载中,2已下载 +// CoursewareBookDownloadSqlManager.insertDownload(downloadModel); + } + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",true); +// SharePrefUtil.saveString(CourseUrlDetailActivity.this,"ishavedownname",title); +// Constant.isdown = "1"; + // 异步显示 + ToastUtil.showMessage("下载中"); + mLl_ctn_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + mLl_again_download.setVisibility(View.GONE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + + + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current,boolean isUploading) { + + + + } + + /** 下载完成 **/ + @SuppressLint("CommitPrefEdits") + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + // 异步显示 + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + String md5Three = TikaUtil.getMD5Three(path); + + LogUtil.e("fileMD5 = "+fileMD5); + LogUtil.e("fileMD5_" +fileMD5_); + LogUtil.e("md5Three = " +md5Three); + + if (TextUtils.isEmpty(fileMD5_)){ + state = 2; + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + if(needset4) + { + CoursewareBookDownloadSqlManager.updateDownloadFilePath(downloadModel); + } + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN,Context.MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putString(uuid+"fileMD5",fileMD5_); + edit.commit(); + ToastUtil.showToast("下载完成!"); + mLl_look_download.setVisibility(View.VISIBLE); + mLl_again_download.setVisibility(View.GONE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; + }else if (fileMD5_.contains(fileMD5)){ + state = 2; + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + if(needset4) + { + CoursewareBookDownloadSqlManager.updateDownloadFilePath(downloadModel); + } + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN,Context.MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putString(uuid+"fileMD5",fileMD5_); + edit.commit(); + ToastUtil.showToast("下载完成!"); + mLl_look_download.setVisibility(View.VISIBLE); + mLl_again_download.setVisibility(View.GONE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; + }else{ + ToastUtil.showToast("下载失败!请到网络环境良好下载"); + state = 0; + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + mLl_look_download.setVisibility(View.GONE); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + if(needset4) + { + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + } + else + { + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + } + + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + /** + * 单一下载判断 + * */ +// + } + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + LogUtil.i("msg = "+msg+",error = "+error.getMessage()); + ToastUtil.showToast("下载失败!请到网络环境良好下载"); + state = 0; + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + mLl_look_download.setVisibility(View.GONE); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + if(needset4) + { + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + } + else + { + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + } + + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; + } + }); + + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + private String tags=""; + public void preaseDate(String result) { + CourseDetailBeanNew bean = GsonTools.fromGsonToBean(result, + CourseDetailBeanNew.class); + freeRecord = bean.data.freeRecord; + welfareNum = bean.data.welfareNum; + if (bean.code.equals("200")) { + type = bean.data.type; + fileSize = bean.data.fileSize; + fileMD5_ = bean.data.fileMD5; + mPath = filePath + uuid + "." + type.trim(); + tags= bean.data.tags; + needreportDetail("肝胆课件", bean.data.tags, bean.data.name); + } + if (mLl_look_download.getVisibility() == View.GONE&& mLl_ctn_download.getVisibility() == View.GONE) { + if (bean.data.price > 0) { + if (bean.data.order == null) { + mTv_course_yuan.setText(bean.data.price / 100.00 + ""); + mLl_yuan_download.setVisibility(View.VISIBLE); +// getWelfareNum(); + + } else { + order_id = bean.data.order.order_id + "&R"; + mLl_again_download.setVisibility(View.VISIBLE); + } + + } + else if (bean.data.price == 0&&(!((bean.data.price+"")).contains("-"))) { + mLl_free_download.setVisibility(View.VISIBLE); + } else { + mLl_no_download.setVisibility(View.VISIBLE); + } + } + + if (bean.data.iscollection != null && bean.data.iscollection.equals("1")) { + IsColloction = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + IsColloction = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } + + // FREE_RECORD + } +// double tmpmoney; + public void preaseOrder(String result) { + try { + JSONObject objs = new JSONObject(result); + String retcode = objs.getString("code"); +// String message = objs.getString("message"); +// int price = objs.getInt("price"); +// String date = objs.getString("data"); +// providername = objs.getString("providername"); + closeProgressDialog(); + if (("200").equals(retcode)) { + order_id = objs.getJSONObject("data").getString("order_id"); + providername=objs.getJSONObject("data").getString("provider_name"); +// if (StringUtil.isEmpty(order_id)) { +// ToastUtil.showToast("创建订单失败"); +// return; +// } +// tmpmoney=objs.getJSONObject("data").getInt("amount")/100.0; + Intent intent = new Intent(ct, PayCourseActivity.class); + intent.putExtra("providername", providername); + intent.putExtra("money", objs.getJSONObject("data").getInt("amount")+"" ); + intent.putExtra("order_id", objs.getJSONObject("data").getString("trade_no")); + intent.putExtra("getTags", tags); + intent.putExtra("title", title); + + startActivityForResult(intent, 201); + } else { + ToastUtil.showToast("创建订单失败"); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("创建订单失败"); + } + } + + @Override + public void finish() { + // TODO Auto-generated method stub + if (isCollect && !IsColloction) { + Intent intent = new Intent(); + intent.putExtra("uuid", uuid); + this.setResult(201, intent); + } + super.finish(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + Log.d("WXEntryActivity","onActivityResult "); + + getSystemTime(); + } + } + + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (state==1){ + dilaog2 = ECAlertDialog.buildAlert(this, + "正在下载课件,退出界面将取消下载。是否退出?", "取消", "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (hand!=null){ + hand.cancel(); + } + if (state==1){ + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + if(needset4) + { + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + } + else + { + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + } + + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + dilaog2.dismiss(); + + + finish(); + }else { + ToastUtil.showMessage("已下载完成"); + } + + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + }else { + finish(); + } + + } + return false; + } + + @Override + protected void onDestroy() { + CookieManager.getInstance().removeAllCookie(); + if (state==1){ + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + if(needset4) + { + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + } + else + { + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + + } + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + if(dilaog2!=null) + dilaog2.dismiss(); + if (hand!=null){ + hand.cancel(); + } + } + //释放资源 + if (mWebView != null) + mWebView.destroy(); + + super.onDestroy(); + } + public void needreportPay(String name, String ev,String ui,String num,String rs,String op) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setEvent_val(ev); + rbens.setEvent_unit(ui); + rbens.setNumber(num); + rbens.setResource_name(rs); + rbens.setResource_option(op); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + /** + *@param cookie 上面获取到的存储在本地的cookie字符串 + *@param url 要加载的页面url + */ + private void setCookie() { + + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeSessionCookies(null); + cookieManager.flush(); + } else { + cookieManager.removeSessionCookie(); + CookieSyncManager.getInstance().sync(); + } + cookieManager.setAcceptCookie(true); +// cookieManager.setCookie(url, "hcp_from=expert_app"); +// cookieManager.setCookie(url, "hcp_token="+SharePrefUtil.getString(CourseUrlDetailActivity.this,"hcp_token","")); + cookieManager.setCookie(url, "hcp_from=expert_app"); + cookieManager.setCookie(url, "hcp_token="+SharePrefUtil.getString(CourseUrlDetailActivity.this,"hcp_token","")); + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + + cookieManager.flush(); + } else { + + CookieSyncManager.getInstance().sync(); + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoursewareActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoursewareActivity.java new file mode 100644 index 0000000..3b7be0c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CoursewareActivity.java @@ -0,0 +1,657 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_COURSEWARE_LIST; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CoursewareListBean; +import cn.shangyu.gdxzExpert.bean.CoursewareListBean.CoursewareBean; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class CoursewareActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + private View view; + private DrawableCenterButtonR screen; + // private EditText search_text; + private int page = 1; + private PullToRefreshListView ptrLv; + private String topic = "0"; + private DrawableCenterCheckBox mCb_Jx; + private RelativeLayout mRl_pop_screen; + private Button mBt_sure, mBt_reset; + private GridView mGv_screen; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private View ll_loading; + private LinearLayout ll_empty; + CoursewareActivity mActivity; + private List ListBeans = new ArrayList(); + public CoursewareAdapter mAdapter; + public ImageView mTv_share; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝胆课件"); + top_right.setImageResource(R.drawable.search); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_courseware); + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_courseware); + // 查询输入的内容 + // search_text = (EditText) view.findViewById(R.id.et_search_text); + // 点击查询按钮search + screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_kj_screen); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无课件"); + mRl_pop_screen = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + // 空布局,处理 + mCb_Jx = (DrawableCenterCheckBox) view.findViewById(R.id.cb_kj_jx); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mTv_share = (ImageView) view.findViewById(R.id.tv_share); + mActivity = this; + initListener(); + getDataResult(); + getTagList(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + MobclickAgent.onEvent(this,EXPERT_COURSEWARE_LIST); + needreportPage("肝胆课件"); + } + + private void initListener() { + // TODO Auto-generated method stub + mGv_screen.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + ptrLv.setMode(Mode.BOTH); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + + } + }); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + mBt_sure.setOnClickListener(this); + screen.setOnClickListener(this); + mTv_share.setOnClickListener(this); + mCb_Jx.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + page = 1; + if (isChecked) { + topic = "1"; + mCb_Jx.setText("最热"); + } else { + topic = "0"; + mCb_Jx.setText("最新"); + } + getDataResult(); + + } + }); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + StringBuilder keywords = new StringBuilder(); + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_share) { + showLoag(); + } else if (id == R.id.top_right) { + Intent intent = new Intent(mActivity, PublicSearchActivity.class); + intent.setType("course"); + startActivity(intent); + } else if (id == R.id.bt_kj_screen) { + if (mTagList == null) { + getTagList(); + } + if (mRl_pop_screen.getVisibility() == View.GONE) { + mRl_pop_screen.setVisibility(View.VISIBLE); + + } else { + mRl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + } else if (id == R.id.bt_sure) { + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null && TagPosition.size() != 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + screen.setCompoundDrawables(null, null, drawable, null); + screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + screen.setCompoundDrawables(null, null, drawable, null); + screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + page = 1; + keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + + } + getDataResult(); + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList!=null&&mTagList.data.size()>0?mTagList.data.size():0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + } + + public static final int GET_COURSE_DATAS_RESULT = 101; + public static final int GET_TAGS_DATAS_RESULT = 102; + public static final int GET_SHRE_DATAS_RESULT = 103; + + public void getTagList() { + Map param = new HashMap(); + param.put("type", "6"); + sendParamtoNet(Url.getTagList, param, GET_TAGS_DATAS_RESULT, mActivity, + true); + + } + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", keywords.toString()); + param.put("sort", topic); + param.put("title", ""); + sendJsonPostParamtoNetSignMD5(Url.getGanDanFileByKeyWords, param, + GET_COURSE_DATAS_RESULT, mActivity); + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, CourseUrlDetailActivity.class); + intent.putExtra("url", + ListBeans.get(arg2 - 1).getPreview_path()); + intent.putExtra("title", ListBeans.get(arg2 - 1).getTitle()); + intent.putExtra("uuid", ListBeans.get(arg2 - 1).getUuid()); + intent.putExtra("type", ListBeans.get(arg2 - 1).getType()); + intent.putExtra("getTags", ListBeans.get(arg2 - 1).getTags()); + startActivity(intent); +// needreportDetail("肝胆课件", ListBeans.get(arg2 - 1).getTags(),ListBeans.get(arg2 - 1).getTitle()); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_TAGS_DATAS_RESULT: + processTage(resultJson); + break; + case GET_COURSE_DATAS_RESULT: + processData(resultJson); + break; + case GET_SHRE_DATAS_RESULT: + JSONObject jsob; + try { + jsob = new JSONObject(resultJson); + String retcode = jsob.getString("code"); + if (!retcode.equals("1")) { + ToastUtil.showMessage("提交失败"); + }else{ + ToastUtil.showMessage("谢谢您的支持"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + default: + break; + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + CoursewareListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, CoursewareListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 初始化列表的数据 + if (page == 1) { + ListBeans.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + ListBeans.addAll(bean.data.list); + } + } + + else { + ListBeans.addAll(bean.data.list); + } + if (mAdapter == null) { + mAdapter = new CoursewareAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 +// long totalPage = bean.data.totalPage; + if (bean.data.list==null||bean.data.list.size()==0) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + ECAlertDialog buildAlert; + + private void showLoag() { + String message = "肝胆相照将稍后与您沟通课件分享\r\n谢谢您对平台的支持!"; + buildAlert = ECAlertDialog.buildAlert(CoursewareActivity.this, message, + "取消", "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + toshare(); + } + + }); + buildAlert.setTitle("提示"); + // buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + public void toshare() { + String expertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + Map param = new HashMap(); + param.put("content", "我要共享课件"); + param.put("expertUuid", expertUuid); + sendParamtoNet(Url.getfeedBack, param, GET_SHRE_DATAS_RESULT, mActivity, + true); + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + public class CoursewareAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return ListBeans.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return ListBeans.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_courseware); + vh = new ViewHolder(); + vh.mIv_type = (ImageView) convertView + .findViewById(R.id.item_iv_courseware); + vh.iv_down = (ImageView) convertView + .findViewById(R.id.iv_down); + vh.mTv_free = (TextView) convertView + .findViewById(R.id.item_tv_free_price); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.item_tv_title); + vh.mTv_providername = (TextView) convertView + .findViewById(R.id.item_tv_providername); + vh.mTv_hospitalname = (TextView) convertView + .findViewById(R.id.item_tv_hospitalname); + vh.mTv_readnum = (TextView) convertView + .findViewById(R.id.item_tv_rednum); + vh.mTv_price = (TextView) convertView + .findViewById(R.id.item_tv_price); + vh.mTv_yuan = (TextView) convertView + .findViewById(R.id.item_tv_yuan); + vh.mTv_old = (TextView) convertView + .findViewById(R.id.item_tv_old); + vh.mTv_old_price = (TextView) convertView + .findViewById(R.id.item_tv_old_price); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (ListBeans.get(position).getType().contains("pdf")) { + vh.mIv_type.setImageResource(R.drawable.pdf); + } else if (ListBeans.get(position).getType().contains("doc")) { + vh.mIv_type.setImageResource(R.drawable.word); + } else { + vh.mIv_type.setImageResource(R.drawable.ppt); + } + if (ListBeans.get(position).getPrice()<0){ + vh.iv_down.setVisibility(View.INVISIBLE); + }else { + vh.iv_down.setVisibility(View.VISIBLE); + } + vh.mTv_title.setText(ListBeans.get(position).getTitle()); + vh.mTv_hospitalname.setText(ListBeans.get(position).getHospitalname()); + vh.mTv_readnum.setText(ListBeans.get(position).getReadnum() + "人阅读"); + vh.mTv_title.setText(ListBeans.get(position).getTitle()); + vh.mTv_providername.setText(ListBeans.get(position) + .getProvidername()); + if (ListBeans.get(position).getPrice() == 0) { + vh.mTv_free.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else if (ListBeans.get(position).getPrice() > 0) { + if (ListBeans.get(position).getDiscount() < 1 + && ListBeans.get(position).getDiscount() > 0) { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.VISIBLE); + vh.mTv_price.setText(ListBeans.get(position).getDiscount() + * ListBeans.get(position).getPrice() / 100.0 + ""); + vh.mTv_old.setVisibility(View.VISIBLE); + vh.mTv_old_price.setVisibility(View.VISIBLE); + vh.mTv_old_price.setText(ListBeans.get(position).getPrice() + / 100.0 + ""); + vh.mTv_old_price.getPaint() + .setFlags( + Paint.STRIKE_THRU_TEXT_FLAG + | Paint.ANTI_ALIAS_FLAG); + } else if (ListBeans.get(position).getDiscount() == 1) { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.VISIBLE); + vh.mTv_price.setText(ListBeans.get(position).getPrice() + / 100.0 + ""); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else if (ListBeans.get(position).getDiscount() == 0) { + vh.mTv_free.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } + } else { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } + return convertView; + } + + class ViewHolder { + public ImageView mIv_type,iv_down; + public TextView mTv_title, mTv_providername, mTv_hospitalname, + mTv_readnum, mTv_price, mTv_yuan, mTv_free, mTv_old, + mTv_old_price; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/CtActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CtActivity.java new file mode 100644 index 0000000..1ae3d45 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/CtActivity.java @@ -0,0 +1,1129 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.InputType; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.ctIdBean; +import cn.shangyu.gdxzExpert.bean.ctIdBeans; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class CtActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + + @Override + public void setTitle() { + top_title.setText("腹部B超或CT"); + } + + String ctId; + View view; + + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + String baseinfoDataStatus; + TextView new_suifang; + String type; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_ct); + ctId=getIntent().getStringExtra("ctId"); + type=getIntent().getStringExtra("type"); +// if("2".equals(type)){ +// view.findViewById(R.id.l_zhifang).setVisibility(View.VISIBLE); +// } + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + view.findViewById(R.id.change_data).setOnClickListener(this); + view.findViewById(R.id.kuandu).setOnClickListener(this); + view.findViewById(R.id.yinhua).setOnClickListener(this); + ((EditText)(view.findViewById(R.id.pv))).setInputType(InputType.TYPE_CLASS_NUMBER); + initView(); + handletoken(Url.suifangCT); + baseinfoDataStatus=getIntent().getStringExtra("dataStatus"); + return view; + } + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(CtActivity.this, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + public List imgs= new ArrayList<>();; + ctIdBeans beans; + private void gettree() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.suifangCT+ctId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + beans= GsonTools.fromGsonToBean(response, ctIdBeans.class); + if(beans.getData()!=null) + { + if(!StringUtil.isEmpty(beans.getData().getPv())) + { + ((EditText)(view.findViewById(R.id.pv))).setText(beans.getData().getPv()); + + } + if("1".equals(beans.getData().getCir())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_21))).setChecked(true); + + } + else if("0".equals(beans.getData().getCir())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_22))).setChecked(true); + + } + if("1".equals(beans.getData().getHccFlag())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_31))).setChecked(true); + + } + else if("0".equals(beans.getData().getHccFlag())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_32))).setChecked(true); + + } + if("1".equals(beans.getData().getFldFlag())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_41))).setChecked(true); + + } + else if("0".equals(beans.getData().getFldFlag())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_42))).setChecked(true); + + } + + if(beans.getData().getImgPath()!=null&&beans.getData().getImgPath().size()>0) + { + imgs.addAll(beans.getData().getImgPath()); + } + if(beans.getData().getImgPath()!=null) + { + for(imBean urlBean:beans.getData().getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangCT); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + + } + public void statract() + { + Intent intent=new Intent(CtActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(CtActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.suifangCT)) + { + gettree(); + } + else if(url.contains(Url.suifangCTupdate)) + { + updatedata(); + } + + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.yinhua) { + showyiwen("肝硬化",getString(R.string.ganyinhua)); + } else if (id == R.id.kuandu) { + showyiwen("门静脉宽度","填写超声结果,不能填写CTorMR结果"); + } else if (id == R.id.new_suifang) { + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认保存新的信息?"); + } + },300); + } else if (id == R.id.change_data) { + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认本数据项已全部完成?"); + } + },300); + } + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(CtActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(content.contains("保存")) + { + sendpre(); + hideSoftKeyboard(); + } + else{ + baseinfoDataStatus="2"; + sendpre(); + hideSoftKeyboard(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + public void showyiwen(String title,String content) + { + EasyWindow.with(CtActivity.this).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + } + }).show(); + } + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(CtActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(CtActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(CtActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(CtActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(CtActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(CtActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(CtActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(CtActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(CtActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(CtActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + if(!StringUtil.isEmpty(mBitmaps.get(position).getPath())) + { + Glide.with(CtActivity.this).asBitmap().load(mBitmaps.get(position).getPath()) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)) + .into(view); + } + else + { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + CtActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + private void sendpre() + { + if(StringUtil.isEmpty( ((EditText)(view.findViewById(R.id.pv))).getText().toString())) + { + ToastUtil.showToast("门静脉宽度数值为必填项"); + return; + } + if( ((RadioButton)(view.findViewById(R.id.tab_rbn_21))).isChecked() + ||((RadioButton)(view.findViewById(R.id.tab_rbn_22))).isChecked()) + { + + } + else + { + ToastUtil.showToast("是否是肝硬化为必填项"); + return; + } + if( ((RadioButton)(view.findViewById(R.id.tab_rbn_31))).isChecked() + ||((RadioButton)(view.findViewById(R.id.tab_rbn_32))).isChecked()) + { + + } + else + { + ToastUtil.showToast("是否是肝癌化为必填项"); + return; + } + if( ((RadioButton)(view.findViewById(R.id.tab_rbn_41))).isChecked() + ||((RadioButton)(view.findViewById(R.id.tab_rbn_42))).isChecked()) + { + + } + else + { + ToastUtil.showToast("是否是脂肪肝为必填项"); + return; + } + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { + + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { + ctIdBean pro=new ctIdBean(); +// if(!StringUtil.isEmpty(beans.getData().getPv())) +// { + pro.setPv( ((EditText)(view.findViewById(R.id.pv))).getText().toString()); +// ((EditText)(view.findViewById(R.id.pv))).setText(beans.getData().getPv()); +// +// } + if( ((RadioButton)(view.findViewById(R.id.tab_rbn_21))).isChecked()) + { + pro.setCir("1"); +// ((RadioButton)(view.findViewById(R.id.tab_rbn_21))).setChecked(true); + + } + else if( ((RadioButton)(view.findViewById(R.id.tab_rbn_22))).isChecked()) + { + pro.setCir("0"); +// ((RadioButton)(view.findViewById(R.id.tab_rbn_22))).setChecked(true); + + } + if(((RadioButton)(view.findViewById(R.id.tab_rbn_31))).isChecked()) + { + pro.setHccFlag("1"); +// ((RadioButton)(view.findViewById(R.id.tab_rbn_31))).setChecked(true); + + } + else if(((RadioButton)(view.findViewById(R.id.tab_rbn_32))).isChecked()) + { + pro.setHccFlag("0"); +// ((RadioButton)(view.findViewById(R.id.tab_rbn_32))).setChecked(true); + + } + if(((RadioButton)(view.findViewById(R.id.tab_rbn_41))).isChecked()) + { + pro.setFldFlag("1"); + + + } + else if(((RadioButton)(view.findViewById(R.id.tab_rbn_42))).isChecked()) + { + pro.setFldFlag("0"); +// + + } + if(baseinfoDataStatus!=null) + { + pro.setDataStatus(baseinfoDataStatus); + } + pro.setImgPath(imgs); + pro.setCtId(ctId); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(Url.suifangCTupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + + if(hasrealtoken(response)>0) + { + finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangCTupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/DonatingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DonatingActivity.java new file mode 100644 index 0000000..0e09e4a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DonatingActivity.java @@ -0,0 +1,229 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * DonatingActivity.java + * + * @author liufang + * @date 2015-11-6 下午2:53:31 + * + * ****************************此页面已弃用,留备用,请转向IWantDonateActivity***************************** + * + * 功能说明:爱心捐助->我要捐助 + */ +public class DonatingActivity extends BaseActivity { + // private TextView tvDesc; + private EditText etName, etMobile, etContent, etQua, etDemand; + private RadioGroup rgSex; + private CheckBox cbLook; + private String isSex; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_title.setText("我要捐助"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_donating, null); + // tvDesc = (TextView) view.findViewById(R.id.donation_desc); + etName = (EditText) view.findViewById(R.id.donation_name); + etName.setOnFocusChangeListener(onFocusAutoClearHintListener);// 设置输入框获得焦点hint提示消失 + etMobile = (EditText) view.findViewById(R.id.donation_mobile); + etMobile.setOnFocusChangeListener(onFocusAutoClearHintListener); + etContent = (EditText) view.findViewById(R.id.donation_content); + etContent.setOnFocusChangeListener(onFocusAutoClearHintListener); + etQua = (EditText) view.findViewById(R.id.donation_qua); + etQua.setOnFocusChangeListener(onFocusAutoClearHintListener); + etDemand = (EditText) view.findViewById(R.id.donation_demand); + etDemand.setOnFocusChangeListener(onFocusAutoClearHintListener); + rgSex = (RadioGroup) view.findViewById(R.id.donation_sex_group); + rgSex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.donation_male) { + isSex = "0"; + } else if (checkedId == R.id.donation_female) { + isSex = "1"; + } + } + }); + cbLook = (CheckBox) view.findViewById(R.id.switch_other_look); + + return view; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + } + + /** + * 确定按钮点击事件 + */ + public void checkInput(View view) { + submit(); + } + + private void submit() { + String strName = etName.getText().toString(); + String strMobile = etMobile.getText().toString(); + String strContent = etContent.getText().toString(); + String strQua = etQua.getText().toString(); + String strDemand = etDemand.getText().toString(); + + if (StringUtil.isEmpty(strName)) { + ToastUtil.showMessage("请输入姓名!"); + etName.requestFocus(); + return; + } + if (StringUtil.isEmpty(isSex)) { + ToastUtil.showMessage("请选择性别!"); + return; + } + if (StringUtil.isEmpty(strMobile)) { + ToastUtil.showMessage("请输入联系方式!"); + etMobile.requestFocus(); + return; + } + if (!ValidateUtils.isPhoneAndMobile(strMobile)) { + ToastUtil.showMessage("请输入正确的联系方式!"); + etMobile.requestFocus(); + return; + } + if (StringUtil.isEmpty(strContent)) { + ToastUtil.showMessage("请输入捐助内容!"); + etContent.requestFocus(); + return; + } + if (StringUtil.isEmpty(strQua)) { + ToastUtil.showMessage("请输入捐助数量!"); + etQua.requestFocus(); + return; + } + if (StringUtil.isEmpty(strDemand)) { + ToastUtil.showMessage("请输入物品使用要求!"); + etDemand.requestFocus(); + return; + } + int isLook = 0; + if (cbLook.isChecked()) { + isLook = 1; + } else { + isLook = 0; + } + + showProgressDialog("提交中..."); + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("name", strName); + params.addBodyParameter("sex", String.valueOf(isSex)); + params.addBodyParameter("phone", strMobile); + params.addBodyParameter("content", strContent); + params.addBodyParameter("amounts", strQua); + params.addBodyParameter("useRequirements", strDemand); + params.addBodyParameter("donateType", "2"); + params.addBodyParameter("donaterUuid", uuid); + params.addBodyParameter("details", "详情"); + params.addBodyParameter("otherCanSee", String.valueOf(isLook)); + LogUtil.i("donaterUuid==" + uuid + "sex==" + String.valueOf(isSex) + + "phone==" + strMobile + "content==" + strContent + + "amounts==" + strQua + "useRequirements==" + strDemand + + "donateType==" + "2" + "otherCanSee==" + + String.valueOf(isLook) + "details==" + "详情" + "name==" + + strName); + HttpHelper.loadData(HttpMethod.POST, Url.getSubmitLove, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + ToastUtil.showToast("谢谢您的捐助"); + Intent intent = new Intent(); + intent.putExtra("flag", 1); + setResult(Constant.DONATE_CODE, intent); + AppManager.getAppManager().finishActivity( + DonatingActivity.this); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + closeProgressDialog(); + ToastUtil.showToast("提交失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("submit().onFailure = " + arg1); + closeProgressDialog(); + ToastUtil.showToast("提交失败!"); + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/DownloadCollectActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DownloadCollectActivity.java new file mode 100644 index 0000000..180860f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DownloadCollectActivity.java @@ -0,0 +1,166 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.ContextMenu; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import com.gyf.immersionbar.ImmersionBar; + +import androidx.fragment.app.FragmentManager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.DownloadCollectFragment; +import cn.shangyu.gdxzExpert.widge.pickerview.PopMenu; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * DownloadCollectActivity.java + * + * @author liufang + * @date 2015-11-5 上午11:28:43 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆页面 + */ +public class DownloadCollectActivity extends BaseActivity implements + OnCheckedChangeListener { + private RadioGroup main_radiogroup; + private FragmentManager fm; + private PopMenu popMenu; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_right.setVisibility(View.VISIBLE); + top_title.setText("我的图书馆"); + top_right.setImageResource(R.drawable.icon_library_right); + // 初始化弹出菜单 + popMenu = new PopMenu(this); + popMenu.addItems(new String[] { getString(R.string.action_download), + getString(R.string.action_collect) }, + new int[] { R.drawable.icon_pop_item_down, + R.drawable.icon_pop_item_collect }); + // 菜单项点击监听器 + popMenu.setOnItemClickListener(popmenuItemClickListener); + } + + // 弹出菜单监听器 + OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (position == 0) { + // ***********下载*********** + startActivity(new Intent(ct, MyDownloadActivity.class)); + } else if (position == 1) { + // ************收藏************ + startActivity(new Intent(ct, MyCollectActivity.class)); + } + popMenu.dismiss(); + } + }; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_download_collect, null); + main_radiogroup = (RadioGroup) view + .findViewById(R.id.main_radiogroup_download); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); + changeGuide(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCreateContextMenu(ContextMenu menu, View v, + ContextMenuInfo menuInfo) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.menu_download_collect, menu); + super.onCreateContextMenu(menu, v, menuInfo); + } + + @Override + public boolean onContextItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_download: + startActivity(new Intent(ct, MyDownloadActivity.class)); + break; + case R.id.action_collect: + startActivity(new Intent(ct, MyCollectActivity.class)); + break; + } + return true; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right: + popMenu.showAsDropDown(v);//弹出弹出框选项 + break; + + default: + break; + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.tab_rbn_guide: + changeGuide(); + break; + case R.id.tab_rbn_journal: + changeJournal(); + break; + case R.id.tab_rbn_express: + changeExpress(); + break; + } + } + + /** + * 治疗指南 + */ + private void changeGuide() { + DownloadCollectFragment mFragment = DownloadCollectFragment + .newInstance(0); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "guide_list") + .commit(); + } + + /** + * 期刊杂志 + */ + private void changeJournal() { + DownloadCollectFragment mFragment = DownloadCollectFragment + .newInstance(1); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "journal_list") + .commit(); + } + + /** + * 权威速递 + */ + private void changeExpress() { + DownloadCollectFragment mFragment = DownloadCollectFragment + .newInstance(2); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "express_list") + .commit(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWith2Atvitity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWith2Atvitity.java new file mode 100644 index 0000000..6ef8f37 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWith2Atvitity.java @@ -0,0 +1,986 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.Message; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BankCardBean; +import cn.shangyu.gdxzExpert.bean.BankCardBean.Card; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CircleImageView; +import cn.shangyu.gdxzExpert.widget.CustomClearEditText; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.TimeButton; + +public class DrawWith2Atvitity extends BaseActivity implements + OnCallBackFromNet { + private TextView tvAbleBalance; + private double ableBalance; + private double mFwMoney; + private double minCash; + private double mOneDraw; + private int position = 0; + private String orderId = ""; + private LinearLayout tvCard; + private CircleImageView mIv_card; + private TextView mTv_card_name, mTv_card_num, mTv_service, + mBt_sure, mTv_getMoney,tv_ze; + private ForegroundColorSpan redSpan, redSpan2; + private DrawWith2Atvitity mAtvitity; + private CustomClearEditText mEt_get_money; + private LinearLayout mLl_card; + private Card firshCard = null; + private String cardUuid = null; + private BankCardBean bean = null; + private String yzmTx = null; +// private SmsObserver mObserver; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(getString(R.string.draw_with_text)); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_draw_with2, null); + mIv_card = (CircleImageView) view.findViewById(R.id.iv_bank_img); + mAtvitity = this; + tv_ze=view.findViewById(R.id.tv_ze); + tv_ze.setOnClickListener(this); + redSpan = new ForegroundColorSpan(mAtvitity.getResources().getColor( + R.color.red)); + redSpan2 = new ForegroundColorSpan(mAtvitity.getResources().getColor( + R.color.red)); + mTv_card_name = (TextView) view.findViewById(R.id.tv_card_name); + mTv_card_num = (TextView) view.findViewById(R.id.tv_card_num); + mTv_service = (TextView) view.findViewById(R.id.tv_service); +// mTv_Time = (TextView) view.findViewById(R.id.tv_time); + mBt_sure = (TextView) view.findViewById(R.id.tv_draw_with); + mEt_get_money = (CustomClearEditText) view + .findViewById(R.id.et_addcard_name); + mTv_getMoney = (TextView) view.findViewById(R.id.tv_get_money); + mBt_sure.setOnClickListener(this); + mLl_card = (LinearLayout) view.findViewById(R.id.lv_draw_with_card); +// mObserver = new SmsObserver(DrawWith2Atvitity.this, mHandler); +// Uri uri = Uri.parse("content://sms/"); +// // 注册短信的监听 +// getContentResolver().registerContentObserver(uri, true, mObserver); + initIntent(); + initData(); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + // 获取数据 + ableBalance = getIntent().getDoubleExtra("ableBlance", 0); + mFwMoney = getIntent().getDoubleExtra("mFwMoney", 0); + minCash = getIntent().getDoubleExtra("minCash", 0); + mOneDraw = getIntent().getDoubleExtra("mOneDraw", 0); + Log.d("WXEntryActivity","ableBalance "+ableBalance / 100); + mEt_get_money.setText(String.format("%.2f", ableBalance / 100) ); +// String getMoney = null; +// +// if (ableBalance / 100 > mOneDraw / 100) { +// mEt_get_money.setText((int) mOneDraw / 100 + ""); +// getMoney = "此次提现实际到账" +// + String.format("%.2f", (mOneDraw - mFwMoney) / 100) + "元"; +// } else { +// getMoney = "此次提现实际到账" +// + String.format("%.2f", (ableBalance - mFwMoney) / 100) +// + "元"; +// mEt_get_money.setText((ableBalance / 100) + ""); +// } +// SpannableStringBuilder buildermoney = new SpannableStringBuilder( +// getMoney); +// buildermoney.setSpan(redSpan, getMoney.indexOf("账") + 1, +// getMoney.indexOf("元"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// mTv_getMoney.setText(buildermoney); + getTax((int)ableBalance+""); + } + + private void initData() { + // TODO Auto-generated method stub +// String service = "扣除个人所得税" + String.format("%.2f", mFwMoney / 100) +// + "元"; +// String time = "单笔限额" + (int) (mOneDraw / 100) + "元,单日限额2万元"; +// +// SpannableStringBuilder builderService = new SpannableStringBuilder( +// service); +// builderService.setSpan(redSpan, service.indexOf("税") + 1, +// service.indexOf("元"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + +// mTv_service.setText(builderService); + +// SpannableStringBuilder buildertime = new SpannableStringBuilder(time); +// buildertime.setSpan(redSpan, time.indexOf("单笔限额") + 4, +// time.indexOf("元"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// +// buildertime.setSpan(redSpan2, time.indexOf("单日限额") + 4, +// time.indexOf("万元") + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// +// mTv_Time.setText(buildertime); + + mLl_card.setOnClickListener(this); + String bankList = SharePrefUtil.getString(mAtvitity, + Url.getBankCardList, ""); +// mEt_get_money.addTextChangedListener(new TextWatcher() { +// +// @Override +// public void onTextChanged(CharSequence s, int start, int before, +// int count) { +// // TODO Auto-generated method stub +// +// } +// +// @Override +// public void beforeTextChanged(CharSequence s, int start, int count, +// int after) { +// // TODO Auto-generated method stub +// +// } +// +// @Override +// public void afterTextChanged(Editable s) { +// // TODO Auto-generated method stub +// String money = mEt_get_money.getText().toString().trim(); +// double balance; +// if (!StringUtil.isEmpty(money)) { +// balance = Double.parseDouble(money); +// } else { +// balance = 0; +// } +// String getMoney = null; +// if (balance > mFwMoney / 100) { +// getMoney = "此次提现实际到账" +// + String.format("%.2f", balance - mFwMoney / 100) +// + "元"; +// +// } else { +// getMoney = "此次提现实际到账0.00元"; +// } +// SpannableStringBuilder buildermoney = new SpannableStringBuilder( +// getMoney); +// buildermoney.setSpan(redSpan, getMoney.indexOf("账") + 1, +// getMoney.indexOf("元"), +// Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// mTv_getMoney.setText(buildermoney); +// } +// }); + processBanklist(bankList); + getCardList(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + Intent intent; + switch (v.getId()) { + case R.id.tv_ze: + Intent intent2=new Intent(DrawWith2Atvitity.this,WebActivity.class); + intent2.putExtra("url","https://doc.igandan.com/app/integral/expert_tixian.html"); + intent2.putExtra("title","提现规则"); + intent2.putExtra("need_share","0"); + startActivity(intent2); + break; + case R.id.lv_draw_with_card:// 选择银行卡 + intent = new Intent(ct, SelectBankCardActivity.class); + intent.putExtra("cardUuid", cardUuid); + startActivityForResult(intent, Constant.SELECT_BANK_CARD); + break; + case R.id.tv_draw_with: + String drawMoney = mEt_get_money.getText().toString(); + if (StringUtil.isEmpty(drawMoney)) { + ToastUtil.showMessage("提现金额不能为空"); + return; + } + double money = Double.parseDouble(drawMoney) * 100; + if (ableBalance < money) { + ToastUtil.showMessage("可提现余额不足"); + return; + } + + if (minCash > money) { + ToastUtil.showMessage("提现金额不得少于" + minCash / 100 + "元"); + return; + } + +// if (money > mOneDraw) { +// String one = "单笔提现金额不得超过" + (int) (mOneDraw / 100) + "元"; +// aaa2(one); +// return; +// } + sendMessageDialog(); + // getdrawResult(message); + break; + } + + } + + /* + * String user_uuid Integer amount String card_number String user_name + * String openbankcode String openbank String prov String city String + * sub_bank + */ + public void getdrawResult(String message) { + // user_uuid,用户uuid + // amount, 提现金额 + // bank_uud 银行卡id + // phone_number  手机号 + // sms  短信验证码 + String drawMoney = mEt_get_money.getText().toString(); + double amount = Double.parseDouble(drawMoney) * 100; + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); +// param.put("user_uuid", uuid); + param.put("sms", message); +// param.put("amount", (int) amount + ""); + param.put("bankcard_uuid", firshCard.getUuid()); + param.put("phone_number", firshCard.getMobile()); + + sendJsonPostParamtoNetSignMD5(Url.getCreateWithdrawal4Unionpay, param, 101, this); + } + public void getTax(String amount) + { + Map param = new HashMap(); + param.put("amount", amount); + Log.d("WXEntryActivity","amount "+amount); + sendJsonPostParamtoNetSignMD5(Url.getIncomeTax, param, 104, this); + } + + /** + * 获取我的银行卡列表 + */ + public void getCardList() { + showProgressDialog("加载中"); + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + sendParamtoNet(Url.getBankCardList, param, 102, mAtvitity, true); + } + + /** + * 解析并处理数据 + * + */ + private void processBanklist(String result) { + closeProgressDialog(); + bean = GsonTools.fromGsonToBean(result, BankCardBean.class); + + if (bean.bankList.size() > 0) { + firshCard = bean.bankList.get(0); + if(!StringUtil.isEmpty(firshCard.getOpen_bank())) + mTv_card_name.setText(firshCard.getOpen_bank()); + mTv_card_num.setText("尾号为" + firshCard.getCard_number() + "储蓄卡"); + cardUuid = firshCard.getUuid(); + if(!StringUtil.isEmpty(firshCard.getOpen_bank_code())) + seletBankIcon(firshCard.getOpen_bank_code()); + } + + } + + private void seletBankIcon(String name) { + switch (name) { + case "0102": + mIv_card.setImageResource(R.drawable.icon_bankcard_gongshang); + break; + case "0105": + mIv_card.setImageResource(R.drawable.icon_bankcard_jianseyinhang); + break; + case "0104": + mIv_card.setImageResource(R.drawable.icon_bankcard_zhongguo); + break; + case "0103": + mIv_card.setImageResource(R.drawable.icon_bankcard_nongyeyinhang); + break; + case "0308": + mIv_card.setImageResource(R.drawable.icon_bankcard_zhaoshangyinhang); + break; + case "0100": + mIv_card.setImageResource(R.drawable.icon_bankcard_youzheng); + break; + case "0301": + mIv_card.setImageResource(R.drawable.icon_bankcard_jiatong); + break; + case "0303": + mIv_card.setImageResource(R.drawable.icon_bankcard_guangda); + break; + case "0318": + mIv_card.setImageResource(R.drawable.icon_bankcard_pingan); + break; + case "0401": + mIv_card.setImageResource(R.drawable.icon_bankcard_shanghai); + break; + case "0306": + mIv_card.setImageResource(R.drawable.icon_bankcard_guangfa); + break; + case "0403": + mIv_card.setImageResource(R.drawable.icon_bankcard_beijingyinhang); + break; + case "0309": + mIv_card.setImageResource(R.drawable.icon_bankcard_xingye); + break; + case "0304": + mIv_card.setImageResource(R.drawable.icon_bankcard_huaxiayinhnag); + break; + case "0302": + mIv_card.setImageResource(R.drawable.icon_bankcard_zhongxinshiye); + break; + case "0305": + mIv_card.setImageResource(R.drawable.icon_bankcard_minshneg); + break; + case "上海浦东发展银行": + mIv_card.setImageResource(R.drawable.icon_bankcard_shanghaipudongfazhanyinhang); + break; + + default: + mIv_card.setImageResource(R.drawable.bank_card_mr); + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, + Intent datas) { + + if (resultCode == RESULT_OK && requestCode == Constant.SELECT_BANK_CARD) { + if (datas != null) { + // 取出返回的数据 + String cardId = datas.getStringExtra("cardId"); + for (int i = 0; i < bean.bankList.size(); i++) { + if (cardId.equals(bean.bankList.get(i).getUuid())) { + firshCard = bean.bankList.get(i); + mTv_card_name.setText(firshCard.getOpen_bank()); + mTv_card_num.setText("尾号为" + firshCard.getCard_number() + + "储蓄卡"); + cardUuid = firshCard.getUuid(); + seletBankIcon(firshCard.getOpen_bank_code()); + } + } + + } + } + super.onActivityResult(requestCode, resultCode, datas); + } + + public final static int GET_SYSTEM_TIME_RESULT = 103; + private String system_time = null; + + public void getSystemTime() { + String username = firshCard.getMobile(); + Map param = new HashMap<>(); + param.put("mobile",username); + param.put("type","4"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); +// Map param = new HashMap(); +// sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, +// DrawWith2Atvitity.this, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("WXEntryActivity",resultCode+"resultCode "+resultJson); + switch (resultCode) { + case 104: + try { + JSONObject object=new JSONObject(resultJson); + if("200".equals(object.getString("code"))) + { + String getMoney = null; + +// if (ableBalance / 100 > mOneDraw / 100) { +// mEt_get_money.setText((int) mOneDraw / 100 + ""); + getMoney = "此次提现实际到账" + + String.format("%.2f", (object.getJSONObject("data").getDouble("actual_amount")/100)) + "元"; +// } else { +// getMoney = "此次提现实际到账" +// + String.format("%.2f", (ableBalance - mFwMoney) / 100) +// + "元"; +// mEt_get_money.setText((ableBalance / 100) + ""); +// } + SpannableStringBuilder buildermoney = new SpannableStringBuilder( + getMoney); + buildermoney.setSpan(redSpan, getMoney.indexOf("账") + 1, + getMoney.indexOf("元"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + mTv_getMoney.setText(buildermoney); + String service = "扣除个人所得税" + String.format("%.2f", object.getJSONObject("data").getDouble("tax")/100) + + "元"; + SpannableStringBuilder builderService = new SpannableStringBuilder( + service); + builderService.setSpan(redSpan, service.indexOf("税") + 1, + service.indexOf("元"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + + mTv_service.setText(builderService); + } + else + { + ToastUtil.showMessage(object.getString("msg")); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + + break; + case MSG_SEND: + + + try { + JSONObject objs2 = new JSONObject(resultJson); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals("200")) { + mtb_getNum.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case 101: + JSONObject jsonObject = null; + String code = null; + String message = null; + if (resultJson != null) { + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + + message = jsonObject.getString("message"); + if (("200").equals(code)) { + dialog.dismiss(); + aaa(); + } else { + ToastUtil.showMessage(message); + } + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("服务器异常"); + } + } else { + ToastUtil.showMessage("服务器异常"); + } + break; + case 102: + processBanklist(resultJson); + break; + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + new Thread(networkTask3).start(); + break; + default: + break; + } + } + + private ECAlertDialog buildAlert; + + public void aaa() { + buildAlert = ECAlertDialog.buildAlert(mAtvitity, "提现申请已经发送成功", null, + "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + mAtvitity.finish(); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mAtvitity.getResources().getColor( + R.color.top_title)); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + private ECAlertDialog buildAlert2; + + public void aaa2(String str) { + buildAlert2 = ECAlertDialog.buildAlert(mAtvitity, str, null, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert2.dismiss(); + + } + }); + buildAlert2.setTitle("温馨提示"); + buildAlert2.setTitleColor(mAtvitity.getResources().getColor( + R.color.top_title)); + buildAlert2.setCanceledOnTouchOutside(false); + buildAlert2.show(); + } + + private Dialog dialog; + TimeButton mtb_getNum; + // 短信验证码 + EditText mEt_getPhonenum; + // 图形验证码 + EditText mEt_getyzmnum; + // 图形 + ImageView mIv_num; + + protected void sendMessageDialog() { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(mAtvitity); + RelativeLayout layout = (RelativeLayout) inflater.inflate( + R.layout.dialog_draw_with, null); + // 2. 新建对话框对象 + dialog = new AlertDialog.Builder(mAtvitity, + R.style.Theme_Light_FullScreenDialogAct).create(); + dialog.setCancelable(true); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + // 只用下面这一行弹出对话框时需要点击输入框才能弹出软键盘 + dialog.getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + // 加上下面这一行弹出对话框时软键盘随之弹出 + // dialog.getWindow().setSoftInputMode( + // WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + // 3. 消息内容 + + TextView btn_content = (TextView) layout + .findViewById(R.id.dialog_tv_content);// 手机号 + StringBuilder sb = new StringBuilder(firshCard.getMobile()); + String content = "请输入手机" + sb.replace(3, 7, "****") + "收到的验证码"; + btn_content.setText(content); + mEt_getPhonenum = (EditText) layout.findViewById(R.id.et_get_num); + mEt_getyzmnum = (EditText) layout.findViewById(R.id.et_get_yzm); + mIv_num = (ImageView) layout.findViewById(R.id.iv_get_yzm); + mIv_num.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + new Thread(networkTask).start(); + } + }); + mtb_getNum = (TimeButton) layout.findViewById(R.id.tv_get_num);// 时间按钮 + mtb_getNum.onCreate(); + mtb_getNum.clearTimer(); + mtb_getNum.setTextBefore("获取验证码").setLenght(60 * 1000); + Button btn_ignore = (Button) layout.findViewById(R.id.dilaog_button1); + Button btn_update = (Button) layout.findViewById(R.id.dilaog_button2); + // new Thread(networkTask).start(); + btn_ignore.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + dialog.dismiss(); + /** 隐藏软键盘 **/ + } + }); + btn_update.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // yzmTx = mEt_getyzmnum.getText().toString().trim(); + // if (StringUtil.isEmpty(yzmTx)) { + // ToastUtil.showMessage("请输入图形验证码"); + // return; + // } + + String messageNum = mEt_getPhonenum.getText().toString().trim(); + if (StringUtil.isEmpty(messageNum)) { + + ToastUtil.showMessage("请输入短信验证码"); + return; + } + getdrawResult(messageNum); + + } + }); + mtb_getNum.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // yzmTx = mEt_getyzmnum.getText().toString().trim(); + + getSystemTime(); + + } + }); + + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + long times = System.currentTimeMillis(); + mbBitmap = getInternetPicture(Url.getImagecode + "?t=" + times); + handler1.sendEmptyMessage(1); + + } + }; + Bitmap mbBitmap = null; + Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + switch (msg.what) { + case 1: + if (mbBitmap != null) + mIv_num.setImageBitmap(mbBitmap); + + break; + case 2: + String str = (String) msg.obj; + JSONObject objs; + try { + objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + + new Thread(networkTask3).start(); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 3: + String str2 = (String) msg.obj; + JSONObject objs2; + try { + objs2 = new JSONObject(str2); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals(String.valueOf(1))) { + mtb_getNum.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + default: + break; + } + } + + }; + String sessionid = null; + + public Bitmap getInternetPicture(String UrlPath) { + Bitmap bm = null; + // 1、确定网址 + // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg + String urlpath = UrlPath; + // 2、获取Uri + try { + URL uri = new URL(urlpath); + + // 3、获取连接对象、此时还没有建立连接 + HttpURLConnection connection = (HttpURLConnection) uri + .openConnection(); + // 4、初始化连接对象 + // 设置请求的方法,注意大写 + connection.setRequestMethod("GET"); + // 读取超时 + connection.setReadTimeout(5000); + // 设置连接超时 + connection.setConnectTimeout(5000); + // 5、建立连接 + connection.connect(); + String cookieval = connection.getHeaderField("set-cookie"); + + if (cookieval != null) { + sessionid = cookieval.substring(0, cookieval.indexOf(";")); + } + + // 6、获取成功判断,获取响应码 + if (connection.getResponseCode() == 200) { + // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中 + InputStream is = connection.getInputStream(); + // 8、从流中读取数据,构造一个图片对象GoogleAPI + bm = BitmapFactory.decodeStream(is); + // 9、把图片设置到UI主线程 + // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件; + is.close(); + + } else { + bm = null; + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return bm; + + } + + Runnable networkTask3 = new Runnable() { + + @Override + public void run() { + // TODO + yzCode(); + + } + }; + + // 获取验证码 + private void yzCode() { + final String username = firshCard.getMobile(); + try { + // 对输入的内容进行编码,防止中文乱码 + // String usernum = URLEncoder.encode(yzmTx, "UTF-8"); + int a = StringUtil.getnum(); + String mc = null; + // SimpleDateFormat fmt = new + // SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // String timestr = fmt.format(new Date()); + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(username + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getsendSms + "?mc=" + mc + "&type=5&a=" + a); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 3; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onDestroy() { + if (mtb_getNum != null) { + mtb_getNum.onDestroy(); + } + + super.onDestroy(); +// getContentResolver().unregisterContentObserver(mObserver); + } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + + mIsRight(); + + } + }; + + private void mIsRight() { + try { + // 对输入的内容进行编码,防止中文乱码 + String username = URLEncoder.encode(yzmTx, "UTF-8"); + + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getvalide + "?valicode=" + username); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 2; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + @Override + public void finish() { + // TODO Auto-generated method stub + Intent intent = new Intent(); + setResult(RESULT_OK, intent); + super.finish(); + + } + + +// private Handler mHandler = new Handler() { +// @Override +// public void handleMessage(Message msg) { +// if (msg.what == LoginActivity.MSG_RECEIVED_CODE) { +// String code = (String) msg.obj; +// if (code != null) { +// mEt_getPhonenum.setText(code.trim()); +// } +// +// } +// } +// }; + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWithActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWithActivity.java new file mode 100644 index 0000000..23ee6b8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DrawWithActivity.java @@ -0,0 +1,206 @@ +package cn.shangyu.gdxzExpert.activity; + +import java.util.List; + +import org.json.JSONException; +import org.json.JSONObject; + +import android.app.AlertDialog; +import android.app.AlertDialog.Builder; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.OrderBean.OrderData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +/** + * DrawWithActivity.java + * + * @author liufang + * @date 2015-11-10 上午10:46:12 + * + * @date 2015-12-08 15:10 jixiao + * 修改 功能说明:账户-提现页面 + */ +public class DrawWithActivity extends BaseActivity { + private TextView tvAbleBalance; + // private TextView tvMoney; + private double ableBalance; + private int position = 0; + private List datas; + private String cardId; + private String bankName; + private String cardNum; + private String orderId = ""; + private LinearLayout tvCard; + private TextView bankcard; + + // private EditText etMoney;//输入可提现金额功能暂时不用 + + @Override + public void setTitle() { + top_title.setText(getString(R.string.draw_with_text)); + // 获取数据 + datas = getIntent().getParcelableArrayListExtra(Constant.ORDER_DATA); + ableBalance = getIntent().getDoubleExtra("balance", 0); + } + + @Override + public View onCreateSuccessedView() { + View view = View.inflate(ct, R.layout.activity_draw_with, null); + tvAbleBalance = (TextView) view.findViewById(R.id.tv_able_balance);// 可体现金额 + // etMoney = (EditText) view.findViewById(R.id.et_draw_with_money); + // tvMoney = (TextView) view.findViewById(R.id.tv_draw_with_money); + tvCard = (LinearLayout) view.findViewById(R.id.lv_draw_with_card);// 选择银行卡 + bankcard = (TextView) view.findViewById(R.id.tv_draw_with_card);// 显示选中提现的银行卡尾号 + tvCard.setOnClickListener(this); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 初始化数据 + */ + private void initData() { + for (OrderData order : datas) { + if (!StringUtil.isEmpty(order.getUuid())) { + orderId += order.getUuid() + ","; + } + } + LogUtil.i("orderId=" + orderId); + // 显示金额 + tvAbleBalance.setText("¥" + String.format("%.2f", ableBalance)); + // tvMoney.setText("¥" + String.format("%.2f", ableBalance)); + } + + @Override + protected void processClick(View v) { + Intent intent; + switch (v.getId()) { + case R.id.lv_draw_with_card:// 选择银行卡 + intent = new Intent(ct, SelectBankCardActivity.class); + intent.putExtra("position", position); + startActivityForResult(intent, Constant.SELECT_BANK_CARD); + break; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, + Intent datas) { + + if (resultCode == RESULT_OK && requestCode == Constant.SELECT_BANK_CARD) { + if (datas != null) { + // 取出返回的数据 + cardId = datas.getStringExtra("cardId"); + bankName = datas.getStringExtra("bankName"); + cardNum = datas.getStringExtra("cardNum"); + bankcard.setText(bankName + " 尾号:" + + cardNum.substring(cardNum.length() - 4)); + LogUtil.i("datas--------" + datas); + } + } + super.onActivityResult(requestCode, resultCode, datas); + } + + /** + * 提现按钮点击事件 在xml清单 实现可点击事件 android:onClick="checkInput" + */ + public void checkInput(View view) { + // String strMoney = etMoney.getText().toString(); + // if (StringUtil.isEmpty(strMoney)) { + // showMessage("请输入提现金额!"); + // return; + // } + // double blance = Double.parseDouble(strMoney); + // if (blance > ableBalance) { + // showMessage("输入的金额不能大于可提现金额!"); + // return; + // } + + if (StringUtil.isEmpty(cardId)) { + showMessage("请选择提现银行卡!"); + return; + } + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("orderUuid", orderId); + params.addBodyParameter("bankCardUuid", cardId); + LogUtil.i("expertUuid=" + uuid + "orderUuid=" + orderId + + "bankCardUuid=" + cardId); + HttpHelper.loadData(HttpMethod.POST, Url.getcash, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getPreCashList.onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + ToastUtil.showToast(message); + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + finish(); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("提交失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + ToastUtil.showToast(arg1); + } + }); + } + + /** + * 自定义对话框 + */ + private void showMessage(String msg) { + Builder builder = new Builder(ct, + AlertDialog.THEME_HOLO_LIGHT); + View view = View.inflate(ct, R.layout.dialog_prompt, null); + builder.setView(view); + final AlertDialog dialog = builder.create(); + TextView tvMessage = (TextView) view.findViewById(R.id.tv_message); + TextView tvSure = (TextView) view.findViewById(R.id.tv_sure); + tvMessage.setText(msg); + tvSure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + dialog.show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/DuiFuliActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DuiFuliActivity.java new file mode 100644 index 0000000..65bb28e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/DuiFuliActivity.java @@ -0,0 +1,324 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.stringArray; +import static cn.shangyu.gdxzExpert.utils.Url.exchangeWelfareCard; +import static cn.shangyu.gdxzExpert.utils.Url.myWelfareCard; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.text.Editable; +import android.text.InputFilter; +import android.text.Spanned; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.FuCardBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class DuiFuliActivity extends BaseActivity implements OnCallBackFromNet { + + private View view; + private TextView tv_button, tv_total,tv_help; + private EditText et1; + private EditText et2; + private EditText et3; + private EditText et4; + private FuCardBean fuCardBean; + private RelativeLayout r_top; + private AlertDialog dialog4; + + @Override + public void setTitle() { + top_title.setText("兑换福利卡"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setTextSize(18); + top_right_text.setText("帮助说明"); + top_right_text.setOnClickListener(this); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_dui_fuli_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_dui_fuli); + } + tv_button=view.findViewById(R.id.tv_button); + tv_button.setOnClickListener(this); + r_top=view.findViewById(R.id.r_top); + r_top.setOnClickListener(this); + tv_help=view.findViewById(R.id.tv_help); + tv_help.setOnClickListener(this); + et1=view.findViewById(R.id.edt1); + et2=view.findViewById(R.id.edt2); + et3=view.findViewById(R.id.edt3); + et4=view.findViewById(R.id.edt4); + tv_total=view.findViewById(R.id.tv_total); + final EditText[] mArray = new EditText[] { et1,et2, et3, et4 }; + + for (int i = 0; i < mArray.length; i++) { + final int j = i; + setEditTextInhibitInputSpeChat(mArray[j]); + mArray[j].addTextChangedListener(new TextWatcher() { + private CharSequence temp; + private int sStart; + private int sEnd; + + @Override + public void onTextChanged(CharSequence s, int start, + int before, int count) { + + temp=s; + } + + @Override + public void afterTextChanged(Editable s) { + + sStart = mArray[j].getSelectionStart(); + sEnd = mArray[j].getSelectionEnd(); + + if (temp.length() == 4 && (j == 0 || j == 1 || j == 2)) { + mArray[j + 1].setFocusable(true); + mArray[j + 1].setFocusableInTouchMode(true); + mArray[j + 1].requestFocus(); + } + if (temp.length() > 4) { + ArrayList tp= stringArray(s.toString(),4,4-j); + + for(int k=0;k param = new HashMap<>(); + param.put("page",page); + sendJsonPostParamtoNetSignMD5(myWelfareCard,param,102,this); + } + + /** + * 禁止EditText输入空格 + * @param editText + */ + public static void setEditTextInhibitInputSpace(EditText editText){ + InputFilter filter=new InputFilter() { + @Override + public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { + if(source.equals(" "))return ""; + else return null; + } + }; + editText.setFilters(new InputFilter[]{filter}); + } + /** + * 禁止EditText输入特殊字符 + * @param editText + */ + public static void setEditTextInhibitInputSpeChat(EditText editText){ + + InputFilter filter=new InputFilter() { + @Override + public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { + String speChat="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; + Pattern pattern = Pattern.compile(speChat); + Matcher matcher = pattern.matcher(source.toString()); + if(matcher.find())return ""; + else if(source.equals(" "))return ""; + else return null; + } + }; + editText.setFilters(new InputFilter[]{filter}); + } + + + private void duiCard(String password) + { + needreportSimple("exchange"); + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("password",password); + sendJsonPostParamtoNetSignMD5(exchangeWelfareCard,param,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_button) { + String password = ""; + + password+=et1.getText().toString().trim()+et2.getText().toString().trim() + +et3.getText().toString().trim()+et4.getText().toString().trim(); + +// if (!ValidateUtils.isCardPassword(password)) { +// ToastUtil.showToast("请输入6-16位字母、数字组合密码"); +// return; +// } + if(password.trim().length()!=16) + { + ToastUtil.showToast("请输入16位福利卡密码(不区分大小写)"); + return; + } + duiCard(password); +// duiCard("9IURGC6ZTZUUCQCN"); + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } else if (id == R.id.top_right_text || id == R.id.tv_help) { + Intent intent2=new Intent(DuiFuliActivity.this,WebActivity.class); + intent2.putExtra("url","https://oss.igandan.com/html/welfare_qw.html"); + intent2.putExtra("title","帮助说明"); + intent2.putExtra("need_share","0"); + startActivity(intent2); +// Intent broadc = new Intent(DuiFuliActivity.this, NewsDetailActivity.class); +// broadc.putExtra("url","https://oss.igandan.com/html/welfare_qw.html"); +// broadc.putExtra("title","帮助说明"); +// broadc.setType("qiandao"); +// startActivity(broadc); + } else if (id == R.id.r_top) { + Intent intent1=new Intent(DuiFuliActivity.this,MyWelfAreActivity.class); + intent1.putExtra("changeFragment",2); + startActivity(intent1); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + + LayoutInflater inflater = LayoutInflater.from(DuiFuliActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + dialog4 = new AlertDialog.Builder( + DuiFuliActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText("福利卡兑换成功,请前往查看权益"); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog4.dismiss(); + Intent intent1=new Intent(DuiFuliActivity.this,MyWelfAreActivity.class); + intent1.putExtra("changeFragment",2); + startActivity(intent1); + + + } + }); +// ToastUtil.showMessage("福利卡兑换成功,请前往查看权益"); + } + else + { + + ToastUtil.showMessage(jsonObject.getString("msg")+""); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 102: + fuCardBean= GsonTools.fromGsonToBean(resultJson, FuCardBean.class); + if ("200".equals(fuCardBean.getCode())) { + tv_total.setText("已兑换" + fuCardBean.getData().getTotal() + "张" + "\n查看现有权益"); + } + else { + ToastUtil.showToast(fuCardBean.getMessage() + ""); + } + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditEmailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditEmailActivity.java new file mode 100644 index 0000000..3205f4c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditEmailActivity.java @@ -0,0 +1,152 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author ssy 苏三元 + * @date 2015-8-31 下午2:47:47 + * 功能说明:我的-个人资料-编辑邮箱 + * //注意,此xml布局页面也被修改科室电话共用EditOfficePhoneActivity + */ +public class EditEmailActivity extends BaseActivity { + + private EditText et_email; + private String email; + private String uuid; + private String mobile; + public static String modifyUrl = Url.getmodify;// 修改个人资料地址 + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("修改邮箱"); + } + + @Override + public View onCreateSuccessedView() { + //注意,此xml布局页面也被修改科室电话共用 + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_edit_email); + et_email = (EditText) view.findViewById(R.id.et_email);//输入邮箱 + Button bt_save = (Button) view.findViewById(R.id.bt_save);//保存 + bt_save.setOnClickListener(this); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + Intent intent = getIntent(); + String email = intent.getStringExtra("email"); + if (!TextUtils.isEmpty(email)) { + et_email.setText(email); + } + //取出保存的uuid与手机号 + uuid = SharePrefUtil.getString(ct, "uuid", ""); + mobile = SharePrefUtil.getString(ct, Constant.mobile, ""); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_save: +// 保存数据到上页面 + email = et_email.getText().toString().trim(); + if (ValidateUtils.isValidEmail(email)) { + // showProgressDialog("保存中..."); + // getList(modifyUrl); + Intent intent = getIntent(); + intent.putExtra("email", email); + this.setResult(RESULT_OK, intent); + finish(); + } else { + ToastUtil.showToast("请输入正确的邮箱格式"); + } + break; + default: + break; + } + } + + /** + * 本页面提交,弃用,返回数据当上个页面提交 getList + * + * @param loadUrl + * void + */ + private void getList(String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + params.addBodyParameter("userName", mobile);// 真实姓名 必填 + params.addBodyParameter("email", email);// 邮箱 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + ToastUtil.showToast("保存失败,请重试"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + closeProgressDialog(); + SettingInfoBean bean = GsonTools.fromGsonToBean(result, + SettingInfoBean.class); + if ("1".equals(bean.code)) { + SharePrefUtil.saveString(ct, "email", email); + Intent intent = getIntent(); + intent.putExtra("email", email); + this.setResult(RESULT_OK, intent); + ToastUtil.showToast("保存成功"); + finish(); + } else { + ToastUtil.showToast("保存失败,请重试"); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditOfficePhoneActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditOfficePhoneActivity.java new file mode 100644 index 0000000..5e25331 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditOfficePhoneActivity.java @@ -0,0 +1,168 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author ssy + * @date 2015-8-31 下午2:47:47 + * + * 功能说明:我的-个人资料-编辑科室电话 + */ +public class EditOfficePhoneActivity extends BaseActivity { + + private EditText et_email; + private TextView tv_show; + private String uuid; + private String mobile; + private String officePhone; + public static String modifyUrl = Url.getmodify; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("修改科室电话"); + } + + @Override + public View onCreateSuccessedView() { + // 采用共用编辑邮箱的页面EditEmailActivity + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_edit_email); + et_email = (EditText) view.findViewById(R.id.et_email); + tv_show = (TextView) view.findViewById(R.id.tv_show); + Button bt_save = (Button) view.findViewById(R.id.bt_save); + bt_save.setOnClickListener(this); + // 设置输入类型为phone + // et_email.setInputType(InputType.TYPE_CLASS_PHONE); + // 设置数据限制长度为12位 + // et_email.setFilters(new InputFilter[] { new + // InputFilter.LengthFilter(12) }); + // 设置hint提示语 + et_email.setHint("请输入您的科室电话"); + tv_show.setText("请填写您的真实科室电话,以便联系上您"); + initData(); + return view; + } + + /** + * 初始化数据 initData + * + * void + */ + private void initData() { + // TODO Auto-generated method stub + Intent intent = getIntent(); + String officePhone = intent.getStringExtra("officePhone"); + if (!TextUtils.isEmpty(officePhone)) { + et_email.setText(officePhone); + } + uuid = SharePrefUtil.getString(ct, "uuid", ""); + mobile = SharePrefUtil.getString(ct, Constant.mobile, ""); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_save://保存数据 + officePhone = et_email.getText().toString().trim(); + if (TextUtils.isEmpty(officePhone)) { + ToastUtil.showToast("请填写科室电话"); + } else { + // showProgressDialog("保存中..."); + // getList(modifyUrl); + Intent intent = getIntent(); + intent.putExtra("officePhone", officePhone); + this.setResult(RESULT_OK, intent); + finish(); +// } else { +// ToastUtil.showToast("请输入正确的科室电话"); + } + break; + + default: + break; + } + } + + /** + * 本页面提交,弃用,返回数据当上个页面提交 getList + * + * @param loadUrl + * void + */ + private void getList(String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + params.addBodyParameter("userName", mobile);// 真实姓名 必填 + params.addBodyParameter("officePhone", officePhone);// 科室电话 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + ToastUtil.showToast("保存失败,请重试"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + closeProgressDialog(); + SettingInfoBean bean = GsonTools.fromGsonToBean(result, + SettingInfoBean.class); + if ("1".equals(bean.code)) { + SharePrefUtil.saveString(ct, "officePhone", officePhone); + Intent intent = getIntent(); + intent.putExtra("officePhone", officePhone); + this.setResult(RESULT_OK, intent); + finish(); + ToastUtil.showToast("保存成功"); + } else { + ToastUtil.showToast("保存失败,请重试"); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditPhoneActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditPhoneActivity.java new file mode 100644 index 0000000..2d0ed8b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditPhoneActivity.java @@ -0,0 +1,673 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.Toast; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.TimeButton; + +/** + * + * @author ssy + * @date 2015-9-8 下午3:53:40 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-个人资料-编辑修改手机号码 + */ +public class EditPhoneActivity extends BaseActivity implements + OnCallBackFromNet { + + private EditText et_phone, et_num; + private String number; + private Button bt_submit; + private TimeButton tv_get_identifying_code; + private EditText et_code; + public static int ERROR = 101; + public static String getUpdateMobile1 = Url.getUpdateMobile1; + private ImageView mIv_num; +// private SmsObserver mObserver; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("更换手机号"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_edit_phone_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_edit_phone); + } + et_phone = (EditText) view.findViewById(R.id.et_phone);// 手机号 + bt_submit = (Button) view.findViewById(R.id.bt_submit);// 提交 + et_code = (EditText) view.findViewById(R.id.et_code);// 验证码 + et_num = (EditText) view.findViewById(R.id.et_num_code); + mIv_num = (ImageView) view.findViewById(R.id.iv_get_num); + tv_get_identifying_code = (TimeButton) view + .findViewById(R.id.tb_get_identifying_code);// 获取验证码倒计时 + tv_get_identifying_code.onCreate(); + // 设置验证码倒计时 + tv_get_identifying_code.setTextBefore("获取验证码").setLenght(60 * 1000); + mIv_num.setOnClickListener(this); + tv_get_identifying_code.setOnClickListener(this); + bt_submit.setOnClickListener(this); + // 获取数据 + Intent intent = getIntent(); + oldPhone = intent.getStringExtra("phone"); + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + // new Thread(networkTask).start(); +// mObserver = new SmsObserver(EditPhoneActivity.this, mHandler); +// Uri uri = Uri.parse("content://sms/"); +// // 注册短信的监听 +// getContentResolver().registerContentObserver(uri, true, mObserver); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("更换手机号"); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public Handler hdler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == ERROR) { + ToastUtil.showToast("获取验证码失败,请重试"); + } else { + try { + String str = (String) msg.obj; + if (TextUtils.isEmpty(str)) { + ToastUtil.showToast("获取验证码失败,请重试"); + return; + } + JSONObject objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + LogUtil.i("短信验证码:retcode====" + retcode + "==message==" + + message); + if (("1").equals(retcode)) { + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showToast("获取验证码失败,请重试"); + } + + } + + } + }; + + /** + * 验证验证码,提交到下一步 + * + * @param + */ + public void submit() { + // 验证数据 + if (!UIUtils.isNetWorkConnected(this)) { + Toast.makeText(this, "网络暂时不可用", Toast.LENGTH_SHORT).show(); + return; + } + final String code = et_code.getText().toString().trim(); + number = et_phone.getText().toString().trim(); + if (TextUtils.isEmpty(number)) { + ToastUtil.showToast("请输入手机号"); + return; + } else if (!ValidateUtils.isPhoneAndMobile(number)) {// 手机号码格式不正确 + ToastUtil.showToast("请输入正确的手机号码"); + et_phone.requestFocus(); + return; + } else if (TextUtils.isEmpty(code)) { + ToastUtil.showToast("请输入验证码"); + return; + } else if (number.equals(oldPhone)) { + ToastUtil.showToast("请输入新的手机号"); + return; + } + showProgressDialog("提交中,请稍候..."); + Map param = new HashMap<>(); + param.put("newMobile",number); + param.put("oldMobile",oldPhone); + param.put("sms",code); + sendJsonPostParamtoNetSignMD5(getUpdateMobile1,param,113,this); +// new Thread() { +// public void run() { +// List parameters = new ArrayList(); +// BasicNameValuePair value0 = new BasicNameValuePair("oldMobile", +// oldPhone); +// BasicNameValuePair value1 = new BasicNameValuePair("newMobile", +// number); +// BasicNameValuePair value2 = new BasicNameValuePair( +// "expertUuid", expertUuid); +// BasicNameValuePair value3 = new BasicNameValuePair("sms", code); +// parameters.add(value0); +// parameters.add(value1); +// parameters.add(value2); +// parameters.add(value3); +// Log.d("parameterso",parameters.toString()+" "+getUpdateMobile1); +// try { +// HttpResult httpResult = HttpHelper.post(getUpdateMobile1, +// parameters);// 请求网络 +// String str = httpResult.getString();// str为服务器返回的json串 +// LogUtils.e("EditPhoneActivity = "+str); +// JSONObject objs = new JSONObject(str); +// String retcode = objs.getString("code"); // 为返回过来的retcode +// String message = objs.getString("message"); // 为返回过来的message +// LogUtil.i("url=" + getUpdateMobile1 + "param=" +// + parameters.toString() + "str:" + str +// + "retcode====" + retcode); +// if ("1".equals(retcode)) { +// handler.sendEmptyMessage(100); +// } else { +// Message msg = new Message(); +// msg.what = 0; +// msg.obj = message; +// handler.sendMessage(msg); +// } +// } catch (Exception e) { +// // 说明自己服务器返回数据失败 +// e.printStackTrace(); +// handler.sendEmptyMessage(ERROR); +// } +// }; +// }.start(); + } + + public Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + if (msg.what == ERROR) { + ToastUtil.showToast("提交失败,请稍候再试"); + } else if (msg.what == 100) { + ToastUtil.showToast("更换成功"); + + SharePrefUtil.saveString(EditPhoneActivity.this, + "mobile", number); + + Log.d("parameterso","mobile6 ="+SharePrefUtil.getString(ct, "mobile", "")); + Intent intent = getIntent(); + intent.putExtra("phone", number); + setResult(RESULT_OK, intent); + finish(); + + } else if (msg.what == 0) { + String message = msg.obj.toString(); + ToastUtil.showToast(message); + } + }; + }; + private String expertUuid; + private String oldPhone; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tb_get_identifying_code) {// 获取验证码 + number = et_phone.getText().toString().trim(); + // 验证数据 + if (!UIUtils.isNetWorkConnected(this)) { + Toast.makeText(this, "网络异常", Toast.LENGTH_SHORT).show(); + return; + } + if (StringUtil.isEmpty(number)) {// 手机号码格式不正确 + ToastUtil.showToast("手机号码不能为空"); + return; + } + if (!ValidateUtils.isMobileNum(number)) {// 手机号码格式不正确 + ToastUtil.showToast("请输入正确的手机号码"); + return; + } + Map param = new HashMap<>(); + param.put("mobile",number); + param.put("type","6"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); +// getSystemTime(); + } else if (id == R.id.bt_submit) {// 提交下一步 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + submit(); + } else if (id == R.id.iv_get_num) { + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + mIv_num.setImageResource(R.drawable.moren_yzm); + ToastUtil.showMessage("网络异常"); + } else { + new Thread(networkTask).start(); + } + } + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + tv_get_identifying_code.onDestroy(); + super.onDestroy(); +// getContentResolver().unregisterContentObserver(mObserver); + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + long times = System.currentTimeMillis(); + mbBitmap = getInternetPicture(Url.getImagecode + "?t=" + times); + handler1.sendEmptyMessage(1); + + } + }; + Bitmap mbBitmap = null; + Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + switch (msg.what) { + case 1: + if (mbBitmap != null) + mIv_num.setImageBitmap(mbBitmap); + + break; + case 2: + String str = (String) msg.obj; + JSONObject objs; + try { + objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + new Thread(networkTask3).start(); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 3: + String str2 = (String) msg.obj; + JSONObject objs2; + try { + objs2 = new JSONObject(str2); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals(String.valueOf(1))) { + tv_get_identifying_code.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + default: + break; + } + } + + }; + String sessionid = null; + + public Bitmap getInternetPicture(String UrlPath) { + Bitmap bm = null; + // 1、确定网址 + // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg + String urlpath = UrlPath; + // 2、获取Uri + try { + URL uri = new URL(urlpath); + + // 3、获取连接对象、此时还没有建立连接 + HttpURLConnection connection = (HttpURLConnection) uri + .openConnection(); + // 4、初始化连接对象 + // 设置请求的方法,注意大写 + connection.setRequestMethod("GET"); + // 读取超时 + connection.setReadTimeout(5000); + // 设置连接超时 + connection.setConnectTimeout(5000); + // 5、建立连接 + connection.connect(); + String cookieval = connection.getHeaderField("set-cookie"); + + if (cookieval != null) { + sessionid = cookieval.substring(0, cookieval.indexOf(";")); + } + + // 6、获取成功判断,获取响应码 + if (connection.getResponseCode() == 200) { + // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中 + InputStream is = connection.getInputStream(); + // 8、从流中读取数据,构造一个图片对象GoogleAPI + bm = BitmapFactory.decodeStream(is); + // 9、把图片设置到UI主线程 + // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件; + is.close(); + Log.i("", "网络请求成功"); + + } else { + Log.v("tag", "网络请求失败"); + bm = null; + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return bm; + + } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + + mIsRight(); + + } + }; + + private void mIsRight() { + try { + // 对输入的内容进行编码,防止中文乱码 + String username = URLEncoder.encode(et_num.getText().toString() + .trim(), "UTF-8"); + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getvalide + "?valicode=" + username); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + Message message = new Message(); + message.what = 2; + message.obj = new String(result); + handler1.sendMessage(message); + is.close(); + + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + Runnable networkTask3 = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + yzCode(); + + } + }; + + // 获取验证码 + private void yzCode() { + final String username = et_phone.getText().toString().trim(); + try { + // 对输入的内容进行编码,防止中文乱码 + String usernum = URLEncoder.encode(et_num.getText().toString() + .trim(), "UTF-8"); + int a = StringUtil.getnum(); + String mc = null; + // SimpleDateFormat fmt = new + // SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // String timestr = fmt.format(new Date()); + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(username + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getsendSms + "?mc=" + mc + "&type=1&a=" + a); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 3; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public final static int GET_SYSTEM_TIME_RESULT = 103; + private String system_time = null; + + public void getSystemTime() { + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, + EditPhoneActivity.this, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 113: + closeProgressDialog(); + JSONObject objs = null; + try { + objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + ToastUtil.showToast("更换成功"); + + SharePrefUtil.saveString(EditPhoneActivity.this, + "mobile", number); + Intent intent = getIntent(); + intent.putExtra("phone", number); + setResult(RESULT_OK, intent); + finish(); + } + else { + ToastUtil.showToast(message); + } + + } catch (JSONException e) { + ToastUtil.showToast("重置失败,请重试!"); + e.printStackTrace(); + } + + break; + case MSG_SEND: + if(resultJson!=null) + { + + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals("200")) { + tv_get_identifying_code.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } + break; + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + new Thread(networkTask3).start(); + break; + default: + break; + } + } +// +// private Handler mHandler = new Handler() { +// @Override +// public void handleMessage(Message msg) { +// if (msg.what == LoginActivity.MSG_RECEIVED_CODE) { +// String code = (String) msg.obj; +// if (code != null) { +// et_code.setText(code.trim()); +// } +// +// } +// } +// }; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditProfileActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditProfileActivity.java new file mode 100644 index 0000000..9480be5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EditProfileActivity.java @@ -0,0 +1,220 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author ssy + * @date 2015-8-31 下午2:47:47 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-个人资料-编辑个人简介 + */ +public class EditProfileActivity extends BaseActivity { + + private EditText et_profile; + private String uuid; + private String mobile; + private String profile; + public static String modifyUrl = Url.getmodify; + private Button mBt_get_Voice; + private KeDaXunFeiUtil VoiceUtil; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("修改个人简介"); + top_right_text.setText("保存"); + top_right_text.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_edit_profile); + et_profile = (EditText) view.findViewById(R.id.et_profile);//输入个人简介 + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + mBt_get_Voice.setOnClickListener(this); +// Button bt_save = (Button) view.findViewById(R.id.bt_save);//保存 +// bt_save.setOnClickListener(this); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + + } + + //获取数据 + private void initData() { + // TODO Auto-generated method stub + Intent intent = getIntent(); + String profile = intent.getStringExtra("profile"); + if (!TextUtils.isEmpty(profile)) { + et_profile.setText(profile); + } + uuid = SharePrefUtil.getString(ct, "uuid", ""); + mobile = SharePrefUtil.getString(ct, Constant.mobile, ""); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_get_voice: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(EditProfileActivity.this, + et_profile); + } else { + EasyWindow.with(EditProfileActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(EditProfileActivity.this, + et_profile); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(EditProfileActivity.this, + et_profile); + } + + + break; + case R.id.top_right_text: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + profile = et_profile.getText().toString().trim(); + if (TextUtils.isEmpty(profile)) { + ToastUtil.showToast("请填写个人简介"); + } else if (profile.length() > 500) { + ToastUtil.showToast("请填写500字之内"); + } else { + // showProgressDialog("保存中..."); + // getList(modifyUrl); + Intent intent = getIntent(); + intent.putExtra("profile", profile); + this.setResult(RESULT_OK, intent); + finish(); + } + break; + + default: + break; + } + } + + @Override + protected void onDestroy() { + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + super.onDestroy(); + } + + /** + * 本页面提交,弃用,返回数据当上个页面提交 getList + * + * @param loadUrl + * void + */ + private void getList(String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + params.addBodyParameter("userName", mobile);// 真实姓名 必填 + params.addBodyParameter("intro", profile);// 简介 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + ToastUtil.showToast("保存失败,请重试"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + closeProgressDialog(); + SettingInfoBean bean = GsonTools.fromGsonToBean(result, + SettingInfoBean.class); + if ("1".equals(bean.code)) { + SharePrefUtil.saveString(ct, "intro", profile); + Intent intent = getIntent(); + intent.putExtra("profile", profile); + this.setResult(RESULT_OK, intent); + finish(); + ToastUtil.showToast("保存成功"); + } else { + ToastUtil.showToast("保存失败,请重试"); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/EnglishDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EnglishDetailActivity.java new file mode 100644 index 0000000..a9a2840 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EnglishDetailActivity.java @@ -0,0 +1,316 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 类名称:EnglishDetailActivity 图书馆-期刊杂志 加载期刊杂志详情的webview 时间:2015-12-30 下午5:02:17 + * + */ +public class EnglishDetailActivity extends BaseActivity { + + private String url; + private String title; + private X5WebView mWebView; + private WebSettings settings; + private String libraryUuid; + private String isCollect; + public final static int REQUESTCODE = 111; + private boolean ischeck = true; + + @SuppressWarnings("deprecation") + @Override + public void setTitle() { + + // 显示返回 + top_back_layout.setVisibility(View.VISIBLE); + // 显示收藏按钮 + top_right_rl_bookCollect.setVisibility(View.VISIBLE); + top_right_bookCollect.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + // 获取传的值 + url = getIntent().getStringExtra("url"); + title = getIntent().getStringExtra("title"); + libraryUuid = getIntent().getStringExtra("libraryUuid"); + isCollect = getIntent().getStringExtra("isCollect"); + // 判断该文章是否已经收藏,收藏则显示选中状态,否则反之 + if ("1".equals(isCollect)) { + top_right_bookCollect.setBackgroundDrawable(getResources() + .getDrawable(R.drawable.icon_book_collect_sel)); + } else { + top_right_bookCollect.setBackgroundDrawable(getResources() + .getDrawable(R.drawable.icon_book_collect_nor)); + } + // 监听收藏选中状态 + top_right_bookCollect.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_bookCollect: + if ("0".equals(isCollect)) { + + Collect(1);// 收藏 + } else { + Collect(0);// 取消 + } + break; + default: + break; + } + } + }); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_news_detail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + // 加载中布局,与加载失败的布局 + loadingView = view.findViewById(R.id.loading_view); + loadfailView = (LinearLayout) view.findViewById(R.id.ll_load_fail); + showLoadingView(); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 initData + * + * void + */ + private void initData() { + // 判断标题是否大于7,如果大于则后面为... + if (!TextUtils.isEmpty(title)) { + if (title.length() > 7) { + String concat = title.substring(0, 7).concat("..."); + top_title.setText(concat); + } else { + top_title.setText(title); + } + } else { + top_title.setText("期刊杂志"); + } + dealNewsDetail(); + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + + /** + * 展示WebView页面 dealNewsDetail + * + * void + */ + private void dealNewsDetail() { + LogUtil.i("详情url:" + url); + // mWebView.setInitialScale(25); + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// // 设置此属性,可任意比例缩放 +// settings.setUseWideViewPort(true); +// // 启用javascript脚本 +// settings.setJavaScriptEnabled(true); +// // 支持通过JS打开新窗口 +// settings.setJavaScriptCanOpenWindowsAutomatically(true); +// // 设置加载模式 +// settings.setLoadWithOverviewMode(true); +// // 设置填充模式 +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// // 支持放大缩小控制器 +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + // 开始加载时显示加载中的进度框 + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + LogUtil.i("onPageFinished", "onPageFinished" + url); + // 加载完成,隐藏加载进度框 + dismissLoadingView(); + // 获取真实的链接地址 + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + // 判断链接是否空,如果为空则显示自定义404页面 + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + loadurl(view, "file:///android_asset/error/error.html"); + } + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // 加载失败的处理 + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + // 失败的页面 + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + loadurl(mWebView, url); + } + + @Override + protected void processClick(View v) { + + } + + /** + * @author 点击收藏 Collect,提交数据 + */ + private void Collect(int type) { + // TODO Auto-generated method stub + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("libraryUuid", libraryUuid); + params.addBodyParameter("isCollect", String.valueOf(type));// 0取消收藏 1收藏 + // if (bookType == 0) { + // params.addBodyParameter("type", "1"); + // }else{ + // params.addBodyParameter("type", "3"); + // } + params.addBodyParameter("type", "3"); + LogUtil.i("expertUuid=" + uuid + "libraryUuid=" + libraryUuid + + "isCollect=" + type); + HttpHelper.loadData(HttpMethod.POST, Url.getCollect, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getPreCashList.onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + handler.sendEmptyMessage(1); + ToastUtil.showToast(message); + } else { + ToastUtil.showToast(message); + } + + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("提交失败"); + // top_right_bookCollect.toggle(); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + ToastUtil.showToast("提交失败"); + // top_right_bookCollect.toggle(); + } + }); + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + if ("0".equals(isCollect)) { + isCollect = "1"; + top_right_bookCollect.setBackgroundDrawable(getResources() + .getDrawable(R.drawable.icon_book_collect_sel)); + } else { + isCollect = "0"; + top_right_bookCollect.setBackgroundDrawable(getResources() + .getDrawable(R.drawable.icon_book_collect_nor)); + } + } + }; + @Override + protected void onDestroy() { + //释放资源 + if (mWebView != null) + mWebView.destroy(); + + super.onDestroy(); + } + + @Override + public void finish() { + // TODO Auto-generated method stub + if (isCollect.equals("0")) { + Intent intent = new Intent(); + intent.putExtra("libraryUuid", libraryUuid); + setResult(201, intent); + } + super.finish(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/EvaluateActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EvaluateActivity.java new file mode 100644 index 0000000..59bbed4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/EvaluateActivity.java @@ -0,0 +1,234 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Build; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.goodratingbar.MaterialRatingBar; + +public class EvaluateActivity extends BaseActivity implements OnCallBackFromNet { + + TextView tv_e,tv_f,tv_n; + MaterialRatingBar ratingbar; + Button bt_sumit; + EditText et_com; + int starnum=10; + + + @Override + public void setTitle() { + + + } + String excellentcourse_id,p_id,type; + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view= UIUtils.inflate(R.layout.activity_evaluate); + ratingbar=view.findViewById(R.id.ratingbar); + tv_e=view.findViewById(R.id.tv_e); + tv_f=view.findViewById(R.id.tv_f); + tv_n=view.findViewById(R.id.tv_n); + et_com=view.findViewById(R.id.et_com); + bt_sumit=view.findViewById(R.id.bt_sumit); + excellentcourse_id=getIntent().getStringExtra("excellentcourse_id"); + p_id=getIntent().getStringExtra("p_id"); + type=getIntent().getStringExtra("type"); + if(!StringUtil.isEmpty(getIntent().getStringExtra("starnum"))) + { + starnum=Integer.valueOf(getIntent().getStringExtra("starnum")); + } + + bt_sumit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(StringUtil.isEmpty(et_com.getText().toString())) + { + ToastUtil.showToast("评论不能为空"); + } + else + { +// int s=et_com.getText().toString().length(); + + if(et_com.getText().toString().length()>300) + { + ToastUtil.showToast("您的评论字数过多"); + } + else + { + addComment(excellentcourse_id,et_com.getText().toString().trim(),p_id,starnum+"",type); + } + + + } + + } + }); + + ratingbar.setOnRatingChangeListener(new MaterialRatingBar.OnRatingChangeListener() { + @Override + public void onRatingChanged(MaterialRatingBar ratingBar, float rating) { + starnum= (int) (rating*2); + switch (rating+"") + { + case "0.0": + case "0.5": + case "1.0": + tv_e.setText("差评,课程没有任何帮助"); + break; + case "1.5": + case "2.0": + tv_e.setText("差评,课程基本无用"); + break; + case "2.5": + case "3.0": + tv_e.setText("中评,课程质量一般"); + break; + case "3.5": + case "4.0": + tv_e.setText("好评,有收获,但有改进空间"); + break; + case "4.5": + case "5.0": + tv_e.setText("好评,受益匪浅,值得学习与推荐"); + break; + + } + + + } + }); + if("1".equals(type)) + { + ratingbar.setRating((float) (starnum/2.0)); + switch ((float) starnum/2.0+"") + { + case "0.0": + case "0.5": + case "1.0": + case "1.5": + tv_e.setText("差评,课程没有任何帮助"); + break; + case "2.0": + case "2.5": + tv_e.setText("差评,课程基本无用"); + break; + case "3.0": + case "3.5": + tv_e.setText("中评,课程质量一般"); + break; + case "4.0": + case "4.5": + tv_e.setText("好评,有收获,但有改进空间"); + break; + case "5.0": + tv_e.setText("好评,受益匪浅,值得学习与推荐"); + break; + + } + tv_n.setText("已评分"); + top_title.setText("追加评论"); + ratingbar.setIsIndicator(true); + } + else + { + top_title.setText("评价课程"); + ratingbar.setIsIndicator(false); + tv_n.setText("点击星星评分"); + getNote(); + } + return view; + } + private void addComment(String excellentcourse_id,String comment,String p_id,String star,String type) + { + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("excellentcourse_id",excellentcourse_id); + map.put("comment",comment); + map.put("p_id",p_id); + map.put("star",star); + map.put("type",type); + sendJsonPostParamtoNetSignMD5Array(Url.addExcellencourseComment,map,102,this); + } + private void getNote() { + +// showProgressDialog("加载中"); + Map map = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.getExcellencourseCommentNote,map,101,this); + } + + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + try { + JSONObject jsonObject=new JSONObject(resultJson); + tv_f.setText(jsonObject.getString("data")); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 102: + closeProgressDialog(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + Intent intent=new Intent(); + intent.putExtra("starnum",starnum+""); + setResult(301,intent); + finish(); + } + ToastUtil.showToast(jsonObject.optString("message")); + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ExitDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ExitDialog.java new file mode 100644 index 0000000..b15947e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ExitDialog.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import androidx.annotation.Nullable; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * Created by WANGChengXin on 2019/12/23. + */ + +public class ExitDialog extends Activity{ + + private ECAlertDialog dilaog2 = null; + public static final int FLAG_HOMEKEY_DISPATCHED = 0x80000000;//定义屏蔽参数 + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + this.getWindow().setFlags(FLAG_HOMEKEY_DISPATCHED, FLAG_HOMEKEY_DISPATCHED); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); + setContentView(R.layout.dialog_activity); + + SharePrefUtil.clear(ExitDialog.this, "isLogin"); + Constant.islogout =1; + Intent intent = new Intent(ExitDialog.this, LoginNewActivity.class); + intent.putExtra("flag", true); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); +// intent.putExtra("phone", SharePrefUtil.getString(CCPAppManager.getContext(), Constant.mobile, "")); + intent.putExtra("phone","");//登陆界面手机号返回空 + ExitDialog.this.startActivity(intent); + finish(); + /* if(dilaog2==null){ + dilaog2 = ECAlertDialog.buildAlert(this, + "您的账号出现异常,已经被系统删除,如有疑问请联系肝胆相照工作人员~", "点击退出账号", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + + dilaog2.dismiss(); + SharePrefUtil.clear(ExitDialog.this, "isLogin"); + Constant.islogout =1; + Intent intent = new Intent(ExitDialog.this, LoginActivity.class); + intent.putExtra("flag", true); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + intent.putExtra("phone", SharePrefUtil.getString(CCPAppManager.getContext(), Constant.mobile, "")); + CCPAppManager.getContext().startActivity(intent); + finish(); + // 1登入系统 2退出系统 3患者客户端在手机前台运行 4.客户端在手机后台运行 + +// System.exit(0); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + }*/ + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ExpertDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ExpertDetailActivity.java new file mode 100644 index 0000000..5216855 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ExpertDetailActivity.java @@ -0,0 +1,928 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ExpertDetail; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SetListViewHeightBasedOnChildrenUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyScrollView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author gcs------------我的专家详情 + */ +public class ExpertDetailActivity extends BaseActivity implements + OnClickListener,OnCallBackFromNet { + + private View view; + private Intent intent; + private String uuid;// 专家的UUID + private CustomProgressDialog pd; + private Button bt_add_expert;// 添加随诊专家 + private Button bt_send_flower;// 送花 + private ImageView bt_telephone;// 电话咨询 + private ImageView bt_appointment;// 门诊预约 + private ImageView bt_month_payment;// 包月服务 + private ImageView iv_photo;// 专家头像 + private TextView tv_expert_desc1;// 专家描述 + private TextView tv_expert_desc2;// 专家描述 + private TextView tv_name;// 姓名 + private TextView tv_job, tv_conslut_num;// 职称 公益咨询数量 + private TextView tv_hospital;// 坐镇医院 + private TextView tv_specialities;// 专长 + private TextView tv_patient_num;// 服务患者术 + private TextView tv_flower_num;// 送花数 + private ImageView iv_man_or_woman;// 男女 + private ImageView iv_is_star;// 是否是名医0不是1是 + private TextView tv_phone_zixun;// 电话咨询 + private TextView tv_menzhen_zixun;// 门诊预约 + private TextView tv_month_server;// 包月服务 + private boolean isFriend;// true 是随访关系 + private String relation;// 0 没有,1vip + private Gson gson; + private ExpertDetail expertDetail; + private ECAlertDialog buildAlert; + private RelativeLayout mDoctor_visit;// 专家出诊信息 + protected static final int GET_DATA_SUCCESS = 100; // 请求数据成功的结果码 + @SuppressLint("HandlerLeak") + Handler handler = new Handler() { + public void handleMessage(Message msg) { + + switch (msg.what) { + case GET_DATA_SUCCESS: + setData(); + break; + } + + } + + }; + private LinearLayout ll_weight_layout1; + private LinearLayout ll_weight_layout2; + private RelativeLayout rl_weight_shipin,rl_weight_dongtai; + private ListView lv_gandan_dongtai,lv_gandan_video; + private MyScrollView sc_my; + private ScrollView sc_parent; + + /** + * @author Administrator + * @date 2015-10-20 上午9:05:24 + *

+ * 功能说明:设置专家详数据 + *

+ * method + */ + private void setData() { + // TODO Auto-generated method stub + + ImageLoader.getInstance().displayImage( + Url.urlHtml + expertDetail.getData().getPhoto(), iv_photo, + ImageOptions.getImageOptions(R.drawable.expert_img)); + SharePrefUtil.saveString(ExpertDetailActivity.this, "ex_photo", + expertDetail.getData().getPhoto()); + String intro = expertDetail.getData().getIntro(); +// LogUtils.e("intro.length()==" + intro.length()); + if (StringUtil.isEmpty(intro)) { + ll_weight_layout1.setVisibility(View.GONE); + ll_weight_layout2.setVisibility(View.VISIBLE); + tv_expert_desc2.setText(getResources().getString(R.string.zanwu)); + } else { + if (intro.length() < 100) { + ll_weight_layout1.setVisibility(View.GONE); + ll_weight_layout2.setVisibility(View.VISIBLE); + tv_expert_desc2.setText(expertDetail.getData().getIntro()); + } else { + ll_weight_layout1.setVisibility(View.VISIBLE); + ll_weight_layout2.setVisibility(View.GONE); + tv_expert_desc1.setText(expertDetail.getData().getIntro()); + } + } + tv_name.setText(expertDetail.getData().getRealName()); + tv_job.setText(expertDetail.getData().getPositionName()); + tv_hospital.setText(expertDetail.getData().getHospitalName()); + tv_specialities.setText(expertDetail.getData().getOfficeName()); + tv_patient_num.setText(expertDetail.getExpertApplyNum()+""); + tv_flower_num.setText(expertDetail.getSendFlowerNum()+""); + tv_name.setText(expertDetail.getData().getRealName()); + tv_conslut_num.setText(expertDetail.getConsultTotalNum()+""); + + if (isFriend) { + bt_add_expert.setText("解除随访专家"); + } + + if (expertDetail.getData().getSex() == 0) {// 0男1女 + iv_man_or_woman.setBackgroundResource(R.drawable.new_man); + } else if (expertDetail.getData().getSex() == 1) { + iv_man_or_woman.setBackgroundResource(R.drawable.new_woman); + } + + if (expertDetail.getData().getIsStar()==0) { + iv_is_star.setVisibility(View.GONE); + } else { + iv_is_star.setVisibility(View.VISIBLE); + } + + /** + * 医生视频 + * */ + if(expertDetail.getVideoResTop2().size() > 0){ + lv_gandan_video.setVisibility(View.VISIBLE); + rl_weight_shipin.setVisibility(View.VISIBLE); + if(expertDetail.getVideoResTop2().size() == 1){ + GandanVideoListAdapter adapter = new GandanVideoListAdapter(expertDetail.getVideoResTop2()); + lv_gandan_video.setAdapter(adapter); + + + }else{ + List video = new ArrayList<>(); + for(int i = 0;i<2;i++){ + video.add(expertDetail.getVideoResTop2().get(i)); + } + + GandanVideoListAdapter adapter = new GandanVideoListAdapter(video); + lv_gandan_video.setAdapter(adapter); + SetListViewHeightBasedOnChildrenUtil.SetListViewHeightBasedOnChildren(lv_gandan_video,adapter); + } + + }else{ + lv_gandan_video.setVisibility(View.GONE); + rl_weight_shipin.setVisibility(View.GONE); + } + /** + * 医生动态 + * */ + + + if(expertDetail.getDongTaiResTop2().size() > 0){ + lv_gandan_dongtai.setVisibility(View.VISIBLE); + rl_weight_dongtai.setVisibility(View.VISIBLE); + if(expertDetail.getDongTaiResTop2().size() == 1){ + GandanDongtaiListAdapter adapter = new GandanDongtaiListAdapter(expertDetail.getDongTaiResTop2()); + lv_gandan_dongtai.setAdapter(adapter); + + }else{ + List video = new ArrayList<>(); + for(int i = 0;i<2;i++){ + video.add(expertDetail.getDongTaiResTop2().get(i)); + } + + GandanDongtaiListAdapter adapter = new GandanDongtaiListAdapter(video); + lv_gandan_dongtai.setAdapter(adapter); + SetListViewHeightBasedOnChildrenUtil.SetListViewHeightBasedOnChildren(lv_gandan_dongtai,adapter); + } + + }else{ + lv_gandan_dongtai.setVisibility(View.GONE); + rl_weight_dongtai.setVisibility(View.GONE); + } + + + + /** + * VIP服务 + * */ + // 当没有开启服务是图片为灰色 +// if (expertDetail.data.callDisable.equals("Y")) { +// bt_telephone.setImageResource(R.drawable.new_expert_service_phone); +// } else { +// if (expertDetail.data.callIsEnable.equals("0")) { +// bt_telephone +// .setImageResource(R.drawable.new_expert_service_phone); +// } +// } +// +// if (expertDetail.data.clinicDisable.equals("Y")) { +// bt_appointment +// .setImageResource(R.drawable.new_expert_service_clinic); +// } else { +// if (expertDetail.data.clinicIsEnable.equals("0")) { +// bt_appointment +// .setImageResource(R.drawable.new_expert_service_clinic); +// } +// } +// +// if (expertDetail.data.monthDisable.equals("Y")) { +// bt_month_payment +// .setImageResource(R.drawable.new_expert_service_vip); +// } else { +// if (expertDetail.data.monthIsEnable.equals("0")) { +// bt_month_payment +// .setImageResource(R.drawable.new_expert_service_vip); +// } +// } + + // if (expertDetail.data.callIsEnable.equals("0")) { + // bt_telephone.setImageResource(R.drawable.new_expert_service_phone); + // } + // if (expertDetail.data.clinicIsEnable.equals("0")) { + // bt_appointment.setImageResource(R.drawable.new_expert_service_clinic); + // } + // if (expertDetail.data.monthIsEnable.equals("0")) { + // bt_month_payment.setImageResource(R.drawable.new_expert_service_vip); + // } + + } + + @Override + public void setTitle() { + top_title.setText("专家详情"); + top_back_layout.setOnClickListener(this); + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = View.inflate(ExpertDetailActivity.this, + R.layout.activity_doctor_detail, null); + initIntent(); + initView(); + initListener(); + requestData(); + return view; + } + + /** + * 初始化intent传回的数据 + */ + private void initIntent() { + // TODO Auto-generated method stub + + intent = getIntent(); + uuid = intent.getStringExtra("uuid"); + Log.e("TGGG", "uuid = "+uuid); + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + if (BaseApplication.refreshExpertDetial) { + requestData(); + BaseApplication.refreshExpertDetial = false; + + } + } + + /** + * 初始化控件 + */ + private void initView() { + mDoctor_visit = (RelativeLayout) view.findViewById(R.id.rl_visit); + bt_add_expert = (Button) view.findViewById(R.id.bt_add_expert); + bt_send_flower = (Button) view.findViewById(R.id.bt_send_flower); + bt_telephone = (ImageView) view.findViewById(R.id.bt_telephone); + bt_appointment = (ImageView) view.findViewById(R.id.bt_appointment); + bt_month_payment = (ImageView) view.findViewById(R.id.bt_month_payment); + bt_telephone.setOnClickListener(this); + bt_appointment.setOnClickListener(this); + bt_month_payment.setOnClickListener(this); + iv_photo = view.findViewById(R.id.iv_photo); + + tv_name = (TextView) view.findViewById(R.id.tv_name); + tv_job = (TextView) view.findViewById(R.id.tv_job); + tv_conslut_num = (TextView) view.findViewById(R.id.tv_conslut_num); + tv_hospital = (TextView) view.findViewById(R.id.tv_hospital); + tv_specialities = (TextView) view.findViewById(R.id.tv_specialities); + tv_patient_num = (TextView) view.findViewById(R.id.tv_patient_num); + tv_flower_num = (TextView) view.findViewById(R.id.tv_flower_num); + tv_phone_zixun = (TextView) view.findViewById(R.id.tv_phone_zixun); + tv_menzhen_zixun = (TextView) view.findViewById(R.id.tv_menzhen_zixun); + tv_month_server = (TextView) view.findViewById(R.id.tv_month_server); + sc_my = (MyScrollView) view.findViewById(R.id.sc_my); + sc_parent = (ScrollView) view.findViewById(R.id.sc_parent); + + sc_parent.setOnTouchListener(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + // TODO Auto-generated method stub + sc_my.requestDisallowInterceptTouchEvent(false); + return false; + } + }); + sc_my.setOnTouchListener(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + // TODO Auto-generated method stub + + sc_parent.requestDisallowInterceptTouchEvent(true); + return false; + } + }); + + ll_weight_layout1 = (LinearLayout) view + .findViewById(R.id.ll_weight_layout1); + ll_weight_layout2 = (LinearLayout) view + .findViewById(R.id.ll_weight_layout2); + tv_expert_desc1 = (TextView) view.findViewById(R.id.tv_expert_desc1); + tv_expert_desc2 = (TextView) view.findViewById(R.id.tv_expert_desc2); + + iv_man_or_woman = (ImageView) view.findViewById(R.id.iv_man_or_woman); + iv_is_star = (ImageView) view.findViewById(R.id.iv_is_star); + + rl_weight_shipin = (RelativeLayout) view.findViewById(R.id.rl_weight_shipin); + rl_weight_dongtai = (RelativeLayout) view.findViewById(R.id.rl_weight_dongtai); + + lv_gandan_dongtai = (ListView) view.findViewById(R.id.lv_gandan_dongtai); + lv_gandan_video = (ListView) view.findViewById(R.id.lv_gandan_video); + + } + + /** + * @author Administrator + * @date 2015-10-19 下午1:50:16 + *

+ * 功能说明:初始化监听器 + *

+ * method + */ + private void initListener() { + // TODO Auto-generated method stub + mDoctor_visit.setOnClickListener(this); + bt_add_expert.setOnClickListener(this); + bt_send_flower.setOnClickListener(this); + bt_telephone.setOnClickListener(this); + bt_appointment.setOnClickListener(this); + bt_month_payment.setOnClickListener(this); + iv_is_star.setOnClickListener(this); + rl_weight_dongtai.setOnClickListener(this); + rl_weight_shipin.setOnClickListener(this); + + lv_gandan_video.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + Intent intentvideo1 = VideoDetailPolyvPlayerActivity.newIntent(ExpertDetailActivity.this, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intentvideo1.putExtra("startNow", false); + intentvideo1.putExtra("isVlmsOnline", false); + intentvideo1.putExtra("url", expertDetail.getVideoResTop2().get(position) + .getPath()); + intentvideo1.putExtra("uuid", expertDetail.getVideoResTop2().get(position) + .getUuid()); + intentvideo1.putExtra("title",expertDetail.getVideoResTop2().get(position) + .getName()); + intentvideo1.putExtra("readnum", expertDetail.getVideoResTop2().get(position) + .getReadnum()); + intentvideo1.putExtra("imgpath",expertDetail.getVideoResTop2().get(position) + .getImgpath()); + intentvideo1.putExtra("public_name", + expertDetail.getVideoResTop2().get(position).getPublic_name()); + startActivity(intentvideo1); + + + } + }); + + + + lv_gandan_dongtai.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int position, long arg3) { + /* Intent intent = new Intent(ExpertDetailActivity.this, GDEventDetailActivity.class); + intent.putExtra("newsTitle", expertDetail.getDongTaiResTop2().get(position).getTITLE()); + if (expertDetail.getDongTaiResTop2().get(position).getEditType()==1) { + intent.putExtra("url", Url.urlHtml + expertDetail.getDongTaiResTop2().get(position).getPath()); + }else { + intent.putExtra("url",expertDetail.getDongTaiResTop2().get(position).getPath()); + } + intent.putExtra("summary", expertDetail.getDongTaiResTop2().get(position).getAuthor()); + intent.setType("dongtai"); + startActivity(intent);*/ + + Intent intent = new Intent(ExpertDetailActivity.this, NewsDetailActivity.class); + if (expertDetail.getDongTaiResTop2().get(position).getEditType()==1) { + intent.putExtra("url", Url.urlHtml + expertDetail.getDongTaiResTop2().get(position).getPath()); + }else { + intent.putExtra("url",expertDetail.getDongTaiResTop2().get(position).getPath()); + } + // intent.putExtra("title", news.title); + intent.putExtra("title", "动态详情"); + intent.putExtra("summary", "名院名科名医,来肝胆相照做\"名\"星"); + intent.putExtra("flag", 1); + startActivity(intent); + + } + }); + + } + + /** + * @author Administrator + * @date 2015-10-19 下午1:51:31 + *

+ * 功能说明:请求数据 + *

+ * method + */ + private void requestData() { + // TODO Auto-generated method stub + showProgressDialog("加载中"); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + + sendJsonPostParamtoNet(Url.expertDetail, param, 01, this); + +// pd = new CustomProgressDialog(this, "请稍候"); +// pd.show(); +// new Thread() { +// public void run() { +// try { +// List parameters = new ArrayList(); +// BasicNameValuePair valuePair = new BasicNameValuePair( +// "expert_uuid", uuid); +// +// parameters.add(valuePair); +// +// HttpResult httpResult = HttpHelper.post(Url.expertDetail, +// parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// Log.e("TGGG", "result = "+result); +// if (result == null) { +// +// ToastUtil.showMessage("获取专家信息失败,请重试"); +// pd.dismiss(); +// return; +// } +// Message msg = Message.obtain(); +// msg.obj = result; +// msg.what = 2; +// handler.sendMessage(msg); +// +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// pd.dismiss(); +// ToastUtil.showMessage("获取信息失败,请重试"); +// } +// } +// +// ; +// }.start(); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 集中处理按钮点击事件 + */ + @Override + public void onClick(View v) { + + switch (v.getId()) { + //更多视频 + case R.id.rl_weight_shipin: + if (expertDetail.getGandan_expert_uuid()!=null) { + Intent Videointent = new Intent(this, MoreVideoActivity.class); + Videointent.putExtra("uuid", expertDetail.getGandan_expert_uuid()); + Videointent.putExtra("title", "医生视频"); + startActivity(Videointent); + } + + break; + //更多动态 + case R.id.rl_weight_dongtai: + if (expertDetail.getGandan_expert_uuid()!=null) { + Intent intent3 = new Intent(this, MoreDongtaiActivity.class); + intent3.putExtra("hospitalUuid", expertDetail.getGandan_expert_uuid()); + intent3.putExtra("title","医生动态" ); + startActivity(intent3); + } + + break; + + + + case R.id.rl_visit: +// Intent intVisit = new Intent(getApplicationContext(), +// VisitExpertActivity.class); +// intVisit.putExtra("detailUuid", uuid); +// startActivity(intVisit); + break; + case R.id.iv_is_star: +// Intent star = new Intent(getApplicationContext(), +// StarDoctorActivity.class); +// +// startActivity(star); + break; + case R.id.top_back_layout: + // 返回按键 + + finish(); + break; + case R.id.bt_add_expert: + // 添加随访组专家 + // LogUtils.v("添加随访组医生"); +// try { +// if (isFriend) { +// +// buildAlert = ECAlertDialog.buildAlert(this, "您确定解除随访专家?", +// "取消", "确定", new DialogInterface.OnClickListener() { +// +// @Override +// public void onClick(DialogInterface dialog, +// int which) {// 取消 +// // TODO Auto-generated method stub +// buildAlert.dismiss(); +// } +// +// }, new DialogInterface.OnClickListener() {// 下载升级 +// +// @Override +// public void onClick(DialogInterface dialog, +// int which) { +// // TODO Auto-generated method stub +// buildAlert.dismiss(); +// remove(); +// } +// }); +// buildAlert.setCanceledOnTouchOutside(false); +// buildAlert.show(); +// +// } else if (expertDetail.data == null) { +// ToastUtil.showMessage("专家信息为空,不可添加随访"); +// return; +// } else { +// if (expertDetail.data == null) { +// ToastUtil.showMessage("专家信息为空,不可添加随访专家"); +// return; +// } +// Intent addexpertintent = new Intent(this, +// AddExpertActivity.class); +// addexpertintent.putExtra("uuid", uuid); +// addexpertintent.putExtra("photo", expertDetail.data.photo); +// addexpertintent.putExtra("realName", +// expertDetail.data.realName); +// +// startActivity(addexpertintent); +// } +// +// } catch (Exception e) { +// // TODO: handle exception +// ToastUtil.showMessage("服务器异常"); +// } + + break; + case R.id.bt_send_flower: + // 我要送花 + +// try { +// // Intent sendFlowerintent = new Intent(this, +// // SendFlowerActivity.class); +// Intent sendFlowerintent = new Intent(this, +// SendFlowerNewActivity.class); +// sendFlowerintent.putExtra("uuid", uuid); +// if (expertDetail.data == null) { +// ToastUtil.showMessage("专家信息为空,不可送花"); +// return; +// } +// sendFlowerintent.putExtra("name", expertDetail.data.realName); +// startActivity(sendFlowerintent); +// } catch (Exception e) { +// // TODO: handle exception +// ToastUtil.showMessage("专家信息为空,不可送花"); +// } + + break; + case R.id.bt_telephone: + // 电话咨询 +// LogUtils.v("电话咨询"); +// try { +// if (expertDetail.data == null) { +// ToastUtil.showMessage("专家信息为空,不可订购服务"); +// return; +// } +// +// if (expertDetail.data.callDisable.equals("Y")) { +// ToastUtil.showMessage("专家未开启此服务"); +// return; +// } else if (expertDetail.data.callIsEnable.equals("0")) { +// ToastUtil.showMessage("专家未开启此服务"); +// return; +// } +// +// Intent telophoneIntent = new Intent(this, +// PhoneConsultActivity.class); +// telophoneIntent.putExtra("uuid", uuid); +// telophoneIntent.putExtra("name", expertDetail.data.realName); +// startActivity(telophoneIntent); +// } catch (Exception e) { +// // TODO: handle exception +// ToastUtil.showMessage("专家信息为空,不可订购服务"); +// } + + break; + case R.id.bt_appointment: + // 门诊预约 +// LogUtils.v("门诊预约"); +// try { +// if (expertDetail.data == null) { +// ToastUtil.showMessage("专家信息为空,不可订购服务"); +// return; +// } +// +// if (expertDetail.data.clinicDisable.equals("Y")) { +// ToastUtil.showMessage("专家未开启此服务"); +// return; +// } else if (expertDetail.data.clinicIsEnable.equals("0")) { +// ToastUtil.showMessage("专家未开启此服务"); +// return; +// } +// Intent clinicIntent = new Intent(this, ClinicActivity.class); +// clinicIntent.putExtra("uuid", uuid); +// clinicIntent.putExtra("name", expertDetail.data.realName); +// startActivity(clinicIntent); +// } catch (Exception e) { +// // TODO: handle exception +// ToastUtil.showMessage("专家信息为空,不可订购服务"); +// } + + break; + case R.id.bt_month_payment: + // 包月服务 +// LogUtils.v("包月服务"); +// try { +// if (expertDetail.data == null) { +// ToastUtil.showMessage("专家信息为空,不可订购服务"); +// return; +// } +// if (expertDetail.data.monthDisable.equals("Y")) { +// ToastUtil.showMessage("专家未开启此服务"); +// return; +// } else if (expertDetail.data.monthIsEnable.equals("0")) { +// ToastUtil.showMessage("专家未开启此服务"); +// return; +// } +// Intent monthIntent = new Intent(this, MonthActivity.class); +// monthIntent.putExtra("uuid", uuid); +// monthIntent.putExtra("name", expertDetail.data.realName); +// startActivity(monthIntent); +// } catch (Exception e) { +// // TODO: handle exception +// ToastUtil.showMessage("专家信息为空,不可订购服务"); +// } + + break; + + } + + } + + private class GandanDongtaiListAdapter extends BaseAdapter { + + private List dongtai; + + public GandanDongtaiListAdapter(List dongtai) { + // TODO Auto-generated constructor stub + this.dongtai = dongtai; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return dongtai.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return dongtai.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh; + if (convertView == null) { + vh = new ViewHolder(); + convertView = UIUtils.inflate(R.layout.item_more_video); + vh.mTv_name = (TextView) convertView.findViewById(R.id.tv_video_title); + vh.mIV_video = (ImageView) convertView.findViewById(R.id.iv_video_image); + vh.mTv_date = (TextView) convertView.findViewById(R.id.tv_video_date); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_name.setText(dongtai.get(position).getTITLE()); + vh.mTv_date.setText(dongtai.get(position).getAuthor()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + dongtai.get(position).getHEAD_IMG(), + vh.mIV_video, + ImageOptions.getImageOptions(R.drawable.img_news_empty)); + + return convertView; + } + + public class ViewHolder { + public TextView mTv_name, mTv_date; + public ImageView mIV_video; + } + + } + + + + private class GandanVideoListAdapter extends BaseAdapter { + + private List video; + + public GandanVideoListAdapter(List video) { + // TODO Auto-generated constructor stub + this.video = video; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return video.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return video.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh; + if (convertView == null) { + vh = new ViewHolder(); + convertView = UIUtils.inflate(R.layout.item_more_video); + vh.mTv_name = (TextView) convertView.findViewById(R.id.tv_video_title); + vh.mIV_video = (ImageView) convertView.findViewById(R.id.iv_video_image); + vh.mTv_date = (TextView) convertView.findViewById(R.id.tv_video_date); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_name.setText(video.get(position).getName()); + vh.mTv_date.setText(video.get(position).getPublic_name()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + video.get(position).getImgpath(), + vh.mIV_video, + ImageOptions.getImageOptions(R.drawable.img_news_empty)); + + return convertView; + } + public class ViewHolder { + public TextView mTv_name, mTv_date; + public ImageView mIV_video; + } + + } + /** + * @author Administrator + * @date 2015-12-1 上午8:58:18 + *

+ * 功能说明:解除专家 + *

+ * method + */ +// private void remove() { +// // TODO Auto-generated method stub +// pd = new CustomProgressDialog(this, "请稍候"); +// pd.show(); +// new Thread() { +// public void run() { +// try { +// List parameters = new ArrayList(); +// BasicNameValuePair valuePair = new BasicNameValuePair( +// "expertUuid", uuid); +// BasicNameValuePair valuePair2 = new BasicNameValuePair( +// "patientUuid", SharePrefUtil.getString( +// ExpertDetailActivity.this, "uuid", "")); +// parameters.add(valuePair); +// parameters.add(valuePair2); +// HttpResult httpResult = HttpHelper.post(Url.cancelRes, +// parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// if (result == null) { +// ToastUtil.showMessage("请求服务器失败,请重试"); +// pd.dismiss(); +// return; +// } +// Message msg = Message.obtain(); +// msg.obj = result; +// msg.what = 1; +// handler.sendMessage(msg); +// +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// pd.dismiss(); +// ToastUtil.showMessage("请求失败,请重试"); +// } +// } +// +// ; +// }.start(); +// } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + LogUtil.e(resultJson); + switch (resultCode) { + case 01: + closeProgressDialog(); + Gson gson = new Gson(); + try { + expertDetail = gson.fromJson(resultJson, ExpertDetail.class); + } catch (JsonSyntaxException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if ("1".equals(expertDetail.getCode())) { + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } else { + ToastUtil.showMessage("获取专家信息失败,请重试"); + return; + } + + break; + } + + + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/FaPiaoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FaPiaoActivity.java new file mode 100644 index 0000000..3a19cd4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FaPiaoActivity.java @@ -0,0 +1,640 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat; +import static cn.shangyu.gdxzExpert.utils.StringUtil.getYen; +import static cn.shangyu.gdxzExpert.utils.Url.listExcellencourseOrderInvoice; +import static cn.shangyu.gdxzExpert.utils.Url.listExcellencourseOrderNoInvoice; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.FapiaoBean; +import cn.shangyu.gdxzExpert.bean.TicketBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class FaPiaoActivity extends BaseActivity implements OnCallBackFromNet, RadioGroup.OnCheckedChangeListener, AdapterView.OnItemClickListener { + + @Override + public void setTitle() { + top_title.setText("开具发票"); + top_right1.setImageResource(R.drawable.fapaio_tip); + top_right1.setVisibility(View.VISIBLE); + top_right1.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + + r_tips.setVisibility(View.VISIBLE); + } + }); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right1.setVisibility(View.GONE); + top_right_text.setText("说明"); + top_right_text.setTextSize(18); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + r_tips.setVisibility(View.VISIBLE); + } + }); + } + } + PullToRefreshListView ptrLv; + PullToRefreshListView ptrLv1; + public LinearLayout ll_empty,ll_empty1; + RadioButton ticket,ticketed; + RadioGroup r_ticket; + List data=new ArrayList<>(); + List datas=new ArrayList<>(); + FapiaoAdapter adapter; + TicketAdapter ticketAdapter; + CheckBox cb_all; + TextView tv_yuan,tv_num; + LinearLayout l_p; + RelativeLayout r_f; + private double price=0.00; + int num=0; + List checkBoxes=new ArrayList<>(); + Boolean ispressed=true; + RelativeLayout r_tips,r_tips1; + TextView im_piao; +// String uuidStr=""; + int page=1; +// TextView tv_ok,tv_ok1; + List uuid=new ArrayList<>(); + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view= UIUtils.inflate(R.layout.activity_fa_piao_big); + } + else + { + view= UIUtils.inflate(R.layout.activity_fa_piao); + } + r_ticket=view.findViewById(R.id.r_ticket); + ticket=view.findViewById(R.id.ticket); + ticketed=view.findViewById(R.id.ticketed); + cb_all=view.findViewById(R.id.cb_all); + l_p=view.findViewById(R.id.l_p); + tv_yuan=view.findViewById(R.id.tv_yuan); + tv_num=view.findViewById(R.id.tv_num); + r_f=view.findViewById(R.id.r_f); + r_tips=view.findViewById(R.id.r_tips); + r_tips1=view.findViewById(R.id.r_tips1); +// tv_ok=view.findViewById(R.id.tv_ok); +// tv_ok1=view.findViewById(R.id.tv_ok1); + im_piao=view.findViewById(R.id.im_piao); + im_piao.setOnClickListener(this); + ptrLv = (PullToRefreshListView)view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + ptrLv1 = (PullToRefreshListView)view. findViewById(R.id.lv_item_c1); + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + ll_empty=view.findViewById(R.id.ll_empty); + ll_empty1=view.findViewById(R.id.ll_empty1); + // 得到实际的ListView 设置点击 + ptrLv1.getRefreshableView().setOnItemClickListener(this); + r_ticket.setOnCheckedChangeListener(this); + r_tips.setOnClickListener(this); + r_tips1.setOnClickListener(this); +// tv_ok.setOnClickListener(this); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + getTicket(); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + getTicket(); + + } + }); + ptrLv1.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page=1; + getTicketed(page+""); + + + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getTicketed(page+""); + + + } + }); + cb_all.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + +// num=0; +// price=0.00; + + if(!isChecked) + { + if(ispressed) + { + for(CheckBox checkBox:checkBoxes) + { + checkBox.setChecked(false); + } + } + +// l_p.setVisibility(View.GONE); + + + } + else + { +// for(FapiaoBean.PiaoBean piaoBean:data) +// { +// if(!StringUtil.isEmpty(piaoBean.getAccount())) +// { +// price+=Integer.valueOf(piaoBean.getAccount())/100.0; +// } +// } +// if(ispressed) +// { + for(CheckBox checkBox:checkBoxes) + { + checkBox.setChecked(true); + } + +// } + +// num=data.size(); +// +// l_p.setVisibility(View.VISIBLE); + } + ispressed=true; + +// tv_yuan.setText(String.format("%.2f",price)); +// tv_num.setText("(已选"+num+"个课程)"); + } + }); +// getTicketed(page+""); + getTicket(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("发票管理"); + if(ticket!=null&&ticket.isChecked()) + { + getTicket(); + } + else if(ticket!=null) + { + getTicketed(page+""); + } + } + + private void getTicket() + { + + ptrLv1.setVisibility(View.GONE); + ptrLv.setVisibility(View.VISIBLE); + showLoadingProgress(); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(listExcellencourseOrderNoInvoice,param,101,this); + } + private void getTicketed(String page) + { + ptrLv.setVisibility(View.GONE); + ptrLv1.setVisibility(View.VISIBLE); + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("page",page); + sendJsonPostParamtoNetSignMD5(listExcellencourseOrderInvoice,param,102,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); +// case R.id.tv_ok1: + if (id == R.id.r_tips1) { + r_tips1.setVisibility(View.GONE); +// case R.id.tv_ok: + } else if (id == R.id.r_tips) { + r_tips.setVisibility(View.GONE); + } else if (id == R.id.im_piao) { + if(price<50) + { + r_tips1.setVisibility(View.VISIBLE); + } + else + { + String uuidStr=String.join(",",uuid); + Intent intent=new Intent(FaPiaoActivity.this,TicketDetailActivity.class); + intent.putExtra("uuidStr",uuidStr); + intent.putExtra("price",price); + startActivity(intent); + } + } + } + + FapiaoBean fapiaoBean; + TicketBean ticketBean; + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + fapiaoBean = GsonTools.fromGsonToBean(resultJson, FapiaoBean.class); + if ("200".equals(fapiaoBean.getCode())) { + data.clear(); + checkBoxes.clear(); + if (fapiaoBean.getData() == null || fapiaoBean.getData().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + r_f.setVisibility(View.GONE); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(fapiaoBean.getData()); + r_f.setVisibility(View.VISIBLE); + } + + + if (adapter == null) { + adapter = new FapiaoAdapter(FaPiaoActivity.this,data); + + ptrLv.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + onLoaded(); + + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(fapiaoBean.getMessage() + ""); + } + break; + case 102: + + closeProgressDialog(); + ticketBean = GsonTools.fromGsonToBean(resultJson, TicketBean.class); + if ("200".equals(ticketBean.getCode())) { + if(page==1) + { + datas.clear(); + if (ticketBean.getData() == null || ticketBean.getData().getList()== null || ticketBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv1.setEmptyView(ll_empty1); + // 完成刷新 + onLoaded1(); + return; + } else { + datas.addAll(ticketBean.getData().getList()); + } + } + else { + datas.addAll(ticketBean.getData().getList()); + } + + if (ticketAdapter == null) { + ticketAdapter = new TicketAdapter(FaPiaoActivity.this,datas); + + ptrLv1.getRefreshableView().setAdapter(ticketAdapter); + } else { + ticketAdapter.notifyDataSetChanged(); + } + onLoaded1(); + if (page > 1) { + // 是否有更多 + if (ticketBean.getData() == null || ticketBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = ticketBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv1.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(fapiaoBean.getMessage() + ""); + } + break; + } + + } + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + private void onLoaded1() { + + ptrLv1.onRefreshComplete(); + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.ticket) { + ticket.setTextColor(Color.parseColor("#8B2316")); + ticketed.setTextColor(Color.parseColor("#666666")); + if(CommonUtil.BigModule()) + { + ticketed.setTextColor(Color.parseColor("#333333")); + } + + getTicket(); + } else if (checkedId == R.id.ticketed) { + ticket.setTextColor(Color.parseColor("#666666")); + ticketed.setTextColor(Color.parseColor("#8B2316")); + if(CommonUtil.BigModule()) + { + ticket.setTextColor(Color.parseColor("#333333")); + } + r_f.setVisibility(View.GONE); + + getTicketed(page+""); + } + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent=new Intent(FaPiaoActivity.this,TicketDetailActivity.class); + intent.putExtra("id",datas.get(position-1).getId()); + intent.putExtra("status",datas.get(position-1).getStatus()); + startActivity(intent); + } + + public class FapiaoAdapter extends BaseAdapter { + List data; + private ViewHolder holder; + Context context; + public FapiaoAdapter(Context context,List data) + { + this.data=data; + this.context=context; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + holder=null; + if(view==null) + { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fapiao_tiem_big); + } + else + { + view = UIUtils.inflate(R.layout.fapiao_tiem); + } + holder =new ViewHolder(); + + + holder.tv_n=view.findViewById(R.id.tv_n); + holder.tv_rpr=view.findViewById(R.id.tv_rpr); + holder.cb_f=view.findViewById(R.id.cb_f); + holder.im_j=view.findViewById(R.id.im_j); + + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + checkBoxes.add( holder.cb_f); + holder.tv_n.setText(data.get(position).getExcellencourse_title()); + holder.tv_rpr.setText("实际支付:"+fenGetYuanFormat(data.get(position).getAccount())); + + ImageLoader.getInstance().displayImage( + data.get(position).getExcellencourse_img(),holder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + holder.cb_f.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + if(isChecked) + { + price+=Integer.valueOf(data.get(position).getAccount())/100.0; + l_p.setVisibility(View.VISIBLE); + num++; + if(num==data.size()) + { + ispressed=false; + cb_all.setChecked(true); + } + uuid.add(data.get(position).getUuid()); + } + else + { + price-=Integer.valueOf( data.get(position).getAccount())/100.0; + if(price<0.01) + { + l_p.setVisibility(View.GONE); + } + Iterator it = uuid.iterator(); + while (it.hasNext()) { + String str = it.next(); + if(str.equals(data.get(position).getUuid())){ + it.remove(); + break; + } + } + num--; + ispressed=false; + cb_all.setChecked(false); + } + tv_yuan.setText(getYen()+String.format("%.2f",price)); + tv_num.setText("(已选"+num+"个课程)"); + } + }); + return view; + } + public class ViewHolder + { + + CheckBox cb_f; + CircularRectangle im_j; + TextView tv_rpr; + TextView tv_n; + + + } + + + + } + public class TicketAdapter extends BaseAdapter { + List data; + private ViewHolder holder; + Context context; + public TicketAdapter(Context context,List data) + { + this.data=data; + this.context=context; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + holder=null; + if(view==null) + { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.ticket_item_big); + } + else + { + view = UIUtils.inflate(R.layout.ticket_item); + } + holder =new ViewHolder(); + + + holder.tv_date=view.findViewById(R.id.tv_date); + holder.tv_status=view.findViewById(R.id.tv_status); + holder.tv_num=view.findViewById(R.id.tv_num); + holder.tv_pr=view.findViewById(R.id.tv_pr); + + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + holder.tv_date.setText(data.get(position).getCreate_date()); + holder.tv_num.setText("共计"+data.get(position).getNum()+"个课程"); + holder.tv_pr.setText(fenGetYuanFormat(data.get(position).getAmount())); + switch (data.get(position).getStatus()) + { + case "0": + holder.tv_status.setText("开票中"); + break; + case "1": + holder.tv_status.setText("已开票"); + break; + case "2": + holder.tv_status.setText("开票失败"); + break; + } + + + return view; + } + public class ViewHolder + { + + TextView tv_status,tv_num; + TextView tv_date,tv_pr; + + + } + + + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/FibroActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FibroActivity.java new file mode 100644 index 0000000..a8459d8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FibroActivity.java @@ -0,0 +1,1038 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.InputType; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.bean.liverElasticityIdBean; +import cn.shangyu.gdxzExpert.bean.liverElasticityIdBeans; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class FibroActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + String liverElasticityId; + View view; + + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + TextView new_suifang; + + @Override + public void setTitle() { + top_title.setText("肝脏弹性检查"); + + } + String baseinfoDataStatus; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_fibro); + baseinfoDataStatus=getIntent().getStringExtra("dataStatus"); + liverElasticityId=getIntent().getStringExtra("liverElasticityId"); + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + view.findViewById(R.id.change_data).setOnClickListener(this); + ((EditText)(view.findViewById(R.id.liverHardness))).setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); + ((EditText)(view.findViewById(R.id.fatAttenuation))).setInputType(InputType.TYPE_CLASS_NUMBER); + initView(); + handletoken(Url.suifangLiverElasticity); + return view; + } + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(FibroActivity.this, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + public List imgs= new ArrayList<>();; + liverElasticityIdBeans beans; + private void gettree() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.suifangLiverElasticity+liverElasticityId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + beans= GsonTools.fromGsonToBean(response, liverElasticityIdBeans.class); + if(beans.getData()!=null) + { + if(!StringUtil.isEmpty(beans.getData().getFatAttenuation())) + { + ((EditText)(view.findViewById(R.id.fatAttenuation))).setText(beans.getData().getFatAttenuation()); + + } + if(!StringUtil.isEmpty(beans.getData().getLiverHardness())) + { + ((EditText)(view.findViewById(R.id.liverHardness))).setText(beans.getData().getLiverHardness()); + + } + + if("1".equals(beans.getData().getCheckType())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_31))).setChecked(true); + + } + else if("2".equals(beans.getData().getCheckType())) + { + ((RadioButton)(view.findViewById(R.id.tab_rbn_32))).setChecked(true); + + } + + if(beans.getData().getImgPath()!=null&&beans.getData().getImgPath().size()>0) + { + imgs.addAll(beans.getData().getImgPath()); + } + if(beans.getData().getImgPath()!=null) + { + for(imBean urlBean:beans.getData().getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangLiverElasticity); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(FibroActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.suifangLiverElasticity)) + { + gettree(); + } + else if(url.contains(Url.suifangLiverElasticityupdate)) + { + updatedata(); + } + + + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.new_suifang: + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认保存新的信息?"); + } + },300); + break; + case R.id.change_data: + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认本数据项已全部完成?"); + } + },300); + break; + } + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(FibroActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(content.contains("保存")) + { + sendpre(); + hideSoftKeyboard(); + } + else{ + baseinfoDataStatus="2"; + sendpre(); + hideSoftKeyboard(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(FibroActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(FibroActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(FibroActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(FibroActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(FibroActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(FibroActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(FibroActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(FibroActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(FibroActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(FibroActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + if(!StringUtil.isEmpty(mBitmaps.get(position).getPath())) + { + Glide.with(FibroActivity.this).asBitmap().load(mBitmaps.get(position).getPath()) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)) + .into(view); + } + else + { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + FibroActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + private void sendpre() + { + if(StringUtil.isEmpty(((EditText)(view.findViewById(R.id.fatAttenuation))).getText().toString())) + { + ToastUtil.showToast("脂肪衰减参数请填写整数"); + return; + } + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { + + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(FibroActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { + liverElasticityIdBean pro=new liverElasticityIdBean(); +// if(((EditText)(view.findViewById(R.id.fatAttenuation))).getText()!=null) +// { + pro.setFatAttenuation( ((EditText)(view.findViewById(R.id.fatAttenuation))).getText().toString()); +// ((EditText)(view.findViewById(R.id.pv))).setText(beans.getData().getPv()); +//} + pro.setLiverHardness( ((EditText)(view.findViewById(R.id.liverHardness))).getText().toString()); + if(((RadioButton)(view.findViewById(R.id.tab_rbn_31))).isChecked()) + { + pro.setCheckType("1"); +// ((RadioButton)(view.findViewById(R.id.tab_rbn_31))).setChecked(true); + + } + else if(((RadioButton)(view.findViewById(R.id.tab_rbn_32))).isChecked()) + { + pro.setCheckType("2"); +// ((RadioButton)(view.findViewById(R.id.tab_rbn_32))).setChecked(true); + + } + if(baseinfoDataStatus!=null) + { + pro.setDataStatus(baseinfoDataStatus); + } + pro.setImgPath(imgs); + pro.setLiverElasticityId(liverElasticityId); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(Url.suifangLiverElasticityupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + + if(hasrealtoken(response)>0) + { + finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangLiverElasticityupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/FileDisplayActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FileDisplayActivity.java new file mode 100644 index 0000000..9c35ca2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FileDisplayActivity.java @@ -0,0 +1,239 @@ +package cn.shangyu.gdxzExpert.activity;//package cn.shangyu.gdxzExpert.activity; +// +//import android.app.Activity; +//import android.content.Context; +//import android.content.Intent; +//import android.os.Bundle; +//import android.os.Environment; +// +//import android.text.TextUtils; +// +//import java.io.File; +// +// +//import cn.shangyu.gdxzExpert.R; +//import cn.shangyu.gdxzExpert.ui.SuperFileView2; +//import cn.shangyu.gdxzExpert.utils.Md5Tool; +// +// +// +//public class FileDisplayActivity extends Activity { +// +// +// private String TAG = "FileDisplayActivity"; +// SuperFileView2 mSuperFileView; +// +// String filePath; +// +// +// +// +// @Override +// protected void onCreate( Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// setContentView(R.layout.activity_file_display); +// init(); +// } +// +// +// public void init() { +// mSuperFileView = (SuperFileView2) findViewById(R.id.mSuperFileView); +// mSuperFileView.setOnGetFilePathListener(new SuperFileView2.OnGetFilePathListener() { +// @Override +// public void onGetFilePath(SuperFileView2 mSuperFileView2) { +// getFilePathAndShowFile(mSuperFileView2); +// } +// }); +// +// Intent intent = this.getIntent(); +// String path = (String) intent.getSerializableExtra("path"); +// +// if (!TextUtils.isEmpty(path)) { +// setFilePath(path); +// } +// mSuperFileView.show(); +// +// } +// +// +// private void getFilePathAndShowFile(SuperFileView2 mSuperFileView2) { +// +// +// if (getFilePath().contains("http")) {//网络地址要先下载 +// +//// downLoadFromNet(getFilePath(),mSuperFileView2); +// +// } else { +// mSuperFileView2.displayFile(new File(getFilePath())); +// } +// } +// +// +// @Override +// public void onDestroy() { +// super.onDestroy(); +// if (mSuperFileView != null) { +// mSuperFileView.onStopDisplay(); +// } +// } +// +// +// public static void show(Context context, String url) { +// Intent intent = new Intent(context, FileDisplayActivity.class); +// Bundle bundle = new Bundle(); +// bundle.putSerializable("path", url); +// intent.putExtras(bundle); +// context.startActivity(intent); +// +// } +// +// public void setFilePath(String fileUrl) { +// this.filePath = fileUrl; +// } +// +// private String getFilePath() { +// return filePath; +// } +// +//// private void downLoadFromNet(final String url,final SuperFileView2 mSuperFileView2) { +//// +//// //1.网络下载、存储路径、 +//// File cacheFile = getCacheFile(url); +//// if (cacheFile.exists()) { +//// if (cacheFile.length() <= 0) { +//// TLog.d(TAG, "删除空文件!!"); +//// cacheFile.delete(); +//// return; +//// } +//// } +//// +//// +//// +//// LoadFileModel.loadPdfFile(url, new Callback() { +//// @Override +//// public void onResponse(Call call, Response response) { +//// TLog.d(TAG, "下载文件-->onResponse"); +//// boolean flag; +//// InputStream is = null; +//// byte[] buf = new byte[2048]; +//// int len = 0; +//// FileOutputStream fos = null; +//// try { +//// ResponseBody responseBody = response.body(); +//// is = responseBody.byteStream(); +//// long total = responseBody.contentLength(); +//// +//// File file1 = getCacheDir(url); +//// if (!file1.exists()) { +//// file1.mkdirs(); +//// TLog.d(TAG, "创建缓存目录: " + file1.toString()); +//// } +//// +//// +//// //fileN : /storage/emulated/0/pdf/kauibao20170821040512.pdf +//// File fileN = getCacheFile(url);//new File(getCacheDir(url), getFileName(url)) +//// +//// TLog.d(TAG, "创建缓存文件: " + fileN.toString()); +//// if (!fileN.exists()) { +//// boolean mkdir = fileN.createNewFile(); +//// } +//// fos = new FileOutputStream(fileN); +//// long sum = 0; +//// while ((len = is.read(buf)) != -1) { +//// fos.write(buf, 0, len); +//// sum += len; +//// int progress = (int) (sum * 1.0f / total * 100); +//// TLog.d(TAG, "写入缓存文件" + fileN.getName() + "进度: " + progress); +//// } +//// fos.flush(); +//// TLog.d(TAG, "文件下载成功,准备展示文件。"); +//// //2.ACache记录文件的有效期 +//// mSuperFileView2.displayFile(fileN); +//// } catch (Exception e) { +//// TLog.d(TAG, "文件下载异常 = " + e.toString()); +//// } finally { +//// try { +//// if (is != null) +//// is.close(); +//// } catch (IOException e) { +//// } +//// try { +//// if (fos != null) +//// fos.close(); +//// } catch (IOException e) { +//// } +//// } +//// } +//// +//// @Override +//// public void onFailure(Call call, Throwable t) { +//// TLog.d(TAG, "文件下载失败"); +//// File file = getCacheFile(url); +//// if (!file.exists()) { +//// TLog.d(TAG, "删除下载失败文件"); +//// file.delete(); +//// } +//// } +//// }); +//// +//// +//// } +// +// /*** +// * 获取缓存目录 +// * +// * @param url +// * @return +// */ +// private File getCacheDir(String url) { +// +// return new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/007/"); +// +// } +// /*** +// * 绝对路径获取缓存文件 +// * +// * @param url +// * @return +// */ +// private File getCacheFile(String url) { +// File cacheFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/007/" +// + getFileName(url)); +// return cacheFile; +// } +// +// /*** +// * 根据链接获取文件名(带类型的),具有唯一性 +// * +// * @param url +// * @return +// */ +// private String getFileName(String url) { +// String fileName = Md5Tool.hashKey(url) + "." + getFileType(url); +// return fileName; +// } +// +// /*** +// * 获取文件类型 +// * +// * @param paramString +// * @return +// */ +// private String getFileType(String paramString) { +// String str = ""; +// +// if (TextUtils.isEmpty(paramString)) { +// return str; +// } +// int i = paramString.lastIndexOf('.'); +// if (i <= -1) { +// return str; +// } +// +// +// str = paramString.substring(i + 1); +// return str; +// } +// +// +//} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/FindHelpActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FindHelpActivity.java new file mode 100644 index 0000000..8b74b90 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FindHelpActivity.java @@ -0,0 +1,118 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Intent; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.view.Gravity; +import android.view.View; +import android.widget.ImageView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; + +import java.io.FileOutputStream; +import java.io.OutputStream; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class FindHelpActivity extends BaseActivity { + + + + @Override + public void setTitle() { + top_title.setText("查找文献"); + + } + + ImageView im_we; + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_find_help); + im_we=view.findViewById(R.id.im_we); + im_we.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(FindHelpActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + savePhoto(); + } + else + { + EasyWindow.with(FindHelpActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(FindHelpActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + savePhoto(); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + + } + } + else + { + + savePhoto(); + } + + + return false; + } + }); + return view; + } + + private void savePhoto() + { + Resources res = getResources(); + BitmapDrawable d = (BitmapDrawable) res.getDrawable(R.drawable.wechatpeople); + Bitmap img = d.getBitmap(); + +// String fn = "image_test.png"; + String path = Environment.getExternalStorageDirectory() + .getPath() + "/gdxzExpert/picture"+"wechatgdxz.jpg"; + try{ + OutputStream os = new FileOutputStream(path); + img.compress(Bitmap.CompressFormat.PNG, 100, os); + os.close(); + ToastUtil.showToast("图片已保存至"+path); + }catch(Exception e){ + + } + // 最后通知图库更新 + sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, + Uri.parse("file://" +path))); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetActivity.java new file mode 100644 index 0000000..af5ce3f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetActivity.java @@ -0,0 +1,726 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.Message; +import android.text.InputType; +import android.text.Selection; +import android.text.Spannable; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.Toast; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.TimeButton; + +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; +import static cn.shangyu.gdxzExpert.utils.Url.getupdatePwd; + +/** + * + * ForgetActivity.java + * + * @author ssy + * @date 2015-9-8 下午3:53:40 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:找回密码页面, + */ +public class ForgetActivity extends BaseActivity implements OnCallBackFromNet { + + private EditText et_phone, et_code, et_pwd, et_num; + private String number, pwd; + private Button bt_submit; + private TimeButton tbCode; + private CheckBox mShowPass; + private ImageView mIv_num; + private String mobile; +// private SmsObserver mObserver; + @Override + public void setTitle() { + top_title.setText("忘记密码"); + // 取值 + mobile = getIntent().getStringExtra("mobile"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_forget_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_forget); + } + et_phone = (EditText) view.findViewById(R.id.et_phone);// 手机号 + // 设置输入框获得焦点hint提示消失 添加监听 + et_phone.setOnFocusChangeListener(onFocusAutoClearHintListener); + et_code = (EditText) view.findViewById(R.id.et_code);// 验证码 + // 设置输入框获得焦点hint提示消失 添加监听 + et_code.setOnFocusChangeListener(onFocusAutoClearHintListener); + et_pwd = (EditText) view.findViewById(R.id.et_pwd);// 密码 + et_num = (EditText) view.findViewById(R.id.et_num_code);// 图形验证码 + mIv_num = (ImageView) view.findViewById(R.id.iv_get_num); + // 设置输入框获得焦点hint提示消失 添加监听 + + et_pwd.setOnFocusChangeListener(onFocusAutoClearHintListener); + et_phone.setText(mobile); + bt_submit = (Button) view.findViewById(R.id.bt_submit);// 提交 + tbCode = (TimeButton) view.findViewById(R.id.tv_get_code);// 获取验证码 + tbCode.onCreate(); + tbCode.clearTimer(); + tbCode.setTextBefore("获取验证码").setLenght(60 * 1000); + mIv_num.setOnClickListener(this); + tbCode.setOnClickListener(this); + bt_submit.setOnClickListener(this); + mShowPass = (CheckBox) view.findViewById(R.id.show_password);// 密码是否可见 +// mObserver = new SmsObserver(ForgetActivity.this, mHandler); +// Uri uri = Uri.parse("content://sms/"); +// // 注册短信的监听 +// getContentResolver().registerContentObserver(uri, true, mObserver); + mShowPass.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + if (!TextUtils.isEmpty(et_pwd.getText().toString() + .trim())) + { + if (isChecked) { + // 可见密码模式 + et_pwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + } else { + // 密码隐藏模式 + et_pwd.setInputType(InputType.TYPE_CLASS_TEXT + | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + } + + // Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 + et_pwd.postInvalidate(); + // 切换后将EditText光标置于末尾 + CharSequence charSequence = et_pwd.getText(); + if (charSequence instanceof Spannable) { + Spannable spanText = (Spannable) charSequence; + Selection.setSelection(spanText, charSequence.length()); + } + } + }); + // Glide.with(ForgetActivity.this).load(Url.getImagecode) + // .diskCacheStrategy(DiskCacheStrategy.NONE) + // .skipMemoryCache(true).into(mIv_num); + + // new Thread(networkTask).start(); + return view; + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + long times = System.currentTimeMillis(); + mbBitmap = getInternetPicture(Url.getImagecode + "?t=" + times); + handler.sendEmptyMessage(1); + + } + }; + Runnable networkTask3 = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + yzCode(); + + } + }; + Bitmap mbBitmap = null; + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + switch (msg.what) { + case 1: + if (mbBitmap != null) + mIv_num.setImageBitmap(mbBitmap); + + break; + case 2: + String str = (String) msg.obj; + JSONObject objs; + try { + objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + new Thread(networkTask3).start(); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 3: + String str2 = (String) msg.obj; + JSONObject objs2; + try { + objs2 = new JSONObject(str2); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals(String.valueOf(1))) { + tbCode.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + default: + break; + } + } + }; + String sessionid = null; + + public Bitmap getInternetPicture(String UrlPath) { + Bitmap bm = null; + String urlpath = UrlPath; + // 2、获取Uri + try { + URL uri = new URL(urlpath); + + // 3、获取连接对象、此时还没有建立连接 + HttpURLConnection connection = (HttpURLConnection) uri + .openConnection(); + // 4、初始化连接对象 + // 设置请求的方法,注意大写 + connection.setRequestMethod("GET"); + // 读取超时 + connection.setReadTimeout(5000); + // 设置连接超时 + connection.setConnectTimeout(5000); + // 5、建立连接 + connection.connect(); + String cookieval = connection.getHeaderField("set-cookie"); + + if (cookieval != null) { + sessionid = cookieval.substring(0, cookieval.indexOf(";")); + } + + // 6、获取成功判断,获取响应码 + if (connection.getResponseCode() == 200) { + // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中 + InputStream is = connection.getInputStream(); + // 8、从流中读取数据,构造一个图片对象GoogleAPI + bm = BitmapFactory.decodeStream(is); + // 9、把图片设置到UI主线程 + // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件; + is.close(); + Log.i("", "网络请求成功"); + + } else { + Log.v("tag", "网络请求失败"); + bm = null; + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return bm; + + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + String username; + + private void mIsRight() { + try { + // 对输入的内容进行编码,防止中文乱码 + username = URLEncoder.encode(et_num.getText().toString().trim(), + "UTF-8"); + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getvalide + "?valicode=" + username); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 2; + message.obj = new String(result); + handler.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public final static int GET_SYSTEM_TIME_RESULT = 103; + private String system_time=null; + public void getSystemTime() { + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, + ForgetActivity.this, true); + } + + // 获取验证码 + private void yzCode() { + final String username = et_phone.getText().toString().trim(); + try { + // 对输入的内容进行编码,防止中文乱码 + String usernum = URLEncoder.encode(et_num.getText().toString() + .trim(), "UTF-8"); + // 对应GET请求,要把请求信息拼接在url后面 + int a = StringUtil.getnum(); + String mc = null; +// SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// String timestr = fmt.format(new Date()); + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(username + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + URL url = new URL(Url.getsendSms + "?mc=" + mc + "&type=2&a=" + a); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 3; + message.obj = new String(result); + handler.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 验证验证码,提交到下一步 + * + * @param + */ + public void submit() { + if (!UIUtils.isNetWorkConnected(this)) { + Toast.makeText(this, "网络暂时不可用", Toast.LENGTH_SHORT).show(); + return; + } + final String code = et_code.getText().toString().trim(); + number = et_phone.getText().toString().trim(); + pwd = et_pwd.getText().toString().trim(); + // 验证数据 + if (TextUtils.isEmpty(number)) { + ToastUtil.showToast("请输入手机号"); + et_phone.requestFocus(); + return; + } + if (!ValidateUtils.isMobileNum(number)) {// 手机号码格式不正确 + ToastUtil.showToast("请输入正确的手机号码"); + et_phone.requestFocus(); + return; + } + if (TextUtils.isEmpty(code)) { + ToastUtil.showToast("请输入验证码"); + et_code.requestFocus(); + return; + } + if (StringUtil.isEmpty(pwd)) { + ToastUtil.showToast("请输入密码"); + et_pwd.requestFocus(); + return; + } + if (!ValidateUtils.isPassword(pwd)) { + ToastUtil.showToast("请输入6-16位字母、数字组合密码"); + et_pwd.requestFocus(); + return; + } + + showProgressDialog("提交中,请稍候..."); + updatePwd(); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("mobile", number); +// params.addBodyParameter("sms", code); +// HttpHelper.loadData(HttpMethod.POST, Url.getvalidSmsCode, params, +// new RequestCallBack() { +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// ToastUtil.showMessage("提交失败!"); +// } +// +// @Override +// public void onSuccess(ResponseInfo info) { +// try { +// JSONObject objs = new JSONObject(info.result); +// String retcode = objs.getString("code"); +// String message = objs.getString("message"); +// if (retcode.equals(String.valueOf(1))) { +// +// } else if (retcode.equals(String.valueOf(2))) { +// ToastUtil.showToast("验证码错误"); +// closeProgressDialog(); +// } else if (retcode.equals(String.valueOf(3))) { +// ToastUtil.showToast("验证码已过期"); +// closeProgressDialog(); +// } else { +// ToastUtil.showToast(message); +// closeProgressDialog(); +// } +// } catch (JSONException e) { +// e.printStackTrace(); +// ToastUtil.showToast("提交失败!"); +// closeProgressDialog(); +// } +// } +// }); + + } + + /** + * 更改密码 + */ + private void updatePwd() { + Map param = new HashMap<>(); + param.put("mobile",number); + param.put("password",pwd); + param.put("sms",et_code.getText().toString().trim()); + sendJsonPostParamtoNetSignMD5(getupdatePwd,param,113,this); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("mobile", number);// 手机号 +// params.addBodyParameter("password", pwd);// 密码 +// HttpHelper.loadData(HttpMethod.POST, getupdatePwd, params, +// new RequestCallBack() { +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// ToastUtil.showMessage("重置密码失败!"); +// } +// +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// try { +// JSONObject objs = new JSONObject(info.result); +// String retcode = objs.getString("code"); +// String message = objs.getString("message"); +// if (retcode.equals(String.valueOf(1))) { +// ToastUtil.showToast("重置密码成功!"); +// Intent intent = new Intent(ct, +// LoginActivity.class); +// +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); +// startActivity(intent); +// AppManager.getAppManager().finishActivity( +// ForgetActivity.this); +// } else if (retcode.equals(String.valueOf(2))) { +// ToastUtil.showToast("重置失败,请重试!"); +// } else { +// ToastUtil.showToast(message); +// } +// } catch (JSONException e) { +// e.printStackTrace(); +// ToastUtil.showToast("重置失败,请重试!"); +// } +// } +// }); + } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + + mIsRight(); + + } + }; + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.tv_get_code:// 获取验证码 + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + ToastUtil.showMessage("网络异常"); + return; + } + if (!ValidateUtils + .isMobileNum(et_phone.getText().toString().trim())) { + ToastUtil.showMessage("请输入正确的手机号"); + return; + } + String username = et_phone.getText().toString().trim(); + Map param = new HashMap<>(); + param.put("mobile",username); + param.put("type","5"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); +// getSystemTime(); + break; + case R.id.bt_submit:// 提交 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + submit(); + break; + case R.id.top_back_layout:// 返回 + finish(); + break; + case R.id.iv_get_num: + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + mIv_num.setImageResource(R.drawable.moren_yzm); + ToastUtil.showMessage("网络异常"); + } else { + new Thread(networkTask).start(); + } + break; + } + } + + @Override + protected void onDestroy() { + tbCode.onDestroy(); + super.onDestroy(); +// getContentResolver().unregisterContentObserver(mObserver); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + // Glide.with(ForgetActivity.this).load(resultJson) + // .diskCacheStrategy(DiskCacheStrategy.NONE) + // .skipMemoryCache(true).into(mIv_num); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 113: + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + ToastUtil.showToast("重置密码成功!"); + finish(); +// Intent intent = new Intent(ct, +// LoginActivity.class); +// +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); +// startActivity(intent); +// AppManager.getAppManager().finishActivity( +// ForgetActivity.this); + }else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("重置失败,请重试!"); + } + break; + case MSG_SEND: + if(resultJson!=null) + { + + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals("200")) { + tbCode.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } + break; + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + new Thread(networkTask3).start(); + break; + + default: + break; + } + } + +// private Handler mHandler = new Handler() { +// @Override +// public void handleMessage(Message msg) { +// if (msg.what == LoginActivity.MSG_RECEIVED_CODE) { +// String code = (String) msg.obj; +// if (code != null) { +// et_code.setText(code.trim()); +// } +// +// } +// } +// }; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetRestPwdActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetRestPwdActivity.java new file mode 100644 index 0000000..a1400b5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ForgetRestPwdActivity.java @@ -0,0 +1,188 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ForgetRestPwdActivity.java + * + * ************************已弃用,请移步ForgetActivity*************************** + * + * @author ssy + * @date 2015-9-8 下午3:53:51 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:找回密码页面2 + */ +public class ForgetRestPwdActivity extends BaseActivity { + + private EditText et_pwd; + private EditText et_pwd_check; + private String number; + private String pwd; + private String pwdCheck; + private Button restpwdok; + public static int ERROR = 101; + + @Override + public void setTitle() { + top_title.setText("重设密码"); + top_back_layout.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_forget_restpwd); + et_pwd = (EditText) view.findViewById(R.id.et_pwd); + // 设置输入框获得焦点hint提示消失监听 + et_pwd.setOnFocusChangeListener(onFocusAutoClearHintListener); + et_pwd_check = (EditText) view.findViewById(R.id.et_pwd_check); + et_pwd_check.setOnFocusChangeListener(onFocusAutoClearHintListener); + restpwdok = (Button) view.findViewById(R.id.restpwdok); + restpwdok.setOnClickListener(this); + number = getIntent().getStringExtra("number"); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + /** + * 提价重设密码,完成 + * + * @param view + */ + public void restpwdok() { + pwd = et_pwd.getText().toString().trim(); + pwdCheck = et_pwd_check.getText().toString().trim(); + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络不可用"); + return; + } + if (TextUtils.isEmpty(pwd)) { + ToastUtil.showToast("请输入新密码"); + return; + } else if (pwd.length() < 6) { + ToastUtil.showToast("密码最少6位"); + return; + } else if (!ValidateUtils.isPassword(pwd)) { + ToastUtil.showToast("密码必须为字母与数字"); + return; + } else if (TextUtils.isEmpty(pwdCheck)) { + ToastUtil.showToast("请输入确认密码"); + return; + } else if (!pwd.equals(pwdCheck)) { + ToastUtil.showToast("密码不一致"); + et_pwd.setText(""); + et_pwd_check.setText(""); + et_pwd.requestFocus(); + return; + } + showProgressDialog("提交中,请稍候..."); + new Thread() { + public void run() { + List parameters = new ArrayList(); + BasicNameValuePair value1 = new BasicNameValuePair("mobile", + number); + BasicNameValuePair value2 = new BasicNameValuePair("password", + pwd); + parameters.add(value1); + parameters.add(value2); + try { + HttpResult httpResult = HttpHelper.post(Url.getupdatePwd, + parameters);// 请求网络 + String str = httpResult.getString();// str为服务器返回的json串 + JSONObject objs = new JSONObject(str); + String retcode = objs.getString("code"); // 为返回过来的retcode + LogUtil.i("重置密码str:" + str + "retcode====" + retcode); + if ("1".equals(retcode)) { + handler.sendEmptyMessage(100); + } else if ("2".equals(retcode)) { + handler.sendEmptyMessage(102); + } + } catch (Exception e) { + // 说明自己服务器返回数据失败 + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + }; + }.start(); + } + + public Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + closeProgressDialog(); + if (msg.what == ERROR) { + ToastUtil.showToast("提交失败,请重试"); + } else if (msg.what == 100) { + ToastUtil.showToast("重置密码成功"); + Intent intent = new Intent(ct, LoginNewActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + android.os.Process.killProcess(android.os.Process.myPid()); + } else if (msg.what == 102) { + ToastUtil.showToast("重置失败,请重试"); + } + }; + }; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.restpwdok:// 提交 + restpwdok(); + break; + case R.id.top_back_layout:// 反回 + finish(); + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/FreeagentsearchActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FreeagentsearchActivity.java new file mode 100644 index 0000000..e272ae2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/FreeagentsearchActivity.java @@ -0,0 +1,150 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * FreeagentsearchActivity.java + * 功能说明:免费代查周刊 + */ +public class FreeagentsearchActivity extends BaseActivity { + private CustomProgressDialog pd; + private Button btsu; + private EditText literature_name; + private EditText literature_years; + private EditText literature_names; + private String literaturename = ""; + private String literatureyears = ""; + private String expertUuid = ""; + private String literaturname = ""; + public static int ERROR = 101; + + @Override + public void setTitle() { + top_title.setText("免费代查"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_mianfei_daicha); + literature_name = (EditText) view.findViewById(R.id.literature_name);//文献名 + literature_name.setOnFocusChangeListener(onFocusAutoClearHintListener);// 设置输入框获得焦点hint提示消失 + literature_years = (EditText) view.findViewById(R.id.literature_years);//年份 + literature_years.setOnFocusChangeListener(onFocusAutoClearHintListener); + literature_names = (EditText) view.findViewById(R.id.literature_na);//期刊名字 + literature_names.setOnFocusChangeListener(onFocusAutoClearHintListener); + btsu = (Button) view.findViewById(R.id.bt_sure);// 确定提交按钮 + btsu.setOnClickListener(this); + + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + // 提交请求 + private void btsu( ) { + literaturename = literature_name.getText().toString().trim(); + literatureyears = literature_years.getText().toString().trim(); + literaturname = literature_names.getText().toString().trim(); + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络暂时不可用"); + return; + } + if (TextUtils.isEmpty(literaturename)) { + ToastUtil.showToast("文献名称不能为空"); + literature_name.requestFocus(); + return; + } + // if (TextUtils.isEmpty(literatureyears)) { + // ToastUtil.showToast("文献年份不能为空"); + // literature_years.requestFocus(); + // return; + // } + // + // if (TextUtils.isEmpty(literaturenames)) { + // ToastUtil.showToast("期刊名称不能为空"); + // literature_names.requestFocus(); + // return; + // } + // showProgressDialog("提交中,请稍后..."); + pd = new CustomProgressDialog(ct, "提交中...."); + pd.show(); + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("user_uuid",expertUuid); + params.addBodyParameter("qkname", literaturname); + params.addBodyParameter("qkyear", literatureyears); + params.addBodyParameter("literaturename",literaturename ); + HttpHelper.loadData(HttpMethod.POST, Url.getsearchhelp, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + pd.dismiss(); + ToastUtil.showMessage("提交成功"); + finish(); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + ToastUtil.showMessage("提交失败,请稍候重试"); + pd.dismiss(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.bt_sure: + btsu(); + break; + default: + break; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailActivity.java new file mode 100644 index 0000000..f142d16 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailActivity.java @@ -0,0 +1,548 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.CommentAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.CommentBean; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyListView; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +//import com.umeng.socialize.net.r; + +/** + * 功能说明: + * + * @author zhaodewei 肝胆活动 详情GDEventDetailActivity + */ + +public class GDEventDetailActivity extends BaseActivity implements + OnClickListener, OnCallBackFromNet { + + private String url; + + private X5WebView mWebView; + private WebSettings settings; + private String newsTitle = ""; + private String summary = ""; + private String imageUrl = ""; + private String expertUuid; + private String bookUuid = ""; + private String title = ""; + private GDEventDetailActivity ctx; + private View view; + // private Intent intent; + + private TextView mTvPLNum; + private MyListView mLv_PL; + + private LinearLayout mLl_AddPL; + private EditText mEt_AddPL; + private Button mBt_AddPL; + CommentAdapter mAdapter; + List datas = new ArrayList(); + private boolean isEvent = true; + private boolean isOk1 = false, isOk2 = false; + + public void setitle1() { + // TODO Auto-generated method stub + // intent = getIntent(); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gd_detail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + ctx = this; + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + loadingView = view.findViewById(R.id.loading_view); + + mTvPLNum = (TextView) view.findViewById(R.id.tv_gd_detail_num); + mLv_PL = (MyListView) view.findViewById(R.id.lv_gd_pinglun); + mLl_AddPL = (LinearLayout) view.findViewById(R.id.ll_pinglun); + + mEt_AddPL = (EditText) view.findViewById(R.id.et_add_pinglun); + mBt_AddPL = (Button) view.findViewById(R.id.bt_add_pinglun); + + mEt_AddPL.setOnClickListener(this); + mBt_AddPL.setOnClickListener(this); + setitle1(); + showLoadingView(); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + bookUuid = getIntent().getStringExtra("uuid"); + url = getIntent().getStringExtra("url"); + + newsTitle = getIntent().getStringExtra("newsTitle");// 新闻的标题 + summary = getIntent().getStringExtra("summary");// 新闻的摘要 + imageUrl = getIntent().getStringExtra("imageUrl");// 新闻的图的地址 + + if ("meeting".endsWith(getIntent().getType())) { + if(StringUtil.isEmpty(summary)){ + summary="分享一篇来自\"肝胆相照\"的会议预告:" + newsTitle ; + } + isEvent = false; + top_title.setText("会议详情"); + mLl_AddPL.setVisibility(View.GONE); + mLv_PL.setVisibility(View.GONE); + mTvPLNum.setVisibility(View.GONE); + } else if ("Lesson".endsWith(getIntent().getType())) { + isEvent = false; + top_title.setText("教程详情"); + mLl_AddPL.setVisibility(View.GONE); + mLv_PL.setVisibility(View.GONE); + mTvPLNum.setVisibility(View.GONE); + } else if ("dongtai".endsWith(getIntent().getType())){ + isEvent = false; + top_title.setText("动态详情"); + mLl_AddPL.setVisibility(View.GONE); + mLv_PL.setVisibility(View.GONE); + mTvPLNum.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + }else { + top_title.setText("活动详情"); + } + dealNewsDetail(); + if (isEvent) { + getCommentList(); + } + + } + + public void loadurl(final WebView view, final String url) { + // + // showProgressDialog(""); + LogUtil.i("url = "+url); + view.loadUrl(url); + } + + private void dealNewsDetail() { + +// // mWebView.setInitialScale(25); + settings = mWebView.getSettings(); + settings.setBuiltInZoomControls(false); + settings.setSupportZoom(false); + settings.setDisplayZoomControls(false); + String ua = settings.getUserAgentString(); + settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); + +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + //view.getSettings().setBlockNetworkImage(true); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + //view.getSettings().setBlockNetworkImage(false); + if (isEvent) { + isOk1 = true; + if (isOk2) { + dismissLoadingView(); + } + } else { + dismissLoadingView(); + } + + if (isEvent) { + mLl_AddPL.setVisibility(View.VISIBLE); + mTvPLNum.setVisibility(View.VISIBLE); + mLv_PL.setVisibility(View.VISIBLE); + } + LogUtil.i("onPageFinished", "onPageFinished" + url); + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + loadurl(view, "file:///android_asset/error/error.html"); + } + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + // ToastUtil.showToast("加载失败,请检查网络"); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl+ errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + loadurl(mWebView, url); + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) { + share();// 调用分享 + if("活动详情".equals(top_title.getText())) + { + needreportSome("share","","","肝胆活动"); + } + } else if (id == R.id.bt_add_pinglun) { + if (StringUtil.isEmpty(mEt_AddPL.getText().toString().trim())) { + ToastUtil.showMessage("输入内容"); + return; + } + getAddComment(); + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } else if (id == R.id.et_add_pinglun) { + showPopupWindow(v); + } + } + + public static final int GET_COMMENT_LIST_RESULT = 101; // 获取评论列表 + public static final int GET_ADD_COMMENT_RESULT = 102; // 添加评论 + public static final int GET_DELETE_COMMENT_RESULT = 103; // 删除评论 + + public static final int GET_HF_COMMENT_RESULT = 201; // 回复评论 + + private void getCommentList() { + Map param = new HashMap(); + param.put("uuid", bookUuid); + sendJsonPostParamtoNetSignMD5(Url.getCommentList, param, GET_COMMENT_LIST_RESULT, ctx + ); + } + + private int deletePosition = -1; + + public void getDeleteComment(int position) { + deletePosition = position; + Map param = new HashMap(); + param.put("uuid", datas.get(position).getComment_uuid()); + sendParamtoNet(Url.getDeleteComment, param, GET_DELETE_COMMENT_RESULT, + ctx, false); + } + + private void getAddComment() { + showLoadingProgress(); + Map param = new HashMap(); + param.put("article_uuid", bookUuid); + param.put("user_uuid", expertUuid); + param.put("type", 6 + ""); + param.put("comment", mEt_AddPL.getText().toString().replaceAll(" +","")); + sendJsonPostParamtoNetSignMD5(Url.getAddComment, param, GET_ADD_COMMENT_RESULT, + this); + } + + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_COMMENT_LIST_RESULT: + + isOk2 = true; + if (isOk1) { + dismissLoadingView(); + } + + // prossData(resultJson); + break; + case GET_ADD_COMMENT_RESULT: + mEt_AddPL.setText(""); + // prossData(resultJson); + break; + case GET_DELETE_COMMENT_RESULT: + BaseBean bean = GsonTools + .fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + if (deletePosition > -1) { + datas.remove(datas.get(deletePosition)); + mAdapter.getDatas(datas); + mAdapter.notifyDataSetChanged(); + } + if (datas.size() != 0) { + mTvPLNum.setText("评论(" + datas.size() + ")"); + } else { + mTvPLNum.setText("待评论"); + } + + } + break; + default: + break; + } + } + + /** + * 数据解析 + * + * @param result + */ + + public void prossData(String result) { + CommentBean data = GsonTools.fromGsonToBean(result, CommentBean.class); + if (data.data.list.size() > 0) { + mTvPLNum.setText("评论(" + data.data.list.size() + ")"); + datas.clear(); + datas.addAll(data.data.list); + if (mAdapter == null) { + + // mAdapter = new CommentAdapter(ctx, expertUuid); + // mAdapter.getDatas(data.data); + // mLv_PL.setAdapter(mAdapter); + } else { + mAdapter.getDatas(data.data.list); + mAdapter.notifyDataSetChanged(); + } + + } else { + mTvPLNum.setText("待评论"); + } + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = newsTitle; + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = ""; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(ct, shareTitle, summary, msgSinaContent, + imageUrl, shareUrl, bitmap); + // ShareUtils.mController.openShare(GDEventDetailActivity.this, false); + } + + public void UMengShare() { + String shareTitle = newsTitle;// 分享的标题 + String shareUrl = url;// 分享的链接 + String imgUrl = imageUrl;// 分享缩略图的地址 + String shareContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl;// 分享的简介 + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = ""; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(ct, shareTitle, summary, shareContent, imageUrl, + shareUrl, bitmap); + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + EditText mEt_add; + TextView mTV_Sure, mTV_Cancel; + + private void showPopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(GDEventDetailActivity.this) + .inflate(R.layout.popu_add_comment, null); + // 设置按钮的点击事件 + mTV_Sure = (TextView) contentView.findViewById(R.id.bt_pop_sure); + mTV_Cancel = (TextView) contentView.findViewById(R.id.bt_pop_cancel); + mEt_add = (EditText) contentView.findViewById(R.id.et_pop_add); + if (mEt_AddPL != null && !TextUtils.isEmpty(mEt_AddPL.getText())) { + mEt_add.setText(mEt_AddPL.getText().toString().trim()); + mEt_add.setSelection(mEt_AddPL.getText().length()); + } + final PopupWindow popupWindow = new PopupWindow(contentView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true); + mTV_Cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + } + }); + mTV_Sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mEt_AddPL != null) { + mEt_AddPL.setText(mEt_add.getText().toString()); + } + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + Log.i("mengdd", "onTouch : "); + + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + + // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 + // 我觉得这里是API的一个bug + // popupWindow.setBackgroundDrawable(getResources().getDrawable( + // R.drawable.popwrite)); + // 设置好参数之后再show + popupWindow.showAtLocation(view, 0, 0, 0); + + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + //释放资源 + if (mWebView != null) + mWebView.destroy(); + super.onDestroy(); + UMShareAPI.get(this).release(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailTopActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailTopActivity.java new file mode 100644 index 0000000..0208e59 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDEventDetailTopActivity.java @@ -0,0 +1,1187 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.BaseExpandableListAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.Child; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.bean.NewCommentBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +//import com.umeng.socialize.net.r; + +/** + * 功能说明: + * + * @author zhaodewei 肝胆活动 详情GDEventDetailActivity + */ + +public class GDEventDetailTopActivity extends BaseActivity implements + OnClickListener, OnCallBackFromNet { + + private String url; + + private X5WebView mWebView; + private WebSettings settings; + private String newsTitle = ""; + private String summary = ""; + private String imageUrl = ""; + private String expertUuid; + private String bookUuid = ""; + + private GDEventDetailTopActivity ctx; + private View view; + + private Intent intent; + + private TextView mTvPLNum; + + + private LinearLayout mLl_AddPL; + private EditText mEt_AddPL; + private Button mBt_AddPL; + List datas = new ArrayList(); + // private boolean isEvent = true; + private boolean isOk1 = false, isOk2 = false; + private int page = 1; + // 6肝胆活动 9 临床招募 + private int type = 6; + String getCommentUrl = Url.getNewCommentList; + private String mobile; + private Button mBt_call; + private CommentExpandableListView expandableListView; + private CommentExpandAdapter adapterex; + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + + } + + @Override + public View onCreateSuccessedView() { +// if (!UIUtils.isLogined()) +// { +// Intent intent = new Intent(); +// intent.setClass(this, LoginNewActivity.class); +// startActivity(intent); +// finish(); +// return null; +// } + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gd_detail_top); + expandableListView = view.findViewById(R.id.detail_page_lv_comment); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + ctx = this; + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + loadingView = view.findViewById(R.id.loading_view); + mBt_call = (Button) view.findViewById(R.id.bt_call_mobile); + mTvPLNum = (TextView) view.findViewById(R.id.tv_gd_detail_num); + + mLl_AddPL = (LinearLayout) view.findViewById(R.id.ll_pinglun); + + mEt_AddPL = (EditText) view.findViewById(R.id.et_add_pinglun); + mBt_AddPL = (Button) view.findViewById(R.id.bt_add_pinglun); + // 设置只有下拉刷新模式 + + mEt_AddPL.setOnClickListener(this); + mBt_AddPL.setOnClickListener(this); + mBt_call.setOnClickListener(this); + setitle1(); + showLoadingView(); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + bookUuid = getIntent().getStringExtra("uuid"); + url = getIntent().getStringExtra("url"); + newsTitle = getIntent().getStringExtra("newsTitle");// 新闻的标题 + summary = getIntent().getStringExtra("summary");// 新闻的摘要 + imageUrl = getIntent().getStringExtra("imageUrl");// 新闻的图的地址 +// if(StringUtil.isEmpty(bookUuid)&&StringUtil.isEmpty(url)&&StringUtil.isEmpty(newsTitle)&&StringUtil.isEmpty(imageUrl)&&StringUtil.isEmpty(summary)&&getIntent().getData()!=null) +// { +// bookUuid = getIntent().getData().getQueryParameter("uuid"); +// url =Url.urlHtml+getIntent().getData().getQueryParameter("path"); +// newsTitle = getIntent().getData().getQueryParameter("title"); +// summary = getIntent().getData().getQueryParameter("content"); +// imageUrl = Url.urlHtml+getIntent().getData().getQueryParameter("imgpath"); +// if("5".equals(getIntent().getData().getQueryParameter("types"))) +// { +// getIntent().setType("event"); +// } +// else if("10".equals(getIntent().getData().getQueryParameter("types"))) +// { +// getIntent().setType("linchaung"); +// } +// } + if (getIntent().getType().equals("event")) { + top_title.setText("活动详情"); + //getCommentUrl = Url.getNewCommentList; + type = 6; + } else { + mobile = getIntent().getStringExtra("mobile"); +// if(StringUtil.isEmpty(mobile)&&getIntent().getData()!=null) +// { +// mobile =getIntent().getData().getQueryParameter("mobile"); +// } + if (!StringUtil.isEmpty(mobile)) { + mBt_call.setVisibility(View.VISIBLE); + } + top_title.setText("招募详情"); + getCommentUrl = Url.getClinicalCommentList; + type = 9; + } + + dealNewsDetail(); + getCommentList(); + + } + + public void loadurl(final WebView view, final String url) { + // + // showProgressDialog(""); + view.loadUrl(url); + } + + private void dealNewsDetail() { + // mWebView.setInitialScale(25); + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); + settings = mWebView.getSettings(); + // 设置 缓存模式 + settings.setCacheMode(WebSettings.LOAD_DEFAULT); + // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); + // 开启 DOM storage API 功能 + settings.setDomStorageEnabled(true); + // 开启 database storage API 功能 + settings.setDatabaseEnabled(true); + + settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 + settings.setJavaScriptEnabled(true);// 启用javascript脚本 + settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 + String ua = settings.getUserAgentString(); + settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); + settings.setLoadWithOverviewMode(true); + settings.setUseWideViewPort(true); + settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); + settings.setSupportZoom(true); + settings.setBuiltInZoomControls(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + + + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub +// mWebView.evaluateJavascript("accessSource('" + "app" + "')", new ValueCallback() { +// @Override +// public void onReceiveValue(String value) { +// +// } +// }); + isOk1 = true; + if (isOk2) { + dismissLoadingView(); + } + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + loadurl(view, "file:///android_asset/error/error.html"); + } + + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + // ToastUtil.showToast("加载失败,请检查网络"); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + // view.loadDataWithBaseURL(null, "", "text/html", "utf-8", + // null); + // loadfailView.setVisibility(View.VISIBLE); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + // DisplayMetrics dm = new DisplayMetrics();//获取当前显示的界面大小 + // getWindowManager().getDefaultDisplay().getMetrics(dm); + // int width=dm.widthPixels; + // int height=dm.heightPixels;//获取当前界面的高度 + // LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) + // mWebView.getLayoutParams(); + // linearParams.height =mWebView.getContentHeight() ; + // mWebView.setLayoutParams(linearParams); + loadurl(mWebView, url); + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) { + share();// 调用分享 + if(getIntent().getType().equals("event")) + { + needreportSome("share",newsTitle,getIntent().getStringExtra("getTags")+"","肝胆活动"); + } + else + { + needreportSome("share",newsTitle,getIntent().getStringExtra("getTags")+"","临床招募"); + } + } else if (id == R.id.bt_add_pinglun) { + if (StringUtil.isEmpty(mEt_AddPL.getText().toString().trim())) { + ToastUtil.showMessage("输入内容"); + return; + } + getAddComment(); + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } else if (id == R.id.et_add_pinglun) { + showPopupWindow(v); + } else if (id == R.id.bt_call_mobile) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + toCall(); + } else { + EasyWindow.with(GDEventDetailTopActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_phone).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + toCall(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + toCall(); + } + } + } + + /** + * 拨打电话 + */ + ECAlertDialog buildAlert; + + private void toCall() { + String message = "确定拨打医生电话咨询招募详情?"; + buildAlert = ECAlertDialog.buildAlert(GDEventDetailTopActivity.this, + message, "取消", "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + try { + // TODO Auto-generated method stub + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_CALL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:" + mobile)); + startActivity(intent); + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + + } + + } + + }); + buildAlert.setTitle("确定拨打"); + buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + public static final int GET_COMMENT_LIST_RESULT = 101; // 获取评论列表 + public static final int GET_ADD_COMMENT_RESULT = 102; // 添加评论 + public static final int GET_DELETE_COMMENT_RESULT = 103; // 删除评论 + + public static final int GET_HF_COMMENT_RESULT = 201; // 回复评论 + + private void getCommentList() { + Map param = new HashMap(); + param.put("uuid", bookUuid); +// param.put("page", "1"); + sendJsonPostParamtoNetSignMD5(getCommentUrl, param, GET_COMMENT_LIST_RESULT, this + ); + } + + private int deletePosition = -1; + + public void getDeleteComment(String uid) { + + showLoadingProgress(); + Map param = new HashMap(); + param.put("uuid", uid); + sendParamtoNet(Url.getDeleteComment, param, GET_DELETE_COMMENT_RESULT, + ctx, false); + } + + private void getAddComment() { + page = 1; + showLoadingProgress(); + Map param = new HashMap(); + param.put("article_uuid", bookUuid); + param.put("user_uuid", expertUuid); + param.put("type", type + ""); + param.put("page", "1"); + param.put("comment", + mEt_AddPL.getText().toString().trim().replaceAll("
", "\n")); + sendJsonPostParamtoNetSignMD5(Url.getAddComment, param, GET_ADD_COMMENT_RESULT,this); + if(getIntent().getType().equals("event")) + { + needreportSome("comment",newsTitle,getIntent().getStringExtra("getTags")+"","肝胆活动"); + } + else + { + needreportSome("comment",newsTitle,getIntent().getStringExtra("getTags")+"","临床招募"); + } + + } + + private void getAddCommentReply(String uuid, String content) { + page = 1; + showLoadingProgress(); + Map param = new HashMap(); + param.put("article_uuid", bookUuid); +// param.put("user_uuid", expertUuid); + param.put("type", type + ""); + param.put("reply_uuid", uuid); + param.put("page", "1"); + param.put("comment", content.replaceAll(" +","")); + sendJsonPostParamtoNetSignMD5(Url.getAddCommentReply, param, GET_ADD_COMMENT_RESULT,this); + if(getIntent().getType().equals("event")) + { + needreportSome("comment",newsTitle,getIntent().getStringExtra("getTags")+"","肝胆活动"); + } + else + { + needreportSome("comment",newsTitle,getIntent().getStringExtra("getTags")+"","临床招募"); + } + } + + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_COMMENT_LIST_RESULT: + + isOk2 = true; + if (isOk1) { + dismissLoadingView(); + } + + prossData(resultJson); + if (totalcoment>0) { + //mTvPLNum.setText("评论" + "(" + totalcoment + ")"); + mTvPLNum.setText("评论"); + + } else { + + mTvPLNum.setText("待评论"); + + } + initExpandableListView(mList); + break; + case GET_ADD_COMMENT_RESULT: + mEt_AddPL.setText(""); + getCommentList(); + ToastUtil.showMessage("评论成功"); + + break; + case GET_DELETE_COMMENT_RESULT: + + dismissLoadingProgress(); + getCommentList(); + break; + default: + break; + } + } + + /** + * 数据解析 + * + * @param result + */ + private List mList = new ArrayList<>();// 评论数据的集合 + private int totalcoment=0; + public void prossData(String result) { + mList.clear(); + totalcoment=0; + JSONObject jo= null; + try { + jo = new JSONObject(result); + JSONArray jsonArray = jo.getJSONArray("data"); + if(jsonArray==null||jsonArray.length()<1) + { + } + else + { + totalcoment=jsonArray.length(); + for(int j=0;j0) + { + totalcoment+=jArr1.length(); + List childList=new ArrayList<>(); + for(int i=0;i commentList){ + expandableListView.setGroupIndicator(null); + //默认展开所有回复 + adapterex = new CommentExpandAdapter(this, commentList); + expandableListView.setAdapter(adapterex); + + for(int i = 0; i commentBeanList; + private List replyBeanList; + private Context context; + private int pageIndex = 1; + ECAlertDialog buildAlert; + private int delPos;// 删除评论的位置 + public CommentExpandAdapter(Context context, List commentBeanList) { + this.context = context; + this.commentBeanList = commentBeanList; + } + + @Override + public int getGroupCount() { + return commentBeanList.size(); + } + + @Override + public int getChildrenCount(int i) { + if(commentBeanList.get(i).getChildList() == null){ + return 0; + }else { + if(!commentBeanList.get(i).getExpanded()&&commentBeanList.get(i).getChildList().size()>3) + { + return 3; + } + else + { + return commentBeanList.get(i).getChildList().size()>0 ? commentBeanList.get(i).getChildList().size():0; + } + + } + + } + + @Override + public Object getGroup(int i) { + return commentBeanList.get(i); + } + + @Override + public Object getChild(int i, int i1) { + return commentBeanList.get(i).getChildList().get(i1); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(final int groupPosition, boolean isExpand, View convertView, ViewGroup viewGroup) { + final GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new_p, viewGroup, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + if(expertUuid.equals(commentBeanList.get(groupPosition).getUser_uuid())) + { + groupHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); + groupHolder.item_comment_hf.setVisibility(View.GONE); + } + else + { + groupHolder.iv_item_comment_delete.setVisibility(View.GONE); + groupHolder.item_comment_hf.setVisibility(View.VISIBLE); + } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(GDEventDetailTopActivity.this).load( + Url.urlHtml + commentBeanList.get(groupPosition).getPhoto()).apply(requestOptions).into(groupHolder.logo); + } + else + { + Glide.with(GDEventDetailTopActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into(groupHolder.logo); + } + +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getPhoto(), +// groupHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if("0".equals(commentBeanList.get(groupPosition).getUser_status())) + { + groupHolder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + } +// groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + groupHolder.tv_time.setText(commentBeanList.get(groupPosition).getCreate_date()); + groupHolder.tv_content.setText(commentBeanList.get(groupPosition).getContent()); + groupHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getComment_uuid(); + getDeleteComment(uid); + //mList.remove(groupPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + groupHolder.item_comment_hf.setOnClickListener(new OnClickListener() { + + // 添加回复 + @Override + public void onClick(View v) { + if("0".equals(mList.get(groupPosition).getUser_status())) + { + ToastUtil.showMessage("该评论无法回复"); + return; + } + // TODO Auto-generated method stub + Intent intent = new Intent(GDEventDetailTopActivity.this, + SettingFeedbackActivity.class); + intent.setType("commentY"); + intent.putExtra("name", mList.get(groupPosition).getName()); + intent.putExtra("uuid", mList.get(groupPosition).getUser_uuid()); + intent.putExtra("content", mList.get(groupPosition).getContent()); + startActivityForResult(intent, + GET_HF_COMMENT_RESULT); + + } + }); + return convertView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean b, View convertView, ViewGroup viewGroup) { + final ChildHolder childHolder; + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new,viewGroup, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + } + else { + childHolder = (ChildHolder) convertView.getTag(); + } + if(childPosition==2&&commentBeanList.get(groupPosition).getChildList().size()>3&&!commentBeanList.get(groupPosition).getExpanded()) + { + childHolder.morer.setVisibility(View.VISIBLE); + childHolder.more.setText("— —展开更多回复"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.exp)); + } + else + { + if(commentBeanList.get(groupPosition).getExpanded()&&(childPosition==(commentBeanList.get(groupPosition).getChildList().size()-1))) + { + childHolder.more.setText("— —收起"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.coll)); + childHolder.morer.setVisibility(View.VISIBLE); + } + else + { + childHolder.morer.setVisibility(View.GONE); + } + } + + if(!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date())) + { + childHolder.tv_time.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date()); + } + else + { + childHolder.tv_time.setText(""); + } + childHolder.morer.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if(!commentBeanList.get(groupPosition).getExpanded()) + { + commentBeanList.get(groupPosition).setExpanded(true); + + notifyDataSetChanged(); + + } + else + { + commentBeanList.get(groupPosition).setExpanded(false); + + notifyDataSetChanged(); + + } + } + }); +// if(expertUuid.equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_uuid())) +// { +// childHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); +// } +// else +// { +// childHolder.iv_item_comment_delete.setVisibility(View.GONE); +// } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto(), +// childHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(GDEventDetailTopActivity.this). + load( Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto()) + .apply(requestOptions).into(childHolder.logo); + + } + else + { + Glide.with(GDEventDetailTopActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into( childHolder.logo); + } + String replyUser = commentBeanList.get(groupPosition).getChildList().get(childPosition).getName(); +// if(!TextUtils.isEmpty(replyUser)){ +// childHolder.tv_name.setText(replyUser); +// }else { +// childHolder.tv_name.setText("无名"); +// } + if("0".equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_status())) + { + childHolder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + childHolder.tv_name.setText(replyUser); + } + delPos=childPosition; + if(!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent())) + { + childHolder.tv_content.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent()); + } + else + { + childHolder.tv_content.setText(""); + } + + childHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getChildList().get(childPosition).getComment_uuid(); + getDeleteComment(uid); + mList.get(groupPosition).getChildList().remove(childPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + return convertView; + } + + @Override + public boolean isChildSelectable(int i, int i1) { + return true; + } + + private class GroupHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete; + private TextView tv_name, tv_content, tv_time,item_comment_hf; + // private ImageView iv_like; + public GroupHolder(View view) { + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + item_comment_hf=view.findViewById(R.id.item_comment_hf); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + // iv_like = (ImageView) view.findViewById(R.id.comment_item_like); + } + } + + private class ChildHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete,more_i; + private TextView tv_name, tv_content, tv_time,more; + private RelativeLayout all_child,morer; + public ChildHolder(View view) { + all_child=view.findViewById(R.id.all_child); + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + more=view.findViewById(R.id.more); + morer=view.findViewById(R.id.morer); + more_i=view.findViewById(R.id.more_i); + } + } + + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDLiveBroadcastActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDLiveBroadcastActivity.java new file mode 100644 index 0000000..36d2cb8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GDLiveBroadcastActivity.java @@ -0,0 +1,236 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.GDLiveBroadcastAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GDLiveBroadcastBean; +import cn.shangyu.gdxzExpert.bean.GDLiveBroadcastBean.DataBean.ListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 肝胆直播界面 + * + * @author gaopeng + * + */ +public class GDLiveBroadcastActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + private View view; + private PullToRefreshListView mLv_event; + private TextView mLoad_empty; + private View ll_loading; + private String mUuid; + private int page = 1; + private int totalPage = 0; + private GDLiveBroadcastActivity mActivity; + public static final int GET_GANDAN_EVENT_RESULT = 101; + public List mList = new ArrayList(); + private GDLiveBroadcastAdapter mAdapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("现代肝病学院"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gd_live); + mActivity = this; + mLv_event = (PullToRefreshListView) view + .findViewById(R.id.pl_gandan_event); + ll_loading = view.findViewById(R.id.ll_loading); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + mUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + mLv_event.setMode(Mode.BOTH); + mLv_event.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getLiveResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getLiveResult(); + } + }); + // mLv_Visit.setOnItemClickListener(this); + // mLv_Visit. + mLv_event.getRefreshableView().setOnItemClickListener(this); + getLiveResult(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("现代肝病学院"); + } + + private void getLiveResult() { + // TODO Auto-generated method stub + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + mLv_event.setEmptyView(tv_load_fail); + return; + } + showProgressDialog(""); + Map param = new HashMap(); + param.put("page", page + ""); + sendParamtoNet(Url.getEducationOnlineList, param, + GET_GANDAN_EVENT_RESULT, mActivity, true); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + if (mList.get(position - 1).getStatus() == 3) { + Intent intent = new Intent(mActivity, VideoMoreActivity.class); + intent.putExtra("name", mList.get(position - 1).getTitle()); + startActivity(intent); + } else { + Intent intent = new Intent(mActivity, ZhiBoActivity.class); + intent.putExtra("url", mList.get(position - 1).getLiveurl()); + intent.putExtra("summary", mList.get(position - 1).getLiveimg()); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + intent.setType("gdlive"); + startActivity(intent); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + LogUtil.i("result = "+result); + GDLiveBroadcastBean bean = GsonTools.fromGsonToBean(result, + GDLiveBroadcastBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + // mLv_Visit.setEmptyView(mLoad_empty); + // 完成刷新 + loaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + mList.clear(); + // 数据为空 + + if (bean.data.getList() == null || bean.data.getList().size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("暂无肝病学院"); + } else { + mLoad_empty.setVisibility(View.GONE); + // int sssss = bean.data.list.size(); + mList.addAll(bean.data.getList()); + } + } else { + // 加载更多下一页时候e + mList.addAll(bean.data.getList()); + + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new GDLiveBroadcastAdapter(mList, mActivity); + mLv_event.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + + // 得到总页码数 + int totalPage = bean.totalPage; + // 由于暂时虚构没数据,所以加载更多也没数据 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mLv_event.setMode(Mode.PULL_FROM_START); + + } else { + mLv_event.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_event.onRefreshComplete(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_event.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanDoctorActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanDoctorActivity.java new file mode 100644 index 0000000..d98dbcf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanDoctorActivity.java @@ -0,0 +1,232 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.GanDanDoctorAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GandanDoctorListBean; +import cn.shangyu.gdxzExpert.bean.GandanDoctorListBean.DataBean.ListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GanDanDoctorActivity extends BaseActivity implements +OnCallBackFromNet{ + + private View view; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private PullToRefreshListView ptrLv; + private int page = 1; + private String title; + private GandanDoctorListBean gandanDoctorListBean; + private GanDanDoctorAdapter ganDanDoctorAdapter; + private List gandanDoctorList= new ArrayList<>(); + + + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(getResources().getString(R.string.gandanmingyi)); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gandan_doctor); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_hospital); + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时没有数据"); + title = getIntent().getStringExtra("title"); + + ptrLv.setMode(Mode.BOTH); + + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getDoctorList(page, "", "", ""); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getDoctorList(page, "", "", ""); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + getDoctorList(page, "", "", ""); + + ptrLv.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + + int ssss = ptrLv.getRefreshableView() + .getHeaderViewsCount(); + Intent intent = new Intent( + GanDanDoctorActivity.this, + ExpertDetailActivity.class); + intent.putExtra("uuid", gandanDoctorList.get(position - ssss).getExpert_uuid()); + if (!TextUtils.isEmpty(gandanDoctorList.get(position - ssss).getExpert_uuid())) { + startActivity(intent); + } + + } + }); + return view; + } + + + + + + protected void getDoctorList(int page, String areaid, String type, + String sort_type) { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("areaid", areaid); + param.put("type", type); + param.put("title", title); + param.put("sort", sort_type); +// param.put("is_start", 0); +// System.out.println(); + sendJsonPostParamtoNet(Url.ganDanExpertList, param, 01, this); + } + + + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("resultJson = "+resultJson); + gandanDoctorListBean = GsonTools.fromGsonToBean(resultJson, + GandanDoctorListBean.class); + ptrLv.onRefreshComplete(); + if (page == 1 && gandanDoctorListBean.getCode() != 1) { + ToastUtil.showMessage(gandanDoctorListBean.getMessage()); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + gandanDoctorList.clear(); + // 数据为空 + + if (gandanDoctorListBean == null + || gandanDoctorListBean.getData().getList() == null + || gandanDoctorListBean.getData().getList().size() == 0) { + ll_empty.setVisibility(View.VISIBLE); + onLoaded(); + setLastUpdateTime(); + } else { + gandanDoctorList.addAll(gandanDoctorListBean.getData().getList()); + } + } else { + // 加载更多下一页时候e + if (gandanDoctorListBean == null + || gandanDoctorListBean.getData().getList() == null + || gandanDoctorListBean.getData().getList().size() == 0) { + + ToastUtil.showMessage("没有更多数据了"); + return; + } + gandanDoctorList.addAll(gandanDoctorListBean.getData().getList()); + + } + + if (ganDanDoctorAdapter == null) { + ganDanDoctorAdapter = new GanDanDoctorAdapter(gandanDoctorList, GanDanDoctorActivity.this,true); + ptrLv.getRefreshableView().setAdapter(ganDanDoctorAdapter); + } else { + ganDanDoctorAdapter.getDatas(gandanDoctorList); + ganDanDoctorAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = gandanDoctorListBean.getData().getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + // TODO Auto-generated method stub + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + // TODO Auto-generated method stub + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanEventActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanEventActivity.java new file mode 100644 index 0000000..065f0b3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanEventActivity.java @@ -0,0 +1,241 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.GanDanAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.EventListBean; +import cn.shangyu.gdxzExpert.bean.EventListBean.EventBase; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ZHAODeWei 肝胆活动列表 + * + */ +public class GanDanEventActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + View view; + PullToRefreshListView mLv_event; + TextView mLoad_empty; + private View ll_loading; + private String mUuid; + private int page = 1; + private int totalPage = 0; + + GanDanEventActivity mActivity; + public static final int GET_GANDAN_EVENT_RESULT = 101; + GanDanAdapter mAdapter; + List mList = new ArrayList(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝胆活动"); + // top_right.setVisibility(View.VISIBLE); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gan_dan_event); + mActivity = this; + mLv_event = (PullToRefreshListView) view + .findViewById(R.id.pl_gandan_event); + ll_loading = view.findViewById(R.id.ll_loading); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + mUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + mLv_event.setMode(Mode.BOTH); + mLv_event.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getEventResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getEventResult(); + } + }); + // mLv_Visit.setOnItemClickListener(this); + // mLv_Visit. + mLv_event.getRefreshableView().setOnItemClickListener(this); + getEventResult(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("肝胆活动"); + } + + public void getEventResult() { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + mLv_event.setEmptyView(tv_load_fail); + return; + } + showProgressDialog(""); + Map param = new HashMap(); + param.put("page", page + ""); + sendParamtoNet(Url.getActivityList, param, GET_GANDAN_EVENT_RESULT, + mActivity, true); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, GDEventDetailTopActivity.class); + intent.putExtra("uuid", mList.get(position - 1).getUuid()); + intent.putExtra("url", Url.urlHtml + mList.get(position - 1).getPath()); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + intent.putExtra("summary", mList.get(position - 1).getContent()); + intent.putExtra("imageUrl", Url.urlHtml + + mList.get(position - 1).getImgpath()); + intent.setType("event"); + startActivity(intent); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + EventListBean bean = GsonTools.fromGsonToBean(result, + EventListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + // mLv_Visit.setEmptyView(mLoad_empty); + // 完成刷新 + loaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + mList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.list); + + if (bean.data.list == null || bean.data.list.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("暂无肝胆活动"); + } else { + mLoad_empty.setVisibility(View.GONE); + // int sssss = bean.data.list.size(); + mList.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + mList.addAll(bean.data.list); + + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new GanDanAdapter(mList, mActivity); + mLv_event.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + + // 得到总页码数 + int totalPage = bean.totalPage; + // 由于暂时虚构没数据,所以加载更多也没数据 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多肝胆活动了"); + } + mLv_event.setMode(Mode.PULL_FROM_START); + + } else { + mLv_event.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_event.onRefreshComplete(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_event.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_GANDAN_EVENT_RESULT: + processData(resultJson); + break; + + default: + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHospitalActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHospitalActivity.java new file mode 100644 index 0000000..f23a5d5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHospitalActivity.java @@ -0,0 +1,151 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.GanDanDepartmentFragment; +import cn.shangyu.gdxzExpert.fragment.GanDanDoctorFragment; +import cn.shangyu.gdxzExpert.fragment.GanDanHospitalFragment; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GanDanHospitalActivity extends BaseActivity implements + OnCheckedChangeListener { + private View view; + private GanDanHospitalActivity mActivity; + private RadioGroup rg_hospital; + private FragmentManager fm; + // 1 肝胆名院 2 肝胆名科 3 肝胆名医 + private int mType = 1; + private RadioButton mRb_hospital, mRb_doctor, mRb_depart; + private String intentType = "hospital"; + private GanDanDoctorFragment departmentFragment3; + private GanDanDepartmentFragment departmentFragment2; + private GanDanHospitalFragment hospitalFragment; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(getResources().getString(R.string.gandanmingyuan)); + top_right.setImageResource(R.drawable.search); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(ct, PublicSearchActivity.class); + intent.setType(intentType); + startActivity(intent); + } + }); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_hospital); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + rg_hospital = (RadioGroup) view.findViewById(R.id.rg_hospital); + mRb_hospital = (RadioButton) view.findViewById(R.id.tab_hospital); + mRb_doctor = (RadioButton) view.findViewById(R.id.tab_doctor); + mRb_depart = (RadioButton) view.findViewById(R.id.tab_department); + mActivity = this; + initLisenter(); + if (getIntent().getType() != null) { + if (getIntent().getType().equals("Hospital")) { + mRb_hospital.setChecked(true); + } else if (getIntent().getType().equals("Depart")) { + mRb_depart.setChecked(true); + }else if(getIntent().getType().equals("Doctor")){ + mRb_doctor.setChecked(true); + } + + } else { + showDoctor(); + } + + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("名医名科"); + } + + public void initLisenter() { + rg_hospital.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + // mDb_province, mDb_city, mDb_sort + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_hospital) { + showDoctor(); + } else if (checkedId == R.id.tab_department) { + showDepartment(); + } else if (checkedId == R.id.tab_doctor) { + showHospital(true); + } + } + + public void showHospital(boolean isRB) { + intentType = "hospital"; + top_title.setText(getResources().getString(R.string.gandanmingyuan)); + GanDanHospitalFragment hospitalFragment = new GanDanHospitalFragment(); + if (isRB) { + hospitalFragment.isRb = true; + } else { + hospitalFragment.isRb = false; + } + fm.beginTransaction() + .replace(R.id.frame_container, hospitalFragment, + "hospital_fragment").commitAllowingStateLoss(); + } + + public void showDepartment() { + intentType = "department"; + top_title.setText(getResources().getString(R.string.gandanmingke)); + GanDanDepartmentFragment departmentFragment2 = new GanDanDepartmentFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, departmentFragment2, + "department_fragment").commitAllowingStateLoss(); + } + + public void showDoctor() { + intentType = "doctor"; + top_title.setText(getResources().getString(R.string.gandanmingyi)); + GanDanDoctorFragment departmentFragment3 = new GanDanDoctorFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, departmentFragment3, + "doctor_fragment").commitAllowingStateLoss(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseActivity.java new file mode 100644 index 0000000..8fefe1d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseActivity.java @@ -0,0 +1,156 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.FrameLayout; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.HuodongFragment; +import cn.shangyu.gdxzExpert.fragment.HuodongFragment.OnHuodongRefreshListener; +import cn.shangyu.gdxzExpert.fragment.MyHuodongFragment; +import cn.shangyu.gdxzExpert.fragment.MyHuodongFragment.OnMyHuodongRefreshListener; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GanDanHouseActivity extends BaseActivity implements + OnCheckedChangeListener, OnHuodongRefreshListener, + OnMyHuodongRefreshListener { + private View view; + private GanDanHouseActivity mActivity; + private RadioGroup mRg_house; + private FrameLayout mFl_house; + FragmentManager fm; + public static final int GET_ADD_FOR_RESULT = 201; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("互动圈"); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.icon_contributing); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent in = new Intent(GanDanHouseActivity.this, + WriteTopicActivity.class); + GanDanHouseActivity.this.startActivityForResult(in, + GET_ADD_FOR_RESULT); + } + }); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gd_house); + mActivity = this; + initView(); + Huodong(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("互动圈"); + } + public void initView() { + mRg_house = (RadioGroup) view.findViewById(R.id.rg_house); + mFl_house = (FrameLayout) view.findViewById(R.id.fl_gd_huodong); + fm = getSupportFragmentManager(); + mRg_house.setOnCheckedChangeListener(this); + } + + public static final int GET_LIST_DATA_RESULT = 101; + + // public void getDataResult() { + // Map param = new HashMap(); + // param.put("page", page + ""); + // sendParamtoNet(Url.getInteractionList, param, GET_LIST_DATA_RESULT, + // mActivity, true); + // + // } + private void HtHuodong() { + MyHuodongFragment myFragment = new MyHuodongFragment(); + fm.beginTransaction() + .replace(R.id.fl_gd_huodong, myFragment, "MyHuodongFragment") + .commit(); + } + + private void Huodong() { + HuodongFragment ourFragment = new HuodongFragment(); + fm.beginTransaction() + .replace(R.id.fl_gd_huodong, ourFragment, "HuodongFragment") + .commit(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_ht) { + Huodong(); + } else if (checkedId == R.id.tab_rbn_myht) { + HtHuodong(); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == GET_ADD_FOR_RESULT) { + onHuodongRefresh(Url.getInteractionList); + onMyHuodongRefresh(Url.getInteractionListByExpertUuid); + } + } + + @Override + public void onHuodongRefresh(String url) { + // TODO Auto-generated method stub + HuodongFragment mFragment = (HuodongFragment) getSupportFragmentManager() + .findFragmentByTag("HuodongFragment"); + if (mFragment != null) { + mFragment.page = 1; + mFragment.getNewsList(url, true, false, 1); + } + + } + + @Override + public void onMyHuodongRefresh(String url) { + // TODO Auto-generated method stub + MyHuodongFragment mFragment = (MyHuodongFragment) getSupportFragmentManager() + .findFragmentByTag("MyHuodongFragment"); + if (mFragment != null) { + mFragment.page = 1; + mFragment.getNewsList(url, true, false, 1); + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseDetialActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseDetialActivity.java new file mode 100644 index 0000000..5d82209 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GanDanHouseDetialActivity.java @@ -0,0 +1,1263 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.Button; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.Child; +import cn.shangyu.gdxzExpert.bean.GanDanHouseDetialBean; +import cn.shangyu.gdxzExpert.bean.GanDanHouseDetialBean.DataBean; +import cn.shangyu.gdxzExpert.bean.HouseBean; +import cn.shangyu.gdxzExpert.bean.NewCommentBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyTextView; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +// gandan肝胆家园详情页面 +public class GanDanHouseDetialActivity extends AppCompatActivity implements + OnClickListener { + private String uuid; + private CustomProgressDialog pd; + private Button btn_add_com; + private List mList = new ArrayList<>();// 评论数据的集合 + //private PullToRefreshListView mLv_PL; + private RelativeLayout back; + private int ConmmentNum = -1; + private int totalcoment=0; + private CommentExpandableListView expandableListView; + private CommentExpandAdapter adapterex; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_house_detial); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + top_title = (TextView) findViewById(R.id.top_title); + top_title.setText("话题详情"); + back = (RelativeLayout) findViewById(R.id.top_back_layout); + back.setOnClickListener(this); + //mLv_PL = (PullToRefreshListView) findViewById(R.id.lv_house_com); + top_back = (ImageView) findViewById(R.id.top_back); + btn_add_com = (Button) findViewById(R.id.btn_add_com); + pd = new CustomProgressDialog(this, "请稍候"); + expandableListView = (CommentExpandableListView) findViewById(R.id.detail_page_lv_comment); + pd.show(); + greySpan = new ForegroundColorSpan(getResources().getColor( + R.color.darkGrey)); + redSpan = new ForegroundColorSpan(getResources().getColor(R.color.red)); + blackSpan = new ForegroundColorSpan(getResources().getColor( + R.color.black)); + tv_gd_house_num = findViewById(R.id.tv_gd_house_num); + + im_pic = findViewById(R.id.im_pic); + tv_case_name = findViewById(R.id.tv_case_name); + tv_gandan_comments = findViewById(R.id.tv_gandan_comments); + tv_comment = findViewById(R.id.tv_gandan_comment); + tv_tag_2 = findViewById(R.id.tv_tag_02); + tv_tag_1 = findViewById(R.id.tv_tag_01); + tv_tag_3 =findViewById(R.id.tv_tag_03); + + btn_add_com.setOnClickListener(this); + tv_case_date = findViewById(R.id.tv_case_date); + dis_img_01 = findViewById(R.id.dis_img_01); + dis_img_02 = findViewById(R.id.dis_img_02); + dis_img_03 = findViewById(R.id.dis_img_03); + ll_imgs = findViewById(R.id.ll_imgs); + ll_tags = findViewById(R.id.ll_tags); + top_back.setVisibility(View.VISIBLE); + top_back.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + finish(); + } + }); + + Intent in = getIntent(); + uuid = in.getStringExtra("uuid"); + beans = new ArrayList<>(); + getData(); + + } + /** + * 初始化评论和回复列表 + */ + private void initExpandableListView(final List commentList){ + expandableListView.setGroupIndicator(null); + //默认展开所有回复 + adapterex = new CommentExpandAdapter(this, commentList); + expandableListView.setAdapter(adapterex); + + for(int i = 0; i map = new HashMap<>(); + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.getNewCommentList,map,GET_COMMENT_LIST_RESULT); +// List parameters = new ArrayList(); +// BasicNameValuePair value01 = new BasicNameValuePair("uuid", +// uuid); +// BasicNameValuePair value02 = new BasicNameValuePair("page", +// page + ""); +// parameters.add(value01); +// parameters.add(value02); +// HttpResult httpResult = HttpHelper.post(Url.getCommentList, +// parameters);// 请求网络 +// String result = httpResult.getString().trim();// str为服务器返回的json串 +// processData(result); +// +// handler.sendEmptyMessage(GET_COMMENT_LIST_RESULT); + + }; + }.start(); + } + + /** + * 2018.6.14加密请求 + */ + public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType) { + param.put("user_uuid", SharePrefUtil.getString(UIUtils.getContext(), "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + LogUtils.e("user_uuid+version = " + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "," + UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = " + bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + LogUtil.i("params = " + params.toString()); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("sign", sign); + conn.setRequestProperty("Content-Length", String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); +// + Message message = new Message(); +// +// Bundle bundle = new Bundle(); +// bundle.putString("text1",result); + message.what = callType; + message.obj = new String(result); + Log.d("gdxzpyq","hhh "+result); + handler.sendMessage(message); + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }).start(); + } + + + + // 处理 + // 处理请求下来的数据 + private void processData(String result) { + mList.clear(); + totalcoment=0; + JSONObject jo= null; + try { + jo = new JSONObject(result); + JSONArray jsonArray = jo.getJSONArray("data"); + if(jsonArray==null||jsonArray.length()<1) + { + handler.sendEmptyMessage(DISABLED); + } + else + { + totalcoment=jsonArray.length(); + for(int j=0;j0) + { + totalcoment+=jArr1.length(); + List childList=new ArrayList<>(); + for(int i=0;i beans; + public ImageView im_pic; + + // 详情所需要的item + public TextView tv_case_name, tv_case_date, tv_comment, + tv_gandan_comments, tv_tag_1, tv_tag_2, tv_tag_3; + public LinearLayout ll_imgs, ll_tags; + public ImageView dis_img_01, dis_img_02, dis_img_03; + private int newCount; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case 301: + Gson gson = new Gson(); + GanDanHouseDetialBean data = gson.fromJson((String) msg.obj, + GanDanHouseDetialBean.class); + if("36000".equals(data.getCode())) + { + ECAlertDialog dilaog2 = ECAlertDialog.buildAlert(GanDanHouseDetialActivity.this, + data.getMessage(), "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dialog.dismiss(); + finish(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + return; + + } + datass = data.getData(); + if (datass != null) { + pd.dismiss(); + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } else { + ToastUtil.showMessage("数据异常"); + GanDanHouseDetialActivity.this.finish(); + } + break; + + case DISABLED: + + break; + case BOTH_RESULT: + + break; + case PULL_FROM_STAR_RESULT: + + break; + case GET_DATA_SUCCESS: + setData(); + getCommentList(); + break; + case GET_COMMENT_LIST_RESULT:// 获取评论信息 + + processData((String) msg.obj); + + + if (totalcoment>0) { + //tv_gd_house_num.setText("评论" + "(" + totalcoment + ")"); + tv_gd_house_num.setText("评论"); + + } else { + + tv_gd_house_num.setText("待评论"); + + } + + initExpandableListView(mList); + pd.dismiss(); + break; + case GET_DELETE_COMMENT_RESULT:// 获取删除之后的评论信息 + + if (pd.isShowing()) { + pd.cancel(); + } + getCommentList(); + + + break; + + case GET_ADD_COMMENT_RESULT:// 添加信息 + + getCommentList(); +// + ToastUtil.showMessage("评论成功"); + + break; + + default: + break; + } + } + + // 设置数据 + private void setData() { + // TODO Auto-generated method stub + + // 加载头像 + if (!TextUtils.isEmpty(datass.getPatient_photo())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPatient_photo(), + im_pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + + // 内容 + tv_gandan_comments.setText(datass.getContent()); + // // 评论数量 + if (datass.getCommentnum() == 0) { + tv_comment.setText("0"); + } else { + tv_comment.setText(datass.getCommentnum() + ""); + } + // // 标签 + if (!TextUtils.isEmpty(datass.getTags())) { + String[] stringArr = datass.getTags().split(","); + + if (stringArr.length == 1) { + tv_tag_1.setVisibility(View.VISIBLE); + tv_tag_1.setText(stringArr[0]); + // tag1 = tv_tag_1.getText().toString(); + tv_tag_2.setVisibility(View.GONE); + tv_tag_3.setVisibility(View.GONE); + } else if (stringArr.length == 2) { + tv_tag_1.setVisibility(View.VISIBLE); + tv_tag_1.setText(stringArr[0]); + tv_tag_2.setVisibility(View.VISIBLE); + tv_tag_2.setText(stringArr[1]); + tv_tag_3.setVisibility(View.GONE); + // tag1 = tv_tag_1.getText().toString(); + // tag2 = tv_tag_2.getText().toString(); + + } else if (stringArr.length == 3) { + tv_tag_1.setVisibility(View.VISIBLE); + tv_tag_1.setText(stringArr[0]); + tv_tag_2.setVisibility(View.VISIBLE); + tv_tag_2.setText(stringArr[1]); + tv_tag_3.setVisibility(View.VISIBLE); + tv_tag_3.setText(stringArr[2]); + // tag1 = tv_tag_1.getText().toString(); + // tag2 = tv_tag_2.getText().toString(); + // tag3 = tv_tag_3.getText().toString(); + } + } else { + tv_tag_1.setVisibility(View.GONE); + tv_tag_2.setVisibility(View.GONE); + tv_tag_3.setVisibility(View.GONE); + } + // tv_tag_1.setOnClickListener(new OnClickListener() { + // + // @Override + // public void onClick(View v) { + // // TODO Auto-generated method stub + // Intent in = new Intent(context, TopicAcitivty.class); + // in.putExtra("topic", tag1); + // StringUtil.TOPIC = tag1; + // context.startActivity(in); + // } + // }); + // tv_tag_2.setOnClickListener(new OnClickListener() { + // + // @Override + // public void onClick(View v) { + // // TODO Auto-generated method stub + // Intent in = new Intent(context, TopicAcitivty.class); + // in.putExtra("topic", tag2); + // StringUtil.TOPIC = tag2; + // context.startActivity(in); + // } + // }); + // tv_tag_3.setOnClickListener(new OnClickListener() { + // + // @Override + // public void onClick(View v) { + // // TODO Auto-generated method stub + // Intent in = new Intent(context, TopicAcitivty.class); + // in.putExtra("topic", tag3); + // StringUtil.TOPIC = tag3; + // context.startActivity(in); + // } + // }); + // + if (datass.getPhoto().size() == 0) { + ll_imgs.setVisibility(View.GONE); + } else { + + final ArrayList imageSource = new ArrayList<>(); + ll_imgs.setVisibility(View.VISIBLE); + if (datass.getPhoto().size() == 1) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPhoto().get(0), + dis_img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + + } else if (datass.getPhoto().size() == 2) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPhoto().get(0), + dis_img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPhoto().get(1), + dis_img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + + } else if (datass.getPhoto().size() == 3) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPhoto().get(0), + dis_img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPhoto().get(1), + dis_img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datass.getPhoto().get(2), + dis_img_03, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + // + imageSource.add(dis_img_01); + imageSource.add(dis_img_02); + imageSource.add(dis_img_03); + + for (int i = 0; i < imageSource.size(); i++) { + imageSource.get(i).setOnClickListener( + + new OnClickListener() { + @Override + public void onClick(View v) { + if (datass.getPhoto().size() > 0) { + ArrayList urls = new ArrayList(); + for (int i = 0; i < datass.getPhoto().size(); i++) { + urls.add(new ViewImageInfo(i, Url.urlHtml + + datass.getPhoto().get(i), + Url.urlHtml + + datass.getPhoto().get(i))); + } + + CCPAppManager + .startChattingImageViewAction( + GanDanHouseDetialActivity.this, + 0, urls); + // DiscussionFragment.isLookingImg = 1; + } + + } + + }); + } + + } + // + // // 名称 + tv_case_name.setText(datass.getPatient_name()); + // 日期 + tv_case_date.setText(datass.getCreate_date().substring(5, 16) + ""); + } + + }; + private DataBean datass; + + // 获取数据 + private void getData() { + + // TODO Auto-generated method stub + new Thread() { + public void run() { + Map map=new HashMap<>(); + map.put("uuid", uuid); + sendJsonPostParamtoNetSignMD5(Url.getInteractionDetail,map,301); +// try { +// List parameters = new ArrayList(); +// BasicNameValuePair value02 = new BasicNameValuePair("uuid", +// uuid); +// parameters.add(value02); +// HttpResult httpResult = HttpHelper.post( +// Url.getInteractionDetail, parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// // LogUtils.e("gandanhuoseDetial.........." + result); +// Gson gson = new Gson(); +// GanDanHouseDetialBean data = gson.fromJson(result, +// GanDanHouseDetialBean.class); +// datass = data.getData(); +// // GanDanHouseBean ganDanHouseBean = gson.fromJson(result, +// // GanDanHouseBean.class); +// // beans.addAll(ganDanHouseBean.getData().getList()); +// if (datass != null) { +// pd.dismiss(); +// handler.sendEmptyMessage(GET_DATA_SUCCESS); +// } else { +// ToastUtil.showMessage("数据异常"); +// GanDanHouseDetialActivity.this.finish(); +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// ToastUtil.showMessage("获取失败,请重试"); +// } + }; + }.start(); + + } + + private String reply; + + private void delCommentList(final String Comment_uuid) { + // TODO Auto-generated method stub + pd.show(); + new Thread() { + public void run() { + List parameters = new ArrayList(); + BasicNameValuePair value01 = new BasicNameValuePair("uuid", + Comment_uuid); + parameters.add(value01); + HttpResult httpResult = HttpHelper.post(Url.getDeleteComment, + parameters); + // 请求网络 + String result = httpResult.getString();// str为服务器返回的json串 + Log.d("gdxzpyq","delCommentList " +Comment_uuid + ""+ result); + // processData(result); + handler.sendEmptyMessage(GET_DELETE_COMMENT_RESULT); + }; + }.start(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 2) { + reply = data.getExtras().getString("reply"); + if (TextUtils.isEmpty(reply)) { + return; + } + addCommentList(reply); + // ToastUtil.showMessage(reply); + } else if (resultCode == 201) { + // ToastUtil.showMessage(data.getExtras().getString("reply")); + if (!TextUtils.isEmpty(data.getExtras().getString("content"))) { + reply_info = data.getExtras().getString("content").toString(); + replyCommentList(reply_info); + } + + } + } + + private String reply_info; + + private void replyCommentList(final String comment) { + + new Thread() { + public void run() { +// List parameters = new ArrayList(); +// +// BasicNameValuePair value01 = new BasicNameValuePair( +// "reply_uuid", replyUuid); +// BasicNameValuePair value02 = new BasicNameValuePair( +// "user_uuid", puuid); +// BasicNameValuePair value04 = new BasicNameValuePair( +// "article_uuid", uuid); +// BasicNameValuePair value06 = new BasicNameValuePair("page", "1"); +// BasicNameValuePair value05 = new BasicNameValuePair("type", "3"); +// +// BasicNameValuePair value03 = new BasicNameValuePair("comment", +// comment); +// parameters.add(value01); +// parameters.add(value02); +// parameters.add(value04); +// parameters.add(value05); +// parameters.add(value03); +// parameters.add(value06); +// HttpResult httpResult = HttpHelper.post(Url.getAddCommentReply, +// parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// // LogUtils.e("回复;;" + result); +// processData(result); +// // addCommentList(reply_info); +// handler.sendEmptyMessage(GET_ADD_COMMENT_RESULT); + Map param = new HashMap(); + param.put("article_uuid", uuid); + param.put("reply_uuid", replyUuid); + param.put("type", "3"); + param.put("page", "1"); + param.put("comment", comment.replaceAll(" +","")); + sendJsonPostParamtoNetSignMD5(Url.getAddCommentReply, param, GET_ADD_COMMENT_RESULT + ); + }; + }.start(); + } + + private void addCommentList(final String comment) { + + new Thread() { + public void run() { +// List parameters = new ArrayList(); +// +// BasicNameValuePair value01 = new BasicNameValuePair( +// "user_uuid", puuid); +// BasicNameValuePair value02 = new BasicNameValuePair( +// "article_uuid", uuid); +// BasicNameValuePair value03 = new BasicNameValuePair("comment", +// comment); +// BasicNameValuePair value05 = new BasicNameValuePair("page", "1"); +// BasicNameValuePair value04 = new BasicNameValuePair("type", "3"); +// parameters.add(value01); +// parameters.add(value02); +// parameters.add(value03); +// parameters.add(value04); +// parameters.add(value05); +// HttpResult httpResult = HttpHelper.post(Url.getAddComment, +// parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 + + Map param = new HashMap(); + param.put("article_uuid", uuid); + + param.put("type", "3"); + param.put("page", "1"); + param.put("comment", comment.replaceAll(" +","")); + sendJsonPostParamtoNetSignMD5(Url.getAddComment, param, GET_ADD_COMMENT_RESULT + ); +// handler.sendEmptyMessage(GET_ADD_COMMENT_RESULT); + }; + }.start(); + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.btn_add_com: + Intent intent = new Intent(GanDanHouseDetialActivity.this, + ReplyFeedbackActivity.class); + intent.setType("SS"); + startActivityForResult(intent, 111); + break; + case R.id.top_back_layout: + // Intent back = new Intent(); + // //把返回数据存入Intent + // back.putExtra("list_num", mList.size()+""); + // //设置返回数据 + // setResult(656, back); + finish(); + break; + + default: + break; + } + + } + + ForegroundColorSpan redSpan, greySpan, blackSpan; + String replyName; + private TextView tv_gd_house_num; + + class ViewHolder { + ImageView mIv_tou, mIv_delete; + TextView mTv_name, mTv_time, mTv_hf; + MyTextView mTv_content; + } + + private ECAlertDialog buildAlert; + + + + String replyUuid; + + @Override + public void finish() { + // TODO Auto-generated method stub + // this.setResult(201); + if (ConmmentNum != -1) { + SharePrefUtil.saveString(GanDanHouseDetialActivity.this, + "commentuuid", uuid); + SharePrefUtil.saveInt(GanDanHouseDetialActivity.this, "commentnum", + ConmmentNum); + } + super.finish(); + } + + public void changeApp(int num) { + ConmmentNum = num; + + } + public class CommentExpandAdapter extends BaseExpandableListAdapter { + private static final String TAG = "CommentExpandAdapter"; + private List commentBeanList; + private List replyBeanList; + private Context context; + private int pageIndex = 1; + ECAlertDialog buildAlert; + private int delPos;// 删除评论的位置 + public CommentExpandAdapter(Context context, List commentBeanList) { + this.context = context; + this.commentBeanList = commentBeanList; + } + + @Override + public int getGroupCount() { + return commentBeanList.size(); + } + + @Override + public int getChildrenCount(int i) { + if(commentBeanList.get(i).getChildList() == null){ + return 0; + }else { + if(!commentBeanList.get(i).getExpanded()&&commentBeanList.get(i).getChildList().size()>3) + { + return 3; + } + else + { + return commentBeanList.get(i).getChildList().size()>0 ? commentBeanList.get(i).getChildList().size():0; + } + + } + + } + + @Override + public Object getGroup(int i) { + return commentBeanList.get(i); + } + + @Override + public Object getChild(int i, int i1) { + return commentBeanList.get(i).getChildList().get(i1); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(final int groupPosition, boolean isExpand, View convertView, ViewGroup viewGroup) { + final GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new_p, viewGroup, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + if(puuid.equals(commentBeanList.get(groupPosition).getUser_uuid())) + { + groupHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); + groupHolder.item_comment_hf.setVisibility(View.GONE); + } + else + { + groupHolder.iv_item_comment_delete.setVisibility(View.GONE); + groupHolder.item_comment_hf.setVisibility(View.VISIBLE); + } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(GanDanHouseDetialActivity.this).load( + Url.urlHtml + commentBeanList.get(groupPosition).getPhoto()).apply(requestOptions).into(groupHolder.logo); + } + else + { + Glide.with(GanDanHouseDetialActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into(groupHolder.logo); + } + +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getPhoto(), +// groupHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if("0".equals(commentBeanList.get(groupPosition).getUser_status())) + { + groupHolder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + } +// groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + groupHolder.tv_time.setText(commentBeanList.get(groupPosition).getCreate_date()); + groupHolder.tv_content.setText(commentBeanList.get(groupPosition).getContent()); + groupHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getComment_uuid(); + delCommentList(uid); + //mList.remove(groupPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + groupHolder.item_comment_hf.setOnClickListener(new OnClickListener() { + + // 添加回复 + @Override + public void onClick(View v) { + if("0".equals(mList.get(groupPosition).getUser_status())) + { + ToastUtil.showMessage("该评论无法回复"); + return; + } + // TODO Auto-generated method stub + Intent intent = new Intent(GanDanHouseDetialActivity.this, + SettingFeedbackActivity.class); + intent.setType("comment"); + intent.putExtra("name", mList.get(groupPosition).getName()); + intent.putExtra("content", mList.get(groupPosition).getContent()); + replyName = mList.get(groupPosition).getName(); + replyUuid = mList.get(groupPosition).getUser_uuid(); + startActivityForResult(intent, 201); + } + }); + return convertView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean b, View convertView, ViewGroup viewGroup) { + final ChildHolder childHolder; + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new,viewGroup, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + } + else { + childHolder = (ChildHolder) convertView.getTag(); + } + if(childPosition==2&&commentBeanList.get(groupPosition).getChildList().size()>3&&!commentBeanList.get(groupPosition).getExpanded()) + { + childHolder.morer.setVisibility(View.VISIBLE); + childHolder.more.setText("— —展开更多回复"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.exp)); + } + else + { + if(commentBeanList.get(groupPosition).getExpanded()&&(childPosition==(commentBeanList.get(groupPosition).getChildList().size()-1))) + { + childHolder.more.setText("— —收起"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.coll)); + childHolder.morer.setVisibility(View.VISIBLE); + } + else + { + childHolder.morer.setVisibility(View.GONE); + } + } + childHolder.morer.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if(!commentBeanList.get(groupPosition).getExpanded()) + { + commentBeanList.get(groupPosition).setExpanded(true); + + notifyDataSetChanged(); + + } + else + { + commentBeanList.get(groupPosition).setExpanded(false); + + notifyDataSetChanged(); + + } + } + }); +// if(puuid.equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_uuid())) +// { +// childHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); +// } +// else +// { +// childHolder.iv_item_comment_delete.setVisibility(View.GONE); +// } + if(!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date())) + { + childHolder.tv_time.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date()); + } + else + { + childHolder.tv_time.setText(""); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto(), +// childHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(GanDanHouseDetialActivity.this). + load( Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto()) + .apply(requestOptions).into(childHolder.logo); + + } + else + { + Glide.with(GanDanHouseDetialActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into( childHolder.logo); + } + String replyUser = commentBeanList.get(groupPosition).getChildList().get(childPosition).getName(); + if("0".equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_status())) + { + childHolder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + childHolder.tv_name.setText(replyUser); + } +// if(!TextUtils.isEmpty(replyUser)){ +// childHolder.tv_name.setText(replyUser); +// }else { +// childHolder.tv_name.setText("无名"); +// } + delPos=childPosition; + childHolder.tv_content.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent()); +// childHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { +// +// @Override +// public void onClick(View v) { +// buildAlert = ECAlertDialog.buildAlert( +// context, "确定删除评论吗?", "取消", +// "确定", new DialogInterface.OnClickListener() { +// +// @Override +// public void onClick(DialogInterface dialog, +// int which) {// 取消 +// // TODO Auto-generated method stub +// buildAlert.dismiss(); +// } +// +// }, new DialogInterface.OnClickListener() {// 确定 +// +// @Override +// public void onClick(DialogInterface dialog, +// int which) { +// // TODO Auto-generated method stub +// buildAlert.dismiss(); +// String uid=mList.get(groupPosition).getChildList().get(childPosition).getComment_uuid(); +// delCommentList(uid); +// mList.get(groupPosition).getChildList().remove(childPosition); +// +// } +// }); +// buildAlert.setTitle("删除评论"); +// buildAlert.setCanceledOnTouchOutside(false); +// buildAlert.show(); +// } +// }); + return convertView; + } + + @Override + public boolean isChildSelectable(int i, int i1) { + return true; + } + + private class GroupHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete; + private TextView tv_name, tv_content, tv_time,item_comment_hf; + // private ImageView iv_like; + public GroupHolder(View view) { + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + item_comment_hf=view.findViewById(R.id.item_comment_hf); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + // iv_like = (ImageView) view.findViewById(R.id.comment_item_like); + } + } + + private class ChildHolder{ + private ImageView logo; + private ImageView more_i; + private TextView tv_name, tv_content, tv_time,more; + private RelativeLayout all_child,morer; + public ChildHolder(View view) { + all_child=view.findViewById(R.id.all_child); + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + //iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + more=view.findViewById(R.id.more); + morer=view.findViewById(R.id.morer); + more_i=view.findViewById(R.id.more_i); + } + } + + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanConsultActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanConsultActivity.java new file mode 100644 index 0000000..082014f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanConsultActivity.java @@ -0,0 +1,222 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.NewsAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.NewListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/10. + */ + +public class GandanConsultActivity extends BaseActivity implements View.OnClickListener,OnCallBackFromNet{ + private View view; + private LinearLayout dotLl; + private TextView topNewsTitle; + private LinearLayout mViewPagerLay; + private NewsAdapter newsAdapter; + private NewListBean bean; + private ArrayList titleList; + private ArrayList urlList; + private ArrayList dotList; + private RollViewPager mViewPager; + private String newsuuid; + private String agreenum; + private String readnum; + + @Override + public void setTitle() { + top_title.setText("肝胆新闻"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gandanconsul); + view.findViewById(R.id.rl_hudongquan).setOnClickListener(this); + view.findViewById(R.id.rl_keyan).setOnClickListener(this); + view.findViewById(R.id.rl_casesuions).setOnClickListener(this); + view.findViewById(R.id.rl_video).setOnClickListener(this); + view.findViewById(R.id.rl_lczhaomu).setOnClickListener(this); + view.findViewById(R.id.rl_huodong).setOnClickListener(this); + + + dotLl = (LinearLayout) view.findViewById(R.id.dots_ll); + topNewsTitle = (TextView) view.findViewById(R.id.top_news_title); + mViewPagerLay = (LinearLayout) view.findViewById(R.id.top_news_viewpager); + newsAdapter = new NewsAdapter(this); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + + mViewPagerLay.setLayoutParams(ivLp); + getNewsRollList(Url.getnewsRollNew, true, true, 0); + return view; + } + + + + //加载顶部新闻 + private void getNewsRollList(final String loadUrl, final boolean isrollRefresh, + final boolean isToprollNews, final int page) { + Map param = new HashMap<>(); + param.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(loadUrl, param, 1, this); + + + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_huodong) {//肝胆活动 + startActivity(new Intent(ct, GanDanEventActivity.class)); + } else if (id == R.id.rl_hudongquan) {//互动圈 + startActivity(new Intent(ct, GanDanHouseActivity.class)); + } else if (id == R.id.rl_keyan) {//科研项目 + startActivity(new Intent(ct, MyScientificResearchActivity.class)); + } else if (id == R.id.rl_casesuions) {//临床招募 + startActivity(new Intent(ct, LinChuangActivity.class)); + } else if (id == R.id.rl_video) {//肝胆新闻 + startActivity(new Intent(ct, NewsActivity.class)); + } else if (id == R.id.rl_lczhaomu) {//肝胆会议 + startActivity(new Intent(ct, GandanMeetingActivity.class)); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + bean = GsonTools.fromGsonToBean(resultJson, NewListBean.class);// 测试的NewsListBean + if (!StringUtil.isOneToCode(bean.code)) { + if (bean.data != null && bean.data.size() > 0) { + titleList = new ArrayList(); + urlList = new ArrayList(); + for (int i = 0; i < bean.data.size(); i++) { + titleList.add(bean.data.get(i).title);// 标题 + if (!TextUtils.isEmpty(bean.data.get(i).headImg)) { + urlList.add(Url.urlHtml + bean.data.get(i).headImg);// //封面图片 + } else { + urlList.add("");// + } + } + // 轮播图的点 + initDot(bean.data.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + String url = Url.urlHtml + + bean.data.get(position).path; + String title = bean.data.get(position).title; + String summary = bean.data.get(position).summary; + String headImg = bean.data.get(position).headImg; + newsuuid = bean.data.get(position).uuid; + agreenum = bean.data.get(position).agreenum; + readnum = bean.data.get(position).readnum; + intent.putExtra("url", url); + // intent.putExtra("title", title); + intent.putExtra("newssuuuid", newsuuid); + intent.putExtra("newssagreenum", agreenum); + intent.putExtra("newssreadnum", readnum); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsTitle", title); + intent.putExtra("summary", summary); + intent.putExtra("imageUrl", Url.urlHtml + + headImg); + intent.putExtra("flag", 4); + mActivity.startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // top标题 + mViewPager.setTitle(topNewsTitle, titleList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + } + + } + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanMeetingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanMeetingActivity.java new file mode 100644 index 0000000..f3771a3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GandanMeetingActivity.java @@ -0,0 +1,331 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.bertsir.zbar.QrConfig.SCANVIEW_TYPE_QRCODE; +import static cn.bertsir.zbar.QrConfig.SCREEN_PORTRAIT; +import static cn.bertsir.zbar.QrConfig.TYPE_QRCODE; +import static cn.bertsir.zbar.view.ScanLineView.style_line; +import static cn.shangyu.gdxzExpert.utils.Url.scanurl; + +import android.Manifest; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.Gravity; +import android.view.View; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.DataOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; + +import cn.bertsir.zbar.Qr.ScanResult; +import cn.bertsir.zbar.QrConfig; +import cn.bertsir.zbar.QrManager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.MeetingFragment; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/10. + */ + +public class GandanMeetingActivity extends BaseActivity{ + private View view; + @Override + public void setTitle() { + top_title.setText("肝胆会议"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("扫一扫"); +// top_right_text.setText("回放"); + top_right_text.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub +// Intent intent = new Intent(ct, HistoryActivity.class); +// intent.putExtra("title",getResources().getString(R.string.gandanhuifang)); +// startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// + if (PermissionsUtil.hasPermission(GandanMeetingActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + startToCapture(); + } else { + EasyWindow.with(GandanMeetingActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog).show(); + PermissionsUtil.requestPermission(GandanMeetingActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问读取短信的权限 + startToCapture(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读取短信的申请 + EasyWindow.cancelAll(); + } + + }, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + startToCapture(); + } + + } + }); + } + private void startToCapture() { + start(); +// startActivity(new Intent(MainActivity.this, CaptureActivity.class)); + } + String scanResult; + private void start() { + + QrConfig qrConfig = new QrConfig.Builder() + .setDesText("将二维码放入框内,自动扫码")//扫描框下文字 + .setShowDes(true)//是否显示扫描框下面文字 + .setShowLight(false)//显示手电筒按钮 + .setShowTitle(true)//显示Title + .setShowAlbum(false)//显示从相册选择按钮 + .setNeedCrop(false)//是否从相册选择后裁剪图片 +// .setCornerColor(Color.parseColor("#E42E30"))//设置扫描框颜色 + .setLineColor(Color.parseColor("#8D2316"))//设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM)//设置扫描线速度 + .setScanType(TYPE_QRCODE)//设置扫码类型(二维码,条形码,全部,自定义,默认为二维码) + .setScanViewType(SCANVIEW_TYPE_QRCODE)//设置扫描框类型(二维码还是条形码,默认为二维码) + .setCustombarcodeformat(QrConfig.BARCODE_PDF417)//此项只有在扫码类型为TYPE_CUSTOM时才有效 + .setPlaySound(true)//是否扫描成功后bi~的声音 +// .setDingPath(cb_show_custom_ding.isChecked() ? R.raw.test : R.raw.qrcode)//设置提示音(不设置为默认的Ding~) + .setIsOnlyCenter(false)//是否只识别框中内容(默认为全屏识别) +// .setTitleText(et_qr_title.getText().toString())//设置Tilte文字 + .setTitleBackgroudColor(Color.parseColor("#FFEFEFEF"))//设置状态栏颜色 + .setTitleTextColor(Color.parseColor("#8D2316"))//设置Title文字颜色 +// .setShowZoom(cb_show_zoom.isChecked())//是否开始滑块的缩放 +// .setAutoZoom(cb_auto_zoom.isChecked())//是否开启自动缩放(实验性功能,不建议使用) +// .setFingerZoom(cb_finger_zoom.isChecked())//是否开始双指缩放 +// .setDoubleEngine(cb_double_engine.isChecked())//是否开启双引擎识别(仅对识别二维码有效,并且开启后只识别框内功能将失效) + .setScreenOrientation(SCREEN_PORTRAIT)//设置屏幕方式 + .setOpenAlbumText("选择要识别的图片")//打开相册的文字 + .setLooperScan(false)//是否连续扫描二维码 +// .setLooperWaitTime(Integer.parseInt(et_loop_scan_time.getText().toString()) * 1000)//连续扫描间隔时间 + .setScanLineStyle(style_line)//扫描线样式 +// .setAutoLight(cb_auto_light.isChecked())//自动灯光 + .setShowVibrator(true)//是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { +// Log.e(TAG, "onScanSuccess: " + result); + + scanResult = result.getContent(); + try { + scanResult= AESUtil.Decrypt(scanResult, "deoep09_klodLdAo"); + new Thread(networkTask2).start(); + } catch (Exception e) { + e.printStackTrace(); + } + +// Toast.makeText(MainActivity.this, "内容:" + result.getContent() +// + " 类型:" + result.getType(), Toast.LENGTH_SHORT).show(); + } + }); + } + String finres; + String canfinres; + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + //String url = null; + + if(scanResult==null) + { + ToastUtil.showMessage("您扫描的不是有效的肝胆相照平台二维码"); +// finish(); + return; + } + + if (scanResult.contains("watchliveFrom")) { + + String uuid = SharePrefUtil.getString(GandanMeetingActivity.this, Constant.uuid, "123"); + String realname = SharePrefUtil.getString(GandanMeetingActivity.this, Constant.realName, "肝胆相照专家"); + String photo = SharePrefUtil.getString(GandanMeetingActivity.this, Constant.photo, "https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + if (StringUtil.isEmpty(photo) || "null".equals(photo)) { + photo = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + scanResult = scanResult.replaceAll("watchliveFrom:", ""); + try { + //url = urlpath +"?message=" + AESUtil.Encrypt("liveScanSuccess}" + result + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + finres=AESUtil.Encrypt("watchliveTo}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + canfinres=AESUtil.Encrypt("watchliveCancel}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + getTooken1(scanurl,AESUtil.Encrypt("liveScanSuccess}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo")); + } catch (Exception e) { + e.printStackTrace(); + } + + } + else if(scanResult.contains("watchvideoFrom")){ + String uuid = SharePrefUtil.getString(GandanMeetingActivity.this, Constant.uuid, "123"); + String realname = SharePrefUtil.getString(GandanMeetingActivity.this, Constant.realName, "肝胆相照专家"); + String photo = SharePrefUtil.getString(GandanMeetingActivity.this, Constant.photo, "https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + if (StringUtil.isEmpty(photo) || "null".equals(photo)) { + photo = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + scanResult = scanResult.replaceAll("watchvideoFrom:", ""); + try { + //url = urlpath + "?message=" +AESUtil.Encrypt("videoScanSuccess}" + result + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + finres=AESUtil.Encrypt("watchvideoTo}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + canfinres=AESUtil.Encrypt("watchvideoCancel}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + getTooken1(scanurl,AESUtil.Encrypt("videoScanSuccess}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo")); + } catch (Exception e) { + e.printStackTrace(); + } + + } + else { + ToastUtil.showMessage("您扫描的不是有效的肝胆相照平台二维码"); +// finish(); + + } + + + } + + + }; + + private void getTooken1(String urlStringUtil,String param) { + // TODO Auto-generated method stub + + + try { + String data="message="+ URLEncoder.encode(param,"UTF-8"); + URL url = new URL(urlStringUtil); + + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); + + conn.setConnectTimeout(5 * 1000); + DataOutputStream dos=new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(data); + dos.flush(); + dos.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Log.d("saoresult" , result); + Message message = new Message(); + message.what = 102; + message.obj = new String(result); + handler1.sendMessage(message); + }else { + Message message = new Message(); + message.what = 105; + handler1.sendMessage(message); + ToastUtil.showMessage("请求失败了,请稍后重试"); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showMessage("请求失败,请稍后重试"); + } + + } + public Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case 102: + + try { + + String str = (String) msg.obj; + //Log.d("saoresult" , str);//{"code":1,"message":"授权成功"} + JSONObject objs = new JSONObject(str); + int retcode = objs.optInt("code"); + +// String expertuuid = objs.getString("expertUuid"); +// String message = objs.getString("message"); + //ToastUtil.showMessage(message,1); + if(retcode==1) + { + + if(finres!=null&&canfinres!=null) + { + + Intent intent=new Intent(GandanMeetingActivity.this, ConfirmActivity.class); + intent.putExtra("scancode",finres); + intent.putExtra("canfinres",canfinres); + startActivity(intent); +// finish(); + } + } + else { + ToastUtil.showMessage("服务器异常!"); + } + + + } catch (JSONException e) { + e.printStackTrace(); + // ToastUtil.showMessage("服务器异常!"); + finish(); + } + break; + + + } + + } + + }; + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_news); + MeetingFragment loveFragment = new MeetingFragment(); + getSupportFragmentManager().beginTransaction().replace(R.id.frame_container, loveFragment, "love_fragment") + .commitAllowingStateLoss(); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GetInterrogationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GetInterrogationActivity.java new file mode 100644 index 0000000..a345be2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GetInterrogationActivity.java @@ -0,0 +1,563 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.ForegroundColorSpan; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.ImageIllnessAdapter; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GetInterrogationBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateGetAge; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SetListViewHeightBasedOnChildrenUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.ScollViewGridView; +import cn.shangyu.gdxzExpert.view.ScollViewListView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/7/29. + */ + + +public class GetInterrogationActivity extends BaseActivity implements OnCallBackFromNet,AdapterView.OnItemClickListener{ + private View view; + private String step1_uuid; + public static final int GETINTERROGATION = 200; + private PullToRefreshListView lv_list; + private View TopView; + private RelativeLayout rl_detail; + private TextView tv_name,tv_info,tv_drugtype,tv_time,tv_illnessdetail_1,tv_xing; + private ImageView tv_detail; + private LinearLayout ll_close; + private GridView gv_add_topic; + private Button bt_next; + private ScollViewListView lv_question; + private boolean flag_more = true; + private TextView tv_more; + private ImageView iv_down; + private LinearLayout ll_more; + private GetInterrogationBean getInterrogationBean; + private DoctorAnswerAdapter adapter; + private String uuid; + private QuestionListAdapter adapter1; + @Override + public void setTitle() { + top_title.setText("问题详情"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_getinterrogation_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_getinterrogation); + } + + step1_uuid = getIntent().getStringExtra("step1_uuid"); + AppManager.getAppManager().addActivity2(this); + uuid = SharePrefUtil.getString(GetInterrogationActivity.this, "uuid", ""); + initView(); + getData(); + return view; + } + + private void initView() { + lv_list =(PullToRefreshListView) view.findViewById(R.id.lv_list); + rl_detail = view.findViewById(R.id.rl_detail); + TextView tv_tebieshenming_huanzhe = view.findViewById(R.id.tv_tebieshenming_huanzhe); + //改变字体颜色 + //先构造SpannableString + SpannableString spanString = new SpannableString("特别声明:答案仅为医生个人经验或建议分享,不能视为诊断依据,如有诊疗需求,请务必前往正规医院就诊。"); + //再构造一个改变字体颜色的Span + ForegroundColorSpan span = new ForegroundColorSpan(Color.parseColor("#8D2316")); + //将这个Span应用于指定范围的字体 + spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + //设置给EditText显示出来 + tv_tebieshenming_huanzhe.setText(spanString); + if(CommonUtil.BigModule()) + { + TopView = UIUtils.inflate(R.layout.layout_illnessdetail_head_big); + } + else + { + TopView = UIUtils.inflate(R.layout.layout_illnessdetail_head); + } + tv_xing=TopView.findViewById(R.id.tv_xing); + tv_name = TopView.findViewById(R.id.tv_name); + tv_info = TopView.findViewById(R.id.tv_info); + tv_detail = TopView.findViewById(R.id.tv_detail); + tv_drugtype = TopView.findViewById(R.id.tv_drugtype); + tv_time = TopView.findViewById(R.id.tv_time); +// tv_illnessdetail = TopView.findViewById(R.id.tv_illnessdetail); + tv_illnessdetail_1 = TopView.findViewById(R.id.tv_illnessdetail_1); +// sc_illnessdetail = TopView.findViewById(R.id.sc_illnessdetail); + gv_add_topic = TopView.findViewById(R.id.gv_add_topic); + ll_more = TopView.findViewById(R.id.ll_more); + lv_question = TopView.findViewById(R.id.lv_question); + tv_more = TopView.findViewById(R.id.tv_more); + iv_down = TopView.findViewById(R.id.iv_down); + + bt_next = view.findViewById(R.id.bt_next); + + gv_add_topic.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + String imgs = getInterrogationBean.getData().getImgs(); + String[] split = imgs.split(","); + ArrayList urls = new ArrayList(); + for (int i = 0; i < split.length; i++) { + urls.add(new ViewImageInfo(i,Url.urlHtml+ split[i], + Url.urlHtml+ split[i])); + } + CCPAppManager.startChattingImageViewAction(GetInterrogationActivity.this, + 0, urls); + } + }); + bt_next.setOnClickListener(this); + tv_detail.setOnClickListener(this); + + + ll_more.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (flag_more){ + tv_more.setText("收起"); + flag_more = false; + iv_down.setImageResource(R.drawable.icon_up); + lv_question.setVisibility(View.VISIBLE); + }else { + flag_more = true; + tv_more.setText("查看更多"); + iv_down.setImageResource(R.drawable.icon_down); + lv_question.setVisibility(View.GONE); + } + } + }); + + } + + private void getData() { + Map map = new HashMap<>(); + map.put("uuid",step1_uuid); + sendJsonPostParamtoNetSignMD5(Url.getInterrogation,map,GETINTERROGATION,this); + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.bt_next: + if (getInterrogationBean!=null&&"200".equals(getInterrogationBean.getCode())){ + Intent intent = new Intent(GetInterrogationActivity.this,MyIdeaActivity.class); + for (int i = 0;i0){ + flag_more=true; + ll_more.setVisibility(View.VISIBLE); + adapter1 = new QuestionListAdapter(getInterrogationBean.getData().getSupplementList()); + lv_question.setAdapter(adapter1); + SetListViewHeightBasedOnChildrenUtil.SetListViewHeightBasedOnChildren(lv_question,adapter1); + } + String imgs = getInterrogationBean.getData().getImgs(); + if (StringUtil.isEmpty(imgs)){ + gv_add_topic.setVisibility(View.GONE); + }else { + String[] split = imgs.split(","); + if (split.length>4){ + ViewGroup.LayoutParams params = gv_add_topic.getLayoutParams(); + params.height = getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_stacked_tab_max_width); + gv_add_topic.setLayoutParams(params); + } + ImageIllnessAdapter imgadapter = new ImageIllnessAdapter(GetInterrogationActivity.this,imgs); + gv_add_topic.setAdapter(imgadapter); + } + + if (getInterrogationBean.getData().getAnswerList().size()==0){ + rl_detail.addView(TopView); + lv_list.setVisibility(View.GONE); + }else { + List answerList = getInterrogationBean.getData().getAnswerList(); + Iterator it=answerList.iterator(); + while (it.hasNext()) { + GetInterrogationBean.DataBean.AnswerListBean bean1=it.next(); + if("0".equals(bean1.getExamine_status())) + { + if(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean1.getExpert_uuid())){ + continue; + } + else + { + it.remove(); + } + } + } + for (int i = 0;i parent, View view, int position, long id) { +// int p = 0; +// if (lv_list.getRefreshableView().getHeaderViewsCount() > 0) { +// p = position - lv_list.getRefreshableView().getHeaderViewsCount(); +// } + + } + + class QuestionListAdapter extends BaseAdapter { + + private List supplementList1; + HashMap lmap = new HashMap(); + public QuestionListAdapter(List supplementList) { + this.supplementList1 = supplementList; + } + + @Override + public int getCount() { + return supplementList1.size(); + } + + @Override + public Object getItem(int position) { + return supplementList1.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (lmap.get(position) == null) { + holder = new ViewHolder(); + if(CommonUtil.BigModule()) + { + convertView = LayoutInflater.from(GetInterrogationActivity.this).inflate( + R.layout.item_illnesscomplete_big, null); + } + else + { + convertView = LayoutInflater.from(GetInterrogationActivity.this).inflate( + R.layout.item_illnesscomplete, null); + } + + holder.tv_add = convertView.findViewById(R.id.tv_add); + holder.tv_time = convertView.findViewById(R.id.tv_time); + holder.gv_add_topic = convertView.findViewById(R.id.gv_add_topic); + convertView.setTag(holder); + lmap.put(position,convertView); + } else { + convertView = lmap.get(position); + holder = (ViewHolder) convertView.getTag(); + } + holder.tv_time.setText(supplementList1.get(position).getCreate_date().split(" ")[0]); + String note = supplementList1.get(position).getDisease_describe(); + holder.tv_add.setText(note); + + if (!StringUtil.isEmpty(supplementList1.get(position).getImgs())){ + final String[] split = supplementList1.get(position).getImgs().split(","); + if (split.length>4){ + ViewGroup.LayoutParams params = holder.gv_add_topic.getLayoutParams(); + params.height = getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_stacked_tab_max_width); + holder.gv_add_topic.setLayoutParams(params); + } + holder.gv_add_topic.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + ArrayList urls = new ArrayList(); + for (int i = 0; i < split.length; i++) { + urls.add(new ViewImageInfo(i,Url.urlHtml+ split[i], + Url.urlHtml+ split[i])); + } + + CCPAppManager.startChattingImageViewAction(GetInterrogationActivity.this, + 0, urls); + } + }); + ImageIllnessAdapter imgadapter = new ImageIllnessAdapter(GetInterrogationActivity.this,supplementList1.get(position).getImgs()); + holder.gv_add_topic.setAdapter(imgadapter); + }else { + holder.gv_add_topic.setVisibility(View.GONE); + } + return convertView; + } + class ViewHolder { + ScollViewGridView gv_add_topic; + TextView tv_add,tv_time,tv_add1; + + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + AppManager.getAppManager().finishActivity2(this); + } + + class DoctorAnswerAdapter extends BaseAdapter { + + private List answerList; + + public DoctorAnswerAdapter(List answerList) { + this.answerList = answerList; + } + + @Override + public int getCount() { + return answerList.size(); + } + + @Override + public Object getItem(int position) { + return answerList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_doctoranswer_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_doctoranswer); + } + holder.iv_head = convertView.findViewById(R.id.civ_head); + holder.tv_name = convertView.findViewById(R.id.tv_name); + holder.huida = convertView.findViewById(R.id.huida); + holder.line2 = convertView.findViewById(R.id.line2); + holder.tv_zhicheng = convertView.findViewById(R.id.tv_zhicheng); + holder.tv_address = convertView.findViewById(R.id.tv_address); + holder.tv_time = convertView.findViewById(R.id.tv_time); + holder.tv_answer = convertView.findViewById(R.id.tv_answer); + + holder.gv_img = convertView.findViewById(R.id.gv_img); + holder.tv_manyi = convertView.findViewById(R.id.tv_manyi); + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + if (position>0){ + holder.huida.setVisibility(View.GONE); + }else { + holder.huida.setVisibility(View.VISIBLE); + } + ImageLoader.getInstance().displayImage(Url.urlHtml+answerList.get(position).getPhoto(),holder.iv_head); + if ("其他".equals(answerList.get(position).getName())){ + holder.tv_zhicheng.setVisibility(View.INVISIBLE); + holder.line2.setVisibility(View.INVISIBLE); + }else{ + holder.tv_zhicheng.setText(answerList.get(position).getName()); + holder.tv_zhicheng.setVisibility(View.VISIBLE); + holder.line2.setVisibility(View.VISIBLE); + } + if("0".equals(answerList.get(position).getExpert_status())) + { + holder.line2.setVisibility(View.GONE); + holder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else if (answerList.get(position).getRealname()!=null&&answerList.get(position).getRealname().length()>5){ + holder.tv_name.setText(answerList.get(position).getRealname().subSequence(0,5)+"..."); + holder.line2.setVisibility(View.VISIBLE); + }else + holder.tv_name.setText(answerList.get(position).getRealname()); + + + if ("其他医院".equals(answerList.get(position).getHospital_name())){ + holder.tv_address.setVisibility(View.INVISIBLE); + }else{ + holder.tv_address.setVisibility(View.VISIBLE); + holder.tv_address.setText(answerList.get(position).getHospital_name()); + } + + String note = answerList.get(position).getNote(); + + holder.tv_answer.setText(note); + + if (answerList.get(position).getSatisfied()==1){ + holder.tv_manyi.setVisibility(View.VISIBLE); + }else { + holder.tv_manyi.setVisibility(View.GONE); + } + holder.tv_time.setText(answerList.get(position).getCreate_date()); + if (!StringUtil.isEmpty(answerList.get(position).getImgs())){ + final String[] split = answerList.get(position).getImgs().split(","); + if (split.length>4){ + ViewGroup.LayoutParams params = holder.gv_img.getLayoutParams(); + params.height = getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_stacked_tab_max_width); + holder.gv_img.setLayoutParams(params); + } + holder.gv_img.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + ArrayList urls = new ArrayList(); + for (int i = 0; i < split.length; i++) { + urls.add(new ViewImageInfo(i,Url.urlHtml+ split[i], + Url.urlHtml+ split[i])); + } + + CCPAppManager.startChattingImageViewAction(GetInterrogationActivity.this, + position, urls); + } + }); + ImageIllnessAdapter imgadapter = new ImageIllnessAdapter(GetInterrogationActivity.this,answerList.get(position).getImgs()); + holder.gv_img.setAdapter(imgadapter); + }else { + holder.gv_img.setVisibility(View.GONE); + } + return convertView; + } + class ViewHolder { + ImageView iv_head; + TextView tv_name,tv_zhicheng,tv_address,tv_time,tv_answer,tv_manyi,huida; +// ScrollView sc_answer; + GridView gv_img; + CheckBox cb_manyi; + View line2; + Button cb_pingjia,cb_songhua; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatPatientActivity.java new file mode 100644 index 0000000..1441235 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatPatientActivity.java @@ -0,0 +1,289 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Dialog; +import android.content.Intent; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * 功能说明:我的患者-群发消息患者的页面 类名称:GroupPatientActivity 类描述:TODO 创建人:苏三元 时间:2015-9-23 + * 下午5:13:15 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class GroupChatPatientActivity extends BaseActivity { + + private TextView tv_invite_patient; + private EditText et_invite_content; + private static int REQUESTCODE_OK = 0; + private String content; + private String Patientuuid; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("群发消息"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_grou_patient); + RelativeLayout rl_invite = (RelativeLayout) view + .findViewById(R.id.rl_invite); + rl_invite.setOnClickListener(this); + // 邀请的人回显 + tv_invite_patient = (TextView) view + .findViewById(R.id.tv_invite_patient); + // 邀请内容,有后台获取 + et_invite_content = (EditText) view + .findViewById(R.id.et_invite_content); + // 设置输入框获得焦点hint提示消失 + et_invite_content + .setOnFocusChangeListener(onFocusAutoClearHintListener); + // 确定邀请的按钮 + Button bt_invite_ok = (Button) view.findViewById(R.id.bt_invite_ok); + bt_invite_ok.setOnClickListener(this); + // 字数限制 + et_invite_content.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (s.length() >= 3000) { + ToastUtil.showToast("消息字数过多(3000字内)"); + } + } + }); + return view; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.rl_invite: + // startActivityForResult(new Intent(ct, + // InviteContactActivity.class),REQUESTCODE_OK); + // 启动联系人选择界面,并返回数据 + delVisit(); + break; + case R.id.bt_invite_ok: + content = et_invite_content.getText().toString().trim(); + if (TextUtils.isEmpty(content)) { + ToastUtil.showToast("消息内容不能为空"); + return; + } + + if (TextUtils.isEmpty(Patientuuid)) { + ToastUtil.showToast("请选择患者!"); + return; + } + if (containsEmoji(content)) { + ToastUtil.showToast("消息发送失败"); + return; + } + sendInvitePatient(Url.getgroupPushSystem); + break; + + default: + break; + } + } + + public static boolean containsEmoji(String source) { + int len = source.length(); + boolean isEmoji = false; + for (int i = 0; i < len; i++) { + char hs = source.charAt(i); + if (0xd800 <= hs && hs <= 0xdbff) { + if (source.length() > 1) { + char ls = source.charAt(i + 1); + int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000; + if (0x1d000 <= uc && uc <= 0x1f77f) { + return true; + } + } + } else { + // non surrogate + if (0x2100 <= hs && hs <= 0x27ff && hs != 0x263b) { + return true; + } else if (0x2B05 <= hs && hs <= 0x2b07) { + return true; + } else if (0x2934 <= hs && hs <= 0x2935) { + return true; + } else if (0x3297 <= hs && hs <= 0x3299) { + return true; + } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d + || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c + || hs == 0x2b1b || hs == 0x2b50 || hs == 0x231a) { + return true; + } + if (!isEmoji && source.length() > 1 && i < source.length() - 1) { + char ls = source.charAt(i + 1); + if (ls == 0x20e3) { + return true; + } + } + } + } + return isEmoji; + } + + public void delVisit() { + final ECListDialog dialog = new ECListDialog(ct, new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(ct, + GroupChatSelectPatientActivity.class); + startActivityForResult(intent, REQUESTCODE_OK); + dialog.dismiss(); + } else { + + Intent intent = new Intent(ct, + GroupSelectParentActivity.class); + startActivityForResult(intent, REQUESTCODE_OK); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(ct.getResources().getColor(R.color.top_title)); + dialog.show(); + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + */ + private void sendInvitePatient(final String loadUrl) { + showProgressDialog("发送中,请稍候..."); + // String myMobile = SharePrefUtil.getString(ct, Constant.mobile, ""); + String uuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("sendUuid", uuid);// 发送方uuid必填 + params.addBodyParameter("receiveUuid", Patientuuid);// 接收方手机号(多个以逗号分隔)必填 + params.addBodyParameter("type", "1");// 消息类型,1:文本消息,2:语音消息,3:视频消息,4:图片消息,5:位置消息,6:文件 + params.addBodyParameter("sendType", "2");// 发送方类型 1.患者 2.专家必填 + params.addBodyParameter("receiveType", "1");// 接收方类型 1.患者 2.专家 必填 + params.addBodyParameter("content", content); + LogUtil.i("=====" + loadUrl + "===p===" + uuid + "=content=" + content + + "=Patientuuid=" + Patientuuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + BaseBean bean = GsonTools.fromGsonToBean(info.result, + BaseBean.class); + if ("1".equals(bean.code)) { + closeProgressDialog(); + ToastUtil.showToast("发送成功"); + finish(); + } else { + ToastUtil.showToast(bean.message); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("发送失败,请稍候再试"); + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == REQUESTCODE_OK + && resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + return; + } + tv_invite_patient.setText(""); + Patientuuid = data.getStringExtra("uuid"); + // String mobile = data.getStringExtra("mobile"); + String name = data.getStringExtra("name"); + // 回显选择的人 + tv_invite_patient.setText(name); + } + + super.onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatSelectPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatSelectPatientActivity.java new file mode 100644 index 0000000..8146bc7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupChatSelectPatientActivity.java @@ -0,0 +1,593 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.FrameLayout.LayoutParams; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GroupChatSelectPatientActivity.PatientAdapter.ViewHolder; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的患者-群发消息-群发消息患者选择患者 + * + */ +public class GroupChatSelectPatientActivity extends BaseActivity implements + OnItemClickListener { + + public static int RESULTCODE_OK = 1; + private ListView lv_patient; + private TextView load_empty; + private int checkNum = 0;// 记录选中的条目数量 + private ArrayList list; + private String mobile = ""; + private String name = ""; + private String Patientuuid = ""; + private CheckBox bt_all_list; + private PatientAdapter patientAdapter; + private EditText mEdittext; + private ArrayList list1 = new ArrayList<>();//搜索结果集合 + private ArrayList list2 = new ArrayList<>();//选中结果集合 + private int sendgroup; + private int sureCount;//确定上显示的个数 + + // 用于保存勾选的联系人 + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("我的患者"); + top_right_text.setVisibility(View.VISIBLE); + // top_right_text.setBackgroundResource(R.drawable.btn_style_brown); + // String actionBtn = getString(R.string.radar_ok_count, + // getString(R.string.dialog_ok_button) , 0); + // top_right_text.setText(actionBtn); + // top_right_text.setTextColor(0xffffff); + top_right_text.setTextColor(GroupChatSelectPatientActivity.this + .getResources().getColor(R.color.white)); + top_right_text.setTextSize(14); + top_right_text.setBackgroundResource(R.drawable.btn_style_brown); + LayoutParams paras = (LayoutParams) top_right_text + .getLayoutParams(); + paras.setMargins(0, 0, dip2px(GroupChatSelectPatientActivity.this, 10), + 0); + paras.height = dip2px(GroupChatSelectPatientActivity.this, 30); + top_right_text.setLayoutParams(paras); + + onContactClick(checkNum); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + // 设置联系人选择情况,动态变化选择的个数 + public void onContactClick(int count) { + sureCount = count; + top_right_text.setEnabled(count > 0 ? true : false); + top_right_text.setText(getString(R.string.radar_ok_count, + getString(R.string.dialog_ok_button), count)); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_patient_contact_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_patient_contact); + } + + lv_patient = (ListView) view.findViewById(R.id.lv_patient_list); + mEdittext = (EditText) view.findViewById(R.id.search); + lv_patient.setOnItemClickListener(this); + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + // 全选全不选 + bt_all_list = (CheckBox) view.findViewById(R.id.bt_all_list); + TextView mEmptyView = (TextView) view + .findViewById(R.id.load_empty); + mEmptyView.setText("暂无搜索结果"); + lv_patient.setEmptyView(mEmptyView); + ImageView iv_search = view.findViewById(R.id.iv_search); + iv_search.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + String input=mEdittext.getText().toString().trim(); + if (!TextUtils.isEmpty(input)) { + list1.clear(); + if(list!=null) + { + for (int i = 0; i < list.size(); i++) { + String realName = list.get(i).getRealName(); + String nickname = list.get(i).getNickName(); + String mobile = list.get(i).getMobile(); + if (!StringUtil.isEmpty(realName)&&realName.contains(input)) { + list1.add(list.get(i)); + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(input)){ + list1.add(list.get(i)); + }else if (!StringUtil.isEmpty(mobile)&&mobile.contains(input)){ + list1.add(list.get(i)); + } + } + } + + } else { + list1.clear(); + list1.addAll(list); + } + if (patientAdapter == null) { + new PatientAdapter(ct, list1); + lv_patient.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + hideKeyboard(mEdittext); + } + }); + bt_all_list.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (bt_all_list.isChecked()) { + // 全选 + bt_all_list.setText("全不选"); + // bt_all_list.setTextColor(getResources().getColor(R.color.text_color)); + bt_all_list.setBackgroundResource(R.drawable.btn); + if(CommonUtil.BigModule()) + { + bt_all_list.setText("取消全选"); + } + selectAllContacts(); + } else { + // 全不选 + bt_all_list.setText("全选"); + // bt_all_list.setTextColor(getResources().getColor(R.color.white)); + // bt_all_list.setBackgroundResource(R.color.top_title); + bt_all_list.setBackgroundResource(R.drawable.btn); + invertSelection(); + } + } + }); + + mEdittext.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEARCH){ + String input=mEdittext.getText().toString().trim(); + if (!TextUtils.isEmpty(input)) { + list1.clear(); + for (int i = 0; i < list.size(); i++) { + String realName = list.get(i).getRealName(); + String nickname = list.get(i).getNickName(); + String mobile = list.get(i).getMobile(); + if (!StringUtil.isEmpty(realName)&&realName.contains(input)) { + list1.add(list.get(i)); + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(input)){ + list1.add(list.get(i)); + }else if (!StringUtil.isEmpty(mobile)&&mobile.contains(input)){ + list1.add(list.get(i)); + } + } + } else { + list1.clear(); + list1.addAll(list); + } + if (patientAdapter == null) { + new PatientAdapter(ct, list1); + lv_patient.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + hideKeyboard(mEdittext); + + return true; + } + + return false; + } + }); + + initData(); + initIntent(); + return view; + } + + private void initIntent() { + Intent intent = getIntent(); + sendgroup = intent.getIntExtra("sendgroup",0); + } + + /** + * 隐藏软键盘 + * + * @param :上下文环境,一般为Activity实例 + * @param view :一般为EditText + */ + public static void hideKeyboard(View view) { + InputMethodManager manager = (InputMethodManager) view.getContext() + .getSystemService(Context.INPUT_METHOD_SERVICE); + manager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + private void initData() { + // TODO Auto-generated method stub + showProgressDialog("正在加载"); + // 从患者数据库里取出患者列表 + list = PatientSqlManager.getPatientInfoList(Constant.typePatient); + if (list != null) { + // 数据为空 + if (list.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + } else { + /* + * for (int i = 0; i < list.size(); i++) { + * LogUtil.i("数据库取出uuid==" + * +list.get(i).getUuid()+"name=="+list.get + * (i).getRealName()+"photo=="+list.get(i).getPhoto()); } + */ + load_empty.setVisibility(View.GONE); + list1.addAll(list); + // 设置适配器 + // ***********************注意,这个adapter要抽出全局变量************************* + patientAdapter = new PatientAdapter(ct, list1); + // 初始化isSelected的数据 ,让所有都设置为未选中 +// for (int i = 0; i < list.size(); i++) { +// PatientAdapter.getIsSelected().put(i, false); +// } + lv_patient.setAdapter(patientAdapter); + } + } else { + load_empty.setVisibility(View.VISIBLE); + } + closeProgressDialog(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text:// 提交 + submitOK(); + break; + // case R.id.bt_all_list: + // break; + default: + break; + } + } + + /** + * 提交选中的患者 submitOK + * + * void + */ + private void submitOK() { + // TODO Auto-generated method stub +// if (list == null && list.size() == 0) { +// return; +// } +// for (int i = 0; i < list.size(); i++) { +// // 选中情况 +// if (PatientAdapter.getIsSelected().get(i)) { +// String uuid = list.get(i).getUuid(); +// // 要过滤出真正的uuid +// if (uuid.contains("#")) { +// uuid = uuid.split("#")[1]; +// } +// Patientuuid += uuid + ","; +// mobile += list.get(i).getMobile() + ","; +// name += list.get(i).getRealName() + ","; +// } +// +// } + + if (list2 == null && list2.size() == 0) { + return; + } + if (sureCount>200){ + ToastUtil.showMessage("群发人数不能超过200人"); + return; + } +// if (sureCount>100){ +// ToastUtil.showMessage("群发人数不能超过100人"); +// return; +// } + for (int i = 0; i < list2.size(); i++) { + // 选中情况 + String uuid = list2.get(i).getUuid(); + // 要过滤出真正的uuid + if (uuid.contains("#")) { + uuid = uuid.split("#")[1]; + } + Patientuuid += uuid + ","; + mobile += list2.get(i).getMobile() + ","; + String nickName = list2.get(i).getNickName(); + if(!StringUtil.isEmpty(nickName)){ + name += nickName+ ","; + }else { + name += list2.get(i).getRealName() + ","; + } + + + } + // 传递数据 + Intent intent = getIntent(); + intent.putExtra("uuid", Patientuuid); + intent.putExtra("mobile", mobile); + intent.putExtra("name", name); + LogUtil.i("群发uuid=" + Patientuuid + "=mobile=" + mobile); + setResult(RESULTCODE_OK, intent); + finish(); + } + + /** + * 患者列表适配器 + */ + public class PatientAdapter extends BaseAdapter { + private Context context; + private List PatientList; + // 用来控制CheckBox的选中状况 +// private static HashMap isSelected; + + public PatientAdapter(Context context, ArrayList list) { + this.context = context; + this.PatientList = list; +// isSelected = new HashMap(); + // 初始化数据 +// initDate(); + } + + // 初始化isSelected的数据 ,让所有都设置为未选中 +// private void initDate() { +// for (int i = 0; i < PatientList.size(); i++) { +// getIsSelected().put(i, false); +// } +// } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, R.layout.item_patient_list_big1, + null); + } + else + { + convertView = View.inflate(context, R.layout.item_patient_list, + null); + } + + mHolder = new ViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_patient_touxiang);// 头像 + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name);// 姓名 + mHolder.cbSelect = (CheckBox) convertView + .findViewById(R.id.cb_select);// 选择框 + mHolder.cbSelect.setVisibility(View.VISIBLE); + + convertView.setTag(mHolder); + } else { + mHolder = (ViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientModel p = PatientList.get(position); + // 姓名 + mHolder.tvTitle.setText(p.getRealName()); + if(CommonUtil.BigModule()) + { + // 头像 + if (!TextUtils.isEmpty(p.getPhoto()) && !"null".equals(p.getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.getPhoto(), + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + else + { + // 头像 + if (!TextUtils.isEmpty(p.getPhoto()) && !"null".equals(p.getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.getPhoto(), + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + + // 根据isSelected来设置checkbox的选中状况 +// mHolder.cbSelect.setChecked(getIsSelected().get(position)); + mHolder.cbSelect.setChecked(p.isSelect()); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return PatientList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + + +// public static HashMap getIsSelected() { +// return isSelected; +// } + +// public void setIsSelected(HashMap isSelected) { +// PatientAdapter.isSelected = isSelected; +// } + + public class ViewHolder { + + public CheckBox cbSelect; + public ImageView ivImage; + public TextView tvTitle; + } + + } + + // ***********************全选************************* + public void selectAllContacts() { + if (list1 != null) { + for (int i = 0; i < list1.size(); i++) { + list2.addAll(list1); + list1.get(i).setSelect(true); + Set middleLinkedHashSet = new LinkedHashSet(list2); + list2 = new ArrayList(middleLinkedHashSet); +// PatientAdapter.getIsSelected().put(i, true); + } + patientAdapter.notifyDataSetChanged(); + checkNum = list2.size(); + onContactClick(checkNum); + } + + } + + // ***********************非全选************************* + public void invertSelection() { + if (list1 != null) { + for (int i = 0; i < list1.size(); i++) { +// PatientAdapter.getIsSelected().put(i, false); + list1.get(i).setSelect(false); + for (int j= 0;j arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + ViewHolder holder = (ViewHolder) arg1 + .getTag(); + // ViewHolder holder = (ViewHolder) arg1.getTag(); + // 改变CheckBox的状态 + holder.cbSelect.toggle(); + // 将CheckBox的选中状况记录下来 +// PatientAdapter.getIsSelected().put(arg2, holder.cbSelect.isChecked()); + // 调整选定条目 +// if (holder.cbSelect.isChecked() == true) { +// checkNum++; +// } else { +// checkNum--; +// } +// onContactClick(checkNum); + PatientModel patientModel = list1.get(arg2); + if (holder.cbSelect.isChecked() == true) { + list2.add(list1.get(arg2)); + for (int j= 0;j0){ + for (int i = 0;i list_up; + private ArrayList list1_all; + private ArrayList list_bean_up; + private ArrayList list_bean_all; + + @Override + public void setTitle() { + top_title.setText("分组管理"); + top_right_text.setText("保存"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_groupmanage_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_groupmanage); + } + vg_group_true = view.findViewById(R.id.vg_group_true); + vg_group = view.findViewById(R.id.vg_group); + tv_addgroup = view.findViewById(R.id.tv_addgroup); + tv_addgroup.setOnClickListener(this); + mExpertUuid = SharePrefUtil.getString(this, Constant.uuid, ""); + patientUuid = getIntent().getStringExtra("patientUuid"); + fenzu = getIntent().getStringExtra("fenzu"); + list_up = new ArrayList<>(); + list1_all = new ArrayList<>(); + list_bean_up = new ArrayList<>(); + list_bean_all = new ArrayList<>(); + + if (!StringUtil.isEmpty(fenzu)){ +// String[] split = fenzu.split(","); + String[] split = fenzu.split(","); + for (int i = 0 ;i map = new HashMap<>(); + map.put("expert_uuid",mExpertUuid); + sendParamtoNet(Url.GroupList,map,GETGROUPLIST,this,false); + + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.top_right_text: + if (list_up.size()==0){ + ToastUtil.showMessage("请选择分组"); + return; + } + getUpdateGroup(); + break; + case R.id.tv_addgroup: + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_addgroup, null); + dialog = new AlertDialog.Builder(GroupManageActivity.this).create(); + et_groupname = (EditText) layout.findViewById(R.id.et_groupname); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + InputMethodManager imm = (InputMethodManager) dialog.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(dialog.getWindow().getDecorView().getWindowToken(), 0); // 解决键盘无法关闭问题 + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(this); + dialog.getWindow().getDecorView().setOnTouchListener(new View.OnTouchListener() { // dialog 外部监听 + @Override + public boolean onTouch(View v, MotionEvent event) { + + InputMethodManager imm = (InputMethodManager) dialog.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(dialog.getWindow().getDecorView().getWindowToken(), 0); // 解决键盘无法关闭问题 + + /* if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { + *//* InputMethodManager imm=(InputMethodManager)dialogs.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(dialogs.getWindow().getDecorView().getWindowToken(), 0);*//* + }*/ + return true; + } + }); + + + + break; + + case R.id.btn_sure: + + InputMethodManager imm = (InputMethodManager) dialog.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(dialog.getWindow().getDecorView().getWindowToken(), 0); // 解决键盘无法关闭问题 + mName = et_groupname.getText().toString().trim(); + if (StringUtil.isEmpty(mName)) { + ToastUtil.showMessage("请填写组名"); + return; + } else { + getGroupAndPatient(); + } + dialog.dismiss(); + break; + } + } + + public void getGroupAndPatient() { + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("expert_uuid", mExpertUuid); + param.put("name", mName); + param.put("patient_uuid", ""); + sendParamtoNet(Url.getAddGroup, param, GET_ADD_GROUP_RESULT, GroupManageActivity.this, + false); + } + + public void getUpdateGroup() { + showProgressDialog("正在加载"); + StringBuffer groupUuid = new StringBuffer(); + for (int i = 0;i=0;i--){ + if (name.equals(list_up.get(i))){ + list_up.remove(i); + } + } + if(CommonUtil.BigModule()) + { + vg_group_true.addBigItemViews(list_up,"TEVMODE",18); + } + else + { + vg_group_true.addItemViews(list_up,"TEVMODE"); + } +// vg_group_true.addItemViews(list_up,"TEVMODE"); + vg_group.chooseItemStyle(item); + }else { + if (list_up.size()==3){ + ToastUtil.showMessage("最多选择三个分组"); + return; + }else { + list_up.add(name); + if(CommonUtil.BigModule()) + { + vg_group_true.addBigItemViews(list_up,"TEVMODE",18); + } + else + { + vg_group_true.addItemViews(list_up,"TEVMODE"); + } +// vg_group_true.addItemViews(list_up,"TEVMODE"); + vg_group.chooseItemStyle(item); + } + } + + } + }); + break; + case GET_GROUP_UPDATE_RESULT://修改患者分组 + LogUtil.i("GET_ADD_GROUP_RESULT = "+resultJson); + if (resultJson!=null){ + BaseBean bean2 = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if("200".equals(bean2.code)){ + hideSoftKeyboard(); + finish(); + } + ToastUtil.showMessage(bean2.message); + } + + break; + case GET_ADD_GROUP_RESULT://添加分组 + LogUtil.i("GET_ADD_GROUP_RESULT = "+resultJson); + if (resultJson!=null){ + BaseBean bean1 = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean1.code)) { + if (bean1.code.equals("2")) { + ToastUtil.showToast("该分组已存在"); + } else { + ToastUtil.showToast(bean1.message); + } + return; + } else { + getGroupList(); + } + } + + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupSelectParentActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupSelectParentActivity.java new file mode 100644 index 0000000..cb9095f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupSelectParentActivity.java @@ -0,0 +1,615 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.Button; +import android.widget.ExpandableListView; +import android.widget.ExpandableListView.OnChildClickListener; +import android.widget.FrameLayout.LayoutParams; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GroupPatientList; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.Group; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.PatientData; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GroupSelectParentActivity extends BaseActivity implements + OnCallBackFromNet, OnChildClickListener { + private View view; + private ExpandableListView mElv_group; + private GroupSelectParentActivity mActivity; + private String uuid; + List> groups; + List group; + private TextView load_empty; + public static final int GET_GROUP_PATIENT_RESULT = 101; + GroupSelectAdapter mAdapter; + private String mobile = ""; + private String name = ""; + private String Patientuuid = ""; + public static int RESULTCODE_OK = 1; + private Button bt_all_list; + private int sendgroup; + private int sureCount;//确定上显示的个数 + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + top_right_text.setTextColor(GroupSelectParentActivity.this + .getResources().getColor(R.color.white)); + top_right_text.setTextSize(14); + top_right_text.setBackgroundResource(R.drawable.btn_style_brown); + LayoutParams paras = (LayoutParams) top_right_text + .getLayoutParams(); + paras.setMargins(0, 0, dip2px(GroupSelectParentActivity.this, 10), 0); + paras.height = dip2px(GroupSelectParentActivity.this, 30); + top_right_text.setLayoutParams(paras); + top_title.setText("患者分组"); + onContactClick(0); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_group_select_parent_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_group_select_parent); + } + mActivity = this; + mElv_group = (ExpandableListView) view + .findViewById(R.id.elv_group_patient); + load_empty = (TextView) view.findViewById(R.id.load_empty); + mElv_group.setOnChildClickListener(this); + bt_all_list = (Button) view.findViewById(R.id.bt_all_list); + bt_all_list.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // if (bt_all_list.isChecked()) { + // // 全选 + // bt_all_list.setBackgroundResource(R.drawable.btn); + // setAllTime(true); + // mAdapter.notifyDataSetChanged(); + // } else { + // // 全不选 + // bt_all_list.setBackgroundResource(R.drawable.btn); + setAllTime(false); + mAdapter.notifyDataSetChanged(); + // } + } + }); + uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + getGroupAndPatient(); + initIntent(); + return view; + } + + private void initIntent() { + Intent intent = getIntent(); + sendgroup = intent.getIntExtra("sendgroup",0); + } + + // 设置联系人选择情况,动态变化选择的个数 + public void onContactClick(int count) { + sureCount = count; + top_right_text.setEnabled(count > 0 ? true : false); + top_right_text.setText(getString(R.string.radar_ok_count, + getString(R.string.dialog_ok_button), count)); + } + + public void getGroupAndPatient() { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + mElv_group.setEmptyView(tv_load_fail); + return; + } + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + sendParamtoNet(Url.getGroupList, param, GET_GROUP_PATIENT_RESULT, + mActivity, true); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + submitOK(); + break; + + default: + break; + } + } + + /** + * 提交选中的患者 submitOK + * + * void + */ + private void submitOK() { + // TODO Auto-generated method stub + if (group == null && group.size() == 0) { + return; + } +// if (sureCount>100){ +// ToastUtil.showMessage("群发人数不能超过100人"); +// return; +// } + if (sureCount>200){ + ToastUtil.showMessage("群发人数不能超过200人"); + return; + } + for (int i = 0; i < group.size(); i++) { + if (group.get(i).select != 1) { + for (int j = 0; j < group.get(i).patientList.size(); j++) { + if (group.get(i).patientList.get(j)!=null&&group.get(i).patientList.get(j).select == 2) { + String uuid = group.get(i).patientList.get(j).getUuid(); + // 要过滤出真正的uuid + if (uuid.contains("#")) { + uuid = uuid.split("#")[1]; + } + Patientuuid += uuid + ","; + mobile += group.get(i).patientList.get(j).getMobile() + + ","; + if (!StringUtil.isEmpty(group.get(i).patientList.get(j).getNickname())){ + name += group.get(i).patientList.get(j).getNickname() + ","; + }else { + name += group.get(i).patientList.get(j).getRealName() + ","; + } + + } + } + } + } + // 传递数据 + Intent intent = getIntent(); + intent.putExtra("uuid", Patientuuid); + intent.putExtra("mobile", mobile); + intent.putExtra("name", name); + LogUtil.i("群发uuid=" + Patientuuid + "=mobile=" + mobile); + setResult(RESULTCODE_OK, intent); + finish(); + } + + public void setSureTime() { + int times = 0; + if (group == null && group.size() == 0) { + return; + } + for (int i = 0; i < group.size(); i++) { + if (group.get(i).select != 1) { + for (int j = 0; j < group.get(i).patientList.size(); j++) { + + if (group.get(i).patientList.get(j)!=null&&group.get(i).patientList.get(j).select == 2) { + times++; + } + } + } + } + onContactClick(times); + } + + public void setAllTime(boolean AllSelect) { + int times = 0; + if (group == null && group.size() == 0) { + return; + } + // if (AllSelect) { + // + // for (int i = 0; i < group.size(); i++) { + // group.get(i).select = 2; + // for (int j = 0; j < group.get(i).patientList.size(); j++) { + // group.get(i).patientList.get(j).select = 2; + // times++; + // + // } + // + // } + // } else { + for (int i = 0; i < group.size(); i++) { + group.get(i).select = 1; + for (int j = 0; j < group.get(i).patientList.size(); j++) { + group.get(i).patientList.get(j).select = 1; + } + + } + // } + onContactClick(times); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_GROUP_PATIENT_RESULT: + processData(resultJson); + break; + + default: + break; + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + closeProgressDialog(); + GroupPatientList bean = GsonTools.fromGsonToBean(result, + GroupPatientList.class); + SharePrefUtil.saveString(mActivity, Url.getGroupList, result); + if (bean == null || bean.data == null || bean.data.size() == 0) { + + load_empty.setVisibility(View.VISIBLE); + bt_all_list.setVisibility(View.GONE); + return; + + } else { + load_empty.setVisibility(View.GONE); + group = bean.data; + } + + if (mAdapter == null) { + mAdapter = new GroupSelectAdapter(group); + mElv_group.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + } + + class GroupSelectAdapter extends BaseExpandableListAdapter { + List group; + + public GroupSelectAdapter(List group) { + this.group = group; + } + + @Override + public int getGroupCount() { + // TODO Auto-generated method stub + for (int i = group.size()-1;i>=0;i--){ + if (group.get(i)==null){ + group.remove(i); + } + } + return group.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + // TODO Auto-generated method stub + for (int i = group.get(groupPosition).patientList.size()-1;i>=0;i--){ + if (group.get(groupPosition).patientList.get(i)==null){ + group.get(groupPosition).patientList.remove(i); + } + } + return group.get(groupPosition).patientList.size(); + } + + @Override + public Object getGroup(int groupPosition) { + // TODO Auto-generated method stub + return group.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + // TODO Auto-generated method stub + return group.get(groupPosition).patientList.get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + // TODO Auto-generated method stub + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + // TODO Auto-generated method stub + return childPosition; + } + + @Override + public boolean hasStableIds() { + // TODO Auto-generated method stub + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, + View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + GroupViewHolder gvh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_group_select_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_group_select); + } + + gvh = new GroupViewHolder(); + gvh.mGroupName = (TextView) convertView + .findViewById(R.id.tv_item_group_name); + gvh.mGroupCount = (TextView) convertView + .findViewById(R.id.tv_item_group_num); + gvh.mGroupChenge = (ImageView) convertView + .findViewById(R.id.tv_item_group_chenge); + gvh.mGroupJianTou = (ImageView) convertView + .findViewById(R.id.iv_group_jiantou); + convertView.setTag(gvh); + } else { + gvh = (GroupViewHolder) convertView.getTag(); + } + + gvh.mGroupName.setText(group.get(groupPosition).name); + gvh.mGroupCount.setText(group.get(groupPosition).patientNum); + if (group.get(groupPosition).patientNum != null + && group.get(groupPosition).patientNum.equals("0")) { + gvh.mGroupChenge.setVisibility(View.GONE); + } else { + gvh.mGroupChenge.setVisibility(View.VISIBLE); + } + if (group.get(groupPosition).select == 3) { + gvh.mGroupChenge.setImageResource(R.drawable.add_card); + } else if (group.get(groupPosition).select == 2) { + gvh.mGroupChenge.setImageResource(R.drawable.add_cb_sel); + } else { + gvh.mGroupChenge.setImageResource(R.drawable.add_card_no); + } + if (isExpanded) { + if(CommonUtil.BigModule()) + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupup_big); + } + else + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupup); + } + + } else { + if(CommonUtil.BigModule()) + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupright_big); + } + else + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupright); + } + } + gvh.mGroupChenge.setTag(groupPosition); + gvh.mGroupChenge.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Integer groupPosition = (Integer) v.getTag(); + if (group.get(groupPosition).select == 1 + || group.get(groupPosition).select == 3) { + group.get(groupPosition).select = 2; + for (int i = 0; i < group.get(groupPosition).patientList.size(); i++) { + if (group.get(groupPosition).patientList.get(i)!=null){ + group.get(groupPosition).patientList.get(i).select = 2; + } + + } + } else { + group.get(groupPosition).select = 1; + for (int i = 0; i < group.get(groupPosition).patientList.size(); i++) { + if (group.get(groupPosition).patientList.get(i)!=null){ + group.get(groupPosition).patientList.get(i).select = 1; + } + + } + } + setSureTime(); + mAdapter.notifyDataSetChanged(); + } + }); + // TODO Auto-generated method stub + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, + boolean isLastChild, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ChildViewHolder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_patient_list_select_big); + } + else + { + convertView = UIUtils + .inflate(R.layout.item_patient_list_seclect); + } + + mHolder = new ChildViewHolder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_touxiang); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name); + mHolder.tvnickname = (TextView) convertView + .findViewById(R.id.tv_nick_name); + mHolder.cbCheck = (ImageView) convertView + .findViewById(R.id.cb_select); + convertView.setTag(mHolder); + } else { + mHolder = (ChildViewHolder) convertView.getTag(); + } + // 给控件赋值. + PatientData p = group.get(groupPosition).patientList + .get(childPosition); + // 1.随访关系 2.包月服务关系 (type==2即为VIP)3.既是随访又是vip + if (p!=null){ + Drawable rightDrawable; + if (2 == p.type || 3 == p.type) { + rightDrawable = mActivity.getResources().getDrawable( + R.drawable.vip); + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + } else { + rightDrawable = null; + } + mHolder.tvTitle.setCompoundDrawables(null, null, rightDrawable, + null); + + if (p.select == 1) { + mHolder.cbCheck.setImageResource(R.drawable.add_card_no); + } else { + mHolder.cbCheck.setImageResource(R.drawable.add_cb_sel); + } + // 姓名 + mHolder.tvTitle.setText(p.realName); + // 显示别名 + mHolder.tvnickname.setText(p.nickname); + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + } + + return convertView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + // TODO Auto-generated method stub + return true; + } + + private class GroupViewHolder { + TextView mGroupName; + TextView mGroupCount; + ImageView mGroupChenge; + ImageView mGroupJianTou; + } + + private class ChildViewHolder { + public TextView tvnickname; + public ImageView ivImage; + public TextView tvTitle; + public ImageView cbCheck; + } + + } + + @Override + public boolean onChildClick(ExpandableListView parent, View v, + int groupPosition, int childPosition, long id) { + // TODO Auto-generated method stub + List position = new ArrayList(); + if (group.get(groupPosition).patientList.get(childPosition)!=null){ + if (group.get(groupPosition).patientList.get(childPosition).select == 1) { + group.get(groupPosition).patientList.get(childPosition).select = 2; + for (int i = 0; i < group.get(groupPosition).patientList.size(); i++) { + if (group.get(groupPosition).patientList.get(i)!=null){ + position.add(group.get(groupPosition).patientList.get(i).select); + } + + } + if (position.contains(1)) { + group.get(groupPosition).select = 3; + } else { + group.get(groupPosition).select = 2; + } + } else { + group.get(groupPosition).patientList.get(childPosition).select = 1; + for (int i = 0; i < group.get(groupPosition).patientList.size(); i++) { + if (group.get(groupPosition).patientList.get(i)!=null){ + position.add(group.get(groupPosition).patientList.get(i).select); + } + + } + if (position.contains(2)) { + group.get(groupPosition).select = 3; + } else { + group.get(groupPosition).select = 1; + } + } + setSureTime(); + mAdapter.notifyDataSetChanged(); + } + + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupingActivity.java new file mode 100644 index 0000000..9c22afb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GroupingActivity.java @@ -0,0 +1,407 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.widget.Button; +import android.widget.ExpandableListView; +import android.widget.ExpandableListView.OnChildClickListener; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.GroupingAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GroupPatientList; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.Group; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.PatientData; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GroupingActivity extends BaseActivity implements + OnCallBackFromNet, OnChildClickListener { + View view; + private ExpandableListView mElv_group; + private GroupingActivity mActivity; + private String uuid; + List> groups; + List group; + private GroupingAdapter mAdapter; + private TextView load_empty; + private Button bt_mylan1; + private String group_sort = "0";//0 按首字母排序 1 分组人数排序 + private String list_sort = "0";//0 按首字母排序 1 随访时间排序 + private DrawableCenterButtonR sort,sort1; + private LinearLayout ll_sort,ll_sort1; + private LinearLayout ll_new,ll_hot; + private LinearLayout ll_new1,ll_hot1; + private TextView tv_hot,tv_new; + private TextView tv_hot1,tv_new1; + private ImageView iv_hot,iv_new; + private ImageView iv_hot1,iv_new1; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("新建"); + top_right_text.setOnClickListener(this); + top_title.setText("患者分组"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_grouping_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_grouping); + } + + mActivity = this; + mElv_group = (ExpandableListView) view.findViewById(R.id.elv_group_patient); + load_empty = (TextView) view.findViewById(R.id.load_empty); + sort = view.findViewById(R.id.sort);//分组 + sort1 = view.findViewById(R.id.sort1);//组内 + ll_sort = view.findViewById(R.id.ll_sort);//分组 + ll_sort1 = view.findViewById(R.id.ll_sort1);//组内 + ll_new = view.findViewById(R.id.ll_new);//组内 + ll_new1 = view.findViewById(R.id.ll_new1);//组内 + ll_hot = view.findViewById(R.id.ll_hot);//组内 + ll_hot1 = view.findViewById(R.id.ll_hot1);//组内 + tv_new = view.findViewById(R.id.tv_new); + tv_new1 = view.findViewById(R.id.tv_new1); + tv_hot = view.findViewById(R.id.tv_hot); + tv_hot1 = view.findViewById(R.id.tv_hot1); + iv_hot = view.findViewById(R.id.iv_hot); + iv_hot1 = view.findViewById(R.id.iv_hot1); + iv_new = view.findViewById(R.id.iv_new); + iv_new1 = view.findViewById(R.id.iv_new1); + + + bt_mylan1 = view.findViewById(R.id.bt_mylan1); + if (Constant.isMaiLanExpert==1){ + bt_mylan1.setVisibility(View.VISIBLE); + } + mElv_group.setOnChildClickListener(this); + sort.setOnClickListener(this); + sort1.setOnClickListener(this); + ll_new.setOnClickListener(this); + ll_new1.setOnClickListener(this); + ll_hot.setOnClickListener(this); + ll_hot1.setOnClickListener(this); + bt_mylan1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (ll_sort.getVisibility()==View.VISIBLE){ + ll_sort.setVisibility(View.GONE); + return; + } + if (ll_sort1.getVisibility()==View.VISIBLE){ + ll_sort1.setVisibility(View.GONE); + return; + } +// Intent intent = new Intent(GroupingActivity.this, MylanFollow_upProjectActivity.class); + Intent intent = new Intent(GroupingActivity.this, MylanFollowActivity.class); + startActivity(intent); + } + }); + uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + getGroupAndPatient(); + registerDeletPatient(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("患者分组"); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public static final int GET_GROUP_RESULt = 201; + public static final int GET_GROUP_DETAIL_RESULt = 222; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + Intent intent = new Intent(mActivity, AddGroupActivity.class); + startActivityForResult(intent, GET_GROUP_RESULt); + } else if (id == R.id.sort) {//分组排序 + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + mElv_group.setEnabled(true); + mElv_group.setFocusable(true); + ll_sort.setFocusable(false); + }else { + ll_sort.setVisibility(View.VISIBLE); + ll_sort.setFocusable(true); + mElv_group.setEnabled(false); + } + if (ll_sort1.getVisibility() == View.VISIBLE) { + ll_sort1.setVisibility(View.GONE); + return; + } + } else if (id == R.id.sort1) {//组内排序 + if (ll_sort1.getVisibility() == View.VISIBLE) { + ll_sort1.setVisibility(View.GONE); + mElv_group.setEnabled(true); + mElv_group.setFocusable(true); + }else { + ll_sort1.setVisibility(View.VISIBLE); + mElv_group.setEnabled(false); + mElv_group.setFocusable(false); + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + return; + } + } else if (id == R.id.ll_new) { + mElv_group.setEnabled(true); + mElv_group.setFocusable(true); + tv_hot.setTextColor(getResources().getColor( + R.color.text_color)); + tv_new.setTextColor(getResources().getColor( + R.color.top_title)); + iv_new.setVisibility(View.VISIBLE); + iv_hot.setVisibility(View.GONE); + sort.setText("按首字母"); + chengeImg(sort); + ll_sort.setVisibility(View.GONE); + + group_sort = "0"; + getGroupAndPatient(); + } else if (id == R.id.ll_hot) { + mElv_group.setEnabled(true); + mElv_group.setFocusable(true); + tv_new.setTextColor(getResources().getColor( + R.color.text_color)); + tv_hot.setTextColor(getResources().getColor( + R.color.top_title)); + iv_new.setVisibility(View.GONE); + iv_hot.setVisibility(View.VISIBLE); + sort.setText("分组人数"); + chengeImg(sort); + ll_sort.setVisibility(View.GONE); + + group_sort = "1"; + getGroupAndPatient(); + } else if (id == R.id.ll_new1) { + mElv_group.setEnabled(true); + mElv_group.setFocusable(true); + tv_hot1.setTextColor(getResources().getColor( + R.color.text_color)); + tv_new1.setTextColor(getResources().getColor( + R.color.top_title)); + iv_new1.setVisibility(View.VISIBLE); + iv_hot1.setVisibility(View.GONE); + sort1.setText("按首字母"); + chengeImg(sort1); + ll_sort1.setVisibility(View.GONE); + + list_sort = "0"; + getGroupAndPatient(); + } else if (id == R.id.ll_hot1) { + mElv_group.setEnabled(true); + mElv_group.setFocusable(true); + tv_new1.setTextColor(getResources().getColor( + R.color.text_color)); + tv_hot1.setTextColor(getResources().getColor( + R.color.top_title)); + iv_new1.setVisibility(View.GONE); + iv_hot1.setVisibility(View.VISIBLE); + sort1.setText("随访时间"); + chengeImg(sort1); + ll_sort1.setVisibility(View.GONE); + + list_sort = "1"; + getGroupAndPatient(); + } + } + + public static final int GET_GROUP_PATIENT_RESULT = 101; + + public void getGroupAndPatient() { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + mElv_group.setEmptyView(tv_load_fail); + return; + } + showProgressDialog("正在加载"); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + param.put("group_sort", group_sort); + param.put("list_sort", list_sort); + sendParamtoNet(Url.getGroupList, param, GET_GROUP_PATIENT_RESULT, + mActivity, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + LogUtil.i("患者分组 = "+resultJson); + switch (resultCode) { + case GET_GROUP_PATIENT_RESULT: + + processData(resultJson); + break; + + default: + break; + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + closeProgressDialog(); + GroupPatientList bean = GsonTools.fromGsonToBean(result, + GroupPatientList.class); + SharePrefUtil.saveString(mActivity, Url.getGroupList, result); + if (bean == null || bean.data == null || bean.data.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + return; + + } else { + load_empty.setVisibility(View.GONE); + group = bean.data; + } + + // if (mAdapter == null) { + mAdapter = new GroupingAdapter(mActivity, group); + mElv_group.setAdapter(mAdapter); + // } else { + // mAdapter.notifyDataSetChanged(); + // } + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_GROUP_RESULt: + getGroupAndPatient(); + break; + case GET_GROUP_DETAIL_RESULt: + getGroupAndPatient(); + break; + default: + break; + } + } + + @Override + public boolean onChildClick(ExpandableListView parent, View v, + int groupPosition, int childPosition, long id) { + // TODO Auto-generated method stub + PatientData patient; + patient = group.get(groupPosition).patientList.get(childPosition); + if (patient!=null){ + String mobile = patient.mobile; + Intent intent = new Intent(mActivity, BigPatientActivity.class); + intent.putExtra("mobile", mobile); + intent.putExtra("realName", patient.realName); + intent.putExtra("patientUuid", patient.uuid); + intent.putExtra("photo", patient.photo); + intent.putExtra("birthDate", patient.birthDate); + intent.putExtra("type", Constant.typePatient); + startActivityForResult(intent, GET_GROUP_DETAIL_RESULt); + } + + return false; + } + public void chengeImg(DrawableCenterButtonR mDb_sort){ + if(CommonUtil.BigModule()) + { + Drawable icon_new = UIUtils.getDrawable(R.drawable.triangle_green_theme_big); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(GroupingActivity.this.getResources().getColor( + R.color.top_title)); + } + else + { + Drawable icon_new = UIUtils.getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(GroupingActivity.this.getResources().getColor( + R.color.top_title)); + } + + } + @Override + protected void onDestroy() { + super.onDestroy(); + localBroadcastManager.unregisterReceiver(localReceiver); + } + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + LocalReceiver localReceiver; + private void registerDeletPatient() + { + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("DELET_PATION_ACTION"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + } + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + finish(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/GuanggaoDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GuanggaoDetailActivity.java new file mode 100644 index 0000000..3f93d5b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/GuanggaoDetailActivity.java @@ -0,0 +1,362 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Url.zhibourl; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.util.Base64; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.UnsupportedEncodingException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; + +/** + * Created by WANGChengXin on 2020/7/28. + */ + +public class GuanggaoDetailActivity extends AppCompatActivity implements View.OnClickListener{ + private X5WebView webView; + private MoocimglActivity mActivity; + public View loadingView; + private String url; + private ImageView top_back; + private TextView mTitle; + + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private View layout_top; + private ImageButton mIb_share; + + private String newsTitle; + private String summary; + private String getTitle = "速速点开,精彩内容等您来看"; + private GWebChromeClient xwebchromeclient; + private boolean flag = true; + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_zhi_bo); + + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + X5WebView.initHardwareAccelerate(this); + webView = this.findViewById(R.id.aaaaaa); + layout_top = this.findViewById(R.id.layout_top); + + loadingView = this.findViewById(R.id.loading_view); + top_back = (ImageView) this.findViewById(R.id.top_back); + mTitle = (TextView) this.findViewById(R.id.top_title); + mIb_share = (ImageButton) this.findViewById(R.id.top_right); + video_fullView = (FrameLayout) this.findViewById(R.id.f_move); + mIb_share.setVisibility(View.VISIBLE); + mIb_share.setImageResource(R.drawable.share_icon); + top_back.setOnClickListener(this); + mTitle.setText("肝胆相照"); + mIb_share.setOnClickListener(this); + url =getIntent().getStringExtra("moocurl"); + + InitIntent(); + + } + + @Override + protected void onDestroy() { + //释放资源 + if (webView != null) + webView.destroy(); + + super.onDestroy(); + } + + public void InitIntent() { + +// url = "http://wx.igandan.com/project/NCOV2019_list"; +// url = "https://live.polyv.cn/watch/1633941"; +// CookieSyncManager.createInstance(this); +// CookieManager.getInstance().removeAllCookie(); + + WebSettings settings = webView.getSettings(); +// +// +// +// +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + //新添加使用了localStorage存储 + // 注意:setAppCacheMaxSize、setAppCachePath 和 setAppCacheEnabled 在 API 33 (Android 13) 及以上版本中已被移除 +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { +// webView.getSettings().setAppCacheMaxSize(1024*1024*8); +// String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); +// webView.getSettings().setAppCachePath(appCachePath); +// webView.getSettings().setAppCacheEnabled(true); +// } +// webView.getSettings().setAllowFileAccess(true); + + WebSettings webSettings = webView.getSettings(); + webSettings.setJavaScriptEnabled(true); // 如果需要 JS + webSettings.setDomStorageEnabled(true); // 启用 DOM 存储(LocalStorage 等) + webSettings.setDatabaseEnabled(true); // 如果需要 WebSQL(也部分废弃) + webSettings.setAllowFileAccess(true); // 如需访问文件 + webSettings.setAllowContentAccess(true); + + String userAgent = settings.getUserAgentString(); + String userAgents = userAgent + "gdxz-expert"; + settings.setUserAgentString(userAgents); + + + + + xwebchromeclient = new GWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + String id = SharePrefUtil.getString(GuanggaoDetailActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(GuanggaoDetailActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(GuanggaoDetailActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + name=name.replaceAll("\r|\n", ""); + //name = str; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String temurl= null; + try { + temurl = zhibourl+"?id="+id+"&name="+name+"&avatar="+avatar+"&url="+url+"&sign="+ AESUtil.Encrypt(id+name+avatar+url,"deoep09_klodLdAo"); + + Log.d("gdxzzhibo","temurl ="+temurl); + } catch (Exception e) { + e.printStackTrace(); + } + webView.loadUrl(temurl); + // webView.loadUrl(url); + webView.setInitialScale(50); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + + webView.setWebViewClient(new MyWebViewClient()); + } + + public class GWebChromeClient extends WebChromeClient { + private View xprogressvideo; + + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + if(null != title && !webView.getUrl().contains(title)){ + getTitle = title; + LogUtil.i("getTitle GWebChromeClient = "+getTitle); + } + + } + + // 播放网络视频时全屏会被调用的方法 + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + // Log.i("fangfa","已经进入了。。。。。。。。"); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + webView.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + video_fullView.addView(view); + video_fullView.setVisibility(View.VISIBLE); + + + + } + + // 视频播放退出全屏会被调用的 + @Override + public void onHideCustomView() { + layout_top.setVisibility(View.VISIBLE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + webView.setVisibility(View.VISIBLE); + } + + // 视频加载时进程loading + @Override + public View getVideoLoadingProgressView() { + if (xprogressvideo == null) { + LayoutInflater inflater = LayoutInflater + .from(GuanggaoDetailActivity.this); + xprogressvideo = inflater.inflate(R.layout.loading_view, null); + } + return xprogressvideo; + } + } + @Override + public void onClick(View v) { + // TODO Auto-generated method stubdes + switch (v.getId()) { + case R.id.top_back: + Intent intent = new Intent(); +// if(BigModule()) +// { +// intent.setClass(this, BigMainActivity.class); +// +// } +// else +// { + intent.setClass(this, MainActivity.class); +// } + startActivity(intent); + this.finish(); + break; + case R.id.top_right: + share(); + break; + } + + } + public class MyWebViewClient extends WebViewClient { + + private ProgressDialog loadingBar; + + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + return true; + } + + @Override + public void onPageFinished(final WebView view, String url) { +// +// String id = SharePrefUtil.getString(GuanggaoDetailActivity.this, Constant.uuid, "123"); +// String avatar = Url.urlHtml+SharePrefUtil.getString(GuanggaoDetailActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); +// String name = null; +// try { +// String str = SharePrefUtil.getString(GuanggaoDetailActivity.this, Constant.realName, "肝胆相照专家端"); +// name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } +// String params = "{\"name\":\""+name+"\",\"id\":\""+id+"\",\"avatar\":\""+avatar+"\"}"; +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { +// view.evaluateJavascript("window.localStorage.setItem('watchlive_current_user','" +params + "');", null); +// } else { +// view.loadUrl("javascript:(function({window.localStorage.setItem('watchlive_current_user','" + params.toString() + "')})()"); +// view.reload(); +// } + + + + + + loadingView.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // ToastUtil.showToast("加载失败,请检查网络"); + loadingView.setVisibility(View.GONE); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + } + } + + /** + * 调用分享功能 + */ + private void share( ) { + String shareTitle; + shareTitle = getTitle; + LogUtil.i("shareTitle = "+shareTitle); + summary = "肝胆相照®肝胆病在线公共服务平台"; + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + String imageUrl = ""; + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(GuanggaoDetailActivity.this, shareTitle, summary, msgSinaContent, + imageUrl, shareUrl, bitmap); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == event.KEYCODE_BACK){ + Intent intent = new Intent(); +// if(BigModule()) +// { +// intent.setClass(this, BigMainActivity.class); +// +// } +// else +// { + intent.setClass(this, MainActivity.class); +// } + startActivity(intent); + this.finish(); + } + return super.onKeyDown(keyCode, event); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/H5AllActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/H5AllActivity.java new file mode 100644 index 0000000..cfe2496 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/H5AllActivity.java @@ -0,0 +1,91 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.graphics.Bitmap; +import android.view.View; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/1/14. + */ + +public class H5AllActivity extends BaseActivity { + + @Override + public void setTitle() { + top_title.setText(getIntent().getStringExtra("title")); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view= UIUtils.inflate(R.layout.activity_h5all); + X5WebView.initHardwareAccelerate(this); + X5WebView mWebView = view.findViewById(R.id.wv); + loadingView = view.findViewById(R.id.loading_view); + // mWebView.setInitialScale(25); + + mWebView.setWebViewClient(new WebViewClient() { + + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(final WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + + + + + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + + + mWebView.loadUrl(getIntent().getStringExtra("url")); + return view; + } + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HbvdnaActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HbvdnaActivity.java new file mode 100644 index 0000000..671bed4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HbvdnaActivity.java @@ -0,0 +1,1217 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.Editable; +import android.text.InputType; +import android.text.TextWatcher; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.hbvSymbolIdBean; +import cn.shangyu.gdxzExpert.bean.hbvSymbolIdBeans; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class HbvdnaActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + @Override + public void setTitle() { + top_title.setText("乙肝表面标志物及HBV DNA"); + } + String hbvSymbolId; + EditText hbsag,antiHbs,hbeag,antiHbe,hbvDna; + View view; + + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + TextView new_suifang; + String baseinfoDataStatus; + String type; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_hbvdna); + type=getIntent().getStringExtra("type"); + + view.findViewById(R.id.tv2).setOnClickListener(this); + if ("1".equals(type)) { + Drawable drawable= getResources().getDrawable(R.drawable.yiwen); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + ((TextView)view.findViewById(R.id.tv1)).setCompoundDrawablePadding(5); + ((TextView)view.findViewById(R.id.tv1)).setCompoundDrawablesWithIntrinsicBounds(null,null,drawable,null); + view.findViewById(R.id.tv1).setOnClickListener(this); + } + hbsag=view.findViewById(R.id.hbsag); + hbsag.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); +// hbsag.setFilters(new InputFilter[]{new DecimalInputFilter()}); + antiHbs=view.findViewById(R.id.antiHbs); + antiHbs.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); +// antiHbs.setFilters(new InputFilter[]{new DecimalInputFilter()}); + hbeag=view.findViewById(R.id.hbeag); + hbeag.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); +// hbeag.setFilters(new InputFilter[]{new DecimalInputFilter()}); + antiHbe=view.findViewById(R.id.antiHbe); + antiHbe.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); +// antiHbe.setFilters(new InputFilter[]{new DecimalInputFilter()}); + hbvDna=view.findViewById(R.id.hbvDna); + hbvDna.setInputType(InputType.TYPE_CLASS_NUMBER|InputType.TYPE_NUMBER_FLAG_DECIMAL); +// hbvDna.setFilters(new InputFilter[]{new DecimalInputFilter()}); + hbvSymbolId=getIntent().getStringExtra("hbvSymbolId"); + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + view.findViewById(R.id.change_data).setOnClickListener(this); + if ("1".equals(type)) { + + hbsag.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + + if(editable.toString().contains(".")) + { + String ed[]=editable.toString().split("\\."); + + if(Integer.valueOf(ed[0])>2000 + ||ed.length>1&&(Integer.valueOf(ed[0])==2000&&!StringUtil.isEmpty(ed[1]))&&Integer.valueOf(ed[1])>0) + { + hbsag.setTextColor(Color.RED); + ToastUtil.showToast("乙型肝炎表面抗原大于2000lU/mL,该患者不合格"); + } + else + { + hbsag.setTextColor(Color.parseColor("#ff666666")); + } + + } + else if(Integer.valueOf(editable.toString())>2000) + { + + hbsag.setTextColor(Color.RED); + ToastUtil.showToast("乙型肝炎表面抗原大于2000lU/mL,该患者不合格"); + } + else + { + hbsag.setTextColor(Color.parseColor("#ff666666")); + } + } + + } + }); + } + + initView(); + handletoken(Url.suifangHbvSymbol); + return view; + } + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(HbvdnaActivity.this, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.tv1: + showyiwen("乙型肝炎表面抗原(HBsAg)",getString(R.string.hbsag)); + break; + case R.id.tv2: + showyiwen("HBV-DNA","低于检测下限填写0"); + break; + case R.id.new_suifang: + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认保存新的信息?"); + } + },300); + break; + case R.id.change_data: + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认本数据项已全部完成?"); + } + },300); + break; + } + + + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(HbvdnaActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(content.contains("保存")) + { + sendpre(); + hideSoftKeyboard(); + } + else{ + baseinfoDataStatus="2"; + sendpre(); + hideSoftKeyboard(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + public void showyiwen(String title,String content) + { + EasyWindow.with(HbvdnaActivity.this).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + } + }).show(); + } + public List imgs= new ArrayList<>();; + hbvSymbolIdBeans beans; + private void gettree() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.suifangHbvSymbol+hbvSymbolId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + beans= GsonTools.fromGsonToBean(response, hbvSymbolIdBeans.class); + if(beans.getData()!=null) + { + baseinfoDataStatus=beans.getData().getDataStatus(); + if(!StringUtil.isEmpty(beans.getData().getHbsag())) + { + hbsag.setText(beans.getData().getHbsag()); + } + if(!StringUtil.isEmpty(beans.getData().getAntiHbs())) + { + antiHbs.setText(beans.getData().getAntiHbs()); + } + if(!StringUtil.isEmpty(beans.getData().getHbeag())) + { + hbeag.setText(beans.getData().getHbeag()); + } + if(!StringUtil.isEmpty(beans.getData().getAntiHbe())) + { + antiHbe.setText(beans.getData().getAntiHbe()); + } + if("0".equals(beans.getData().getHbeagFalg())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_122)).setChecked(true); + } + else if("1".equals(beans.getData().getHbeagFalg())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_121)).setChecked(true); + } + if(!StringUtil.isEmpty(beans.getData().getHbvDna())) + { + hbvDna.setText(beans.getData().getHbvDna()); + } + if(beans.getData().getImgPath()!=null&&beans.getData().getImgPath().size()>0) + { + imgs.addAll(beans.getData().getImgPath()); + } + if(beans.getData().getImgPath()!=null) + { + for(imBean urlBean:beans.getData().getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangHbvSymbol); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + + } + public void statract() + { + Intent intent=new Intent(HbvdnaActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(HbvdnaActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.suifangHbvSymbol)) + { + gettree(); + } + else if(url.contains(Url.suifangHbvSymbolupdate)) + { + updatedata(); + } + + + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(HbvdnaActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(HbvdnaActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(HbvdnaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(HbvdnaActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(HbvdnaActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(HbvdnaActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(HbvdnaActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(HbvdnaActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(HbvdnaActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(HbvdnaActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + if(!StringUtil.isEmpty(mBitmaps.get(position).getPath())) + { + Glide.with(HbvdnaActivity.this).asBitmap().load(mBitmaps.get(position).getPath()) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)) + .into(view); + } + else + { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + HbvdnaActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + private void sendpre() + { + if(hbsag.getText()!=null&&!StringUtil.isEmpty(hbsag.getText().toString())) + { + if ("1".equals(type)) + { + if(hbsag.getText().toString().contains(".")) + { + String ed[]=hbsag.getText().toString().split("\\."); + if(Integer.valueOf(ed[0])>2000||ed.length>1&&(Integer.valueOf(ed[0])==2000&&!StringUtil.isEmpty(ed[1]))&&Integer.valueOf(ed[1])>0) + { + hbsag.setTextColor(Color.RED); + ToastUtil.showToast("乙型肝炎表面抗原大于2000lU/mL,该患者不合格"); + return; + } + + } + else if(Integer.valueOf(hbsag.getText().toString())>2000) + { + hbsag.setTextColor(Color.RED); + ToastUtil.showToast("乙型肝炎表面抗原大于2000lU/mL,该患者不合格"); + return; + } + } + + + } + else + { + ToastUtil.showToast("乙型肝炎表面抗原为必填项"); + return; + } + if(StringUtil.isEmpty(antiHbs.getText().toString())) + { + ToastUtil.showToast("乙型肝炎表面抗体为必填项"); + return; + } + if(StringUtil.isEmpty(hbeag.getText().toString())) + { + ToastUtil.showToast("乙型肝炎e抗原为必填项"); + return; + } + if(StringUtil.isEmpty(antiHbe.getText().toString())) + { + ToastUtil.showToast("乙型肝炎e抗体为必填项"); + return; + } + if(((RadioButton)view.findViewById(R.id.tab_rbn_121)).isChecked()|| + ((RadioButton)view.findViewById(R.id.tab_rbn_122)).isChecked()) + { + + } + else + { + ToastUtil.showToast("e抗原是否阳性为必填项"); + return; + } + if(StringUtil.isEmpty(hbvDna.getText().toString())) + { + ToastUtil.showToast("HBV-DNA为必填项"); + return; + } + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { + + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { + hbvSymbolIdBean pro=new hbvSymbolIdBean(); +// if(!StringUtil.isEmpty(beans.getData().getHbsag())) +// { + pro.setHbsag(hbsag.getText().toString()); +// hbsag.setText(beans.getData().getHbsag()); +// } +// if(!StringUtil.isEmpty(beans.getData().getAntiHbs())) +// { + pro.setAntiHbs(antiHbs.getText().toString()); +// antiHbs.setText(beans.getData().getAntiHbs()); +// } +// if(!StringUtil.isEmpty(beans.getData().getHbeag())) +// { + pro.setHbeag(hbeag.getText().toString()); +// hbeag.setText(beans.getData().getHbeag()); +// } +// if(!StringUtil.isEmpty(beans.getData().getAntiHbe())) +// { + pro.setAntiHbe(antiHbe.getText().toString()); +// antiHbe.setText(beans.getData().getAntiHbe()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_122)).isChecked()) + { + pro.setHbeagFalg("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_122)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_121)).isChecked()) + { + pro.setHbeagFalg("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_121)).setChecked(true); + } +// if(!StringUtil.isEmpty(beans.getData().getHbvDna())) +// { + pro.setHbvDna(hbvDna.getText().toString()); +// hbvDna.setText(beans.getData().getHbvDna()); +// } + if(baseinfoDataStatus!=null) + { + pro.setDataStatus(baseinfoDataStatus); + } + pro.setImgPath(imgs); + pro.setHbvSymbolId(hbvSymbolId); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(Url.suifangHbvSymbolupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + + if(hasrealtoken(response)>0) + { + finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangHbvSymbolupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + +// ToastUtil.showToast(response); + } + + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HeroListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HeroListActivity.java new file mode 100644 index 0000000..90ab920 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HeroListActivity.java @@ -0,0 +1,392 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.view.X5WebView; + +public class HeroListActivity extends AppCompatActivity implements OnClickListener { + private X5WebView webView; + private HeroListActivity mActivity; + public View loadingView; + private String url; + private ImageView top_back; + private TextView mTitle; + + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private WebChromeClient.CustomViewCallback xCustomViewCallback; + private myWebChromeClient xwebchromeclient; + private View layout_top; + private ImageButton mIb_share; + + private String imageUrl = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_zhi_bo); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + X5WebView.initHardwareAccelerate(this); + webView =this.findViewById(R.id.aaaaaa); + layout_top = this.findViewById(R.id.layout_top); + loadingView = this.findViewById(R.id.loading_view); + top_back = (ImageView) this.findViewById(R.id.top_back); + mTitle = (TextView) this.findViewById(R.id.top_title); + mIb_share = (ImageButton) this.findViewById(R.id.top_right); + video_fullView = (FrameLayout) this.findViewById(R.id.f_move); + mIb_share.setVisibility(View.VISIBLE); + mIb_share.setImageResource(R.drawable.share_icon); + top_back.setOnClickListener(this); + mIb_share.setOnClickListener(this); + mActivity = this; + InitIntent(); + } + + public class MyWebViewClient extends WebViewClient { + + private ProgressDialog loadingBar; + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + // if (loadingBar.isShowing()) { + // loadingBar.dismiss(); + // } + loadingView.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // ToastUtil.showToast("加载失败,请检查网络"); + loadingView.setVisibility(View.GONE); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + } + } + + @SuppressLint("NewApi") + public void InitIntent() { + url = Constant.HERO2019url_path; + mTitle.setText("肝胆英雄榜"); + DataCleanManager.cleanWebCache(this); + webView.loadUrl(url); + webView.setInitialScale(50); +// WebSettings setting = webView.getSettings(); +// setting.setPluginState(PluginState.ON); +// setting.setUseWideViewPort(true); +// setting.setJavaScriptEnabled(true); // Support JavaScript +// setting.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// // setting.setPluginsEnabled(true); //Support Plugins, for example just +// // like flash plugin. +// setting.setLoadWithOverviewMode(true); +// setting.setUseWideViewPort(true); +// setting.setDomStorageEnabled(true); +// setting.setSupportZoom(true); // Zoom Control on web (You don't need + // setting.setBuiltInZoomControls(true); // Enable Multitouch if + // supported + // by ROM + xwebchromeclient = new myWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + webView.setWebViewClient(new MyWebViewClient()); + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stubdes + switch (v.getId()) { + case R.id.top_back: + this.finish(); + break; + case R.id.top_right: + share(); + break; + default: + break; + } + + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = "2019肝胆英雄榜实时播报"; + String shareUrl = url; + String summary = "立刻行动,斩获荣誉!"; + String msgSinaContent = shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = ""; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = "http://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + ShareUtils.shareUmeng(mActivity, shareTitle, + summary, msgSinaContent, imageUrl, shareUrl, bitmap); + // final UMImage shareImg;// 友盟分享的缩略图 + // Bitmap file = null; + // try { + // file = Glide.with(BaseApplication.getInstance()) + // .load(imageUrl).asBitmap() + // .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get(); + // } catch (InterruptedException | ExecutionException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // if (StringUtil.isEmpty(imageUrl.replace(Url.urlHtml, ""))) { + // shareImg = new UMImage(ZhiBoActivity.this, + // "http://doc.igandan.com/app/img/expert_logo.png"); + // } else { + // + // shareImg = new UMImage(ZhiBoActivity.this, file); + // } + // UMWeb web = new UMWeb(shareUrl); + // shareTitle = "肝胆想照直播:" + shareTitle; + // web.setTitle(shareTitle);// 标题 + // web.setThumb(shareImg); // 缩略图 + // + // web.setDescription(msgSinaContent);// 描述 + // new ShareAction(ZhiBoActivity.this) + // .withMedia(web) + // .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, + // SHARE_MEDIA.SINA) + // .setCallback( + // new UMengShareHelper(ZhiBoActivity.this).shareListener) + // .open(); + + } + + public class myWebChromeClient extends WebChromeClient { + private View xprogressvideo; + + // 播放网络视频时全屏会被调用的方法 + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + // Log.i("fangfa","已经进入了。。。。。。。。"); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + webView.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + xCustomViewCallback = callback; + video_fullView.addView(view); + + video_fullView.setVisibility(View.VISIBLE); + + setFullScreen(); + } + + // 视频播放退出全屏会被调用的 + @Override + public void onHideCustomView() { + layout_top.setVisibility(View.VISIBLE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + xCustomViewCallback.onCustomViewHidden(); + webView.setVisibility(View.VISIBLE); + quitFullScreen(); + } + + // 视频加载时进程loading + @Override + public View getVideoLoadingProgressView() { + if (xprogressvideo == null) { + LayoutInflater inflater = LayoutInflater + .from(mActivity); + xprogressvideo = inflater.inflate(R.layout.loading_view, null); + } + return xprogressvideo; + } + } + + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + } + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + /** + * 判断是否是全屏 + * + * @return + */ + public boolean inCustomView() { + return (xCustomView != null); + } + + /** + * 全屏时按返加键执行退出全屏方法 + */ + public void hideCustomView() { + xwebchromeclient.onHideCustomView(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + @Override + protected void onResume() { + super.onResume(); + webView.onResume(); + // webView.resumeTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onResume") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + /** + * 设置为横屏 + */ + if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + } + + @Override + protected void onPause() { + super.onPause(); + webView.onPause(); + // webView.pauseTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onPause") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 主要是把webview所持用的资源销毁, + */ + @Override + protected void onDestroy() { + webView.setVisibility(View.GONE); + super.onDestroy(); + video_fullView.removeAllViews(); + webView.loadUrl("about:blank"); + webView.stopLoading(); + webView.setWebChromeClient(null); + webView.setWebViewClient(null); + webView.destroy(); + UMShareAPI.get(this).release(); + if (webView != null) + webView.destroy(); + } + + /** + * 判断是否是全屏,如果是就隐藏,否则就退出当前的页面 + * + * @param keyCode + * @param event + * @return + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (inCustomView()) { + // webViewDetails.loadUrl("about:blank"); + hideCustomView(); + return false; + } else { + webView.loadUrl("about:blank"); + this.finish(); + } + } + return false; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryActivity.java new file mode 100644 index 0000000..63a6cb4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryActivity.java @@ -0,0 +1,636 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.http.HttpHandler; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.HistoryAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MeetingBean; +import cn.shangyu.gdxzExpert.bean.MeetingBean.MeatingList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ZHAODeWei 肝胆会议 2016 9 23添加直播 + */ +public class HistoryActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + View view; + private PullToRefreshListView ptrLv; + private String url = Url.getMeetingHistory; + + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + private List mList = new ArrayList(); + HistoryAdapter mAdapter; + private HistoryActivity mActivity; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private String title = null; + private DrawableCenterButtonR dcb_address,dcb_time,dcb_class,dcb_live; + private ListView lv_time,lv_class; + private ArrayList timeList; + private ArrayList classList; + private MeetingTimeAdapter mtimeAdapter; + private MeetingTimeAdapter mclassAdapter; + private int class_position = 13; + private int time_position = 13; + private String year = ""; + private String type =""; + private Button bt_send_feed; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_meeting); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + mActivity = this; + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + + + dcb_time = (DrawableCenterButtonR) view.findViewById(R.id.dcb_time); + dcb_address = (DrawableCenterButtonR) view.findViewById(R.id.dcb_address); + dcb_class = (DrawableCenterButtonR) view.findViewById(R.id.dcb_class); + dcb_live = (DrawableCenterButtonR) view.findViewById(R.id.dcb_live); + lv_time = (ListView) view.findViewById(R.id.lv_time); + lv_class = (ListView) view.findViewById(R.id.lv_class); + view.findViewById(R.id.view3).setVisibility(View.GONE); + view.findViewById(R.id.view2).setVisibility(View.GONE); + bt_send_feed = (Button) view.findViewById(R.id.bt_send_feed); + bt_send_feed.setVisibility(View.GONE); + dcb_address.setVisibility(View.GONE); + dcb_live.setVisibility(View.GONE); + + // 设置空的提示信息,默认是“暂时没有数据” +// tv_empty_msg.setText("暂无会议回放"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + if (class_position==13) { + type = ""; + } +// else { +// type = 不变; +// } + if (time_position == 13){ + year = ""; + } +// else { +// year = 不变; +// } + getMeetingList(page+"",year,type); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + if (class_position==13) { + type = ""; + } +// else { +// type = class_position+1+""; +// } + if (time_position == 13){ + year = ""; + } +// else { +// year = time_position+1+""; +// } + getMeetingList(page+"",year,type); + } + }); + + dcb_time.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (lv_time.getVisibility() == View.VISIBLE) { + lv_time.setVisibility(View.GONE); + return; + } + if (mtimeAdapter == null) { + timeList = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + for (int i = year; i >= 2016; i--) { + timeList.add(i+""); + } + mtimeAdapter = new MeetingTimeAdapter(timeList); + mtimeAdapter.setPosition(time_position); + lv_time.setAdapter(mtimeAdapter); + } else { + mtimeAdapter.setPosition(time_position); + mtimeAdapter.notifyDataSetChanged(); + } + lv_time.setVisibility(View.VISIBLE); + lv_class.setVisibility(View.GONE); + } + }); + dcb_class.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + // TODO Auto-generated method stub + if (lv_class.getVisibility() == View.VISIBLE) { + lv_class.setVisibility(View.GONE); + return; + } + if (mclassAdapter == null) { + classList = new ArrayList<>(); + classList.add("全国会议"); + classList.add("省级会议"); + classList.add("市级会议"); + classList.add("国际会议"); + classList.add("其他会议"); + mclassAdapter = new MeetingTimeAdapter(classList); + mclassAdapter.setPosition(class_position); + lv_class.setAdapter(mclassAdapter); + } else { + mclassAdapter.setPosition(class_position); + mclassAdapter.notifyDataSetChanged(); + } + lv_time.setVisibility(View.GONE); + lv_class.setVisibility(View.VISIBLE); + } + }); + lv_time.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + time_position = position; + year = timeList.get(position); + lv_time.setVisibility(View.GONE); + page = 1; + if (class_position==13) { + getMeetingList(page+"",year ,""); + }else { + getMeetingList(page+"",year ,type); + } + + chengeImg(dcb_time,timeList.get(position)); + } + }); + + lv_class.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + class_position = position; + type = position+1+""; + page = 1; + if (position == 4) { + type = "0"; + } + if (time_position == 13) { + getMeetingList(page+"","" ,type); + }else{ + getMeetingList(page+"",year ,type); + } + lv_class.setVisibility(View.GONE); + chengeImg(dcb_class,classList.get(position)); + } + }); + + initData(); + return view; + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + showLoadingProgress(); + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + + getMeetingList(page+"",year ,type); + } + + public List DatasList; + + public void getPosition() { + DatasList = new ArrayList(); + int count = 0; + for (int i = 0; i < mList.size(); i++) { + if (!DatasList.contains(mList.get(i).getBegin_date() + .substring(0, 7))) { + DatasList.add(mList.get(i).getBegin_date().substring(0, 7)); + // Positions.add(i + ""); + count = 0; + mList.get(i).setCount(count); + } else { + count++; + mList.get(i).setCount(count); + } + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new HistoryAdapter(mActivity, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + MeetingBean bean = GsonTools.fromGsonToBean(result, MeetingBean.class); + if (!TextUtils.isEmpty(bean.code) && !"null".equalsIgnoreCase(bean.code) + && !"200".equals(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + getPosition(); + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多会议了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getMeetingList(String page,String year,String type) { + LogUtil.e("page = "+page); + LogUtil.e("year = "+year); + LogUtil.e("type = "+type); + + showLoadingProgress(); + Map param = new HashMap(); + param.put("year", year); + param.put("page", page); + param.put("type", type); + sendJsonPostParamtoNetSignMD5(Url.meetingVideo, param, 1, this); + + +// RequestParams params = new RequestParams(); +// params.addBodyParameter("expertUuid", uuid); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, url, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// LogUtil.d("getScienceList().onSuccess info.result = " +// + info.result); +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("getScienceList().onFailure = " + arg1); +// onLoaded(); +// if (page > 1) { +// page--; +// } +// // 显示网络错误布局 +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + title = mList.get(position - 1).getTitle(); + getDataResult(title); + } + + @Override + public void setTitle() { + String stringExtra = getIntent().getStringExtra("title"); + // TODO Auto-generated method stub + top_title.setText(stringExtra); + if (getResources().getString(R.string.gandanshipin).equals(stringExtra)) { + top_right.setImageResource(R.drawable.gandanshipin_grid); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent3 = new Intent(mActivity, VideoActivity.class); +// intent3.putExtra("title",top_title.getText()); + startActivity(intent3); + finish(); + } + }); + top_right_search.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, PublicSearchActivity.class); + intent.setType("video"); + startActivity(intent); + } + }); + top_right_search.setVisibility(View.VISIBLE); + }else { + top_right_search.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + public void getDataResult(String type) { + Map param = new HashMap(); + param.put("name", type); + sendParamtoNet(Url.getTypeUuidByName, param, 101, mActivity, true); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + private ECAlertDialog buildAlert2; + + public void aaa() { + buildAlert2 = ECAlertDialog.buildAlert(mActivity, "该会议视频暂不支持回放", null, + "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert2.dismiss(); + + } + }); + buildAlert2.setTitle("温馨提示"); + buildAlert2.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert2.show(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + switch (resultCode) { + case 1: + processData(resultJson); + break; + + case 101: + LogUtil.e("getTypeUuidByName = "+resultJson); + // TODO Auto-generated method stub + String code = null; + String message = null; + JSONObject jsonObject = null; + String uuid = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + uuid = jsonObject.optString("type_uuid"); + if (code.equals("1")) { + if (StringUtil.isEmpty(uuid)) { + aaa(); + } else { + Intent intent = new Intent(mActivity, + VideoMoreActivity.class); + intent.putExtra("uuid", uuid); + intent.putExtra("title", title); + startActivity(intent); + } + } else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + } + } + + + // 显示时间的adapter类 + class MeetingTimeAdapter extends BaseAdapter { + private ArrayList list; + private int position; + + public MeetingTimeAdapter(ArrayList list) { + this.list = list; + } + + public void setPosition(int position) { + this.position = position; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder viewHolder; + if (arg1 == null) { + viewHolder = new ViewHolder(); + arg1 = UIUtils.inflate(R.layout.item_meeting_time); + viewHolder.tv_time = (TextView) arg1.findViewById(R.id.tv_time); + viewHolder. v_line = (View) arg1.findViewById(R.id.v_line); + viewHolder. iv_time = (ImageView) arg1.findViewById(R.id.iv_time); + arg1.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) arg1.getTag(); + } + + viewHolder.tv_time.setText(list.get(arg0).toString()); + if (position==arg0) { + viewHolder.iv_time.setVisibility(View.VISIBLE); + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.top_title)); + viewHolder.tv_time.setTextColor(UIUtils.getColor(R.color.top_title)); + }else{ + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.devider_line)); + viewHolder.tv_time.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + viewHolder.iv_time.setVisibility(View.GONE); + } + return arg1; + } + + class ViewHolder{ + TextView tv_time; + View v_line; + ImageView iv_time; + } + } + public void chengeImg(DrawableCenterButtonR mDb_sort,String text){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryMettingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryMettingActivity.java new file mode 100644 index 0000000..65571d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HistoryMettingActivity.java @@ -0,0 +1,406 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.ListView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.HistoryMeetingAdapter; +import cn.shangyu.gdxzExpert.adapter.MeetingTimeAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MeetingBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.getMonth; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.getYear; +import static cn.shangyu.gdxzExpert.utils.Url.getHistoryMeetingList; + +public class HistoryMettingActivity extends BaseActivity implements AdapterView.OnItemClickListener, OnCallBackFromNet { + + private View view; + private DrawableCenterButtonR dcb_year,dcb_month; + private PullToRefreshListView ptrLv; + String inityear; + String initmonth; + String inittile =""; + private MeetingTimeAdapter mtimeAdapter,timeAdapter; + private ListView lv_time,lv_class; + private LinearLayout ll_empty; + private int page = 1; + private List mList = new ArrayList(); + HistoryMeetingAdapter mAdapter; + private ArrayList timeList; + private ArrayList timeList1; + private int time_position = 13; + private int class_position = 13; + @Override + public void setTitle() { + top_title.setText("过往会议"); + inityear=getYear()+""; + inityear=getMonth()+""; + itop_search.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_history_metting); + dcb_year=view.findViewById(R.id.dcb_year); + dcb_month=view.findViewById(R.id.dcb_month); + lv_time=view.findViewById(R.id.lv_time); + lv_class=view.findViewById(R.id.lv_class); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + dcb_year.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (lv_time.getVisibility() == View.VISIBLE) { + lv_time.setVisibility(View.GONE); + return; + } + + if (mtimeAdapter == null) { + timeList = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + //timeList.add("所有"); + for (int i = year; i >= 2016; i--) { + timeList.add(i+"年"); + } + mtimeAdapter = new MeetingTimeAdapter(timeList); + mtimeAdapter.setPosition(time_position); + lv_time.setAdapter(mtimeAdapter); + } else { + mtimeAdapter.setPosition(time_position); + mtimeAdapter.notifyDataSetChanged(); + } + lv_time.setVisibility(View.VISIBLE); + lv_class.setVisibility(View.GONE); + } + }); + dcb_month.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (time_position==13) { + ToastUtil.showMessage("请先选择年份"); + return; + + } + if (lv_class.getVisibility() == View.VISIBLE) { + lv_class.setVisibility(View.GONE); + return; + } + +// if (timeAdapter == null) { + timeList1 = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + int mon = calendar.get(Calendar.MONTH); + //timeList.add("所有"); + if(time_position==0) + { + for (int i = 1; i<=mon+1; i++) { + timeList1.add(i+"月"); + } + } + else + { + for (int i = 1; i <=12; i++) { + timeList1.add(i+"月"); + } + } + + timeAdapter = new MeetingTimeAdapter(timeList1); + timeAdapter.setPosition(class_position); + lv_class.setAdapter(timeAdapter); +// } else { +// timeAdapter.setPosition(class_position); +// timeAdapter.notifyDataSetChanged(); +// } + lv_time.setVisibility(View.GONE); + lv_class.setVisibility(View.VISIBLE); + } + + }); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + refreshLv(); + + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + refreshLv(); + // meetingListBySearchNew(page+"",inityear,initmonth,""); + } + }); + + lv_time.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + time_position = position; + String str=timeList.get(position); + inityear = str.substring(0, str.indexOf("年")); + lv_time.setVisibility(View.GONE); + page = 1; +// if (class_position==13) { +// meetingListBySearchNew(page+"",inityear ,"",""); +// }else { + meetingListBySearchNew(page+"",inityear ,"",""); +// } + + chengeImg(dcb_year,timeList.get(position)); + chengeImgl(dcb_month,"会议月份"); + class_position=13; + } + }); + lv_class.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + class_position = position; + String str=timeList1.get(position); + initmonth = str.substring(0, str.indexOf("月")); + lv_class.setVisibility(View.GONE); + page = 1; + if (time_position==13) { + ToastUtil.showMessage("请先选择年份"); + return; + // meetingListBySearchNew(page+"","" ,initmonth,""); + }else { + meetingListBySearchNew(page+"",inityear ,initmonth,""); + } + + chengeImg(dcb_month,timeList1.get(position)); + + } + }); + itop_search.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(HistoryMettingActivity.this,SearchHistoryActivity.class)); + } + }); + initData(); + return view; + } + private void refreshLv() + { + if(time_position==13) + { + meetingListBySearchNew(page+"","","",""); + } + else + { + if(class_position==13) + { + meetingListBySearchNew(page+"",inityear,"",""); + } + else + { + meetingListBySearchNew(page+"",inityear,initmonth,""); + } + } + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(HistoryMettingActivity.this, GDEventDetailActivity.class); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + intent.putExtra("url", mList.get(position - 1).getPath()); + intent.putExtra("summary", mList.get(position - 1).getContent()); + intent.setType("meeting"); + startActivity(intent); + } + private void initData() + { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + meetingListBySearchNew("1","","",""); + } + private void meetingListBySearchNew(String page,String year,String month,String title) + { + showLoadingProgress(); + Map param = new HashMap(); + param.put("page", page); + param.put("year", year); + param.put("month", month); + param.put("title", title); + sendJsonPostParamtoNetSignMD5(getHistoryMeetingList, param, 101, this); + } + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("gdxzhistory",resultJson); + switch (resultCode) + { + case 101: + processData(resultJson); + break; + } + } + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + MeetingBean bean = GsonTools.fromGsonToBean(result, MeetingBean.class); +// if (StringUtil.isOneToCode(bean.code)) { +// ToastUtil.showToast(bean.message); +// // 显示空布局 +// ptrLv.setEmptyView(ll_empty); +// // 完成刷新 +// onLoaded(); +// return; +// } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + getPosition(); + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多会议了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + public List DatasList; + + public void getPosition() { + DatasList = new ArrayList(); + int count = 0; + for (int i = 0; i < mList.size(); i++) { + if (!DatasList.contains(mList.get(i).getBegin_date() + .substring(0, 7))) { + DatasList.add(mList.get(i).getBegin_date().substring(0, 7)); + // Positions.add(i + ""); + count = 0; + mList.get(i).setCount(count); + } else { + count++; + mList.get(i).setCount(count); + } + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new HistoryMeetingAdapter(HistoryMettingActivity.this, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + public void chengeImg(DrawableCenterButtonR mDb_sort,String text){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } + public void chengeImgl(DrawableCenterButtonR mDb_sort,String text){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.meeting_selector); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + mDb_sort.setText(text); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HomeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HomeActivity.java new file mode 100644 index 0000000..221c90d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HomeActivity.java @@ -0,0 +1,54 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * HomeActivity.java + * + * 功能说明:测试专用。。。。。。。。。。。。。。。。。。。 + */ +public class HomeActivity extends BaseActivity { + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(""); + top_right_text.setText(""); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.fragment_home); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + showProgressDialog(null); + closeProgressDialog(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + + return ResultState.STATE_SUCCESSED; + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalDetialActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalDetialActivity.java new file mode 100644 index 0000000..0a2ac96 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalDetialActivity.java @@ -0,0 +1,1062 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.google.gson.JsonSyntaxException; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SetListViewHeightBasedOnChildrenUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class HospitalDetialActivity extends BaseActivity implements + OnCallBackFromNet, OnClickListener { + private View mTopView; + private TextView tv_follow_number, tv_comprehensive, tv_technology, + tv_attitude, tv_hospital, tv_environment, tv_position, + tv_pay_attention, tv_telephone, tv_intro, tv_notice_1, + tv_case_name1, tv_scoretotal1, tv_1score1, tv_1score2, tv_1score3, + tv_gandan_comments1, tv_creatdate1, tv_replay_num1, tv_case_name2, + tv_scoretotal2, tv_2score1, tv_2score2, tv_2score3, + tv_gandan_comments2, tv_creatdate2, tv_replay_num2, + tv_video1_title, tv_video2_title, tv_video1_date, tv_video2_date; + + private ImageView iv_hospital, dis_1img_01, dis_1img_02, dis_1img_03, + dis_2img_01, dis_2img_02, dis_2img_03, iv_video1_image, + iv_video2_image; + private LinearLayout ll_leave_msg1, ll_leave_msg2, ll_imgs1, ll_imgs2, + ll_leave_msg, ll_doctor; + private RelativeLayout rl_proclamation_more, rl_telephone, rl_intro, + rl_doctor_more, rl_video_more, rl_video1, rl_video2; + private DrawableCenterButton mgg,dcb_video,dcb_dongtai,dcb_doctor; + private boolean isH = true; + private RelativeLayout rl_dongtai_more; + private ListView lv_gandan_dingtai; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + mTopView = UIUtils.inflate(R.layout.activity_hospital_top); + hospitalUuid = getIntent().getStringExtra("hospital_uuid"); + mgg = (DrawableCenterButton) mTopView.findViewById(R.id.db_gg); + dcb_video = (DrawableCenterButton) mTopView.findViewById(R.id.dcb_video); + dcb_dongtai = (DrawableCenterButton) mTopView.findViewById(R.id.dcb_dongtai); + dcb_doctor = (DrawableCenterButton) mTopView.findViewById(R.id.dcb_doctor); + String type = getIntent().getType(); + if (type != null && type.equals("department")) { + mgg.setText("科室公告"); + top_title.setText("科室详情"); + dcb_video.setText(getResources().getString(R.string.keshivideo)); + dcb_dongtai.setText(getResources().getString(R.string.keshidongtai)); + + isH = false; + } else { + mgg.setText("医院公告"); + top_title.setText("医院详情"); + dcb_video.setText(getResources().getString(R.string.hospitolvideo)); + dcb_dongtai.setText(getResources().getString(R.string.hospitoldongtai)); + + } + initView(); + initListener(); + + getHospitalNews(hospitalUuid, SharePrefUtil.getString( + HospitalDetialActivity.this, "uuid", "")); + return mTopView; + } + + private void initView() { + // 第一個医生 + rl_doctor = (RelativeLayout) mTopView.findViewById(R.id.rl_doctor); + iv_doctor_phont = mTopView + .findViewById(R.id.iv_doctor_phont); + tv_doctor_name = (TextView) mTopView.findViewById(R.id.tv_doctor_name); + tv_doctor_position = (TextView) mTopView + .findViewById(R.id.tv_doctor_position); + tv_flower_num = (TextView) mTopView.findViewById(R.id.tv_flower_num); + tv_patient_num = (TextView) mTopView.findViewById(R.id.tv_patient_num); + tv_con_num = (TextView) mTopView.findViewById(R.id.tv_con_num); + // 第二個醫生 + rl_doctor2 = (RelativeLayout) mTopView.findViewById(R.id.rl_doctor2); + iv_doctor_phont2 = mTopView + .findViewById(R.id.iv_doctor_phont2); + tv_doctor_name2 = (TextView) mTopView + .findViewById(R.id.tv_doctor_name2); + tv_doctor_position2 = (TextView) mTopView + .findViewById(R.id.tv_doctor_position2); + tv_flower_num2 = (TextView) mTopView.findViewById(R.id.tv_flower_num2); + tv_patient_num2 = (TextView) mTopView + .findViewById(R.id.tv_patient_num2); + tv_con_num2 = (TextView) mTopView.findViewById(R.id.tv_con_num2); + tv_leave_msg_num = (TextView) mTopView + .findViewById(R.id.tv_leave_msg_num); + tv_pay_attention = (TextView) mTopView + .findViewById(R.id.tv_pay_attention); + ll_doctor = (LinearLayout) mTopView.findViewById(R.id.ll_doctor); + tv_notice_1 = (TextView) mTopView.findViewById(R.id.tv_notice_1); + tv_hospital = (TextView) mTopView.findViewById(R.id.tv_hospital); + iv_hospital = (ImageView) mTopView.findViewById(R.id.iv_hospital); + tv_comprehensive = (TextView) mTopView + .findViewById(R.id.tv_comprehensive); + tv_technology = (TextView) mTopView.findViewById(R.id.tv_technology); + tv_attitude = (TextView) mTopView.findViewById(R.id.tv_attitude); + tv_environment = (TextView) mTopView.findViewById(R.id.tv_environment); + tv_follow_number = (TextView) mTopView + .findViewById(R.id.tv_follow_number); + tv_video1_title = (TextView) mTopView + .findViewById(R.id.tv_video1_title); + tv_video2_title = (TextView) mTopView + .findViewById(R.id.tv_video2_title); + tv_video1_date = (TextView) mTopView.findViewById(R.id.tv_video1_date); + tv_video2_date = (TextView) mTopView.findViewById(R.id.tv_video2_date); + + tv_position = (TextView) mTopView.findViewById(R.id.tv_position); + tv_telephone = (TextView) mTopView.findViewById(R.id.tv_telephone); + tv_intro = (TextView) mTopView.findViewById(R.id.tv_intro); + tv_case_name1 = (TextView) mTopView.findViewById(R.id.tv_case_name1); + tv_scoretotal1 = (TextView) mTopView.findViewById(R.id.tv_scoretotal1); + tv_1score1 = (TextView) mTopView.findViewById(R.id.tv_1score1); + tv_1score2 = (TextView) mTopView.findViewById(R.id.tv_1score2); + tv_1score3 = (TextView) mTopView.findViewById(R.id.tv_1score3); + tv_gandan_comments1 = (TextView) mTopView + .findViewById(R.id.tv_gandan_comments1); + tv_creatdate1 = (TextView) mTopView.findViewById(R.id.tv_creatdate1); + tv_replay_num1 = (TextView) mTopView.findViewById(R.id.tv_replay_num1); + ll_imgs1 = (LinearLayout) mTopView.findViewById(R.id.ll_imgs1); + ll_imgs2 = (LinearLayout) mTopView.findViewById(R.id.ll_imgs2); + tv_case_name2 = (TextView) mTopView.findViewById(R.id.tv_case_name2); + tv_scoretotal2 = (TextView) mTopView.findViewById(R.id.tv_scoretotal2); + tv_2score1 = (TextView) mTopView.findViewById(R.id.tv_2score1); + tv_2score2 = (TextView) mTopView.findViewById(R.id.tv_2score2); + tv_2score3 = (TextView) mTopView.findViewById(R.id.tv_2score3); + tv_gandan_comments2 = (TextView) mTopView + .findViewById(R.id.tv_gandan_comments2); + tv_creatdate2 = (TextView) mTopView.findViewById(R.id.tv_creatdate2); + tv_replay_num2 = (TextView) mTopView.findViewById(R.id.tv_replay_num2); + dis_1img_01 = (ImageView) mTopView.findViewById(R.id.dis_1img_01); + dis_1img_02 = (ImageView) mTopView.findViewById(R.id.dis_1img_02); + dis_1img_03 = (ImageView) mTopView.findViewById(R.id.dis_1img_03); + dis_2img_01 = (ImageView) mTopView.findViewById(R.id.dis_2img_01); + dis_2img_02 = (ImageView) mTopView.findViewById(R.id.dis_2img_02); + dis_2img_03 = (ImageView) mTopView.findViewById(R.id.dis_2img_03); + iv_video1_image = (ImageView) mTopView + .findViewById(R.id.iv_video1_image); + iv_video2_image = (ImageView) mTopView + .findViewById(R.id.iv_video2_image); + + ll_leave_msg1 = (LinearLayout) mTopView + .findViewById(R.id.ll_leave_msg1); + ll_leave_msg2 = (LinearLayout) mTopView + .findViewById(R.id.ll_leave_msg2); + ll_leave_msg = (LinearLayout) mTopView.findViewById(R.id.ll_leave_msg); + // rl_proclamation_more,rl_telephone,rl_intro,rl_doctor_more + rl_proclamation_more = (RelativeLayout) mTopView + .findViewById(R.id.rl_proclamation_more); + rl_telephone = (RelativeLayout) mTopView + .findViewById(R.id.rl_telephone); + rl_intro = (RelativeLayout) mTopView.findViewById(R.id.rl_intro); + rl_doctor_more = (RelativeLayout) mTopView + .findViewById(R.id.rl_doctor_more); + rl_video_more = (RelativeLayout) mTopView + .findViewById(R.id.rl_video_more); + rl_video1 = (RelativeLayout) mTopView.findViewById(R.id.rl_video1); + rl_video2 = (RelativeLayout) mTopView.findViewById(R.id.rl_video2); + + rl_dongtai_more = (RelativeLayout) mTopView.findViewById(R.id.rl_dongtai_more); + lv_gandan_dingtai = (ListView) mTopView.findViewById(R.id.lv_gandan_dingtai); + + + + } + + public void initListener() { + rl_video_more.setOnClickListener(this); + rl_video1.setOnClickListener(this); + rl_video2.setOnClickListener(this); + rl_dongtai_more.setOnClickListener(this); + + tv_pay_attention.setOnClickListener(this); + ll_leave_msg.setOnClickListener(this); + rl_proclamation_more.setOnClickListener(this); + rl_telephone.setOnClickListener(this); + rl_intro.setOnClickListener(this); + rl_doctor_more.setOnClickListener(this); + ll_leave_msg1.setOnClickListener(this); + ll_leave_msg2.setOnClickListener(this); + } + + public final int GET_SCOLL_RESULT = 101; + + private void getHospitalNews(String hospital_uuid, String uuid) { + showProgressDialog("加载中"); + Map param = new HashMap(); + param.put("uuid", hospital_uuid); + param.put("user_uuid", uuid); + + sendJsonPostParamtoNet(Url.getganDanHospitalDetial, param, 01, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + } + + protected static final int GET_DATA_SUCCESS = 100; // 请求数据成功的结果码 + @SuppressLint("HandlerLeak") + private Handler handler = new Handler() { + + public void handleMessage(Message msg) { + switch (msg.what) { + case GET_DATA_SUCCESS: + if (bean == null || bean.getData() == null) { + return; + } + if (!TextUtils.isEmpty(bean.getData().getImg())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + bean.getData().getImg(), + iv_hospital, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default)); + } + // 医院名 + tv_hospital.setText(bean.getData().getName()); + // 关注人数 + + tv_follow_number.setText(String.valueOf(bean.getData() + .getFcousnum())); + // 是否关注 + if (bean.getData().getIsfocus() == 1) { + tv_pay_attention.setText("已关注"); + tv_pay_attention + .setBackgroundResource(R.drawable.select_btn); + } else { + tv_pay_attention.setText("+关注"); + tv_pay_attention + .setBackgroundResource(R.drawable.selector_btn); + } + + // 四项评分 + tv_comprehensive.setText(Math.round(Double.parseDouble(bean + .getData().getScoretotal()) * 10) / 10.0 + ""); + tv_technology.setText(Math.round(Double.parseDouble(bean + .getData().getScore1()) * 10) / 10.0 + ""); + tv_attitude.setText(Math.round(Double.parseDouble(bean + .getData().getScore2()) * 10) / 10.0 + ""); + tv_environment.setText(Math.round(Double.parseDouble(bean + .getData().getScore3()) * 10) / 10.0 + ""); + // 医院信息 + tv_position.setText(bean.getData().getAddress()); + tv_telephone.setText(bean.getData().getMobile()); + tv_intro.setText(bean.getData().getIntro()); + // 医院公告 + if (!StringUtil.isEmpty(bean.getData().getProclamation())) { + tv_notice_1.setVisibility(View.VISIBLE); + tv_notice_1.setText(bean.getData().getProclamation()); + + } + + //肝胆动态 + + if (bean.getData().getDongtai()!=null&&bean.getData().getDongtai().size()>0) { + lv_gandan_dingtai.setVisibility(View.VISIBLE); + if(bean.getData().getDongtai().size() == 1){ + GandanDongtaiListAdapter adapter = new GandanDongtaiListAdapter(bean.getData().getDongtai()); + lv_gandan_dingtai.setAdapter(adapter); + + }else{ + List video = new ArrayList<>(); + for(int i = 0;i<2;i++){ + video.add(bean.getData().getDongtai().get(i)); + } + + GandanDongtaiListAdapter adapter = new GandanDongtaiListAdapter(video); + lv_gandan_dingtai.setAdapter(adapter); + SetListViewHeightBasedOnChildrenUtil.SetListViewHeightBasedOnChildren(lv_gandan_dingtai,adapter); + } + }else { + lv_gandan_dingtai.setVisibility(View.GONE); + } + lv_gandan_dingtai.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { +// ToastUtil.showMessage(position); + // TODO Auto-generated method stub + /* Intent intent = new Intent(HospitalDetialActivity.this, GDEventDetailActivity.class); + intent.putExtra("newsTitle", bean.getData().getDongtai().get(position).getTITLE()); + if ( bean.getData().getDongtai().get(position).getEditType()==1) { + intent.putExtra("url", Url.urlHtml + bean.getData().getDongtai().get(position).getPath()); + }else { + intent.putExtra("url",bean.getData().getDongtai().get(position).getPath()); + } + intent.putExtra("summary", bean.getData().getDongtai().get(position).getAuthor()); + intent.setType("dongtai"); + startActivity(intent); + */ + Intent intent = new Intent(HospitalDetialActivity.this, NewsDetailActivity.class); + intent.putExtra("newsTitle", bean.getData().getDongtai().get(position).getTITLE()); + if ( bean.getData().getDongtai().get(position).getEditType()==1) { + intent.putExtra("url", Url.urlHtml + bean.getData().getDongtai().get(position).getPath()); + }else { + intent.putExtra("url",bean.getData().getDongtai().get(position).getPath()); + } + // intent.putExtra("title", news.title); + intent.putExtra("title", "动态详情"); + intent.putExtra("summary", "名院名科名医,来肝胆相照做\"名\"星"); + intent.putExtra("flag", 1); + startActivity(intent); + + } + }); + + + + + // 肝胆视频 + if (bean.getData().getVideo().size() > 0) { + rl_video1.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(bean.getData().getVideo().get(0) + .getImgpath())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData().getVideo() + .get(0).getImgpath(), + iv_video1_image, + ImageOptions + .getImageOptions(R.drawable.default_news_iv)); + } else { + iv_video1_image + .setImageResource(R.drawable.default_news_iv); + } + tv_video1_title.setText(bean.getData().getVideo().get(0) + .getName()); + tv_video1_date.setText(bean.getData().getVideo().get(0) + .getPublic_name()); + + } + if (bean.getData().getVideo().size() > 1) { + rl_video2.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(bean.getData().getVideo().get(1) + .getImgpath())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData().getVideo() + .get(1).getImgpath(), + iv_video2_image, + ImageOptions + .getImageOptions(R.drawable.default_news_iv)); + } else { + iv_video2_image + .setImageResource(R.drawable.default_news_iv); + } + tv_video2_title.setText(bean.getData().getVideo().get(1) + .getName()); + tv_video2_date.setText(bean.getData().getVideo().get(1) + .getPublic_name()); + } + + // 肝胆医生 + if (bean.getData().getExpert().size() > 0) { + + // private TextView , , + // tv_con_num, + // tv_patient_numtv_flower_num; + ll_doctor.setVisibility(View.VISIBLE); + rl_doctor.setVisibility(View.VISIBLE); + + rl_doctor.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent( + HospitalDetialActivity.this, + ExpertDetailActivity.class); + intent.putExtra("uuid", bean.getData().getExpert() + .get(0).getUuid()); + if (!TextUtils.isEmpty(bean.getData().getExpert() + .get(0).getUuid())) { + startActivity(intent); + + } + } + }); + + if (!TextUtils.isEmpty(bean.getData().getExpert().get(0) + .getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData().getExpert() + .get(0).getPhoto(), + iv_doctor_phont, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + iv_doctor_phont + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + tv_doctor_name.setText(bean.getData().getExpert().get(0) + .getRealname()); + tv_doctor_position.setText(bean.getData().getExpert() + .get(0).getPosition()); + + tv_flower_num.setText(":" + + bean.getData().getExpert().get(0).getFlowernum() + + ""); + tv_patient_num.setText(":" + + bean.getData().getExpert().get(0).getFllownum() + + ""); + tv_con_num.setText(":" + + bean.getData().getExpert().get(0).getConsultnum() + + ""); + } + if (bean.getData().getExpert().size() > 1) { + rl_doctor2.setVisibility(View.VISIBLE); + rl_doctor2.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent( + HospitalDetialActivity.this, + ExpertDetailActivity.class); + intent.putExtra("uuid", bean.getData().getExpert() + .get(1).getUuid()); + if (!TextUtils.isEmpty(bean.getData().getExpert() + .get(1).getUuid())) { + startActivity(intent); + + } + } + }); + + if (!TextUtils.isEmpty(bean.getData().getExpert().get(1) + .getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData().getExpert() + .get(1).getPhoto(), + iv_doctor_phont2, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + iv_doctor_phont2 + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + tv_doctor_name2.setText(bean.getData().getExpert().get(1) + .getRealname()); + tv_doctor_position2.setText(bean.getData().getExpert() + .get(1).getPosition()); + + tv_flower_num2.setText(":" + + bean.getData().getExpert().get(1).getFlowernum() + + ""); + tv_patient_num2.setText(":" + + bean.getData().getExpert().get(1).getFllownum() + + ""); + tv_con_num2.setText(":" + + bean.getData().getExpert().get(1).getConsultnum() + + ""); + } + // tv_case_name1, tv_scoretotal1, + // tv_1score1, tv_1score2, tv_1score3, tv_gandan_comments1, + // tv_creatdate1, tv_replay_num1 + if (bean.getData().getGandanHospitalMsssage().size() > 0) { + ll_leave_msg1.setVisibility(View.VISIBLE); + if(!StringUtil.isEmpty(bean.getData().getGandanHospitalMsssage().get(0).getPublish_realname())) + { + tv_case_name1.setText(bean.getData().getGandanHospitalMsssage().get(0).getPublish_realname().substring(0, 1)+ "**"); + } + else + { + tv_case_name1.setText("(**"); + } + + tv_scoretotal1.setText(bean.getData() + .getGandanHospitalMsssage().get(0).getScoretotal() + + ""); + tv_1score1.setText(bean.getData() + .getGandanHospitalMsssage().get(0).getScore1() + + ""); + tv_1score2.setText(bean.getData() + .getGandanHospitalMsssage().get(0).getScore2() + + ""); + tv_1score3.setText(bean.getData() + .getGandanHospitalMsssage().get(0).getScore3() + + ""); + tv_gandan_comments1.setText(bean.getData() + .getGandanHospitalMsssage().get(0).getContent()); + tv_creatdate1 + .setText(bean.getData().getGandanHospitalMsssage() + .get(0).getCreate_date()); + tv_replay_num1.setText(bean.getData() + .getGandanHospitalMsssage().get(0).getReplay_num() + + ""); + if (!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(0).getImg1())) { + dis_1img_01.setVisibility(View.VISIBLE); + ll_imgs1.setVisibility(View.VISIBLE); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData() + .getGandanHospitalMsssage() + .get(0).getImg1(), + dis_1img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + if (!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(0).getImg2())) { + dis_1img_02.setVisibility(View.VISIBLE); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData() + .getGandanHospitalMsssage() + .get(0).getImg2(), + dis_1img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + if (!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(0).getImg3())) { + dis_1img_03.setVisibility(View.VISIBLE); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData() + .getGandanHospitalMsssage() + .get(0).getImg3(), + dis_1img_03, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + + } + if (bean.getData().getGandanHospitalMsssage().size() > 1) { + + ll_leave_msg2.setVisibility(View.VISIBLE); + if(!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(1) + .getPublish_realname())) + { + tv_case_name2.setText(bean.getData() + .getGandanHospitalMsssage().get(1) + .getPublish_realname()); + } + else + { + tv_case_name2.setText("(**"); + } + + tv_scoretotal2.setText(bean.getData() + .getGandanHospitalMsssage().get(1).getScoretotal() + + ""); + tv_2score1.setText(bean.getData() + .getGandanHospitalMsssage().get(1).getScore1() + + ""); + tv_2score2.setText(bean.getData() + .getGandanHospitalMsssage().get(1).getScore2() + + ""); + tv_2score3.setText(bean.getData() + .getGandanHospitalMsssage().get(1).getScore3() + + ""); + tv_gandan_comments2.setText(bean.getData() + .getGandanHospitalMsssage().get(1).getContent()); + tv_creatdate2 + .setText(bean.getData().getGandanHospitalMsssage() + .get(1).getCreate_date()); + tv_replay_num2.setText(bean.getData() + .getGandanHospitalMsssage().get(1).getReplay_num() + + ""); + if (!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(1).getImg1())) { + ll_imgs2.setVisibility(View.VISIBLE); + dis_2img_01.setVisibility(View.VISIBLE); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData() + .getGandanHospitalMsssage() + .get(1).getImg1(), + dis_2img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + if (!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(1).getImg2())) { + dis_2img_02.setVisibility(View.VISIBLE); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData() + .getGandanHospitalMsssage() + .get(1).getImg2(), + dis_2img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + if (!StringUtil.isEmpty(bean.getData() + .getGandanHospitalMsssage().get(1).getImg3())) { + dis_2img_03.setVisibility(View.VISIBLE); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + + bean.getData() + .getGandanHospitalMsssage() + .get(1).getImg3(), + dis_2img_03, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + } + + break; + + default: + break; + } + } + + }; + private HospitalDetialBean bean; + private String hospitalUuid; + // 肝胆医生第一個 + private RelativeLayout rl_doctor; + private ImageView iv_doctor_phont; + private TextView tv_doctor_name, tv_doctor_position, tv_con_num, + tv_patient_num, tv_flower_num; + + // 第二个医生 + private RelativeLayout rl_doctor2; + private ImageView iv_doctor_phont2; + private TextView tv_doctor_name2, tv_doctor_position2, tv_con_num2, + tv_patient_num2, tv_flower_num2, tv_leave_msg_num; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + LogUtil.e(resultJson.toString()); + switch (resultCode) { + case 01: + closeProgressDialog(); + Gson gson = new Gson(); + try { + bean = gson.fromJson(resultJson, HospitalDetialBean.class); + } catch (JsonSyntaxException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + if (bean.getCode() == 1) { + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } else { + ToastUtil.showMessage(bean.getMessage()); + return; + } + + break; + + case 02: + try { + JSONObject jo = new JSONObject(resultJson); + int code = jo.getInt("code"); + ToastUtil.showMessage(jo.getString("message")); + if (code == 1) { + tv_pay_attention.setText("已关注"); + tv_pay_attention + .setBackgroundResource(R.drawable.select_btn); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 03: + try { + JSONObject jo = new JSONObject(resultJson); + int code = jo.getInt("code"); + ToastUtil.showMessage(jo.getString("message")); + if (code == 1) { + tv_pay_attention.setText("+关注"); + tv_pay_attention + .setBackgroundResource(R.drawable.selector_btn); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + + default: + break; + } + } + + private void payAttention(String hospitalUuid2, String uuid) { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("uuid", hospitalUuid2); + param.put("user_uuid", uuid); + sendJsonPostParamtoNet(Url.getaddFocusganDanHospital, param, 02, this); + } + + private void payOffAttention(String hospitalUuid2, String uuid) { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("uuid", hospitalUuid2); + param.put("user_uuid", uuid); + sendJsonPostParamtoNet(Url.getcancleFocusganDanHospital, param, 03, + this); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.tv_pay_attention: + + if (tv_pay_attention.getText().equals("已关注")) { + // 取消关注医院 + payOffAttention(hospitalUuid, SharePrefUtil.getString( + HospitalDetialActivity.this, "uuid", "")); + // tv_follow_number.setText(String.valueOf(tv_follow_number.getText().toString() + // - 1)); + tv_follow_number.setText(Integer.parseInt(tv_follow_number + .getText().toString()) - 1 + ""); + } else { + // 关注医院 + payAttention(hospitalUuid, SharePrefUtil.getString( + HospitalDetialActivity.this, "uuid", "")); + tv_follow_number.setText(Integer.parseInt(tv_follow_number + .getText().toString()) + 1 + ""); + } + + break; + // 更多公告 + case R.id.rl_proclamation_more: + Intent intent = new Intent(this, NewsDetailActivity.class); + intent.putExtra("url", Url.getProclamationAll + "?uuid=" + + hospitalUuid + "&page=1"); + intent.putExtra("title", "公告详情"); + intent.putExtra("hospital_uuid", hospitalUuid); + if (!isH) { + intent.putExtra("isExpert", bean.getIsExpertFromHospital()); + } + intent.putExtra("flag", 8); + startActivity(intent); + break; + // 电话 + case R.id.rl_telephone: + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + network(); + } else { + EasyWindow.with(HospitalDetialActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_phone).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + network(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + network(); + } + + + break; + + + + // 医院简介 + case R.id.rl_intro: + if (StringUtil.isEmpty(bean.getData().getIntro())) { + ToastUtil.showMessage("暂无简介"); + return; + } + Intent introintent = new Intent(this, NewsDetailActivity.class); + introintent.putExtra("url", Url.urlapp + "getinfo?uuid=" + + hospitalUuid); + if (isH) { + introintent.putExtra("title", "医院简介"); + } else { + introintent.putExtra("title", "科室简介"); + } + startActivity(introintent); + break; + // 更多医生 + case R.id.rl_doctor_more: + Intent Doctorintent = new Intent(this, MoreDoctorActivity.class); + Doctorintent.putExtra("uuid", hospitalUuid); + startActivity(Doctorintent); + break; + // 更多动态 + case R.id.rl_dongtai_more: + Intent intent3 = new Intent(this, MoreDongtaiActivity.class); + intent3.putExtra("hospitalUuid", hospitalUuid); + intent3.putExtra("title", dcb_dongtai.getText().toString()); + startActivity(intent3); + break; + // 更多患友留言 + case R.id.ll_leave_msg: + Intent Leaveintent = new Intent(this, MoreLeaveMsgActivity.class); + Leaveintent.putExtra("uuid", hospitalUuid); + startActivity(Leaveintent); + break; + case R.id.ll_leave_msg1: + Intent leavemsgintent = new Intent(this, LeaveMsgActivity.class); + leavemsgintent.putExtra("hospital_uuid", hospitalUuid); + leavemsgintent.putExtra("uuid", bean.getData() + .getGandanHospitalMsssage().get(0).getUuid()); + startActivity(leavemsgintent); + break; + case R.id.ll_leave_msg2: + Intent leavemsg2intent = new Intent(this, LeaveMsgActivity.class); + leavemsg2intent.putExtra("uuid", bean.getData() + .getGandanHospitalMsssage().get(1).getUuid()); + leavemsg2intent.putExtra("hospital_uuid", hospitalUuid); + startActivity(leavemsg2intent); + break; + case R.id.rl_video_more: + Intent Videointent = new Intent(this, MoreVideoActivity.class); + Videointent.putExtra("uuid", hospitalUuid); + Videointent.putExtra("title", dcb_video.getText().toString()); + startActivity(Videointent); + break; + case R.id.rl_video1: + Intent intentvideo1 = VideoDetailPolyvPlayerActivity.newIntent(this, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intentvideo1.putExtra("startNow", false); + intentvideo1.putExtra("isVlmsOnline", false); + intentvideo1.putExtra("url", bean.getData().getVideo().get(0) + .getPath()); + intentvideo1.putExtra("uuid", bean.getData().getVideo().get(0) + .getUuid()); + intentvideo1.putExtra("title", bean.getData().getVideo().get(0) + .getName()); + intentvideo1.putExtra("readnum", bean.getData().getVideo().get(0) + .getReadnum()); + intentvideo1.putExtra("imgpath", bean.getData().getVideo().get(0) + .getImgpath()); + intentvideo1.putExtra("public_name", + bean.getData().getVideo().get(0).getPublic_name()); + startActivity(intentvideo1); + break; + case R.id.rl_video2: + Intent intentvideo2 = VideoDetailPolyvPlayerActivity.newIntent(this, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intentvideo2.putExtra("startNow", false); + intentvideo2.putExtra("isVlmsOnline", false); + intentvideo2.putExtra("url", bean.getData().getVideo().get(1) + .getPath()); + intentvideo2.putExtra("uuid", bean.getData().getVideo().get(1) + .getUuid()); + intentvideo2.putExtra("title", bean.getData().getVideo().get(1) + .getName()); + intentvideo2.putExtra("readnum", bean.getData().getVideo().get(1) + .getReadnum()); + intentvideo2.putExtra("imgpath", bean.getData().getVideo().get(1) + .getImgpath()); + intentvideo2.putExtra("public_name", + bean.getData().getVideo().get(1).getPublic_name()); + startActivity(intentvideo2); + break; + default: + break; + } + + } + + private ECAlertDialog buildAlert; + + private void network() { + // TODO Auto-generated method stub + buildAlert = ECAlertDialog.buildAlert(HospitalDetialActivity.this, + "确定拨打电话?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + try { + // TODO Auto-generated method stub + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_CALL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:" + + bean.getData().getMobile())); + startActivity(intent); + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + + } + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(HospitalDetialActivity.this.getResources() + .getColor(R.color.top_title)); + buildAlert.show(); + } + + + private class GandanDongtaiListAdapter extends BaseAdapter { + + private List dongtai; + + public GandanDongtaiListAdapter(List video) { + // TODO Auto-generated constructor stub + this.dongtai = video; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return dongtai.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return dongtai.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh; + if (convertView == null) { + vh = new ViewHolder(); + convertView = UIUtils.inflate(R.layout.item_more_video); + vh.mTv_name = (TextView) convertView.findViewById(R.id.tv_video_title); + vh.mIV_video = (ImageView) convertView.findViewById(R.id.iv_video_image); + vh.mTv_date = (TextView) convertView.findViewById(R.id.tv_video_date); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_name.setText(dongtai.get(position).getTITLE()); + vh.mTv_date.setText(dongtai.get(position).getAuthor()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + dongtai.get(position).getHEAD_IMG(), + vh.mIV_video, + ImageOptions.getImageOptions(R.drawable.img_news_empty)); + + return convertView; + } + + public class ViewHolder { + public TextView mTv_name, mTv_date; + public ImageView mIV_video; + } + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalSearchActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalSearchActivity.java new file mode 100644 index 0000000..46e3c36 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/HospitalSearchActivity.java @@ -0,0 +1,234 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.GanDanHospitalAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GanDanHospitalBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class HospitalSearchActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + View view; + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + private TextView tv_nocase; + private CustomProgressDialog pd;// 自定义进度条 + private boolean isH = true; + private String title = ""; + private int page = 1; + private String url = Url.getGanDanHospital; + private List gdHospitalList = new ArrayList<>(); + private GanDanHospitalAdapter adapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_search_news); + tv_nocase = (TextView) view.findViewById(R.id.tv_empty_msg); + tv_nocase.setText("暂无搜索数据"); + pd = new CustomProgressDialog(HospitalSearchActivity.this, "请稍候"); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + lv_visit.setMode(Mode.BOTH); + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getHospitalData(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getHospitalData(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + lv_visit.setOnItemClickListener(this); + IntGetIntent(); + getHospitalData(); + return view; + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + lv_visit.onRefreshComplete(); + } + + private void IntGetIntent() { + // TODO Auto-generated method stub + String type = getIntent().getType(); + title = getIntent().getStringExtra("title"); + if (title == null) { + title = ""; + } + if (type != null && type.equals("Depart")) { + url = Url.getGanDanKeShi; + top_title.setText("肝胆名科"); + isH = false; + } else { + top_title.setText("肝胆名院"); + url = Url.getGanDanHospital; + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int ssss = lv_visit.getRefreshableView().getHeaderViewsCount(); + + Intent intent = new Intent(HospitalSearchActivity.this, + HospitalDetialActivity.class); + intent.putExtra("hospital_uuid", gdHospitalList.get(position - ssss) + .getUuid()); + if (isH) { + intent.setType("hospital"); + } else { + intent.setType("department"); + } + this.startActivity(intent); + + } + + private void getHospitalData() { + // TODO Auto-generated method stub + pd.show(); + Map param = new HashMap(); + param.put("page", page); + param.put("areaid", ""); + param.put("type", ""); + param.put("title", title); + param.put("sort", ""); + sendJsonPostParamtoNet(url, param, 01, this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + } + + GanDanHospitalBean HospitalBean; + + private void processData(String result) { + // TODO Auto-generated method stub + HospitalBean = GsonTools.fromGsonToBean(result, + GanDanHospitalBean.class); + lv_visit.onRefreshComplete(); + if (page == 1 && !HospitalBean.code.equals("1")) { + ToastUtil.showMessage(HospitalBean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + gdHospitalList.clear(); + // 数据为空 + + if (HospitalBean == null || HospitalBean.data.getList() == null + || HospitalBean.data.getList().size() == 0) { + ll_empty.setVisibility(View.VISIBLE); + onLoaded(); + setLastUpdateTime(); + pd.dismiss(); + } else { + ll_empty.setVisibility(View.GONE); + gdHospitalList.addAll(HospitalBean.data.getList()); + } + } else { + gdHospitalList.addAll(HospitalBean.data.getList()); + + } + + if (adapter == null) { + adapter = new GanDanHospitalAdapter(gdHospitalList, + HospitalSearchActivity.this, isH); + lv_visit.getRefreshableView().setAdapter(adapter); + } else { + adapter.getDatas(gdHospitalList); + adapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + pd.dismiss(); + // 得到总页码数 + long totalPage = HospitalBean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_visit.setMode(Mode.PULL_FROM_START); + + } else { + lv_visit.setMode(Mode.BOTH); + } + setLastUpdateTime(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/IWantDonateActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/IWantDonateActivity.java new file mode 100644 index 0000000..1169fdb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/IWantDonateActivity.java @@ -0,0 +1,432 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; +import android.widget.Toast; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 纪肖修改 + * + * @author 王帅 功能说明:爱心捐助->我要捐助 + * + */ +public class IWantDonateActivity extends BaseActivity implements + OnCheckedChangeListener { + + private View view; + private EditText et_donate_amounts;// 捐助数量 + private CheckBox isnotify;// 是否通知选择框 + private Button iwant;// 我要捐助按钮 + private String name; + private String phone; + private String amounts; + private int notify = 0; + private String content; + private String useRequirements; + public static final int ERROR = 101; + private EditText et_donor_name;// 捐助者姓名 + private View sexView; + private TextView tv_female; + private TextView tv_male; + private TextView tv_donor_content; + private TextView tv_donor_phone; + private TextView tv_use_useRequirements; + private Button btn_dismiss; + private TextView tv_sex; + private int selectSex = -1;// 性别 + private LinearLayout ll_name; + private LinearLayout ll_selected_sex; + private LinearLayout ll_phone; + private LinearLayout ll_content; + private LinearLayout ll_amounts; + private LinearLayout ll_useRequirements; + + private PopupWindow mPopupWindowDialog; + + @Override + public void setTitle() { + top_title.setText("我要捐助"); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.love_donate_iwant_new); + initView(); + return view; + } + + /** + * 初始化控件 + */ + private void initView() { + et_donor_name = (EditText) view.findViewById(R.id.et_donor_name);// 捐助者姓名 + tv_sex = (TextView) view.findViewById(R.id.tv_sex); + tv_donor_phone = (TextView) view.findViewById(R.id.tv_donor_phone);// 捐助者电话 + tv_donor_content = (TextView) view.findViewById(R.id.tv_donor_content);// 捐助内容 + et_donate_amounts = (EditText) view.findViewById(R.id.et_donate_amounts);// 捐助数量 + tv_use_useRequirements = (TextView) view.findViewById(R.id.tv_use_useRequirements);// 物品使用要求 + isnotify = (CheckBox) view.findViewById(R.id.isnotify); + iwant = (Button) view.findViewById(R.id.iwant);// 确定按钮 + ll_name = (LinearLayout) view.findViewById(R.id.ll_name); + ll_selected_sex = (LinearLayout) view.findViewById(R.id.ll_selected_sex); + ll_phone = (LinearLayout) view.findViewById(R.id.ll_phone); + ll_content = (LinearLayout) view.findViewById(R.id.ll_content); + ll_amounts = (LinearLayout) view.findViewById(R.id.ll_amounts); + ll_useRequirements = (LinearLayout) view.findViewById(R.id.ll_useRequirements); + //设置监听 + isnotify.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (isnotify.isChecked()) { + notify = 1; + } else { + notify = 0; + } + } + }); + iwant.setOnClickListener(this); + ll_name.setOnClickListener(this); + ll_selected_sex.setOnClickListener(this); + ll_phone.setOnClickListener(this); + ll_content.setOnClickListener(this); + ll_amounts.setOnClickListener(this); + ll_useRequirements.setOnClickListener(this); + et_donor_name.setOnClickListener(this); + + } + + /** + * 处理选择男女 + */ + private void selectedSex() { + // TODO Auto-generated method stub + tv_male.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + tv_sex.setText("男"); + selectSex = 0; + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + tv_female.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + tv_sex.setText("女"); + selectSex = 1; + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + btn_dismiss.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + } + + /** + * 显示弹出框 + * setPopupWindowDialog + * + * void + */ + protected void setPopupWindowDialog() { + mPopupWindowDialog = new PopupWindow(sexView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + + /** + * 提交 + */ + public void iwant() { + // note=tv_donor_note.getText().toString().trim(); + name = et_donor_name.getText().toString().trim(); + phone = tv_donor_phone.getText().toString().trim(); + content = tv_donor_content.getText().toString().trim(); + amounts = et_donate_amounts.getText().toString().trim(); + useRequirements = tv_use_useRequirements.getText().toString().trim(); + //验证输入数据 + if (!UIUtils.isNetWorkConnected(this)) { + Toast.makeText(this, "网络暂时不可用", Toast.LENGTH_SHORT).show(); + return; + } + if (TextUtils.isEmpty(name) || TextUtils.isEmpty(phone) + || TextUtils.isEmpty(content) || TextUtils.isEmpty(amounts) + || TextUtils.isEmpty(useRequirements)) { + Toast.makeText(this, "请完善捐助信息,再次提交。", Toast.LENGTH_SHORT).show(); + return; + } + if (selectSex == -1) { + ToastUtil.showMessage("请选择性别"); + return; + } + showProgressDialog("提交中..."); + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("name", name); + params.addBodyParameter("sex", String.valueOf(selectSex)); + params.addBodyParameter("phone", phone); + params.addBodyParameter("content", content); + params.addBodyParameter("amounts", amounts); + params.addBodyParameter("useRequirements", useRequirements); + params.addBodyParameter("donateType", "2"); + params.addBodyParameter("donaterUuid", uuid); + + params.addBodyParameter("otherCanSee", String.valueOf(notify)); + LogUtil.i("donaterUuid==" + uuid + "sex==" + String.valueOf(selectSex) + + "phone==" + phone + "content==" + content + "amounts==" + + amounts + "useRequirements==" + useRequirements + + "donateType==" + "2" + "otherCanSee==" + + String.valueOf(notify) + "details==" + "详情" + "name==" + name); + HttpHelper.loadData(HttpMethod.POST, Url.getSubmitLove, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + ToastUtil.showToast("谢谢您的捐助"); + Intent intent = new Intent(); + intent.putExtra("flag", 1); + setResult(Constant.DONATE_CODE, intent); + AppManager.getAppManager().finishActivity( + IWantDonateActivity.this); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + closeProgressDialog(); + ToastUtil.showToast("提交失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("submit().onFailure = " + arg1); + closeProgressDialog(); + ToastUtil.showToast("提交失败!"); + } + + }); + LogUtil.i("url=======" + Url.getSubmitLove); + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 性别监听 + */ + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + switch (checkedId) { + case R.id.rb_sex_male: + selectSex = 0;// 男 + break; + case R.id.rb_sex_female: + selectSex = 1;// 女 + break; + + } + } + + /** + * 执行返回结果 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + if (data == null) { + return; + } + // 姓名 + if (requestCode == 521) { + + if (data.getStringExtra("name").equals("")) { + et_donor_name.setText(name); + + } else { + et_donor_name.setText(data.getStringExtra("name")); + } + } + // 电话 + if (requestCode == 522) { + if (data.getStringExtra("phone").equals("")) { + tv_donor_phone.setText(phone); + } else { + tv_donor_phone.setText(data.getStringExtra("phone")); + } + } + // 内容 + if (requestCode == 523) { + + if (data.getStringExtra("content").equals("")) { + tv_donor_content.setText(content); + } else { + tv_donor_content.setText(data.getStringExtra("content")); + } + } + // 数量 + if (requestCode == 524) { + + if (data.getStringExtra("amounts").equals("")) { + et_donate_amounts.setText(amounts); + } else { + et_donate_amounts.setText(data.getStringExtra("amounts")); + } + } + // 说明 + if (requestCode == 525) { + + if (data.getStringExtra("useRequirements").equals("")) { + tv_use_useRequirements.setText(useRequirements); + } else { + tv_use_useRequirements.setText(data + .getStringExtra("useRequirements")); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.iwant:// 提交 + iwant(); + break; + case R.id.ll_name: + Intent intent = new Intent(IWantDonateActivity.this, + LoveEditName.class); + intent.setType("1"); + intent.putExtra("name", et_donor_name.getText().toString().trim()); + startActivityForResult(intent, 521); + break; + case R.id.et_donor_name: + Intent intt = new Intent(IWantDonateActivity.this, + LoveEditName.class); + intt.setType("1"); + intt.putExtra("name", et_donor_name.getText().toString().trim()); + startActivityForResult(intt, 521); + break; + case R.id.ll_selected_sex: + sexView = UIUtils.inflate(R.layout.popupwindow_selected_sex_); + tv_male = (TextView) sexView.findViewById(R.id.tv_male); + tv_female = (TextView) sexView.findViewById(R.id.tv_female); + btn_dismiss = (Button) sexView.findViewById(R.id.btn_dismiss); + setPopupWindowDialog(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + } + selectedSex(); + break; + case R.id.ll_phone: + Intent intent2 = new Intent(IWantDonateActivity.this, + LoveEditName.class); + intent2.setType("2"); + intent2.putExtra("phone", tv_donor_phone.getText().toString() + .trim()); + startActivityForResult(intent2, 522); + break; + case R.id.ll_content: + Intent intent3 = new Intent(IWantDonateActivity.this, + LoveContentEditActivity.class); + intent3.setType("3"); + intent3.putExtra("content", tv_donor_content.getText().toString() + .trim()); + startActivityForResult(intent3, 523); + break; + case R.id.ll_amounts: + Intent intent4 = new Intent(IWantDonateActivity.this, + LoveEditName.class); + intent4.setType("4"); + intent4.putExtra("amounts", et_donate_amounts.getText().toString() + .trim()); + startActivityForResult(intent4, 524); + break; + case R.id.ll_useRequirements: + Intent intent5 = new Intent(IWantDonateActivity.this, + LoveContentEditActivity.class); + intent5.setType("5"); + intent5.putExtra("useRequirements", tv_use_useRequirements + .getText().toString().trim()); + startActivityForResult(intent5, 525); + break; + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/IncomeDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/IncomeDetailActivity.java new file mode 100644 index 0000000..6dad0d5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/IncomeDetailActivity.java @@ -0,0 +1,92 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.IncomeDetailsAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.OrderBean.OrderData; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * IncomeDetailActivity.java + * + * @author liufang + * @date 2015-11-24 下午3:58:21 + * + * 功能说明:我的-账户-收支明细页面 + */ +public class IncomeDetailActivity extends BaseActivity { + private PullToRefreshListView ptrLv; + private TextView load_empty; + private IncomeDetailsAdapter mAdapter; + private List mList; + + @Override + public void setTitle() { + top_title.setText("账单明细"); + //取出列表值 + mList = getIntent().getParcelableArrayListExtra("income_details"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_income_details, null); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.list_view);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + // 设置只有下拉刷新 + ptrLv.setMode(Mode.DISABLED); + + initData(); + return view; + } + + /** + * 实例化数据 + */ + private void initData() { + if (mList != null && !mList.isEmpty()) { + //隐藏空布局 + load_empty.setVisibility(View.GONE); + processData(); + } else { + // 显示空布局 + load_empty.setVisibility(View.VISIBLE); + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData() { + if (mAdapter == null) { + mAdapter = new IncomeDetailsAdapter(ct, mList); + ptrLv.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/InfomationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/InfomationActivity.java new file mode 100644 index 0000000..322ffe6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/InfomationActivity.java @@ -0,0 +1,1798 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.cancelBackground; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.lucencyBackground; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.Editable; +import android.text.InputType; +import android.text.TextWatcher; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.BaseInfoBean; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm4; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.view.KeyboardLayout; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class InfomationActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + + KeyboardLayout detailMainRL; + @Override + public void setTitle() { + top_title.setText("基本信息"); + + } + View view; + TextView new_suifang; + TextView yiwen1,yiwen2,tv_bir; + RadioGroup grop3,grop5; + LinearLayout l1,l2; + TextView t1,t2; + EditText year1,month1,year2,month2,phone,ed_other,tv_birs; + int mon1=0,mon2=0,y1=0,y2=0; + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + String patientcaseId,patientNo,name,baseinfoDataStatus; + RadioButton tab_rbn_1,tab_rbn_2,tab_rbn_3,tab_rbn_4,tab_rbn_5,tab_rbn_6 + , tab_rbn_31,tab_rbn_32,tab_rbn_41,tab_rbn_42,tab_rbn_51,tab_rbn_52 + ,tab_rbn_61,tab_rbn_62,tab_rbn_71,tab_rbn_72 + ,tab_rbn_81,tab_rbn_82,tab_rbn_91,tab_rbn_92,tab_rbn_101,tab_rbn_102 + ,tab_rbn_111,tab_rbn_112,tab_rbn_121,tab_rbn_122; + + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_infomation); + detailMainRL = view.findViewById(R.id.main_ll); + tab_rbn_1=view.findViewById(R.id.tab_rbn_1); + tab_rbn_2=view.findViewById(R.id.tab_rbn_2); + tab_rbn_3=view.findViewById(R.id.tab_rbn_3); + tab_rbn_4=view.findViewById(R.id.tab_rbn_4); + tab_rbn_5=view.findViewById(R.id.tab_rbn_5); + tab_rbn_6=view.findViewById(R.id.tab_rbn_6); + tab_rbn_31=view.findViewById(R.id.tab_rbn_31); + tab_rbn_32=view.findViewById(R.id.tab_rbn_32); + tab_rbn_41=view.findViewById(R.id.tab_rbn_41); + tab_rbn_42=view.findViewById(R.id.tab_rbn_42); + tab_rbn_51=view.findViewById(R.id.tab_rbn_51); + tab_rbn_52=view.findViewById(R.id.tab_rbn_52); + tab_rbn_61=view.findViewById(R.id.tab_rbn_61); + tab_rbn_62=view.findViewById(R.id.tab_rbn_62); + tab_rbn_71=view.findViewById(R.id.tab_rbn_71); + tab_rbn_72=view.findViewById(R.id.tab_rbn_72); + tab_rbn_81=view.findViewById(R.id.tab_rbn_81); + tab_rbn_82=view.findViewById(R.id.tab_rbn_82); + tab_rbn_91=view.findViewById(R.id.tab_rbn_91); + tab_rbn_92=view.findViewById(R.id.tab_rbn_92); + tab_rbn_101=view.findViewById(R.id.tab_rbn_101); + tab_rbn_102=view.findViewById(R.id.tab_rbn_102); + tab_rbn_111=view.findViewById(R.id.tab_rbn_111); + tab_rbn_112=view.findViewById(R.id.tab_rbn_112); + tab_rbn_121=view.findViewById(R.id.tab_rbn_121); + tab_rbn_122=view.findViewById(R.id.tab_rbn_122); + phone=view.findViewById(R.id.phone); + phone.setInputType(InputType.TYPE_CLASS_NUMBER); + baseinfoDataStatus=getIntent().getStringExtra("dataStatus"); + tv_birs=view.findViewById(R.id.tv_birs); + tv_birs.setInputType(InputType.TYPE_CLASS_NUMBER); + + detailMainRL.setOnkbdStateListener(new KeyboardLayout.onKeyboaddsChangeListener() { + + public void onKeyBoardStateChange(int state) { + switch (state) { + case KeyboardLayout.KEYBOARD_STATE_HIDE: +// if(StringUtil.isEmpty(tv_birs.getText().toString())) +// { +// tv_bir.setText("请选择患者出生日期"); +// return; +// } + if(StringUtil.isEmpty(tv_birs.getText().toString())||Integer.valueOf(tv_birs.getText().toString())<18||Integer.valueOf(tv_birs.getText().toString())>50) + { + if(StringUtil.isEmpty(birthdayPost)) + { + tv_birs.setText(""); + } + else + { + tv_birs.setText(DateUtil.getAgeByBirthdays(birthdayPost)+""); + } + if(InfomationActivity.this.isFinishing()) + { + return ; + } + + ToastUtil.showToast("患者入组时年龄范围为18~50,该患者年龄不合格"); + return ; + } + Calendar cal = Calendar.getInstance(); + int yearNow=0; + if(!StringUtil.isEmpty(tv_birs.getText().toString())) + { + yearNow = cal.get(Calendar.YEAR)- Integer.valueOf(tv_birs.getText().toString()); + } + birthdayPost=yearNow+"-01-01"; + tv_bir.setText(birthdayPost.substring(0,4) + +"("+DateUtil.getAgeByBirthdays(birthdayPost)+"岁"+")"); + + break; + case KeyboardLayout.KEYBOARD_STATE_SHOW: +// Log.d("resultJson ","键盘弹出状态"); + break; + } + } + }); + +// TextWatcher textWatcher = new TextWatcher() { +// private int beforeTextLength = 0; +// +// @Override +// public void beforeTextChanged(CharSequence s, int start, int count, int after) { +// beforeTextLength = s.length(); +// } +// +// @Override +// public void onTextChanged(CharSequence s, int start, int before, int count) { +// // 不做处理 +// } +// +// @Override +// public void afterTextChanged(Editable s) { +// if (s.length() > 11) { // 假设限制输入位数为10 +// s.delete(11, s.length()); // 删除多余的字符 +// } +// int currentTextLength = s.length(); +// if (beforeTextLength > currentTextLength) { +// // 当用户删除字符时,也应该更新beforeTextLength +// beforeTextLength = currentTextLength; +// } +// } +// }; +// +// phone.addTextChangedListener(textWatcher); + ed_other=view.findViewById(R.id.ed_other); + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + view.findViewById(R.id.change_data).setOnClickListener(this); + yiwen1=view.findViewById(R.id.yiwen1); + yiwen1.setOnClickListener(this); + yiwen2=view.findViewById(R.id.yiwen2); + yiwen2.setOnClickListener(this); + tv_bir=view.findViewById(R.id.tv_bir); + tv_bir.setOnClickListener(this); + + grop3=view.findViewById(R.id.grop3); + grop5=view.findViewById(R.id.grop5); + l1=view.findViewById(R.id.l1); + l2=view.findViewById(R.id.l2); + t1=view.findViewById(R.id.t1); + t2=view.findViewById(R.id.t2); + year1=view.findViewById(R.id.year1); + year2=view.findViewById(R.id.year2); + month1=view.findViewById(R.id.month1); + month2=view.findViewById(R.id.month2); + patientcaseId=getIntent().getStringExtra("patientcaseId"); + patientNo=getIntent().getStringExtra("patientNo"); + name=getIntent().getStringExtra("name"); + bottomSelectDate(); + initView(); + init(); + gettokens(Url.getBaseInfo); + return view; + } + public void init() + { +// grop3.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { +// @Override +// public void onCheckedChanged(RadioGroup radioGroup, int i) { +// if(i==R.id.tab_rbn_31) +// { +// l1.setVisibility(View.VISIBLE); +// if(tab_rbn_51.isChecked()) +// { +// l2.setVisibility(View.VISIBLE); +// } +// else +// { +// l2.setVisibility(View.GONE); +// } +// +// } +// else +// { +// l1.setVisibility(View.GONE); +// l2.setVisibility(View.GONE); +// } +// +// } +// }); + grop5.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + if(tab_rbn_32.isChecked()) + { + l2.setVisibility(View.GONE); + return; + } + if(i==R.id.tab_rbn_51) + { + l2.setVisibility(View.VISIBLE); + } + else + { + l2.setVisibility(View.GONE); + } + + } + }); + year1.setInputType(InputType.TYPE_CLASS_NUMBER); + year2.setInputType(InputType.TYPE_CLASS_NUMBER); + month1.setInputType(InputType.TYPE_CLASS_NUMBER); + month2.setInputType(InputType.TYPE_CLASS_NUMBER); + year1.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + y1=Integer.valueOf(editable.toString()); + + } + else + { + y1=0; + } + setyear(); + + } + }); + month1.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + mon1=Integer.valueOf(editable.toString()); + } + else + { + mon1=0; + } + setyear(); + } + }); + year2.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + y2=Integer.valueOf(editable.toString()); + } + else + { + y2=0; + } + setyear2(); + + } + }); + month2.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + mon2= Integer.valueOf(editable.toString()); + ; + } + else + { + mon2=0; + } + setyear2(); + } + }); + } + public void setyear() + { + t1.setText("("+String.format("%.2f", y1+mon1/12.00)+"年"+")"); + } + public void setyear2() + { + t2.setText("("+String.format("%.2f", y2+mon2/12.00)+"年"+")"); + } + + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(InfomationActivity.this, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + + + + + + private String birthdayPost=""; + private TimePopupWindow pwTime; + /** + * 实例化时间选择器,与选择时间回调 bottomSelectDate + * + * void + */ + Date inittime=DateUtil.str2Date("1980-01-01", "yyyy-MM-dd"); + private void bottomSelectDate() { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR); + pwTime.setTime(inittime); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR); + // 设置标题 + pwTime.setPopupTitle("请选择出生日期"); + // 设置起始时间 + pwTime.setRange(1900, year); + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + birthdayPost = DateUtil.date2Str(date, "yyyy-MM-dd"); + inittime=date; + pwTime.setTime(inittime); + if(DateUtil.getAgeByBirthdays(birthdayPost)<18||DateUtil.getAgeByBirthdays(birthdayPost)>50) + { + ToastUtil.showToast("患者入组时年龄范围为18~50,该患者年龄不合格"); + } + else + { + tv_bir.setText(birthdayPost.substring(0,4) + +"("+DateUtil.getAgeByBirthdays(birthdayPost)+"岁"+")"); + tv_birs.setText(DateUtil.getAgeByBirthdays(birthdayPost)+""); + } + + } + }); + } + + + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.yiwen2: + showyiwen("年龄",getString(R.string.nianlin)); + break; + case R.id.yiwen1: + showyiwen("诊断标准",getString(R.string.zhenduan)); + break; + case R.id.tv_bir: + pwTime.showAtLocation(tv_bir, Gravity.BOTTOM, 0, 0); + break; + case R.id.new_suifang: + popwindow(v,"确认保存新的信息?"); +// hideSoftKeyboard(); +// v.postDelayed(new Runnable() { +// @Override +// public void run() { +// popwindow("确认保存新的信息?"); +// } +// },300); + + break; + case R.id.change_data: + popwindow(v,"确认本数据项已全部完成?"); +// hideSoftKeyboard(); +// v.postDelayed(new Runnable() { +// @Override +// public void run() { +// popwindow("确认本数据项已全部完成?"); +// } +// },300); + + break; + + } + + } + private ECAlertDialog buildAlert; + public void popwindow(View v,String content) { + lucencyBackground(InfomationActivity.this); + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(InfomationActivity.this) + .inflate(R.layout.common_dialog_generic, null); + ((TextView)(contentView.findViewById(R.id.dialog_tv_message))).setText(content); + ((TextView)(contentView.findViewById(R.id.dialog_tv_message))).setTextSize(16); + ((TextView)(contentView.findViewById(R.id.dialog_tv_title))).setText("温馨提示"); + ((TextView)(contentView.findViewById(R.id.dialog_tv_title))).setTextColor(getResources().getColor(R.color.top_title)); + contentView.findViewById(R.id.dialog_layout_title).setVisibility(View.VISIBLE); + Button leftBtn = contentView.findViewById(R.id.dilaog_button1); + leftBtn.setText("取消"); + ((ViewGroup.MarginLayoutParams)leftBtn.getLayoutParams()).rightMargin=1; + leftBtn.setVisibility(View.VISIBLE); + Button rightBtn = contentView. findViewById(R.id.dilaog_button3); + ((ViewGroup.MarginLayoutParams)rightBtn.getLayoutParams()).leftMargin=1; + rightBtn.setVisibility(View.VISIBLE); + rightBtn.setText("确认"); + contentView.findViewById(R.id.dialog_layout_button).setVisibility(View.VISIBLE); +// Button btn_sure = (Button) contentView.findViewById(R.id.btn_sure); +// Button btn_cancel = (Button) contentView.findViewById(R.id.btn_cancel); +// TextView tv_tishi=contentView.findViewById(R.id.tv_tishi); +// btn_sure.setText("确认"); +// btn_cancel.setText("取消"); +// tv_tishi.setText(content); + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + popupWindow.setOutsideTouchable(true); + //进入退出动画 +// popupWindow.setAnimationStyle(R.style.timepopwindow_anim_style); + // 使其聚集获取焦点 + popupWindow.setFocusable(true); +// popupWindow.setTouchable(true); + rightBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + popupWindow.dismiss(); + if(content.contains("保存")) + { + sendpre(); + + } + else{ + baseinfoDataStatus="2"; + sendpre(); + + } + } + }); + leftBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + popupWindow.dismiss(); + } + }); + popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + + cancelBackground(InfomationActivity.this); + } + }); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.showAtLocation(v, Gravity.CENTER, 0, 0); + +// buildAlert = ECAlertDialog.buildAlert(InfomationActivity.this, content, "取消", +// "确认", new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// // TODO Auto-generated method stub +// buildAlert.dismiss(); +// } +// }, new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// if(content.contains("保存")) +// { +// sendpre(); +// +// } +// else{ +// baseinfoDataStatus="2"; +// sendpre(); +// hideSoftKeyboard(); +// } +// +// buildAlert.dismiss(); +// +// } +// }); +// buildAlert.setTitle("温馨提示"); +// buildAlert.setTitleColor(getResources().getColor( +// R.color.top_title)); +// buildAlert.show(); + } + public void showyiwen(String title,String content) + { + EasyWindow.with(InfomationActivity.this).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + } + }).show(); + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(InfomationActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(InfomationActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(InfomationActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(InfomationActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(InfomationActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(InfomationActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(InfomationActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(InfomationActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(InfomationActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(InfomationActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + if(!StringUtil.isEmpty(mBitmaps.get(position).getPath())) + { + Glide.with(InfomationActivity.this).asBitmap().load(mBitmaps.get(position).getPath()) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)) + .into(view); + } + else + { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + InfomationActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + BaseInfoBean baseInfoBean; + private void getBaseInfo() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.getBaseInfo+patientcaseId; + OkHttpUtils + .get() + .url(url1) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + baseInfoBean= GsonTools.fromGsonToBean(response,BaseInfoBean.class); + if(baseInfoBean.getData()!=null) + { + + hindledata(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.getBaseInfo); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public List imgs= new ArrayList<>();; + private void hindledata() + { +// baseinfoDataStatus=baseInfoBean.getData().getDataStatus(); + if("1".equals(baseInfoBean.getData().getSex())) + { + tab_rbn_1.setChecked(true); + } + else if("2".equals(baseInfoBean.getData().getSex())) + { + tab_rbn_2.setChecked(true); + } + if(!StringUtil.isEmpty(baseInfoBean.getData().getBirthday())) + { + birthdayPost=baseInfoBean.getData().getBirthday(); + inittime=DateUtil.str2Date(birthdayPost, "yyyy-MM-dd"); + pwTime.setTime(inittime); + tv_bir.setText(birthdayPost.substring(0,4) + +"("+DateUtil.getAgeByBirthdays(birthdayPost)+"岁"+")"); + tv_birs.setText(DateUtil.getAgeByBirthdays(birthdayPost)+""); + + } + +// tv_bir.setText(baseInfoBean.getData().getBirthday()); + phone.setText(baseInfoBean.getData().getMobile()); + year1.setText(baseInfoBean.getData().getHbvYear()); + month1.setText(baseInfoBean.getData().getHbvMonth()); + if("0".equals(baseInfoBean.getData().getAlcoholFlag())) + { + tab_rbn_4.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getAlcoholFlag())) + { + tab_rbn_3.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getNonAlcoholFlag())) + { + tab_rbn_6.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getNonAlcoholFlag())) + { + tab_rbn_5.setChecked(true); + } +// if("0".equals(baseInfoBean.getData().getDrinkFlag())) +// { +// tab_rbn_32.setChecked(true); +// } +// else if("1".equals(baseInfoBean.getData().getDrinkFlag())) +// { +// tab_rbn_31.setChecked(true); +// } + + if("0".equals(baseInfoBean.getData().getDiagnosisAlcoholFlag())) + { + tab_rbn_42.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getDiagnosisAlcoholFlag())) + { + tab_rbn_41.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getDrinkStopFlag())) + { + tab_rbn_52.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getDrinkStopFlag())) + { + tab_rbn_51.setChecked(true); + } + year2.setText(baseInfoBean.getData().getDrinkStopYear()); + month2.setText(baseInfoBean.getData().getDrinkStopMonth()); + if("0".equals(baseInfoBean.getData().getHbvFamilyFlag())) + { + tab_rbn_62.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getHbvFamilyFlag())) + { + tab_rbn_61.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getHccFamilyFlag())) + { + tab_rbn_72.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getHccFamilyFlag())) + { + tab_rbn_71.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getHtnMixFlag())) + { + tab_rbn_82.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getHtnMixFlag())) + { + tab_rbn_81.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getDmMixFlag())) + { + tab_rbn_92.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getDmMixFlag())) + { + tab_rbn_91.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getChdMixFlag())) + { + tab_rbn_102.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getChdMixFlag())) + { + tab_rbn_101.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getCiMixFlag())) + { + tab_rbn_112.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getCiMixFlag())) + { + tab_rbn_111.setChecked(true); + } + if("0".equals(baseInfoBean.getData().getIchMixFlag())) + { + tab_rbn_122.setChecked(true); + } + else if("1".equals(baseInfoBean.getData().getIchMixFlag())) + { + tab_rbn_121.setChecked(true); + } + ed_other.setText(baseInfoBean.getData().getOtherMix()); + if(baseInfoBean.getData().getImgPath()!=null&&baseInfoBean.getData().getImgPath().size()>0) + { + imgs.addAll(baseInfoBean.getData().getImgPath()); + } + if(baseInfoBean.getData().getImgPath()!=null) + { + for(imBean urlBean:baseInfoBean.getData().getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(InfomationActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.getBaseInfo)) + { + getBaseInfo(); + } + else if(url.contains(Url.youanupdate)) + { + updatedata(); + } + else + { + sendimg(url); + } + + } + private void sendpre() + { + if(tab_rbn_1.isChecked()||tab_rbn_2.isChecked()) + { + + } + else + { + ToastUtil.showToast("性别为必填项"); + return; + } + if(StringUtil.isEmpty(tv_bir.getText().toString())||tv_bir.getText().toString().contains("出生")) + { + ToastUtil.showToast("患者入组时年龄范围为18~50岁,该患者年龄不合格"); + return; + } + if (phone.getText()!=null&&!StringUtil.isEmpty(phone.getText().toString())&& + !ValidateUtils.isPhoneAndMobile(phone.getText().toString())) {// 手机号码格式不正确 + ToastUtil.showToast("请输入正确的手机号码"); + return; + } + if(StringUtil.isEmpty(year1.getText().toString())||StringUtil.isEmpty(month1.getText().toString())) + { + ToastUtil.showToast("乙肝病史为必填项"); + return; + } + + if(tab_rbn_3.isChecked()||tab_rbn_4.isChecked()) + { + + } + else + { + ToastUtil.showToast("是否是酒精性脂肪肝为必填项"); + return; + } + if(tab_rbn_5.isChecked()||tab_rbn_6.isChecked()) + { + + } + else + { + ToastUtil.showToast("是否是非酒精性脂肪肝为必填项"); + return; + } + if(tab_rbn_61.isChecked()||tab_rbn_62.isChecked()) + { + + } + else + { + ToastUtil.showToast("家族中有无其他HBV感染者为必填项"); + return; + } + if(tab_rbn_71.isChecked()||tab_rbn_72.isChecked()) + { + + } + else + { + ToastUtil.showToast("家族中有无肝细胞癌患者为必填项"); + return; + } + if(tab_rbn_91.isChecked()||tab_rbn_92.isChecked()) + { + + } + else + { + ToastUtil.showToast("是否是糖尿病为必填项"); + return; + } + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { +// showProgressDialog("提交中"); + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); +// closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(InfomationActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); +// tag.setFileKey("/public处截取"); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); +// tag.setFileKey("/public处截取"); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { +// showProgressDialog("提交中"); + projectQueryForm4 pro=new projectQueryForm4(); + pro.setPatientNo(patientNo); + pro.setName(name); + if(tab_rbn_1.isChecked()) + { + pro.setSex("1"); + } + else if(tab_rbn_2.isChecked()) + { + pro.setSex("2"); + } + if(!StringUtil.isEmpty(birthdayPost)) + { + pro.setBirthday(birthdayPost); + } +// if(!StringUtil.isEmpty(phone.getText().toString())) +// { + pro.setMobile(phone.getText().toString()); +// } +// if(!StringUtil.isEmpty(year1.getText().toString())) +// { + pro.setHbvYear(year1.getText().toString()); +// } +// if(!StringUtil.isEmpty(month1.getText().toString())) +// { + pro.setHbvMonth(month1.getText().toString()); +// } + if(tab_rbn_4.isChecked()) + { + pro.setAlcoholFlag("0"); + } + else if(tab_rbn_3.isChecked()) + { + pro.setAlcoholFlag("1"); + } + if(tab_rbn_5.isChecked()) + { + pro.setNonAlcoholFlag("1"); + } + else if(tab_rbn_6.isChecked()) + { + pro.setNonAlcoholFlag("0"); + } + +// if(tab_rbn_32.isChecked()) +// { +// pro.setDrinkFlag("0"); +// tab_rbn_32.setChecked(true); +// } +// else if(tab_rbn_31.isChecked()) +// { +// pro.setDrinkFlag("1"); +// } + + if(tab_rbn_42.isChecked()) + { + pro.setDiagnosisAlcoholFlag("0"); + + } + else if(tab_rbn_41.isChecked()) + { + pro.setDiagnosisAlcoholFlag("1"); + + } + if(tab_rbn_52.isChecked()) + { + pro.setDrinkStopFlag("0"); + + } + else if(tab_rbn_51.isChecked()) + { + pro.setDrinkStopFlag("1"); + + } + +// if(!StringUtil.isEmpty(year2.getText().toString())) +// { + pro.setDrinkStopYear(year2.getText().toString()); +// } +// if(!StringUtil.isEmpty(month2.getText().toString())) +// { + pro.setDrinkStopMonth(month2.getText().toString()); +// } + + if(tab_rbn_62.isChecked()) + { + pro.setHbvFamilyFlag("0"); + + } + else if(tab_rbn_61.isChecked()) + { + pro.setHbvFamilyFlag("1"); + } + if(tab_rbn_72.isChecked()) + { + pro.setHccFamilyFlag("0"); + + } + else if(tab_rbn_71.isChecked()) + { + pro.setHccFamilyFlag("1"); + + } + if(tab_rbn_82.isChecked()) + { + pro.setHtnMixFlag("0"); + + } + else if(tab_rbn_81.isChecked()) + { + pro.setHtnMixFlag("1"); + + } + if(tab_rbn_92.isChecked()) + { + pro.setDmMixFlag("0"); + } + else if(tab_rbn_91.isChecked()) + { + pro.setDmMixFlag("1"); + } + if(tab_rbn_102.isChecked()) + { + pro.setChdMixFlag("0"); + } + else if(tab_rbn_101.isChecked()) + { + pro.setChdMixFlag("1"); + } + if(tab_rbn_112.isChecked()) + { + pro.setCiMixFlag("0"); + } + else if(tab_rbn_111.isChecked()) + { + pro.setCiMixFlag("1"); + } + if(tab_rbn_122.isChecked()) + { + pro.setIchMixFlag("0"); + } + else if(tab_rbn_121.isChecked()) + { + pro.setIchMixFlag("1"); + } +// if(!StringUtil.isEmpty(ed_other.getText().toString())) +// { + pro.setOtherMix(ed_other.getText().toString()); +// } + if(baseinfoDataStatus!=null) + { + pro.setBaseinfoDataStatus(baseinfoDataStatus); + } + + pro.setImgPath(imgs); + pro.setPatientcaseId(patientcaseId); + + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(Url.youanupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); +// closeProgressDialog(); + if(hasrealtoken(response)>0) + { + finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.youanupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/IntroductionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/IntroductionActivity.java new file mode 100644 index 0000000..b04c1f4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/IntroductionActivity.java @@ -0,0 +1,51 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class IntroductionActivity extends BaseActivity { + private String content; + private TextView mTv_Content; + private View view; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + String title = getIntent().getStringExtra("title"); + top_title.setText(title); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_introduction); + mTv_Content = (TextView) view.findViewById(R.id.tv_content); + String content = getIntent().getStringExtra("content"); + if (!StringUtil.isEmpty(content)) { + mTv_Content.setText(content); + } + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/InviteContactActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/InviteContactActivity.java new file mode 100644 index 0000000..7ad55eb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/InviteContactActivity.java @@ -0,0 +1,83 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; + +import com.gyf.immersionbar.ImmersionBar; + +import androidx.fragment.app.FragmentManager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.ContactListFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.MobileContactActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * **************************暂时无用********************** + * 功能说明:邀请患者的页面, 暂时无用 + * + */ +public class InviteContactActivity extends BaseActivity { + + private FragmentManager fm; + private static int REQUESTCODE_OK = 0; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("联系人"); + top_right_text.setVisibility(View.VISIBLE); + String actionBtn = getString(R.string.radar_ok_count, + getString(R.string.dialog_ok_button), 0); + top_right_text.setText(actionBtn); + + } + + // 设置联系人选择情况 + public void onContactClick(int count) { + top_right_text.setEnabled(count > 0 ? true : false); + top_right_text.setText(getString(R.string.radar_ok_count, + getString(R.string.dialog_ok_button), count)); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_patient_contact); + + fm = getSupportFragmentManager(); + // MobileContactFragment mobileContactFragment = new + // MobileContactActivity.MobileContactFragment(); + // fm.beginTransaction().replace(R.id.frame_container, + // mobileContactFragment).commit(); + // + MobileContactActivity.MobileContactFragment list = MobileContactActivity.MobileContactFragment + .newInstance(ContactListFragment.TYPE_SELECT); + fm.beginTransaction().add(R.id.frame_container, list).commit(); + + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == REQUESTCODE_OK && resultCode == 1) { + + } + + super.onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/InvitePatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/InvitePatientActivity.java new file mode 100644 index 0000000..1eedb4b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/InvitePatientActivity.java @@ -0,0 +1,204 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.MobileContactSelectActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的患者-邀请患者的页面 + */ +public class InvitePatientActivity extends BaseActivity { + + private TextView tv_invite_patient; + private TextView tv_invite_content; + private static int REQUESTCODE_OK = 0; + private String param1; + private String param2; + private String phone = ""; + private EditText et_invite_patient; + private String phonenumber = ""; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("邀请患者"); + } + + @SuppressLint("ResourceAsColor") + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_invite_patient); + RelativeLayout rl_invite = (RelativeLayout) view.findViewById(R.id.rl_invite); + rl_invite.setOnClickListener(this); + String realName = SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + //邀请内容 + param1 =getResources().getString(R.string.invitePatient); + //姓名 + param2 = "【"+realName+"】"; + //邀请的人 + et_invite_patient = (EditText) view.findViewById(R.id.et_invite_patient); + et_invite_patient.setTextColor(R.color.black); + et_invite_patient.setHint("请输入手机号码"); + //邀请的人回显 + tv_invite_patient = (TextView) view.findViewById(R.id.tv_invite_patient); + tv_invite_patient.setOnClickListener(this); + //邀请内容回显 + tv_invite_content = (TextView) view.findViewById(R.id.tv_invite_content); + tv_invite_content.setText(param1+param2); + //确定邀请的按钮 + Button bt_invite_ok = (Button) view.findViewById(R.id.bt_invite_ok); + bt_invite_ok.setOnClickListener(this); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.tv_invite_patient: + //启动联系人选择界面,并返回数据 + Intent intent = new Intent(ct, MobileContactSelectActivity.class); + intent.putExtra("group_select_need_result", true); + startActivityForResult(intent,REQUESTCODE_OK); + break; + case R.id.bt_invite_ok: + //提交 + sendInvitePatient(Url.getinvitePatient); + break; + default: + break; + } + } + + /** + * 请求网络,获取患者申请的列表 + * getNewPatientList + * ssy + * @param loadUrl 请求地址 + * void + */ + private void sendInvitePatient(final String loadUrl) { + + showProgressDialog("发送邀请中,请稍候..."); + RequestParams params = new RequestParams(); + phonenumber = et_invite_patient.getText().toString().trim(); + params.addBodyParameter("phone", phonenumber);//被邀请人的手机号 + params.addBodyParameter("phone", phone);//被邀请人的手机号 + params.addBodyParameter("param1", param1);//内容 + params.addBodyParameter("param2", param2);//专家姓名 + LogUtil.i("=====" + loadUrl+"===p==="+phone+param1+param2); + LogUtil.i("phonenumber=====" + phonenumber+"===p==="+phone+param1+param2); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("response_json---" + info.result); + BaseBean bean = GsonTools.fromGsonToBean(info.result, BaseBean.class); + closeProgressDialog(); + if ("1".equals(bean.code)) { + ToastUtil.showToast("发送成功"); + finish(); + }else{ + ToastUtil.showToast("发送失败,请稍候再试"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("发送失败,请稍候再试"); + } + }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + LogUtil.d("invitePatient", "onActivityResult: requestCode=" + requestCode + + ", resultCode=" + resultCode + ", data=" + data); + //选择联系人后的结果 + if (requestCode == REQUESTCODE_OK && resultCode == -1) { + if (data == null) { + return; + } + // 取出数组 + String[] selectUser = data.getStringArrayExtra("Select_Conv_User"); + String[] splitName = data.getStringArrayExtra("Select_Conv_User_Name"); + //进行拆分后累加 + et_invite_patient.setText(""); + if(selectUser != null && selectUser.length > 0) { + for (int i = 0; i < splitName.length; i++) { + if (i == splitName.length-1) { + et_invite_patient.append(splitName[i]); + }else{ + et_invite_patient.append(splitName[i]+","); + } + if (i == selectUser.length-1) { + phone = phone+selectUser[i]; + }else{ + phone = phone+selectUser[i]+","; + } + LogUtil.i("split======"+splitName[i]+"==phone=="+phone); + } + } + // String name = ""; + // //进行拆分后累加 + // if(selectUser != null && selectUser.length > 0) { + // for (int i = 0; i < splitName.length; i++) { + // if (i == splitName.length-1) { + // name = name + splitName[i]; + // }else{ + // name = name + splitName[i]+ ","; + // } + // if (i == selectUser.length-1) { + // phone = phone+selectUser[i]; + // }else{ + // phone = phone+selectUser[i]+","; + // } + // LogUtil.i("split======"+splitName[i]+"==phone=="+phone+"==name=="+name); + // } + // et_invite_patient.setText(name); + // } + } + super.onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/KePuDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/KePuDetailActivity.java new file mode 100644 index 0000000..d17c071 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/KePuDetailActivity.java @@ -0,0 +1,208 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class KePuDetailActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private EditText mTv_title, mTv_content; + private Button mBt_move; + private String title, time, content; + public final static int GET_RESULT_MOVE_ARTICLE = 101; + public final static int GET_RESULT_MODIFY_ARTICLE = 102; + private KePuDetailActivity mActivity; + private String articleUuid; + private String uuid; + private String isOriginal; + + // deletePolularScienceArticle + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("科普详情"); + top_right_text.setText("撤稿"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_ke_pu_detail); + mTv_title = (EditText) view.findViewById(R.id.tv_kepu_title); + mTv_content = (EditText) view.findViewById(R.id.tv_kepu_content); + mBt_move = (Button) view.findViewById(R.id.bt_move_article); + mActivity = this; + initIntent(); + initView(); + initListener(); + return view; + } + + public void initIntent() { + Intent intent = getIntent(); + if (intent != null) { + title = intent.getStringExtra("title"); + time = intent.getStringExtra("time"); + content = intent.getStringExtra("content"); + articleUuid = intent.getStringExtra("articleUuid"); + isOriginal = intent.getStringExtra("isOriginal"); + } + uuid=SharePrefUtil.getString(mActivity, "uuid", ""); + } + + public void initView() { + if (!TextUtils.isEmpty(title)) { + mTv_title.setText(title); + } + if (!TextUtils.isEmpty(content)) { + mTv_content.setText(content); + } + + } + + public void initListener() { + mBt_move.setOnClickListener(this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_move_article: + title=mTv_title.getText().toString(); + content=mTv_content.getText().toString(); + modifyArticle() ; + break; + case R.id.top_right_text: + network(); + break; + default: + break; + } + + } + + ECAlertDialog buildAlert; + + private void network() { + // TODO Auto-generated method stub + buildAlert = ECAlertDialog.buildAlert(mActivity, "是否确定撤稿", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + + MoveArticle(); + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + public void MoveArticle() { + showProgressDialog("正在撤稿"); + Map param = new HashMap(); + param.put("article_uuid", articleUuid); + sendJsonPostParamtoNetSignMD5(Url.getMoveScienceListNew, param, GET_RESULT_MOVE_ARTICLE, + mActivity); + } + + public void modifyArticle() { + Map param = new HashMap(); + param.put("topic", title); + param.put("content", content); + param.put("publisherUuid", uuid); + param.put("isOriginal", isOriginal); + param.put("type", String.valueOf(1)); + param.put("uuid", articleUuid); + sendParamtoNet(Url.getUpdateArticle, param, GET_RESULT_MODIFY_ARTICLE, + mActivity, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_RESULT_MOVE_ARTICLE: + closeProgressDialog(); + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + + if (bean.code.equals("1")) { + ToastUtil.showToast("撤稿成功"); + Intent intent = new Intent(); + intent.putExtra("articleUuid", articleUuid); + setResult(Activity.RESULT_OK, intent); + finish(); + } else { + ToastUtil.showToast("撤稿失败"); + } + break; + case GET_RESULT_MODIFY_ARTICLE: + closeProgressDialog(); + BaseBean bean2 = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + + if (bean2.code.equals("1")) { + ToastUtil.showToast("修改成功"); + Intent intent = new Intent(); + intent.putExtra("articleUuid", articleUuid); + intent.putExtra("title", title); + intent.putExtra("content", content); + setResult(Activity.RESULT_OK, intent); + finish(); + } else { + ToastUtil.showToast("修改失败"); + } + break; + default: + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/KeyWordActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/KeyWordActivity.java new file mode 100644 index 0000000..0948819 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/KeyWordActivity.java @@ -0,0 +1,470 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.ScienceListAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.KeyWordBean; +import cn.shangyu.gdxzExpert.bean.ScienceListBean; +import cn.shangyu.gdxzExpert.bean.ScienceListBean.ScienceData; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class KeyWordActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private String KeyWord = ""; + private int page = 1; + private KeyWordActivity mActivity; + private List beanlists = new ArrayList(); + private NewsAdapter mAdapter; + private String mType; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + Intent intent = getIntent(); + KeyWord = intent.getStringExtra("keyword"); + mType = intent.getType(); + if (mType.equals("2")) { + top_title.setText(KeyWord); + } else { + top_title.setText(KeyWord); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_keyword, null); + mActivity = this; + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_keyword); + // 点击查询按钮search + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("没有相关数据"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDataResult(); + } + }); + if (mType.equals("2")) { + getPoDataResult(); + } else { + getDataResult(); + } + + return view; + } + + public static final int GET_NEWS_RESULT_DATE = 101; + public static final int GET_POLUILAR_RESULT_DATE = 201; + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", KeyWord); + sendJsonPostParamtoNetSignMD5(Url.getNewsListbykeywordsNew, param, GET_NEWS_RESULT_DATE, + mActivity); + } + + public void getPoDataResult() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", KeyWord); + sendJsonPostParamtoNetSignMD5(Url.getPolularScienceArticleListByKeywordsNew, param, + GET_POLUILAR_RESULT_DATE, mActivity); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + if (mType.equals("2")) { + ScienceData data = (ScienceData) parent.getAdapter().getItem( + position); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + data.path); + // intent.putExtra("title", data.topic); + intent.putExtra("title", "科普详情"); + intent.putExtra("kepuuuid", data.uuid); + intent.putExtra("kepuagreenum", data.agreenum); + intent.putExtra("kepureadnum", data.readnum); + intent.putExtra("newsTitle", data.topic); + intent.putExtra("summary", data.summary); + intent.putExtra("imageUrl", Url.urlHtml + data.imgPath); + intent.putExtra("flag", 2); + // startActivity(intent); + startActivityForResult(intent, 112); + } else { + + KeyWordBean.KeyWord news = null; + int headerViewsCount = ptrLv.getRefreshableView() + .getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + news = beanlists.get(position - headerViewsCount); + } else { + news = beanlists.get(position); + } + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + news.getPath()); + // intent.putExtra("title", news.title); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", news.getUuid()); + intent.putExtra("newsagreenum", news.getAgreenum()); + intent.putExtra("newsreadnum", news.getReadnum()); + intent.putExtra("newsTitle", news.getTitle()); + intent.putExtra("summary", news.getSummary()); + intent.putExtra("imageUrl", Url.urlHtml + news.getHeadImg()); + intent.putExtra("flag", 3); + mActivity.startActivity(intent); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_NEWS_RESULT_DATE: + processData(resultJson); + break; + case GET_POLUILAR_RESULT_DATE: + processPOData(resultJson); + break; + + default: + break; + } + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + + private void processData(String result) { + // LibraryListBean bean = GsonTools.fromGsonToBean(result, + // LibraryListBean.class); + KeyWordBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, KeyWordBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("数据异常"); + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.data); + + } + + if (mAdapter == null) { + mAdapter = new NewsAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private List polists = new ArrayList(); + private ScienceListAdapter mpoAdapter; + + private void processPOData(String result) { + // LibraryListBean bean = GsonTools.fromGsonToBean(result, + // LibraryListBean.class); + ScienceListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, ScienceListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("数据异常"); + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + polists.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + polists.addAll(bean.data); + } + } else { + // 加载更多下一页时候e + polists.addAll(bean.data); + + } + + // 更新科普 + if (mpoAdapter == null) { + mpoAdapter = new ScienceListAdapter(mActivity, polists); + ptrLv.getRefreshableView().setAdapter(mpoAdapter); + } else { + mpoAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class NewsAdapter extends BaseAdapter { + + @Override + public int getCount() { + return beanlists.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_news); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_news_image); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_news_title); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_news_date); + // mHolder.tvSummary = (TextView) convertView + // .findViewById(R.id.tv_news_summary); + // 点赞阅读 + mHolder.tvdianzannum = (TextView) convertView + .findViewById(R.id.tv_dianzan_count); + mHolder.tvreadnum = (TextView) convertView + .findViewById(R.id.tv_read_count); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + KeyWordBean.KeyWord news = beanlists + .get(position); + mHolder.tvTitle.setText(news.getTitle()); + if (!TextUtils.isEmpty(news.getCreateDate()) + && news.getCreateDate().length() > 10) { + mHolder.tvDate.setText(news.getCreateDate().substring(5, 10)); + } else if (!TextUtils.isEmpty(news.getCreateDate())) { + mHolder.tvDate.setText(news.getCreateDate()); + } + if (!TextUtils.isEmpty(news.getHeadImg())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + news.getHeadImg(), + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.default_news_iv)); + } else { + mHolder.ivImage.setImageResource(R.drawable.default_news_iv); + } + // if (!StringUtil.isEmpty(news.get)) { + // mHolder.tvSummary.setText(news.summary); + // } else { + // mHolder.tvSummary.setText(""); + // } + + // 点赞和阅读量 + if (!TextUtils.isEmpty(news.getAgreenum())) { + Double agree = Double.parseDouble(news.getAgreenum()); + if (agree > 10000) { + double agreeNum = (double) (Math + .round((double) agree / 1000) / 10.0); + mHolder.tvdianzannum.setText(agreeNum + "万"); + } else { + mHolder.tvdianzannum.setText(news.getAgreenum()); + } + } else { + mHolder.tvdianzannum.setText(""); + } + if (!TextUtils.isEmpty(news.getReadnum())) { + Double read = Double.parseDouble(news.getReadnum()); + if (read > 10000) { + double readNum = (double) (Math.round((double) read / 1000) / 10.0); + mHolder.tvreadnum.setText(readNum + "万"); + } else { + mHolder.tvreadnum.setText(news.getReadnum()); + } + } else { + mHolder.tvreadnum.setText(""); + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + private class NewsViewHolder { + + public TextView tvreadnum; + public TextView tvdianzannum; + // public TextView tvSummary; + public ImageView ivImage; + public TextView tvTitle; + public TextView tvDate; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LeaveMsgActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LeaveMsgActivity.java new file mode 100644 index 0000000..82e473c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LeaveMsgActivity.java @@ -0,0 +1,415 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LeaseMsgDataBean; +import cn.shangyu.gdxzExpert.bean.LeaseMsgListBean; +import cn.shangyu.gdxzExpert.bean.LeaseMsgListBean.MsgBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class LeaveMsgActivity extends BaseActivity implements OnCallBackFromNet { + private View TopView; + private View view; + private int page = 1; + public static final int GET_DETAIL_RESULT = 101; + public static final int GET_COMMENT_LIST_RESULT = 102; + public static final int GET_ADD_COMMENT_RESULT = 103; + private String hospital_uuid; + private String user_uuid; + private String uuid; + private LeaveMsgActivity mActivity; + private TextView tv_case_name1, tv_scoretotal1, tv_1score1, tv_1score2, + tv_1score3, tv_gandan_comments1; + private ImageView dis_1img_01, dis_1img_02, dis_1img_03; + private LinearLayout ll_imgs1; + private PullToRefreshListView ptrLv; + private List DocList = new ArrayList(); + private MsgAdapter mAdapter; + private Button btn_add_com; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("留言详情"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_msg); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + btn_add_com = (Button) view.findViewById(R.id.btn_add_com); + TopView = UIUtils.inflate(R.layout.activity_leave_msg); + tv_case_name1 = (TextView) TopView.findViewById(R.id.tv_case_name1); + tv_scoretotal1 = (TextView) TopView.findViewById(R.id.tv_scoretotal1); + tv_1score1 = (TextView) TopView.findViewById(R.id.tv_1score1); + tv_1score2 = (TextView) TopView.findViewById(R.id.tv_1score2); + tv_1score3 = (TextView) TopView.findViewById(R.id.tv_1score3); + tv_gandan_comments1 = (TextView) TopView + .findViewById(R.id.tv_gandan_comments1); + dis_1img_01 = (ImageView) TopView.findViewById(R.id.dis_1img_01); + dis_1img_02 = (ImageView) TopView.findViewById(R.id.dis_1img_02); + dis_1img_03 = (ImageView) TopView.findViewById(R.id.dis_1img_03); + ll_imgs1 = (LinearLayout) TopView.findViewById(R.id.ll_imgs1); + ptrLv.getRefreshableView().setDividerHeight(0); + btn_add_com.setOnClickListener(this); + mActivity = this; + initIntent(); + getMsgDetail(); + getCommentList(); + return view; + } + + private void getMsgDetail() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("uuid", uuid); + param.put("hospital_uuid", hospital_uuid); + param.put("user_uuid", user_uuid); + sendJsonPostParamtoNet(Url.getMessageDetial, param, GET_DETAIL_RESULT, + this); + } + + private void getCommentList() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("uuid", uuid); + param.put("user_uuid", user_uuid); + sendJsonPostParamtoNet(Url.getmessageCommentList, param, + GET_COMMENT_LIST_RESULT, this); + } + + private void getAddComment(String content) { + showLoadingProgress(); + Map param = new HashMap(); + param.put("article_uuid", uuid); +// param.put("user_uuid", user_uuid); +// param.put("type", 6 + ""); + param.put("type", "10"); + param.put("comment", content); + param.put("page", "1"); +// sendParamtoNet(Url.getAddComment, param, GET_ADD_COMMENT_RESULT, this, +// false); + sendJsonPostParamtoNetSignMD5(Url.addCommentV2, param, GET_ADD_COMMENT_RESULT, this + ); + } + + public void initIntent() { + Intent intent = getIntent(); + hospital_uuid = intent.getStringExtra("hospital_uuid"); + user_uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + uuid = intent.getStringExtra("uuid"); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.btn_add_com: + Intent intent = new Intent(LeaveMsgActivity.this, + ReplyFeedbackActivity.class); + intent.setType("YY"); + startActivityForResult(intent, 111); + break; + + default: + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_DETAIL_RESULT: + processData(resultJson); + break; + case GET_COMMENT_LIST_RESULT: + processListData(resultJson); + break; + case GET_ADD_COMMENT_RESULT: + getCommentList(); + ToastUtil.showMessage("评论成功"); +// processListData(resultJson); + break; + default: + break; + } + } + + private void processData(String result) { + + LeaseMsgDataBean bean = GsonTools.fromGsonToBean(result, + LeaseMsgDataBean.class); + if(!StringUtil.isEmpty(bean.getData().getPublish_realname())) + { + tv_case_name1.setText(bean.getData().getPublish_realname().substring(0, 1)+"**"); + } + else + { + tv_case_name1.setText("(**"); + } + + tv_scoretotal1.setText(bean.getData().getScoretotal() + ""); + tv_1score1.setText(bean.getData().getScore1() + ""); + tv_1score2.setText(bean.getData().getScore2() + ""); + tv_1score3.setText(bean.getData().getScore3() + ""); + tv_gandan_comments1.setText(bean.getData().getContent()); + if (!StringUtil.isEmpty(bean.getData().getImg1())) { + dis_1img_01.setVisibility(View.VISIBLE); + ll_imgs1.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + bean.getData().getImg1(), dis_1img_01, + ImageOptions.getImageOptions(R.drawable.img_gandan_house)); + } + if (!StringUtil.isEmpty(bean.getData().getImg2())) { + dis_1img_02.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + bean.getData().getImg2(), dis_1img_02, + ImageOptions.getImageOptions(R.drawable.img_gandan_house)); + } + if (!StringUtil.isEmpty(bean.getData().getImg3())) { + dis_1img_03.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + bean.getData().getImg3(), dis_1img_03, + ImageOptions.getImageOptions(R.drawable.img_gandan_house)); + } + if (bean.getIsExpertFromHospital() == 0) { + btn_add_com.setVisibility(View.GONE); + } else { + btn_add_com.setVisibility(View.VISIBLE); + } + ptrLv.getRefreshableView().addHeaderView(TopView); + if (mAdapter == null) { + mAdapter = new MsgAdapter(); + } + ptrLv.getRefreshableView().setAdapter(mAdapter); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page=1; + getCommentList(); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getCommentList(); + } + }); + } + + public void processListData(String result) { + + LeaseMsgListBean bean = GsonTools.fromGsonToBean(result, + LeaseMsgListBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DocList.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.size() == 0) { + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + DocList.addAll(bean.data); + } + } else { + // 加载更多下一页时候e + DocList.addAll(bean.data); + + } + Iterator it=DocList.iterator(); + while (it.hasNext()) { + MsgBean bean1 = it.next(); + if ("0".equals(bean1.getExamine_status())) { + if (SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean1.getExpert_uuid()) + ||SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean1.getUser_uuid())) { + continue; + } else { + it.remove(); + } + } + } + if (mAdapter == null) { + mAdapter = new MsgAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + public class MsgAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + + return DocList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return DocList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_msg_contment); + vh = new ViewHolder(); + vh.mTv_content = (TextView) convertView + .findViewById(R.id.tv_content); + vh.mTv_name = (TextView) convertView.findViewById(R.id.tv_name); + convertView.setTag(vh); + + } else { + vh = (ViewHolder) convertView.getTag(); + + } + + if (DocList.get(position).getComment().contains(":")) { + + vh.mTv_content + .setText(DocList + .get(position) + .getComment() + .substring( + DocList.get(position).getComment() + .indexOf(":") + 1, + DocList.get(position).getComment() + .length())); + } else { + vh.mTv_content.setText(" "); + } + if (DocList.get(position).getComment().contains(":")) { + String sss = DocList + .get(position) + .getComment() + .substring(0, + DocList.get(position).getComment().indexOf(":")); + if (sss.contains("gdxz")) { + sss = sss.replace("gdxz", ""); + } else { + sss = sss.substring(0, 1) + "**"; + } + vh.mTv_name.setText(sss); + } else { + vh.mTv_name.setText(" "); + } + + return convertView; + } + + public class ViewHolder { + public TextView mTv_name, mTv_content; + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 2) { + String reply = data.getExtras().getString("reply"); + + if (TextUtils.isEmpty(reply)) { + return; + } + String name = SharePrefUtil.getString(mActivity, "realName", null); + page = 1; + getAddComment(name + "gdxz:" + reply); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LinChuangActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LinChuangActivity.java new file mode 100644 index 0000000..513ff17 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LinChuangActivity.java @@ -0,0 +1,242 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.LinChuangAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.EventListBean; +import cn.shangyu.gdxzExpert.bean.EventListBean.EventBase; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ZHAODeWei 肝胆活动列表 + * + */ +public class LinChuangActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + View view; + PullToRefreshListView mLv_event; + TextView mLoad_empty; + private View ll_loading; + private String mUuid; + private int page = 1; + private int totalPage = 0; + + LinChuangActivity mActivity; + public static final int GET_GANDAN_EVENT_RESULT = 101; + LinChuangAdapter mAdapter; + List mList = new ArrayList(); + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("临床招募"); + // top_right.setVisibility(View.VISIBLE); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_gan_dan_event); + mActivity = this; + mLv_event = (PullToRefreshListView) view.findViewById(R.id.pl_gandan_event); + ll_loading = view.findViewById(R.id.ll_loading); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + mUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + mLv_event.setMode(Mode.BOTH); + mLv_event.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getEventResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getEventResult(); + } + }); + // mLv_Visit.setOnItemClickListener(this); + // mLv_Visit. + mLv_event.getRefreshableView().setOnItemClickListener(this); + getEventResult(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("临床招募"); + } + + public void getEventResult() { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + mLv_event.setEmptyView(tv_load_fail); + return; + } + showProgressDialog(""); + Map param = new HashMap(); + param.put("page", page + ""); + sendParamtoNet(Url.getClinicalList, param, GET_GANDAN_EVENT_RESULT, + mActivity, true); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, GDEventDetailTopActivity.class); + intent.putExtra("uuid", mList.get(position - 1).getUuid()); + intent.putExtra("url", Url.urlHtml + mList.get(position - 1).getPath()); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + intent.putExtra("mobile", mList.get(position - 1).getMobile()); + intent.putExtra("summary", mList.get(position - 1).getContent()); + intent.putExtra("imageUrl", Url.urlHtml + + mList.get(position - 1).getImgpath()); + intent.setType("linchaung"); + intent.putExtra("getTags", mList.get(position - 1).getTags()); + startActivity(intent); + needreportDetail("临床招募",mList.get(position - 1).getTags(),mList.get(position - 1).getTitle()); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + EventListBean bean = GsonTools.fromGsonToBean(result, + EventListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + // mLv_Visit.setEmptyView(mLoad_empty); + // 完成刷新 + loaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + mList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.list); + + if (bean.data.list == null || bean.data.list.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("暂无临床招募"); + } else { + mLoad_empty.setVisibility(View.GONE); + // int sssss = bean.data.list.size(); + mList.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + mList.addAll(bean.data.list); + + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new LinChuangAdapter(mList, mActivity); + mLv_event.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + + // 得到总页码数 + int totalPage = bean.totalPage; + // 由于暂时虚构没数据,所以加载更多也没数据 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多临床招募了"); + } + mLv_event.setMode(Mode.PULL_FROM_START); + + } else { + mLv_event.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_event.onRefreshComplete(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_event.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_GANDAN_EVENT_RESULT: + processData(resultJson); + break; + + default: + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginActivity.java new file mode 100644 index 0000000..b47316a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginActivity.java @@ -0,0 +1,1107 @@ +package cn.shangyu.gdxzExpert.activity; + + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Handler; +import android.os.Message; +import android.text.Editable; +import android.text.InputType; +import android.text.Selection; +import android.text.Spannable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nimlib.sdk.AbortableFuture; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.LoginInfo; +import com.umeng.message.PushAgent; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DestroyActivityUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SmsObserver; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.TimeButton; +import io.dcloud.feature.sdk.Interface.IUniMP; + +import static cn.shangyu.gdxzExpert.activity.MainActivity.YXREF; +import static cn.shangyu.gdxzExpert.activity.MainActivity.YXREGISTER; +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.addUMToken; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getHandler; +import static cn.shangyu.gdxzExpert.utils.Url.getlogin; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; +import static cn.shangyu.gdxzExpert.utils.Url.yxrefresh; + +/** + * + * LoginActivity.java + * + * @author ssy + * @date 2015-9-7 下午4:39:55 + * + * 功能说明:登录页面 + * + * @author liufang + * @since 2015-11-16 修改 + */ +public class LoginActivity extends BaseActivity implements OnCallBackFromNet { + + public static final int REQUEST_CODE_SETNICK = 1; + private EditText usernameEditText; + private EditText passwordEditText; + private EditText messageEditText; + private boolean autoLogin = false; + private String currentUsername; + private String currentPassword; + public static int ERROR = 101; + private Button bt_login; + private TextView tv_forget; + private int state; + private String checkInfo; + private String deviceSpec;// 设备型号 + private String deviceType = "0";// 设备类型(0安卓,1IOS) + private CheckBox mShowPass; + + private LinearLayout lv_paint_download; + public static String PatientUrl = Url.getpatientList; + private RelativeLayout mRl_password, mRl_message; + private CheckBox mCb_change; + private boolean isPassLogin = true; + private TimeButton mTb_message; + private String system_time = null; + public static final int MSG_RECEIVED_CODE = 2; + private SmsObserver mObserver; + + + + @Override + public void setTitle() { + top_title.setText("登录"); + top_back_layout.setVisibility(View.GONE); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("注册"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_login); + + Constant.islogout = 1; + DestroyActivityUtil.addDestoryActivityToMap(LoginActivity.this,"LoginActivity"); + usernameEditText = (EditText) view.findViewById(R.id.username);// 账号 + // 设置输入框获得焦点hint提示消失添加监听 + usernameEditText.setOnFocusChangeListener(onFocusAutoClearHintListener); + passwordEditText = (EditText) view.findViewById(R.id.password);// 密码 + messageEditText = (EditText) view.findViewById(R.id.et_get_message); + // 1.7.1 双方式登录 + mRl_password = (RelativeLayout) view.findViewById(R.id.rl_password); + mRl_message = (RelativeLayout) view.findViewById(R.id.rl_message); + mCb_change = (CheckBox) view.findViewById(R.id.bt_change); + tv_forget = (TextView) view.findViewById(R.id.tv_forget);// 忘记密码 + /** + * 自动添加短信验证码 + * */ +// mObserver = new SmsObserver(LoginActivity.this, mHandler); +// Uri uri = Uri.parse("content://sms/"); +// // 注册短信的监听 +// this.getContentResolver().registerContentObserver(uri, true, mObserver); + mTb_message = (TimeButton) view.findViewById(R.id.tb_send_message); + + mTb_message.onCreate(); + mTb_message.clearTimer(); + mTb_message.setTextBefore("获取验证码").setLenght(60 * 1000); + passwordEditText.setOnFocusChangeListener(onFocusAutoClearHintListener); + bt_login = (Button) view.findViewById(R.id.bt_login);// 登录 + lv_paint_download = (LinearLayout) view + .findViewById(R.id.lv_paint_download);// 登录 + lv_paint_download.setOnClickListener(this); + // TextView tv_register = (TextView) + // view.findViewById(R.id.tv_register); + mTb_message.setOnClickListener(this); + bt_login.setOnClickListener(this);// 登录 + tv_forget.setOnClickListener(this);// 忘记密码 + // mIv_num.setOnClickListener(this); + mShowPass = (CheckBox) view.findViewById(R.id.show_password);// 是否显示密码 + + // mLine = view.findViewById(R.id.login_line); + + mShowPass.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + if (isChecked) {// 显示密码 + passwordEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + } else {// 隐藏密码 + passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT + | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + passwordEditText.postInvalidate(); + // 切换后将EditText光标置于末尾 + CharSequence charSequence = passwordEditText.getText(); + if (charSequence instanceof Spannable) { + Spannable spanText = (Spannable) charSequence; + Selection.setSelection(spanText, charSequence.length()); + } + } + }); + String mobile = SharePrefUtil.getString(ct, Constant.SP_IS_FIRST_NAME,Constant.mobile, "");// 手机号 + // 验证是否是手机号 + if (ValidateUtils.isMobileNum(mobile)) { + usernameEditText.setText(mobile); + usernameEditText.setSelection(mobile.length()); + } + Intent intent = getIntent(); + Boolean flag = intent.getBooleanExtra("flag", false); + if (flag) { + usernameEditText.setText(intent.getStringExtra("phone")); + } + // 如果用户名改变,清空密码 + usernameEditText.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + passwordEditText.setText(null); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + mCb_change.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + if (isChecked) { + isPassLogin = false; + top_right_text.setVisibility(View.GONE); + top_title.setText("快速登录"); + mCb_change.setText("切换密码登录"); + tv_forget.setVisibility(View.GONE); + mRl_password.setVisibility(View.GONE); + mRl_message.setVisibility(View.VISIBLE); + // mLine.setVisibility(View.VISIBLE); + // mLl_num.setVisibility(View.VISIBLE); + } else { + top_right_text.setVisibility(View.VISIBLE); + top_title.setText("登录"); + isPassLogin = true; + mCb_change.setText("切换快速登录"); + tv_forget.setVisibility(View.VISIBLE); + mRl_password.setVisibility(View.VISIBLE); + mRl_message.setVisibility(View.GONE); + // mLine.setVisibility(View.GONE); + // mLl_num.setVisibility(View.GONE); + } + } + }); + + getDeviceInfo(); + // new Thread(networkTask).start(); + if(getIntent()!=null&&!StringUtil.isEmpty(getIntent().getStringExtra("kick_out"))) + { + showlogout(getIntent().getStringExtra("kick_out")); + } + return view; + + + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + setIntent(intent); + if(!StringUtil.isEmpty(getIntent().getStringExtra("kick_out"))) + { + showlogout(getIntent().getStringExtra("kick_out")); + } + } + + public void showlogout(String phone) + { + Date date = new Date(System.currentTimeMillis()); + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, + getString(R.string.nim_kick_out)+ + simpleDateFormat.format(date)+getString(R.string.nim_kick_out1)+ + phone+getString(R.string.nim_kick_out2) + , getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + dialog.dismiss(); +// Intent intent = new Intent(getApplicationContext(), LoginActivity.class); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// startActivity(intent); + +// startActivity(new Intent(BaseApplication.this, LoginActivity.class)); + + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public Handler handler = new Handler() { + + public void handleMessage(Message msg) { + + if (msg.what == ERROR) { + closeProgressDialog(); + ToastUtil.showToast("登录失败,请检查网络重试"); + } else { + try { + String str = (String) msg.obj; + JSONObject objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (("1").equals(retcode)) { + // 得到个人资料,并保存 +// getSaveUserInfor(objs); + doLauncherAction(); + // 得到容联的信息,并保存 + // String subAccountSid = getSaveSubAccount(objs); + // 保存当前账号到sp + // SharePrefUtil.saveString(ct, "USERID", + // currentUsername); + + } else { + closeProgressDialog(); + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + closeProgressDialog(); + ToastUtil.showToast("登录失败,请重试"); + } + + } + } + + /** + * 保存容联账号信息 + */ + public String getSaveSubAccount(JSONObject objs) throws JSONException { + JSONArray subAccount = objs.getJSONArray("subAccount"); + JSONObject sub = subAccount.getJSONObject(0); + String dateCreated = sub.getString("dateCreated"); + String subAccountSid = sub.getString("subAccountSid"); + String subToken = sub.getString("subToken"); + String voipAccount = sub.getString("voipAccount"); + String voipPwd = sub.getString("voipPwd"); + // 保存信息到sp文件 + SharePrefUtil.saveString(ct, "subAccountSid", subAccountSid); + SharePrefUtil.saveString(ct, "dateCreated", dateCreated); + SharePrefUtil.saveString(ct, "subToken", subToken); + SharePrefUtil.saveString(ct, "voipAccount", voipAccount); + SharePrefUtil.saveString(ct, "voipPwd", voipPwd); + + return subAccountSid; + } + + + }; + // 保存个人信息 + public void getSaveUserInfor(JSONObject objs) throws JSONException { + JSONObject date = objs.getJSONObject("data"); + String uuid = date.optString("uuid"); + String realName = date.optString("realName"); + String mobile = date.optString("mobile"); + String photo = date.optString("photo"); + String email = date.optString("email"); + String birthDate = date.optString("birthDate"); + String hospitalUuid = date.optString("hospitalUuid"); + String hospitalName = date.optString("hospitalName"); + String officeUuid = date.optString("officeUuid"); + String officeName = date.optString("officeName"); + String officePhone = date.optString("officePhone"); + String positionUuid = date.optString("positionUuid"); + String positionName = date.optString("positionName"); + String intro = date.optString("intro"); + String certificate = date.optString("certificate"); + String certificateImg = date.optString("certificateImg"); + String qrcode = date.optString("qrcode"); + checkInfo = date.optString("checkInfo"); + String cityId = date.optString("cityId"); + String countyId = date.optString("countyId"); + String provId = date.optString("provId"); + int isStar = date.optInt("isStar"); + // int nation = date.getInt("nation"); + int sex = date.optInt("sex"); + state = date.optInt("state");// 审核状态( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 6.已通过 + + // 保存个人资料到SP文件 +// SharePrefUtil.saveString(ct, Constant.USERID, "M08ONllF0DLk0uQ7syt"); +// SharePrefUtil.saveString(ct, Constant.uuid, "M08ONllF0DLk0uQ7syt"); + SharePrefUtil.saveString(ct, Constant.USERID, uuid); + SharePrefUtil.saveString(ct, Constant.uuid, uuid);// 唯一标识,我的uuid + SharePrefUtil.saveString(ct, Constant.realName, realName);// 真实姓名 + SharePrefUtil.saveString(ct, Constant.mobile, mobile);// 手机号 + if (!StringUtil.isEmpty(currentUsername) + && ValidateUtils.isMobileNum(currentUsername)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, currentUsername);// 手机号,这个为了重新登录后回显之前的手机号 + } else if (!StringUtil.isEmpty(mobile) + && ValidateUtils.isMobileNum(mobile)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, mobile);// 手机号,这个为了重新登录后回显之前的手机号 + } + SharePrefUtil.saveString(ct, Constant.photo, photo);// 头像路径 + SharePrefUtil.saveString(ct, "email", email);// 邮箱 + SharePrefUtil.saveString(ct, "birthDate", birthDate);// 出生日期 + SharePrefUtil.saveString(ct, "hospitalUuid", hospitalUuid);// 坐诊医院uuid + SharePrefUtil.saveString(ct, "hospitalName", hospitalName);// 坐诊医院名称 + SharePrefUtil.saveString(ct, "officeUuid", officeUuid);// 科室uuid + SharePrefUtil.saveString(ct, "officeName", officeName);// 科室名称 + SharePrefUtil.saveString(ct, "officePhone", officePhone);// 科室电话 + SharePrefUtil.saveString(ct, "positionUuid", positionUuid);// //职称uuid + SharePrefUtil.saveString(ct, "positionName", positionName);// //职称名称 + SharePrefUtil.saveString(ct, "intro", intro);// 简介 + SharePrefUtil.saveString(ct, "certificate", certificate);// 执业资格证 + SharePrefUtil.saveString(ct, "certificateImg", certificateImg);// 执业资格证图片 + SharePrefUtil.saveString(ct, "qrcode", qrcode);// 二维码 + SharePrefUtil.saveString(ct, "checkInfo", checkInfo);// 审核信息 + SharePrefUtil.saveString(ct, "cityId", cityId);// 市id + SharePrefUtil.saveString(ct, "countyId", countyId);// //区县id + SharePrefUtil.saveString(ct, "provId", provId);// 省id + // SharePrefUtil.saveInt(ct, "nation", nation); + SharePrefUtil.saveInt(ct, "isStar", isStar);// 是否是肝胆名医 0否 1是 + SharePrefUtil.saveInt(ct, "sex", sex);// 性别(0.男 1.女) + SharePrefUtil.saveInt(ct, "state", state);// 审核状态( 1.待审核 + String yx_accid =objs.getString("YX_accid"); + String yx_token =objs.getString("YX_token"); +// SharePrefUtil.saveString(ct, Constant.yx_accid, "nmgjgc1rnif1vx0mvt1"); +// SharePrefUtil.saveString(ct, Constant.yx_token, "95783c11fc03ba55743a7b07c50e367d"); + SharePrefUtil.saveString(ct, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(ct, Constant.yx_token, yx_token); + addUMToken(PushAgent.getInstance(this).getRegistrationId()); + // 2.审核中3.需要补充修改资料 + // 4.再次提交审核5.拒绝 6.已通过) + // 进行判断是否进入主页面还是进入设置页面 + getLoginInfo(state); + } + public void getLoginInfo(int state) { + if (state != 6) { + // 需要完善资料,跳转到完善资料页面 + // ToastUtil.showToast("登录成功,请完善资料"); + // 启动登录设置信息界面 + Intent intent = new Intent(this, LoginSetInfoActivity.class); + intent.putExtra("checkInfo", checkInfo); + intent.putExtra("state", state); + startActivity(intent); + closeProgressDialog(); + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, false); + this.finish(); + } else { + +// // 保存当前账号到sp +// SharePrefUtil.saveString(ct, "USERID", +// currentUsername); + // 登陆成功,实例化容联登录 + // 获取患者列表 + String USERID = SharePrefUtil.getString(ct, Constant.USERID, ""); + + // 获取患者列表存到数据库 + BaseActivity.getPatientList(LoginActivity.this, PatientUrl, USERID); + String yx_accid =SharePrefUtil.getString(ct, Constant.yx_accid, ""); + String yx_token =SharePrefUtil.getString(ct, Constant.yx_token, ""); + +// String status=NIMClient.getStatus().toString(); +// int subtype = 0; + doLauncherAction(); + // 登录 + loginYunxin(yx_accid,yx_token); + +// NimUIKit.login(new LoginInfo(yx_accid, yx_token, null, subtype), +// new RequestCallback() { +// @Override +// public void onSuccess(LoginInfo param) { +// +// DemoCache.setAccount(yx_accid); +// saveLoginInfo(yx_accid, yx_token); +// // 初始化消息提醒配置 +// initNotificationConfig(); +// doLauncherAction(); } +// +// @Override +// public void onFailed(int code) { +// if(code==302) +// { +// refreshToken(); +// } +// else +// { +// closeProgressDialog(); +// ToastHelper.showToast(LoginActivity.this,"云信登录失败: " + code); +// } +// +// +// +// } +// +// @Override +// public void onException(Throwable exception) { +// closeProgressDialog(); +// ToastHelper.showToast(LoginActivity.this,"云信登录失败" ); +// } +// }); + + + } + + }; + public void loginYunxin(String yx_accid,String yx_token) + { + // 演示15s后手动登录,登录成功后,可以正常收发数据 + getHandler().postDelayed(() -> { + AbortableFuture loginRequest = NIMClient.getService(AuthService.class).login( + new LoginInfo(yx_accid, yx_token)); + loginRequest.setCallback(new RequestCallbackWrapper() { + + @Override + public void onResult(int code, Object result, Throwable exception) { + Log.i("test", "real login, code=" + code); + if (code == ResponseCode.RES_SUCCESS) { + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); +// saveLoginInfo(account, token); + finish(); + } + } + }); + }, 5 * 1000); + } + + public void refreshToken() + { + String yx_accid =SharePrefUtil.getString(ct, Constant.yx_accid, ""); + Map param = new HashMap<>(); + param.put("accid", yx_accid); + sendJsonPostParamtoNetSignMD5(yxrefresh,param,YXREF,this); + } + + public void checkPermission() { + boolean isGranted = true; + if (android.os.Build.VERSION.SDK_INT >= 23) { + if (LoginActivity.this.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + //如果没有写sd卡权限 + isGranted = false; + } + if (LoginActivity.this.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + isGranted = false; + } + Log.i("cbs","isGranted == "+isGranted); + if (!isGranted) { + (LoginActivity.this).requestPermissions( + new String[]{ + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE}, + 102); + } + } + + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + // 返回 + case R.id.top_back_layout: + finish(); + AppManager.getAppManager().finishAllActivity(); + android.os.Process.killProcess(android.os.Process.myPid()); + break; + // 登录 + case R.id.bt_login: + + + + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// +// if (PermissionsUtil.hasPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 +// if (isPassLogin) { +// login(); +// } else { +// MessageLosin(); +// } +// } else { +// PermissionsUtil.requestPermission(this, new PermissionListener() { +// @Override +// public void permissionGranted(@NonNull String[] permissions) { +// //用户授予了访问读写的权限 +// if (isPassLogin) { +// login(); +// } else { +// MessageLosin(); +// } +// } +// @Override +// public void permissionDenied(@NonNull String[] permissions) { +// //用户拒绝了访问读写的申请 +//// finish(); +//// checkPermission(); +// } +// +// }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); +// } +// +// }else { + if (isPassLogin) { + login(); + } else { + MessageLosin(); + } +// } + + break; + // 短信验证码 + case R.id.tb_send_message: + currentUsername = usernameEditText.getText().toString(); + Map param = new HashMap<>(); + param.put("mobile",currentUsername); + param.put("type","2"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); +// getSystemTime(); + + break; + // 注册 + case R.id.top_right_text: + startActivityForResult(new Intent(this, RegistActivity.class), 0); + break; + // 忘记密码 + case R.id.tv_forget: + String mobile = usernameEditText.getText().toString(); + Intent i = new Intent(this, ForgetActivity.class); + i.putExtra("mobile", mobile); + startActivity(i); + break; + case R.id.lv_paint_download: + Intent s = new Intent(); +// s.setData(Uri.parse("http://android.myapp.com/myapp/detail.htm?apkName=cn.shangyu.gdxzPatient"));//应用宝 + s.setData(Uri.parse("http://appstore.huawei.com/app/C10526650"));//华为 +// s.setData(Uri.parse("https://h5coml.vivo.com.cn/h5coml/appdetail_h5/browser_v2/index.html?appId=893026&resource=301&source=7"));//vivo + s.setAction(Intent.ACTION_VIEW); + this.startActivity(s); + break; + } + } + + @Override + public void onBackPressed() { + // TODO Auto-generated method stub + super.onBackPressed(); + // 监听返回键 + finish(); + AppManager.getAppManager().finishAllActivity(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + /** + * 登录 + */ + public void login() { + + + + + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + return; + } + // 数据验证 + currentUsername = usernameEditText.getText().toString().trim(); + currentPassword = passwordEditText.getText().toString().trim(); + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(currentPassword)) { + ToastUtil.showToast("密码不为空"); + return; + } + if (!ValidateUtils.isPassword(currentPassword)) { + ToastUtil.showToast("请输入6-16位字母、数字组合密码"); + return; + } + + + + // 登陆时用户密码加密 + // currentPassword = MD5Utils.md5Encrypt(currentPassword); + showProgressDialog("正在登录"); + Map param = new HashMap<>(); + param.put("password",currentPassword); + param.put("mobile",currentUsername); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(getlogin,param,YXREGISTER,this); +// new Thread(new Runnable() { +// +// @Override +// public void run() { +// try { +// List parameters = new ArrayList(); +// BasicNameValuePair value01 = new BasicNameValuePair( +// "userName", currentUsername);// 手机号 +// BasicNameValuePair value02 = new BasicNameValuePair( +// "password", currentPassword);// 密码 +// BasicNameValuePair value03 = new BasicNameValuePair( +// "currentType", deviceType);// 设备类型 +// BasicNameValuePair value04 = new BasicNameValuePair( +// "currentSpec", deviceSpec);// 设备版本 +// parameters.add(value01); +// parameters.add(value02); +// parameters.add(value03); +// parameters.add(value04); +// +// HttpResult httpResult = HttpHelper.post(Url.getlogin,parameters);// 请求网络 +// if (httpResult == null) { +// LogUtil.i("httpResult = null"); +// handler.sendEmptyMessage(ERROR); +// return; +// } +// String str = httpResult.getString();// str为服务器返回的json串 +// SharePrefUtil.saveString(ct, Url.getmodify, str); +// if (TextUtils.isEmpty(str)) { +// LogUtil.i("str = null"); +// handler.sendEmptyMessage(ERROR); +// return; +// } +// Message msg = Message.obtain(); +// msg.obj = str; +// handler.sendMessage(msg); +// } catch (Exception e) { +// e.printStackTrace(); +// LogUtil.i("Exception = "+e.getMessage()); +// handler.sendEmptyMessage(ERROR); +// } +// } +// }).start(); + + } + + + + + /** + * + * @author gaofei + * @date 2015-9-8 下午4:22:04 + * + * 功能说明:获得设备信息,设备类型,设备型号 + * + * method + */ + private void getDeviceInfo() { + String mobileName = ""; + String mobileType = ""; + try { + mobileName = android.os.Build.MANUFACTURER; + mobileType = android.os.Build.MODEL; + } catch (Exception e) { + e.printStackTrace(); + } + deviceSpec = mobileName + " " + mobileType; + deviceSpec = deviceSpec.replaceAll("\\s*", ""); + + } + + @Override + protected void onResume() { + super.onResume(); + if (autoLogin) { + return; + } + + } + + + + private void doLauncherAction() { + + closeProgressDialog(); + // ( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 + // 6.已通过) + // 注册成功跳转 + Intent intent = new Intent(this, MainActivity.class); + intent.putExtra("launcher_from", 1); + + startActivity(intent); + Constant.islogout = 2; + // 保存登陆 + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, true); + + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(LoginActivity.this, 1); +// this.finish(); + } + + private int firstTime = 1; + + + + public final static int GET_SYSTEM_TIME_RESULT = 103; + + public void getSystemTime() { + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, + LoginActivity.this, true); + } + + public final static int GET_MESSAGE_DATA_RESULT = 101; + public final static int GET_MESSAGE_LOGIN_RESULT = 102; + + public void sendMessage() { + currentUsername = usernameEditText.getText().toString(); + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(system_time)) { + ToastUtil.showToast("未能获取网络时间"); + return; + } + + int a = StringUtil.getnum(); + String mc = null; + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(currentUsername + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Map param = new HashMap(); + param.put("mc", mc); + param.put("a", a + ""); + sendParamtoNet(Url.getQuickLoginSms, param, GET_MESSAGE_DATA_RESULT,LoginActivity.this, true); + + } + + public void MessageLosin() { + + if (TextUtils.isEmpty(currentUsername)) { + currentUsername = usernameEditText.getText().toString(); + } + currentPassword = messageEditText.getText().toString(); + + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(currentPassword)) { + ToastUtil.showToast("验证码不为空"); + return; + } + showProgressDialog("正在登录"); + Map param = new HashMap(); + param.put("mobile", currentUsername); + param.put("sms", currentPassword); +// param.put("currentType", deviceType); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(Url.getQuickLogin, param, GET_MESSAGE_LOGIN_RESULT, + LoginActivity.this); +// sendParamtoNet(Url.getQuickLogin, param, GET_MESSAGE_LOGIN_RESULT, +//// LoginActivity.this, true); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case MSG_SEND: + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + mTb_message.startTimer(); + } else { + ToastUtil.showToast(message); + mTb_message.clearTimer(); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("获取验证码失败,请重试"); + mTb_message.clearTimer(); + e.printStackTrace(); + } + + break; + case YXREF: + + try { + JSONObject objs = null; + objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if ("200".equals(retcode)) { + String yx_accid =objs.getString("YX_accid"); + String yx_token =objs.getString("YX_token"); + SharePrefUtil.saveString(ct, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(ct, Constant.yx_token, yx_token); + NimUIKit.login(new LoginInfo(yx_accid, yx_token, null, 0), + new RequestCallback() { + @Override + public void onSuccess(LoginInfo param) { + + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + doLauncherAction(); } + + @Override + public void onFailed(int code) { + + closeProgressDialog(); + ToastHelper.showToast(LoginActivity.this,"云信登录失败: " + code); + + + + + } + + @Override + public void onException(Throwable exception) { + closeProgressDialog(); + ToastHelper.showToast(LoginActivity.this,"云信登录失败" ); + } + }); + + + } + else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case GET_MESSAGE_LOGIN_RESULT: + case YXREGISTER: + + SharePrefUtil.saveString(ct, Url.getmodify, resultJson); + try { + + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (("1").equals(retcode)) { + // 得到个人资料,并保存 + getSaveUserInfor(objs); + + + + + } else { + closeProgressDialog(); + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + closeProgressDialog(); + ToastUtil.showToast("登录失败,请重试"); + } + break; + case GET_MESSAGE_DATA_RESULT: + JSONObject objs; + try { + objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("1")) { + mTb_message.startTimer(); + } else { + ToastUtil.showToast(message); + mTb_message.clearTimer(); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("获取验证码失败,请重试"); + mTb_message.clearTimer(); + e.printStackTrace(); + } + + break; + + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + sendMessage(); + break; + default: + break; + } + } + + + private Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what == MSG_RECEIVED_CODE) { + String code = (String) msg.obj; + if (code != null) { + messageEditText.setText(code.trim()); + } + + } + } + }; + + @Override + protected void onDestroy() { + mTb_message.onDestroy(); + super.onDestroy(); +// getContentResolver().unregisterContentObserver(mObserver); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK&& event.getAction() == KeyEvent.ACTION_DOWN){ + finishAffinity(); +// finish(); + AppManager.getAppManager().finishAllActivity(); + System.exit(0); + } + return false; + } + private void saveLoginInfo(final String account, final String token) { + Preferences.saveUserAccount(account); + Preferences.saveUserToken(token); + } + private void initNotificationConfig() { + // 初始化消息提醒 + NIMClient.toggleNotification(UserPreferences.getNotificationToggle()); + // 加载状态栏配置 + StatusBarNotificationConfig statusBarNotificationConfig = UserPreferences.getStatusConfig(); + if (statusBarNotificationConfig == null) { + statusBarNotificationConfig = DemoCache.getNotificationConfig(); + UserPreferences.setStatusConfig(statusBarNotificationConfig); + } + // 更新配置 + NIMClient.updateStatusBarNotificationConfig(statusBarNotificationConfig); +// registerMsgUnreadInfoObserver(true); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginNewActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginNewActivity.java new file mode 100644 index 0000000..fd773f6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginNewActivity.java @@ -0,0 +1,1606 @@ +package cn.shangyu.gdxzExpert.activity; + + +import static cn.shangyu.gdxzExpert.activity.MainActivity.YXREF; +import static cn.shangyu.gdxzExpert.activity.MainActivity.YXREGISTER; +import static cn.shangyu.gdxzExpert.activity.RegistActivity.MSG_SEND; +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.addUMToken; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getHandler; +import static cn.shangyu.gdxzExpert.utils.Url.getlogin; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; +import static cn.shangyu.gdxzExpert.utils.Url.umGetMobile; +import static cn.shangyu.gdxzExpert.utils.Url.umVerifyLogin; +import static cn.shangyu.gdxzExpert.utils.Url.wechatLogin; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.text.Editable; +import android.text.InputType; +import android.text.Selection; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnFocusChangeListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.mobile.auth.gatewayauth.PhoneNumberAuthHelper; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nimlib.sdk.AbortableFuture; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.LoginInfo; +import com.umeng.message.PushAgent; +import com.umeng.socialize.UMAuthListener; +import com.umeng.socialize.UMShareAPI; +import com.umeng.socialize.UMShareConfig; +import com.umeng.socialize.bean.SHARE_MEDIA; +import com.umeng.umverify.UMResultCode; +import com.umeng.umverify.UMVerifyHelper; +import com.umeng.umverify.listener.UMTokenResultListener; +import com.umeng.umverify.model.UMTokenRet; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; +import cn.shangyu.gdxzExpert.umeng.AuthPageConfig; +import cn.shangyu.gdxzExpert.umeng.BaseUIConfig; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DestroyActivityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.TimeButton; +import io.dcloud.feature.sdk.DCUniMPSDK; +import io.dcloud.feature.sdk.Interface.IUniMP; + +/** + * + * LoginActivity.java + * + * @author ssy + * @date 2015-9-7 下午4:39:55 + * + * 功能说明:登录页面 + * + * @author liufang + * @since 2015-11-16 修改 + */ +public class LoginNewActivity extends BaseActivity implements OnCallBackFromNet { + + + private EditText usernameEditText; + private EditText passwordEditText; + private EditText messageEditText; + + private String currentUsername; + private String currentPassword; + public static int ERROR = 101; + private Button bt_login; + private TextView tv_forget,tv_sure; + private int state; + private String checkInfo; + private String deviceSpec;// 设备型号 + private String deviceType = "0";// 设备类型(0安卓,1IOS) + private CheckBox mShowPass,cb_ok; + + public static String PatientUrl = Url.getpatientList; + private RelativeLayout mRl_password, mRl_message; + private CheckBox mCb_change; + private boolean isPassLogin = false; + private TimeButton mTb_message; + private String system_time = null; + private UMVerifyHelper mPhoneNumberAuthHelper; + private PhoneNumberAuthHelper phoneNumberAuthHelper; + private UMTokenResultListener mTokenResultListener; + private ImageView im_wechat; + private AuthPageConfig mUIConfig; + private String yinsi1="登录即代表同意《肝胆相照隐私政策》和《肝胆相照用户服务协议》"; + private String yinsi2="未注册的手机号验证登录后将自动创建肝胆相照账号,登录即代表同意《肝胆相照隐私政策》和《肝胆相照用户服务协议》"; + private String wechat_user_info; + + @Override + public void setTitle() { +// initFontScale(); + top_title.setText("登录"); + top_back_layout.setVisibility(View.GONE); +// top_right_text.setVisibility(View.VISIBLE); +// top_right_text.setText("注册"); + } + + + @Override + public View onCreateSuccessedView() { +// initFontScale(); +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); +// View view = UIUtils.inflate(R.layout.activity_login_new); + View view = View.inflate(ct, R.layout.activity_login_new, null); + +// initFontScale(); + Constant.islogout = 1; + DestroyActivityUtil.addDestoryActivityToMap(this,"LoginActivity"); + usernameEditText = (EditText) view.findViewById(R.id.username);// 账号 + // 设置输入框获得焦点hint提示消失添加监听 + usernameEditText.setOnFocusChangeListener(onFocusAutoClearHintListener); + passwordEditText = (EditText) view.findViewById(R.id.password);// 密码 + messageEditText = (EditText) view.findViewById(R.id.et_get_message); + // 1.7.1 双方式登录 + mRl_password = (RelativeLayout) view.findViewById(R.id.rl_password); + mRl_message = (RelativeLayout) view.findViewById(R.id.rl_message); + mCb_change = (CheckBox) view.findViewById(R.id.bt_change); + tv_forget = (TextView) view.findViewById(R.id.tv_forget);// 忘记密码 + + mTb_message = (TimeButton) view.findViewById(R.id.tb_send_message); + + mTb_message.onCreate(); + mTb_message.clearTimer(); + mTb_message.setTextBefore("获取验证码").setLenght(60 * 1000); + passwordEditText.setOnFocusChangeListener(onFocusAutoClearHintListener); + bt_login = (Button) view.findViewById(R.id.bt_login);// 登录 + + mTb_message.setOnClickListener(this); + bt_login.setOnClickListener(this);// 登录 + tv_forget.setOnClickListener(this);// 忘记密码 + mShowPass = (CheckBox) view.findViewById(R.id.show_password);// 是否显示密码 + tv_sure=view.findViewById(R.id.tv_sure); +// tv_sure.setMovementMethod(ScrollingMovementMethod.getInstance()); + cb_ok=view.findViewById(R.id.cb_ok); +//取得设置好的drawable对象 + Drawable drawable = this.getResources().getDrawable( R.drawable.selector_new_check ); +//设置drawable对象的大小 + drawable . setBounds ( 0 , 0 , 54 , 54 ); +//设置CheckBox对象的位置,对应为左、上、右、下 + cb_ok.setCompoundDrawables ( drawable , null , null , null ); + im_wechat=view.findViewById(R.id.im_wechat); + im_wechat.setOnClickListener(this); + yinSi1(); + mShowPass.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + if (isChecked) {// 显示密码 + passwordEditText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + } else {// 隐藏密码 + passwordEditText.setInputType(InputType.TYPE_CLASS_TEXT + | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + passwordEditText.postInvalidate(); + // 切换后将EditText光标置于末尾 + CharSequence charSequence = passwordEditText.getText(); + if (charSequence instanceof Spannable) { + Spannable spanText = (Spannable) charSequence; + Selection.setSelection(spanText, charSequence.length()); + } + } + }); + String mobile = SharePrefUtil.getString(ct, Constant.SP_IS_FIRST_NAME,Constant.mobile, "");// 手机号 + // 验证是否是手机号 + if (ValidateUtils.isMobileNum(mobile)) { + usernameEditText.setText(mobile); + usernameEditText.setSelection(mobile.length()); + } + Intent intent = getIntent(); + Boolean flag = intent.getBooleanExtra("flag", false); + if (flag) { + usernameEditText.setText(intent.getStringExtra("phone")); + } + // 如果用户名改变,清空密码 + usernameEditText.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + passwordEditText.setText(null); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + mCb_change.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + cb_ok.setChecked(false); + // TODO Auto-generated method stub + if (isChecked) { + // top_right_text.setVisibility(View.VISIBLE); +// top_title.setText("登录"); + isPassLogin = true; + mCb_change.setText("短信验证码登录"); + tv_forget.setVisibility(View.VISIBLE); + mRl_password.setVisibility(View.VISIBLE); + mRl_message.setVisibility(View.GONE); + yinSi2(); + } else { + + + isPassLogin = false; +// top_right_text.setVisibility(View.GONE); +// top_title.setText("快速登录"); + yinSi1(); + mCb_change.setText("账号密码登录"); + tv_forget.setVisibility(View.GONE); + mRl_password.setVisibility(View.GONE); + mRl_message.setVisibility(View.VISIBLE); + // mLine.setVisibility(View.VISIBLE); + // mLl_num.setVisibility(View.VISIBLE); + + } + } + }); + + getDeviceInfo(); + if(getIntent()!=null&&!StringUtil.isEmpty(getIntent().getStringExtra("kick_out"))) + { + showlogout(getIntent().getStringExtra("kick_out")); + } + tv_forget.setVisibility(View.GONE); + mRl_password.setVisibility(View.GONE); + mRl_message.setVisibility(View.VISIBLE); + sdkInit(); + return view; + + + } + + private void yinSi1() + { + SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(yinsi2); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#8B2316")); + ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.parseColor("#8B2316")); + spannableBuilder.setSpan(colorSpan1, 31, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); + spannableBuilder.setSpan(colorSpan, 42, 54, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ClickableSpan clickableSpanOne = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getyyzc); + intent.putExtra("title", "《肝胆相照隐私政策》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + ClickableSpan clickableSpanOne1 = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "《肝胆相照用户服务协议》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + spannableBuilder.setSpan(clickableSpanOne, 31, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableBuilder.setSpan(clickableSpanOne1, 42, 54, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tv_sure.setMovementMethod(LinkMovementMethod.getInstance()); + tv_sure.setText(spannableBuilder); + } + private void yinSi2() + { + SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(yinsi1); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#8B2316")); + ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.parseColor("#8B2316")); + spannableBuilder.setSpan(colorSpan1, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); + spannableBuilder.setSpan(colorSpan, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ClickableSpan clickableSpanOne = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getyyzc); + intent.putExtra("title", "《肝胆相照隐私政策》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + ClickableSpan clickableSpanOne1 = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "《肝胆相照用户服务协议》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + spannableBuilder.setSpan(clickableSpanOne, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableBuilder.setSpan(clickableSpanOne1, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tv_sure.setMovementMethod(LinkMovementMethod.getInstance()); + tv_sure.setText(spannableBuilder); + } + public void sdkInit() { +// showProgressDialog("网络检测中"); + mTokenResultListener = new UMTokenResultListener() { + @Override + public void onTokenSuccess(String s) { +// closeProgressDialog(); + +// Log.e("LoginTAG", "jsonStrings "+mPhoneNumberAuthHelper.getCurrentCarrierName()); + mPhoneNumberAuthHelper.hideLoginLoading(); + + UMTokenRet tokenRet = null; + try { + tokenRet = UMTokenRet.fromJson(s); + if(UMResultCode.CODE_ERROR_ENV_CHECK_SUCCESS.equals(tokenRet.getCode())) + { + mPhoneNumberAuthHelper.getLoginToken(LoginNewActivity.this,3000); + } + else if(UMResultCode.CODE_ERROR_ENV_CHECK_SUCCESS.equals(tokenRet.getCode())) + { + mPhoneNumberAuthHelper.getLoginToken(LoginNewActivity.this,3000); + } + else if (UMResultCode.CODE_START_AUTHPAGE_SUCCESS.equals(tokenRet.getCode())) { +// Log.d("LoginTAG", "唤起授权页成功:" + s+mPhoneNumberAuthHelper.getCurrentCarrierName()); + } + + else if (UMResultCode.CODE_GET_TOKEN_SUCCESS.equals(tokenRet.getCode())) { + Log.d("LoginTAG", "获取token成功:" + s); + // mPhoneNumberAuthHelper.hideLoginLoading(); +// mPhoneNumberAuthHelper.quitLoginPage(); + getResultWithToken(tokenRet.getToken()); + + } + else + { + ToastUtil.showMessage(s); + } + } catch (Exception e) { + e.printStackTrace(); + Log.d("LoginTAG", "获取token失败:" + e.toString()); + } + } + + @Override + public void onTokenFailed(String s) { + Log.d("LoginTAG", "获取token失败:" + s); +// closeProgressDialog(); +// UMTokenRet tokenRet = null; + mPhoneNumberAuthHelper.hideLoginLoading(); +// mPhoneNumberAuthHelper.quitLoginPage(); +// try { +// tokenRet = UMTokenRet.fromJson(s); +// if (UMResultCode.CODE_ERROR_USER_CANCEL.equals(tokenRet.getCode())) { +// //模拟的是必须登录 否则直接退出app的场景 +//// finish(); +// } else { +// Toast.makeText(LoginNewActivity.this, "一键登录失败切换到其他登录方式", Toast.LENGTH_SHORT).show(); +//// Intent pIntent = new Intent(OneKeyLoginActivity.this, MessageActivity.class); +//// startActivityForResult(pIntent, 1002); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// Toast.makeText(LoginNewActivity.this, s, Toast.LENGTH_SHORT).show(); + + } + }; + mPhoneNumberAuthHelper = UMVerifyHelper.getInstance(this, mTokenResultListener); + mPhoneNumberAuthHelper.setAuthSDKInfo("ekYGnmwFM/LIyP8CwBJtN7OPVgg9UJuLlAS2yfVvhHYxbd3zx5mzRtkCU2S+81j5t1NjiHwDiirFISu8mApJhsOHqpqq9fDVfmsrcLhEfDUuzlVpPTVYcN0+B2Rxm+zK1FzLVq6VGf+GOLW2NLmH5VbJXLDX5wPdedcHSgsJikyD6+OypaDr/01DjsVLt8ElMqxcrptYWccUAAPQdvucA0tcjQcUN6beJpcB3zSTZghbvt0K6gjrNfzTb3ypudW5iPb55XYEGeqh0K3YmNphTLhiL+GC5oGJ+tNfsjICKau//5TTTmYGAw=="); +// mPhoneNumberAuthHelper.accelerateLoginPage(5000, new UMPreLoginResultListener() { +// @Override +// public void onTokenSuccess(final String vendor) { +// Log.d("LoginTAG", "vendor:" + vendor); +//// MainPortraitActivity.this.runOnUiThread(new Runnable() { +//// @Override +//// public void run() { +//// mRetTV.setText(vendor + "预取号成功!"); +//// } +//// }); +// } +// +// @Override +// public void onTokenFailed(final String vendor, final String ret) { +// Log.d("LoginTAG", "vendor:" + vendor+" "+ret); +//// MainPortraitActivity.this.runOnUiThread(new Runnable() { +//// @Override +//// public void run() { +//// mRetTV.setText(vendor + "预取号失败:\n" + ret); +//// } +//// }); +// } +// }); +// TokenResultListener tokenResultListener=new TokenResultListener() { +// @Override +// public void onTokenSuccess(String s) { +// Log.d("LoginTAG", "TokenResultListener成功:" + s); +// } +// +// @Override +// public void onTokenFailed(String s) { +// Log.d("LoginTAG", "TokenResultListener失败:" + s); +// } +// }; + + +// mPhoneNumberAuthHelper.expandAuthPageCheckedScope(true); + mUIConfig = BaseUIConfig.init(0,this, mPhoneNumberAuthHelper); + mUIConfig.configAuthPage(); + +// phoneNumberAuthHelper= PhoneNumberAuthHelper.getInstance(this, tokenResultListener); + mPhoneNumberAuthHelper.checkEnvAvailable(2); +// if(!checkRet){ +// Log.d("LoginTAG","当前网络不支持,请检测蜂窝网络后重试"); +// ToastUtil.showMessage("当前网络不支持,请检测蜂窝网络后重试"); +// } +// phoneNumberAuthHelper.getLoginToken(this,2000); + + + } + + Map we=new HashMap<>(); + + private UMAuthListener umAuthListener = new UMAuthListener() { + @Override + public void onStart(SHARE_MEDIA platform) { + //授权开始的回调 + } + @Override + public void onComplete(SHARE_MEDIA platform, int action, Map data) { + mPhoneNumberAuthHelper.quitLoginPage(); + we.clear(); + we.put("openid",data.get("openid")); + we.put("nickname",data.get("name")); + we.put("headimgurl",data.get("iconurl")); + we.put("unionid",data.get("unionid")); + JSONObject json = new JSONObject(we); + wechat_user_info=json.toString().replaceAll(" +",""); + wechatLog(wechat_user_info); +// Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show(); + +// String name = data.get("name"); +// openid = data.get("openid"); +// if(name!=null) +// data.put("nickname",name); +// unionid = data.get("unionid"); +// if(!StringUtil.isEmpty(data.get("unionid"))) + SharePrefUtil.saveString(LoginNewActivity.this,"unionid_wechat",data.get("unionid")); +// Log.d("gdxzwe","参数"+data.toString()); + +// String gender = data.get("gender"); +// String iconurl = data.get("iconurl"); +// String city = data.get("city"); +// String prvinice = data.get("prvinice"); +// String country = data.get("country"); +// String privilege = data.get("privilege"); + +// Log.d("gdxzwe","name = "+name); +// LogUtil.i("openid = "+openid); +// LogUtil.i("gender = "+gender); +// LogUtil.i("iconurl = "+iconurl); +// LogUtil.i("city = "+city); +// LogUtil.i("prvinice = "+prvinice); +// LogUtil.i("country = "+country); +// LogUtil.i("data = "+data.toString()); +// {country=中国, +// unionid=oCwO1wOWbP4RqmG7m5KnSdhLnyzg, +// gender=男, +// city=, +// openid=odr10s9qElmuO4O0GVE_i7RXuJfU, +// language=zh_CN, +// profile_image_url=http://thirdwx.qlogo.cn/mmopen/vi_32/t7KAzibDicb1pRq7VvLct5XGT7SJmTMlawIO9teLSqad0VVljEC1l9HMcibyWKxy07DJlbHkj620hcD6W8d5NXykg/132, +// accessToken=36_YNuIDu65cbK53Eat1CDec0IX8kGRTZePWZZvcEC-7clvoy2SC1qXVAf99RGlX3QyGzqy9sDFGJkyLB1R4YcaRn5f6EFWK6QFAVRQ5LlXg9M, +// access_token=36_YNuIDu65cbK53Eat1CDec0IX8kGRTZePWZZvcEC-7clvoy2SC1qXVAf99RGlX3QyGzqy9sDFGJkyLB1R4YcaRn5f6EFWK6QFAVRQ5LlXg9M, +// uid=oCwO1wOWbP4RqmG7m5KnSdhLnyzg, +// province=, +// screen_name=12355, +// name=12355, +// iconurl=http://thirdwx.qlogo.cn/mmopen/vi_32/t7KAzibDicb1pRq7VvLct5XGT7SJmTMlawIO9teLSqad0VVljEC1l9HMcibyWKxy07DJlbHkj620hcD6W8d5NXykg/132, +// expiration=1597635314447, +// expires_in=1597635314447, +// refreshToken=36_182iVW8iB03NQUXg7ktFTi0Zj4Z6SurQv9MZyYuB1rr3fHcOE-lFqD2Ue6k9X3-JC4BcsmdxqNuFi5vX69_hATi3JKj78g8xi6-xS1udCTI} + + + + } + + @Override + public void onError(SHARE_MEDIA platform, int action, Throwable t) { + +// Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCancel(SHARE_MEDIA platform, int action) { + +// Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show(); + } + }; + private void wechatLog(String wechat_user_info) + { + Map param = new HashMap<>(); + param.put("wechat_user_info",wechat_user_info); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(wechatLogin,param,203,this); + + } + /** + * 进入app就需要登录的场景使用 + */ + private void oneKeyLogin() { + mPhoneNumberAuthHelper = UMVerifyHelper.getInstance(getApplicationContext(), mTokenResultListener); +// mUIConfig.configAuthPage(); + getLoginToken(5000); + } + + /** + * 拉起授权页 + * @param timeout 超时时间 + */ + public void getLoginToken(int timeout) { + mPhoneNumberAuthHelper.getLoginToken(this, timeout); + + } + + String token; + public void getResultWithToken(String token) { + this.token=token; + showProgressDialog("正在登录"); + Map param = new HashMap<>(); + param.put("token",token); + sendJsonPostParamtoNetSignMD5(umGetMobile,param,201,this); + } + + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + setIntent(intent); + if(!StringUtil.isEmpty(getIntent().getStringExtra("kick_out"))) + { + showlogout(getIntent().getStringExtra("kick_out")); + } + } + + public void showlogout(String phone) + { + Date date = new Date(System.currentTimeMillis()); + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, + getString(R.string.nim_kick_out)+ + simpleDateFormat.format(date)+getString(R.string.nim_kick_out1)+ + phone+getString(R.string.nim_kick_out2) + , getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + dialog.dismiss(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + + // 保存个人信息 + public void getSaveUserInfor(int type,JSONObject objs) throws JSONException { + + JSONObject date = objs.getJSONObject("data"); + + String uuid = date.optString("uuid"); + String realName = date.optString("realName"); + String mobile = date.optString("mobile"); + String photo = date.optString("photo"); + String email = date.optString("email"); + String birthDate = date.optString("birthDate"); + String hospitalUuid = date.optString("hospitalUuid"); + String hospitalName = date.optString("hospitalName"); + String officeUuid = date.optString("officeUuid"); + String officeName = date.optString("officeName"); + String officePhone = date.optString("officePhone"); + String positionUuid = date.optString("positionUuid"); + String positionName = date.optString("positionName"); + String intro = date.optString("intro"); + String certificate = date.optString("certificate"); + String certificateImg = date.optString("certificateImg"); + String qrcode = date.optString("qrcode"); + checkInfo = date.optString("checkInfo"); + String cityId = date.optString("cityId"); + String countyId = date.optString("countyId"); + String provId = date.optString("provId"); + + String access_token = ""; + String refresh_token = ""; + if(objs.has("access_token")){ + access_token = objs.getString("access_token"); + refresh_token = objs.getString("refresh_token"); + } + if(date.has("access_token")){ + access_token = date.getString("access_token"); + refresh_token = date.getString("refresh_token"); + } + + int isStar = date.optInt("isStar"); + int sex = date.optInt("sex"); + state = date.optInt("state");// 审核状态( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 6.已通过 + SharePrefUtil.saveString(ct, Constant.USERID, uuid); + SharePrefUtil.saveString(ct, Constant.uuid, uuid);// 唯一标识,我的uuid + SharePrefUtil.saveString(ct, Constant.realName, realName);// 真实姓名 + SharePrefUtil.saveString(ct, Constant.mobile, mobile);// 手机号 + if (!StringUtil.isEmpty(currentUsername) + && ValidateUtils.isMobileNum(currentUsername)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, currentUsername);// 手机号,这个为了重新登录后回显之前的手机号 + } else if (!StringUtil.isEmpty(mobile) + && ValidateUtils.isMobileNum(mobile)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, mobile);// 手机号,这个为了重新登录后回显之前的手机号 + } + SharePrefUtil.saveString(ct, Constant.photo, photo);// 头像路径 + SharePrefUtil.saveString(ct, "email", email);// 邮箱 + SharePrefUtil.saveString(ct, "birthDate", birthDate);// 出生日期 + SharePrefUtil.saveString(ct, "hospitalUuid", hospitalUuid);// 坐诊医院uuid + SharePrefUtil.saveString(ct, "hospitalName", hospitalName);// 坐诊医院名称 + SharePrefUtil.saveString(ct, "officeUuid", officeUuid);// 科室uuid + SharePrefUtil.saveString(ct, "officeName", officeName);// 科室名称 + SharePrefUtil.saveString(ct, "officePhone", officePhone);// 科室电话 + SharePrefUtil.saveString(ct, "positionUuid", positionUuid);// //职称uuid + SharePrefUtil.saveString(ct, "positionName", positionName);// //职称名称 + SharePrefUtil.saveString(ct, "intro", intro);// 简介 + SharePrefUtil.saveString(ct, "certificate", certificate);// 执业资格证 + SharePrefUtil.saveString(ct, "certificateImg", certificateImg);// 执业资格证图片 + SharePrefUtil.saveString(ct, "qrcode", qrcode);// 二维码 + SharePrefUtil.saveString(ct, "checkInfo", checkInfo);// 审核信息 + SharePrefUtil.saveString(ct, "cityId", cityId);// 市id + SharePrefUtil.saveString(ct, "countyId", countyId);// //区县id + SharePrefUtil.saveString(ct, "provId", provId);// 省id + //让 uniapp 拿到 + SharePrefUtil.saveString(ct, "access_token", access_token);// access_token + SharePrefUtil.saveString(ct, "refresh_token", refresh_token);// refresh_token + + SharePrefUtil.saveInt(ct, "isStar", isStar);// 是否是肝胆名医 0否 1是 + SharePrefUtil.saveInt(ct, "sex", sex);// 性别(0.男 1.女) + SharePrefUtil.saveInt(ct, "state", state);// 审核状态( 1.待审核 + + initReport(); + addUMToken(PushAgent.getInstance(this).getRegistrationId()); + // 2.审核中3.需要补充修改资料 + // 4.再次提交审核5.拒绝 6.已通过) + // 进行判断是否进入主页面还是进入设置页面 + if(type==1)//老的登录 + { + getLoginInfo(state,objs); + } + else + { + getLoginInfo(state,date);//友盟一键登录 + } + + + + } + public void getYunxin(JSONObject objs) throws JSONException { + + String yx_accid =objs.getString("YX_accid"); + String yx_token =objs.getString("YX_token"); + SharePrefUtil.saveString(ct, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(ct, Constant.yx_token, yx_token); + } + + public void getLoginInfo(int state,JSONObject objs) throws JSONException { + + if (state != 6) { + // 需要完善资料,跳转到完善资料页面 + // ToastUtil.showToast("登录成功,请完善资料"); + // 启动登录设置信息界面 + Intent intent = new Intent(this, LoginSetInfoActivity.class); + intent.putExtra("checkInfo", checkInfo); + intent.putExtra("state", state); + startActivity(intent); + closeProgressDialog(); + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, false); + this.finish(); + } else { + getYunxin(objs); + + // 获取患者列表 + String USERID = SharePrefUtil.getString(ct, Constant.USERID, ""); + + // 获取患者列表存到数据库 + BaseActivity.getPatientList(this, PatientUrl, USERID); + String yx_accid =SharePrefUtil.getString(ct, Constant.yx_accid, ""); + String yx_token =SharePrefUtil.getString(ct, Constant.yx_token, ""); + doLauncherAction(); + // 登录 + loginYunxin(yx_accid,yx_token); + + } + + }; + public void loginYunxin(String yx_accid,String yx_token) + { + // 演示15s后手动登录,登录成功后,可以正常收发数据 + getHandler().postDelayed(() -> { + AbortableFuture loginRequest = NIMClient.getService(AuthService.class).login( + new LoginInfo(yx_accid, yx_token)); + loginRequest.setCallback(new RequestCallbackWrapper() { + + @Override + public void onResult(int code, Object result, Throwable exception) { + Log.i("test", "real login, code=" + code); + if (code == ResponseCode.RES_SUCCESS) { + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + finish(); + } + } + }); + }, 5 * 1000); + } + + + + public void wechatLogin() + { + UMShareConfig config = new UMShareConfig(); + config.isNeedAuthOnGetUserInfo(true); + UMShareAPI.get(LoginNewActivity.this).setShareConfig(config); + UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, umAuthListener); + } + public Boolean isAgree() + { + if(cb_ok.isChecked()) + { + + return true; + } + else + return false; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.im_wechat) {//微信登录 + if(!isAgree()) + { + if (isPassLogin) + { + show_yinsi(true); + } + else + { + show_yinsi2(true); + } +// ToastUtil.showMessage(R.string.custom_toast); + return; + } + + wechatLogin(); + } else if (id == R.id.top_back_layout) { + // 返回 + finish(); + AppManager.getAppManager().finishAllActivity(); + android.os.Process.killProcess(android.os.Process.myPid()); + } else if (id == R.id.bt_login) { + // 登录 + + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + if(!isAgree()) + { + if (isPassLogin) + { + show_yinsi(false); + } + else + { + show_yinsi2(false); + } +// ToastUtil.showMessage(R.string.custom_toast); + return; + } + if (isPassLogin) { + login(); + } else { + MessageLosin(); + } + } else if (id == R.id.tb_send_message) { + // 短信验证码 +// isAgree(); + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + return; + } + currentUsername = usernameEditText.getText().toString(); + Map param = new HashMap<>(); + param.put("mobile",currentUsername); + param.put("type","7"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); + } else if (id == R.id.top_right_text) { + // 注册 + startActivityForResult(new Intent(this, RegistActivity.class), 0); + } else if (id == R.id.tv_forget) { + // 忘记密码 + String mobile = usernameEditText.getText().toString(); + Intent i = new Intent(this, ForgetActivity.class); + i.putExtra("mobile", mobile); + startActivity(i); + } + } + + public void show_yinsi(Boolean iswechat) + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new_notitle, null); + AlertDialog dialog3 = new AlertDialog.Builder( + LoginNewActivity.this,AlertDialog.THEME_HOLO_LIGHT).create(); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(yinsi1); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#8B2316")); + ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.parseColor("#8B2316")); + spannableBuilder.setSpan(colorSpan1, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); + spannableBuilder.setSpan(colorSpan, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ClickableSpan clickableSpanOne = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getyyzc); + intent.putExtra("title", "《肝胆相照隐私政策》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + ClickableSpan clickableSpanOne1 = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "《肝胆相照用户服务协议》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + spannableBuilder.setSpan(clickableSpanOne, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableBuilder.setSpan(clickableSpanOne1, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tv_tishi.setMovementMethod(LinkMovementMethod.getInstance()); + tv_tishi.setText(spannableBuilder); + tv_tishi.setGravity(Gravity.LEFT); + dialog3.show(); + Window window =dialog3.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog3.dismiss(); + if(iswechat) + { + wechatLogin(); + } + else + { + if (isPassLogin) { + login(); + } else { + MessageLosin(); + } + } + } + }); + } + private void show_yinsi2(Boolean iswechat) + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new_notitle, null); + AlertDialog dialog3 = new AlertDialog.Builder( + LoginNewActivity.this,AlertDialog.THEME_HOLO_LIGHT).create(); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(yinsi2); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#8B2316")); + ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.parseColor("#8B2316")); + spannableBuilder.setSpan(colorSpan1, 31, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); + spannableBuilder.setSpan(colorSpan, 42, 54, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ClickableSpan clickableSpanOne = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getyyzc); + intent.putExtra("title", "《肝胆相照隐私政策》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + ClickableSpan clickableSpanOne1 = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(LoginNewActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "《肝胆相照用户服务协议》"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + spannableBuilder.setSpan(clickableSpanOne, 31, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableBuilder.setSpan(clickableSpanOne1, 42, 54, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tv_tishi.setMovementMethod(LinkMovementMethod.getInstance()); + tv_tishi.setText(spannableBuilder); + tv_tishi.setGravity(Gravity.LEFT); + dialog3.show(); + Window window =dialog3.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog3.dismiss(); + if(iswechat) + { + wechatLogin(); + } + else + { + if (isPassLogin) { + login(); + } else { + MessageLosin(); + } + } + } + }); + } + @Override + public void onBackPressed() { + // TODO Auto-generated method stub + super.onBackPressed(); + // 监听返回键 + finish(); + AppManager.getAppManager().finishAllActivity(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + /** + * 登录 + */ + public void login() { + + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + return; + } + // 数据验证 + currentUsername = usernameEditText.getText().toString().trim(); + currentPassword = passwordEditText.getText().toString().trim(); + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(currentPassword)) { + ToastUtil.showToast("密码不为空"); + return; + } + if (!ValidateUtils.isPassword(currentPassword)) { + ToastUtil.showToast("请输入6-16位字母、数字组合密码"); + return; + } + + + + // 登陆时用户密码加密 + showProgressDialog("正在登录"); + Map param = new HashMap<>(); + param.put("password",currentPassword); + param.put("mobile",currentUsername); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(getlogin,param,YXREGISTER,this); + } + + + /** + * + * @author gaofei + * @date 2015-9-8 下午4:22:04 + * + * 功能说明:获得设备信息,设备类型,设备型号 + * + * method + */ + private void getDeviceInfo() { + String mobileName = ""; + String mobileType = ""; + try { + mobileName = android.os.Build.MANUFACTURER; + mobileType = android.os.Build.MODEL; + } catch (Exception e) { + e.printStackTrace(); + } + deviceSpec = mobileName + " " + mobileType; + deviceSpec = deviceSpec.replaceAll("\\s*", ""); + + } + + @Override + protected void onResume() { + super.onResume(); + + + } + + + + private void doLauncherAction() { + + closeProgressDialog(); + // ( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 + // 6.已通过) + // 注册成功跳转 + Intent intent = new Intent(); +// if(BigModule()) +// { +// intent.setClass(this, BigMainActivity.class); +// +// } +// else +// { + intent.setClass(this, MainActivity.class); +// } + intent.putExtra("launcher_from", 1); + + startActivity(intent); + Constant.islogout = 2; + // 保存登陆 + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, true); + + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(LoginNewActivity.this, 1); + } + + public final static int GET_SYSTEM_TIME_RESULT = 103; + + public void getSystemTime() { + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, + LoginNewActivity.this, true); + } + + public final static int GET_MESSAGE_DATA_RESULT = 101; + public final static int GET_MESSAGE_LOGIN_RESULT = 102; + + public void sendMessage() { + + currentUsername = usernameEditText.getText().toString(); + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(system_time)) { + ToastUtil.showToast("未能获取网络时间"); + return; + } + + int a = StringUtil.getnum(); + String mc = null; + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(currentUsername + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Map param = new HashMap(); + param.put("mc", mc); + param.put("a", a + ""); + sendParamtoNet(Url.getQuickLoginSms, param, GET_MESSAGE_DATA_RESULT,LoginNewActivity.this, true); + + } + + public void MessageLosin() { + if (!UIUtils.isNetWorkConnected(this)) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + return; + } + if (TextUtils.isEmpty(currentUsername)) { + currentUsername = usernameEditText.getText().toString(); + } + currentPassword = messageEditText.getText().toString(); + + if (TextUtils.isEmpty(currentUsername)) { + ToastUtil.showToast("手机号码不为空"); + return; + } + if (!ValidateUtils.isMobileNum(currentUsername)) { + ToastUtil.showToast("手机号码不正确"); + return; + } + if (TextUtils.isEmpty(currentPassword)) { + ToastUtil.showToast("验证码不为空"); + return; + } + showProgressDialog("正在登录"); + Map param = new HashMap(); + param.put("mobile", currentUsername); + param.put("sms", currentPassword); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(Url.umSmsLogin, param, GET_MESSAGE_LOGIN_RESULT, + LoginNewActivity.this); + + + + } + private void startBind() + { +// mPhoneNumberAuthHelper.quitLoginPage(); + Intent intent=new Intent(LoginNewActivity.this,BindNumberActivity.class); + intent.putExtra("wechat_user_info",wechat_user_info); + startActivity(intent); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.e("LoginTAG", "resultCode "+resultCode+" resultJson "+resultJson); + switch (resultCode) { + case 1122: + JSONObject jsonObject = null; + + try { + jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))&&!jsonObject.isNull("data")) { + Constant.Report_userId= jsonObject.optJSONObject("data").optString("userId"); + Constant.Repotr_token=jsonObject.optJSONObject("data").optString("token"); + Constant.Repotr_app_key=jsonObject.optJSONObject("data").optString("appKey"); + needreportSimple("login"); + + + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 201: + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + if(objs.optJSONObject("data")!=null) + { + if(objs.optJSONObject("data").optJSONObject("data")!=null + &&!StringUtil.isEmpty(objs.optJSONObject("data").optJSONObject("data").optString("mobile"))) + { + + Map param = new HashMap<>(); +// param.put("token",token); + param.put("mobile",objs.optJSONObject("data").optJSONObject("data").optString("mobile")); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(umVerifyLogin,param,202,this); + + } + } + } else { + ToastUtil.showToast(message); + + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("一键登录失败"); + + e.printStackTrace(); + } + break; + case 202: + + SharePrefUtil.saveString(ct, Url.getmodify, resultJson); + try { + + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.optString("code"); + String message = objs.optString("msg"); + + if ("200".equals(retcode)) { + // 得到个人资料,并保存 + getSaveUserInfor(2,objs); + + } else { + closeProgressDialog(); + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + + } + break; + case GET_MESSAGE_LOGIN_RESULT: + case 203: + try { + + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.optString("code"); + String message = objs.optString("msg"); + if ("10007".equals(retcode)) { + startBind(); + // 得到个人资料,并保存 +// getSaveUserInfor(2,objs); + + } + else if ("200".equals(retcode)) { + getSaveUserInfor(2,objs); + // 得到个人资料,并保存 +// getSaveUserInfor(2,objs); + + } + else { + closeProgressDialog(); + + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + + } + + break; + case MSG_SEND: + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("200")) { + mTb_message.startTimer(); + } else { + ToastUtil.showToast(message); + mTb_message.clearTimer(); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("获取验证码失败,请重试"); + mTb_message.clearTimer(); + e.printStackTrace(); + } + + break; + case YXREF: + + try { + JSONObject objs = null; + objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if ("200".equals(retcode)) { + String yx_accid =objs.getString("YX_accid"); + String yx_token =objs.getString("YX_token"); + SharePrefUtil.saveString(ct, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(ct, Constant.yx_token, yx_token); + NimUIKit.login(new LoginInfo(yx_accid, yx_token, null, 0), + new RequestCallback() { + @Override + public void onSuccess(LoginInfo param) { + + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + doLauncherAction(); } + + @Override + public void onFailed(int code) { + + closeProgressDialog(); + ToastHelper.showToast(LoginNewActivity.this,"云信登录失败: " + code); + + + + + } + + @Override + public void onException(Throwable exception) { + closeProgressDialog(); + ToastHelper.showToast(LoginNewActivity.this,"云信登录失败" ); + } + }); + + + } + else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + + case YXREGISTER: + + SharePrefUtil.saveString(ct, Url.getmodify, resultJson); + try { + + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (("1").equals(retcode)) { + // 得到个人资料,并保存 + getSaveUserInfor(1,objs); + + + + + } else { + closeProgressDialog(); + ToastUtil.showToast(message); + } + } catch (JSONException e) { + e.printStackTrace(); + closeProgressDialog(); + ToastUtil.showToast("登录失败,请重试"); + } + break; + case GET_MESSAGE_DATA_RESULT: + JSONObject objs; + try { + objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals("1")) { + mTb_message.startTimer(); + } else { + ToastUtil.showToast(message); + mTb_message.clearTimer(); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + ToastUtil.showToast("获取验证码失败,请重试"); + mTb_message.clearTimer(); + e.printStackTrace(); + } + + break; + + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + sendMessage(); + break; + default: + break; + } + } + + @Override + protected void onStop() { + super.onStop(); + + + + } + + @Override + protected void onDestroy() { + mTb_message.onDestroy(); + super.onDestroy(); + UMShareAPI.get(this).release(); + mUIConfig.release(); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK&& event.getAction() == KeyEvent.ACTION_DOWN){ + finishAffinity(); + AppManager.getAppManager().finishAllActivity(); + System.exit(0); + } + return false; + } + private void saveLoginInfo(final String account, final String token) { + Preferences.saveUserAccount(account); + Preferences.saveUserToken(token); + } + private void initNotificationConfig() { + // 初始化消息提醒 + NIMClient.toggleNotification(UserPreferences.getNotificationToggle()); + // 加载状态栏配置 + StatusBarNotificationConfig statusBarNotificationConfig = UserPreferences.getStatusConfig(); + if (statusBarNotificationConfig == null) { + statusBarNotificationConfig = DemoCache.getNotificationConfig(); + UserPreferences.setStatusConfig(statusBarNotificationConfig); + } + // 更新配置 + NIMClient.updateStatusBarNotificationConfig(statusBarNotificationConfig); + } + + public void initReport() + { + + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getTagToken,map,1122,this); + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity.java new file mode 100644 index 0000000..dea11f4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity.java @@ -0,0 +1,1833 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.drawable.ColorDrawable; +import android.os.AsyncTask; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.download.ImageDownloader.Scheme; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.GetHospitalListBean; +import cn.shangyu.gdxzExpert.bean.GetListBean; +import cn.shangyu.gdxzExpert.bean.GetListBean.ListData; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean.SpecialData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.EditPopupWindow; +import cn.shangyu.gdxzExpert.widge.pickerview.EditPopupWindow.SubmitListener; +import cn.shangyu.gdxzExpert.widge.pickerview.OptionsPopupWindow; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.OnWheelChangedListener; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.WheelView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:登陆后需要完善资料审核页面 + */ +public class LoginSetInfoActivity extends BaseActivity implements + OnItemClickListener { + + private Button submit_myinfo; + private TextView tv_showCheckInfo; + private ImageView upload_certificateImg; + private static final int TO_SELECT_PHOTO = 3; + private static final int TO_SELECT_PHOTO1 = 1; + private static final String NEXT_PAGE = "-99"; + private String picBase64 = ""; + public static String hospitalListUrl = Url.gethospitalList;// 医院列表 + public static String getHospitalByCountyID = Url.getHospitalByCountyID;// 医院列表 + public static String officeListUrl = Url.getofficeList;// 科室列表 + public static String positionListUrl = Url.getpositionList;// 职称列表 + public static String diseaseUrl = Url.getdisease;// 专长列表 + public static String modifyUrl = Url.getmodify;// 修改个人资料 +// public static String modifyUrl = "http://192.168.100.20:8080/app/expert/modify";// 修改个人资料 + private String hospitalUuid = ""; + private String officeUuid = ""; + private String positionUuid = ""; + private String uuid; + private int state = 0; + private String name = ""; + private int sex = 0; + private String hospitalName = ""; + private String officeName = ""; + private String positionName = ""; + private String zgnumber = ""; + private String content = "正在加载"; + private GridView gv_disease; + private MyAdapter adapter; + private String disease = ""; + private String etHospitalName; + private String etOfficeName; + private String etProfessionalName; + private String officePhone; + private ImageView my_photo; + private String picBase641 = ""; + private ArrayList provinceList; + private SQLiteDatabase db; + private String provinceId = "";// 省ID + private String cityId = ""; + private String disctictId = ""; + private boolean choosehos =false; + private TextView my_hospital; + private TextView my_office_phone; + private TextView my_professional; + private TextView my_zgzs_number; + private TextView my_disease; + private TextView my_name; + private TextView my_sex; + private TextView my_office_name; + private int checkNum = 0; // 记录选中的条目数量 + private ECAlertDialog buildAlert; + private String[] specialPosintions; + private OptionsPopupWindow pwSexOptions; + private ArrayList optionsSexItems = new ArrayList(); + private ArrayList officeListItems = new ArrayList(); + private ArrayList professionalListItems = new ArrayList(); + private ArrayList hospitalListItems = new ArrayList(); + private ArrayList officeListUuidItems = new ArrayList(); + private ArrayList professionalUuidListItems = new ArrayList(); + private ArrayList hospitalListUuidItems = new ArrayList(); + private List diseaseList = new ArrayList(); + private EditPopupWindow editPw; + private OptionsPopupWindow pwOptions; + private PopupWindow popGridView; + private String lon = "116.3"; + private String lat = "39.9"; + private int page = 1; + private String userName; + + private LinearLayout ll_my_name, ll_my_sex, ll_my_hospital, + ll_my_office_name, ll_my_office_phone, ll_my_professional, + ll_my_zgzs_number, ll_upload_certificateImg, ll_my_disease,ll_my_photo; + private String mobile; + + @Override + public void setTitle() { + top_title.setText("完善个人资料"); + top_right_text.setText("保存"); + top_right_text.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + top_back_layout.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_setting_information); + + my_photo = view.findViewById(R.id.my_photo);// 头像 + + ll_my_name = (LinearLayout) view.findViewById(R.id.ll_my_name);// 姓名 + my_name = (TextView) view.findViewById(R.id.my_name);// 姓名 + + ll_my_sex = (LinearLayout) view.findViewById(R.id.ll_my_sex);// sex + my_sex = (TextView) view.findViewById(R.id.my_sex);// sex + + ll_my_hospital = (LinearLayout) view.findViewById(R.id.ll_my_hospital);// 医院 + my_hospital = (TextView) view.findViewById(R.id.my_hospital);// 医院名称 + ll_my_photo=(LinearLayout) view.findViewById(R.id.ll_my_photo); + ll_my_office_name = (LinearLayout) view + .findViewById(R.id.ll_my_office_name);// 工作室 + my_office_name = (TextView) view.findViewById(R.id.my_office_name);// 工作室名称 + + ll_my_office_phone = (LinearLayout) view + .findViewById(R.id.ll_my_office_phone);// 工作室电话 + my_office_phone = (TextView) view.findViewById(R.id.my_office_phone);// 工作室 + + ll_my_professional = (LinearLayout) view + .findViewById(R.id.ll_my_professional);// 职业职称 + my_professional = (TextView) view.findViewById(R.id.my_professional);// 职业职称 + + ll_my_zgzs_number = (LinearLayout) view + .findViewById(R.id.ll_my_zgzs_number);// 医师资格证号码 + my_zgzs_number = (TextView) view.findViewById(R.id.my_zgzs_number);// 医师资格证号码 + + ll_upload_certificateImg = (LinearLayout) view + .findViewById(R.id.ll_upload_certificateImg);// 医师资格证图片 + upload_certificateImg = (ImageView) view + .findViewById(R.id.upload_certificateImg);// 医师资格证图片 + + ll_my_disease = (LinearLayout) view.findViewById(R.id.ll_my_disease);// 专长 + my_disease = (TextView) view.findViewById(R.id.my_disease);// 专长 + + submit_myinfo = (Button) view.findViewById(R.id.submit_myinfo);// 提交 + tv_showCheckInfo = (TextView) view.findViewById(R.id.tv_showCheckInfo);// 回显审核状态 + +// my_photo.setOnClickListener(this); + ll_my_name.setOnClickListener(this); + ll_my_sex.setOnClickListener(this); + ll_my_hospital.setOnClickListener(this); + ll_my_office_name.setOnClickListener(this); + ll_my_office_phone.setOnClickListener(this); + ll_my_professional.setOnClickListener(this); + ll_my_zgzs_number.setOnClickListener(this); + ll_upload_certificateImg.setOnClickListener(this); + ll_my_disease.setOnClickListener(this); + submit_myinfo.setOnClickListener(this); + ll_my_photo.setOnClickListener(this); + // initListView(); + + showProgressDialog("正在加载"); + + initView(); + + initData(); + Log.e("LoginTAG", "photo "+Url.urlHtml + photo); + return view; + } + + String certificateImg; + String photo; + + private void initData() { + + uuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + + // 取出我的uuid + uuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + // 取出上一次提交后,后台返回的信息 + mobile = SharePrefUtil.getString(ct, Constant.mobile, ""); + name = SharePrefUtil.getString(ct, Constant.realName, ""); + sex = SharePrefUtil.getInt(ct, "sex", 0); + hospitalUuid = SharePrefUtil.getString(ct, "hospitalUuid", ""); + hospitalName = SharePrefUtil.getString(ct, "hospitalName", ""); + officeUuid = SharePrefUtil.getString(ct, "officeUuid", ""); + officeName = SharePrefUtil.getString(ct, "officeName", ""); + officePhone = SharePrefUtil.getString(ct, "officePhone", ""); + positionUuid = SharePrefUtil.getString(ct, "positionUuid", ""); + positionName = SharePrefUtil.getString(ct, "positionName", ""); + zgnumber = SharePrefUtil.getString(ct, "certificate", ""); + + cityId = SharePrefUtil.getString(ct, "cityId", ""); + disctictId = SharePrefUtil.getString(ct, "countyId", ""); + provinceId = SharePrefUtil.getString(ct, "provId", ""); + + certificateImg = SharePrefUtil.getString(ct, "certificateImg", ""); + photo = SharePrefUtil.getString(ct, "photo", null); + + // 回显数据 + if (!TextUtils.isEmpty(name) && !"null".equals(name)) { + my_name.setText(name); + } + if (0 == sex) { + my_sex.setText(getResources().getString(R.string.man)); + } else if (1 == sex) { + my_sex.setText(getResources().getString(R.string.women)); + } + pwSexOptions.setSelectOptions(sex); + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + // ImageLoader.getInstance().displayImage(Url.urlHtml + + // photo,my_photo); + // bm转换为base64位编码 + ImageLoader.getInstance().loadImage(Url.urlHtml + photo, + new SimpleImageLoadingListener() { + + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + super.onLoadingComplete(imageUri, view, loadedImage); + ImageLoader.getInstance().displayImage(imageUri, + my_photo); + picBase641 = Base64Util.BitmaptoBase64(loadedImage); + LogUtil.i("picBase64touxiang====" + picBase641); + } + }); + + } + else + { + //去掉默认头像 + +// ImageLoader.getInstance().loadImage(Url.urlHtml + "images/default_photo.png", +// new SimpleImageLoadingListener() { +// +// @Override +// public void onLoadingComplete(String imageUri, +// View view, Bitmap loadedImage) { +// super.onLoadingComplete(imageUri, view, loadedImage); +// ImageLoader.getInstance().displayImage(imageUri, +// my_photo); +// picBase641 = Base64Util.BitmaptoBase64(loadedImage); +// LogUtil.i("picBase64touxiang====" + picBase641); +// } +// }); +// Log.e("LoginTAG", "photo "+Url.urlHtml + photo); + } + if (!TextUtils.isEmpty(hospitalName) && !"null".equals(hospitalName)) { + + my_hospital.setText(hospitalName); + } + if (!TextUtils.isEmpty(officeName) && !"null".equals(officeName)) { + + my_office_name.setText(officeName); + } + if (!TextUtils.isEmpty(officePhone) && !"null".equals(officePhone)) { + + my_office_phone.setText(officePhone); + } + if (!TextUtils.isEmpty(positionName) && !"null".equals(positionName)) { + + my_professional.setText(positionName); + } + if (!TextUtils.isEmpty(zgnumber) && !"null".equals(zgnumber)) { + + my_zgzs_number.setText(zgnumber); + } + if (!TextUtils.isEmpty(certificateImg) + && !"null".equals(certificateImg)) { + // ImageLoader.getInstance().displayImage(Url.urlHtml + + // certificateImg, upload_certificateImg); + + // bm转换为base64位编码 + ImageLoader.getInstance().loadImage(Url.urlHtml + certificateImg, + new SimpleImageLoadingListener() { + + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + super.onLoadingComplete(imageUri, view, loadedImage); + ImageLoader.getInstance().displayImage(imageUri, + upload_certificateImg); + picBase64 = Base64Util.BitmaptoBase64(loadedImage); + } + }); + } + // 取出缓存中保存的专长 + String r = SharePrefUtil.getString(ct, modifyUrl, ""); + if (!TextUtils.isEmpty(r)) { + SettingInfoBean bean = GsonTools.fromGsonToBean(r, + SettingInfoBean.class); + // InfoData data = bean.data; + List special = bean.special;// 专长 + if (special != null && special.size() > 0) { + specialPosintions = new String[special.size()]; + String diseaseName = ""; + for (int i = 0; i < special.size(); i++) { + String diseaseUuid = special.get(i).diseaseUuid; + specialPosintions[i] = diseaseUuid; + disease += special.get(i).diseaseUuid + ",";// 专长uuid + diseaseName += special.get(i).diseaseName + "、";// 专长名字 + LogUtil.i("diseaseUuid===" + diseaseUuid + "diseaseName==="+ diseaseName); + checkNum = special.size(); + } + // 去掉最后一个“、” + if (!TextUtils.isEmpty(diseaseName) && diseaseName.length() > 0) { + diseaseName = diseaseName.substring(0,diseaseName.length() - 1).replace("(甲、乙、丙、丁、戊肝)",""); + my_disease.setText(diseaseName); + } + } + } + + // 获取审核状态值 + Intent intent = getIntent(); + // ( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 + // 6.已通过)//修改,0,1,3,4,5需要提交资料,6是通过,2其他不允许提交 + state = intent.getIntExtra("state", 0); + String checkInfo = intent.getStringExtra("checkInfo"); + userName = intent.getStringExtra("phone"); + LogUtil.i("审核信息==" + state); + // 根据状态进行显示规则,与提示用户 + if(11 == state||10 == state ||9 == state)//hcp登陆可编辑 + { + tv_showCheckInfo.setVisibility(View.GONE); + tv_showCheckInfo.setText("请完善资料"); + submit_myinfo.setVisibility(View.VISIBLE); + setInfoClick(true); + submit_myinfo.setVisibility(View.VISIBLE); + submit_myinfo.setEnabled(true); + + } + else if (0 == state || 1 == state) {// 0,3,5需要提交资料 + tv_showCheckInfo.setVisibility(View.GONE); + tv_showCheckInfo.setText("请完善资料"); + submit_myinfo.setVisibility(View.VISIBLE); + setInfoClick(true); + submit_myinfo.setVisibility(View.VISIBLE); + submit_myinfo.setEnabled(true); + // 根据不同用户名获取相应的资料 + String mobile = SharePrefUtil.getString(ct, + Constant.SP_IS_FIRST_NAME, Constant.mobile, "");// 登录的手机号 + get(mobile); + + } else if (3 == state || 4 == state || 5 == state) {// 3,5需要提交资料//7 + tv_showCheckInfo.setVisibility(View.VISIBLE); + String text = "您的资料未通过审核,请修改完善后重新提交。"; + if (!TextUtils.isEmpty(checkInfo)) { + text = checkInfo; + } + tv_showCheckInfo.setText(text); + showAlertTips(text); + setInfoClick(true); + submit_myinfo.setVisibility(View.VISIBLE); + submit_myinfo.setEnabled(true); + + } else if (6 == state) {// 通过 + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("您的资料已经通过了审核,将会自动进入应用"); + setInfoClick(false); + submit_myinfo.setVisibility(View.GONE); + submit_myinfo.setEnabled(false); + ToastUtil.showToast("您的资料已经通过了审核,将会自动进入应用"); + try { + Thread.sleep(2000); + // 注册成功跳转 + Intent i = new Intent(); +// if(BigModule()) +// { +// i.setClass(this, BigMainActivity.class); +// +// } +// else +// { + i.setClass(this, MainActivity.class); +// } + i.putExtra("launcher_from", 1); + startActivity(i); + // 保存登陆 + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, true); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } else if (7 == state){//2018.12.21改,checkInfo = undefind继续追踪,暂不出现弹窗处理 + setInfoClick(true); + submit_myinfo.setVisibility(View.VISIBLE); + submit_myinfo.setEnabled(true); + }else { + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("肝胆相照将尽快对您的资料进行审核,请耐心等待。"); + setInfoClick(false); + submit_myinfo.setVisibility(View.GONE); + submit_myinfo.setEnabled(false); + } + + + + + // showAlertTips(tv_showCheckInfo.getText().toString()); + + // 下面是获取列表 + // getList(hospitalListUrl);// 获取医院列表 + getList(officeListUrl);// 获取科室列表 + getList(positionListUrl);// 获取职称列表 + getList(diseaseUrl);// 获取专长 + + // 取出定位的数据 + lon = SharePrefUtil.getString(ct, Constant.LON, "116.3"); + lat = SharePrefUtil.getString(ct, Constant.LAT, "39.9"); + String province = SharePrefUtil.getString(ct, Constant.PROVINCE, "北京市"); + String city = SharePrefUtil.getString(ct, Constant.CITY, "北京市"); + String district = SharePrefUtil.getString(ct, Constant.DISTRICT, "东城区"); + LogUtil.i("lon=" + lon + "lat=" + lat + "province=" + province + + "city=" + city + "district=" + district); + // 设置默认选中城市 + setSelectedCity(province, city, district); + // 执行检出城市 + new InitAreaTask().execute(); + + } + + /** + * 设置资料各项点击事件 + */ + private void setInfoClick(boolean b) { + ll_my_photo.setEnabled(b); + ll_my_name.setEnabled(b); + ll_my_sex.setEnabled(b); + ll_my_hospital.setEnabled(b); + ll_my_office_name.setEnabled(b); + ll_my_office_phone.setEnabled(b); + ll_my_professional.setEnabled(b); + ll_my_zgzs_number.setEnabled(b); + ll_upload_certificateImg.setEnabled(b); + ll_my_disease.setEnabled(b); + } + + // 弹出对话框 + private void showAlertTips(String message) { + buildAlert = ECAlertDialog.buildAlert(ct, message, + R.string.dialog_btn_confim, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (buildAlert.isShowing()) { + buildAlert.dismiss(); + } + + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + + } + + private void initView() { + // 初始化性别弹出框 + showSexPwOptions(); + + } + + /* + * private void initListView() { listView = new ListView(this); + * listView.setBackgroundResource(R.drawable.listview_background); Drawable + * drawable = getResources().getDrawable(R.drawable.news_list_line); + * listView.setDivider(drawable); listView.setCacheColorHint(0); + * listView.setVerticalScrollBarEnabled(false); // 关闭 } + */ + + // 定义 popupWindow + /* + * public void setPopupWindow(View et) { popWin = new PopupWindow(ct); + * popWin.setWidth(LayoutParams.MATCH_PARENT);// 设置宽度 + * popWin.setHeight(getWindowManager().getDefaultDisplay().getHeight()/3);// + * 设置popWin 高度 popWin.setContentView(listView);// 为popWindow填充内容 + * popWin.setOutsideTouchable(true);// 点击popWin 以处的区域,自动关闭 popWin // + * popWin.showAsDropDown(et, 0, -5);//设置 弹出窗口,显示的位置 + * popWin.showAtLocation(et, Gravity.BOTTOM, 0, 0);//从底部弹出 } + */ + + @Override + protected void processClick(View v) { + // 为了验证是不是上一个用户 + String mobile = SharePrefUtil.getString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, "");// 手机号 + switch (v.getId()) { + case R.id.ll_my_name:// 姓名 + showEditPopuWindows(my_name, 1); + break; + case R.id.ll_my_sex:// 性别 + pwSexOptions.showAtLocation(my_sex, Gravity.BOTTOM, 0, 0); + break; + case R.id.ll_my_hospital:// 医院 + // 设置适配器 + // listView.setAdapter(new MyListAdapter(my_hospital, + // hospitalList)); + // // 弹出popuwindow框 + // setPopupWindow(my_hospital); + // 先选择者城市再选择医院 + startActivityForResult(new Intent(LoginSetInfoActivity.this,ChoosehospitalActivity.class),333); +// pwCityOptions.showAtLocation(my_hospital, Gravity.BOTTOM, 0, 0); + // showPwOptions("请选择医院", hospitalListItems, hospitalListUuidItems, + // my_hospital, 1); + break; + case R.id.ll_my_office_name:// 科室 + showPwOptions("请选择科室", officeListItems, officeListUuidItems, + my_office_name, 2); + break; + case R.id.ll_my_office_phone:// 科室电话 + showEditPopuWindows(my_office_phone, 2); + break; + case R.id.ll_my_professional:// 职称 + showPwOptions("请选择职称", professionalListItems, + professionalUuidListItems, my_professional, 3); + break; + case R.id.ll_my_zgzs_number:// 资格证号 + showEditPopuWindows(my_zgzs_number, 3); + break; + case R.id.ll_upload_certificateImg:// 资格证图片 + save(mobile); + Intent intent = new Intent(ct, SelectedPhotoActivity.class); + intent.putExtra("isConstraint", true);// 是否等比例裁剪 + startActivityForResult(intent, TO_SELECT_PHOTO); + // 进入退出动画 + overridePendingTransition(R.anim.timepicker_anim_enter_bottom, + R.anim.timepicker_anim_exit_bottom); + break; + case R.id.ll_my_disease:// 专长 + showDiseasePop(my_disease); + break; + case R.id.submit_myinfo:// 提交 + submitInfo(); + break; + case R.id.ll_my_photo:// 头像 + save(mobile); + Intent intent1 = new Intent(ct, SelectedPhotoActivity.class); + startActivityForResult(intent1, TO_SELECT_PHOTO1); + // 进入退出动画 + overridePendingTransition(R.anim.timepicker_anim_enter_bottom, + R.anim.timepicker_anim_exit_bottom); + break; + case R.id.top_back_layout:// 返回 + Intent Login = new Intent(ct, LoginNewActivity.class); + // 注册后跳转到登录页面 + + Login.putExtra("phone", userName); + Login.putExtra("flag", true); + startActivity(Login); + // android.os.Process.killProcess(android.os.Process.myPid()); + this.finish(); + break; + // 保存当前编辑的个人资料 + case R.id.top_right_text: + save(mobile); + ToastUtil.showMessage("您输入的个人资料已经保存,请完善所有信息后提交审核"); + default: + break; + } + } + + // 返回键监听 + @Override + public void onBackPressed() { + // TODO Auto-generated method stub +// android.os.Process.killProcess(android.os.Process.myPid()); +// finish(); + super.onBackPressed(); +// finish(); +// AppManager.getAppManager().finishAllActivity(); +// android.os.Process.killProcess(android.os.Process.myPid()); + Intent Login = new Intent(ct, LoginNewActivity.class); + // 注册后跳转到登录页面 + + Login.putExtra("phone", userName); + Login.putExtra("flag", true); + startActivity(Login); + // android.os.Process.killProcess(android.os.Process.myPid()); + this.finish(); + + } + + /** + * 弹出输入框 showEditPopuWindows + * + * @param parent + * @param flag + * void + */ + private void showEditPopuWindows(final View parent, final int flag) { + // if (editPw == null) { + // 选项选择器 + editPw = new EditPopupWindow(ct); + // } + String text = ""; + if (flag == 1) { + editPw.setInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME); + editPw.setPopupTitle("请输入姓名"); + editPw.setMaxLength(20); + if (!StringUtil.isBland(name)) { + text = name; + } + } else if (flag == 2) { + // editPw.setInputType(InputType.TYPE_CLASS_PHONE); + editPw.setPopupTitle("请输入科室电话"); + if (!StringUtil.isBland(officePhone)) { + text = officePhone; + } + } else if (flag == 3) { + editPw.setInputType(InputType.TYPE_CLASS_NUMBER); + editPw.setPopupTitle("请输入职业医师资格证号码"); + editPw.setMaxLength(30); + if (!StringUtil.isBland(zgnumber)) { + text = zgnumber; + } + } + editPw.showAtLocation(parent, Gravity.BOTTOM, 0, 0, text); + // 监听确定选择按钮 + editPw.setSubmitListener(new SubmitListener() { + + @Override + public void onSubmit(String inputText) { + if (flag == 1) { + my_name.setText(inputText); + name = inputText; + } else if (flag == 2) { + if (inputText.length() < 10) { + ToastUtil.showToast("请输入正确的科室电话"); + return; + } + my_office_phone.setText(inputText); + officePhone = inputText; + } else if (flag == 3) { + my_zgzs_number.setText(inputText); + zgnumber = inputText; + } + // 得到InputMethodManager的实例 + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow( + editPw.getEtName().getWindowToken(), 0); + // ((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)) + // .hideSoftInputFromWindow(editPw.getEtName().getWindowToken(), + // InputMethodManager.HIDE_NOT_ALWAYS); + editPw.dismiss(); + } + }); + } + + /** + * 弹出性别pop showSexPwOptions + * + * void + */ + private void showSexPwOptions() { + if (pwSexOptions == null) { + // 选项选择器 + pwSexOptions = new OptionsPopupWindow(ct); + optionsSexItems.clear(); + // 选项1 + optionsSexItems.add("男"); + optionsSexItems.add("女"); + pwSexOptions.setPopupTitle("请选择性别"); + // 一级联动效果 + pwSexOptions.setPicker(optionsSexItems); + // 设置选择的一级单位 + // pwSexOptions.setLabels("性别"); + // 设置默认选中的项目 + pwSexOptions.setSelectOptions(sex); + // 监听确定选择按钮 + pwSexOptions + .setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + String tx = optionsSexItems.get(options1); + my_sex.setText(tx); + sex = options1; + } + }); + } + } + + /** + * 弹出单项选择框 void + */ + private void showPwOptions(String title, + final ArrayList optionsItems, + final ArrayList optionsUuidItems, final TextView tv, + final int flag) { + // 选项选择器 + pwOptions = new OptionsPopupWindow(ct); + pwOptions.setPopupTitle(title); + // 一级联动 + pwOptions.setPicker(optionsItems); + // 设置选择的一级单位 + // pwSexOptions.setLabels("医院"); + // 设置默认选中的项目 + int position = 0; + if (flag == 1) { + // 医院单选 + if (!StringUtil.isBland(hospitalName)) { + if (optionsItems != null && !optionsItems.isEmpty()) { + for (int i = 0, size = optionsItems.size(); i < size; i++) { + if (optionsItems.get(i).equals(hospitalName)) { + position = i; + } + } + } + } + } else if (flag == 2) { + // 科室单选 + if (!StringUtil.isBland(officeName)) { + if (optionsItems != null && !optionsItems.isEmpty()) { + for (int i = 0, size = optionsItems.size(); i < size; i++) { + if (optionsItems.get(i).equals(officeName)) { + position = i; + } + } + } + } + } else if (flag == 3) { + // 职称单选 + if (!StringUtil.isBland(positionName)) { + if (optionsItems != null && !optionsItems.isEmpty()) { + for (int i = 0, size = optionsItems.size(); i < size; i++) { + if (optionsItems.get(i).equals(positionName)) { + position = i; + } + } + } + } + } + pwOptions.setSelectOptions(position); + OnWheelChangedListener changedListener = new OnWheelChangedListener() { + + @Override + public void onChanged(WheelView wheel, int oldValue, int newValue) { + // TODO Auto-generated method stub + String uuid = optionsUuidItems.get(newValue); + if (NEXT_PAGE.equals(uuid)) { + content = "获取医院列表中..."; + page = page + 1; + getList(getHospitalByCountyID);// 获取医院列表 + pwOptions.dismiss(); + } + } + }; + pwOptions.setOption1ChangingListener(true, changedListener); + pwOptions.showAtLocation(tv, Gravity.BOTTOM, 0, 0); + // 监听确定选择按钮 + pwOptions + .setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + String tx = optionsItems.get(options1); + String uuid = optionsUuidItems.get(options1); + // 判断是否是下一页 + if (NEXT_PAGE.equals(uuid)) { + content = "获取医院列表中..."; + page = page + 1; + getList(getHospitalByCountyID);// 获取医院列表 + } else { + // 回显数据 + tv.setText(tx); + if (flag == 1) { + hospitalUuid = uuid; + hospitalName = tx; + choosehos=true; + SharePrefUtil.saveString(ct, "provId", provinceId);// 省id + SharePrefUtil.saveString(ct, "cityId", cityId);// 市id + SharePrefUtil.saveString(ct, "countyId", disctictId);// 区县id + + } else if (flag == 2) { + officeUuid = uuid; + officeName = tx; + } else if (flag == 3) { + positionUuid = uuid; + positionName = tx; + } + LogUtil.i("tx==" + tx + "uuid=" + uuid); + } + } + }); + } + + // 省市区list + private ArrayList province = new ArrayList(); + private ArrayList> city = new ArrayList>(); + private ArrayList>> county = new ArrayList>>(); + private ArrayList> cityIdList = new ArrayList>(); + private ArrayList>> countyIdList = new ArrayList>>(); + private OptionsPopupWindow pwCityOptions; + + /** + * 弹出城市三级联动选择框 void + */ + private void showCityPwOptions() { + + // 选项选择器 + pwCityOptions = new OptionsPopupWindow(ct); + // 设置标题 + pwCityOptions.setPopupTitle("请选择城市"); + // 设置确定按钮为下一步 + pwCityOptions.setSubmitTitle("下一步"); + // 一级联动 + pwCityOptions.setPicker(province, city, county, true); + // 设置选择的三级单位 + // pwCityOptions.setLabels("省", "市", "区"); + // 设置弹出方式为底部 + // View parent = getWindow().getDecorView(); + // pwCityOptions.showAtLocation(parent, Gravity.BOTTOM, 0, 0); + + // 根据定位的数据取出相应位置 + int currentProvinceIndex = 0, currentCityIndex = 0, currentCountyIndex = 0; + if (!TextUtils.isEmpty(currentProvince) + && !TextUtils.isEmpty(currentCity) + && !TextUtils.isEmpty(currentCounty)) { + for (int i = 0; i < province.size(); i++) { + if (province.get(i).contains(currentProvince)) { + currentProvinceIndex = i; + ArrayList iCity = city.get(i); + for (int j = 0; j < iCity.size(); j++) { + if (iCity.get(j).contains(currentCity)) { + currentCityIndex = j; + ArrayList jCounty = county.get(i).get(j); + for (int k = 0; k < jCounty.size(); k++) { + if (jCounty.get(k).contains(currentCounty)) { + currentCountyIndex = k; + break; + } + } + break; + } + } + break; + } + } + } + // 设置默认选中的项目 + pwCityOptions.setSelectOptions(currentProvinceIndex, currentCityIndex, + currentCountyIndex); + // 监听确定选择按钮 + pwCityOptions.setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + + // 返回的分别是三个级别的选中位置 + String tx1 = province.get(options1); + String tx2 = city.get(options1).get(option2); + String tx3 = county.get(options1).get(option2) + .get(options3); + String tx = tx1; + if (!TextUtils.isEmpty(tx2)) { + tx = tx + tx2; + } + if (!TextUtils.isEmpty(tx3)) { + tx = tx + tx3; + } + choosehos=false; + // 选择 的省市区id + provinceId = provinceList.get(options1).get_id(); + cityId = cityIdList.get(options1).get(option2).get_id(); + disctictId = countyIdList.get(options1).get(option2) + .get(options3).get_id(); + + LogUtil.i("选择的为。。" + tx + "provinceId=" + provinceId + + "cityId=" + cityId + "disctictId=" + + disctictId); + + content = "获取医院中..."; + page = 1; + getList(getHospitalByCountyID);// 获取医院列表 + } + }); + + } + + private String currentProvince, currentCity, currentCounty; + private String my_imageUrl; + private String my_imageUrl2; + + /** + * 设置默认选中的位置,这个为定位的地方,如果定位失败就选中0位置 setSelectedCity + * + * @param province + * @param city + * @param county + * void + */ + public void setSelectedCity(String province, String city, String county) { + this.currentProvince = province; + this.currentCity = city; + this.currentCounty = county; + } + + /** 显示进度框 **/ + private void showProDialog(String content) { + showProgressDialog(content); + } + + /** + * 提交 submitInfo + * + * void + */ + private void submitInfo() { + name = my_name.getText().toString().trim(); + String sextv = my_sex.getText().toString().trim(); + etHospitalName = my_hospital.getText().toString().trim(); + etOfficeName = my_office_name.getText().toString().trim(); + officePhone = my_office_phone.getText().toString().trim(); + etProfessionalName = my_professional.getText().toString().trim(); + zgnumber = my_zgzs_number.getText().toString().trim(); + + // getCheck(); + // 验证数据 + if (TextUtils.isEmpty(picBase641)) { + ToastUtil.showToast("请选择头像"); + return; + } + if (TextUtils.isEmpty(name)) { + ToastUtil.showToast("姓名不为空"); + return; + } + if (TextUtils.isEmpty(sextv)) { + ToastUtil.showToast("请选择性别"); + return; + } + if (TextUtils.isEmpty(etHospitalName)) { + ToastUtil.showToast("医院不为空"); + return; + } + if (TextUtils.isEmpty(hospitalUuid)) { + ToastUtil.showToast("医院不为空"); + return; + } + if (TextUtils.isEmpty(etOfficeName)) { + ToastUtil.showToast("科室不为空"); + return; + } + if (TextUtils.isEmpty(officeUuid)) { + ToastUtil.showToast("科室不为空"); + return; + } + if (TextUtils.isEmpty(officePhone)) { + ToastUtil.showToast("科室电话不为空"); + return; + } + if (officePhone.equals("请输入科室电话")) { + ToastUtil.showToast("请输入正确的科室电话"); + return; + } + if (TextUtils.isEmpty(etProfessionalName)) { + ToastUtil.showToast("职称不为空"); + return; + } + if (TextUtils.isEmpty(positionUuid)) { + ToastUtil.showToast("职称不为空"); + return; + } + if (TextUtils.isEmpty(zgnumber)) { + ToastUtil.showToast("执业医师资格证号码不为空"); + return; + } + if (TextUtils.isEmpty(picBase64)) { + ToastUtil.showToast("请选择执业医师资格证照片"); + return; + } + if (TextUtils.isEmpty(disease)) { + ToastUtil.showToast("请选择专长"); + return; + } + hospitalName = etHospitalName; + officeName = etOfficeName; + positionName = etProfessionalName; + // 下面是验证是否是手输入的还是选择的,手输入的uuid都为1 + /* + * if (!etHospitalName.equals(hospitalName)) { hospitalName = + * etHospitalName; hospitalUuid = "1"; } if + * (!etOfficeName.equals(officeName)) { officeName = etOfficeName; + * officeUuid = "1"; } if (!etProfessionalName.equals(positionName)) { + * positionName = etProfessionalName; positionUuid = "1"; } + */ + content = "提交资料中..."; + getList(modifyUrl); + } + + private void save(String username) { + // TODO Auto-generated method stub + SharePrefUtil.saveString(ct, username + "my_name", my_name.getText() + .toString().trim()); // 姓名 + SharePrefUtil.saveString(ct, username + "my_sex", my_sex.getText() + .toString().trim()); // 性别名字 + SharePrefUtil.saveInt(ct, username + "my_sex_int", sex);// 性别 +// SharePrefUtil.saveString(ct, username + "my_hospital", my_hospital +// .getText().toString().trim()); // 医院 + SharePrefUtil + .saveString(ct, username + "my_hospitalUuid", hospitalUuid); // 医院uuid + SharePrefUtil.saveString(ct, username + "my_office_name", + my_office_name.getText().toString().trim()); // 工作室 + SharePrefUtil.saveString(ct, username + "my_officeUuid", officeUuid); // 工作室uuid + SharePrefUtil.saveString(ct, username + "my_office_phone", + my_office_phone.getText().toString().trim());// 工作室电话 + SharePrefUtil.saveString(ct, username + "my_professional", + my_professional.getText().toString().trim());// 职业职称 + SharePrefUtil + .saveString(ct, username + "my_positionUuid", positionUuid);// 职业职称uuid + SharePrefUtil.saveString(ct, username + "my_zgzs_number", + my_zgzs_number.getText().toString().trim()); // //医师资格证号码 + SharePrefUtil.saveString(ct, username + "my_diseaseName", my_disease + .getText().toString().trim()); // 专长名字 + SharePrefUtil.saveString(ct, username + "disease", disease);// 专长uuid +// if(!choosehos) +// { +// cityId = SharePrefUtil.getString(ct, "cityId", ""); +// disctictId = SharePrefUtil.getString(ct, "countyId", ""); +// provinceId = SharePrefUtil.getString(ct, "provId", ""); +// } + +// SharePrefUtil.saveString(ct, username + "my_provinceId", provinceId);// 省id +// SharePrefUtil.saveString(ct, username + "my_cityId", cityId);// 市id +// SharePrefUtil.saveString(ct, username + "my_disctictId", disctictId);// 区县id + + + SharePrefUtil.saveString(ct, username + "my_picBase64", picBase64);// 证书64位 + SharePrefUtil.saveString(ct, username + "my_picBase641", picBase641);// 头像64位 + SharePrefUtil.saveString(ct, username + "my_imageUrl", my_imageUrl);// 证书 + SharePrefUtil.saveString(ct, username + "my_imageUrl2", my_imageUrl2);// 头像 + } + + private void get(String username) { + // TODO Auto-generated method stub + name = SharePrefUtil.getString(ct, username + "my_name", ""); // 姓名 + SharePrefUtil.getString(ct, username + "my_sex", ""); // 性别名字 + sex = SharePrefUtil.getInt(ct, username + "my_sex_int", 0);// 性别 +// hospitalName = SharePrefUtil +// .getString(ct, username + "my_hospital", ""); // 医院 + hospitalUuid = SharePrefUtil.getString(ct, + username + "my_hospitalUuid", ""); // 医院uuid + officeName = SharePrefUtil.getString(ct, username + "my_office_name", + ""); // 工作室 + officeUuid = SharePrefUtil + .getString(ct, username + "my_officeUuid", ""); // 工作室uuid + officePhone = SharePrefUtil.getString(ct, username + "my_office_phone", + "");// 工作室电话 + positionName = SharePrefUtil.getString(ct, + username + "my_professional", "");// 职业职称 + positionUuid = SharePrefUtil.getString(ct, + username + "my_positionUuid", "");// 职业职称uuid + zgnumber = SharePrefUtil.getString(ct, username + "my_zgzs_number", ""); // //医师资格证号码 + String diseaseName = SharePrefUtil.getString(ct, username + + "my_diseaseName", ""); // 专长名字 + disease = SharePrefUtil.getString(ct, username + "disease", "");// 专长uuid + +// provinceId = SharePrefUtil +// .getString(ct, username + "my_provinceId", "");// 省id +// cityId = SharePrefUtil.getString(ct, username + "my_cityId", "");// 市id +// disctictId = SharePrefUtil +// .getString(ct, username + "my_disctictId", "");// 区县id + + picBase64 = SharePrefUtil.getString(ct, username + "my_picBase64", "");// 证书64位 + picBase641 = SharePrefUtil + .getString(ct, username + "my_picBase641", "");// 头像64位 + + my_imageUrl = SharePrefUtil.getString(ct, username + "my_imageUrl", "");// 证书 + my_imageUrl2 = SharePrefUtil.getString(ct, username + "my_imageUrl2", + "");// 头像 + + // 回显数据 + if (!TextUtils.isEmpty(name) && !"null".equals(name)) { + my_name.setText(name); + } + if (0 == sex) { + my_sex.setText(getResources().getString(R.string.man)); + } else if (1 == sex) { + my_sex.setText(getResources().getString(R.string.women)); + } + pwSexOptions.setSelectOptions(sex); + if (!TextUtils.isEmpty(my_imageUrl)) { + ImageLoader.getInstance().displayImage(my_imageUrl, + upload_certificateImg, + ImageOptions.getImageOptions(R.drawable.add_photo_normal)); + } + if (!TextUtils.isEmpty(my_imageUrl2)) { + ImageLoader.getInstance().displayImage(my_imageUrl2, my_photo); + } + if (!TextUtils.isEmpty(hospitalName) && !"null".equals(hospitalName)) { + my_hospital.setText(hospitalName); + } + if (!TextUtils.isEmpty(officeName) && !"null".equals(officeName)) { + my_office_name.setText(officeName); + } + if (!TextUtils.isEmpty(officePhone) && !"null".equals(officePhone)) { + my_office_phone.setText(officePhone); + } + if (!TextUtils.isEmpty(positionName) && !"null".equals(positionName)) { + my_professional.setText(positionName); + } + if (!TextUtils.isEmpty(zgnumber) && !"null".equals(zgnumber)) { + my_zgzs_number.setText(zgnumber); + } + if (!TextUtils.isEmpty(diseaseName) && !"null".equals(diseaseName)) { + my_disease.setText(diseaseName); + } + + } + + /** 提交资料 **/ + private void getList(final String loadUrl) { + showProDialog(content); + RequestParams params = new RequestParams();// 封装参数 + if (modifyUrl.equals(loadUrl)) { + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + params.addBodyParameter("realName", name);// 真实姓名 + params.addBodyParameter("userName", mobile);// 用户名必填 + params.addBodyParameter("diseaseUuids", disease);// 专家专长(多个专长以逗号隔开) + params.addBodyParameter("type", String.valueOf(1));// 第一次修改资料填1 + // 在我的模块修改填2 + params.addBodyParameter("sex", String.valueOf(sex));// 性别(0男 1女) + params.addBodyParameter("photo", picBase641);// 头像(base64) + // params.addBodyParameter("email", uuid);//邮箱 + // params.addBodyParameter("mobile", uuid);//手机号 + // params.addBodyParameter("birthDate", uuid);//出生日期 + // params.addBodyParameter("intro", uuid);//简介 +// if(!choosehos) +// { +// cityId = SharePrefUtil.getString(ct, "cityId", ""); +// disctictId = SharePrefUtil.getString(ct, "countyId", ""); +// provinceId = SharePrefUtil.getString(ct, "provId", ""); +// } + params.addBodyParameter("provId", provinceId);// 省id + params.addBodyParameter("cityId", cityId);// 市id + params.addBodyParameter("countyId", disctictId);// 区县id + params.addBodyParameter("hospitalUuid", hospitalUuid);// 坐诊医院uuid + params.addBodyParameter("hospitalName", hospitalName);// 坐诊医院名称 + params.addBodyParameter("officeUuid", officeUuid);// 科室uuid + params.addBodyParameter("officeName", officeName);// 科室名称 + params.addBodyParameter("officePhone", officePhone);// 科室电话 + params.addBodyParameter("positionUuid", positionUuid);// 职称uuid + params.addBodyParameter("certificate", zgnumber);// 资格证书 + params.addBodyParameter("certificateImg", picBase64);// 资格证书图片 + + + + } else if (getHospitalByCountyID.equals(loadUrl)) { + + params.addBodyParameter("countyID", disctictId);// 区县ID必填 + params.addBodyParameter("page", String.valueOf(page));// 分页参数必填 + params.addBodyParameter("searchType", String.valueOf(2));// 查询类型---1根据经纬度查询经纬度必填区县ID可以为空2查询区县ID必填经纬度可以为空 + // params.addBodyParameter("lat", "");// 经度 + // params.addBodyParameter("lng", "");// 纬度 + + LogUtil.i("countyID=" + disctictId + "lat=" + lat + "lng=" + lon + + "searchType=" + String.valueOf(2)); + } else { + params = null; + } + LogUtil.i("loadUrl = " + loadUrl); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (!modifyUrl.equals(loadUrl)) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + } + processData(loadUrl, info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + ToastUtil.showToast("请求失败,请稍候再试。"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String url, String result) { + closeProgressDialog(); + if (modifyUrl.equals(url)) { + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + if ("1".equals(bean.code)) { + ToastUtil.showToast("提交成功,请等待审核"); + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("肝胆相照将尽快对您的资料进行审核,请耐心等待。"); + submit_myinfo.setEnabled(false); + submit_myinfo.setVisibility(View.GONE); + setInfoClick(false); + SharePrefUtil.saveString(ct, Constant.realName, name);// 真实姓名 + } else { + ToastUtil.showToast("提交失败,请重试" + bean.message); + } + return; + } else if (getHospitalByCountyID.equals(url)) {// 根据区id查询的医院列表 + GetHospitalListBean bean = GsonTools.fromGsonToBean(result, + GetHospitalListBean.class); + hospitalListItems.clear(); + hospitalListUuidItems.clear(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast("该地区暂无医院列表"); + return; + } + // 数据为空 + if (bean.data != null && bean.data.list.size() > 0) { + for (int i = 0; i < bean.data.list.size(); i++) { + hospitalListUuidItems.add(bean.data.list.get(i).uuid); + hospitalListItems.add(bean.data.list.get(i).name); + } + // 得到总页码数 + int totalPage = bean.data.totalPage; + // 是否有下一页 + if (totalPage <= 0 || totalPage <= page) { + hospitalListItems.add("其他医院"); + hospitalListUuidItems.add("1"); + showPwOptions("请选择医院", hospitalListItems, + hospitalListUuidItems, my_hospital, 1); + } else { + hospitalListItems.add("下一页"); + hospitalListUuidItems.add(NEXT_PAGE); + showPwOptions("请选择医院", hospitalListItems, + hospitalListUuidItems, my_hospital, 1); + } + } else { + hospitalListItems.add("其他医院"); + hospitalListUuidItems.add("1"); + showPwOptions("请选择医院", hospitalListItems, + hospitalListUuidItems, my_hospital, 1); + // ToastUtil.showToast("该地区暂无医院列表"); + } + } else { + LogUtil.i("result = "+result); + GetListBean bean = GsonTools.fromGsonToBean(result, + GetListBean.class); + + // 数据为空 + if (bean.data != null && bean.data.size() > 0) { + if (hospitalListUrl.equals(url)) { + // hospitalList.clear(); + // hospitalList.addAll(bean.data);// 添加医院列表 + hospitalListUuidItems.clear(); + hospitalListItems.clear(); + for (int i = 0; i < bean.data.size(); i++) { + hospitalListUuidItems.add(bean.data.get(i).uuid); + hospitalListItems.add(bean.data.get(i).name); + } + } else if (officeListUrl.equals(url)) { + officeListUuidItems.clear(); + officeListItems.clear(); + for (int i = 0; i < bean.data.size(); i++) { + officeListUuidItems.add(bean.data.get(i).officeUuid); + officeListItems.add(bean.data.get(i).officeName); + } + } else if (positionListUrl.equals(url)) { + professionalUuidListItems.clear(); + professionalListItems.clear(); + for (int i = 0; i < bean.data.size(); i++) { + professionalUuidListItems.add(bean.data.get(i).uuid); + professionalListItems.add(bean.data.get(i).name); + } + } else if (diseaseUrl.equals(url)) { + bean.data.get(0).des = "肝炎";//去除甲乙丙丁"肝炎(甲、乙、丙、丁、戊肝)", + bean.data.get(0).name = "肝炎"; + diseaseList.clear(); + diseaseList.addAll(bean.data);// 肝胆病标签列表 + // adapter = new MyAdapter(diseaseList); + // gv_disease.setAdapter(adapter); + } + } else { + ToastUtil.showToast("获取失败,请重试"); + } + } + } + + // 加载城市数据,耗时操作 + private class InitAreaTask extends AsyncTask { + + public InitAreaTask() { + // showProgressDialog("加载中..."); + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + // closeProgressDialog(); + if (result) { + // 初始化联动划框 + showCityPwOptions(); + } else { + ToastUtil.showToast("城市数据初始化失败"); + } + } + + } + + /* + * 实例化城市,从数据库检出城市列表 + */ + private boolean areaData() { + SQLdm s = new SQLdm(); + db = s.openDatabase(this); + provinceList = new ArrayList(); + if (db != null) { + db.beginTransaction(); + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + // cityProvince.setFullName(cursor.getString(cursor.getColumnIndex("fullName"))); + // cityProvince.setParent(cursor.getString(cursor.getColumnIndex("parent"))); + // cityProvince.setTreePath(cursor.getString(cursor.getColumnIndex("treePath"))); + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + // LogUtil.i("省id="+cityProvince.get_id()+"FullName="+cityProvince.getFullName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + // city.setFullName(cursorCity.getString(cursorCity.getColumnIndex("fullName"))); + // city.setParent(cursorCity.getString(cursorCity.getColumnIndex("parent"))); + // city.setTreePath(cursorCity.getString(cursorCity.getColumnIndex("treePath"))); + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + // LogUtil.i("市id="+city.get_id()+"FullName="+city.getFullName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // cityDis.setFullName(cursorDisctict.getString(cursorDisctict.getColumnIndex("fullName"))); + // cityDis.setParent(cursorDisctict.getString(cursorDisctict.getColumnIndex("parent"))); + // cityDis.setTreePath(cursorDisctict.getString(cursorDisctict.getColumnIndex("treePath"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + // LogUtil.i("区id="+cityDis.get_id()+"FullName="+cityDis.getFullName()); + } + // 如果只有市区没有区县,为了不为空,则手动添加“”; + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + // LogUtil.i("moveToNext()="+cursorDisctict.moveToNext() + + // "moveToFirst()=" + cursorDisctict.moveToFirst()); + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 + db.endTransaction(); + return true; + } else { + return false; + } + } + + /** + * + * + * 类名称:MyListAdapter 类描述: 创建人:苏三元 时间:2015-10-27 下午4:34:44 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ + /* + * private class MyListAdapter extends BaseAdapter { + * + * private TextView et; private List List; private String name = + * ""; + * + * public MyListAdapter(TextView et, List List) { this.et = et; + * this.List = List; } + * + * @Override public int getCount() { return List.size(); } + * + * @Override public Object getItem(int position) { return null; } + * + * @Override public long getItemId(int position) { return 0; } + * + * @Override public View getView(final int position, View convertView, + * ViewGroup parent) { // TextView tv_msg; // ImageView delete; // View view + * = null; ViewHolder holder; if (convertView == null) { convertView = + * View.inflate(ct, R.layout.setting_info_pop_item, null); holder = new + * ViewHolder(); holder.tv_msg = (TextView) + * convertView.findViewById(R.id.tv_list_item); // tag妙用 + * convertView.setTag(holder); } else { holder = (ViewHolder) + * convertView.getTag(); } + * + * if (my_office_name.equals(et)) { name = List.get(position).officeName;// + * 科室名称 } else { name = List.get(position).name; } + * holder.tv_msg.setText(name); + * + * convertView.setOnClickListener(new OnClickListener() { + * + * @Override public void onClick(View v) { // String name1; // if + * (et_officeName.equals(et)) { // name1 = + * List.get(position).officeName;//科室名称 // }else{ // name1 = + * List.get(position).name; // } if (my_office_name.equals(et)) { officeUuid + * = List.get(position).officeUuid; officeName = + * List.get(position).officeName;// 科室名称 // 设置输入框 et.setText(officeName); } + * else if (my_hospital.equals(et)) { hospitalUuid = + * List.get(position).uuid; hospitalName = List.get(position).name; // 设置输入框 + * et.setText(hospitalName); } else if (my_professional.equals(et)) { + * positionUuid = List.get(position).uuid; positionName = + * List.get(position).name; // 设置输入框 et.setText(positionName); } // 取消显示 + * popWin.dismiss(); LogUtils.i("position=" + position + "=officeUuid=" + + * officeUuid + "=positionUuid=" + positionUuid + "=hospitalUuid=" + + * hospitalUuid); } }); return convertView; } + * + * private class ViewHolder { TextView tv_msg; } + * + * } + */ + + /** + * 跳转之后返回的结果 + * + * @param requestCode + * 表示是哪个Intent跳转的 + * @param resultCode + * 返回的结果码 + * @param data + * 数据 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, + final Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(resultCode==333) + { + String dataname = data.getStringExtra("hospitalName"); + hospitalName=dataname; + hospitalUuid=data.getStringExtra("hospitalUuid"); + provinceId=data.getStringExtra("provinceId"); + cityId=data.getStringExtra("cityId"); + disctictId=data.getStringExtra("disctictId"); + my_hospital.setText(hospitalName); + return; + } + // 证书 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO) { + // imageView不设null, 第一次上传成功后,第二次在选择上传的时候会报错。 + String picPath = data.getStringExtra(SelectedPhotoActivity.KEY_PHOTO_PATH); + picBase64 = data.getStringExtra(SelectedPhotoActivity.KEY_PHOTO_BASE64); +// LogUtil.i("picPath=" + picPath + "=picBase64=" + picBase64); + String imageUrl = Scheme.FILE.wrap(picPath); + LogUtil.i("imageUrl==" + imageUrl); + // Bitmap bitmap = BitmapFactory.decodeFile(picPath); + // upload_certificateImg.setImageBitmap(bitmap); + my_imageUrl = imageUrl; + ImageLoader.getInstance().displayImage(imageUrl, + upload_certificateImg, + ImageOptions.getImageOptions(R.drawable.ll_upload_certificateimg)); + + } + // 头像 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO1) { + // imageView不设null, 第一次上传成功后,第二次在选择上传的时候会报错。 + String picPath1 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_PATH); + picBase641 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_BASE64); + + LogUtil.i("picPath1=" + picPath1 + "=picBase641=" + picBase641); + String imageUrl = Scheme.FILE.wrap(picPath1); + LogUtil.i("imageUrl2==" + imageUrl); + + // 保存 + my_imageUrl2 = imageUrl; + + ImageLoader.getInstance().displayImage(imageUrl, my_photo); + + } + } + + /** + * + * + * 类名称:MyAdapter 类描述: 创建人:苏三元 时间:2015-10-27 下午4:34:36 版权:河南商宇科技有限公司--版权所有 + * (c) 2015 + * + */ + private class MyAdapter extends BaseAdapter { + + // 用来控制CheckBox的选中状况 + private HashMap isSelected; + private List list; + + public MyAdapter(List diseaseList) { + this.isSelected = new HashMap(); + this.list = diseaseList; + // 初始化数据 + // initDate(); + } + + private void initDate() { + for (int i = 0; i < list.size(); i++) { + String uuid2 = list.get(i).uuid; + // checkNum = 0; + /* + * if (specialPosintions != null) { for (int j = 0; j < + * specialPosintions.length; j++) { if + * (uuid2.equals(specialPosintions[j])) { getIsSelected().put(i, + * true); LogUtil.i("i==" + i); checkNum ++; }else{ + * getIsSelected().put(i, false); } } }else{ + * getIsSelected().put(i, false); } + */ + } + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public long getItemId(int position) { + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + VHolder holder = null; + if (convertView == null) { + // 获得ViewHolder对象 + holder = new VHolder(); + // 导入布局并赋值给convertview + convertView = View.inflate(ct, R.layout.item_date_time, null); + holder.cb = (CheckBox) convertView + .findViewById(R.id.cb_list_title); + holder.cb.setTextSize(13); + // 为view设置标签 + convertView.setTag(holder); + } else { + // 取出holder + holder = (VHolder) convertView.getTag(); + } + + holder.cb.setText(list.get(position).name);// stringArrays[position] + holder.cb.setChecked(getIsSelected().get(position)); + return convertView; + } + + public HashMap getIsSelected() { + return isSelected; + } + + } + + public static class VHolder { + CheckBox cb; + } + + // 得到专长 + private void getCheck() { + disease = ""; + String diseaseName = ""; + specialPosintions = new String[diseaseList.size()]; + for (int i = 0; i < diseaseList.size(); i++) { + Boolean isCheck = adapter.getIsSelected().get(i); + if (isCheck) { + specialPosintions[i] = diseaseList.get(i).uuid; + disease += diseaseList.get(i).uuid + ","; + diseaseName += diseaseList.get(i).name + "、"; + LogUtil.i("disease=" + disease + "=diseaseName=" + diseaseName); + } + } + // 保存到sp为了以后使用 + SharePrefUtil.saveString(ct, "disease", disease); + // 去掉最后一个“、” + if (!TextUtils.isEmpty(diseaseName) && diseaseName.length() > 0) { + diseaseName = diseaseName.substring(0, diseaseName.length() - 1).replace("(甲、乙、丙、丁、戊肝)",""); + my_disease.setText(diseaseName); + SharePrefUtil.saveString(ct, "diseaseName", diseaseName); + } else { + my_disease.setText(""); + + } + + } + + // 得到专长 + private void getCancleCheck() { + disease = ""; + String diseaseName = ""; + specialPosintions = new String[diseaseList.size()]; + for (int i = 0; i < diseaseList.size(); i++) { + Boolean isCheck = adapter.getIsSelected().get(i); + if (isCheck) { + specialPosintions[i] = diseaseList.get(i).uuid; + diseaseName += diseaseList.get(i).name + "、"; + + } + } + if (TextUtils.isEmpty(diseaseName)) { + my_disease.setText(""); + + } + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + VHolder holder = (VHolder) arg1.getTag(); + + LogUtil.i("checkNum=" + checkNum + "arg2=" + arg2); + if (!holder.cb.isChecked()) { + if (checkNum >= 10) { + ToastUtil.showToast("最多选十项"); + return; + } + } + // 改变CheckBox的状态 + holder.cb.toggle(); + // 将CheckBox的选中状况记录下来 + adapter.getIsSelected().put(arg2, holder.cb.isChecked()); + // 调整选定条目 + if (holder.cb.isChecked() == true) { + checkNum++; + } else { + checkNum--; + if (checkNum < 0) { + checkNum = 0; + } + } + } + + /* + * 弹出修改信息弹出框 + */ + private void showDiseasePop(View parent) { + + if (popGridView != null && popGridView.isShowing()) { + popGridView.dismiss(); + } + + View view = getLayoutInflater().inflate(R.layout.popwindow_grid, null); + popGridView = new PopupWindow(view, LayoutParams.MATCH_PARENT, + LayoutParams.WRAP_CONTENT); + popGridView.setBackgroundDrawable(new ColorDrawable(0)); + popGridView.setOutsideTouchable(true); + popGridView.setAnimationStyle(R.style.timepopwindow_anim_style); + popGridView.update(); + popGridView.setFocusable(true); + + TextView btnCancle = (TextView) view.findViewById(R.id.btn_cancle); + TextView btnSure = (TextView) view.findViewById(R.id.btn_sure); + gv_disease = (GridView) view.findViewById(R.id.gv_disease); + gv_disease.setOnItemClickListener(this); + adapter = new MyAdapter(diseaseList); + checkNum = 0; + for (int i = 0; i < diseaseList.size(); i++) { + String uuid2 = diseaseList.get(i).uuid; + adapter.getIsSelected().put(i, false); + if (specialPosintions != null) { + for (int j = 0; j < specialPosintions.length; j++) { + if (uuid2.equals(specialPosintions[j])) { + adapter.getIsSelected().put(i, true); + LogUtil.i("i=====" + i); + checkNum++; + } + } + } + } + gv_disease.setAdapter(adapter); + // adapter.notifyDataSetChanged(); + + btnCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + getCancleCheck(); + popGridView.dismiss(); + } + }); + btnSure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + getCheck(); + popGridView.dismiss(); + } + }); + + popGridView.showAtLocation(ll_my_disease, Gravity.BOTTOM, 0, 0); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity1.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity1.java new file mode 100644 index 0000000..1806a15 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoginSetInfoActivity1.java @@ -0,0 +1,1062 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.download.ImageDownloader.Scheme; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.GetListBean; +import cn.shangyu.gdxzExpert.bean.GetListBean.ListData; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean.SpecialData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ********************************弃用,备用**************************************** + * *** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:登陆后需要完善资料审核 + */ +public class LoginSetInfoActivity1 extends BaseActivity implements + OnItemClickListener { + + private Button submit_myinfo; + private TextView tv_showCheckInfo; + private ImageView upload_certificateImg; + private EditText et_name; + private RadioButton sex_male; + private RadioButton sex_female; + private EditText et_hospitalName; + private ImageView down_arrow_hospital; + private EditText et_officeName; + private ImageView down_arrow_office; + private EditText et_professional; + private ImageView down_arrow_professional; + private EditText et_zgnumber; + private static final int TO_SELECT_PHOTO = 3; + private static final int TO_SELECT_PHOTO1 = 1; + private String picBase64 = ""; + private PopupWindow popWin; + private ListView listView; + private List hospitalList = new ArrayList(); + private List officeList = new ArrayList(); + private List professionalList = new ArrayList(); + private List diseaseList = new ArrayList(); + public static String hospitalListUrl = Url.gethospitalList;// 医院列表 + public static String officeListUrl = Url.getofficeList;// 科室列表 + public static String positionListUrl = Url.getpositionList;// 职称列表 + public static String diseaseUrl = Url.getdisease;// 专长列表 + public static String modifyUrl = Url.getmodify;// 修改个人资料 + private String hospitalUuid = ""; + private String officeUuid = ""; + private String positionUuid = ""; + private String uuid; + private int state = 0; + private String name = ""; + private String sex = ""; + private String hospitalName = ""; + private String officeName = ""; + private String positionName = ""; + private String zgnumber = ""; + private String content = "正在加载"; + private GridView gv_disease; + private MyAdapter adapter; + private String disease = ""; + private String etHospitalName; + private String etOfficeName; + private String etProfessionalName; + private EditText et_officePhone; + private String officePhone; + private ImageView iv_photo; + private String picBase641 = ""; + private Spinner sp_province; + private Spinner sp_city; + private Spinner sp_disctict; + private ArrayList citys; + private ArrayList provinceList; + private ArrayList cityList; + private ArrayList disctictList; + private SQLiteDatabase db; + + private String provinceId = "";// 省ID + + private String cityId = ""; + + private String disctictId = ""; + private RelativeLayout rl_spinner_disctict; + + @Override + public void setTitle() { + top_title.setText("完善个人资料"); + top_back_layout.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_setting_information_old); + + et_name = (EditText) view.findViewById(R.id.my_name);// 姓名 + RelativeLayout rl_photo = (RelativeLayout) view + .findViewById(R.id.rl_photo);// + iv_photo = (ImageView) view.findViewById(R.id.iv_photo);// 头像 + sex_male = (RadioButton) view.findViewById(R.id.sex_male);// sex-男 + sex_female = (RadioButton) view.findViewById(R.id.sex_female);// sex-女 + et_hospitalName = (EditText) view.findViewById(R.id.et_hospitalName);// 医院名称 + down_arrow_hospital = (ImageView) view + .findViewById(R.id.down_arrow_hospital);// 医院名称下拉框 + et_officeName = (EditText) view.findViewById(R.id.et_officeName);// 工作室名称 + et_officePhone = (EditText) view.findViewById(R.id.et_officePhone);// 工作室名称 + down_arrow_office = (ImageView) view + .findViewById(R.id.down_arrow_office);// 工作室名称下拉框 + et_professional = (EditText) view.findViewById(R.id.et_professional);// 职业职称 + down_arrow_professional = (ImageView) view + .findViewById(R.id.down_arrow_professional);// 职业职称下拉框 + et_zgnumber = (EditText) view.findViewById(R.id.et_zgnumber);// 医师资格证号码 + upload_certificateImg = (ImageView) view + .findViewById(R.id.upload_certificateImg);// 资格证书图片 + + gv_disease = (GridView) view.findViewById(R.id.gv_disease);// + submit_myinfo = (Button) view.findViewById(R.id.submit_myinfo);// 提交 + tv_showCheckInfo = (TextView) view.findViewById(R.id.tv_showCheckInfo);// 回显审核状态 + + sp_province = (Spinner) view.findViewById(R.id.sp_province);// 省 + sp_city = (Spinner) view.findViewById(R.id.sp_city);// 市 + sp_disctict = (Spinner) view.findViewById(R.id.sp_disctict);// 区 + rl_spinner_disctict = (RelativeLayout) view + .findViewById(R.id.rl_spinner_disctict); + + submit_myinfo.setOnClickListener(this); + upload_certificateImg.setOnClickListener(this); + rl_photo.setOnClickListener(this); + gv_disease.setOnItemClickListener(this); + initListView(); + down_arrow_hospital.setOnClickListener(this); + down_arrow_office.setOnClickListener(this); + down_arrow_professional.setOnClickListener(this); + + initData(); + + return view; + } + + private void initData() { + // 取出我的uuid + uuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + + // 下面是获取列表 + getList(hospitalListUrl);// 获取医院列表 + getList(officeListUrl);// 获取科室列表 + getList(positionListUrl);// 获取职称列表 + getList(diseaseUrl);// 获取职称列表 + + // 取出上一次提交后,后台返回的信息 + + String name = SharePrefUtil.getString(ct, "realName", ""); + int sex = SharePrefUtil.getInt(ct, "sex", 0); + hospitalUuid = SharePrefUtil.getString(ct, "hospitalUuid", ""); + hospitalName = SharePrefUtil.getString(ct, "hospitalName", ""); + officeUuid = SharePrefUtil.getString(ct, "officeUuid", ""); + officeName = SharePrefUtil.getString(ct, "officeName", ""); + officePhone = SharePrefUtil.getString(ct, "officePhone", ""); + positionUuid = SharePrefUtil.getString(ct, "positionUuid", ""); + positionName = SharePrefUtil.getString(ct, "positionName", ""); + String certificate = SharePrefUtil.getString(ct, "certificate", ""); + String certificateImg = SharePrefUtil.getString(ct, "certificateImg", + ""); + final String photo = SharePrefUtil.getString(ct, "photo", null); + + if (!TextUtils.isEmpty(name) && !"null".equals(name)) { + et_name.setText(name); + } + if (0 == sex) { + sex_male.setChecked(true); + sex_female.setChecked(false); + } else if (1 == sex) { + sex_male.setChecked(false); + sex_female.setChecked(true); + } + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + photo, + iv_photo); + // bm转换为base64位编码 + ImageLoader.getInstance().loadImage(Url.urlHtml + photo, + new SimpleImageLoadingListener() { + + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + super.onLoadingComplete(imageUri, view, loadedImage); + picBase641 = Base64Util.BitmaptoBase64(loadedImage); + LogUtil.i("picBase64touxiang====" + picBase64); + } + }); + LogUtil.i("picBase641==" + picBase641 + "photo=" + Url.urlHtml + + photo); + } + if (!TextUtils.isEmpty(hospitalName) && !"null".equals(hospitalName)) { + + et_hospitalName.setText(hospitalName); + } + if (!TextUtils.isEmpty(officeName) && !"null".equals(officeName)) { + + et_officeName.setText(officeName); + } + if (!TextUtils.isEmpty(positionName) && !"null".equals(positionName)) { + + et_professional.setText(positionName); + } + if (!TextUtils.isEmpty(certificate) && !"null".equals(certificate)) { + + et_zgnumber.setText(certificate); + } + if (!TextUtils.isEmpty(officePhone) && !"null".equals(officePhone)) { + + et_officePhone.setText(officePhone); + } + if (!TextUtils.isEmpty(certificateImg) + && !"null".equals(certificateImg)) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + certificateImg, upload_certificateImg); + + // bm转换为base64位编码 + ImageLoader.getInstance().loadImage(Url.urlHtml + certificateImg, + new SimpleImageLoadingListener() { + + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + super.onLoadingComplete(imageUri, view, loadedImage); + picBase64 = Base64Util.BitmaptoBase64(loadedImage); + LogUtil.i("picBase64zhengshu====" + picBase64); + } + }); + LogUtil.i("certificateImg=" + Url.urlHtml + certificateImg); + } + + String r = SharePrefUtil.getString(ct, modifyUrl, ""); + if (!TextUtils.isEmpty(r)) { + SettingInfoBean bean = GsonTools.fromGsonToBean(r, + SettingInfoBean.class); + // InfoData data = bean.data; + List special = bean.special;// 专长 + if (special != null && special.size() > 0) { + specialPosintions = new String[special.size()]; + for (int i = 0; i < special.size(); i++) { + String diseaseUuid = special.get(i).diseaseUuid; + specialPosintions[i] = diseaseUuid; + LogUtil.i("diseaseUuid===" + diseaseUuid); + } + } + } + // 获取审核状态值 + Intent intent = getIntent(); + // ( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 6.已通过) + state = intent.getIntExtra("state", 0); + LogUtil.i("审核信息==" + state); + if (1 == state) {// 1.待审核 + tv_showCheckInfo.setVisibility(View.GONE); + tv_showCheckInfo.setText("请完善资料"); + } else if (2 == state) {// 2.审核中 + + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("审核中,请等待审核完成"); + // submit_myinfo.setEnabled(false); + } else if (3 == state || 4 == state) {// 4.再次提交审核 + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("请完善资料,再次提交审核"); + } else if (5 == state) {// 5.拒绝 + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("您的信息已被拒绝"); + // submit_myinfo.setEnabled(false); + } + + showAlertTips(tv_showCheckInfo.getText().toString()); + + initKJDB(); + // 专长初始化 + // stringArrays = getResources().getStringArray(R.array.disease); + // + // adapter = new MyAdapter(diseaseList); + // gv_disease.setAdapter(adapter); + } + + // 弹出对话框 + private void showAlertTips(String message) { + buildAlert = ECAlertDialog.buildAlert(ct, message, + R.string.dialog_btn_confim, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (buildAlert.isShowing()) { + buildAlert.dismiss(); + } + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + + } + + private void initListView() { + listView = new ListView(this); + listView.setBackgroundResource(R.drawable.listview_background); + Drawable drawable = getResources().getDrawable( + R.drawable.news_list_line); + listView.setDivider(drawable); + listView.setCacheColorHint(0); + listView.setVerticalScrollBarEnabled(false); // 关闭 + } + + // 定义 popupWindow + public void setPopupWindow(EditText et) { + popWin = new PopupWindow(ct); + popWin.setWidth(et.getWidth());// 设置宽度 + popWin.setHeight(LayoutParams.WRAP_CONTENT);// 设置popWin 高度 + popWin.setContentView(listView);// 为popWindow填充内容 + popWin.setOutsideTouchable(true);// 点击popWin 以处的区域,自动关闭 popWin + popWin.showAsDropDown(et, 0, -5);// 设置 弹出窗口,显示的位置 + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.down_arrow_hospital: + // 设置适配器 + listView.setAdapter(new MyListAdapter(et_hospitalName, hospitalList)); + // 弹出popuwindow框 + setPopupWindow(et_hospitalName); + + break; + + case R.id.down_arrow_office: + // 设置适配器 + listView.setAdapter(new MyListAdapter(et_officeName, officeList)); + // 弹出popuwindow框 + setPopupWindow(et_officeName); + + break; + + case R.id.down_arrow_professional: + // 设置适配器 + listView.setAdapter(new MyListAdapter(et_professional, + professionalList)); + // 弹出popuwindow框 + setPopupWindow(et_professional); + + break; + + case R.id.submit_myinfo: + + submitInfo(); + + break; + case R.id.rl_photo: + Intent intent1 = new Intent(ct, SelectedPhotoActivity.class); + startActivityForResult(intent1, TO_SELECT_PHOTO1); + break; + case R.id.upload_certificateImg: + Intent intent = new Intent(ct, SelectedPhotoActivity.class); + intent.putExtra("isConstraint", true);// 是否等比例裁剪 + startActivityForResult(intent, TO_SELECT_PHOTO); + break; + + case R.id.top_back_layout: + + this.finish(); + android.os.Process.killProcess(android.os.Process.myPid()); + break; + default: + break; + } + } + + private void showProDialog(String content) { + showProgressDialog(content); + } + + private void submitInfo() { + name = et_name.getText().toString().trim(); + sex = sex_male.isChecked() ? "0" : "1"; + etHospitalName = et_hospitalName.getText().toString().trim(); + etOfficeName = et_officeName.getText().toString().trim(); + officePhone = et_officePhone.getText().toString().trim(); + etProfessionalName = et_professional.getText().toString().trim(); + zgnumber = et_zgnumber.getText().toString().trim(); + getCheck(); + + if (TextUtils.isEmpty(name)) { + ToastUtil.showToast("姓名不为空"); + return; + } + if (TextUtils.isEmpty(picBase641)) { + ToastUtil.showToast("请选择头像"); + return; + } + if (TextUtils.isEmpty(etHospitalName)) { + ToastUtil.showToast("医院不为空"); + return; + } + if (TextUtils.isEmpty(etOfficeName)) { + ToastUtil.showToast("科室不为空"); + return; + } + if (TextUtils.isEmpty(officePhone)) { + ToastUtil.showToast("科室电话不为空"); + return; + } + LogUtil.i("officePhone===" + officePhone); + if (!ValidateUtils.isPhoneNum(officePhone)) { + ToastUtil.showToast("请输入正确的科室电话"); + return; + } + if (TextUtils.isEmpty(etProfessionalName)) { + ToastUtil.showToast("职称不为空"); + return; + } + if (TextUtils.isEmpty(zgnumber)) { + ToastUtil.showToast("执业医师资格证号码不为空"); + return; + } + if (TextUtils.isEmpty(picBase64)) { + ToastUtil.showToast("请选择执业医师资格证照片"); + return; + } + if (TextUtils.isEmpty(disease)) { + ToastUtil.showToast("请选择专长"); + return; + } + // 下面是验证是否是手输入的还是选择的,手输入的uuid都为1 + if (!etHospitalName.equals(hospitalName)) { + hospitalName = etHospitalName; + hospitalUuid = "1"; + } + if (!etOfficeName.equals(officeName)) { + officeName = etOfficeName; + officeUuid = "1"; + } + if (!etProfessionalName.equals(positionName)) { + positionName = etProfessionalName; + positionUuid = "1"; + } + content = "提交资料中..."; + getList(modifyUrl); + } + + private void getList(final String loadUrl) { + showProDialog(content); + RequestParams params = new RequestParams();// 封装参数 + if (modifyUrl.equals(loadUrl)) { + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + params.addBodyParameter("realName", name);// 真实姓名 必填 + params.addBodyParameter("diseaseUuids", disease);// 专家专长(多个专长以逗号隔开) + // 必填 + params.addBodyParameter("sex", sex);// 性别(0男 1女) + params.addBodyParameter("photo", picBase641);// 头像(base64) + // params.addBodyParameter("email", uuid);//邮箱 + // params.addBodyParameter("mobile", uuid);//手机号 + // params.addBodyParameter("provId", uuid);//省id + // params.addBodyParameter("cityId", uuid);//市id + // params.addBodyParameter("countyId", uuid);//区县id + // params.addBodyParameter("birthDate", uuid);//出生日期 + // params.addBodyParameter("intro", uuid);//简介 + params.addBodyParameter("hospitalUuid", hospitalUuid);// 坐诊医院uuid + params.addBodyParameter("hospitalName", hospitalName);// 坐诊医院名称 + params.addBodyParameter("officeUuid", officeUuid);// 科室uuid + params.addBodyParameter("officeName", officeName);// 科室名称 + params.addBodyParameter("officePhone", officePhone);// 科室电话 + params.addBodyParameter("positionUuid", positionUuid);// 职称uuid + params.addBodyParameter("certificate", zgnumber);// 资格证书 + params.addBodyParameter("certificateImg", picBase64);// 资格证书图片 + // (base64) + LogUtil.i("photo=" + picBase641); + + } else { + params = null; + } + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (!modifyUrl.equals(loadUrl)) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + } + processData(loadUrl, info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String url, String result) { + closeProgressDialog(); + if (modifyUrl.equals(url)) { + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + if ("1".equals(bean.code)) { + ToastUtil.showToast("提交成功,请等待审核"); + tv_showCheckInfo.setVisibility(View.VISIBLE); + tv_showCheckInfo.setText("您已经提交了,请等待审核"); + submit_myinfo.setEnabled(false); + submit_myinfo.setVisibility(View.GONE); + } else { + ToastUtil.showToast("提交失败,请重试"); + } + return; + } else { + GetListBean bean = GsonTools.fromGsonToBean(result, + GetListBean.class); + // 数据为空 + if (bean.data != null && bean.data.size() > 0) { + if (hospitalListUrl.equals(url)) { + hospitalList.clear(); + hospitalList.addAll(bean.data);// 添加医院列表 + + } else if (officeListUrl.equals(url)) { + officeList.clear(); + officeList.addAll(bean.data);// 添加科室列表 + + } else if (positionListUrl.equals(url)) { + professionalList.clear(); + professionalList.addAll(bean.data);// 添加职称列表 + } else if (diseaseUrl.equals(url)) { + diseaseList.clear(); + diseaseList.addAll(bean.data);// 肝胆病标签列表 + adapter = new MyAdapter(diseaseList); + gv_disease.setAdapter(adapter); + } + } else { + ToastUtil.showToast("获取失败,请重试"); + } + } + } + + /** + * 初始化数据库 引用第三方工具库KJFrame库 + */ + private void initKJDB() { + citys = new ArrayList(); + areaData(); + } + + /* + * 点击省时 + */ + private void areaData() { + provinceList = new ArrayList(); + cityList = new ArrayList(); + disctictList = new ArrayList(); + SQLdm s = new SQLdm(); + db = s.openDatabase(this); + // 查询数据库中的数据 + Cursor cursor = db.rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City city = new City(); + city.set_id(cursor.getString(cursor.getColumnIndex("_id"))); + city.setFullName(cursor.getString(cursor.getColumnIndex("fullName"))); + city.setName(cursor.getString(cursor.getColumnIndex("name"))); + city.setParent(cursor.getString(cursor.getColumnIndex("parent"))); + city.setTreePath(cursor.getString(cursor.getColumnIndex("treePath"))); + provinceList.add(city); + + } + cursor.close(); + + // 省列表 + // sp_province.setAdapter(new + // ArrayAdapter(MyDetailInfoActivity.this, + // android.R.layout.simple_list_item_1, provinceList)); + + ArrayAdapter adapter1 = new ArrayAdapter(ct, + R.layout.spinner_item, provinceList); + adapter1.setDropDownViewResource(R.layout.drop_down_layout); + sp_province.setAdapter(adapter1); + // sp_province.setSelection(2,true); + sp_province.setOnItemSelectedListener(new OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + + // TextView v1 = (TextView)view; + // v1.setTextSize(12);//设置字体大小 + // v1.setGravity(android.view.Gravity.CENTER); //设置居中 + + provinceId = provinceList.get(position).get_id(); + + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + cityList.clear(); + while (cursor.moveToNext()) { + City city = new City(); + city.set_id(cursor.getString(cursor.getColumnIndex("_id"))); + city.setFullName(cursor.getString(cursor + .getColumnIndex("fullName"))); + city.setName(cursor.getString(cursor.getColumnIndex("name"))); + city.setParent(cursor.getString(cursor + .getColumnIndex("parent"))); + city.setTreePath(cursor.getString(cursor + .getColumnIndex("treePath"))); + cityList.add(city); + } + cursor.close(); + + // sp_city.setAdapter(new ArrayAdapter( + // MyDetailInfoActivity.this, + // android.R.layout.simple_list_item_1, cityList)); + + // 城市列表 + ArrayAdapter adapter2 = new ArrayAdapter(ct, + R.layout.spinner_item, cityList); + adapter2.setDropDownViewResource(R.layout.drop_down_layout); + sp_city.setAdapter(adapter2); + + } + + @Override + public void onNothingSelected(AdapterView parent) { + // TODO Auto-generated method stub + + } + }); + + sp_city.setOnItemSelectedListener(new OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + cityId = cityList.get(position).get_id(); + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + disctictList.clear(); + while (cursor.moveToNext()) { + City city = new City(); + city.set_id(cursor.getString(cursor.getColumnIndex("_id"))); + city.setFullName(cursor.getString(cursor + .getColumnIndex("fullName"))); + city.setName(cursor.getString(cursor.getColumnIndex("name"))); + city.setParent(cursor.getString(cursor + .getColumnIndex("parent"))); + city.setTreePath(cursor.getString(cursor + .getColumnIndex("treePath"))); + + disctictList.add(city); + } + cursor.close(); + if (disctictList.size() == 0) {// 直辖市没有省市区分(如北京市),则只需要两个Spinner + rl_spinner_disctict.setVisibility(View.GONE); + } else { + rl_spinner_disctict.setVisibility(View.VISIBLE); + + } + + // sp_disctict.setAdapter(new ArrayAdapter( + // MyDetailInfoActivity.this, + // android.R.layout.simple_list_item_1, disctictList)); + // 区县列表 + ArrayAdapter adapter3 = new ArrayAdapter(ct, + R.layout.spinner_item, disctictList); + adapter3.setDropDownViewResource(R.layout.drop_down_layout); + sp_disctict.setAdapter(adapter3); + } + + @Override + public void onNothingSelected(AdapterView parent) { + // TODO Auto-generated method stub + + } + }); + + sp_disctict.setOnItemSelectedListener(new OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, View view, + int position, long id) { + disctictId = disctictList.get(position).get_id(); + } + + @Override + public void onNothingSelected(AdapterView parent) { + // TODO Auto-generated method stub + + } + }); + + } + + /** + * + * + * 类名称:MyListAdapter 类描述:TODO 创建人:苏三元 时间:2015-10-27 下午4:34:44 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ + private class MyListAdapter extends BaseAdapter { + + private EditText et; + private List List; + private String name = ""; + + public MyListAdapter(EditText et, List List) { + // TODO Auto-generated constructor stub + this.et = et; + this.List = List; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return List.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + // TextView tv_msg; + // ImageView delete; + // View view = null; + ViewHolder holder; + if (convertView == null) { + convertView = View.inflate(ct, R.layout.setting_info_pop_item, + null); + holder = new ViewHolder(); + holder.tv_msg = (TextView) convertView + .findViewById(R.id.tv_list_item); + // tag妙用 + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + if (et_officeName.equals(et)) { + name = List.get(position).officeName;// 科室名称 + } else { + name = List.get(position).name; + } + holder.tv_msg.setText(name); + + convertView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // String name1; + // if (et_officeName.equals(et)) { + // name1 = List.get(position).officeName;//科室名称 + // }else{ + // name1 = List.get(position).name; + // } + if (et_officeName.equals(et)) { + officeUuid = List.get(position).officeUuid; + officeName = List.get(position).officeName;// 科室名称 + // 设置输入框 + et.setText(officeName); + } else if (et_hospitalName.equals(et)) { + hospitalUuid = List.get(position).uuid; + hospitalName = List.get(position).name; + // 设置输入框 + et.setText(hospitalName); + } else if (et_professional.equals(et)) { + positionUuid = List.get(position).uuid; + positionName = List.get(position).name; + // 设置输入框 + et.setText(positionName); + } + // 取消显示 + popWin.dismiss(); + } + }); + return convertView; + } + + private class ViewHolder { + TextView tv_msg; + } + + } + + /** + * 跳转之后返回的结果 + * + * @param requestCode + * 表示是哪个Intent跳转的 + * @param resultCode + * 返回的结果码 + * @param data + * 数据 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, + final Intent data) { + super.onActivityResult(requestCode, resultCode, data); + // 证书 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO) { + // imageView不设null, 第一次上传成功后,第二次在选择上传的时候会报错。 + String picPath = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_PATH); + picBase64 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_BASE64); + + LogUtil.i("picPath=" + picPath + "=picBase64=" + picBase64); + String imageUrl = Scheme.FILE.wrap(picPath); + LogUtil.i("imageUrl==" + imageUrl); + // Bitmap bitmap = BitmapFactory.decodeFile(picPath); + // upload_certificateImg.setImageBitmap(bitmap); + ImageLoader.getInstance().displayImage(imageUrl, + upload_certificateImg, + ImageOptions.getImageOptions(R.drawable.add_photo_normal)); + + } + // 头像 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO1) { + // imageView不设null, 第一次上传成功后,第二次在选择上传的时候会报错。 + String picPath1 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_PATH); + picBase641 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_BASE64); + + LogUtil.i("picPath1=" + picPath1 + "=picBase641=" + picBase641); + String imageUrl = Scheme.FILE.wrap(picPath1); + LogUtil.i("imageUrl2==" + imageUrl); + ImageLoader.getInstance().displayImage(imageUrl, iv_photo); + + } + } + + /** + * + * + * 类名称:MyAdapter 类描述:TODO 创建人:苏三元 时间:2015-10-27 下午4:34:36 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ + private class MyAdapter extends BaseAdapter { + + // 用来控制CheckBox的选中状况 + private HashMap isSelected; + private List list; + + public MyAdapter(List diseaseList) { + this.isSelected = new HashMap(); + this.list = diseaseList; + // 初始化数据 + initDate(); + } + + private void initDate() { + for (int i = 0; i < list.size(); i++) { + getIsSelected().put(i, false); + String uuid2 = list.get(i).uuid; + if (specialPosintions != null) { + for (int j = 0; j < specialPosintions.length; j++) { + if (uuid2.equals(specialPosintions[j])) { + getIsSelected().put(i, true); + LogUtil.i("i==" + i); + } + } + } + } + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + VHolder holder = null; + if (convertView == null) { + // 获得ViewHolder对象 + holder = new VHolder(); + // 导入布局并赋值给convertview + convertView = View.inflate(ct, R.layout.item_date_time, null); + holder.cb = (CheckBox) convertView + .findViewById(R.id.cb_list_title); + holder.cb.setTextSize(13); + // 为view设置标签 + convertView.setTag(holder); + } else { + // 取出holder + holder = (VHolder) convertView.getTag(); + } + + holder.cb.setText(list.get(position).name);// stringArrays[position] + + // 根据isSelected来设置checkbox的选中状况 + holder.cb.setChecked(getIsSelected().get(position)); + + return convertView; + } + + public HashMap getIsSelected() { + return isSelected; + } + + } + + public static class VHolder { + CheckBox cb; + } + + // 得到专长 + private void getCheck() { + disease = ""; + String diseaseName = ""; + /* + * for (int i = 0; i < stringArrays.length; i++) { Boolean isCheck = + * adapter.getIsSelected().get(i); if (isCheck) { disease += + * stringArrays[i] + ","; } } + */ + for (int i = 0; i < diseaseList.size(); i++) { + Boolean isCheck = adapter.getIsSelected().get(i); + if (isCheck) { + disease += diseaseList.get(i).uuid + ","; + diseaseName = diseaseList.get(i).name + "、"; + LogUtil.i("disease=" + disease + "=diseaseName=" + diseaseName); + } + } + // 保存到sp为了以后使用 + SharePrefUtil.saveString(ct, "disease", disease); + // 去掉最后一个“、” + if (!TextUtils.isEmpty(diseaseName) && diseaseName.length() > 0) { + diseaseName = diseaseName.substring(0, diseaseName.length() - 1); + SharePrefUtil.saveString(ct, "diseaseName", diseaseName); + } + } + + private int checkNum = 0; // 记录选中的条目数量 + private ECAlertDialog buildAlert; + private String[] specialPosintions; + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + VHolder holder = (VHolder) arg1.getTag(); + + LogUtil.i("checkNum=" + checkNum + "arg2=" + arg2); + if (!holder.cb.isChecked()) { + if (checkNum >= 5) { + ToastUtil.showToast("最多选五项"); + return; + } + } + // 改变CheckBox的状态 + holder.cb.toggle(); + // 将CheckBox的选中状况记录下来 + adapter.getIsSelected().put(arg2, holder.cb.isChecked()); + // 调整选定条目 + if (holder.cb.isChecked() == true) { + checkNum++; + } else { + checkNum--; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LogisticsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LogisticsActivity.java new file mode 100644 index 0000000..0fcdd81 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LogisticsActivity.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.util.Log; +import android.view.View; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.LogistAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LogisticsBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CopyButtonLibrary; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class LogisticsActivity extends BaseActivity implements OnCallBackFromNet { + + + private View TopView; + + @Override + public void setTitle() { + top_title.setText("物流信息"); + } + + TextView express,number,empty,btn_copy; + ListView listview; + LogistAdapter logistAdapter; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_logistics); + TopView = UIUtils.inflate(R.layout.log_header); + express=TopView.findViewById(R.id.tv_express); + number=TopView.findViewById(R.id.number); + btn_copy=TopView.findViewById(R.id.btn_copy); + empty=TopView.findViewById(R.id.empty); + express.setText("信息来源:"+getIntent().getStringExtra("name")); + number.setText("运单编号:"+getIntent().getStringExtra("number")); + listview=view.findViewById(R.id.listview); + listview.addHeaderView(TopView); + getOrderTrack(); + btn_copy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CopyButtonLibrary copyButtonLibrary = new CopyButtonLibrary(getApplicationContext(),number); + copyButtonLibrary.init(); + } + }); + return view; + } + public void getOrderTrack() + { + Map param = new HashMap<>(); + param.put("order_id",getIntent().getStringExtra("order_id")); + sendJsonPostParamtoNetSignMD5(Url.getOrderTrack, param, 1, this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + LogisticsBean logisticsBean; + List beanList =new ArrayList<>(); + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("LogisticsActivity",resultJson); + switch (resultCode) + { + case 1: + logisticsBean= GsonTools.fromGsonToBean(resultJson,LogisticsBean.class); + if("200".equals(logisticsBean.getCode())) + { + beanList.clear(); + if(logisticsBean.getData()!=null&&logisticsBean.getData().getData()!=null) + { + beanList.addAll(logisticsBean.getData().getData()); + + } + else + { + + empty.setVisibility(View.VISIBLE); + } + logistAdapter =new LogistAdapter(beanList); + listview.setAdapter(logistAdapter); + } + else + { + ToastUtil.showToast(logisticsBean.getMessage()); + } + break; + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveActivity.java new file mode 100644 index 0000000..25f7a82 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveActivity.java @@ -0,0 +1,306 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.LoveListAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LoveListBean; +import cn.shangyu.gdxzExpert.bean.LoveListBean.LoveData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 爱心捐助fragment + * + * 类名称:LoveFragment 类描述: 创建人:苏三元 时间:2015-9-24 下午1:44:22 版权:河南商宇科技有限公司--版权所有 (c) + * 2015 + * + * 修改人:liufang 修改时间:2015-11-06 14:28:30 + */ +public class LoveActivity extends BaseActivity implements OnItemClickListener { + + private LoveListAdapter mAdapter; + private ArrayList mList = new ArrayList(); + private PullToRefreshListView ptrLv; + private String url = Url.getLoveList; + private LoveActivity mActivity; + private int page = 1; + private HttpHandler httpHandler; + private TextView tv_empty_msg; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.fragment_love); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_love); + + // 加载对话框布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + // 网络错误布局 + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + tv_empty_msg = (TextView) view.findViewById(R.id.load_empty); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("平台暂未收到爱心捐助"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + // ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getLoveList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getLoveList(url); + } + }); + + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void initData() { + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getLoveList(url); + // 当缓存时间大于5分钟则刷新数据 + // String time = SharePrefUtil.getString(mActivity, + // "key_love_fragment_cache_date", ""); + // if (!StringUtil.isBland(time)) { + // int minute = DateUtil.compareTime(time, 5); + // if (minute > 5) { + // getLoveList(url); + // } + // } + } + + public void getLoveList(final String loadUrl) { + RequestParams param = new RequestParams(); + + param.addBodyParameter("page", String.valueOf(page)); + param.addBodyParameter("donateType", String.valueOf(2)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, param, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("getLoveList.onSuccess info.result = " + + info.result); + if (page == 1) { + SharePrefUtil.saveString(mActivity, url, + info.result); + // 保存缓存的时间 + SharePrefUtil.saveString( + mActivity, + "key_love_fragment_cache_date", + DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLoveList.onFailure: " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("网络连接失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + // 设置刷新的时间 + setLastUpdateTime(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + LoveListBean bean = GsonTools + .fromGsonToBean(result, LoveListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 完成刷新 + onLoaded(); + // 显示空布局 + ptrLv.setEmptyView(tv_empty_msg); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(tv_empty_msg); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data); + } + } else { + mList.addAll(bean.data); + } + // 更新爱心捐助列表 + if (mAdapter == null) { + mAdapter = new LoveListAdapter(mActivity, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) { + ToastUtil.showMessage("没有更多内容了"); + ptrLv.setMode(Mode.PULL_FROM_START); + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + LoveData data = (LoveData) parent.getAdapter().getItem(position); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", data.details); + intent.putExtra("title", "爱心捐助"); + startActivity(intent); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode != Activity.RESULT_OK) { + return; + } else { + switch (requestCode) { + case Constant.DONATE_CODE: + getLoveList(url); + break; + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onResume() { + super.onResume(); + // page = 1; + // getLoveList(Url.getLoveList); + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_right.setImageResource(R.drawable.icon_donating); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + startActivity(new Intent(ct, IWantDonateActivity.class)); + } + }); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveContentEditActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveContentEditActivity.java new file mode 100644 index 0000000..dfd745d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveContentEditActivity.java @@ -0,0 +1,166 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.Editable; +import android.text.InputFilter; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我要捐助-爱心捐助编辑内容 + * @author 纪肖 + * + */ +public class LoveContentEditActivity extends BaseActivity implements OnClickListener{ + private View view; + private EditText et_donate_content; + private TextView note; + private Intent intent; + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.top_back_layout: + intent = getIntent(); + if(intent.getType().equals("3")){ + Intent intent1=new Intent(); + intent1.putExtra("content",et_donate_content.getText().toString().trim()); + setResult(523, intent1); + }else{ + Intent intent1=new Intent(); + intent1.putExtra("useRequirements",et_donate_content.getText().toString().trim()); + setResult(525, intent1); + } + finish(); + break; + + case R.id.top_right_text: + intent = getIntent(); + if(intent.getType().equals("3")){ + if(TextUtils.isEmpty(et_donate_content.getText().toString().trim())){ + ToastUtil.showMessage("请输入捐赠内容"); + return; + } + Intent intent=new Intent(); + intent.putExtra("content",et_donate_content.getText().toString().trim()); + setResult(523, intent); + + }else{ + if(TextUtils.isEmpty(et_donate_content.getText().toString().trim())){ + ToastUtil.showMessage("请输入捐赠物品使用要求"); + return; + } + Intent intent=new Intent(); + intent.putExtra("useRequirements",et_donate_content.getText().toString().trim()); + setResult(525, intent); + } + finish(); + break; + } + + } + + @Override + public void setTitle() { + + top_back_layout.setVisibility(View.VISIBLE); + top_back_layout.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("保存"); + top_right_text.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.love_donate_iwant_content); + note = (TextView) view.findViewById(R.id.tv_note); + et_donate_content=(EditText)view.findViewById(R.id.et_donate_content); + intent = getIntent(); + if(intent.getType().equals("3")){ + top_title.setText("捐助物品"); + String content = getIntent().getStringExtra("content"); + et_donate_content.setHint("限二十字文字描述"); + et_donate_content.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); + et_donate_content.setText(content); + }else if(intent.getType().equals("5")){ + top_title.setText("物品使用要求"); + note.setText("请输入您对所捐助物品的使用要求"); + String useRequirements = getIntent().getStringExtra("useRequirements"); + et_donate_content.setText(useRequirements); + } + et_donate_content.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stubs + } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + String count1 = et_donate_content.getText().toString().trim(); + if(intent.getType().equals("3")){ + if(count1.length() >= 20 ){ + ToastUtil.showMessage("最多输入二十字"); + } + } + if(intent.getType().equals("5")){ + if(count1.length() >= 200 ){ + ToastUtil.showMessage("最多输入二百字"); + } + } + } + }); + + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + //这里重写返回键 + intent = getIntent(); + if(intent.getType().equals("3")){ + Intent intent1=new Intent(); + intent1.putExtra("content",et_donate_content.getText().toString().trim()); + setResult(523, intent1); + }else{ + Intent intent1=new Intent(); + intent1.putExtra("useRequirements",et_donate_content.getText().toString().trim()); + setResult(525, intent1); + } + finish(); + } + return false; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveEditName.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveEditName.java new file mode 100644 index 0000000..4d2aecb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/LoveEditName.java @@ -0,0 +1,174 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.InputFilter; +import android.text.InputType; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * 爱心捐助-姓名编辑 + * + * 类名称:LoveEditName + * 创建人:记肖 + * + */ +public class LoveEditName extends BaseActivity implements OnClickListener { + private View view; + private EditText et_name; + private Intent intent; +// private ImageView iv_cancel; + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_back_layout.setOnClickListener(this); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("保存"); + top_right_text.setOnClickListener(this); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_edit_name); + et_name=(EditText)view.findViewById(R.id.et_name); +// iv_cancel = (ImageView) view.findViewById(R.id.iv_cancel); +// iv_cancel.setOnClickListener(this); +// iv_cancel.setVisibility(View.VISIBLE); + intent = getIntent(); + if(intent.getType().equals("1")){ + top_title.setText("姓名"); + String name = getIntent().getStringExtra("name"); + et_name.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); + et_name.setText(name); + }else if(intent.getType().equals("2")){ + top_title.setText("联系电话"); + String phone = getIntent().getStringExtra("phone"); +// et_name.setHint("请输入联系方式"); + et_name.setInputType(InputType.TYPE_CLASS_NUMBER); + et_name.setText(phone); + }else if(intent.getType().equals("4")){ + top_title.setText("捐助数量"); + String amounts = getIntent().getStringExtra("amounts"); + et_name.setInputType(InputType.TYPE_CLASS_NUMBER); + et_name.setFilters(new InputFilter[]{new InputFilter.LengthFilter(6)}); +// et_name.setHint("请输入您要捐助的数量"); + et_name.setText(amounts); + } + + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + intent = getIntent(); + + switch (v.getId()) { + case R.id.top_back_layout: + + if(intent.getType().equals("1")){ + Intent intent1=new Intent(); + intent1.putExtra("name",et_name.getText().toString().trim()); + setResult(521, intent1); + }else if(intent.getType().equals("2")){ + Intent intent1=new Intent(); + intent1.putExtra("phone",et_name.getText().toString().trim()); + setResult(522, intent1); + + }else if(intent.getType().equals("4")){ + Intent intent1=new Intent(); + intent1.putExtra("amounts",et_name.getText().toString().trim()); + setResult(524, intent1); + } + finish(); + break; + //点击保存时进行是否为空的操作 + case R.id.top_right_text: + if(intent.getType().equals("1")){ + if(TextUtils.isEmpty(et_name.getText().toString().trim())){ + ToastUtil.showMessage("请输入姓名"); + return; + } + Intent intent=new Intent(); + intent.putExtra("name",et_name.getText().toString().trim()); + setResult(521, intent); + }else if(intent.getType().equals("2")){ + if(TextUtils.isEmpty(et_name.getText().toString().trim())){ + ToastUtil.showMessage("请输入联系方式"); + return; + } + if(!ValidateUtils.isPhoneAndMobile(et_name.getText().toString().trim())){ + ToastUtil.showMessage("请输入正确的联系方式"); + return; + } + + Intent intent=new Intent(); + intent.putExtra("phone",et_name.getText().toString().trim()); + setResult(522, intent); + }else if(intent.getType().equals("4")){ + if(TextUtils.isEmpty(et_name.getText().toString().trim())){ + ToastUtil.showMessage("请输入捐献数量"); + return; + } + Intent intent=new Intent(); + intent.putExtra("amounts",et_name.getText().toString().trim()); + setResult(524, intent); + } + finish(); + break; +// case R.id.iv_cancel: +// et_name.setText(""); +// break; + } + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + //这里重写返回键 + intent = getIntent(); + if(intent.getType().equals("1")){ + Intent intent1=new Intent(); + intent1.putExtra("name",et_name.getText().toString().trim()); + setResult(521, intent1); + }else if(intent.getType().equals("2")){ + Intent intent1=new Intent(); + intent1.putExtra("phone",et_name.getText().toString().trim()); + setResult(522, intent1); + + }else if(intent.getType().equals("4")){ + Intent intent1=new Intent(); + intent1.putExtra("amounts",et_name.getText().toString().trim()); + setResult(524, intent1); + } + finish(); + } + return false; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MainActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MainActivity.java new file mode 100644 index 0000000..0a9f45d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MainActivity.java @@ -0,0 +1,3743 @@ +package cn.shangyu.gdxzExpert.activity; + +import static com.taobao.accs.ACCSManager.mContext; +import static cn.bertsir.zbar.QrConfig.SCANVIEW_TYPE_QRCODE; +import static cn.bertsir.zbar.QrConfig.SCREEN_PORTRAIT; +import static cn.bertsir.zbar.QrConfig.TYPE_QRCODE; +import static cn.bertsir.zbar.view.ScanLineView.style_line; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.saveUnreadFollow; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.unreadFollow; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.needshowGuideView; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.showGuideView; +import static cn.shangyu.gdxzExpert.utils.Constant.Changjianwenti; +import static cn.shangyu.gdxzExpert.utils.Constant.uniapp_mp_appid; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_MESSGAE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_SIGN_IN; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_SIGN_IN_ALERT_NEWS; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_EDUCATION; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_HOME; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_MEETING; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_MY; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_TEACH; +import static cn.shangyu.gdxzExpert.utils.Url.checkVersion; +import static cn.shangyu.gdxzExpert.utils.Url.getAccessToken; +import static cn.shangyu.gdxzExpert.utils.Url.getShowMagazine; +import static cn.shangyu.gdxzExpert.utils.Url.scanurl; +import static cn.shangyu.gdxzExpert.utils.Url.umVerifyLogin; +import static cn.shangyu.gdxzExpert.utils.Url.yxrefresh; +import static cn.shangyu.gdxzExpert.utils.Url.yxregist; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.ActivityManager; +import android.app.ActivityManager.RunningServiceInfo; +import android.app.AlertDialog; +import android.app.AppOpsManager; +import android.app.Dialog; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationChannelGroup; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.DialogInterface.OnKeyListener; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.provider.Settings; +import android.text.Html; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.core.app.NotificationCompat; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.alibaba.fastjson.JSON; +import com.binioter.guideview.Guide; +import com.binioter.guideview.GuideBuilder; +import com.easefun.polyvsdk.PolyvSDKClient; +import com.easefun.polyvsdk.po.PolyvViewerInfo; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.iflytek.cloud.SpeechConstant; +import com.iflytek.cloud.SpeechUtility; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.framework.infra.Handlers; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.LoginInfo; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.model.CustomNotification; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.umeng.analytics.MobclickAgent; +import com.umeng.message.common.UPushNotificationChannel; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.DataOutputStream; +import java.io.InputStream; +import java.io.InvalidClassException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.bertsir.zbar.Qr.ScanResult; +import cn.bertsir.zbar.QrConfig; +import cn.bertsir.zbar.QrManager; +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBonusPointsSuccessBean; +import cn.shangyu.gdxzExpert.bean.HomeModalBean; +import cn.shangyu.gdxzExpert.big.activity.BeginBigActivity; +import cn.shangyu.gdxzExpert.big.activity.BigMettingActivity; +import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity; +import cn.shangyu.gdxzExpert.big.adapter.NormalItemViewBig; +import cn.shangyu.gdxzExpert.big.fragment.BigHomeFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigMyFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigRecommendFragment; +import cn.shangyu.gdxzExpert.component.SimpleComponent; +import cn.shangyu.gdxzExpert.component.SimpleComponentNext; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; +import cn.shangyu.gdxzExpert.ecdemo.ui.group.GroupNoticeActivity; +import cn.shangyu.gdxzExpert.fragment.HomeNewFragment; +import cn.shangyu.gdxzExpert.fragment.KePuPublisheingFragment; +import cn.shangyu.gdxzExpert.fragment.KePuPublisheingFragment.OnKepuPublishingRefreshListener; +import cn.shangyu.gdxzExpert.fragment.KeepEducationFragment; +import cn.shangyu.gdxzExpert.fragment.KepuPublishedFragment; +import cn.shangyu.gdxzExpert.fragment.KepuPublishedFragment.OnKepuRefreshListener; +import cn.shangyu.gdxzExpert.fragment.MeetingFragment; +import cn.shangyu.gdxzExpert.fragment.MyNewFragment; +import cn.shangyu.gdxzExpert.fragment.PatientTeachFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.bagder.Badger; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; +import cn.shangyu.gdxzExpert.service.UpdateService; +import cn.shangyu.gdxzExpert.splash.UniappSplashView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.umeng.NewSystemMessageActivity; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.GrayManager; +import cn.shangyu.gdxzExpert.utils.HmacSha256ApiVerify; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StaUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import io.dcloud.feature.sdk.DCUniMPSDK; +import io.dcloud.feature.sdk.Interface.IOnUniMPEventCallBack; +import io.dcloud.feature.sdk.Interface.IUniMP; +import io.dcloud.feature.sdk.Interface.IUniMPOnCloseCallBack; +import io.dcloud.feature.unimp.DCUniMPJSCallback; +import io.dcloud.feature.unimp.config.UniMPOpenConfiguration; +import me.leolin.shortcutbadger.ShortcutBadger; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.OldPageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; +import okhttp3.Call; + +import android.graphics.Color; +import android.view.Gravity; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ProgressBar; + +/** + * + * MainActivity.java + * + * @author ssy + * @date 2015-8-31 下午3:52:22 Copyright (C) 2015 河南商宇科技有限公司 app 主入口 + * 功能说明:展示主页面以及底部导航 + */ + +public class MainActivity extends BaseActivity implements + OnCheckedChangeListener, OnKepuRefreshListener, + OnKepuPublishingRefreshListener, OnCallBackFromNet { + private static final int GETISACCOUNT = 202; + public static final int GETWELFARENOTICE = 203; + public BadgeView badgeSysMsg; + private RadioGroup main_radiogroup; + private FragmentManager fm; + RadioButton mRb_published; + // 科普显示 + private RadioGroup mRg_kepu; + private View mV_kp; + public RadioButton mRb_meeting, mRb_news, mRb_teach, mRb_home; + public TextView tab_rbn_publishing; + private View view; + private boolean isSign; + /** + * 当前MainActivity 实例 + */ + public static MainActivity mMainActivity; + private OnCallBackFromActivity onCallBackFromActivity; + private Intent intent = null; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + private RadioButton tab_rbn_my; + public static final int ISMAILANEXPERT= 12; + public static final int YXREGISTER= 111; + public static final int YXREF= 155; + public static final int ACCESS_TOKEN= 185; + public static final int ISHASSYSMESSAGE= 112; + boolean fromlogin;//从登陆过来的 + private AlertDialog dialog3;//提示打开通知栏 + private AlertDialog dialog4;//提示福利 + private TextView tab_rbn_published; + public ImageView iv_zhibo; + private boolean one_last_notice; + private boolean receive_notice; + private static Boolean isSendGetUP=false; + private int count=0; + public static Boolean isneedupdatewindow=true; + RelativeLayout r_c; + private volatile int order=0;//请求弹窗的顺序 + + private int current_tab_id = R.id.tab_rbn_home; + + private static Handler handler; + + //自动触发打开 uniapp mp 开关 + private boolean auto_show_unimp = true; + + // 全屏Loading覆盖层 + private View fullScreenLoadingView; + + // 显示全屏Loading + private void showFullScreenLoading(){ + runOnUiThread(new Runnable() { + @Override + public void run() { + if(fullScreenLoadingView == null){ + FrameLayout overlay = new FrameLayout(MainActivity.this); + overlay.setClickable(true); + overlay.setFocusable(true); + overlay.setFocusableInTouchMode(true); + overlay.setBackgroundColor(Color.parseColor("#80000000")); + + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ); + + ProgressBar progressBar = new ProgressBar(MainActivity.this, null, android.R.attr.progressBarStyleLarge); + FrameLayout.LayoutParams plp = new FrameLayout.LayoutParams( + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ); + plp.gravity = Gravity.CENTER; + overlay.addView(progressBar, plp); + + fullScreenLoadingView = overlay; + + ViewGroup decor = (ViewGroup) getWindow().getDecorView(); + decor.addView(fullScreenLoadingView, lp); + }else{ + fullScreenLoadingView.setVisibility(View.VISIBLE); + } + } + }); + } + + // 隐藏全屏Loading + private void hideFullScreenLoading(){ + runOnUiThread(new Runnable() { + @Override + public void run() { + if(fullScreenLoadingView != null){ + fullScreenLoadingView.setVisibility(View.GONE); + } + } + }); + } + + @Override + public void setTitle() { + + } + + @Override + public View onCreateSuccessedView() { + // 强制设置为竖屏模式 + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + + if (handler == null) { + handler = Handlers.sharedInstance().newHandler("Main"); + } + + getGray(); +// Paint paint = new Paint(); +// ColorMatrix cm = new ColorMatrix(); +// cm.setSaturation(0);//灰度效果 +// paint.setColorFilter(new ColorMatrixColorFilter(cm)); +// getWindow().getDecorView().setLayerType(View.LAYER_TYPE_HARDWARE,paint); + GrayManager.getInstance().setLayerGrayType(getWindow().getDecorView()); + isneedupdatewindow=true; + mMainActivity = this; + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + SpeechUtility.createUtility(this, SpeechConstant.APPID +"=5975b26b"); + view = UIUtils.inflate(R.layout.activity_main); + r_c=view.findViewById(R.id.r_c); + Intent intent = getIntent(); + if (intent != null && intent.getIntExtra("launcher_from", -1) == 1) { + // 检测从登陆界面过来,判断是不是第一次安装使用 + checkFirstUse(); + } + + fromlogin = getIntent().getBooleanExtra("fromlogin", false); + + /** + * 创建消息渠道 + * */ + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + try { + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + + String groupId_1 = "随访消息"; + String groupName_1 = "随访消息"; + NotificationChannelGroup group5 = new NotificationChannelGroup(groupId_1, groupName_1); + notificationManager.createNotificationChannelGroup(group5); + + String channelId1 = "随访消息"; + String channelName1 = "随访消息"; + int importance1 = NotificationManager.IMPORTANCE_HIGH; + NotificationChannel channel1 = new NotificationChannel(channelId1, channelName1, importance1); + channel1 .setDescription("最新随访消息"); + channel1.setGroup(groupId_1); + notificationManager.createNotificationChannel(channel1); + + String channelId11 = UPushNotificationChannel.PRIMARY_CHANNEL; + String channelName11 = "系统通知"; + int importance11 = NotificationManager.IMPORTANCE_HIGH; + NotificationChannel channel11 = new NotificationChannel(channelId11, channelName11, importance11); + notificationManager.createNotificationChannel(channel11); + }catch (Exception e){ + + } + + } + + + /** + * 首次启动,更新 + * */ + checkfirstLogin(); + + getAppInfo(); + /** + * 是否是迈兰医生 + * */ + isMaiLanExpert(); + /** + * 专家账户状态 + * */ + getIsAccount(); + + setPolvPlayViewerId();//学员唯一标识 + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("LOCAL_ACTION"); + intentFilter.addAction("LOCAL_ACTION1"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + login(); + registerSystemObserver(true); + getHospital(); + + if(StringUtil.isEmpty(Constant.Repotr_token)) + { + initReport(); + } + if(BigModule()) + { + r_c.setVisibility(View.GONE); + + initBig(); + return view; + + } + r_c.setVisibility(View.VISIBLE); + main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup); + main_radiogroup.setVisibility(View.VISIBLE); + mRg_kepu = (RadioGroup) view.findViewById(R.id.rg_kepu); + mRg_kepu.setVisibility(View.GONE); + tab_rbn_published = view.findViewById(R.id.tab_rbn_published); + mV_kp = view.findViewById(R.id.div_pk_view); + mRb_published = (RadioButton) view.findViewById(R.id.tab_rbn_zhongxin); + tab_rbn_publishing = view.findViewById(R.id.tab_rbn_publishing); + iv_zhibo = view.findViewById(R.id.iv_zhibo); + + //常见问题 + tab_rbn_publishing.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intentc = new Intent(MainActivity.this, NewsDetailActivity.class); + intentc.putExtra("url", Changjianwenti); + intentc.putExtra("title", "常见问题"); + intentc.putExtra("newsTitle", "肝病常见问题权威答"); + intentc.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); + intentc.putExtra("flag", 1); + startActivity(intentc); + needreportPage("常见问题"); + } + }); + mRb_meeting = (RadioButton) view.findViewById(R.id.tab_rbn_donation); + + mRb_news = (RadioButton) view.findViewById(R.id.tab_rbn_news); + mRb_teach = (RadioButton) view.findViewById(R.id.tab_rbn_kepu); + mRb_home = (RadioButton) view.findViewById(R.id.tab_rbn_home); + mRg_kepu.setOnCheckedChangeListener(mKPCheckListener); + //患教视频 + tab_rbn_published.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(ct,PatientVideoActivity.class)); + } + }); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); + // 如果是登陆过来的 + String type = intent.getStringExtra("type"); + if (!StringUtil.isEmpty(type) && type.equals("meeting")) { + mRb_meeting.setChecked(true); + } else if (!StringUtil.isEmpty(type) && type.equals("teach")) { + mRb_teach.setChecked(true); + } else if (!StringUtil.isEmpty(type) && type.equals("news")) { + mRb_news.setChecked(true); + } else { + changeHome(); + } + + + DCUniMPSDK.getInstance().setUniMPOnCloseCallBack(new IUniMPOnCloseCallBack() { + @Override + public void onClose(String appid) { + auto_show_unimp = false; + LogUtil.i("setUniMPOnCloseCallBack: ", appid); + if(BaseApplication.getUniMPCaches().containsKey(appid)){ + BaseApplication.getUniMPCaches().remove(appid); + } + } + }); + + DCUniMPSDK.getInstance().setOnUniMPEventCallBack(new IOnUniMPEventCallBack() { + @Override + public void onUniMPEventReceive(String appid, String event, Object data, DCUniMPJSCallback callback) { + + + LogUtil.i("onUniMPEventReceive appid="+appid); + LogUtil.i("onUniMPEventReceive event="+event); + LogUtil.i("onUniMPEventReceive data="+data); + + try { + if(event.equals("goTabbarPage")){ + + auto_show_unimp = false; +// BaseApplication.getUniMPCaches().get(appid).hideUniMP(); +// BaseApplication.getUniMPCaches().get(appid).showUniMP(); +// BaseApplication.getUniMPCaches().get(appid).closeUniMP(); + // data 可能是 JSONObject 或 String,需要判断类型 + String msg = null; + if (data instanceof com.alibaba.fastjson.JSONObject) { + // 如果是 fastjson 的 JSONObject,直接使用 + com.alibaba.fastjson.JSONObject fastJsonObj = (com.alibaba.fastjson.JSONObject) data; + msg = fastJsonObj.getString("msg"); + } else if (data instanceof String) { + // 如果是 String,解析为 JSONObject + JSONObject jsonObject = new JSONObject((String) data); + msg = jsonObject.getString("msg"); + } else { + // 尝试转换为字符串再解析 + JSONObject jsonObject = new JSONObject(data.toString()); + msg = jsonObject.getString("msg"); + } + LogUtil.i("goTabbarPage msg=" + msg); + if(msg.equals("home")){//首页 + LogUtil.i("准备切换到首页"); + // 使用主线程 Handler 确保在主线程执行 + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + try { + LogUtil.i("开始执行首页切换逻辑"); + if (main_radiogroup == null) { + LogUtil.e("main_radiogroup is null!"); + return; + } + // 直接执行首页切换逻辑,不依赖事件触发 + main_radiogroup.setOnCheckedChangeListener(null); + main_radiogroup.check(R.id.tab_rbn_home); + main_radiogroup.setOnCheckedChangeListener(MainActivity.this); + + // 执行首页相关的UI更新和逻辑 + if (mToolbar != null) { + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + } + if (mRg_kepu != null) { + mRg_kepu.setVisibility(View.GONE); + } + if (mV_kp != null) { + mV_kp.setVisibility(View.GONE); + } + MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_HOME); + changeHome(); + LogUtil.i("首页切换逻辑执行完成"); + } catch (Exception e) { + LogUtil.e("执行首页切换时出错: " + e.getMessage()); + e.printStackTrace(); + } + } + }); + }else if(msg.equals("patientClass")){//患教 + LogUtil.i("准备切换到患教页"); + // 使用主线程 Handler 确保在主线程执行 + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + try { + LogUtil.i("开始执行患教页切换逻辑"); + if (main_radiogroup == null) { + LogUtil.e("main_radiogroup is null!"); + return; + } + // 直接执行患教页切换逻辑,不依赖事件触发 + main_radiogroup.setOnCheckedChangeListener(null); + main_radiogroup.check(R.id.tab_rbn_kepu); + main_radiogroup.setOnCheckedChangeListener(MainActivity.this); + + // 执行患教页相关的UI更新和逻辑 + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mToolbar.getBackground().setAlpha(255); + mRg_kepu.setVisibility(View.VISIBLE); + mV_kp.setVisibility(View.VISIBLE); + mRb_published.setChecked(true); + top_sgin.setVisibility(View.GONE); + MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_TEACH); + changePatientZhongxin(); + LogUtil.i("患教页切换逻辑执行完成"); + } catch (Exception e) { + LogUtil.e("执行患教页切换时出错: " + e.getMessage()); + e.printStackTrace(); + } + } + }); + }else if(msg.equals("education")){//继续教育 + LogUtil.i("准备切换到继续教育页"); + // 使用主线程 Handler 确保在主线程执行 + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + try { + LogUtil.i("开始执行继续教育页切换逻辑"); + if (main_radiogroup == null) { + LogUtil.e("main_radiogroup is null!"); + return; + } + // 直接执行继续教育页切换逻辑,不依赖事件触发 + main_radiogroup.setOnCheckedChangeListener(null); + main_radiogroup.check(R.id.tab_rbn_news); + main_radiogroup.setOnCheckedChangeListener(MainActivity.this); + + // 执行继续教育页相关的UI更新和逻辑 + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mRg_kepu.setVisibility(View.GONE); + mV_kp.setVisibility(View.GONE); + top_sgin.setVisibility(View.GONE); + mToolbar.getBackground().setAlpha(255); + MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_EDUCATION); + changeNews(); + LogUtil.i("继续教育页切换逻辑执行完成"); + } catch (Exception e) { + LogUtil.e("执行继续教育页切换时出错: " + e.getMessage()); + e.printStackTrace(); + } + } + }); + }else if(msg.equals("mine")){//我的 + LogUtil.i("准备切换到我的页"); + // 使用主线程 Handler 确保在主线程执行 + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + try { + LogUtil.i("开始执行我的页切换逻辑"); + if (main_radiogroup == null) { + LogUtil.e("main_radiogroup is null!"); + return; + } + // 直接执行我的页切换逻辑,不依赖事件触发 + main_radiogroup.setOnCheckedChangeListener(null); + main_radiogroup.check(R.id.tab_rbn_my); + main_radiogroup.setOnCheckedChangeListener(MainActivity.this); + + // 执行我的页相关的UI更新和逻辑 + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mToolbar.getBackground().setAlpha(255); + top_sgin.setVisibility(View.GONE); + mRg_kepu.setVisibility(View.GONE); + mV_kp.setVisibility(View.GONE); + MobclickAgent.onEvent(MainActivity.this, EXPERT_TAB_MY); + changeMy(); + LogUtil.i("我的页切换逻辑执行完成"); + } catch (Exception e) { + LogUtil.e("执行我的页切换时出错: " + e.getMessage()); + e.printStackTrace(); + } + } + }); + }else{ + + } + } else if (event.equals("getScanCodeAuth")){ + JSONObject ScanCodeAuthData = new JSONObject(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + ScanCodeAuthData.put("code", 200); + callback.invoke(ScanCodeAuthData);//给uniapp 回传消息 + } else { + EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000).setContentView(R.layout.float_top_dialog).show(); + PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问读取短信的权限 + try { + ScanCodeAuthData.put("code", 200); + } catch (JSONException e) { + throw new RuntimeException(e); + } + callback.invoke(ScanCodeAuthData);//给uniapp 回传消息 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读取短信的申请 + EasyWindow.cancelAll(); + try { + ScanCodeAuthData.put("code", 0); + } catch (JSONException e) { + throw new RuntimeException(e); + } + callback.invoke(ScanCodeAuthData);//给uniapp 回传消息 + } + + }, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + }else { + ScanCodeAuthData.put("code", 0); + callback.invoke(ScanCodeAuthData);//给uniapp 回传消息 + } + }else if(event.equals("checkToken")){ + JSONObject checkToken = new JSONObject(); + checkToken.put("code", 200); + String access_token = SharePrefUtil.getString(MainActivity.this, "access_token", ""); + if(StringUtil.isEmpty(access_token)){ + checkToken.put("code", 0); + } + callback.invoke(checkToken);//给uniapp 回传消息 + } + }catch (Exception e){ + LogUtil.e("处理uniapp事件时出错: " + e.getMessage()); + e.printStackTrace(); + } + } + }); + + return view; + } + private OldPageNavigationView tab; + private FragmentManager manager; + NavigationController navigationController; + private Fragment currentFragment; + BigHomeFragment bigHomeFragment; + BigRecommendFragment bigRecommendFragment; + BigMyFragment bigMyFragment; + private void initBig() + { + mToolbar.setVisibility(View.GONE); + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) layout.getLayoutParams(); + p.setMargins(0,0, 0, 0); + layout.requestLayout(); + tab= view.findViewById(R.id.tab); + tab.setVisibility(View.VISIBLE); + //注意这里调用了custom()方法 + navigationController = tab.custom() + .addItem(newItem(R.drawable.big_home_d,R.drawable.big_home,"首页")) + .addItem(newItem(R.drawable.big_r_d,R.drawable.big_r,"推荐")) + .addItem(newItem(R.drawable.big_my_d,R.drawable.big_my,"我的")) + + .build(); + + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + // 选中时触发 + switch (index) + { + case 0: + showFragment(bigHomeFragment); + break; + case 1: + showFragment(bigRecommendFragment); + + break; + case 2: + showFragment(bigMyFragment); + + break; + + } + + } + }); + initFragment(); + if(getIntent().getIntExtra("home_module",0)==0) + { + showFragment(bigHomeFragment); + } + else + { + navigationController.setSelect(getIntent().getIntExtra("home_module",0)); + } + + + } + //创建一个Item + private BaseTabItem newItem(int drawable, int checkedDrawable, String text){ + NormalItemViewBig normalItemView = new NormalItemViewBig(this); + normalItemView.initialize(drawable,checkedDrawable,text,14); + normalItemView.setTextDefaultColor(Color.parseColor("#999999")); + normalItemView.setTextCheckedColor(Color.parseColor("#ff8B2316")); + + return normalItemView; + } + private void initFragment() + { + manager = getSupportFragmentManager(); + //实例化碎片对象 + bigHomeFragment = new BigHomeFragment(); + bigRecommendFragment = new BigRecommendFragment(); + bigMyFragment = new BigMyFragment(); + } + /** + 71 * 展示Fragment + 72 */ + private void showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = manager.beginTransaction(); + if(currentFragment!=null) + { + transaction.hide(currentFragment); + } + + currentFragment = fragment; + if (!fragment.isAdded()) { + transaction.add(R.id.frame_container, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + } + } + private void ShowMagazine() + { + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(getShowMagazine,param,666,this); + } + + private void registerSystemObserver(boolean register) { + NIMClient.getService(MsgServiceObserve.class).observeCustomNotification( + customNotificationObserver, register); + NIMClient.getService(MsgServiceObserve.class).observeRecentContact( + messageObserver, register); + } + Observer> messageObserver = new Observer>() { + + @Override + public void onEvent(List recentContacts) { + + refreshMessages(); + } + }; + public void refreshMessages() + { + int unreadNum = NIMClient.getService(MsgService.class).getTotalUnreadCount(); + Badger.updateBadgerCount(unreadNum); + } + + Observer customNotificationObserver = (Observer) notification -> { + + try { + if(notification.getContent()!=null) + { + com.alibaba.fastjson.JSONObject obj = com.alibaba.fastjson.JSONObject.parseObject(notification.getContent()); + if (obj != null && obj.getIntValue("id") == 1) { +// // 加入缓存中 +// CustomNotificationCache.getInstance().addCustomNotification(notification); +// // Toast +// String content = obj.getString("content"); +// String tip = String.format("自定义消息[%s]:%s", notification.getFromAccount(), content); +// ToastHelper.showToast(MainActivity.this, tip); + } + else + { + SharePrefUtil.saveBoolean(ct, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.show(); + + if(obj!=null) + { + + if("解除随访".equals(obj.getString("push_type"))||"随访撤销".equals(obj.getString("push_type"))) + { + Intent intent = new Intent(BaseApplication.getContext(), NewSystemMessageActivity.class); + intent.putExtra("module",2); + PendingIntent pendingIntent = PendingIntent.getActivity(BaseApplication.getContext(), 35, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + // 处理自定义通知消息 + Notification notification1 = new NotificationCompat.Builder(MainActivity.this,"随访消息") + .setAutoCancel(true) + .setContentTitle("新消息") + .setContentText(notification.getApnsText()+"") + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.ic_launcher) + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent) + .build(); + notification1.defaults = Notification.DEFAULT_SOUND;//声音 + ((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(55, notification1); + // 从数据库里删除该患者 + PatientSqlManager.delPatientInfo(obj.getString("patient_uuid")); + + } + else if("添加随访".equals(obj.getString("push_type"))) + { + unreadFollow++; + refreshMessages(); + saveUnreadFollow(); + Intent intent = new Intent(BaseApplication.getContext(), NormNewPatientActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(BaseApplication.getContext(), 35, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + // 处理自定义通知消息 + Notification notification1 = new NotificationCompat.Builder(MainActivity.this,"随访消息") + .setAutoCancel(true) + .setContentTitle("新消息") + .setContentText(notification.getApnsText()+"") + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.ic_launcher) + //设置红色 + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent) + .build(); + notification1.defaults = Notification.DEFAULT_SOUND;//声音 + ((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(55, notification1); + + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + obj.getString("patient_uuid")); + patientModel.setType(Constant.typePatient); + PatientSqlManager.insertPatient(patientModel, + Constant.typePatient); + } + else if("随访申请".equals(obj.getString("push_type"))) + { + unreadFollow++; + refreshMessages(); + saveUnreadFollow(); + Intent intent = new Intent(BaseApplication.getContext(), NormNewPatientActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(BaseApplication.getContext(), 35, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + // 处理自定义通知消息 + Notification notification1 = new NotificationCompat.Builder(MainActivity.this,"随访消息") + .setAutoCancel(true) + .setContentTitle("新消息") + .setContentText(notification.getApnsText()+"") + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.ic_launcher) + //设置红色 + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent) + .build(); + notification1.defaults = Notification.DEFAULT_SOUND;//声音 + ((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(55, notification1); + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + obj.getString("patient_uuid")); + patientModel.setType(Constant.typePatient); + patientModel.setRealName(obj.getString("patient_name")); + PatientSqlManager.insertPatient(patientModel, + Constant.typePatient); + + } + + } + + else + { + Intent intent = new Intent(BaseApplication.getContext(), MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(BaseApplication.getContext(), 35, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + // 处理自定义通知消息 + Notification notification1 = new NotificationCompat.Builder(MainActivity.this,"随访消息") + .setAutoCancel(true) + .setContentTitle("新消息") + .setContentText(notification.getApnsText()+"") + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.ic_launcher) + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent) + .build(); + notification1.defaults = Notification.DEFAULT_SOUND;//声音 + ((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(55, notification1); + } + + } + } + else + { + Intent intent = new Intent(BaseApplication.getContext(), MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(BaseApplication.getContext(), 35, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + + // 处理自定义通知消息 + Notification notification1 = new NotificationCompat.Builder(MainActivity.this,"随访消息") + .setAutoCancel(true) + .setContentTitle("新消息") + .setContentText(notification.getApnsText()+"") + .setWhen(System.currentTimeMillis()) + .setSmallIcon(R.drawable.ic_launcher) + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent) + .build(); + ((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(55, notification1); + } + + } catch (com.alibaba.fastjson.JSONException e) { + + } + }; + + /** + * 云信 + */ + private void login() { + String yx_accid = SharePrefUtil.getString(MainActivity.this, Constant.yx_accid, ""); + String yx_token = SharePrefUtil.getString(MainActivity.this, Constant.yx_token, ""); + if(StringUtil.isEmpty(yx_accid)||StringUtil.isEmpty(yx_token)) + { + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(yxregist,param,YXREGISTER,this); + } + else + { + if(NIMClient.getStatus() == StatusCode.LOGINED||NIMClient.getStatus() == StatusCode.LOGINING) + { + return; + } + // 登录 + NimUIKit.login(new LoginInfo(yx_accid, yx_token, null, 0), + new RequestCallback() { + + @Override + public void onSuccess(LoginInfo param) { + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + + + } + + @Override + public void onFailed(int code) { + + ToastHelper.showToast(MainActivity.this, + "云信登录失败: " + code); + DataCleanManager.cleanApplicationData(ct); + startActivity(new Intent(MainActivity.this, LoginNewActivity.class)); + finish(); + } + + @Override + public void onException(Throwable exception) { + ToastHelper.showToast(MainActivity.this, + "云信登录失败了: " + exception.toString()); + DataCleanManager.cleanApplicationData(ct); + startActivity(new Intent(MainActivity.this, LoginNewActivity.class)); + finish(); + + } + }); + } + + } + + private void saveLoginInfo(final String account, final String token) { + Preferences.saveUserAccount(account); + Preferences.saveUserToken(token); + } + private void initNotificationConfig() { + // 初始化消息提醒 + NIMClient.toggleNotification(UserPreferences.getNotificationToggle()); + // 加载状态栏配置 + StatusBarNotificationConfig statusBarNotificationConfig = UserPreferences.getStatusConfig(); + if (statusBarNotificationConfig == null) { + statusBarNotificationConfig = DemoCache.getNotificationConfig(); + UserPreferences.setStatusConfig(statusBarNotificationConfig); + } + // 更新配置 + NIMClient.updateStatusBarNotificationConfig(statusBarNotificationConfig); + + } + + + private void setPolvPlayViewerId() { + String mobile = SharePrefUtil.getString(MainActivity.this, Constant.mobile, ""); + String mobile_encryption = mobile +Url.polvId; + + String mc = null; + try { + mc = AESUtil.Encrypt(mobile_encryption ,"deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// mc = mc.replaceAll("\\+", "A"); +// Log.d("PolyvSDKmc","mc"+mc); +// try { +// mc=URLEncoder.encode(mc,"utf-8"); + SharePrefUtil.saveString(MainActivity.this,Constant.POLVID,mc); + PolyvSDKClient.getInstance().setViewerId(mc); + +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } +// Log.d("PolyvSDKmc",mc); + } + + + private void getIsAccount() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getIsAccount,map,GETISACCOUNT,this); + sendJsonPostParamtoNetSignMD5(Url.getGray,map,222,this); + sendJsonPostParamtoNetSignMD5(Url.checkUser,map,333,this); + + String access_token = SharePrefUtil.getString(MainActivity.this, "access_token", ""); + if(StringUtil.isEmpty(access_token)){ + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this); + } + } + + private void getGray() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getGray,map,222,this); + } + + + private void isMaiLanExpert() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.isMaiLanExpert,map,ISMAILANEXPERT,this); + } + + @Override + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + + } + + // 首次启动,更新 + @SuppressLint("CommitPrefEdits") + private void checkfirstLogin() { + // TODO Auto-generated method stub + SharedPreferences version = getSharedPreferences("version", Context.MODE_PRIVATE); + String lastVersion = version.getString("lastVersion", ""); + String thisVersion = checkVersion(); + + //测试阶段显示引导页 +// iv_yindao1.setVisibility(View.VISIBLE); +// tab_rbn_my = (RadioButton) view.findViewById(R.id.tab_rbn_my); +// iv_yindao1.setOnClickListener(new OnClickListener() { +// @Override +// public void onClick(View v) { +// iv_yindao1.setVisibility(View.GONE); +// if (!isNotificationEnabled(MainActivity.this)){ +// //弹框提示是否打开通知栏 +// openNotification(); +// +// } +// } +// }); + tab_rbn_my = (RadioButton) view.findViewById(R.id.tab_rbn_my); + // 首次启动,更新 + if (TextUtils.isEmpty(lastVersion)||!thisVersion.equals(lastVersion)) { + + SharedPreferences.Editor edit = version.edit(); + edit.putString("lastVersion", thisVersion); + edit.commit(); +// iv_yindao1.setVisibility(View.VISIBLE);签到提醒,暂时隐藏,下个版本开放 + + if (!isNotificationEnabled(MainActivity.this)){ + //弹框提示是否打开通知栏 + openNotification(); + + } + else + { + getGroup(); + } + iv_yindao1.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + iv_yindao1.setVisibility(View.GONE); + if (!isNotificationEnabled(MainActivity.this)){ + //弹框提示是否打开通知栏 + openNotification(); + + }else { + //专家端我的福利模块,消息弹框提醒,版本更新且已经打开通知栏 + getWelfareNotice(); + + } + } + }); + +// SharePrefUtil.saveString(getApplicationContext(),"lastVersion" ,thisVersion); +// iv_yindao1.setVisibility(View.VISIBLE); +// tab_rbn_my = (RadioButton) view.findViewById(R.id.tab_rbn_my); +// iv_yindao1.setOnClickListener(new OnClickListener() { +// +// @Override +// public void onClick(View v) { +// // TODO Auto-generated method stub +// switch (i) { +// case 0: +// iv_yindao1.setBackgroundResource(R.drawable.yindao2); +// i++; +// break; +// case 1: +// i++; +// tab_rbn_my.setChecked(true); +// break; +// case 2: +// iv_yindao1.setVisibility(View.GONE); +// +// break; +// +// } +// } +// }); + + + }else { + //专家端我的福利模块,消息弹框提醒,如果不是版本更新的话直接请求 + getGroup(); +// getWelfareNotice(); + } +// else{ +// if (!isNotificationEnabled(MainActivity.this)){ +// //弹框提示是否打开通知栏 +// boolean aBoolean = SharePrefUtil.getBoolean(MainActivity.this, Constant.isNotification, false); +// if (!aBoolean){ +// openNotification(); +// } +// +// } +// } +// if (!isNotificationEnabled(MainActivity.this)){ +// //弹框提示是否打开通知栏 +// ToastUtil.showMessage("为了您能与患者及时沟通\n请打开肝胆相照专家端通知信息-允许通知-随访消息"); +// openNotification(); +// +// +// } + + + } + + private void getWelfareNotice() { + if(!isSendGetUP) + { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getWelfareNotice,map,GETWELFARENOTICE,this); + } + + } + + /* + * 跳转到渠道设置页 + */ + public void gotoChannelSetting(@NonNull String channelId, @NonNull Context context) { + Intent intent = new Intent(); + intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); + intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); + intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId); +// Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS); +// intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); +// intent.putExtra(Settings.EXTRA_CHANNEL_ID, channelId); + context.startActivity(intent); + } + + /** + * 打开允许通知的设置页 + */ + private void goToNotificationSetting(Context context) { + Intent intent = new Intent(); + if (Build.VERSION.SDK_INT >= 26) { + // android 8.0引导 + gotoChannelSetting("随访消息",MainActivity.this); +// intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); +// //这种方案适用于 API 26, 即8.0(含8.0)以上可以用 +// intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName()); +// intent.putExtra(Settings.EXTRA_CHANNEL_ID, context.getApplicationInfo().uid); +// //这种方案适用于 API21——25,即 5.0——7.1 之间的版本可以使用 +// intent.putExtra("app_package", context.getPackageName()); +// intent.putExtra("app_uid", context.getApplicationInfo().uid); +// + } else if (Build.VERSION.SDK_INT >= 21) { + // android 5.0-7.0 + intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); + intent.putExtra("app_package", context.getPackageName()); + intent.putExtra("app_uid", context.getApplicationInfo().uid); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } else { + // 其他 + intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); + intent.setData(Uri.fromParts("package", context.getPackageName(), null)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } + + } + + private void openNotification(){ + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + dialog3 = new AlertDialog.Builder( + MainActivity.this).create(); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + + dialog3.show(); + Window window =dialog3.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog3.getWindow().getDecorView()); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + SharePrefUtil.saveBoolean(MainActivity.this,Constant.isNotification,true);//点击取消说明用户不想用通知栏 + dialog3.dismiss(); + getGroup(); + //专家端我的福利模块,消息弹框提醒,版本更新且不打开通知栏 +// getWelfareNotice(); + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + SharePrefUtil.saveBoolean(MainActivity.this,Constant.isNotification,true);//点击确定说明用户想用通知栏,但不保证用户真正打开通知栏 + dialog3.dismiss(); + toSetting(); + getGroup(); + //专家端我的福利模块,消息弹框提醒,版本更新且跳转设置通知界面后 +// getWelfareNotice(); + } + }); + } + + @SuppressLint("WrongConstant") + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + private boolean isNotificationEnabled(Context context) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + //8.0手机以上 + if (((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).getImportance() == NotificationManager.IMPORTANCE_NONE) { + + + return false; + } + } + + String CHECK_OP_NO_THROW = "checkOpNoThrow"; + String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; + + AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE); + ApplicationInfo appInfo = context.getApplicationInfo(); + String pkg = context.getApplicationContext().getPackageName(); + int uid = appInfo.uid; + + Class appOpsClass = null; + + try { + appOpsClass = Class.forName(AppOpsManager.class.getName()); + Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, + String.class); + Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); + + int value = (Integer) opPostNotificationValue.get(Integer.class); + return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); + + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + private void toSetting() { + goToNotificationSetting(MainActivity.this); + + } + /** + * 获取当前版本versionName + * + * @return + */ + private String getAppInfo() { + try { + SharePrefUtil.saveString(ct, "version", BuildConfig.VERSION_NAME); + } catch (Exception e) { + } + return null; + } + private String checkVersion() { + String versionCode = BuildConfig.VERSION_NAME; + return versionCode; + } + + // 是不是第一次使用 + private boolean isFirstUse() { + + return false; + } + + // 检查是否第一次使用 + private void checkFirstUse() { + boolean firstUse = isFirstUse(); + + if (firstUse) { + + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_FIRST_USE, Boolean.FALSE, + true); + } catch (Exception e) { + /** NON BLOCK **/ + } + } + } + + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + + auto_show_unimp = true; + /** 改变文字的颜色 */ + if (badgeSysMsg != null) { + badgeSysMsg.hide(); + } + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_news) { + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mRg_kepu.setVisibility(View.GONE); + mV_kp.setVisibility(View.GONE); + top_sgin.setVisibility(View.GONE); + mToolbar.getBackground().setAlpha(255); + MobclickAgent.onEvent(this, EXPERT_TAB_EDUCATION); + +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation1), null, null); +// +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_nor), null, null); +// +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_nor), null, null); +// +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_nor), null, null); + + + + changeNews(); + } else if (checkedId == R.id.tab_rbn_kepu) { + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mToolbar.getBackground().setAlpha(255); + mRg_kepu.setVisibility(View.VISIBLE); + mV_kp.setVisibility(View.VISIBLE); + mRb_published.setChecked(true); + top_sgin.setVisibility(View.GONE); + MobclickAgent.onEvent(this, EXPERT_TAB_TEACH); + +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_sel), null, null); +// +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_nor), null, null); +// +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation), null, null); +// +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_nor), null, null); + + changePatientZhongxin(); + } else if (checkedId == R.id.tab_rbn_home) { + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mRg_kepu.setVisibility(View.GONE); + mV_kp.setVisibility(View.GONE); + MobclickAgent.onEvent(this, EXPERT_TAB_HOME); + + +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_sel), null, null); +// +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_nor), null, null); +// +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation), null, null); +// +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_nor), null, null); + + changeHome(); + } else if (checkedId == R.id.tab_rbn_donation) { +// mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); +// mToolbar.getBackground().setAlpha(255); +// top_sgin.setVisibility(View.GONE); +// mRg_kepu.setVisibility(View.GONE); +// mV_kp.setVisibility(View.GONE); +// changeDonation(); + + MobclickAgent.onEvent(this, EXPERT_TAB_MEETING); + + + // 设置固定文字颜色和图标,点击时不改变 + mRb_meeting.setTextColor(getResources().getColor(R.color.tab_text_nor)); + // 设置固定图标(使用未选中状态的图标) + mRb_meeting.setCompoundDrawablesWithIntrinsicBounds(null, + getResources().getDrawable(R.drawable.home_my_meeting_nor), null, null); + + mRb_meeting.setChecked(false); + +// if(current_tab_id == R.id.tab_rbn_home){ +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_sel), null, null); +// +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_nor), null, null); +// +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation), null, null); +// +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_nor), null, null); +// }else if(current_tab_id == R.id.tab_rbn_kepu){ +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_sel), null, null); +// +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_nor), null, null); +// +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation), null, null); +// +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_nor), null, null); +// +// }else if(current_tab_id == R.id.tab_rbn_news){ +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation1), null, null); +// +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_nor), null, null); +// +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_nor), null, null); +// +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_nor), null, null); +// }else if(current_tab_id == R.id.tab_rbn_my){ +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_sel), null, null); +// +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation), null, null); +// +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_nor), null, null); +// +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_nor), null, null); +// }else{ +// //没有用 +// } + + showUniMp(true); + + } else if (checkedId == R.id.tab_rbn_my) { + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + mToolbar.getBackground().setAlpha(255); + top_sgin.setVisibility(View.GONE); + mRg_kepu.setVisibility(View.GONE); + mV_kp.setVisibility(View.GONE); + MobclickAgent.onEvent(this, EXPERT_TAB_MY); + +// tab_rbn_my.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// tab_rbn_my.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_my_sel), null, null); +// +// mRb_news.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_news.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.keepeducation), null, null); +// +// mRb_teach.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_teach.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_kepu_nor), null, null); +// +// mRb_home.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// mRb_home.setCompoundDrawablesWithIntrinsicBounds(null, +// getResources().getDrawable(R.drawable.home_nor), null, null); + changeMy(); +// if (iv_yindao1!=null) { +// iv_yindao1.setBackgroundResource(R.drawable.yindao3); +// } + } + + + + current_tab_id = checkedId; + } + + OnCheckedChangeListener mKPCheckListener = new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_published) { + changeKepuPublished(); + } else if (checkedId == R.id.tab_rbn_publishing) { + changeKepuPublishing(); + } else if (checkedId == R.id.tab_rbn_zhongxin) { + changePatientZhongxin(); + } + } + }; + + //展示uniapp mp + private void showUniMp(boolean showLoading){ + if(showLoading){ + showFullScreenLoading(); + } + + try { + String uuid = SharePrefUtil.getString(MainActivity.this, Constant.uuid, ""); + if(StringUtil.isEmpty(uuid)){ + return; + } + String access_token = SharePrefUtil.getString(MainActivity.this, "access_token", ""); + if(StringUtil.isEmpty(access_token)){ + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(getAccessToken, param, ACCESS_TOKEN,this); + access_token = SharePrefUtil.getString(MainActivity.this, "access_token", ""); + } + + JSONObject userInfo = new JSONObject(); + userInfo.put("uuid", SharePrefUtil.getString(MainActivity.this, Constant.uuid, "")); + userInfo.put("realName", SharePrefUtil.getString(MainActivity.this, Constant.realName, "")); + userInfo.put("mobile", SharePrefUtil.getString(MainActivity.this, "mobile", "")); + userInfo.put("photo", SharePrefUtil.getString(MainActivity.this, Constant.photo, "")); + + UniMPOpenConfiguration uniMPOpenConfiguration = new UniMPOpenConfiguration(); + uniMPOpenConfiguration.splashClass = UniappSplashView.class; +// uniMPOpenConfiguration.path= "pages/live/live"; + uniMPOpenConfiguration.extraData.put("darkmode", "light"); + uniMPOpenConfiguration.extraData.put("token", access_token); + uniMPOpenConfiguration.extraData.put("userInfo", userInfo); + uniMPOpenConfiguration.extraData.put("targetPath", "/pages/live/live"); + IUniMP uniapp_MP = DCUniMPSDK.getInstance().openUniMP(mContext, uniapp_mp_appid, uniMPOpenConfiguration); + BaseApplication.getUniMPCaches().put(uniapp_MP.getAppid(), uniapp_MP); + + if(showLoading) { + hideFullScreenLoading(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + // 我的 + private void changeMy() { +// p.setMargins(0, titleBarParams.height, 0, 0); +// layout.requestLayout(); + top_title.setText("我的"); + top_title.setVisibility(View.VISIBLE); + top_sao.setVisibility(View.VISIBLE); + top_search.setVisibility(View.GONE); + top_right_text.setVisibility(View.GONE); + top_right_search.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + top_right_system_msg.setVisibility(View.GONE); + top_sao.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(MainActivity.this, BeginBigActivity.class); + startActivity(intent); + +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// +// if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 +// startToCapture(); +// } else { +// PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() { +// @Override +// public void permissionGranted(@NonNull String[] permissions) { +// //用户授予了访问读取短信的权限 +// startToCapture(); +// } +// @Override +// public void permissionDenied(@NonNull String[] permissions) { +// //用户拒绝了访问读取短信的申请 +// +// } +// +// }, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); +// } +// +// }else { +// startToCapture(); +// } + } + }); +// MyFragment myFragment = new MyFragment(); +// fm.beginTransaction() +// .replace(R.id.frame_container, myFragment, "my_fragment") +// .commitAllowingStateLoss(); + MyNewFragment myFragment = new MyNewFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myFragment, "my_fragment") + .commitAllowingStateLoss(); + } + + // 肝胆会议 + public void changeDonation() { +// p.setMargins(0, titleBarParams.height, 0, 0); +// layout.requestLayout(); + top_title.setText("肝胆会议"); + top_sao.setVisibility(View.GONE); + top_title.setVisibility(View.VISIBLE); + top_right_search.setVisibility(View.GONE); + top_search.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + top_right_text.setVisibility(View.VISIBLE); +// top_right_text.setText("回放"); + top_right_text.setText("扫一扫"); + top_right_text.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub +// Intent intent = new Intent(ct, HistoryActivity.class); +// intent.putExtra("title",getResources().getString(R.string.gandanhuifang)); +// startActivity(intent); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// + if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + startToCapture(); + } else { + EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog).show(); + PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问读取短信的权限 + startToCapture(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读取短信的申请 + EasyWindow.cancelAll(); + } + + }, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + startToCapture(); + } + + } + }); + top_right_system_msg.setVisibility(View.GONE); + MeetingFragment loveFragment = new MeetingFragment(); + fm.beginTransaction().replace(R.id.frame_container, loveFragment, "love_fragment") + .commitAllowingStateLoss(); + + } + + // 肝胆新闻--》继续教育 + private void changeNews() { +// p.setMargins(0,titleBarParams.height, 0, 0); +// layout.requestLayout(); + top_title.setText("继续教育"); + top_sao.setVisibility(View.GONE); + top_title.setVisibility(View.VISIBLE); + top_search.setVisibility(View.GONE); + top_right_text.setVisibility(View.GONE); + top_right_search.setVisibility(View.GONE); + top_right_system_msg.setVisibility(View.GONE); + KeepEducationFragment newsFragment = new KeepEducationFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, newsFragment, "news_fragment") + .commitAllowingStateLoss(); + +// layout_top.setBackgroundColor(mMainActivity.getResources().getColor( +// R.color.top_bg)); +// p.setMargins(0, CommonUtil.dip2px(ct, 50), 0, 0); +// layout.requestLayout(); +// top_title.setText("肝胆资讯"); +// top_title.setVisibility(View.VISIBLE); +// top_search.setVisibility(View.GONE); +// top_right_text.setVisibility(View.GONE); +// top_right_search.setVisibility(View.GONE); +// top_right.setImageResource(R.drawable.search); +// top_right.setVisibility(View.VISIBLE); +// top_right_system_msg.setVisibility(View.GONE); +// NewsFragment newsFragment = new NewsFragment(); +// fm.beginTransaction() +// .replace(R.id.frame_container, newsFragment, "news_fragment") +// .commitAllowingStateLoss(); +// top_right.setOnClickListener(new OnClickListener() { +// +// @Override +// public void onClick(View v) { +// Intent intent = new Intent(ct, PublicSearchActivity.class); +// intent.setType("news"); +// startActivity(intent); +// } +// }); + } + + // 我讲科普已发布 + private void changeKepuPublished() { +// p.setMargins(0,titleBarParams.height, 0, 0); +// layout.requestLayout(); + top_title.setText("患教学堂"); + top_title.setVisibility(View.VISIBLE); + top_sao.setVisibility(View.GONE); + top_search.setVisibility(View.GONE); + top_right.setImageResource(R.drawable.icon_contributing); + top_right.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_right_system_msg.setVisibility(View.GONE); +// KepuPublishedFragment kepuFragment = new KepuPublishedFragment(); +// fm.beginTransaction() +// .replace(R.id.frame_container, kepuFragment, +// "kepu_published_fragment").commitAllowingStateLoss(); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(ct, NewContributingActivity.class); + intent.setType("code"); + startActivityForResult(intent, Constant.CONTRIBUTE_CODE); + } + }); + + } + + // 患教学堂 + private void changePatientZhongxin() { +// layout_top.setBackgroundColor(mMainActivity.getResources().getColor( +// R.color.top_bg)); +// p.setMargins(0, titleBarParams.height, 0, 0); +// layout.requestLayout(); + top_title.setText("患教学堂"); + top_title.setVisibility(View.VISIBLE); + top_sao.setVisibility(View.GONE); + top_search.setVisibility(View.GONE); + top_right.setImageResource(R.drawable.icon_contributing); + top_right.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_right_system_msg.setVisibility(View.GONE); + PatientTeachFragment kepuFragment = new PatientTeachFragment(); + fm.beginTransaction().replace(R.id.frame_container, kepuFragment, + "kepu_patientt_fragment").commitAllowingStateLoss(); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(ct, NewContributingActivity.class); + intent.setType("code3"); + startActivityForResult(intent, Constant.CONTRIBUTE_CODE); + } + }); + } + + // 我讲科普待发布 + private void changeKepuPublishing() { +// layout_top.setBackgroundColor(mMainActivity.getResources().getColor( +// R.color.top_bg)); +// p.setMargins(0,titleBarParams.height, 0, 0); +// layout.requestLayout(); + top_title.setText("患教学堂"); + top_title.setVisibility(View.VISIBLE); + top_search.setVisibility(View.GONE); + top_right.setImageResource(R.drawable.icon_contributing); + top_right.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_sao.setVisibility(View.GONE); + top_right_system_msg.setVisibility(View.GONE); + //常见问题 +// ChangjianQuestionFragment kepuFragment = new ChangjianQuestionFragment(); +// fm.beginTransaction().replace(R.id.frame_container, kepuFragment, +// "kepu_publishing_fragment").commitAllowingStateLoss(); + KePuPublisheingFragment kepuFragment = new KePuPublisheingFragment(); + fm.beginTransaction().replace(R.id.frame_container, kepuFragment, + "kepu_publishing_fragment").commitAllowingStateLoss(); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(ct, NewContributingActivity.class); + intent.setType("code2"); + startActivityForResult(intent, Constant.CONTRIBUTE_CODE2); + } + }); + } + private ECAlertDialog dilaog2; + private CustomProgressDialog pd; + // 首页 + @SuppressLint("ResourceAsColor") + private void changeHome() { + +// layout_top.setBackgroundColor(mMainActivity.getResources().getColor( +// R.color.top_title2)); +// layout_top.setBackgroundColor(mMainActivity.getResources().getColor( +// R.color.transparent)); +// ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) layout.getLayoutParams(); +// p.setMargins(0, 0, 0, 0); +// layout.requestLayout(); + // String name = SharePrefUtil.getString(ct, Constant.realName, ""); + // if (!TextUtils.isEmpty(name) && !"null".equals(name)) { + // if (name.length() >= 6) { + // top_title.setText(name); + // } else { + // top_title.setText(name + "专家工作室"); + // } + // } else { + // top_title.setText("首页"); + // } +// top_back_layout.setVisibility(View.VISIBLE); + top_sgin.setVisibility(View.VISIBLE); + top_back.setVisibility(View.GONE); + top_back_layout.setOnClickListener(new OnClickListener() { + + + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if(HomeNewFragment.ismodalshow) + { + return; + } + + if (isSign) { + MobclickAgent.onEvent(MainActivity.this, StaUtil.EXPERT_HOME_SIGN_IN_AGAIN); + dilaog2 = ECAlertDialog.buildAlert(MainActivity.this, + "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + GrayManager.getInstance().setLayerGrayType(dilaog2.getWindow().getDecorView()); + dilaog2.show(); + }else{ + MobclickAgent.onEvent(MainActivity.this, EXPERT_HOME_SIGN_IN); + pd = new CustomProgressDialog(MainActivity.this, "请稍候"); + pd.show(); + + Map param = new HashMap<>(); + param.put("score_type","1"); +// param.put("debug","true");//测试签到成功返回数据 + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, MainActivity.this); + } +// Map param = new HashMap<>(); +// param.put("score_type","1"); +// param.put("debug","true");//测试签到成功返回数据 +// sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, MainActivity.this); + } + }); + + top_right_text.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + top_right_search.setVisibility(View.GONE); + top_right_system_msg.setVisibility(View.VISIBLE); + top_right_system_msg.setImageResource(R.drawable.my_message_icon); + top_sao.setVisibility(View.GONE); + top_search.setVisibility(View.VISIBLE); + top_search.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if(HomeNewFragment.ismodalshow) + { + return; + } + // TODO Auto-generated method stub + Intent intentv = new Intent(mMainActivity, + PublicSearchActivity.class); + intentv.setType("video"); + startActivity(intentv); + + } + }); + +// +// HomeFragment homeFragment = new HomeFragment(); +// fm.beginTransaction() +// .replace(R.id.frame_container, homeFragment, "home_fragment") +// .commitAllowingStateLoss(); +// onCallBackFromActivity=homeFragment; + + + HomeNewFragment homeFragment = new HomeNewFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, homeFragment, "home_fragment") + .commitAllowingStateLoss(); + onCallBackFromActivity=homeFragment; + + + // 红点提示 + badgeSysMsg = new BadgeView(ct, top_right_system_msg); +// badgeSysMsg.setBackgroundResource(R.drawable.unreadwi_dot); + badgeSysMsg.setBackgroundResource(R.drawable.unread_1dot); + // badgeSysMsg.setBadgeMargin(10, 10); + badgeSysMsg.setBadgeMargin(10); + if (SharePrefUtil.getBoolean(ct, "isHaveSysMsg", false)) { + badgeSysMsg.show(); + } else { + badgeSysMsg.hide(); + } + top_right_system_msg.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if(HomeNewFragment.ismodalshow) + { + return; + } + needreportSimple("read_message"); + MobclickAgent.onEvent(MainActivity.this, EXPERT_HOME_MESSGAE); + startActivity(new Intent(ct, NewSystemMessageActivity.class)); + +// startActivity(new Intent(ct, SystemMessageActivity.class)); +// SharePrefUtil.saveBoolean(ct, "isHaveSysMsg", false); +// if (badgeSysMsg != null) { +// badgeSysMsg.hide(); +// } + } + }); + + } + + /** + * show unread red showSysMsg + * + * void + */ + public void showSysMsg() { + if (badgeSysMsg != null + && top_right_system_msg.getVisibility() == View.VISIBLE) { + badgeSysMsg.show(); + + } + } + + @Override + protected void processClick(View v) { + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + + if (keyCode == KeyEvent.KEYCODE_HOME) { + doTaskToBackEvent(); + } + return super.onKeyDown(keyCode, event); + } + + /** + * 返回隐藏到后台 + */ + public void doTaskToBackEvent() { + moveTaskToBack(true); + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(mMainActivity, 4); + } + + @Override + public void onBackPressed() { +// super.onBackPressed(); + doTaskToBackEvent(); + Intent i= new Intent(Intent.ACTION_MAIN); + i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + i.addCategory(Intent.CATEGORY_HOME); + startActivity(i); + } + + // 点击通知栏消息进入此 + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + Intent actionIntent = intent; + boolean isSystem = actionIntent.getBooleanExtra("Main_isSystem", false); + String userName = actionIntent.getStringExtra("Main_FromUserName"); + String mSession = actionIntent.getStringExtra("Main_Session"); + String patientUuid = actionIntent.getStringExtra("Main_patientUuid"); + String msgDomin = actionIntent.getStringExtra("Main_msgDomin"); + String userData = actionIntent.getStringExtra("Main_userData"); + String nofification_type = actionIntent.getStringExtra("nofification_type"); + // 如果容联推送的离线登录 + if (Constant.NOFIFICATION_TYPE.equals(nofification_type)) { + return; + } + + // 如果是系统推送,则跳转到系统消息页面 + if (isSystem) { + + startActivity(new Intent(ct, NewSystemMessageActivity.class)); + return; + } + + ECContacts contacts = ContactSqlManager.getContactLikeUsername(userName); + // PatientModel contacts = + // PatientSqlManager.getPatientInfo(patientUuid); + String contactid; + if (contacts != null) { + + contactid = contacts.getContactid(); + } else { + contactid = userName; + } + if (!StringUtil.isEmpty(msgDomin)) { + String[] stryArray = msgDomin.split(","); + String article_type = null; + String article_uuid = null; + if (stryArray.length > 1) { + article_type = stryArray[0]; + article_uuid = stryArray[1]; + } + if (article_type.equals("4")) { + Intent Caseintent = new Intent(mMainActivity, + CaseCussionDetailActivity.class); + Caseintent.putExtra("uuid", article_uuid); + mMainActivity.startActivity(Caseintent); + return; + } else if (article_type.equals("3")) { + Intent Houseintent = new Intent(mMainActivity, + GanDanHouseDetialActivity.class); + Houseintent.putExtra("uuid", article_uuid); + mMainActivity.startActivity(Houseintent); + return; + } + + } + if (GroupNoticeSqlManager.CONTACT_ID.equals(contactid)) { + Intent noticeintent = new Intent(this, GroupNoticeActivity.class); + startActivity(noticeintent); + return; + } + + Intent chatIntent = new Intent(this, ChattingActivity.class); + String recipinets; + String username; + + recipinets = patientUuid; + // username = contacts.getNickname(); + username = userName; + + startActivity(chatIntent); + + if (username == null || patientUuid == null) { +// ECNotificationManager.getInstance().forceCancelNotification(); + startActivity(new Intent(ct, NewSystemMessageActivity.class)); + return; + } + CCPAppManager.startChattingAction(this, recipinets, username, userData, + patientUuid, 0); + return; + + } + + @Override + protected void onDestroy() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + super.onDestroy(); + if (internalReceiver != null) { + unregisterReceiver(internalReceiver); + } + //注销本地接收器 + if(localReceiver!=null) + { + localBroadcastManager.unregisterReceiver(localReceiver); + } + + registerSystemObserver(false); + + unreadFollow=0; + + } + + private InternalReceiver internalReceiver; + private ECAlertDialog buildAlert; + + /** + * 注册广播 + * + * @param actionArray + */ + protected final void registerReceiver(String[] actionArray) { + if (actionArray == null) { + return; + } + IntentFilter intentfilter = new IntentFilter(); + for (String action : actionArray) { + intentfilter.addAction(action); + } + if (internalReceiver == null) { + internalReceiver = new InternalReceiver(); + } + +// registerReceiver(internalReceiver, intentfilter); + + if (Build.VERSION.SDK_INT >= 33) { + registerReceiver(internalReceiver, intentfilter, Context.RECEIVER_NOT_EXPORTED); + } else { + registerReceiver(internalReceiver, intentfilter); + } + } + + private class InternalReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + + if (intent == null || TextUtils.isEmpty(intent.getAction())) { + return; + } + /** + * 2018.10.18改 + * */ + if (IMChattingHelper.INTENT_ACTION_SYNC_MESSAGE.equals(intent.getAction())) { + } else if (SDKCoreHelper.ACTION_SDK_CONNECT.equals(intent.getAction())) { + + } else if (SDKCoreHelper.ACTION_KICK_OFF.equals(intent.getAction())) { + //2018.12.13 单聊无状态栏通知修改(是否影响单点登陆) + String kickoffText = intent.getStringExtra("kickoffText"); + handlerKickOff(kickoffText); + } + } + } + + // 异地登陆监听 + public void handlerKickOff(String kickoffText) { + if (isFinishing()) { + return; + } + buildAlert = ECAlertDialog.buildAlert(this, kickoffText, + getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + restartAPP(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + + // 注销账号,清除该账号的所有文件, + DataCleanManager.cleanApplicationData(ct); + } + + // 重启app + public void restartAPP() { + LogUtil.i("重启app"); + if (buildAlert.isShowing()) { + buildAlert.dismiss(); + } + // 注销账号,清除该账号的所有文件, + DataCleanManager.cleanApplicationData(ct); + + Intent intent = new Intent(this, LoginNewActivity.class); + + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + @Override + protected void onResume() { + + LogUtil.i("onResume: ", current_tab_id+""); + if(current_tab_id == R.id.tab_rbn_donation && auto_show_unimp){ + showUniMp(true); + } + super.onResume(); + ShowMagazine(); + if(!needshowGuideView()&&order>0) + { + getGroup(); + } + + // 是否完全退出APP + boolean fullExit = ECPreferences.getSharedPreferences().getBoolean( + ECPreferenceSettings.SETTINGS_FULLY_EXIT.getId(), false); + if (fullExit) { + + + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(mMainActivity, 2); + finish(); + android.os.Process.killProcess(android.os.Process.myPid()); + return; + + } + + String account = getAutoRegistAccount(); + + /** + * 2018.10.18改 + * */ + // 注册第一次登陆同步消息 + registerReceiver(new String[] {IMChattingHelper.INTENT_ACTION_SYNC_MESSAGE, + SDKCoreHelper.ACTION_SDK_CONNECT }); + + /**退出账号会重新加载此页面,有时判断是*/ + if (TextUtils.isEmpty(account)) { + if (Constant.islogout == 1){ + // 注销账号,清除该账号的所有文件, + DataCleanManager.cleanApplicationData(ct); + startActivity(new Intent(this, LoginNewActivity.class)); + finish(); + return; + } + + } + + // 统计未读消息 + // OnUpdateMsgUnreadCounts(); + // 后面放消息红点,应放在我的患者的,进口出,显示红点,或者底部导航 + /* + * if (iv_new_message != null) { if(count == 0) { // + * tv_new_message_count.setVisibility(View.GONE); + * iv_new_message.setVisibility(View.GONE); } else { // + * tv_new_message_count.setText(msgCount); // + * tv_new_message_count.setVisibility(View.VISIBLE); + * iv_new_message.setVisibility(View.VISIBLE); } } + */ + + } + + /** + * 检查是否需要自动登录 + * + * @return + */ + private String getAutoRegistAccount() { + SharedPreferences sharedPreferences = ECPreferences.getSharedPreferences(); + ECPreferenceSettings registAuto = ECPreferenceSettings.SETTINGS_REGIST_AUTO; + String registAccount = sharedPreferences.getString(registAuto.getId(),(String) registAuto.getDefaultValue()); + return registAccount; + } + + /** + * 统计未读消息数 OnUpdateMsgUnreadCounts + * + * void + */ + public void OnUpdateMsgUnreadCounts() { + int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); + int notifyUnreadCount = IMessageSqlManager.getUnNotifyUnreadCount(); +// int consultUnreadCount = IMessageSqlManager +// .getUnByTypeUnreadCount(Constant.typeConsult); +// int patientUnreadCount = IMessageSqlManager +// .getUnByTypeUnreadCount(Constant.typePatient); + count = unreadCount; + if (unreadCount >= notifyUnreadCount) { + count = unreadCount - notifyUnreadCount; + } + + // String msgCount = count > 100 ? "..." : String.valueOf(count); + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == RESULT_OK) { + + if (requestCode == Constant.CONTRIBUTE_CODE) { +// tab_rbn_publishing.setChecked(true); + } else if (requestCode == Constant.CONTRIBUTE_CODE2) { +// tab_rbn_publishing.setChecked(true); +// onKepuPublishingRefresh(Url.getpolularScienceArticleListIsNotisThroughNew); + } else if (requestCode == Constant.DONATE_CODE) { + // onRefresh(Url.getLoveList); + } else if (requestCode == Constant.INFO_CODE) { + String photo = data.getStringExtra("photo"); + } + } + if (resultCode == RESULT_OK && requestCode == 10086){ + SharePrefUtil.saveString(MainActivity.this, "newVersion", + newVewsion); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } else { + EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } + + }else if(resultCode == 0 && requestCode == 10086){ + ToastUtil.showMessage("请允许来自此来源的应用安装"); + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onKepuRefresh(String url) { + KepuPublishedFragment kepu = (KepuPublishedFragment) getSupportFragmentManager() + .findFragmentByTag("kepu_published_fragment"); + kepu.getScienceList(url); + } + + @Override + public void onKepuPublishingRefresh(String url) { + // TODO Auto-generated method stub + KePuPublisheingFragment kepu = (KePuPublisheingFragment) getSupportFragmentManager() + .findFragmentByTag("kepu_publishing_fragment"); + kepu.page = 1; + kepu.getScienceList(url); + } + + String newVewsion, dowmLoadPath; + String versionName; + + public void getGroup() { + versionName = UpdateVersionUtils.getVersionName(); + Map param = new HashMap(); +// param.put("currVer", "1"); +// param.put("appType", String.valueOf(1)); +// sendParamtoNet(Url.getUpdateApk, param, 101, MainActivity.this, true); + sendJsonPostParamtoNetSignMD5(checkVersion,param,101,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + + + } + + private boolean isServiceRunning() { + ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + for (RunningServiceInfo service : manager + .getRunningServices(Integer.MAX_VALUE)) { + if ("cn.shangyu.gdxzExpert.service.UpdateService" + .equals(service.service.getClassName())) { + return true; + } + } + return false; + } + + private Dialog dialog; + private AddBonusPointsSuccessBean addBonusPointsBean; + private LocalBroadcastManager localBroadcastManager; + private HomeModalBean homeModalBean; + + protected void showUpDateDialog(String version_meaasge, + final String newVersion, final boolean forceUpdate, final boolean force) { + // TODO Auto-generated method stub + // if (!SharePrefUtil.getString(MainActivity.this, "newVersion", "") + // .equals("true")) { + // 1. 布局文件转换View对象 + this.newVewsion = newVersion; + LayoutInflater inflater = LayoutInflater.from(MainActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate( + R.layout.dialog_update_version, null); + // 2. 新建对话框对象 + dialog = new AlertDialog.Builder(MainActivity.this, + R.style.Dialog_Fullscreen).create(); + dialog.setCancelable(false); + dialog.show(); + dialog.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog.getWindow().getDecorView()); + // 3. 消息内容 + ImageView img_del = (ImageView) layout.findViewById(R.id.iv_dialog_del);// 取消本次更新 + TextView btn_ignore = (TextView) layout.findViewById(R.id.btn_ignore);// 忽略 + TextView btn_update = (TextView) layout.findViewById(R.id.btn_update);// 更新 + if(force) + { + btn_ignore.setVisibility(View.GONE); + btn_update.setText("退出"); + + } + else if (forceUpdate) { + btn_ignore.setVisibility(View.GONE); + btn_update.setText("立即更新"); + } + TextView tv_update_info = (TextView) layout + .findViewById(R.id.tv_update_info);// 更新内容 + tv_update_info.setText(Html.fromHtml(version_meaasge+"")); + + btn_ignore.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + SharePrefUtil.saveString(MainActivity.this, "newVersion", + newVersion); + dialog.dismiss(); + } + }); + btn_update.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if(force) + { + handleLogout(); + } + if (isServiceRunning()) { + ToastUtil.showMessage("后台正在更新"); + return; + } + dialog.dismiss(); + isneedupdatewindow=false; + // 启动服务 + if (Build.VERSION.SDK_INT>26){ + boolean b = getPackageManager().canRequestPackageInstalls(); + if (b){ + SharePrefUtil.saveString(MainActivity.this, "newVersion", + newVersion); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } else { + EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } +// intent = new Intent(MainActivity.this, UpdateService.class); +// intent.putExtra("newVersion", newVewsion); +// intent.putExtra("oldVersion", versionName); +// intent.putExtra("titleId", R.string.app_name); +// intent.putExtra("url", dowmLoadPath); +// ToastUtil.showMessage("开始后台下载"); +// MainActivity.this.startService(intent); + }else { +// 请求安装未知应用来源的权限   + + Uri packageURI = Uri.parse("package:" + getPackageName()); + Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); + startActivityForResult(intent, 10086); + } + }else { + SharePrefUtil.saveString(MainActivity.this, "newVersion", + newVersion); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } else { + EasyWindow.with(MainActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(MainActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + intent = new Intent(MainActivity.this, UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + ToastUtil.showMessage("开始后台下载"); + MainActivity.this.startService(intent); + } +// intent = new Intent(MainActivity.this, UpdateService.class); +// intent.putExtra("newVersion", newVewsion); +// intent.putExtra("oldVersion", versionName); +// intent.putExtra("titleId", R.string.app_name); +// intent.putExtra("url", dowmLoadPath); +// ToastUtil.showMessage("开始后台下载"); +// MainActivity.this.startService(intent); + } + + + } + }); + img_del.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + if (forceUpdate||force) { + handleLogout(); + } + } + }); + dialog.setOnKeyListener(new OnKeyListener() { + + @Override + public boolean onKey(DialogInterface dialog, int keyCode, + KeyEvent event) { + // TODO Auto-generated method stub + if (keyCode == KeyEvent.KEYCODE_BACK + && event.getAction() == KeyEvent.ACTION_UP) { + if (forceUpdate) { + handleLogout(); + } + } + return false; + } + }); + + } + + + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + + String int2 = intent.getStringExtra("issign"); + if ("1".equals(int2)) { + top_sgin.setImageResource(R.drawable.homesign_true); + isSign = true; + Constant.isSignIn = isSign; + }else{ + top_sgin.setImageResource(R.drawable.homesign_false); + isSign = false; + Constant.isSignIn = isSign; + } + } + } + + /** + * 处理退出操作 + */ + private void handleLogout() { + if (isServiceRunning() && intent != null) { + stopService(intent); + } + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_FULLY_EXIT, false, true); + + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(mMainActivity, 2); + + finish(); + android.os.Process.killProcess(android.os.Process.myPid()); + return; + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + @Override + protected void onStop() { + // TODO Auto-generated method stub + super.onStop(); + + } + + private void showSignInDailog() { + // TODO Auto-generated method stub +// final AlertDialog dialog = new AlertDialog.Builder(this, R.style.Theme_Transparent).create(); +// View view = View.inflate(this, R.layout.dailog_signin, null); +// Window window = dialog.getWindow(); +// dialog.show(); +// window.setContentView(view); +// WindowManager.LayoutParams params = window.getAttributes(); +// params.width = WindowManager.LayoutParams.MATCH_PARENT;//如果不设置,可能部分机型出现左右有空隙,也就是产生margin的感觉 +// //设置窗口高度为包裹内容 +// params.height = WindowManager.LayoutParams.MATCH_PARENT; +// params.flags = WindowManager.LayoutParams.FLAG_DIM_BEHIND;//就是这个属性导致window后所有的东西都成暗淡 +// params.dimAmount = 0.5f;//设置对话框的透明程度背景(非布局的透明度) +// window.setAttributes(params); + +// AlertDialog.Builder builder = new AlertDialog.Builder( +// new ContextThemeWrapper(this, R.style.Theme_Transparent)); +//// AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.Theme_Transparent))); +// final AlertDialog dialog = builder.create(); +// View view = View.inflate(this, R.layout.dailog_signin, null); +// dialog.setView(view, 0, 0, 0, 0); + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_signin, null); + TextView tv_gdxzday = (TextView) layout.findViewById(R.id.tv_gdxzday); + TextView tv_totalDay = (TextView) layout.findViewById(R.id.tv_totalDay); + TextView tv_continuous_day = (TextView) layout.findViewById(R.id.tv_continuous_day); + TextView tv_contenttext = (TextView) layout.findViewById(R.id.tv_text1); + ImageView iv_close = (ImageView) layout.findViewById(R.id.iv_close); + tv_gdxzday.setText("今天是我们相识的第"+addBonusPointsBean.getGdxzday()+"天"); + tv_totalDay.setText(addBonusPointsBean.getTotalDay()+""); + tv_continuous_day.setText(addBonusPointsBean.getContinuous_day()+""); + tv_contenttext.setText(addBonusPointsBean.getQuestionAndAnswer().getTitle()); + + final Dialog dialog = new AlertDialog.Builder( + MainActivity.this).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); + GrayManager.getInstance().setLayerGrayType(dialog.getWindow().getDecorView()); + iv_close.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + tv_contenttext.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + MobclickAgent.onEvent(MainActivity.this, EXPERT_HOME_SIGN_IN_ALERT_NEWS); + // TODO Auto-generated method stub + Intent broadc = new Intent(MainActivity.this, NewsDetailActivity.class); + broadc.putExtra("url", Url.urlHtml+addBonusPointsBean.getQuestionAndAnswer().getPath()); + broadc.putExtra("newsTitle",addBonusPointsBean.getQuestionAndAnswer().getTitle()); + broadc.putExtra("summary", addBonusPointsBean.getQuestionAndAnswer().getSummary()); + broadc.putExtra("title", "新闻详情"); + broadc.putExtra("flag", 1); + startActivity(broadc); + dialog.dismiss(); + } + }); + + } + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 333: + JSONObject jsonObject112 = null; + + try { + jsonObject112 = new JSONObject(resultJson); + if ("200".equals(jsonObject112.optString("code"))&&!jsonObject112.isNull("data")) { + + SharePrefUtil.saveString(MainActivity.this, "hcp_token",jsonObject112.optJSONObject("data").optString("hcp_token")); + + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + + case 1122: + Log.d("okhttp",1122+resultJson); + JSONObject jsonObject111 = null; + + try { + jsonObject111 = new JSONObject(resultJson); + if ("200".equals(jsonObject111.optString("code"))&&!jsonObject111.isNull("data")) { + Constant.Report_userId= jsonObject111.optJSONObject("data").optString("userId"); + Constant.Repotr_token=jsonObject111.optJSONObject("data").optString("token"); + Constant.Repotr_app_key=jsonObject111.optJSONObject("data").optString("appKey"); + PolyvViewerInfo polyvViewerInfo = new PolyvViewerInfo(); + polyvViewerInfo.setViewerExtraInfo1(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "")); + polyvViewerInfo.setViewerExtraInfo2(Constant.Report_userId); + PolyvSDKClient.getInstance().setViewerInfo(polyvViewerInfo); + + startReport(null); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 222: + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))) + { + if("1".equals(jsonObject.optString("data"))) + { + SharePrefUtil.saveBoolean(MainActivity.this, CommonUtil.isNeedBlack,true); + GrayManager.getInstance().setLayerGrayType(getWindow().getDecorView()); + } + else + { + SharePrefUtil.saveBoolean(MainActivity.this,CommonUtil.isNeedBlack,false); + } + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 666: + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))) + { + if("1".equals(jsonObject.optString("data"))) + { + SharePrefUtil.saveBoolean(MainActivity.this,Constant.ShowMagazine,true); + } + else + { + SharePrefUtil.saveBoolean(MainActivity.this,Constant.ShowMagazine,false); + } + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case ISHASSYSMESSAGE: + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))) + { + int has_unread=jsonObject.getInt("has_unread"); + if(has_unread>0) + { + SharePrefUtil.saveBoolean(ct, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.show(); + } + else + { + SharePrefUtil.saveBoolean(ct, "isHaveSysMsg", false); + if(badgeSysMsg!=null) + badgeSysMsg.hide(); + } + } + else + { + ToastUtil.showMessage(jsonObject.optString("code")+jsonObject.optString("message")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case ACCESS_TOKEN: + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))){ + JSONObject data = jsonObject.getJSONObject("data"); + String access_token = data.getString("access_token"); + String refresh_token = data.getString("refresh_token"); + + //让 uniapp 拿到 + SharePrefUtil.saveString(ct, "access_token", access_token);// access_token + SharePrefUtil.saveString(ct, "refresh_token", refresh_token);// refresh_token + } + }catch (Exception e){ + e.printStackTrace(); + } + break; + case YXREF: + try { + JSONObject jsonObject = new JSONObject(resultJson); + String yx_accid =jsonObject.getString("YX_accid"); + String yx_token =jsonObject.getString("YX_token"); + if(!StringUtil.isEmpty(yx_accid)&&!StringUtil.isEmpty(yx_token)) + { + SharePrefUtil.saveString(MainActivity.this, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(MainActivity.this, Constant.yx_token, yx_token); + int subtype = 0; + if(NIMClient.getStatus() == StatusCode.LOGINED||NIMClient.getStatus() == StatusCode.LOGINING) + { + return; + } + // 登录 + NimUIKit.login(new LoginInfo(yx_accid, yx_token, null, subtype), + new RequestCallback() { + + @Override + public void onSuccess(LoginInfo param) { + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + + } + + @Override + public void onFailed(int code) { + + ToastHelper.showToast(MainActivity.this, + "云信登录失败: " + code); + } + + @Override + public void onException(Throwable exception) { +// + } + }); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case YXREGISTER: + try { + JSONObject jsonObject = new JSONObject(resultJson); + String yx_accid =jsonObject.getString("YX_accid"); + String yx_token =jsonObject.getString("YX_token"); + if(!StringUtil.isEmpty(yx_accid)&&!StringUtil.isEmpty(yx_token)) + { + SharePrefUtil.saveString(MainActivity.this, Constant.yx_accid, yx_accid); + SharePrefUtil.saveString(MainActivity.this, Constant.yx_token, yx_token); + int subtype = 0; + if(NIMClient.getStatus() == StatusCode.LOGINED||NIMClient.getStatus() == StatusCode.LOGINING) + { + return; + } + // 登录 + NimUIKit.login(new LoginInfo(yx_accid, yx_token, null, subtype), + new RequestCallback() { + + @Override + public void onSuccess(LoginInfo param) { + DemoCache.setAccount(yx_accid); + saveLoginInfo(yx_accid, yx_token); + // 初始化消息提醒配置 + initNotificationConfig(); + + } + + @Override + public void onFailed(int code) { + + if(code==302) + { + refreshToken(); + } + else + { + ToastHelper.showToast(MainActivity.this, + "云信登录失败: " + code); + } + + } + + @Override + public void onException(Throwable exception) { + } + }); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + + case 1: + + if (pd!=null) { + pd.dismiss(); + } + try { + JSONObject jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(optString)) { +// ToastUtil.showMessage(jsonObject.optString("bonuspoints")); + Constant.isRefreshpoint = true;//个人中心界面刷新 + Gson gson = new Gson(); + addBonusPointsBean = gson.fromJson(resultJson,AddBonusPointsSuccessBean.class); + top_sgin.setImageResource(R.drawable.homesign_true); + needreportSimple("signin"); + Constant.isSignIn = true; + //点击签到 + showSignInDailog(); + }else if("201".equals(optString)){ + dilaog2 = ECAlertDialog.buildAlert(MainActivity.this, + "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + GrayManager.getInstance().setLayerGrayType(dilaog2.getWindow().getDecorView()); + dilaog2.show(); + }else{ + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case ISMAILANEXPERT: + + try { + JSONObject jsonObject = new JSONObject(resultJson); + Constant.isMaiLanExpert = jsonObject.optInt("isMaiLanExpert"); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case GETISACCOUNT: + + try { + JSONObject jsonObject = new JSONObject(resultJson); + SharePrefUtil.saveInt(mMainActivity,"GETISACCOUNT",jsonObject.optInt("is_account")); +// SharePrefUtil.saveInt(mMainActivity,"GETISACCOUNT",0); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case GETWELFARENOTICE: + + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))){ + one_last_notice = jsonObject.optBoolean("one_last_notice");//还剩下一个患者就可领取福利情况 + receive_notice = jsonObject.optBoolean("receive_notice");//有福利待领取情况 + if (receive_notice){ + isSendGetUP=true; + if(null!=onCallBackFromActivity) + { + onCallBackFromActivity.getmessage(receive_notice); + } + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + dialog4 = new AlertDialog.Builder( + MainActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText("有福利待领取"); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + + + dialog4.show(); + Window window =dialog4.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog4.getWindow().getDecorView()); + btn_cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent1 = new Intent(MainActivity.this, MyWelfAreActivity.class); + startActivity(intent1); + dialog4.dismiss(); + + + } + }); + //福利暂时隐藏,下个版本开放 + }else if (one_last_notice){ + isSendGetUP=true; + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + dialog4 = new AlertDialog.Builder( + MainActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText("再随访一个患者就可领取福利"); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + + + dialog4.show(); + Window window =dialog4.getWindow(); + + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog4.getWindow().getDecorView()); + btn_cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent1 = new Intent(MainActivity.this, MyWelfAreActivity.class); + startActivity(intent1); + dialog4.dismiss(); + + + } + }); + } + + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 101: + + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + + if (StringUtil.isEmpty(resultJson)) { + return; + } + String code = null; + String message = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + String result = null; + String intro = null; + String newVersion = null; + + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + if(!jsonObject.isNull("data")) + { + dowmLoadPath = jsonObject.getJSONObject("data").getString("apk_path"); + intro = jsonObject.getJSONObject("data").getString("intro"); + newVersion = jsonObject.getJSONObject("data").getString("version"); + } + + if("80002".equals(code)) + { + + if(jsonObject.getJSONObject("data").getInt("upgrade")==1) + { + if(isneedupdatewindow) + { + showUpDateDialog(intro, newVersion, false,false); + } + isneedupdatewindow=false; + } + else + { + if(isneedupdatewindow) + { + showUpDateDialog(intro, newVersion, true,false); + } + + } + + } + else if("80000".equals(code)) + { + if(isneedupdatewindow) + { + if(StringUtil.isEmpty(dowmLoadPath)) + { + showUpDateDialog(intro, newVersion, true,true); + } + else + { + showUpDateDialog(intro, newVersion, true,false); + } + } + + + } + else + { + + if(!BigModule()) + { + if(order<1&&needshowGuideView()) + { + + tab_rbn_my.post(new Runnable() { + @Override + public void run() { + showGuideView(); + } + }); + + } + else + { + getWelfareNotice(); + } + } + else + { + getWelfareNotice(); + } + order=1; + return; + } +// result = jsonObject.getString("reuslt"); +// if (code.equals("1")&&!versionName.equals(newVersion)) {//版本不相同 +// if (result.equals("Y")) {//是否强制更新 +// // getUndate(); +// if (!StringUtil.isEmpty(intro)) { +// if (UpdateVersionUtils.isUpdataInfo(versionName,newVersion)){ +// showUpDateDialog(intro, newVersion, true); +// } +// +// } +// } else { +// if (!StringUtil.isEmpty(intro)) { +// if (UpdateVersionUtils.isUpdataInfo(versionName,newVersion)){ +// showUpDateDialog(intro, newVersion, false); +// } +// +// } +// +// } +// } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + break; + default: + break; + } + } + + private void startToCapture() { + start(); +// startActivity(new Intent(MainActivity.this, CaptureActivity.class)); + } + String scanResult; + private void start() { + + QrConfig qrConfig = new QrConfig.Builder() + .setDesText("将二维码放入框内,自动扫码")//扫描框下文字 + .setShowDes(true)//是否显示扫描框下面文字 + .setShowLight(false)//显示手电筒按钮 + .setShowTitle(true)//显示Title + .setShowAlbum(false)//显示从相册选择按钮 + .setNeedCrop(false)//是否从相册选择后裁剪图片 +// .setCornerColor(Color.parseColor("#E42E30"))//设置扫描框颜色 + .setLineColor(Color.parseColor("#8D2316"))//设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM)//设置扫描线速度 + .setScanType(TYPE_QRCODE)//设置扫码类型(二维码,条形码,全部,自定义,默认为二维码) + .setScanViewType(SCANVIEW_TYPE_QRCODE)//设置扫描框类型(二维码还是条形码,默认为二维码) + .setCustombarcodeformat(QrConfig.BARCODE_PDF417)//此项只有在扫码类型为TYPE_CUSTOM时才有效 + .setPlaySound(true)//是否扫描成功后bi~的声音 +// .setDingPath(cb_show_custom_ding.isChecked() ? R.raw.test : R.raw.qrcode)//设置提示音(不设置为默认的Ding~) + .setIsOnlyCenter(false)//是否只识别框中内容(默认为全屏识别) +// .setTitleText(et_qr_title.getText().toString())//设置Tilte文字 + .setTitleBackgroudColor(Color.parseColor("#FFEFEFEF"))//设置状态栏颜色 + .setTitleTextColor(Color.parseColor("#8D2316"))//设置Title文字颜色 +// .setShowZoom(cb_show_zoom.isChecked())//是否开始滑块的缩放 +// .setAutoZoom(cb_auto_zoom.isChecked())//是否开启自动缩放(实验性功能,不建议使用) +// .setFingerZoom(cb_finger_zoom.isChecked())//是否开始双指缩放 +// .setDoubleEngine(cb_double_engine.isChecked())//是否开启双引擎识别(仅对识别二维码有效,并且开启后只识别框内功能将失效) + .setScreenOrientation(SCREEN_PORTRAIT)//设置屏幕方式 + .setOpenAlbumText("选择要识别的图片")//打开相册的文字 + .setLooperScan(false)//是否连续扫描二维码 +// .setLooperWaitTime(Integer.parseInt(et_loop_scan_time.getText().toString()) * 1000)//连续扫描间隔时间 + .setScanLineStyle(style_line)//扫描线样式 +// .setAutoLight(cb_auto_light.isChecked())//自动灯光 + .setShowVibrator(true)//是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { +// Log.e(TAG, "onScanSuccess: " + result); + + scanResult = result.getContent(); + try { + scanResult=AESUtil.Decrypt(scanResult, "deoep09_klodLdAo"); + new Thread(networkTask2).start(); + } catch (Exception e) { + e.printStackTrace(); + } + +// Toast.makeText(MainActivity.this, "内容:" + result.getContent() +// + " 类型:" + result.getType(), Toast.LENGTH_SHORT).show(); + } + }); + } + String finres; + String canfinres; + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + //String url = null; + + if(scanResult==null) + { + ToastUtil.showMessage("您扫描的不是有效的肝胆相照平台二维码"); +// finish(); + return; + } + + if (scanResult.contains("watchliveFrom")) { + + String uuid = SharePrefUtil.getString(MainActivity.this, Constant.uuid, "123"); + String realname = SharePrefUtil.getString(MainActivity.this, Constant.realName, "肝胆相照专家"); + String photo = SharePrefUtil.getString(MainActivity.this, Constant.photo, "https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + if (StringUtil.isEmpty(photo) || "null".equals(photo)) { + photo = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + scanResult = scanResult.replaceAll("watchliveFrom:", ""); + try { + //url = urlpath +"?message=" + AESUtil.Encrypt("liveScanSuccess}" + result + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + finres=AESUtil.Encrypt("watchliveTo}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + canfinres=AESUtil.Encrypt("watchliveCancel}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + getTooken1(scanurl,AESUtil.Encrypt("liveScanSuccess}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo")); + } catch (Exception e) { + e.printStackTrace(); + } + + } + else if(scanResult.contains("watchvideoFrom")){ + String uuid = SharePrefUtil.getString(MainActivity.this, Constant.uuid, "123"); + String realname = SharePrefUtil.getString(MainActivity.this, Constant.realName, "肝胆相照专家"); + String photo = SharePrefUtil.getString(MainActivity.this, Constant.photo, "https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + if (StringUtil.isEmpty(photo) || "null".equals(photo)) { + photo = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + scanResult = scanResult.replaceAll("watchvideoFrom:", ""); + try { + //url = urlpath + "?message=" +AESUtil.Encrypt("videoScanSuccess}" + result + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + finres=AESUtil.Encrypt("watchvideoTo}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + canfinres=AESUtil.Encrypt("watchvideoCancel}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + getTooken1(scanurl,AESUtil.Encrypt("videoScanSuccess}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo")); + } catch (Exception e) { + e.printStackTrace(); + } + + } + else { + ToastUtil.showMessage("您扫描的不是有效的肝胆相照平台二维码"); +// finish(); + + } + + + } + + + }; + + private void getTooken1(String urlStringUtil,String param) { + // TODO Auto-generated method stub + + + try { + String data="message="+ URLEncoder.encode(param,"UTF-8"); + URL url = new URL(urlStringUtil); + + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); + + conn.setConnectTimeout(5 * 1000); + DataOutputStream dos=new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(data); + dos.flush(); + dos.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Log.d("saoresult" , result); + Message message = new Message(); + message.what = 102; + message.obj = new String(result); + handler1.sendMessage(message); + }else { + Message message = new Message(); + message.what = 105; + handler1.sendMessage(message); + ToastUtil.showMessage("请求失败了,请稍后重试"); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showMessage("请求失败,请稍后重试"); + } + + } + + + public Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case 102: + + try { + + String str = (String) msg.obj; + //Log.d("saoresult" , str);//{"code":1,"message":"授权成功"} + JSONObject objs = new JSONObject(str); + int retcode = objs.optInt("code"); + +// String expertuuid = objs.getString("expertUuid"); +// String message = objs.getString("message"); + //ToastUtil.showMessage(message,1); + if(retcode==1) + { + + if(finres!=null&&canfinres!=null) + { + + Intent intent=new Intent(MainActivity.this, ConfirmActivity.class); + intent.putExtra("scancode",finres); + intent.putExtra("canfinres",canfinres); + startActivity(intent); +// finish(); + } + } + else { + ToastUtil.showMessage("服务器异常!"); + } + + + } catch (JSONException e) { + e.printStackTrace(); + // ToastUtil.showMessage("服务器异常!"); + finish(); + } + break; + + + } + + } + + }; + + public void refreshToken() + { + String yx_accid =SharePrefUtil.getString(ct, Constant.yx_accid, ""); + Map param = new HashMap<>(); + param.put("accid", yx_accid); + sendJsonPostParamtoNetSignMD5(yxrefresh,param,YXREF,this); + } + public void showGuideView() { + + GuideBuilder builder = new GuideBuilder(); + builder.setTargetView(tab_rbn_my) + .setAlpha(200) + .setHighTargetCorner(15) + .setHighTargetPadding(15) + .setAutoDismiss(false); + builder.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { + @Override + public void onShown() { + } + + @Override + public void onDismiss() { +// showGuideView2(); + } + }); + SimpleComponent simpleComponent=new SimpleComponent(this); + builder.addComponent(simpleComponent); + Guide guide = builder.createGuide(); + guide.show(MainActivity.this); + simpleComponent.setNeedDimss(new SimpleComponent.needDimss() { + @Override + public void dimss() { + getWelfareNotice(); + SharePrefUtil.saveBoolean(UIUtils.getContext(),showGuideView,false); + guide.dismiss(); + } + + @Override + public void next() { + guide.dismiss(); + tab_rbn_my.setChecked(true); + top_sao.setVisibility(View.VISIBLE); + top_sao.post(new Runnable() { + @Override + public void run() { + showGuideViewnext(); + } + }); + + } + }); + } + public void showGuideViewnext() { + GuideBuilder builder = new GuideBuilder(); + builder.setTargetView(top_sao) + .setAlpha(200) + .setHighTargetCorner(15) + .setHighTargetPadding(6) + .setAutoDismiss(false); + builder.setOnVisibilityChangedListener(new GuideBuilder.OnVisibilityChangedListener() { + @Override + public void onShown() { + } + + @Override + public void onDismiss() { +// showGuideView2(); + } + }); + SimpleComponentNext simpleComponent=new SimpleComponentNext(this); + builder.addComponent(simpleComponent); + Guide guide = builder.createGuide(); + guide.show(MainActivity.this); + simpleComponent.setNeedDimss(new SimpleComponentNext.needDimss() { + @Override + public void dimss() { + getWelfareNotice(); + SharePrefUtil.saveBoolean(UIUtils.getContext(),showGuideView,false); + guide.dismiss(); + } + + @Override + public void next() { + +// tab_rbn_my.setChecked(true); + } + }); + } + public void getHospital() + { + Map param = new HashMap<>(); +// param.put("mobile", "13051427845"); +// param.put("user_name", "吴从兴"); +// param.put("mobile", "13196988208"); +// param.put("user_name", "顾生旺 "); + param.put("mobile", SharePrefUtil.getString(this, "mobile", "")); + param.put("user_name", SharePrefUtil.getString(this, "realName", "")); + Map map = new HashMap<>(); + map.put("appId",Url.appId); + map.put("sign", HmacSha256ApiVerify.getSignStr(param)); + String url = Url.getHospital; + OkHttpUtils + .get() + .url(url) + .headers(map) + .params(param) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); +// ToastUtil.showMessage(e.toString()); + SharePrefUtil.saveBoolean(MainActivity.this,"net_doctor",false); + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + try { + JSONObject jsonObject=new JSONObject(response); + if(!jsonObject.isNull("data")) + { + + String netphoto= jsonObject.optJSONObject("data").getString("avatar"); + String multi_point_status=jsonObject.optJSONObject("data").getString("multi_point_status"); + String doctor_id=jsonObject.optJSONObject("data").getString("doctor_id"); + SharePrefUtil.saveString(MainActivity.this,"netphoto",netphoto); + SharePrefUtil.saveString(MainActivity.this,"multi_point_status",multi_point_status); + SharePrefUtil.saveString(MainActivity.this,"doctor_id",doctor_id); + SharePrefUtil.saveBoolean(MainActivity.this,"net_doctor",true); + } + else + { + SharePrefUtil.saveBoolean(MainActivity.this,"net_doctor",false); + } + + } catch (JSONException e) { + SharePrefUtil.saveBoolean(MainActivity.this,"net_doctor",false); + e.printStackTrace(); + } + + } + }); + } + + + public void initReport() + { + + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getTagToken,map,1122,this); + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MindDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MindDetailActivity.java new file mode 100644 index 0000000..1fa1bea --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MindDetailActivity.java @@ -0,0 +1,347 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.sql.Date; +import java.text.SimpleDateFormat; +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MindDateilBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MindDetailActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private TextView mTv_mind_num, mTv_pay_state, mTv_pay_to, mTv_pay_money, + mTv_creat_time, mTv_pay_mode, mTv_pay_time, mTv_cancel_time; + private LinearLayout mLl_pay_mode, mLl_pay_time, mLl_think; + private RelativeLayout mRl_pay; + private Button mBt_cancel, mBt_pay; + private MindDetailActivity mActivity; + private String order_id; + private MindDateilBean bean = null; + private String order_status; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("订单详情"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_mind_detail); + mActivity = this; + mTv_creat_time = (TextView) view.findViewById(R.id.tv_mind_creat_time); + mTv_pay_state = (TextView) view.findViewById(R.id.tv_mind_state); + mTv_pay_to = (TextView) view.findViewById(R.id.tv_pay_to); + mTv_pay_money = (TextView) view.findViewById(R.id.tv_mind_money); + mTv_mind_num = (TextView) view.findViewById(R.id.tv_mind_num); + mTv_pay_mode = (TextView) view.findViewById(R.id.tv_mind_pay_mode); + mTv_pay_time = (TextView) view.findViewById(R.id.tv_mind_pay_time); + mLl_pay_mode = (LinearLayout) view.findViewById(R.id.ll_pay_mode); + mLl_pay_time = (LinearLayout) view.findViewById(R.id.ll_pay_time); + mLl_think = (LinearLayout) view.findViewById(R.id.ll_think); + mRl_pay = (RelativeLayout) view.findViewById(R.id.ll_to_pay); + mTv_cancel_time = (TextView) view.findViewById(R.id.textView1); + mBt_cancel = (Button) view.findViewById(R.id.cancel); + mBt_pay = (Button) view.findViewById(R.id.bt_pay); + initIntent(); + mBt_cancel.setOnClickListener(this); + mBt_pay.setOnClickListener(this); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + order_id = getIntent().getStringExtra("order_id"); + order_status = getIntent().getStringExtra("order_status"); + mTv_mind_num.setText(order_id); + showProgressDialog("加载中"); + getDetailResult(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getDetailResult() { + Map param = new HashMap(); + param.put("order_id", order_id); + sendParamtoNet(Url.getExpertXinYi, param, 101, mActivity, true); + + } + + public void getCancleResult() { + Map param = new HashMap(); + param.put("order_id", order_id); + sendParamtoNet(Url.getCancelOrder, param, 102, mActivity, true); + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_pay: + Intent intent = new Intent(mActivity, PayActivity.class); + intent.putExtra("money", (int) bean.xinyi.getXinyi() + ""); + intent.putExtra("order_id", order_id); + intent.setType("detail"); + startActivityForResult(intent, 201); + break; + case R.id.cancel: + aaa(); + break; + default: + break; + } + } + + private ECAlertDialog buildAlert; + + public void aaa() { + buildAlert = ECAlertDialog.buildAlert(mActivity, "确定取消此次心意", "取消", + "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getCancleResult(); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private Timer timer; + int time; + + public void WordLight(long times) { + time = (int) times; + final TimerTask tast = new TimerTask() { + @Override + public void run() { + Message message = Message.obtain(); + handler.sendMessage(message); + } + }; + timer = new Timer(); + timer.schedule(tast, 0, 1000); + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + if (time == 0) { + timer.cancel(); +// mTv_pay_state.setText("已取消"); + mRl_pay.setVisibility(View.GONE); + mLl_think.setVisibility(View.GONE); +// SEND_FRESH_RESULT = 203; + getDetailResult(); + } + mTv_cancel_time.setText(secToTime(time)); + time--; + } + }; + /** + * 201 不刷新 202待支付变成已支付 203待支付变成已取消 + */ + public int SEND_FRESH_RESULT = 201; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 101: + closeProgressDialog(); + PreaseData(resultJson); + break; + case 102: + if (resultJson.equals("\"SUCCEED\"")) { + SEND_FRESH_RESULT = 203; + timer.cancel(); + mTv_pay_state.setText("已取消"); + mRl_pay.setVisibility(View.GONE); + mLl_think.setVisibility(View.GONE); + ToastUtil.showMessage("取消成功"); + } else { + ToastUtil.showMessage("取消失败"); + } + break; + + default: + break; + } + } + + public void PreaseData(String result) { + try { + bean = GsonTools.fromGsonToBean(result, MindDateilBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + } + if (bean != null && bean.xinyi != null) { + if (bean.xinyi.getOrder_status().equals("created")) { + mTv_pay_state.setText("待付款"); + SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + String sd = sdf.format(new Date(Long.parseLong(bean.xinyi + .getCreate_date()) * 1000)); + mTv_creat_time.setText(sd); + mTv_pay_money.setText(String.format("%.2f", + bean.xinyi.getXinyi() / 100) + + "元"); + mRl_pay.setVisibility(View.VISIBLE); + mLl_think.setVisibility(View.VISIBLE); + WordLight(Long.parseLong(bean.xinyi.getExpire_time()) + - Long.parseLong(bean.xinyi.getSystem_time())); + + } + if (bean.xinyi.getOrder_status().equals("paid")) { + mTv_pay_state.setText("已支付"); + SEND_FRESH_RESULT = 202; + SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + String CreatTime = sdf.format(new Date(Long + .parseLong(bean.xinyi.getCreate_date()) * 1000)); + mTv_creat_time.setText(CreatTime); + String PaytTime = sdf.format(new Date(Long.parseLong(bean.xinyi + .getPay_time()) * 1000)); + mTv_pay_time.setText(PaytTime); + if ("wx".equals(bean.xinyi.getPay_channel())) { + mTv_pay_mode.setText("微信支付"); + } + if ("balance".equals(bean.xinyi.getPay_channel())) { + mTv_pay_mode.setText("余额支付"); + } + if ("alipay".equals(bean.xinyi.getPay_channel())) { + mTv_pay_mode.setText("支付宝支付"); + } + if (bean.xinyi.getPay_channel().contains("upacp")) { + mTv_pay_mode.setText("银联支付"); + } + mTv_pay_money.setText(String.format("%.2f", + bean.xinyi.getXinyi() / 100) + + "元"); + mLl_pay_mode.setVisibility(View.VISIBLE); + mLl_pay_time.setVisibility(View.VISIBLE); + mLl_think.setVisibility(View.VISIBLE); + } + if (bean.xinyi.getOrder_status().equals("canceled")) { + if (order_status != null && order_status.equals("created")) { + SEND_FRESH_RESULT = 203; + } + mTv_pay_state.setText("已取消"); + SimpleDateFormat sdf = new SimpleDateFormat( + "yyyy-MM-dd HH:mm:ss"); + + String sd = sdf.format(new Date(Long.parseLong(bean.xinyi + .getCreate_date()) * 1000)); + mTv_creat_time.setText(sd); + mTv_pay_money.setText(String.format("%.2f", + bean.xinyi.getXinyi() / 100) + + "元"); + + } + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + // getDetailResult(); + SEND_FRESH_RESULT = 202; + this.finish(); + } + } + + public static String secToTime(int time) { + String timeStr = null; + int hour = 0; + int minute = 0; + int second = 0; + if (time <= 0) + return "00:00"; + else { + minute = time / 60; + if (minute < 60) { + second = time % 60; + timeStr = unitFormat(minute) + ":" + unitFormat(second); + } else { + hour = minute / 60; + if (hour > 99) + return "99:59:59"; + minute = minute % 60; + second = time - hour * 3600 - minute * 60; + timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + + unitFormat(second); + } + } + return timeStr; + } + + public static String unitFormat(int i) { + String retStr = null; + if (i >= 0 && i < 10) + retStr = "0" + Integer.toString(i); + else + retStr = "" + i; + return retStr; + } + + @Override + public void finish() { + // TODO Auto-generated method stub + Intent intent = new Intent(); + intent.putExtra("order_id", order_id); + setResult(SEND_FRESH_RESULT, intent); + super.finish(); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MonthlyServiceActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MonthlyServiceActivity.java new file mode 100644 index 0000000..e85b457 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MonthlyServiceActivity.java @@ -0,0 +1,373 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean.DataTime; +import cn.shangyu.gdxzExpert.ecdemo.ui.SettingItem; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-服务设置-按月定制 + */ +public class MonthlyServiceActivity extends BaseActivity { + + private EditText et_one_price; + private EditText et_three_price; + private EditText et_six_price; + private SettingItem m_monthly; + //包月服务查看 + public static String monthDetailUrl=Url.getmonthDetail; + //包月服务设置 + public static String addMonthUrl=Url.getaddMonth; + private String price = ""; + private String time = ""; + private String isEnable ; + private Button bt_ok; + private String one_price; + private String three_price; + private String six_price; + + @Override + public void setTitle() { + top_title.setText("按月定制"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_monthly_service); + m_monthly = (SettingItem) view.findViewById(R.id.switch_monthly);//是否开启服务 + et_one_price = (EditText) view.findViewById(R.id.et_one_price);//1个月价格 + et_three_price = (EditText) view.findViewById(R.id.et_three_price);//3个月价格 + et_six_price = (EditText) view.findViewById(R.id.et_six_price);//6个月价格 + bt_ok = (Button) view.findViewById(R.id.bt_ok); + + //初始化是否开启 + boolean isOpen = SharePrefUtil.getBoolean(ct, "Monthly_m_monthly", false); + m_monthly.setChecked(isOpen); + if (m_monthly.isChecked()) { + setEnable(true); + }else{ + setEnable(false); + } + //是否开启服务 + m_monthly.getCheckedTextView().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + m_monthly.toggle(); + if (m_monthly.isChecked()) { + setEnable(true); + operaterVIP(1); + } else { + setEnable(false); + operaterVIP(0); + } + } + }); + + bt_ok.setOnClickListener(this); + //从sp里取出缓存 + String monthDetail = SharePrefUtil.getString(ct, monthDetailUrl, null); + String one_price = SharePrefUtil.getString(ct, "Monthly_one_price", null); + String three_price = SharePrefUtil.getString(ct, "Monthly_three_price", null); + String six_price = SharePrefUtil.getString(ct, "Monthly_six_price", null); + if (!TextUtils.isEmpty(monthDetail)) { + // processData(monthDetail, true, true); + }else{ + showProgressDialog("正在加载"); + } + // showProgressDialog("加载中..."); + if (!TextUtils.isEmpty(one_price)) { + et_one_price.setText(one_price); + } + if (!TextUtils.isEmpty(three_price)) { + et_three_price.setText(three_price); + } + if (!TextUtils.isEmpty(six_price)) { + et_six_price.setText(six_price); + } + + //查看服务设置 + lookAndSetMonth(monthDetailUrl, true); + + return view; + } + + /** + * 设置未选中则禁止输入 + * setEnable + * + * @param isEnable + * void + */ + private void setEnable(boolean isEnable){ + et_one_price.setEnabled(isEnable); + et_three_price.setEnabled(isEnable); + et_six_price.setEnabled(isEnable); + bt_ok.setEnabled(isEnable); + if (isEnable) { + bt_ok.setVisibility(View.VISIBLE); + }else{ + bt_ok.setVisibility(View.GONE); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.bt_ok: + //确定提交设置 + submitSetting(); + break; + default: + break; + } + } + + /** + * 提交数据 + * submitSetting + * + * void + */ + private void submitSetting() { + one_price = et_one_price.getText().toString(); + three_price = et_three_price.getText().toString(); + six_price = et_six_price.getText().toString(); + if (m_monthly.isChecked()) { + isEnable = "1";//开启 + }else{ + isEnable = "0";//关闭 + } + //数据验证 + if (TextUtils.isEmpty(one_price) || TextUtils.isEmpty(three_price) || TextUtils.isEmpty(six_price)) { + ToastUtil.showToast("请输入服务价格"); + return ; + } else if (Double.parseDouble(one_price) >= Double.parseDouble(three_price)) { + ToastUtil.showToast("三个月的服务价格应高于一个月的服务价格"); + return ; + } else if (Double.parseDouble(one_price) >= Double.parseDouble(six_price)) { + ToastUtil.showToast("六个月的服务价格应高于一个月的服务价格"); + return ; + } else if (Double.parseDouble(three_price) >= Double.parseDouble(six_price)) { + ToastUtil.showToast("六个月的服务价格应高于三个月的服务价格"); + return ; + } else if (0 > Double.parseDouble(one_price) || 0 > Double.parseDouble(three_price) || 0 > Double.parseDouble(six_price)) { + ToastUtil.showToast("服务价格最小0元"); + return ; + } else if (99999 < Double.parseDouble(one_price) || 99999 < Double.parseDouble(three_price) || 99999 < Double.parseDouble(six_price)) { + ToastUtil.showToast("服务价格最大99999元"); + return ; + } else { + price = one_price + "," + three_price + "," + six_price;//价格 + time = 1 + "," + 3 + "," + 6;//时间,1,3,6月 + } + //修改服务设置 + lookAndSetMonth(addMonthUrl, false); + } + + /** + * 提交 + * @param loadUrl + * void + */ + private void lookAndSetMonth(final String loadUrl, final boolean isLook) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + if (isLook) {//判断是查看服务,还是设置服务 + params.addBodyParameter("expertUuid", expertUuid); + } else { + params.addBodyParameter("price", price); + params.addBodyParameter("howLong", time); + params.addBodyParameter("isEnable", isEnable); + params.addBodyParameter("expertUuid", expertUuid); + + // String time = SharePrefUtil.getString(ct, "key_monthly_submit_time", ""); + // if (!StringUtil.isBland(time)) { + // int minute = DateUtil.compareTime(time, 5); + // if (minute < 5) { + // closeProgressDialog(); + // ToastUtil.showToast("您的提交太频繁,请等待5分钟后再提交!"); + // return; + // } + // } + showProgressDialog("提交中..."); + } + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // if (!isLook) { + // SharePrefUtil.saveString(ct, "key_monthly_submit_time", DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + // } + processData(info.result, isLook, false); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // ToastUtil.showToast("请求失败,请稍后再试"); + } + }); + } + + //解析数据 + protected void processData(String result, boolean isLook, boolean isCache) { + closeProgressDialog(); + MonthDetailBean bean = GsonTools.fromGsonToBean(result,MonthDetailBean.class); + //判断是查看还是修改 + if (isLook) { + SharePrefUtil.saveString(ct, monthDetailUrl, result); + if ("1".equals(bean.code)) {//查询成功 + //保存到sp + SharePrefUtil.saveString(ct, monthDetailUrl,result); + + if (bean.data != null && !isCache) { + if (1 == bean.data.isEnable) {//是否开启,1是,0否 + m_monthly.setChecked(true); + }else{ + m_monthly.setChecked(false); + } + SharePrefUtil.saveBoolean(ct, "Monthly_m_monthly", m_monthly.isChecked()); + } + List timePrice = bean.time; + + if (timePrice != null && timePrice.size() > 0) {//价格不为空 + + for (int i = 0; i < timePrice.size(); i++) { + int price = (int) Math.round(Double.parseDouble(timePrice.get(i).price)); + if (1 == timePrice.get(i).howLong) {//1个月 + et_one_price.setText(price+""); + SharePrefUtil.saveString(ct, "Monthly_one_price", timePrice.get(i).price); + } else if (3 == timePrice.get(i).howLong) {//3个月 + et_three_price.setText(price+""); + SharePrefUtil.saveString(ct, "Monthly_three_price", timePrice.get(i).price); + } else if (6 == timePrice.get(i).howLong) {//6个月 + et_six_price.setText(price+""); + SharePrefUtil.saveString(ct, "Monthly_six_price", timePrice.get(i).price); + } + } + } + //如果返回的code是 3 说明该服务已经被禁用 radiobutton禁用 + }else if("3".equals(bean.code)){ + SharePrefUtil.saveString(ct, monthDetailUrl, null); + m_monthly.setChecked(false); + m_monthly.setEnabled(false); + ToastUtil.showMessage(bean.message, 1); + } + + } else {//修改设置 + if ("1".equals(bean.code)) {//设置成功 + ToastUtil.showToast("设置成功"); + SharePrefUtil.saveString(ct, "Monthly_one_price", one_price); + SharePrefUtil.saveString(ct, "Monthly_three_price", three_price); + SharePrefUtil.saveString(ct, "Monthly_six_price", six_price); + // lookAndSetMonth(monthDetailUrl, true); + }else{ + ToastUtil.showToast(bean.message); + } + } + + if (m_monthly.isChecked()) { + setEnable(true); + }else{ + setEnable(false); + } + } + + + /** + * 服务是否开启 + */ + private void operaterVIP(int type) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + params.addBodyParameter("VIPType", String.valueOf(3)); + params.addBodyParameter("operaterType", String.valueOf(type)); + LogUtil.d("expertUuid = " + expertUuid + ", VIPType = 3" + ", operaterType = " + type); + showProgressDialog("操作中..."); + HttpHelper.loadData(HttpMethod.POST, Url.operaterVIP, params, new RequestCallBack() { + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + // showToast(arg1); + LogUtil.d("onFailure = " + arg1); + m_monthly.toggle(); + setEnable(false); + SharePrefUtil.saveBoolean(ct, "Monthly_m_monthly", m_monthly.isChecked()); + } + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + LogUtil.d("onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + // showToast("开启成功!"); + } else if (retcode.equals(String.valueOf(3))) { + // showToast("关闭成功"); + //如果返回状态是5 说明该专家所在医院或地区限制开启服务 默认关闭该服务 + } else if (retcode.equals(String.valueOf(5))){ + ToastUtil.showToast(message); + m_monthly.toggle(); + setEnable(false); + m_monthly.setEnabled(false);//不可点击 + }else{ + ToastUtil.showToast(message); + m_monthly.toggle(); + setEnable(false); + } + SharePrefUtil.saveBoolean(ct, "Monthly_m_monthly", m_monthly.isChecked()); + } catch (JSONException e) { + e.printStackTrace(); + // showToast("解析数据失败!"); + m_monthly.toggle(); + setEnable(false); + SharePrefUtil.saveBoolean(ct, "Monthly_m_monthly", m_monthly.isChecked()); + } + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoocimglActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoocimglActivity.java new file mode 100644 index 0000000..bcd7226 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoocimglActivity.java @@ -0,0 +1,409 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.view.X5WebView; + +public class MoocimglActivity extends AppCompatActivity implements OnClickListener{ + private X5WebView webView; + private MoocimglActivity mActivity; + public View loadingView; + private String url; + private ImageView top_back; + private TextView mTitle; + + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private WebChromeClient.CustomViewCallback xCustomViewCallback; + private myWebChromeClient xwebchromeclient; + private View layout_top; + private ImageButton mIb_share; + private String url1 = "https://mp.weixin.qq.com/s/YEv3nk42w3q3q3ddZdwRUg"; + private String url2 = "http://www.igandan.com/common_tools/index.html"; + private String url3 = "http://080.igandan.com/bmsexpert/toindex"; + private String url4 = "http://wx.igandan.com/video/videoLisByType?share=1&typeUuid=f3d1b0de3cb44d18977f06e714032913&page=1"; + private String url5 = "http://www.igandan.com/web/blds/toindex"; + private String newsTitle; + private String summary; + private String getTitle = "速速点开,精彩内容等您来看"; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_zhi_bo); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + X5WebView.initHardwareAccelerate(this); + webView =this.findViewById(R.id.aaaaaa); + layout_top = this.findViewById(R.id.layout_top); + loadingView = this.findViewById(R.id.loading_view); + top_back = (ImageView) this.findViewById(R.id.top_back); + mTitle = (TextView) this.findViewById(R.id.top_title); + mIb_share = (ImageButton) this.findViewById(R.id.top_right); + video_fullView = (FrameLayout) this.findViewById(R.id.f_move); + mIb_share.setVisibility(View.VISIBLE); + mIb_share.setImageResource(R.drawable.share_icon); + top_back.setOnClickListener(this); + mTitle.setText("肝胆相照"); + mActivity = this; + mIb_share.setOnClickListener(this); + InitIntent(); + } + + public class MyWebViewClient extends WebViewClient { + + private ProgressDialog loadingBar; + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + LogUtil.i("url = "+url); + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + return true; + } + + + + @Override + public void onPageFinished(WebView view, String url) { + // if (loadingBar.isShowing()) { + // loadingBar.dismiss(); + // } + + loadingView.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // ToastUtil.showToast("加载失败,请检查网络"); + loadingView.setVisibility(View.GONE); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + } + } + + public void InitIntent() { + url =getIntent().getStringExtra("moocurl"); + if (url.equals(url1)){ + mIb_share.setVisibility(View.VISIBLE); + newsTitle = "关于开展“全国县级肝病医师实用技术及规范化培训” 及“一百千万工程”项目的通知"; + summary = "肝胆相照®肝胆病在线公共服务平台"; + }else if (url.equals(url2)){ + mIb_share.setVisibility(View.VISIBLE); + newsTitle = "肝胆相照—医学临床计算工具"; + summary = "肝病医生的临床计算器和决策辅助工具"; + }else if(url.equals(url3)){ + mIb_share.setVisibility(View.VISIBLE); + newsTitle = "感恩10年,引领希望之路"; + summary = "080数据、中国乙肝十年进展等精彩等您来看"; + }else if (url.equals(url4)){ + mIb_share.setVisibility(View.VISIBLE); + newsTitle = "肝胆科普视频,你想了解学习的都在这里"; + summary = "肝胆相照®肝胆病在线公共服务平台"; + }else if (url.equals(url5)){ + mIb_share.setVisibility(View.VISIBLE); + newsTitle = "第三届利肝中国行病例大赛"; + summary = "肝胆相照®肝胆病在线公共服务平台"; + } + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); +// WebSettings settings = webView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + + webView.setInitialScale(50); + xwebchromeclient = new myWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + webView.setWebViewClient(new MyWebViewClient()); + webView.loadUrl(url); + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stubdes + switch (v.getId()) { + case R.id.top_back: + this.finish(); + break; + case R.id.top_right: + share(); + break; + } + + } + + + public class myWebChromeClient extends WebChromeClient { + private View xprogressvideo; + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + if(null != title && !webView.getUrl().contains(title)){ + getTitle = title; + } + + } + // 播放网络视频时全屏会被调用的方法 + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + // Log.i("fangfa","已经进入了。。。。。。。。"); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + webView.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + xCustomViewCallback = callback; + video_fullView.addView(view); + + video_fullView.setVisibility(View.VISIBLE); + + setFullScreen(); + } + + // 视频播放退出全屏会被调用的 + @Override + public void onHideCustomView() { + layout_top.setVisibility(View.VISIBLE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + xCustomViewCallback.onCustomViewHidden(); + webView.setVisibility(View.VISIBLE); + quitFullScreen(); + } + + // 视频加载时进程loading + @Override + public View getVideoLoadingProgressView() { + if (xprogressvideo == null) { + LayoutInflater inflater = LayoutInflater + .from(MoocimglActivity.this); + xprogressvideo = inflater.inflate(R.layout.loading_view, null); + } + return xprogressvideo; + } + } + + /** + * 调用分享功能 + */ + private void share( ) { + String shareTitle = newsTitle; + if (StringUtil.isEmpty(shareTitle)){ + shareTitle = getTitle; + summary = "肝胆相照®肝胆病在线公共服务平台"; + } + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + + + String imageUrl = ""; + +// if ("分享肝胆相照APP".equals(title)) { +// shareTitle = "肝胆相照专家端APP"; +// } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(mActivity, shareTitle, summary, msgSinaContent, + imageUrl, shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + + + + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + } + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + /** + * 判断是否是全屏 + * + * @return + */ + public boolean inCustomView() { + return (xCustomView != null); + } + + /** + * 全屏时按返加键执行退出全屏方法 + */ + public void hideCustomView() { + xwebchromeclient.onHideCustomView(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + @Override + protected void onResume() { + super.onResume(); + webView.onResume(); + // webView.resumeTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onResume") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + /** + * 设置为横屏 + */ + if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + } + + @Override + protected void onPause() { + super.onPause(); + webView.onPause(); + // webView.pauseTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onPause") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 主要是把webview所持用的资源销毁, + */ + @Override + protected void onDestroy() { + webView.setVisibility(View.GONE); + super.onDestroy(); + video_fullView.removeAllViews(); + webView.loadUrl("about:blank"); + webView.stopLoading(); + webView.setWebChromeClient(null); + webView.setWebViewClient(null); + webView.destroy(); + UMShareAPI.get(this).release(); + //释放资源 + if (webView != null) + webView.destroy(); + } + + /** + * 判断是否是全屏,如果是就隐藏,否则就退出当前的页面 + * + * @param keyCode + * @param event + * @return + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (inCustomView()) { + // webViewDetails.loadUrl("about:blank"); + hideCustomView(); + return false; + } else { + webView.loadUrl("about:blank"); + this.finish(); + } + } + return false; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDoctorActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDoctorActivity.java new file mode 100644 index 0000000..2c3dd6d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDoctorActivity.java @@ -0,0 +1,298 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.DataBean.ExpertBean; +import cn.shangyu.gdxzExpert.bean.MoreDoctorBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MoreDoctorActivity extends BaseActivity implements + OnCallBackFromNet { + private MoreDoctorAdapter adapter; + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private View view; + private String user_uuid; + private MoreDoctorActivity mActivity; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝胆医生"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_search_news); + + top_title = (TextView) view.findViewById(R.id.top_title); + + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无更多医生"); + + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + lv_visit.setMode(Mode.DISABLED); + lv_visit.getRefreshableView() + .setDivider(new ColorDrawable(Color.WHITE)); + lv_visit.getRefreshableView().setDividerHeight(10); + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + + + lv_visit.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(MoreDoctorActivity.this,ExpertDetailActivity.class); + intent.putExtra("uuid", DocList.get(position-1).getUuid()); + if (!TextUtils.isEmpty(DocList.get(position-1).getUuid())) { + startActivity(intent); + + } + } + }); + + mActivity = this; + user_uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + getMoreNotice(); + return view; + } + + private void getMoreNotice() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("uuid", getIntent().getStringExtra("uuid")); + sendJsonPostParamtoNet(Url.getExpertAll, param, 01, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private int page = 1; + private List DocList = new ArrayList(); + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 01: + processData(resultJson); + break; + + default: + break; + } + } + + private void processData(String result) { + + MoreDoctorBean bean = GsonTools.fromGsonToBean(result, + MoreDoctorBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DocList.clear(); + // 数据为空 + + if (bean == null || bean.data == null + || bean.data.getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + ll_empty.setVisibility(View.GONE); + DocList.addAll(bean.data.getList()); + } + } else { + // 加载更多下一页时候e + DocList.addAll(bean.data.getList()); + + } + if (adapter == null) { + adapter = new MoreDoctorAdapter(); + lv_visit.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_visit.setMode(Mode.PULL_FROM_START); + + } else { + lv_visit.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + lv_visit.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + public class MoreDoctorAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return DocList.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return DocList.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_more_doctor); + vh = new ViewHolder(); + vh.mCv_doctor_phont = arg1 + .findViewById(R.id.iv_doctor_phont); + vh.mTv_ConNum = (TextView) arg1.findViewById(R.id.tv_con_num); + vh.mTv_DocName = (TextView) arg1 + .findViewById(R.id.tv_doctor_name); + vh.mTv_DocPoc = (TextView) arg1 + .findViewById(R.id.tv_doctor_position); + vh.mTv_flowerNum = (TextView) arg1 + .findViewById(R.id.tv_flower_num); + vh.mTv_PantNum = (TextView) arg1 + .findViewById(R.id.tv_patient_num); + arg1.setTag(vh); + } else { + vh = (ViewHolder) arg1.getTag(); + } + vh.mTv_ConNum.setText(":" + DocList.get(arg0).getConsultnum()); + vh.mTv_DocName.setText(DocList.get(arg0).getRealname()); + vh.mTv_DocPoc.setText(DocList.get(arg0).getPosition()); + vh.mTv_flowerNum.setText(":" + DocList.get(arg0).getFlowernum()); + vh.mTv_PantNum.setText(":" + DocList.get(arg0).getFllownum()); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + DocList.get(arg0).getPhoto(), + vh.mCv_doctor_phont, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + return arg1; + } + + public class ViewHolder { + public TextView mTv_DocName, mTv_DocPoc, mTv_flowerNum, + mTv_PantNum, mTv_ConNum; + public ImageView mCv_doctor_phont; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDongtaiActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDongtaiActivity.java new file mode 100644 index 0000000..3fd0495 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreDongtaiActivity.java @@ -0,0 +1,334 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MoreDongtaiBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author 作者 wcx + * @version 创建时间:2018-5-30 下午4:45:51 + * 类说明 + */ +public class MoreDongtaiActivity extends BaseActivity implements OnCallBackFromNet { + private GandanDongtaiListAdapter adapter; + + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private View view; + private String user_uuid; + private MoreDongtaiActivity mActivity; + + + @Override + public void setTitle() { + // TODO Auto-generated method stub + String stringExtra = getIntent().getStringExtra("title"); + top_title.setText(stringExtra); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_search_news); + + top_title = (TextView) view.findViewById(R.id.top_title); + + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无更多动态"); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + lv_visit.setMode(Mode.DISABLED); +// lv_visit.getRefreshableView() +// .setDivider(new ColorDrawable(Color.WHITE)); +// lv_visit.getRefreshableView().setDividerHeight(10); + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + mActivity = this; + getMoreNotice(); + + lv_visit.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int position, long arg3) { + /*Intent intent = new Intent(mActivity, GDEventDetailActivity.class); + intent.putExtra("newsTitle", DocList.get(position - 1).getTITLE()); + if (DocList.get(position-1).getEditType()==1) { + intent.putExtra("url", Url.urlHtml + DocList.get(position - 1).getPath()); + }else { + intent.putExtra("url", DocList.get(position - 1).getPath()); + } + intent.putExtra("summary", DocList.get(position - 1).getAuthor()); + intent.setType("dongtai"); + startActivity(intent);*/ + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + if (DocList.get(position-1).getEditType()==1) { + intent.putExtra("url", Url.urlHtml + DocList.get(position - 1).getPath()); + }else { + intent.putExtra("url", DocList.get(position - 1).getPath()); + } + // intent.putExtra("title", news.title); + intent.putExtra("title", "动态详情"); + intent.putExtra("summary", "名院名科名医,来肝胆相照做\"名\"星"); + intent.putExtra("flag", 1); + mActivity.startActivity(intent); + + + } + }); + + return view; + } + + private void getMoreNotice() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("uuid", getIntent().getStringExtra("hospitalUuid")); + sendJsonPostParamtoNet(Url.getDongTaiResList, param, 01, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private int page = 1; + private List DocList = new ArrayList<>(); + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 01: + processData(resultJson); + break; + + default: + break; + } + } + + private void processData(String result) { + Log.e("TGGG","更多动态 = "+result); +// Gson gson = new Gson(); +// MoreDongtaiBean bean = gson.fromJson(result, +// MoreDongtaiBean.class); +// if (bean.getCode() == 1) { +// // gdHospitalList = bean.getData().getList(); +// if (page != 1) { +// if (bean.getData().getList().size() == 0) { +// ToastUtil.showMessage("暂无更多动态"); +// } else { +// DocList.addAll(bean.getData().getList()); +// } +// +// } else { +// // gdHospitalList.clear(); +// gdHospitalList = bean.getData().getList(); +// } +// +// handler.sendEmptyMessage(GET_DATA_SUCCESS); +// } else { +// ToastUtil.showMessage(bean.getMessage()); +// return; +// } + MoreDongtaiBean bean = GsonTools.fromGsonToBean(result, + MoreDongtaiBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DocList.clear(); + // 数据为空 + + if (bean == null || bean.getData() == null + || bean.getData().getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + ll_empty.setVisibility(View.GONE); + DocList.addAll(bean.getData().getList()); + } + } else { + // 加载更多下一页时候e + DocList.addAll(bean.getData().getList()); + + } + if (adapter == null) { + adapter = new GandanDongtaiListAdapter(DocList); + lv_visit.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + if (bean!=null&&bean.getData()!=null) { + int totalPage = bean.getData().getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_visit.setMode(Mode.PULL_FROM_START); + + } else { + lv_visit.setMode(Mode.BOTH); + } + } + + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + lv_visit.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + private class GandanDongtaiListAdapter extends BaseAdapter { + + private List dongtai; + + public GandanDongtaiListAdapter(List video) { + // TODO Auto-generated constructor stub + this.dongtai = video; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return dongtai.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return dongtai.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh; + if (convertView == null) { + vh = new ViewHolder(); + convertView = UIUtils.inflate(R.layout.item_more_video); + vh.mTv_name = (TextView) convertView.findViewById(R.id.tv_video_title); + vh.mIV_video = (ImageView) convertView.findViewById(R.id.iv_video_image); + vh.mTv_date = (TextView) convertView.findViewById(R.id.tv_video_date); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_name.setText(dongtai.get(position).getTITLE()); + vh.mTv_date.setText(dongtai.get(position).getAuthor()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + dongtai.get(position).getHEAD_IMG(), + vh.mIV_video, + ImageOptions.getImageOptions(R.drawable.img_news_empty)); + + return convertView; + } + + public class ViewHolder { + public TextView mTv_name, mTv_date; + public ImageView mIV_video; + } + + } + +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreLeaveMsgActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreLeaveMsgActivity.java new file mode 100644 index 0000000..f2fd76b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreLeaveMsgActivity.java @@ -0,0 +1,346 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.DataBean.GandanHospitalMsssageBean; +import cn.shangyu.gdxzExpert.bean.MoreLeaveMsgBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MoreLeaveMsgActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private MoreDoctorAdapter adapter; + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private View view; + private String uuid; + private MoreLeaveMsgActivity mActivity; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("患友留言"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_search_news); + + top_title = (TextView) view.findViewById(R.id.top_title); + + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无更多留言"); + + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + lv_visit.setMode(Mode.DISABLED); + + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + mActivity = this; + uuid = getIntent().getStringExtra("uuid"); + lv_visit.setOnItemClickListener(this); + getMoreNotice(); + return view; + } + + private void getMoreNotice() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("uuid", uuid); + sendJsonPostParamtoNet(Url.getMessageAll, param, 01, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private int page = 1; + private List DocList = new ArrayList(); + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 01: + processData(resultJson); + break; + + default: + break; + } + } + + private void processData(String result) { + + MoreLeaveMsgBean bean = GsonTools.fromGsonToBean(result, + MoreLeaveMsgBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DocList.clear(); + // 数据为空 + + if (bean == null || bean.data == null + || bean.data.getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + ll_empty.setVisibility(View.GONE); + DocList.addAll(bean.data.getList()); + } + } else { + // 加载更多下一页时候e + DocList.addAll(bean.data.getList()); + + } + if (adapter == null) { + adapter = new MoreDoctorAdapter(); + lv_visit.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_visit.setMode(Mode.PULL_FROM_START); + + } else { + lv_visit.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + lv_visit.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + public class MoreDoctorAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return DocList.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return DocList.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_more_msg); + vh = new ViewHolder(); + vh.tv_case_name1 = (TextView) arg1 + .findViewById(R.id.tv_case_name1); + vh.tv_scoretotal1 = (TextView) arg1 + .findViewById(R.id.tv_scoretotal1); + vh.tv_1score1 = (TextView) arg1.findViewById(R.id.tv_1score1); + vh.tv_1score2 = (TextView) arg1.findViewById(R.id.tv_1score2); + vh.tv_1score3 = (TextView) arg1.findViewById(R.id.tv_1score3); + vh.tv_gandan_comments1 = (TextView) arg1 + .findViewById(R.id.tv_gandan_comments1); + vh.tv_creatdate1 = (TextView) arg1 + .findViewById(R.id.tv_creatdate1); + vh.tv_replay_num1 = (TextView) arg1 + .findViewById(R.id.tv_replay_num1); + vh.ll_imgs1 = (LinearLayout) arg1.findViewById(R.id.ll_imgs1); + vh.dis_1img_01 = (ImageView) arg1 + .findViewById(R.id.dis_1img_01); + vh.dis_1img_02 = (ImageView) arg1 + .findViewById(R.id.dis_1img_02); + vh.dis_1img_03 = (ImageView) arg1 + .findViewById(R.id.dis_1img_03); + + arg1.setTag(vh); + } else { + vh = (ViewHolder) arg1.getTag(); + } + if(!StringUtil.isEmpty(DocList.get(arg0).getPublish_realname())) + { + vh.tv_case_name1.setText(DocList.get(arg0).getPublish_realname().substring(0, 1)+"**"); + } + else + { + vh.tv_case_name1.setText("(**"); + } + + vh.tv_scoretotal1.setText(DocList.get(arg0).getScoretotal() + ""); + vh.tv_1score1.setText(DocList.get(arg0).getScore1() + ""); + vh.tv_1score2.setText(DocList.get(arg0).getScore2() + ""); + vh.tv_1score3.setText(DocList.get(arg0).getScore3() + ""); + vh.tv_gandan_comments1.setText(DocList.get(arg0).getContent()); + vh.tv_creatdate1.setText(DocList.get(arg0).getCreate_date()); + vh.tv_replay_num1.setText(DocList.get(arg0).getReplay_num() + ""); + if (!StringUtil.isEmpty(DocList.get(arg0).getImg1())) { + vh.dis_1img_01.setVisibility(View.VISIBLE); + vh.ll_imgs1.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + DocList.get(arg0).getImg1(), + vh.dis_1img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } else { + vh.dis_1img_01.setVisibility(View.GONE); + vh.ll_imgs1.setVisibility(View.GONE); + } + if (!StringUtil.isEmpty(DocList.get(arg0).getImg2())) { + vh.dis_1img_02.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + DocList.get(arg0).getImg2(), + vh.dis_1img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } else { + if (vh.dis_1img_01.getVisibility() == View.VISIBLE) { + vh.dis_1img_02.setVisibility(View.INVISIBLE); + } else { + vh.dis_1img_02.setVisibility(View.GONE); + } + + } + if (!StringUtil.isEmpty(DocList.get(arg0).getImg3())) { + vh.dis_1img_03.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + DocList.get(arg0).getImg3(), + vh.dis_1img_03, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } else { + if (vh.dis_1img_01.getVisibility() == View.VISIBLE) { + vh.dis_1img_03.setVisibility(View.INVISIBLE); + } else { + vh.dis_1img_03.setVisibility(View.GONE); + } + + } + return arg1; + } + + public class ViewHolder { + public TextView tv_case_name1, tv_scoretotal1, tv_1score1, + tv_1score2, tv_1score3, tv_gandan_comments1, tv_creatdate1, + tv_replay_num1; + private ImageView dis_1img_01, dis_1img_02, dis_1img_03; + private LinearLayout ll_imgs1; + } + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + int headerViewsCount = lv_visit.getRefreshableView().getHeaderViewsCount(); + int position = arg2 - headerViewsCount; + Intent leavemsgintent = new Intent(this, LeaveMsgActivity.class); + leavemsgintent.putExtra("hospital_uuid", uuid); + leavemsgintent.putExtra("uuid", DocList.get(position).getUuid()); + startActivity(leavemsgintent); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreNoticeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreNoticeActivity.java new file mode 100644 index 0000000..1e414e0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreNoticeActivity.java @@ -0,0 +1,211 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MoreNoticeAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MoreNoticeBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 视频搜索的activity + * + * @author gaopeng + * + */ +public class MoreNoticeActivity extends BaseActivity implements + OnCallBackFromNet { + private MoreNoticeAdapter adapter; + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private View view; + private String user_uuid; + private MoreNoticeActivity mActivity; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("医院公告"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_search_news); + + top_title = (TextView) view.findViewById(R.id.top_title); + + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无公告"); + + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + lv_visit.setMode(Mode.DISABLED); + + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getMoreNotice(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + mActivity = this; + user_uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + getMoreNotice(); + return view; + } + + private void getMoreNotice() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("uuid", getIntent().getStringExtra("hospitalUuid")); + param.put("user_uuid", user_uuid); + sendJsonPostParamtoNet(Url.getProclamationAll, param, 01, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private int page = 1; + private List gdHospitalList = new ArrayList<>(); + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 01: + processData(resultJson); + break; + + default: + break; + } + } + + private void processData(String result) { + MoreNoticeBean bean = GsonTools.fromGsonToBean(result, + MoreNoticeBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + gdHospitalList.clear(); + // 数据为空 + + if (bean == null || bean.getData() == null + || bean.getData().getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + ll_empty.setVisibility(View.GONE); + gdHospitalList.addAll(bean.getData().getList()); + } + } else { + // 加载更多下一页时候e + gdHospitalList.addAll(bean.getData().getList()); + + } + if (adapter == null) { + adapter = new MoreNoticeAdapter(MoreNoticeActivity.this, + gdHospitalList); + lv_visit.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.getData().getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_visit.setMode(Mode.PULL_FROM_START); + + } else { + lv_visit.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + lv_visit.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreVideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreVideoActivity.java new file mode 100644 index 0000000..6ed853e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MoreVideoActivity.java @@ -0,0 +1,290 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.VideoBean; +import cn.shangyu.gdxzExpert.bean.MoreVideoBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MoreVideoActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private MoreVideoAdapter adapter; + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private View view; + private String user_uuid; + private MoreVideoActivity mActivity; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + String stringExtra = getIntent().getStringExtra("title"); + top_title.setText(stringExtra); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_search_news); + + top_title = (TextView) view.findViewById(R.id.top_title); + + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无更多视频"); + + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + lv_visit.setMode(Mode.DISABLED); + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page = 1; + getMoreVideo(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + page += 1; + getMoreVideo(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + lv_visit.getRefreshableView().setOnItemClickListener(this); + mActivity = this; + user_uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + getMoreVideo(); + return view; + } + + private void getMoreVideo() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", page); + param.put("uuid", getIntent().getStringExtra("uuid")); + sendJsonPostParamtoNet(Url.getVideoResList, param, 01, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + private int page = 1; + private List DocList = new ArrayList(); + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 01: + processData(resultJson); + break; + + default: + break; + } + } + + private void processData(String result) { + + MoreVideoBean bean = GsonTools.fromGsonToBean(result, + MoreVideoBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + DocList.clear(); + // 数据为空 + + if (bean == null || bean.data == null + || bean.data.getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + ll_empty.setVisibility(View.GONE); + DocList.addAll(bean.data.getList()); + } + } else { + // 加载更多下一页时候e + DocList.addAll(bean.data.getList()); + + } + if (adapter == null) { + adapter = new MoreVideoAdapter(); + lv_visit.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + if (bean!=null&&bean.data!=null) { + int totalPage = bean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_visit.setMode(Mode.PULL_FROM_START); + + } else { + lv_visit.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + lv_visit.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + public class MoreVideoAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return DocList.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return DocList.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_more_video); + vh = new ViewHolder(); + vh.mIV_video = (ImageView) arg1.findViewById(R.id.iv_video_image); + vh.mTv_name = (TextView) arg1.findViewById(R.id.tv_video_title); + vh.mTv_date = (TextView) arg1.findViewById(R.id.tv_video_date); + arg1.setTag(vh); + } else { + vh = (ViewHolder) arg1.getTag(); + } + vh.mTv_name.setText(DocList.get(arg0).getName()); + vh.mTv_date.setText(DocList.get(arg0).getPublic_name() + ); + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + DocList.get(arg0).getImgpath(), + vh.mIV_video, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + return arg1; + } + + public class ViewHolder { + public TextView mTv_name, mTv_date; + public ImageView mIV_video; + } + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + int headerViewsCount = lv_visit.getRefreshableView() + .getHeaderViewsCount(); + int position = arg2 - headerViewsCount; + Intent intentvideo1 = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intentvideo1.putExtra("startNow", false); + intentvideo1.putExtra("isVlmsOnline", false); + + intentvideo1.putExtra("url", DocList.get(position).getPath()); + intentvideo1.putExtra("uuid", DocList.get(position).getUuid()); + intentvideo1.putExtra("title", DocList.get(position).getName()); + intentvideo1.putExtra("readnum", DocList.get(position).getReadnum()); + intentvideo1.putExtra("imgpath", DocList.get(position).getImgpath()); + intentvideo1.putExtra("public_name", DocList.get(position) + .getPublic_name()); + startActivity(intentvideo1); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccount2Activity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccount2Activity.java new file mode 100644 index 0000000..cdfa11e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccount2Activity.java @@ -0,0 +1,385 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BankCardBean; +import cn.shangyu.gdxzExpert.bean.OrderBean.OrderData; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyAccountActivity.java + * + * @author liufang + * @date 2015-11-10 上午9:42:41 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-我的账户页面 + */ +public class MyAccount2Activity extends BaseActivity implements + OnCallBackFromNet { + private TextView mTv_balance; + private RelativeLayout mRl_withdrawals, mRl_bill; + private MyAccount2Activity mActivity; + private ImageView mIv_pic; + private List datas = new ArrayList<>(); + private List details = new ArrayList<>(); + private double currentBalance;// 账户余额 + private double ableBlance;// 可提现金额 + private double minCash;// 最小提现额度 + private double mFwMoney;// 服务费用 + private double mOneDraw;// 单笔最高金额 + // 0 余额不足 ,1 余额足够, 2服务器异常 + private int MoneyEnpough = 0; + // 0无银行卡 ,1 余额足够, 2服务器异常 + private int HaveBankCard = 0; + private TextView mTv_least_monet; + private boolean getmoney = false, getCar = false; + + @Override + public void setTitle() { + top_title.setText(getString(R.string.my_account_text)); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_account2_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_account2, null); + } + mActivity = this; + mIv_pic = (ImageView) view.findViewById(R.id.iv_pic); + mTv_balance = (TextView) view.findViewById(R.id.iv_caccount_balance); + mRl_withdrawals = (RelativeLayout) view + .findViewById(R.id.rl_account_withdrawals); + mRl_bill = (RelativeLayout) view.findViewById(R.id.rl_account_bill); + mTv_least_monet = (TextView) view.findViewById(R.id.tv_least_money); + mRl_withdrawals.setOnClickListener(this); + mRl_bill.setOnClickListener(this); + initData(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("我的账户"); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + LogUtil.i("requestCode==" + requestCode + "resultCode==" + resultCode); + if (Constant.DRAW_WITH_CODE == requestCode + && resultCode == Activity.RESULT_OK) { + // showProgressDialog("加载中..."); + // showLoadingProgress(); + getMyAccount(); + } + if (requestCode == 201) { + getMyAccount(); + getCardList(); + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + closeProgressDialog(); + } + + /** + * 初始化数据 + */ + private void initData() { + String photo = SharePrefUtil.getString(mActivity, "photo", null); + if (photo != null && !"null".equals(photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + photo,mIv_pic,ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + getMyAccount(); + getCardList(); + } + + /** + * 获取我的账户数据 + */ + public void getMyAccount() { + showProgressDialog("加载中"); + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); +// param.put("user_uuid", uuid); + sendJsonPostParamtoNetSignMD5(Url.getRetrieveUser, param, 101 ,this); + } + + /** + * 获取我的银行卡列表 + */ + public void getCardList() { + showProgressDialog("加载中"); + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + sendParamtoNet(Url.getBankCardList, param, 102, mActivity, true); + } + + /** + * 解析并处理数据 + * + */ + private void processData(String result) { + + // OrderBean bean = GsonTools.fromGsonToBean(result, OrderBean.class); + // currentBalance = bean.totalIncome;// 账户余额 + // ableBlance = bean.totalPreCash;// 可提现金额 + // minCash = bean.minCash;// 最小提现额度 + // // 初始化列表的数据 + // datas.clear(); + // datas.addAll(bean.preCashOrderList); + // + // details.clear(); + // details.addAll(bean.totalIncomeList); + getmoney = true; + if (getCar) { + closeProgressDialog(); + } + + double availableCoupons = 0;// 优惠劵数量 + double availableBalance = 0;// 余额 + double withdrawableBalance = 0;// 可提款金额 + + JSONObject jsonObject = null; + + if (result != null) { + try { + jsonObject = new JSONObject(result); + availableCoupons = jsonObject.getDouble("data"); + availableBalance = jsonObject.getDouble("data"); + withdrawableBalance = jsonObject + .getDouble("data"); + ableBlance = withdrawableBalance; + if (withdrawableBalance != 0) { + MoneyEnpough = 1; + } + } catch (JSONException e) { + e.printStackTrace(); + MoneyEnpough = 2; + } + } + + // 回显数据 + // tvAbleBalance.setText("¥" + String.format("%.2f", ableBlance)); + // tvAbleBalance.setText("¥" + String.format("%.2f", 958.65)); + + mTv_balance.setText(String.format("%.2f", availableBalance / 100)); + // tvBalance.setText("¥" + String.format("%.2f", 958.64)); + // 数据请求成功呢后调用关闭加载框方法 + onLoaded(); + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_account_withdrawals) { + if (ableBlance < minCash) { + noMoney(); + return; + } + if (MoneyEnpough == 0) { + noMoney(); + return; + } + if (HaveBankCard == 0) { + noCard(); + return; + } + if (MoneyEnpough == 2 || HaveBankCard == 2) { + ToastUtil.showMessage("服务器异常"); + return; + } + toDrawWith(); + } else if (id == R.id.rl_account_bill) { + toDetail(); + } + } + + /** + * 账单明细 + */ + public void toDetail() { + Intent intent = new Intent(ct, BillDetailsActivity.class); + startActivity(intent); + } + + /** + * 去提现 + */ + public void toDrawWith() { + + Intent intent = new Intent(ct, DrawWith2Atvitity.class); + intent.putExtra("ableBlance", ableBlance); + intent.putExtra("mFwMoney", mFwMoney); + intent.putExtra("minCash", minCash); + intent.putExtra("mOneDraw", mOneDraw); + startActivityForResult(intent, Constant.DRAW_WITH_CODE); + } + + private ECAlertDialog buildAlert; + + public void noMoney() { + buildAlert = ECAlertDialog.buildAlert(mActivity, mActivity + .getResources().getString(R.string.account_withdrawals_money), + null, "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + public void noCard() { + buildAlert = ECAlertDialog.buildAlert(mActivity, mActivity + .getResources().getString(R.string.account_withdrawals_card), + "否", "是", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(mActivity, + AddBankCardFirstActivity.class); + intent.putExtra("ableBlance", ableBlance); + intent.putExtra("mFwMoney", mFwMoney); + intent.putExtra("mOneDraw", mOneDraw); + startActivityForResult(intent, 201); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+" "+resultJson); + // TODO Auto-generated method stub + switch (resultCode) { + case 101: + processData(resultJson); + break; + case 102: + SharePrefUtil + .saveString(mActivity, Url.getBankCardList, resultJson); + processBanklist(resultJson); + break; + default: + break; + } + } + + /** + * 解析并处理数据 + * + */ + private void processBanklist(String result) { + getCar = true; + if (getmoney) { + closeProgressDialog(); + } + if (StringUtil.isEmpty(result)) { + ToastUtil.showMessage("服务器异常"); + return; + } + BankCardBean bean = GsonTools + .fromGsonToBean(result, BankCardBean.class); + + minCash = bean.LessWithdrawalBalance; + // 服务费用 + mFwMoney = bean.WithdrawalBalanceFee; + mOneDraw = bean.WithdrawalBalanceMaxOnce; + if (bean.code.equals("1")) { + mTv_least_monet.setText(String.format("%.2f", + bean.LessWithdrawalBalance / 100) + "元)"); + if (bean.bankList.size() > 0) { + HaveBankCard = 1; + } + } else { + HaveBankCard = 2; + ToastUtil.showMessage(bean.message); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccountActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccountActivity.java new file mode 100644 index 0000000..9e0fab9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyAccountActivity.java @@ -0,0 +1,200 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.os.Parcelable; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.OrderBean; +import cn.shangyu.gdxzExpert.bean.OrderBean.OrderData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyAccountActivity.java + * + * @author liufang + * @date 2015-11-10 上午9:42:41 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-我的账户页面 + */ +public class MyAccountActivity extends BaseActivity { + private TextView tvBalance, tvAbleBalance; + private List datas = new ArrayList<>(); + private List details = new ArrayList<>(); + private double ableBlance;// 可提现金额 + private double currentBalance;// 账户余额 + private String url = Url.getmyAccount; + private Double minCash; + + @Override + public void setTitle() { + top_title.setText(getString(R.string.my_account_text)); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_account, null); + tvBalance = (TextView) view.findViewById(R.id.tv_balance);// 累计收入 + tvAbleBalance = (TextView) view.findViewById(R.id.tv_draw_with_money);// 可提现金额 + initData(); + return view; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + LogUtil.i("requestCode==" + requestCode + "resultCode==" + resultCode); + if (Constant.DRAW_WITH_CODE == requestCode + && resultCode == Activity.RESULT_OK) { + // showProgressDialog("加载中..."); + // showLoadingProgress(); + getMyAccount(url); + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + closeProgressDialog(); + } + + /** + * 初始化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(ct, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showProgressDialog("正在加载"); + } + // 显示加载框 + getMyAccount(url); + LogUtil.i("url============" + url); + } + + /** + * 获取我的账户数据 + */ + private void getMyAccount(String loadUrl) { + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", uuid);// 找到专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getPreCashList.onSuccess = " + info.result); + SharePrefUtil.saveString(ct, url, info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getPreCashList.onFailure = " + arg1); + // 数据请求成功呢后调用关闭加载框方法 + onLoaded(); + ToastUtil.showToast("请求失败,请重试"); + } + }); + LogUtil.i("expertUuid===================" + uuid); + } + + /** + * 解析并处理数据 + * + */ + private void processData(String result) { + + OrderBean bean = GsonTools.fromGsonToBean(result, OrderBean.class); + currentBalance = bean.totalIncome;// 账户余额 + ableBlance = bean.totalPreCash;// 可提现金额 + minCash = bean.minCash;// 最小提现额度 + // 初始化列表的数据 + datas.clear(); + datas.addAll(bean.preCashOrderList); + + details.clear(); + details.addAll(bean.totalIncomeList); + + // 回显数据 + tvAbleBalance.setText("¥" + String.format("%.2f", ableBlance)); + // tvAbleBalance.setText("¥" + String.format("%.2f", 958.65)); + + tvBalance.setText("¥" + String.format("%.2f", currentBalance)); + // tvBalance.setText("¥" + String.format("%.2f", 958.64)); + // 数据请求成功呢后调用关闭加载框方法 + onLoaded(); + } + + @Override + protected void processClick(View v) { + + } + + /** + * 收支明细 + */ + public void toDetail(View view) { + Intent intent = new Intent(ct, IncomeDetailActivity.class); + intent.putParcelableArrayListExtra("income_details", + (ArrayList) details); + startActivity(intent); + } + + /** + * 去提现 + */ + public void toDrawWith(View view) { + if (ableBlance <= 0 || datas == null || datas.isEmpty()) { + ToastUtil.showMessage("余额不足!"); + return; + } + + if (ableBlance < minCash) { + // tvAbleBalance.setEnabled(false); + ToastUtil.showMessage("提现金额低于" + minCash + "元,不能提现"); + return; + } + Intent intent = new Intent(ct, DrawWithActivity.class); + intent.putParcelableArrayListExtra(Constant.ORDER_DATA, + (ArrayList) datas); + intent.putExtra("balance", ableBlance); + startActivityForResult(intent, Constant.DRAW_WITH_CODE); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBankCardActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBankCardActivity.java new file mode 100644 index 0000000..97d3acc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBankCardActivity.java @@ -0,0 +1,438 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BankCardBean; +import cn.shangyu.gdxzExpert.bean.BankCardBean.Card; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CircleImageView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyBankCardActivity.java + * + * @author jx + * @date2015.10.20 我的-常用银行卡管理的界面 + */ +public class MyBankCardActivity extends BaseActivity implements + OnItemLongClickListener { + public static String getbankListlUrl = Url.getBankCardList; + private ListView lv_bank_card; + private TextView tv_empty_card; + private Mbankdapter mbankdapter; + private static final int TO_ADD_CARD = 0; + private ArrayList myBankListData = new ArrayList(); + public static String delBankcardtUrl = Url.getDeleteBankCard; + private String expertUuid;// 提取专家uuid + + @Override + public void setTitle() { + top_title.setText("常用银行卡"); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.invite); + top_right.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_bank_card_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_bank_card, null); + } + lv_bank_card = (ListView) view.findViewById(R.id.lv_bank_card); + lv_bank_card.setOnItemLongClickListener(this); + RelativeLayout rl_bank_card = (RelativeLayout) view + .findViewById(R.id.rl_bank_card); + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");// 提取专家uuid + // 加载布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + tv_empty_card = (TextView) view.findViewById(R.id.tv_empty_card); + rl_bank_card.setOnClickListener(this); + initData(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("常用银行卡"); + } + + private void initData() { + // TODO Auto-generated method stub + // 取缓存 + String bankList = SharePrefUtil.getString(ct, getbankListlUrl, null); + if (TextUtils.isEmpty(bankList)) { + showLoadingProgress(); + bankListData(getbankListlUrl); + } else { + bankListData(getbankListlUrl); + processData(bankList); + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + class Mbankdapter extends BaseAdapter { + + List list; + + public Mbankdapter(List data) { + this.list = data; + // TODO Auto-generated constructor stub + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + NewsViewHolder mHolder = null; + if (convertView == null) { + // 找到自定义item布局 并赋值给 convertView + if(CommonUtil.BigModule()) + { + convertView = View.inflate(ct, R.layout.item_bank_card_big, null); + } + else + { + convertView = View.inflate(ct, R.layout.item_bank_card, null); + } + mHolder = new NewsViewHolder(); + mHolder.bankName = (TextView) convertView + .findViewById(R.id.tv_bank_name); + mHolder.icon = (CircleImageView) convertView + .findViewById(R.id.item_img); + mHolder.bankNumber = (TextView) convertView + .findViewById(R.id.tv_bank_number); + // mHolder.backGrond = (RelativeLayout) convertView + // .findViewById(R.id.rl_bang_ground); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + mHolder.bankName.setText(list.get(position).getOpen_bank()); + String str = list.get(position).getCard_number(); + seletBankIcon(list.get(position).getOpen_bank_code(), mHolder); + mHolder.bankNumber.setText("尾号" + str + "储蓄卡"); + return convertView; + } + + /** + * 根据银行卡名称找到对应的logo + */ + private void seletBankIcon(String bankName, NewsViewHolder mHolder) { + switch (bankName) { + case "0102": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_gongshang); + break; + case "0105": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_jianseyinhang); + break; + case "0104": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_zhongguo); + break; + case "0103": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_nongyeyinhang); + break; + case "0308": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_zhaoshangyinhang); + break; + case "0100": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_youzheng); + break; + case "0301": + mHolder.icon.setImageResource(R.drawable.icon_bankcard_jiatong); + break; + case "0303": + mHolder.icon.setImageResource(R.drawable.icon_bankcard_guangda); + break; + case "0318": + mHolder.icon.setImageResource(R.drawable.icon_bankcard_pingan); + break; + case "0401": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_shanghai); + break; + case "0306": + mHolder.icon.setImageResource(R.drawable.icon_bankcard_guangfa); + break; + case "0403": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_beijingyinhang); + break; + case "0309": + mHolder.icon.setImageResource(R.drawable.icon_bankcard_xingye); + break; + case "0304": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_huaxiayinhnag); + break; + case "0302": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_zhongxinshiye); + break; + case "0305": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_minshneg); + break; + case "上海浦东发展银行": + mHolder.icon + .setImageResource(R.drawable.icon_bankcard_shanghaipudongfazhanyinhang); + break; + + default: + mHolder.icon.setImageResource(R.drawable.bank_card_mr); + break; + } + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class NewsViewHolder { + public TextView bankName; + // public RelativeLayout backGrond; + public TextView bankNumber; + public CircleImageView icon; + + } + } + + /** + * 请求服务器。获取银行卡相关数据 bankListData + * + * @param loadUrl + * void + */ + + private void bankListData(final String loadUrl) { + + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expert_uuid", expertUuid);// 找到专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + dismissLoadingProgress(); + lv_bank_card.setEmptyView(tv_empty_card); + ToastUtil.showMessage("网络连接失败,请稍候再试!"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + BankCardBean bean = GsonTools + .fromGsonToBean(result, BankCardBean.class); + dismissLoadingProgress(); + myBankListData.clear(); + // 数据为空 + if (bean.bankList == null || bean.bankList.size() == 0) { + // tv_empty_card.setVisibility(View.VISIBLE); + // ToastUtil.showToast("暂时没有银行卡相关的数据"); + // 如果此处不做处理 数据为空不会在执行下一步 + lv_bank_card.setEmptyView(tv_empty_card); + return; + } else { + tv_empty_card.setVisibility(View.GONE); + myBankListData.addAll(bean.bankList); + mbankdapter = new Mbankdapter(myBankListData); + lv_bank_card.setAdapter(mbankdapter); + } + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) {// 添加银行卡 + Intent intent = new Intent(ct, AddBankCardFirstActivity.class); + startActivityForResult(intent, TO_ADD_CARD); + // Intent intent = new Intent(ct, AddBankCardActivity.class); + // startActivityForResult(intent, TO_ADD_CARD); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == TO_ADD_CARD) { + bankListData(getbankListlUrl); + LogUtil.i("addCard..."); + } + } + + // 长按删除银行卡 + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + Card myBankList; + final int p; + LogUtil.i("position:" + position); + if (lv_bank_card.getHeaderViewsCount() > 0) { + p = position - lv_bank_card.getHeaderViewsCount(); + } else { + p = position; + } + myBankList = myBankListData.get(p); + final String Uuid = myBankList.getUuid(); + // 弹出对话框 + final ECAlertDialog dialog = ECAlertDialog.buildAlert( + MyBankCardActivity.this, "确定删除本张银行卡?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + delBangcard(delBankcardtUrl, Uuid, p); + dialog.dismiss(); + + } + }); + + dialog.setTitle("温馨提示"); + dialog.show(); + + return true; + } + + // 删除银行卡操作 + private void delBangcard(String delBankcardtUrl, String uuid, final int p) { + // TODO Auto-generated method stub + showProgressDialog("删除中..."); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("uuid", uuid); + params.addBodyParameter("expert_uuid", expertUuid); + HttpHelper.loadData(HttpMethod.POST, delBankcardtUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processCancleData(info.result, p); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("删除失败,请重试"); + } + }); + } + + // 处理请求数据 + private void processCancleData(String result, int p) { + // TODO Auto-generated method stub + try { + JSONObject objs = new JSONObject(result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if ("1".equals(retcode)) { + closeProgressDialog(); + myBankListData.remove(p); + mbankdapter.notifyDataSetChanged(); + if (myBankListData.isEmpty()) { + lv_bank_card.setEmptyView(tv_empty_card); + } + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showToast("删除失败,请重试"); + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBillActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBillActivity.java new file mode 100644 index 0000000..8eca390 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyBillActivity.java @@ -0,0 +1,240 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BillBean; +import cn.shangyu.gdxzExpert.bean.BillBean.transactionRecordsData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyFlowerActivity.java + * + * @author jx + * @date2015.10.20 + * 我的-服务记录的界面 + */ +public class MyBillActivity extends BaseActivity { + public static String transactionRecordsUrl = Url.gettransactionRecords; + private ListView lv_bill; + private LinearLayout ll_empty; + + @Override + public void setTitle() { + top_title.setText("服务记录"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_bill, null); + lv_bill = (ListView) view.findViewById(R.id.lv_bill); + + // 加载布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“您暂未提供VIP服务” + tv_empty_msg.setText("您暂未提供VIP服务"); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + // 取出缓存 + String transactionRecords = SharePrefUtil.getString(ct, + transactionRecordsUrl, null); + if (TextUtils.isEmpty(transactionRecords)) { + showLoadingProgress(); + BillData(transactionRecordsUrl); + } else { + processData(transactionRecords); + BillData(transactionRecordsUrl); + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + class Billdapter extends BaseAdapter { + + List list; + + public Billdapter(List data) { + this.list = data; + // TODO Auto-generated constructor stub + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder = null; + if (convertView == null) { + // 找到自定义item布局 并赋值给 convertView + convertView = View.inflate(ct, R.layout.item_my_bill, null); + mHolder = new NewsViewHolder(); + mHolder.ll_bill = (LinearLayout) convertView + .findViewById(R.id.ll_bill); + mHolder.tv_bill_names = (TextView) convertView + .findViewById(R.id.bill_names);//名字 + mHolder.tv_bill_price = (TextView) convertView + .findViewById(R.id.bill_price);//价钱 + mHolder.tv_bill_time = (TextView) convertView + .findViewById(R.id.bill_time);//时间 + mHolder.tv_bill_servers = (TextView) convertView + .findViewById(R.id.bill_servers);//类型 + // bill_servers + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + //根据偶寄进行换色 + LogUtil.i("position % 2=" + position % 2); + if (position % 2 == 0) { + mHolder.ll_bill.setBackgroundResource(R.color.white);//显示白色 + } else { + mHolder.ll_bill.setBackgroundResource(R.color.white_gray);//显示灰色 + } + //患者姓名 + mHolder.tv_bill_names.setText(list.get(position).patientName); + //价钱 + if ("1".equals(list.get(position).isMonth)) {// 是不是包月 1是 0 不是包月的 + mHolder.tv_bill_price.setText("0元"); + } else { + mHolder.tv_bill_price.setText(list.get(position).price + "元"); + } + //时间 + String orderDate = list.get(position).orderDate; + if (orderDate.length() >= 10) { + orderDate = orderDate.substring(0, 10); + } + mHolder.tv_bill_time.setText(orderDate); + //类型 + if (1 == list.get(position).orderType) { + mHolder.tv_bill_servers.setText("电话咨询"); + + } else if (2 == list.get(position).orderType) { + mHolder.tv_bill_servers.setText("门诊预约"); + } else if (3 == list.get(position).orderType) { + mHolder.tv_bill_servers.setText("按月定制"); + } else if (4 == list.get(position).orderType) { + mHolder.tv_bill_servers.setText("鲜花服务"); + } + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class NewsViewHolder { + public LinearLayout ll_bill; + public TextView tv_bill_names; + public TextView tv_bill_price; + public TextView tv_bill_time; + public TextView tv_bill_servers; + } + } + + /** + * 请求服务器。获取交易记录 BillData + * + * @param loadUrl + * void + */ + private void BillData(final String loadUrl) { + String expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");// 提取专家uuid + LogUtil.i("loadUrl=="+loadUrl+" expertUuid==" + expertUuid); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", expertUuid);// 找到专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("response_json---" + info.result); + SharePrefUtil.saveString(ct, loadUrl, info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + dismissLoadingProgress(); + lv_bill.setEmptyView(ll_empty); + ToastUtil.showMessage("网络连接失败,请稍候再试!"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + BillBean bean = GsonTools.fromGsonToBean(result, BillBean.class); + dismissLoadingProgress(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { + // ToastUtil.showToast("您还没有服务记录"); + // 如果此处不做处理 数据为空的时候就不会在执行下一步 + lv_bill.setEmptyView(ll_empty); + return; + } else { + lv_bill.setAdapter(new Billdapter(bean.data)); + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCicleActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCicleActivity.java new file mode 100644 index 0000000..a0ba48f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCicleActivity.java @@ -0,0 +1,103 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.CicleFragment; +import cn.shangyu.gdxzExpert.fragment.ShareCaseFragment; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * + * + * 功能说明:圈内交流经典病例 + */ +public class MyCicleActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener { + + + private FragmentManager fm; + private RadioGroup main_radiogroup; + + @Override + public void setTitle() { + top_title.setText("病例荟萃"); + top_right_text.setVisibility(View.GONE); + top_right_text.setText("收藏"); + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_cicle); + main_radiogroup = (RadioGroup) view.findViewById(R.id.my_radiogroup_case); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); +// mycase(); + casediscussion();//分享 + return view; + } + + @Override + protected void onResume() { + super.onResume(); +// needreportPage("病例荟萃"); + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + Intent intent = new Intent(MyCicleActivity.this,MyCollectBIngliActivity.class); + startActivity(intent); + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.my_casediscussion) {//病例分享 + casediscussion(); + } else if (checkedId == R.id.my_case) {//经典病例 + mycase(); + } + } + + /** + * 病例分享 + * changeNewService + * + * void + */ + private void casediscussion() { + ShareCaseFragment shareCaseFragment = new ShareCaseFragment(); + fm.beginTransaction().replace(R.id.frame_container, shareCaseFragment, "shareCaseFragment").commit(); + } + + /** + * 经典病例 + * changeHistoryService + * + * void + */ + private void mycase() { + // TODO Auto-generated method stub + CicleFragment cicleFragment = new CicleFragment(); + fm.beginTransaction().replace(R.id.frame_container, cicleFragment, "cicleFragment").commit(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCircleCommunicationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCircleCommunicationActivity.java new file mode 100644 index 0000000..60b19f5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCircleCommunicationActivity.java @@ -0,0 +1,109 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ******************圈内交流,准备页面,未开发*********** + * + * 类名称:MyCircleCommunicationActivity 类描述:TODO 创建人:苏三元 时间:2016-1-6 下午2:49:52 + * 版权:河南商宇科技有限公司--版权所有 (c) 2016 + * + */ + +public class MyCircleCommunicationActivity extends BaseActivity { + + private BadgeView badgePublicServiceMsg; + + private static MyCircleCommunicationActivity instance; + + public static MyCircleCommunicationActivity getInstance() { + return instance; + } + + @Override + public void setTitle() { + top_title.setText("圈内交流"); + top_right.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + instance = this; + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_circle_communication); + + /* + * badgePublicServiceMsg = new BadgeView(ct, bt_old); + * badgePublicServiceMsg.setBackgroundResource(R.drawable.unread_dot); + * badgePublicServiceMsg.setBadgeMargin(10, 10); + * badgePublicServiceMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + * + * if (badgePublicServiceMsg != null) { if(consultCount == 0) { + * badgePublicServiceMsg.hide(); } else { badgePublicServiceMsg.show(); + * } } + */ + + return view; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + showPublicRedUnCount(); + + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + public void showPublicRedUnCount() { + // OnUpdateMsgUnreadCounts(); + // 后面放消息红点,应放在我的患者的,进口出,显示红点,或者底部导航 + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right_text: + break; + + default: + break; + } + } + + /** + * 统计未读消息数,以后要区分我的患者,朋友圈,公益咨询,这个有点复杂 OnUpdateMsgUnreadCounts + * + * void + */ + /* + * public void OnUpdateMsgUnreadCounts() { // int unreadCount = + * IMessageSqlManager.qureyAllSessionUnreadCount(); int consultUnreadCount = + * IMessageSqlManager.getUnByTypeUnreadCount(Constant.typeConsult); // int + * patientUnreadCount = + * IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient); // if + * (unreadCount >= notifyUnreadCount) { consultCount = consultUnreadCount; + * // } LogUtil.i("ps未读=consultUnreadCount="+consultUnreadCount); // String + * msgPatientCount = count > 100 ? "..." : String.valueOf(count); } + */ + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectActivity.java new file mode 100644 index 0000000..df04729 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectActivity.java @@ -0,0 +1,321 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CollectListBean; +import cn.shangyu.gdxzExpert.bean.CollectListBean.CollectList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyCollectActivity.java + * @author jixiao + * @date 2015-12-25 下午4:00:04 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆->我的收藏页面 + */ +public class MyCollectActivity extends BaseActivity implements OnItemClickListener { + + private ArrayList DataList = new ArrayList(); + private int page = 1; + private int type = 3; + private int totalPage = 0; + public static String CollectListUrl = Url.getCollectList; + private PullToRefreshListView ptrLv; + private TextView load_empty; + private MessageAdapter ListAdapter; + + @Override + public void setTitle() { + top_title.setText("我的收藏"); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_my_collect); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_collect);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //设置下拉与上啦都可以用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + CollectListData(CollectListUrl, page, true); + } + + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + CollectListData(CollectListUrl, page, false); + } + }); + initData(); + return view; + } + private void initData() { + String CollectListMessage = SharePrefUtil.getString(ct, CollectListUrl, null); + if (TextUtils.isEmpty(CollectListMessage)) { + showProgressDialog("正在加载"); + }else{ + processData(CollectListMessage, page, true); + } + CollectListData(CollectListUrl, page, true); + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + class MessageAdapter extends BaseAdapter { + + List list; + + public MessageAdapter(List data) { + this.list=data; + // TODO Auto-generated constructor stub + } + @Override + public int getCount() { + return list.size(); + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + //找到自定义item布局 并赋值给 convertView + convertView = View.inflate(ct, R.layout.activity_bookshelf_list_item, null); + holder = new Holder(); + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.date = (TextView) convertView.findViewById(R.id.item_date); + holder.tv_down = (TextView) convertView.findViewById(R.id.item_tv_down); + holder.iv_down = (ImageView) convertView.findViewById(R.id.item_iv_down); + holder.iv_right = (ImageView) convertView.findViewById(R.id.item_iv_right); + + //收藏 + holder.iv_right.setVisibility(View.VISIBLE); + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.GONE); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + final CollectList data = list.get(position); + holder.name.setText(data.title); + if (!TextUtils.isEmpty(data.secondTitle)) { + holder.date.setText(data.secondTitle); + }else{ + holder.date.setText(""); + } + return convertView; + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + public class Holder { + public ImageView iv_right; + public TextView tv_down; + public ImageView iv_down; + public TextView date; + public TextView name; + } + } + /** + * 请求服务器。获取我的收藏记录 + * CollectListData + * @param loadUrl + * void + */ + private void CollectListData(final String loadUrl, final int page, final boolean isRefresh) { + + String expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");//提取专家uuid + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid",expertUuid);//传专家uuid + params.addBodyParameter("type",String.valueOf(type));// + params.addBodyParameter("page", String.valueOf(page));//传page参数 + LogUtil.i("========page=="+page+"========expertUuid=="+expertUuid+"type==========="+type); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl,info.result); + processData(info.result, page, isRefresh); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(load_empty); + } + }); + } + /** + * 刷新最后时间 + * setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + /** + * 刷新完成 + * onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + /** + * 解析并处理数据 + * @param result + */ + private void processData(String result,int page, boolean isRefresh) { + + CollectListBean bean = GsonTools.fromGsonToBean(result,CollectListBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data.list); + + if (bean.data.list == null || bean.data.list.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("您暂未收藏文章"); + }else{ + load_empty.setVisibility(View.GONE); + DataList.addAll(bean.data.list); + } + } else { + //加载更多下一页时候e + DataList.addAll(bean.data.list); + + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new MessageAdapter(DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.data.totalPage ; + LogUtil.i("totalPage="+totalPage+"page="+page); +// 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if(!isRefresh){ + ToastUtil.showMessage("没有更多收藏了"); + } + + ptrLv.setMode(Mode.PULL_FROM_START); + }else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + CollectList list = DataList.get(p); +// String title = list.title; + String path = list.path; + String isCollect = list.isCollect; + String libraryUuid = list.libraryUuid; + Intent intent = new Intent(ct, BookMagazineDetailActivity.class); + intent.putExtra("url", Url.urlHtml + path); + intent.putExtra("title", "杂志详情"); + intent.putExtra("libraryUuid", libraryUuid); + intent.putExtra("bookType", 1); + intent.putExtra("isCollect", isCollect); + startActivityForResult(intent, BookMagazineDetailActivity.REQUESTCODE); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == BookMagazineDetailActivity.REQUESTCODE && resultCode == RESULT_OK) { + page = 1; + CollectListData(CollectListUrl, page, true); + //设置resultCode为ok + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + } + super.onActivityResult(requestCode, resultCode, data); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectBIngliActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectBIngliActivity.java new file mode 100644 index 0000000..7289b6d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCollectBIngliActivity.java @@ -0,0 +1,135 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RadioGroup; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.BIngliCollectFragment; +import cn.shangyu.gdxzExpert.fragment.ShareCaseCollectFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author JIXiao MyCollectActivity.java + * 功能说明:经典病例->收藏病例页面 + */ +public class MyCollectBIngliActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener { + + private FragmentManager fm; + private RadioGroup main_radiogroup; + + @Override + public void setTitle() { + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("我的收藏"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } +// top_title.setText("我的收藏"); + top_right_text.setVisibility(View.GONE); + top_right_text.setText("收藏"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_cicle_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_cicle); + } + main_radiogroup = (RadioGroup) view.findViewById(R.id.my_radiogroup_case); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); +// mycase(); + casediscussion();//分享 + return view; + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right_text: + Intent intent = new Intent(MyCollectBIngliActivity.this,MyCollectBIngliActivity.class); + startActivity(intent); + break; + + default: + break; + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.my_casediscussion://病例分享 + casediscussion(); + break; + case R.id.my_case://经典病例 + mycase(); + break; + } + + + } + + /** + * 病例分享 + * changeNewService + * + * void + */ + private void casediscussion() { + ShareCaseCollectFragment shareCaseFragment = new ShareCaseCollectFragment(); + fm.beginTransaction().replace(R.id.frame_container, shareCaseFragment, "shareCaseFragment").commit(); + } + + /** + * 经典病例 + * changeHistoryService + * + * void + */ + private void mycase() { + // TODO Auto-generated method stub + BIngliCollectFragment cicleFragment = new BIngliCollectFragment(); + fm.beginTransaction().replace(R.id.frame_container, cicleFragment, "cicleFragment").commit(); + } + + + + + + + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCoursewareActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCoursewareActivity.java new file mode 100644 index 0000000..03f5314 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyCoursewareActivity.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.MyCoolectCourseFragment; +import cn.shangyu.gdxzExpert.fragment.MyDownloadCourseFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyCoursewareActivity extends BaseActivity implements + OnCheckedChangeListener { + private View view; + private RadioGroup mRg; + private FragmentManager fm; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("我的课件"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_my_course_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_my_course); + } + mRg = (RadioGroup) view.findViewById(R.id.rg_mycoursse); + fm = getSupportFragmentManager(); + mRg.setOnCheckedChangeListener(this); + if(getIntent().getIntExtra("changeMyCoolect",0)==1) + { + mRg.check(R.id.tab_rbn_share); +// changeMyCoolect(); + } + else + { + mRg.check(R.id.tab_rbn_download); + changeMyDownload(); + } + + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("我的课件"); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + /** + * 我的下载 + */ + private void changeMyDownload() { + + MyDownloadCourseFragment mFragment = new MyDownloadCourseFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "MYDOWNLOAD") + .commit(); + } + + /** + * 我的下载 + */ + private void changeMyCoolect() { + + MyCoolectCourseFragment mFragment = new MyCoolectCourseFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "MYCOOLECT").commit(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_download) { + changeMyDownload(); + } else if (checkedId == R.id.tab_rbn_share) { + changeMyCoolect(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDetailInfoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDetailInfoActivity.java new file mode 100644 index 0000000..681d258 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDetailInfoActivity.java @@ -0,0 +1,1296 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.uinfo.constant.UserInfoFieldEnum; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.download.ImageDownloader.Scheme; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean; +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean.InfoData; +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean.SpecialData; +import cn.shangyu.gdxzExpert.bean.GetListBean; +import cn.shangyu.gdxzExpert.bean.GetListBean.ListData; +import cn.shangyu.gdxzExpert.bean.SettingInfoBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.contact.UserConstant; +import cn.shangyu.gdxzExpert.netease.contact.UserUpdateHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widge.pickerview.EditPopupWindow; +import cn.shangyu.gdxzExpert.widge.pickerview.OptionsPopupWindow; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow.OnTimeSelectListener; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow.Type; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ModifyMyDataActivity.java + * + * @author + * @date 2015-10-26 Copyright (C) 2015 河南商宇科技有限公司 我的-个人资料 功能说明:我的资料(可以点击修改 保存) + */ +public class MyDetailInfoActivity extends BaseActivity implements + OnItemClickListener { + + private View view; + private ImageView iv_select1;// 头像 + private ImageView iv_select2;// 证件 + + private static final int TO_SELECT_PHOTO1 = 601; + private static final int TO_SELECT_PHOTO = 600; + private static final int TO_SELECT_EMAIL = 0; + private static final int TO_SELECT_PHONE = 1; + private static final int TO_SELECT_OFFICEPHONE = 2; + private static final int TO_SELECT_PROFILE = 3; + private TextView tv_select_birthday; + private int sex = 0;// 0男1女 + private Button bt_submit_myinfo; + private String uuid; + private String name = ""; + private String birthdayDate = ""; + // public static String hospitalListUrl = Url.gethospitalList;//医院列表 + public static String officeListUrl = Url.getofficeList;// 科室列表 + public static String positionListUrl = Url.getpositionList;// 职称列表 + public static String diseaseUrl = Url.getdisease;// 专长列表 + public static String modifyUrl = Url.getmodify;// 修改个人资料 + public static String getExpertByUuid = Url.getExpertByUuid;// 查看个人资料 + private TextView tv_zhengshubianhao; + private TextView tv_name; + private TextView tv_phone; + private TextView tv_sex; + private TextView tv_email; + private TextView tv_hospital; + private TextView tv_offices; + private TextView tv_offices_phone; + private TextView tv_professional; + private TextView tv_disease; + private TextView tv_profile; + private String intro = ""; + private String photo, photoBase64; + private String photo2, photoBase642; + private TimePopupWindow pwTime; + private RelativeLayout rl_select_birthday; + private String officePhonePost; + private String profilePost; + private String emailPost; + private String birthdayPost; + private String mobile; + + private String[] specialPosintions; + private OptionsPopupWindow pwSexOptions; + private ArrayList officeListItems = new ArrayList(); + private ArrayList professionalListItems = new ArrayList(); + private ArrayList officeListUuidItems = new ArrayList(); + private ArrayList professionalUuidListItems = new ArrayList(); + private List diseaseList = new ArrayList(); + private ArrayList optionsSexItems = new ArrayList(); + private ArrayList hospitalListUuidItems = new ArrayList(); + private ArrayList hospitalListItems = new ArrayList(); + private EditPopupWindow editPw; + private OptionsPopupWindow pwOptions; + private PopupWindow popGridView; + private GridView gv_disease; + private MyAdapter adapter; + private String officeUuid = ""; + private String positionUuid = ""; + private int page = 1; + private String disease = ""; + private String officeName = ""; + private String positionName = ""; + private static final String NEXT_PAGE = "-99"; + private int checkNum = 0; // 记录选中的条目数量 + private String positionPost; + private String officePost; + private String diseasePost; + private String email = ""; + private String phone = ""; + private String officePhone = ""; + private String etofficeName = ""; + private String diseaseName = ""; + + @Override + public void setTitle() { + top_title.setText("个人资料"); + top_back_layout.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_info_activity_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_info_activity, null); + } + + initView(); + initData(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("个人资料"); + } + + private void initView() { + // 头像 + RelativeLayout rl_photo = (RelativeLayout) view.findViewById(R.id.rl_photo); + iv_select1 = view.findViewById(R.id.iv_select1); + // 证件编号 + RelativeLayout rl_zhengshubianhao = (RelativeLayout) view + .findViewById(R.id.rl_zhengshubianhao); + tv_zhengshubianhao = (TextView) view + .findViewById(R.id.tv_zhengshubianhao); + // 证件图片 + RelativeLayout rl_zhengshu = (RelativeLayout) view + .findViewById(R.id.rl_zhengshu); + iv_select2 = (ImageView) view.findViewById(R.id.iv_zhengshu); + // 姓名 + RelativeLayout rl_name = (RelativeLayout) view + .findViewById(R.id.rl_name); + tv_name = (TextView) view.findViewById(R.id.tv_name); + // 性别 + RelativeLayout rl_sex = (RelativeLayout) view.findViewById(R.id.rl_sex); + tv_sex = (TextView) view.findViewById(R.id.tv_sex); + // 手机号 + RelativeLayout rl_phone = (RelativeLayout) view + .findViewById(R.id.rl_phone); + tv_phone = (TextView) view.findViewById(R.id.tv_phone); + // 邮箱 + RelativeLayout rl_email = (RelativeLayout) view + .findViewById(R.id.rl_email); + tv_email = (TextView) view.findViewById(R.id.tv_email); + // 所属医院 + RelativeLayout rl_hospital = (RelativeLayout) view + .findViewById(R.id.rl_hospital); + tv_hospital = (TextView) view.findViewById(R.id.tv_hospital); + // 所属科室 + RelativeLayout rl_offices = (RelativeLayout) view + .findViewById(R.id.rl_offices); + tv_offices = (TextView) view.findViewById(R.id.tv_offices); + // 所属科室电话 + RelativeLayout rl_offices_phone = (RelativeLayout) view + .findViewById(R.id.rl_offices_phone); + tv_offices_phone = (TextView) view.findViewById(R.id.tv_offices_phone); + // 职称 + RelativeLayout rl_professional = (RelativeLayout) view + .findViewById(R.id.rl_professional); + tv_professional = (TextView) view.findViewById(R.id.tv_professional); + // 专长 + RelativeLayout rl_disease = (RelativeLayout) view + .findViewById(R.id.rl_disease); + tv_disease = (TextView) view.findViewById(R.id.tv_disease); + // 个人简介 + RelativeLayout rl_profile = (RelativeLayout) view + .findViewById(R.id.rl_profile); + tv_profile = (TextView) view.findViewById(R.id.tv_profile); + rl_select_birthday = (RelativeLayout) view + .findViewById(R.id.rl_select_birthday); + tv_select_birthday = (TextView) view + .findViewById(R.id.tv_select_birthday); + + bt_submit_myinfo = (Button) view.findViewById(R.id.bt_submit_myinfo); + bt_submit_myinfo.setOnClickListener(this); + + rl_select_birthday.setOnClickListener(this); + rl_phone.setOnClickListener(this); + rl_offices_phone.setOnClickListener(this); + rl_email.setOnClickListener(this); + rl_profile.setOnClickListener(this); + rl_photo.setOnClickListener(this); + rl_offices.setOnClickListener(this);// 所属科室 + rl_professional.setOnClickListener(this);// 职称 + rl_disease.setOnClickListener(this);// 专长 + rl_zhengshu.setOnClickListener(this); + // rl_zhengshubianhao.setOnClickListener(this); + // rl_name.setOnClickListener(this); + // rl_sex.setOnClickListener(this); + // rl_hospital.setOnClickListener(this); + bottomSelectDate(); + } + + /** + * + * @author Administrator + * @date 2015-10-27 下午3:09:01 + * + * 功能说明:初始化我的资料 + * + * method + */ + private void initData() { + uuid = SharePrefUtil.getString(ct, "uuid", ""); + String name = SharePrefUtil.getString(ct, "realName", ""); + String photo = SharePrefUtil.getString(ct, Constant.photo, ""); + mobile = SharePrefUtil.getString(ct, "mobile", ""); + Log.d("parameterso","mobile0 ="+mobile); + String birthDate = SharePrefUtil.getString(ct, "birthDate", ""); + String email = SharePrefUtil.getString(ct, "email", ""); + sex = SharePrefUtil.getInt(ct, "sex", 0); + String hospitalName = SharePrefUtil.getString(ct, "hospitalName", ""); + String officeName = SharePrefUtil.getString(ct, "officeName", ""); + String officePhone = SharePrefUtil.getString(ct, "officePhone", ""); + String positionName = SharePrefUtil.getString(ct, "positionName", ""); + String certificate = SharePrefUtil.getString(ct, "certificate", ""); + String certificateImg = SharePrefUtil.getString(ct, "certificateImg", + ""); + String intro = SharePrefUtil.getString(ct, "intro", ""); + // String disease = SharePrefUtil.getString(ct, "disease", ""); + String diseaseName = SharePrefUtil.getString(ct, "diseaseName", ""); + + // 回显头像 + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + photo,iv_select1,ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + // 回显姓名 + if (!StringUtil.isEmpty(name)) { + tv_name.setText(name); + } + // 手机号 + if (!StringUtil.isEmpty(mobile)) { + tv_phone.setText(mobile); + Log.d("parameterso","mobile1 ="+mobile); + } + // 性别 + if (0 == sex) { + tv_sex.setText(getResources().getString(R.string.man)); + } else { + tv_sex.setText(getResources().getString(R.string.women)); + } + // 出生日期 + if (!StringUtil.isEmpty(birthDate)) { + tv_select_birthday.setText(birthDate); + LogUtil.i("birthDate = "+birthDate); + if (birthDate.length() >= 10) { + pwTime.setTime(DateUtil.str2Date(birthDate, "yyyy-MM-dd")); + } + } + // 邮箱 + if (!StringUtil.isEmpty(email)) { + tv_email.setText(email); + } + // 医院名称 + if (!StringUtil.isEmpty(hospitalName)) { + tv_hospital.setText(hospitalName); + } + // 科室 + if (!StringUtil.isEmpty(officeName)) { + tv_offices.setText(officeName); + } + // 科室电话 + if (!StringUtil.isEmpty(officePhone)) { + tv_offices_phone.setText(officePhone); + } + // 职称 + if (!StringUtil.isEmpty(positionName)) { + tv_professional.setText(positionName); + } + // 资格证书编号 + if (!StringUtil.isEmpty(certificate)) { + tv_zhengshubianhao.setText(certificate); + } + // 证书图片 + if (!StringUtil.isEmpty(certificateImg)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + certificateImg, + iv_select2, + ImageOptions + .getImageOptions(R.drawable.ll_upload_certificateimg)); + } + // 简介 + if (!StringUtil.isEmpty(intro)) { + tv_profile.setText(intro); + } + // 专长 + if (!StringUtil.isEmpty(diseaseName)) { + tv_disease.setText(diseaseName); + } + // 专长id + // if (!TextUtils.isEmpty(disease) && !"null".equals(disease)) { + // this.disease = disease; + // } + + String result = SharePrefUtil.getString(ct, getExpertByUuid, ""); + if (TextUtils.isEmpty(result)) { + showProgressDialog("正在加载"); + } + getList(getExpertByUuid); + getList(officeListUrl);// 获取科室列表 + getList(positionListUrl);// 获取职称列表 + getList(diseaseUrl);// 获取专长 + + } + + @Override + protected void processClick(View v) { + Intent intent; + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) {// 返回 + String wrapPhoto = null; + if (!StringUtil.isEmpty(photo)) { + wrapPhoto = Scheme.FILE.wrap(photo); + intent = new Intent(); + intent.putExtra("photo", wrapPhoto); + setResult(Constant.INFO_CODE, intent); + } + + // if (TextUtils.isEmpty(photoBase64) && + // TextUtils.isEmpty(birthdayPost) + // && TextUtils.isEmpty(emailPost) && + // TextUtils.isEmpty(officePhonePost) + // && TextUtils.isEmpty(profilePost)) { + // LogUtil.i("没有需要提交的"); + // }else{ + submit(); + // getList(modifyUrl); + SharePrefUtil.saveString(ct, "MyChangePhoto", wrapPhoto); + // } + + this.finish(); + hideSoftKeyboard(); + } else if (id == R.id.rl_photo) {// 头像 + intent = new Intent(ct, SelectedPhotoActivity.class); + startActivityForResult(intent, TO_SELECT_PHOTO); + } else if (id == R.id.rl_zhengshu) { + Intent i = new Intent(ct, SelectedPhotoActivity.class); + i.putExtra("isConstraint", true);// 是否等比例裁剪 + startActivityForResult(i, TO_SELECT_PHOTO1); + // case R.id.rl_zhengshubianhao: + // ToastUtil.showToast("证书编号"); + // break; + } else if (id == R.id.rl_phone) {// 电话 + String phone = tv_phone.getText().toString().trim(); + intent = new Intent(ct, EditPhoneActivity.class); + intent.putExtra("phone", phone); + startActivityForResult(intent, TO_SELECT_PHONE); + } else if (id == R.id.rl_email) {// 邮箱 + String email = tv_email.getText().toString().trim(); + intent = new Intent(ct, EditEmailActivity.class); + intent.putExtra("email", email); + startActivityForResult(intent, TO_SELECT_EMAIL); + } else if (id == R.id.rl_offices_phone) {// 科室电话 + String officePhone = tv_offices_phone.getText().toString().trim(); + intent = new Intent(ct, EditOfficePhoneActivity.class); + intent.putExtra("officePhone", officePhone); + startActivityForResult(intent, TO_SELECT_OFFICEPHONE); + } else if (id == R.id.rl_profile) {// 简介 + String profile = tv_profile.getText().toString().trim(); + intent = new Intent(ct, EditProfileActivity.class); + intent.putExtra("profile", profile); + startActivityForResult(intent, TO_SELECT_PROFILE); + } else if (id == R.id.rl_select_birthday) {// 选择生日 + LogUtil.v("选择生日"); + pwTime.showAtLocation(rl_select_birthday, Gravity.BOTTOM, 0, 0); + } else if (id == R.id.rl_disease) {// 专长 + showDiseasePop(tv_disease); + } else if (id == R.id.rl_professional) {// 职称 + showPwOptions("请选择职称", professionalListItems,professionalUuidListItems, tv_professional, 3); + } else if (id == R.id.rl_offices) {// 科室 + showPwOptions("请选择科室", officeListItems, officeListUuidItems,tv_offices, 2); + } else if (id == R.id.bt_submit_myinfo) { + // 提交 + // submit(); + } + } + + /** + * 弹出单项选择框 void + */ + private void showPwOptions(String title, + final ArrayList optionsItems, + final ArrayList optionsUuidItems, final TextView tv, + final int flag) { + // 选项选择器 + pwOptions = new OptionsPopupWindow(ct); + pwOptions.setPopupTitle(title); + // 一级联动 + pwOptions.setPicker(optionsItems); + // 设置选择的一级单位 + // pwSexOptions.setLabels("医院"); + // 设置默认选中的项目 + int position = 0; + // if (flag == 1) { + // //医院单选 + // if (!StringUtil.isBland(hospitalName)) { + // if (optionsItems != null && !optionsItems.isEmpty()) { + // for (int i = 0, size = optionsItems.size(); i < size; i++ ) { + // if (optionsItems.get(i).equals(hospitalName)) { + // position = i; + // } + // } + // } + // } + // } else + if (flag == 2) { + // 科室单选 + if (!StringUtil.isBland(officeName)) { + if (optionsItems != null && !optionsItems.isEmpty()) { + for (int i = 0, size = optionsItems.size(); i < size; i++) { + if (optionsItems.get(i).equals(officeName)) { + position = i; + } + } + } + } + } else if (flag == 3) { + // 职称单选 + if (!StringUtil.isBland(positionName)) { + if (optionsItems != null && !optionsItems.isEmpty()) { + for (int i = 0, size = optionsItems.size(); i < size; i++) { + if (optionsItems.get(i).equals(positionName)) { + position = i; + } + } + } + } + } + pwOptions.setSelectOptions(position); + pwOptions.showAtLocation(tv, Gravity.BOTTOM, 0, 0); + // 监听确定选择按钮 + pwOptions + .setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + String tx = optionsItems.get(options1); + String uuid = optionsUuidItems.get(options1); + // 判断是否是下一页 + tv.setText(tx); + if (flag == 2) { + officeUuid = uuid; + officeName = tx; + } else if (flag == 3) { + positionUuid = uuid; + positionName = tx; + } + LogUtil.i("tx==" + tx + "uuid=" + uuid); + // } + } + }); + } + + /* + * 弹出修改信息弹出框 + */ + private void showDiseasePop(View parent) { + + if (popGridView != null && popGridView.isShowing()) { + popGridView.dismiss(); + } + + View view = getLayoutInflater().inflate(R.layout.popwindow_grid, null); + popGridView = new PopupWindow(view, LayoutParams.MATCH_PARENT, + LayoutParams.WRAP_CONTENT); + popGridView.setBackgroundDrawable(new ColorDrawable(0)); + popGridView.setOutsideTouchable(true); + popGridView.setAnimationStyle(R.style.timepopwindow_anim_style); + popGridView.update(); + popGridView.setFocusable(true); + + TextView btnCancle = (TextView) view.findViewById(R.id.btn_cancle); + TextView btnSure = (TextView) view.findViewById(R.id.btn_sure); + gv_disease = (GridView) view.findViewById(R.id.gv_disease); + gv_disease.setOnItemClickListener(this); + adapter = new MyAdapter(diseaseList); + checkNum = 0; + for (int i = 0; i < diseaseList.size(); i++) { + String uuid2 = diseaseList.get(i).uuid; + adapter.getIsSelected().put(i, false); + if (specialPosintions != null) { + for (int j = 0; j < specialPosintions.length; j++) { + if (uuid2.equals(specialPosintions[j])) { + adapter.getIsSelected().put(i, true); + LogUtil.i("i=====" + i); + checkNum++; + } + } + } + } + gv_disease.setAdapter(adapter); + // adapter.notifyDataSetChanged(); + + btnCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + getCancleCheck(); + popGridView.dismiss(); + } + }); + btnSure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + getCheck(); + popGridView.dismiss(); + } + }); + + popGridView.showAtLocation(gv_disease, Gravity.BOTTOM, 0, 0); + + } + + /** + * + * + * 类名称:MyAdapter 类描述: 创建人:苏三元 时间:2015-10-27 下午4:34:36 版权:河南商宇科技有限公司--版权所有 + * (c) 2015 + * + */ + private class MyAdapter extends BaseAdapter { + + // 用来控制CheckBox的选中状况 + private HashMap isSelected; + private List list; + + public MyAdapter(List diseaseList) { + this.isSelected = new HashMap(); + this.list = diseaseList; + // 初始化数据 + // initDate(); + } + + private void initDate() { + for (int i = 0; i < list.size(); i++) { + String uuid2 = list.get(i).uuid; + // checkNum = 0; + /* + * if (specialPosintions != null) { for (int j = 0; j < + * specialPosintions.length; j++) { if + * (uuid2.equals(specialPosintions[j])) { getIsSelected().put(i, + * true); LogUtil.i("i==" + i); checkNum ++; }else{ + * getIsSelected().put(i, false); } } }else{ + * getIsSelected().put(i, false); } + */ + } + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public long getItemId(int position) { + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + VHolder holder = null; + if (convertView == null) { + // 获得ViewHolder对象 + holder = new VHolder(); + // 导入布局并赋值给convertview + convertView = View.inflate(ct, R.layout.item_date_time, null); + holder.cb = (CheckBox) convertView + .findViewById(R.id.cb_list_title); + holder.cb.setTextSize(13); + // 为view设置标签 + convertView.setTag(holder); + } else { + // 取出holder + holder = (VHolder) convertView.getTag(); + } + + holder.cb.setText(list.get(position).name);// stringArrays[position] + holder.cb.setChecked(getIsSelected().get(position)); + return convertView; + } + + public HashMap getIsSelected() { + return isSelected; + } + + } + + public static class VHolder { + CheckBox cb; + } + + // 得到专长 + private void getCheck() { + disease = ""; + String diseaseName = ""; + specialPosintions = new String[diseaseList.size()]; + for (int i = 0; i < diseaseList.size(); i++) { + Boolean isCheck = adapter.getIsSelected().get(i); + if (isCheck) { + specialPosintions[i] = diseaseList.get(i).uuid; + disease += diseaseList.get(i).uuid + ","; + diseaseName += diseaseList.get(i).name + "、"; + LogUtil.i("disease=" + disease + "=diseaseName=" + diseaseName); + } + } + // 保存到sp为了以后使用 + SharePrefUtil.saveString(ct, "disease", disease); + // 去掉最后一个“、” + if (!TextUtils.isEmpty(diseaseName) && diseaseName.length() > 0) { + diseaseName = diseaseName.substring(0, diseaseName.length() - 1); + tv_disease.setText(diseaseName.replace("(甲、乙、丙、丁、戊肝)",""));//"肝炎(甲、乙、丙、丁、戊肝)", + SharePrefUtil.saveString(ct, "diseaseName", diseaseName); + } else { +// tv_disease.setText(""); + + } + + } + + // 得到专长 + private void getCancleCheck() { + disease = ""; + String diseaseName = ""; + specialPosintions = new String[diseaseList.size()]; + for (int i = 0; i < diseaseList.size(); i++) { + Boolean isCheck = adapter.getIsSelected().get(i); + if (isCheck) { + specialPosintions[i] = diseaseList.get(i).uuid; + diseaseName += diseaseList.get(i).name + "、"; + + } + } + if (TextUtils.isEmpty(diseaseName)) { +// tv_disease.setText(""); + + } + + } + + /** + * 实例化时间选择器,与选择时间回调 bottomSelectDate + * + * void + */ + private void bottomSelectDate() { + // 时间选择器 + pwTime = new TimePopupWindow(this, Type.YEAR_MONTH_DAY); + // pwTime.setTime(new Date()); + pwTime.setTime(DateUtil.str2Date("1970-01-01", "yyyy-MM-dd")); + + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR); + // 设置标题 + pwTime.setPopupTitle("请选择出生日期"); + // 设置起始时间 + pwTime.setRange(1900, year); + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + birthdayPost = DateUtil.date2Str(date, "yyyy-MM-dd"); + tv_select_birthday.setText(birthdayPost); + // showProgressDialog("提交中..."); + // getList(modifyUrl); + } + }); + } + + // 提交 + public void submit() { + birthdayDate = tv_select_birthday.getText().toString().trim(); + name = tv_name.getText().toString().trim(); + email = tv_email.getText().toString().trim(); + intro = tv_profile.getText().toString().trim(); + phone = tv_phone.getText().toString().trim(); + officePhone = tv_offices_phone.getText().toString().trim(); + positionName = tv_professional.getText().toString().trim(); + etofficeName = tv_offices.getText().toString().trim(); + diseaseName = tv_disease.getText().toString().trim(); + officeName = etofficeName; + showProgressDialog("修改中..."); + getList(modifyUrl); + needreportSimple("modify"); + } + private Map fieldMap; + private void update(Serializable content) { + RequestCallbackWrapper callback = new RequestCallbackWrapper() { + @Override + public void onResult(int code, Object result, Throwable exception) { + + + } + }; + + fieldMap =new HashMap<>(); + fieldMap.put(UserConstant.KEY_NICKNAME,UserInfoFieldEnum.Name); + + UserUpdateHelper.update(fieldMap.get(UserConstant.KEY_NICKNAME),content,callback); + + } + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String url, String result) { + LogUtil.i("result = "+result); + if (modifyUrl.equals(url)) { + SettingInfoBean bean = GsonTools.fromGsonToBean(result, + SettingInfoBean.class); + if ("1".equals(bean.code)) { + SettingInfoBean.InfoData data = bean.data; + if (data != null) { + String realName = data.realName; + update(realName); + int sex = data.sex; + String hospitalName = data.hospitalName; + String birthDate = data.birthDate; + mobile = data.mobile; + Log.d("parameterso","mobile2 ="+mobile); + String photo = data.photo; + String email = data.email; + String hospitalUuid = data.hospitalUuid; + String officeName = data.officeName; + String officePhone = data.officePhone; + String officeUuid = data.officeUuid; + String positionUuid = data.positionUuid; + String positionName = data.positionName; + String certificate = data.certificate; + String certificateImg = data.certificateImg; + String qrcode = data.qrcode; + // String isStar = data.isStar; + // int countyId = data.countyId; + // int provId = data.provId; + // int cityId = data.cityId; + + // 保存个人资料到SP文件 + if (!StringUtil.isEmpty(realName)) { + SharePrefUtil.saveString(ct, Constant.realName, + realName); + } + if (!StringUtil.isEmpty(mobile) + && ValidateUtils.isMobileNum(mobile)) { + SharePrefUtil.saveString(ct, Constant.mobile, mobile); + Log.d("parameterso","mobile3 ="+mobile); + } + if (!StringUtil.isEmpty(photo)) { + SharePrefUtil.saveString(ct, Constant.photo, photo); + } + if (!StringUtil.isEmpty(email)) { + SharePrefUtil.saveString(ct, "email", email); + } + if (!StringUtil.isEmpty(birthDate)) { + SharePrefUtil.saveString(ct, "birthDate", birthDate); + } + if (!StringUtil.isEmpty(hospitalName)) { + SharePrefUtil.saveString(ct, "hospitalUuid", + hospitalUuid); + SharePrefUtil.saveString(ct, "hospitalName", + hospitalName); + } + if (!StringUtil.isEmpty(officeName)) { + SharePrefUtil.saveString(ct, "officeUuid", officeUuid); + SharePrefUtil.saveString(ct, "officeName", officeName); + } + if (!StringUtil.isEmpty(officePhone)) { + SharePrefUtil + .saveString(ct, "officePhone", officePhone); + } + if (!StringUtil.isEmpty(intro)) { + SharePrefUtil.saveString(ct, "intro", intro); + } + if (!StringUtil.isEmpty(certificate)) { + SharePrefUtil + .saveString(ct, "certificate", certificate); + } + if (!StringUtil.isEmpty(certificateImg)) { + SharePrefUtil.saveString(ct, "certificateImg", + certificateImg); + } + if (!StringUtil.isEmpty(qrcode)) { + SharePrefUtil.saveString(ct, "qrcode", qrcode); + } + SharePrefUtil.saveInt(ct, "sex", sex); + SharePrefUtil.saveString(ct, "positionUuid", positionUuid); + SharePrefUtil.saveString(ct, "positionName", positionName); + SharePrefUtil.saveString(ct, "officeName", officeName); + SharePrefUtil.saveString(ct, "officeUuid", officeUuid); + // SharePrefUtil.saveInt(ct, "cityId", cityId); + // SharePrefUtil.saveInt(ct, "countyId", countyId); + // SharePrefUtil.saveString(ct, "isStar", isStar); + // SharePrefUtil.saveInt(ct, "provId", provId); + // SharePrefUtil.saveInt(ct, "state", state); + + // SharePrefUtil.saveString(ct, "MyChangePhoto", + // Url.urlHtml+photo); + LogUtil.i("data==" + data.toString()); + } + // closeProgressDialog(); + // ToastUtil.showToast("修改成功"); + } else { + SharePrefUtil.saveString(ct, "MyChangePhoto", null); + // closeProgressDialog(); + // ToastUtil.showToast("修改失败,请重试"); + } + + } else if (getExpertByUuid.equals(url)) { + ChangeMyInfoBean bean = GsonTools.fromGsonToBean(result, + ChangeMyInfoBean.class); + saveInfo(bean); + } else { + GetListBean bean = GsonTools.fromGsonToBean(result, + GetListBean.class); + + // 数据为空 + if (bean.data != null && bean.data.size() > 0) { + if (officeListUrl.equals(url)) { + officeListUuidItems.clear(); + officeListItems.clear(); + for (int i = 0; i < bean.data.size(); i++) { + officeListUuidItems.add(bean.data.get(i).officeUuid); + officeListItems.add(bean.data.get(i).officeName); + } + } else if (positionListUrl.equals(url)) { + professionalUuidListItems.clear(); + professionalListItems.clear(); + for (int i = 0; i < bean.data.size(); i++) { + professionalUuidListItems.add(bean.data.get(i).uuid); + professionalListItems.add(bean.data.get(i).name); + } + } else if (diseaseUrl.equals(url)) { + bean.data.get(0).des = "肝炎";//去除甲乙丙丁"肝炎(甲、乙、丙、丁、戊肝)", + bean.data.get(0).name = "肝炎"; + diseaseList.clear(); + diseaseList.addAll(bean.data);// 肝胆病标签列表 + + // adapter = new MyAdapter(diseaseList); + // gv_disease.setAdapter(adapter); + } + } else { + ToastUtil.showToast("获取失败,请重试"); + } + + } + } + + // 保存数据到本地 + public void saveInfo(ChangeMyInfoBean bean) { + if ("1".equals(bean.code)) { + InfoData data = bean.expert; + if (data != null) { + String realName = data.realName; + int sex = data.sex; + String birthDate = data.birthDate; + mobile = data.mobile; + Log.d("parameterso","mobile4 ="+mobile); + String userName = data.userName; + String photo = data.photo; + String email = data.email; + String hospitalUuid = data.hospitalUuid; + String hospitalName = data.hospitalName; + String officeName = data.officeName; + String officePhone = data.officePhone; + String officeUuid = data.officeUuid; + String positionUuid = data.positionUuid; + String positionName = data.positionName; + String certificate = data.certificate; + String certificateImg = data.certificateImg; + String qrcode = data.qrcode; + String intro = data.intro; + String isStar = data.isStar; + // int countyId = data.countyId; + // int provId = data.provId; + // int cityId = data.cityId; + + // 保存个人资料到SP文件 + SharePrefUtil.saveString(ct, "qrcode", qrcode); + // SharePrefUtil.saveInt(ct, "cityId", cityId); + // SharePrefUtil.saveInt(ct, "countyId", countyId); + // SharePrefUtil.saveInt(ct, "provId", provId); + SharePrefUtil.saveInt(ct, "sex", sex); + SharePrefUtil.saveString(ct, "isStar", isStar); + + LogUtil.i("data==" + data.toString()); + + // 回显头像 + if (!StringUtil.isEmpty(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + iv_select1, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + SharePrefUtil.saveString(ct, Constant.photo, photo); + } + // 回显姓名 + if (!StringUtil.isEmpty(realName)) { + tv_name.setText(realName); + SharePrefUtil.saveString(ct, Constant.realName, realName); + } + // 手机号 + if (!StringUtil.isEmpty(mobile) + && ValidateUtils.isMobileNum(mobile)) { + tv_phone.setText(mobile); + SharePrefUtil.saveString(ct, Constant.mobile, mobile); + Log.d("parameterso","mobile5 ="+mobile); + } else if (!StringUtil.isEmpty(userName) + && ValidateUtils.isMobileNum(userName)) { + tv_phone.setText(userName); + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, userName);// 手机号 + SharePrefUtil.saveString(ct, Constant.mobile, userName); + } + // 性别 + if (0 == sex) { + tv_sex.setText(getResources().getString(R.string.man)); + } else { + tv_sex.setText(getResources().getString(R.string.women)); + } + // 出生日期 + if (!StringUtil.isEmpty(birthDate)) { + tv_select_birthday.setText(birthDate); + if (birthDate.length() >= 10) { + pwTime.setTime(DateUtil.str2Date(birthDate, + "yyyy-MM-dd")); + } + SharePrefUtil.saveString(ct, "birthDate", birthDate); + } + // 邮箱 + if (!StringUtil.isEmpty(email)) { + tv_email.setText(email); + SharePrefUtil.saveString(ct, "email", email); + } + // 医院名称 + if (!StringUtil.isEmpty(hospitalName)) { + tv_hospital.setText(hospitalName); + SharePrefUtil.saveString(ct, "hospitalUuid", hospitalUuid); + SharePrefUtil.saveString(ct, "hospitalName", hospitalName); + } + // 科室 + if (!StringUtil.isEmpty(officeName)) { + tv_offices.setText(officeName); + SharePrefUtil.saveString(ct, "officeUuid", officeUuid); + SharePrefUtil.saveString(ct, "officeName", officeName); + } + // 科室电话 + if (!StringUtil.isEmpty(officePhone)) { + tv_offices_phone.setText(officePhone); + SharePrefUtil.saveString(ct, "officePhone", officePhone); + } + // 职称 + if (!StringUtil.isEmpty(positionName)) { + tv_professional.setText(positionName); + SharePrefUtil.saveString(ct, "positionUuid", positionUuid); + SharePrefUtil.saveString(ct, "positionName", positionName); + } + // 资格证书编号 + if (!StringUtil.isEmpty(certificate)) { + tv_zhengshubianhao.setText(certificate); + SharePrefUtil.saveString(ct, "certificate", certificate); + } + // 证书图片 + if (!StringUtil.isEmpty(certificateImg)) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + certificateImg, iv_select2); + SharePrefUtil.saveString(ct, "certificateImg", + certificateImg); + } + // 简介 + if (!StringUtil.isEmpty(intro)) { + tv_profile.setText(intro); + SharePrefUtil.saveString(ct, "intro", intro); + } + + List special = bean.specialy;// 专长 + // 根据专长uuid进行查询专长名称 + if (special != null && special.size() > 0) { + String disease = ""; + String diseaseNames = ""; + for (int j = 0; j < special.size(); j++) { + disease += special.get(j).diseaseUuid + ","; + diseaseNames += special.get(j).diseaseName + "、"; + } + if (diseaseNames.length() > 0) { + // 去掉最后一个“、” + diseaseNames = diseaseNames.substring(0,diseaseNames.length() - 1).replace("(甲、乙、丙、丁、戊肝)",""); + } + // 专长 + tv_disease.setText(diseaseNames); + SharePrefUtil.saveString(ct, "disease", disease); + SharePrefUtil.saveString(ct, "diseaseName", diseaseNames); + LogUtil.i("disease==" + disease + "diseaseNames==" + + diseaseNames); + } + + } + closeProgressDialog(); + } else { + closeProgressDialog(); + ToastUtil.showToast("资料加载失败,请重试"); + } + } + + // 获取数据 + private void getList(final String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + officeName = tv_offices.getText().toString().trim(); + // disease = tv_disease.getText().toString().trim(); + if (modifyUrl.equals(loadUrl)) { + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + mobile = SharePrefUtil.getString(ct, "mobile", ""); + params.addBodyParameter("userName", mobile);// 真实姓名 必填 + params.addBodyParameter("type", String.valueOf(2));// 第一次修改资料填1 + //params.addBodyParameter("mobile", mobile);// 手机号 // 在我的模块修改填2 + params.addBodyParameter("diseaseUuids", disease);// 专家专长(多个专长以逗号隔开) + Log.d("parameterso","mobile ="+mobile); // 必填 + params.addBodyParameter("officeUuid", officeUuid);// 科室uuid + params.addBodyParameter("officeName", officeName);// 科室名称 + params.addBodyParameter("positionUuid", positionUuid);// 职称uuid + // params.addBodyParameter("positionName", positionName);//职称名称 + if (!StringUtil.isEmpty(photoBase64)) { + params.addBodyParameter("photo", photoBase64);// 头像(base64) + } + if (!StringUtil.isEmpty(photoBase642)) { + params.addBodyParameter("certificateImg", photoBase642);// 头像(base64) + } + if (!StringUtil.isEmpty(birthdayPost)) { + params.addBodyParameter("birthDate", birthdayPost);// 出生日期 + } + if (!StringUtil.isEmpty(emailPost)) { + params.addBodyParameter("email", emailPost);// 邮箱 + } + if (!StringUtil.isEmpty(officePhonePost)) { + params.addBodyParameter("officePhone", officePhonePost);// 科室电话 + } + if (!StringUtil.isEmpty(profilePost)) { + params.addBodyParameter("intro", profilePost);// 简介 + } + if (!StringUtil.isEmpty(diseasePost)) { + params.addBodyParameter("diseaseName", diseasePost);// 专长 + } + if (!StringUtil.isEmpty(officePost)) { + params.addBodyParameter("officeName", officePost);// 科室 + } + if (!StringUtil.isEmpty(positionPost)) { + params.addBodyParameter("positionName", positionPost);// 职称 + } + // params.addBodyParameter("sex", selectSex+"");//性别(0男 1女) + // params.addBodyParameter("mobile", phone);//手机号 + // params.addBodyParameter("provId", provinceId);//省id + // params.addBodyParameter("cityId", cityId);//市id + // params.addBodyParameter("countyId", disctictId);//区县id + // params.addBodyParameter("intro", intro);//简介 + // params.addBodyParameter("hospitalUuid", hospitalUuid);//坐诊医院uuid + // params.addBodyParameter("hospitalName", hospitalName);//坐诊医院名称 + // params.addBodyParameter("certificate", certificate);//资格证书 + // params.addBodyParameter("certificateImg", picBase642);//资格证书图片 + // (base64) + // 查看个人资料 + } else if (getExpertByUuid.equals(loadUrl)) { + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + } + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (!modifyUrl.equals(loadUrl)) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + } + processData(loadUrl, info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * F 跳转之后返回的结果 + * + * @param requestCode + * 表示是哪个Intent跳转的 + * @param resultCode + * 返回的结果码 + * @param data + * 数据 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, + final Intent data) { + super.onActivityResult(requestCode, resultCode, data); + // 邮箱 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_EMAIL) { + emailPost = data.getStringExtra("email"); + tv_email.setText(emailPost); + } + // 手机号 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHONE) { + String phone = data.getStringExtra("phone"); + SharePrefUtil.saveString(MyDetailInfoActivity.this, + Constant.mobile, phone); + tv_phone.setText(phone); + } + // 科室电话 + if (resultCode == Activity.RESULT_OK + && requestCode == TO_SELECT_OFFICEPHONE) { + officePhonePost = data.getStringExtra("officePhone"); + tv_offices_phone.setText(officePhonePost); + } + // 简介 + if (resultCode == Activity.RESULT_OK + && requestCode == TO_SELECT_PROFILE) { + profilePost = data.getStringExtra("profile"); + tv_profile.setText(profilePost); + } + // 头像 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO) { + // imageView不设null, 第一次上传成功后,第二次在选择上传的时候会报错。 + photo = data.getStringExtra(SelectedPhotoActivity.KEY_PHOTO_PATH); + photoBase64 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_BASE64); + + LogUtil.i("photo=" + photo + ", picBase64=" + photoBase64); + String imageUrl = Scheme.FILE.wrap(photo); + LogUtil.i("imageUrl==" + imageUrl); + ImageLoader.getInstance().displayImage(imageUrl, iv_select1, + ImageOptions.getImageOptions(R.drawable.add_photo_normal)); + // showProgressDialog("提交中..."); + // getList(modifyUrl,true); + } + + // 证书 + if (resultCode == Activity.RESULT_OK && requestCode == TO_SELECT_PHOTO1) { // imageView不设null, + // 第一次上传成功后,第二次在选择上传的时候会报错。 + photo2 = data.getStringExtra(SelectedPhotoActivity.KEY_PHOTO_PATH); + photoBase642 = data + .getStringExtra(SelectedPhotoActivity.KEY_PHOTO_BASE64); + + String imageUrl = Scheme.FILE.wrap(photo2); + LogUtil.i("imageUrl==" + imageUrl); + ImageLoader.getInstance().displayImage(imageUrl, iv_select2, + ImageOptions.getImageOptions(R.drawable.add_photo_normal)); + + } + + } + + // 手机返回键 + @Override + public void onBackPressed() { + // TODO Auto-generated method stub + LogUtil.i("photo=" + photo); + String wrapPhoto = null; + if (!StringUtil.isEmpty(photo)) { + wrapPhoto = Scheme.FILE.wrap(photo); + Intent intent = getIntent(); + intent.putExtra("photo", wrapPhoto); + setResult(Constant.INFO_CODE, intent); + } + // if (TextUtils.isEmpty(photoBase64) && TextUtils.isEmpty(birthdayPost) + // && TextUtils.isEmpty(emailPost) && TextUtils.isEmpty(officePhonePost) + // && TextUtils.isEmpty(profilePost)) { + // LogUtil.i("没有需要提交的"); + // }else{ + SharePrefUtil.saveString(ct, "MyChangePhoto", wrapPhoto); + submit(); + // getList(modifyUrl); + // } + super.onBackPressed(); + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + VHolder holder = (VHolder) arg1.getTag(); + + LogUtil.i("checkNum=" + checkNum + "arg2=" + arg2); + if (!holder.cb.isChecked()) { + if (checkNum >= 10) { + ToastUtil.showToast("最多选十项"); + return; + } + } + // 改变CheckBox的状态 + holder.cb.toggle(); + // 将CheckBox的选中状况记录下来 + adapter.getIsSelected().put(arg2, holder.cb.isChecked()); + // 调整选定条目 + if (holder.cb.isChecked() == true) { + checkNum++; + } else { + checkNum--; + if (checkNum < 0) { + checkNum = 0; + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadCourseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadCourseActivity.java new file mode 100644 index 0000000..58c9988 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadCourseActivity.java @@ -0,0 +1,444 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Dialog; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.io.File; +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyDownLoadCourseActivity extends BaseActivity implements + OnItemClickListener, OnItemLongClickListener { + private PullToRefreshListView ptrLv; + private TextView load_empty; + private ArrayList list = new ArrayList();; + public final static int REQUESTCODE = 222; + private static MyDownLoadCourseActivity instance; + private CourseDownLoadAdapter mAdapter; + CoursewareBookDownloadSqlManager sq; + SQLiteDatabase db; + + public static MyDownLoadCourseActivity getInstance() { + return instance; + } + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_title.setText("课件文档"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_download, null); + instance = this; + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_down);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 设置只有下拉刷新 + ptrLv.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.getRefreshableView().setOnItemLongClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + // getDownLoadList(url); + } + }); + db = openOrCreateDatabase("courseware.db", MODE_PRIVATE, null); + sq = new CoursewareBookDownloadSqlManager(db); + load_empty.setText("您暂未下载课件"); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 + */ + private void initData() { + showProgressDialog("正在加载"); + list.clear(); + ArrayList downList; + ArrayList downListold; + downList = CoursewareBookDownloadSqlManager.getDownloadInfoByState(2); + downListold= CoursewareBookDownloadSqlManager.getDownloadInfoByState(4); + if (downListold != null &&!downListold.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListold); + + } + + if (downList == null || downList.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } else { + for (int i = 0; i < downList.size(); i++) { + list.add(0, downList.get(i)); + } + if (mAdapter == null) { + mAdapter = new CourseDownLoadAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + + } else { + mAdapter.notifyDataSetChanged(); + + } + onLoaded(); + } + closeProgressDialog(); + + } + + public void notifyAdapter() { + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + + } + + // android获取一个用于打开Word文件的intent + public void openWordFile(String Path, String uuid,int position) { + File file = new File(Path); + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN, Context.MODE_PRIVATE); + String fileMD5_ = sp.getString(uuid+"fileMD5",""); + String fileMD5 = TikaUtil.getFileMD5(file); + if (TextUtils.isEmpty(fileMD5_)){ + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/msword"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + }else if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/msword"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } else { + list.remove(position); + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + } + + } + + public void openPPTFile(String Path, String uuid,int position) { + File file = new File(Path); + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN, Context.MODE_PRIVATE); + String fileMD5_ = sp.getString(uuid+"fileMD5",""); + String fileMD5 = TikaUtil.getFileMD5(file); + if (TextUtils.isEmpty(fileMD5_)){ + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + }else if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } else { + + list.remove(position); + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mAdapter.notifyDataSetChanged(); + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + } + } + + public void openPDFFile(final String path, String uuid,int position) { + File file = new File(path); + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN, Context.MODE_PRIVATE); + String fileMD5_ = sp.getString(uuid+"fileMD5",""); + String fileMD5 = TikaUtil.getFileMD5(file); + + if (TextUtils.isEmpty(fileMD5_)){ + Intent intent1 = new Intent(MyDownLoadCourseActivity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + }else if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent1 = new Intent(MyDownLoadCourseActivity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + + } else { + list.remove(position); + + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + } + + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(filePath)) { + + if(filePath.contains(Constant.OldfilePath)||list.get(p).getState()==4) + { + Intent intent = new Intent(MyDownLoadCourseActivity.getInstance(), CourseUrlDetailActivity.class); + intent.putExtra("url", list.get(p).getPath()); + intent.putExtra("title", list.get(p).getTitle()); + intent.putExtra("uuid", list.get(p).getUuid()); +// intent.putExtra("again_download",true); +// intent.putExtra("type", list.get(p).getType()); + startActivity(intent); + return; + } + if (list.get(position - 1).getFileFormat() != null + && list.get(position - 1).getFileFormat().contains("pdf")) { + openPDFFile(filePath, listUuid,p); + } else if (list.get(position - 1).getFileFormat() != null + && list.get(position - 1).getFileFormat().contains("ppt")) { + openPPTFile(filePath, listUuid,p); + } else if (list.get(position - 1).getFileFormat() != null + && list.get(position - 1).getFileFormat().contains("doc")) { + openWordFile(filePath, listUuid,p); + } + + } else { + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(p); + + CoursewareBookDownloadSqlManager.delDownladInfo(listUuid); + mAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + ToastUtil.showToast("文件不存在,请重新下载!"); + } + + } + + /** + * 打开文件 openFile + * + * @param + * @param + * + * @param position + */ + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(filePath)) { + delVisit(p, filePath, listUuid); + } else { + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(p); + + CoursewareBookDownloadSqlManager.delDownladInfo(listUuid); + mAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + ToastUtil.showToast("文件不存在!"); + } + return true; + } + + public void delVisit(final int positions, final String path, + final String uuid) { + final ECListDialog dialog = new ECListDialog(instance,new String[] { "删除文章" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + File file = new File(path); + if (file.exists()) { + file.delete(); + } + // list移除相应位置 + list.remove(positions); + + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + dialog.dismiss(); + } + }); + dialog.setTitle("删除此文章"); + dialog.show(); + } + + public class CourseDownLoadAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return list.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.activity_download_course_big); + } + else + { + convertView = UIUtils.inflate(R.layout.activity_download_course); + } + vh = new ViewHolder(); + vh.mTv = (TextView) convertView + .findViewById(R.id.tv_download_course); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv.setText(list.get(position).getTitle()); + return convertView; + } + + public class ViewHolder { + TextView mTv; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadsActivity.java new file mode 100644 index 0000000..539ee0c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownLoadsActivity.java @@ -0,0 +1,236 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyDownLoadsActivity extends BaseActivity{ + private View view; + private RelativeLayout mRl_1, mRl_2, mRl_3, mRl_4,mRl_5,mRl_6,mRl_7; + private View mV_line1, mV_line2, mV_line3, mV_line4,mV_line5,mV_line6; + private TextView mTv_title1, mTv_title2, mTv_title3, mTv_title4, mTv_title5,mTv_title6,mTv_title7; + private boolean isDownLoad = true; + private Intent getIntent; + private MyDownLoadsActivity mActivity; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_my_down_loads_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_my_down_loads); + } + mActivity = this; + initIntent(); + initView(); + initListener(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + if (getIntent().getType() != null + && getIntent().getType().equals("download")) { + needreportPage("我的下载"); + } else { + needreportPage("我的收藏"); + } + + } + + public void initIntent() { + getIntent = getIntent(); + if (getIntent.getType() != null + && getIntent.getType().equals("download")) { + top_title.setText("我的下载"); + isDownLoad = true; + } else { + top_title.setText("我的收藏"); + isDownLoad = false; + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + public void initListener() { + mRl_1.setOnClickListener(this); + mRl_2.setOnClickListener(this); + mRl_3.setOnClickListener(this); + mRl_4.setOnClickListener(this); + mRl_5.setOnClickListener(this); + mRl_6.setOnClickListener(this); + mRl_7.setOnClickListener(this); + } + + public void initView() { + mRl_1 = (RelativeLayout) view.findViewById(R.id.rl_1); + mRl_2 = (RelativeLayout) view.findViewById(R.id.rl_2); + mRl_3 = (RelativeLayout) view.findViewById(R.id.rl_3); + mRl_4 = (RelativeLayout) view.findViewById(R.id.rl_4); + mRl_5=(RelativeLayout) view.findViewById(R.id.rl_5); + mRl_6=(RelativeLayout) view.findViewById(R.id.rl_6); + mRl_7=(RelativeLayout) view.findViewById(R.id.rl_7); + mV_line1 = view.findViewById(R.id.v_line1); + mV_line2 = view.findViewById(R.id.v_line2); + mV_line3 = view.findViewById(R.id.v_line3); + mV_line4 = view.findViewById(R.id.v_line4); + mV_line5 = view.findViewById(R.id.v_line5); + mV_line6 = view.findViewById(R.id.v_line6); + mTv_title1 = (TextView) view.findViewById(R.id.tv_title1); + mTv_title2 = (TextView) view.findViewById(R.id.tv_title2); + mTv_title3 = (TextView) view.findViewById(R.id.tv_title3); + mTv_title4 = (TextView) view.findViewById(R.id.tv_title4); + mTv_title5= (TextView) view.findViewById(R.id.tv_title5); + mTv_title6= (TextView) view.findViewById(R.id.tv_title6); + mTv_title7= (TextView) view.findViewById(R.id.tv_title7); + if (isDownLoad) { + mRl_1.setVisibility(View.VISIBLE); + mRl_2.setVisibility(View.VISIBLE); + mRl_3.setVisibility(View.VISIBLE); + mRl_4.setVisibility(View.GONE); + mV_line1.setVisibility(View.VISIBLE); + mV_line2.setVisibility(View.VISIBLE); + mV_line3.setVisibility(View.VISIBLE); + + mTv_title1.setText("诊疗指南"); + mTv_title2.setText("期刊杂志"); + mTv_title3.setText("课件文档"); + if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) + { + } + else + { + mRl_2.setVisibility(View.GONE); + mV_line2.setVisibility(View.GONE); + } + } else { + mRl_1.setVisibility(View.VISIBLE); + mRl_2.setVisibility(View.VISIBLE); + mRl_3.setVisibility(View.VISIBLE); + mRl_4.setVisibility(View.VISIBLE); + mRl_5.setVisibility(View.VISIBLE); + mRl_6.setVisibility(View.VISIBLE); + mRl_7.setVisibility(View.VISIBLE); + mV_line1.setVisibility(View.VISIBLE); + mV_line2.setVisibility(View.VISIBLE); + mV_line3.setVisibility(View.VISIBLE); + mV_line4.setVisibility(View.VISIBLE); + mV_line5.setVisibility(View.VISIBLE); + mV_line6.setVisibility(View.VISIBLE); +// mTv_title1.setText("期刊杂志"); + mTv_title1.setText("英文期刊"); + mTv_title2.setText("病例荟萃"); + mTv_title3.setText("病例讨论"); + mTv_title4.setText("肝胆视频"); + mTv_title5.setText("课件文档"); + mTv_title6.setText("肝胆新闻"); + mTv_title7.setText("患教学堂"); + if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) + { + } + else + { + mRl_1.setVisibility(View.GONE); + mV_line1.setVisibility(View.GONE); + } + } + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_1) { + if (isDownLoad) { + Intent i = new Intent(mActivity, MyDownloadActivity.class); + i.putExtra("name",mTv_title1.getText().toString()); + i.setType("0"); + startActivity(i); + } else { + Intent intent = new Intent(mActivity, MyWFArticleActivity.class); + intent.putExtra("name",mTv_title1.getText().toString()); + intent.setType("收藏"); + startActivity(intent); + } + } else if (id == R.id.rl_2) { + if (isDownLoad) { + Intent intent = new Intent(mActivity, MyWFArticleActivity.class); + intent.putExtra("name",mTv_title2.getText().toString()); + intent.setType("下载"); + startActivity(intent); + } else { + Intent intent = new Intent(mActivity, + MyCollectBIngliActivity.class); + intent.putExtra("name",mTv_title2.getText().toString()); + startActivity(intent); + } + } else if (id == R.id.rl_3) { + if (isDownLoad) { + startActivity(new Intent(mActivity, + MyDownLoadCourseActivity.class)); + } else { + startActivity(new Intent(mActivity, + CasediscussioncollentActivity.class).putExtra("name",mTv_title3.getText().toString())); + } + } else if (id == R.id.rl_4) { + if (isDownLoad) { + + } else { + startActivity(new Intent(mActivity, CoollectVideoActivity.class).putExtra("name",mTv_title4.getText().toString())); + } + } else if (id == R.id.rl_5) { + if (isDownLoad) { + + } else { + startActivity(new Intent(mActivity, CoollectCourseActivity.class)); + } + } else if (id == R.id.rl_6) { + if (isDownLoad) { + + } else { + startActivity(new Intent(mActivity, CoollectNewsActivity.class).putExtra("name",mTv_title6.getText().toString())); + } + } else if (id == R.id.rl_7) { + if (isDownLoad) { + + } else { + startActivity(new Intent(mActivity, CoollectTeachActivity.class).putExtra("name",mTv_title7.getText().toString())); + } + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownloadActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownloadActivity.java new file mode 100644 index 0000000..6f6dee3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyDownloadActivity.java @@ -0,0 +1,643 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import java.io.File; +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MyDownloadAdapter; +import cn.shangyu.gdxzExpert.adapter.WFArticleDownloadAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.WFBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyDownloadActivity.java + * + * @author liufang + * @date 2015-11-5 下午2:15:06 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆->我的下载页面 + */ +public class MyDownloadActivity extends BaseActivity implements + OnItemClickListener, OnItemLongClickListener { + private PullToRefreshListView ptrLv; + private TextView load_empty; + private WFArticleDownloadAdapter mWFAdapter; + private MyDownloadAdapter mAdapter; + private ArrayList list = new ArrayList(); + public final static int REQUESTCODE = 222; + private static MyDownloadActivity instance; + + public static MyDownloadActivity getInstance() { + return instance; + } +// private Boolean reinitdata=false; + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("我的下载"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_download_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_download, null); + } + instance = this; + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_down);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 设置只有下拉刷新 + ptrLv.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.getRefreshableView().setOnItemLongClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + // getDownLoadList(url); + } + }); + initIntent(); + initData(); + return view; + } + + Intent getIntent; + String type; + + public void initIntent() { + getIntent = getIntent(); + type = getIntent.getType(); + if (type.equals("1")) { + load_empty.setText("您暂未下载期刊"); + } else { + load_empty.setText("您暂未下载指南"); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 + */ + private void initData() { + showProgressDialog("正在加载"); + ArrayList downList; + ArrayList downListold; + ArrayList downListnow; + list.clear(); + if (type.equals("1")) { + downList = WFBookDownloadSqlManager.getDownloadInfoByState(2); + } else { + downList = BookDownloadSqlManager.getDownloadInfoByState(2); + downListold= BookDownloadSqlManager.getDownloadInfoByState(4); + downListnow= BookDownloadSqlManager.getDownloadInfoByState(5); + if (downListold != null &&!downListold.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListold); + + } + if (downListnow != null &&!downListnow.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListnow); + + } + } + + if (downList == null || downList.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } else { + /* + * for (int i = 0; i < downList.size(); i++) { + * LogUtil.i("数据库取出uuid=" + * +downList.get(i).getUuid()+"getTime=="+downList + * .get(i).getTime()+"getTime==" + * +downList.get(i).getTime()+"getState==" + * +downList.get(i).getState()); } + */ + for (int i = 0; i < downList.size(); i++) { + list.add(0, downList.get(i)); + } + if (mAdapter == null) { + if (type.equals("1")) { + mWFAdapter = new WFArticleDownloadAdapter(list); + ptrLv.getRefreshableView().setAdapter(mWFAdapter); + } else { + mAdapter = new MyDownloadAdapter(ct, list); + ptrLv.getRefreshableView().setAdapter(mAdapter); + + } + + } else { + if (type.equals("1")) { + mWFAdapter.notifyDataSetChanged(); + } else { + + mAdapter.notifyDataSetChanged(); + } + + } + onLoaded(); + } + closeProgressDialog(); + + } +// private void reinitdata() +// { +// list.clear(); +// downList = BookDownloadSqlManager.getDownloadInfoByState(2); +// downListold= BookDownloadSqlManager.getDownloadInfoByState(4); +// downListnow= BookDownloadSqlManager.getDownloadInfoByState(5); +// if (downListold != null &&!downListold.isEmpty()) +// { +// if (downList == null || downList.isEmpty()) +// { +// downList=new ArrayList<>(); +// } +// downList.addAll(downListold); +// +// } +// if (downListnow != null &&!downListnow.isEmpty()) +// { +// if (downList == null || downList.isEmpty()) +// { +// downList=new ArrayList<>(); +// } +// downList.addAll(downListnow); +// +// } +// for (int i = 0; i < downList.size(); i++) { +// list.add(0, downList.get(i)); +// } +// notifyAdapter(); +// } + public void notifyAdapter() { + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + Log.d("gdxzdownloda","onItemClick "+list.size()+" p "+p); + String listUuid = list.get(p).getUuid(); + String filePath = BookDownloadSqlManager.getDownloadFilePath(listUuid); + + if (!TextUtils.isEmpty(filePath)) { + // openFile(filePath, listUuid, p); + if (type.equals("1")) { + Intent intent = new Intent(instance, BookDetailActivity.class); + intent.putExtra("libraryUuid", listUuid); + startActivity(intent); + } else { + openFile(filePath, listUuid, p, Url.urlHtml +list.get(p).getPath(), + list.get(p).getTitle()); + } + } else { + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(p); + if (type.equals("1")) { + WFBookDownloadSqlManager.delDownladInfo(listUuid); + mWFAdapter.notifyDataSetChanged(); + } else { + BookDownloadSqlManager.delDownladInfo(listUuid); + mAdapter.notifyDataSetChanged(); + } + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + ToastUtil.showToast("文件不存在,请重新下载!"); + } + + } + public void showDialog(int position,String url,String name) + { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(MyDownloadActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog4.dismiss(); + downloadPdfen(url,name,position); + + } + }); + } + + + /** + * 打开文件 openFile + * + * @param path + * @param listUuid + * void + * @param position + */ + public void openFile(final String path, String listUuid, int position,String url,String name) { + if(path.contains(Constant.OldfilePath)) + { + if(list.get(position).getState()==5) + { + ToastUtil.showToast("下载中..."); + } + else + { + downloadPdfen(url,name,position); + } +// showDialog(position,url,name); + return; + } + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + startActivity(intent1); + }else{ + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } + + + +// Uri path1 = Uri.fromFile(file); +// Intent intent = new Intent(Intent.ACTION_VIEW); +// intent.setDataAndType(path1, "application/pdf"); +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); +// try { +// startActivity(intent); +// } catch (ActivityNotFoundException e) { +// ToastUtil.showToast("打开失败,不支持此格式书籍!"); +// } + } else { // 文件不存在,则进行把此数据从数据库清除 + // DownloadModel downloadModel = new DownloadModel(listUuid); + // downloadModel.setState(0); + // BookDownloadSqlManager.updateDownloadState(downloadModel); + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(position); + if (type.equals("1")) { + mWFAdapter.notifyDataSetChanged(); + WFBookDownloadSqlManager.delDownladInfo(listUuid); + } else { + mAdapter.notifyDataSetChanged(); + BookDownloadSqlManager.delDownladInfo(listUuid); + } + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + LogUtil.i("listUuid=" + listUuid); + ToastUtil.showToast("文件已删除,请重新下载!"); + } + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(filePath)) { + delVisit(p, filePath, listUuid); + } else { + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(p); + if (type.equals("1")) { + WFBookDownloadSqlManager.delDownladInfo(listUuid); + mWFAdapter.notifyDataSetChanged(); + } else { + BookDownloadSqlManager.delDownladInfo(listUuid); + mAdapter.notifyDataSetChanged(); + } + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + ToastUtil.showToast("文件不存在!"); + } + return true; + } + + public void delVisit(final int positions, final String path, + final String uuid) { + final ECListDialog dialog = new ECListDialog(instance, + new String[] { "删除文章" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + File file = new File(path); + if (file.exists()) { + file.delete(); + } + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(positions); + if (type.equals("1")) { + WFBookDownloadSqlManager.delDownladInfo(uuid); + mWFAdapter.notifyDataSetChanged(); + } else { + BookDownloadSqlManager.delDownladInfo(uuid); + mAdapter.notifyDataSetChanged(); + } + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + dialog.dismiss(); + } + }); + dialog.setTitle("删除此文章"); + dialog.show(); + } + private String filePathnew =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/治疗指南/"; + private HttpHandler hand; + /** + * @param + * + * + */ + protected void downloadPdfen(String url, final String name,final int position) { +// MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_DOWNLOAD); + // TODO Auto-generated method stub + if(StringUtil.isEmpty(url)) + { + ToastUtil.showToast("下载地址有误"+url); + return; + } + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePathnew + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(list + .get(position).getUuid()); + downloadModel.setFilePath(path); + downloadModel.setState(5);// 0未下载,1下载中,2已下载 + list.get(position).setState(5); + BookDownloadSqlManager + .updateDownloadState(downloadModel); + mAdapter.notifyDataSetChanged(); + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onSuccess(ResponseInfo responseInfo) { + ToastUtil.showToast(name + "下载完成!"); +// Log.d("gdxzdownloda","position "+position); + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(list + .get(position).getUuid()); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + + BookDownloadSqlManager + .updateDownloadState(downloadModel); + BookDownloadSqlManager.updateDownloadFilePath(downloadModel); + if (MyDownloadActivity.getInstance() != null) { + MyDownloadActivity.getInstance() + .notifyAdapter(); + } +// mAdapter.notifyDataSetChanged(); +// DownloadModel modeltmp=list.stream().filter(new Predicate() { +// @Override +// public boolean test(DownloadModel downloadModel1) { +// return downloadModel.getUuid().equals(downloadModel1.getUuid()); +// } +// }).findAny().orElse(null); +// if(modeltmp!=null) +// {modeltmp.setState(2); +// modeltmp.setFilePath(path); +// updatedata(); +// } +// updatedata(); +// mAdapter.notifyDataSetChanged(); + +// list.get(position).setState(2); +// list.get(position).setFilePath(path); +// initData(); + // 打开文件 +// openFile(path,"",position,"",""); +// + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(list + .get(position).getUuid()); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + if (MyDownloadActivity.getInstance() != null) { + MyDownloadActivity.getInstance() + .notifyAdapter(); + } +// updatedata(); + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + + public void updatedata() { + this.runOnUiThread(new Runnable() { + + @Override + public void run() { + list.clear(); + Log.d("gdxzdownloda","list "+list.size()); + mAdapter = new MyDownloadAdapter(ct, list); + ptrLv.getRefreshableView().setAdapter(mAdapter); + mAdapter.notifyDataSetChanged(); + } + + }); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFlowerActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFlowerActivity.java new file mode 100644 index 0000000..b59de22 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFlowerActivity.java @@ -0,0 +1,381 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ExpertFlowerList; +import cn.shangyu.gdxzExpert.bean.ExpertFlowerList.mindList.expertFlower; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyFlowerActivity.java + * + * @author jx + * @date2015.10.19 我收到的鲜花二级显示界面(显示送花数量与日期) + */ +public class MyFlowerActivity extends BaseActivity implements OnCallBackFromNet { + public static String flowerOrderRecordlUrl = Url.getExpertFlowerList; + private PullToRefreshListView lv_flower; + private TextView tv_tota; + private TextView tv_qt; + private String expertUuid; + private LinearLayout ll_empty; + private int page = 1; + private List list = new ArrayList(); + private MyfAdapter mAdapter; + + @Override + public void setTitle() { + top_title.setText("我的鲜花"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_flower_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_flower, null); + } + lv_flower = (PullToRefreshListView) view.findViewById(R.id.lv_flower); + tv_qt = (TextView) view.findViewById(R.id.tv_quantity);// 鲜花总数 + tv_tota = (TextView) view.findViewById(R.id.tv_totalPrice);// 价格总数 + + // 加载布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“您暂未收到鲜花” + tv_empty_msg.setText("您暂未收到鲜花"); + + // Intent intent = getIntent(); + + // String totalFolwerPrice = intent.getStringExtra("totalFolwerPrice"); + // if (!TextUtils.isEmpty(totalFolwerPrice)) { + // tv_tota.setText(":" + totalFolwerPrice); + // } + // String totalFolwerCount = intent.getStringExtra("totalFolwerCount"); + // if (!TextUtils.isEmpty(totalFolwerCount)) { + // tv_qt.setText(":" + totalFolwerCount); + // } + lv_flower.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getFlowerData(flowerOrderRecordlUrl); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getFlowerData(flowerOrderRecordlUrl); + } + }); + initData(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("我的鲜花"); + } + + private void initData() { + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + String flowerOrderRecord = SharePrefUtil.getString(ct, + flowerOrderRecordlUrl, null); + if (TextUtils.isEmpty(flowerOrderRecord)) { + showLoadingProgress(); + getFlowerData(flowerOrderRecordlUrl); + } else { + processData(flowerOrderRecord); + getFlowerData(flowerOrderRecordlUrl); + } + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity","resultCode "+resultJson); + switch (resultCode) + { + case 101: + SharePrefUtil.saveString(ct, flowerOrderRecordlUrl,resultJson); + processData(resultJson); + break; + } + + } + + class MyfAdapter extends BaseAdapter { + List list; + + public MyfAdapter(List data) { + this.list = data; + // TODO Auto-generated constructor stub + } + + public void getDate(List data) { + this.list = data; + // TODO Auto-generated constructor stub + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder = null; + if (convertView == null) { + // 找到自定义item布局 并赋值给 convertView + if(CommonUtil.BigModule()) + { + convertView = View.inflate(ct, R.layout.item_my_flower_big, null); + } + else + { + convertView = View.inflate(ct, R.layout.item_my_flower, null); + } + mHolder = new NewsViewHolder(); + mHolder.ll_flowers = (LinearLayout) convertView + .findViewById(R.id.ll_flowers); + mHolder.tvname = (TextView) convertView + .findViewById(R.id.tv_names); + mHolder.count = (TextView) convertView + .findViewById(R.id.tv_counts); + mHolder.cratdate = (TextView) convertView + .findViewById(R.id.tv_dates); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + mHolder.tvname.setText(list.get(position).getPatient_name()); + mHolder.count.setText(list.get(position).getNum()); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + +// String sd = sdf.format(new Date(Long.parseLong(list.get(position) +// .getPay_time()) * 1000)); +// mHolder.cratdate.setText(sd); + mHolder.cratdate.setText(list.get(position).getCreate_date().substring(0, 10)); + // totalPrice =list.get(position).totalPrice; + // tv_tota.setText(":"+totalPrice); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class NewsViewHolder { + public LinearLayout ll_flowers; + public TextView cratdate; + public TextView count; + public TextView tvname; + } + } + + /** + * 请求服务器。获取我的鲜花数据 getFlowerData + * + * @param loadUrl + * void + */ + private void getFlowerData(final String loadUrl) { + Map param = new HashMap(); + param.put("page", page + ""); + sendJsonPostParamtoNetSignMD5(loadUrl, param, 101,this ); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("expert_uuid", expertUuid);// 向服务器传递专家uuid +// params.addBodyParameter("page", page + ""); +// HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(ct, loadUrl, info.result); +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// dismissLoadingProgress(); +// lv_flower.setEmptyView(ll_empty); +// ToastUtil.showMessage("网络连接失败,请稍候再试!"); +// } +// }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_flower.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + lv_flower.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + ExpertFlowerList bean = GsonTools.fromGsonToBean(result, + ExpertFlowerList.class); + // tv_qt.setText(" " + String.format("%.2f", bean.flowerNumTotal / + // 100)); + if(bean==null||bean.data==null) + { + return; + } + if(!"200".equals(bean.code)) + { + ToastUtil.showToast(bean.message); + return; + } + tv_qt.setText(" " + String.valueOf(bean.data.total_num)); + if(CommonUtil.BigModule()) + { + tv_tota.setText(" " + + String.format("%.2f", bean.data.total_amount / 100)+"元"); + } + else + { + tv_tota.setText(" " + + String.format("%.2f", bean.data.total_amount / 100)); + } + + + dismissLoadingProgress(); + + if ("200".equals(bean.code)) { + if (page == 1) { + list.clear(); + + if (bean == null || bean.data == null||bean.data.flower_data==null + || bean.data.flower_data.list.size() == 0) { + // lv_flower.setEmptyView(ll_empty); + ll_empty.setVisibility(View.VISIBLE); + // 完成刷新 + onLoaded(); + setLastUpdateTime(); + // 如果此处不做处理 数据为空的时候就不会在执行下一步 + + return; + } else { + list.addAll(bean.data.flower_data.list); + } + } else { + list.addAll(bean.data.flower_data.list); + } + if (mAdapter == null) { + mAdapter = new MyfAdapter(list); + lv_flower.setAdapter(mAdapter); + } else { + mAdapter.getDate(list); + mAdapter.notifyDataSetChanged(); + } + + } else { + lv_flower.setEmptyView(ll_empty); + ToastUtil.showToast(bean.message); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.data.flower_data.pages; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + lv_flower.setMode(Mode.PULL_FROM_START); + + } else { + lv_flower.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFuliCardActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFuliCardActivity.java new file mode 100644 index 0000000..8ffe825 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyFuliCardActivity.java @@ -0,0 +1,711 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Url.myWelfareCard; + +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.FuCardBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class MyFuliCardActivity extends BaseActivity implements OnCallBackFromNet { + + private View view,ll_empty,ll_empty1; + + PullToRefreshListView ptrLv; + private int page=1; + RelativeLayout r_duifuli,r_top; + TextView tv_total,tv_help; +// Boolean isfirst=true; + + @Override + public void setTitle() { + top_title.setText("我的福利卡"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setTextSize(18); + top_right_text.setText("帮助说明"); + top_right_text.setOnClickListener(this); + } + + } + + @Override + public View onCreateSuccessedView() { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_my_fili_card_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_my_fili_card); + } + r_duifuli=view.findViewById(R.id.r_duifuli); + r_duifuli.setOnClickListener(this); + r_top=view.findViewById(R.id.r_top); + r_top.setOnClickListener(this); + tv_help=view.findViewById(R.id.tv_help); + tv_help.setOnClickListener(this); + ptrLv=view.findViewById(R.id.pulltoRefreshListview); + tv_total=view.findViewById(R.id.tv_total); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + ll_empty1=view.findViewById(R.id.ll_empty1); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page=1; + getCard(page+""); + + + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getCard(page+""); + + + } + }); + getCard(page+""); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("福利卡兑换"); + } + + private void getCard(String page) + { + + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("page",page); + sendJsonPostParamtoNetSignMD5(myWelfareCard,param,101,this); + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.r_duifuli: + Intent intent=new Intent(MyFuliCardActivity.this,DuiFuliActivity.class); + startActivity(intent); + break; + case R.id.top_right_text: + case R.id.tv_help: + Intent intent2=new Intent(MyFuliCardActivity.this,WebActivity.class); + intent2.putExtra("url","https://oss.igandan.com/html/welfare_qw.html"); + intent2.putExtra("title","帮助说明"); + intent2.putExtra("need_share","0"); + startActivity(intent2); +// Intent broadc = new Intent(MyFuliCardActivity.this, Webviewa.class); +// broadc.putExtra("url","https://oss.igandan.com/html/welfare_qw.html"); +// broadc.putExtra("title","帮助说明"); +// broadc.setType("qiandao"); +// startActivity(broadc); + break; + case R.id.r_top: + Intent intent1=new Intent(MyFuliCardActivity.this,MyWelfAreActivity.class); + intent1.putExtra("changeFragment",2); + startActivity(intent1); + break; + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + + + FuCardBean fuCardBean; + List datas=new ArrayList<>(); + FuliAdapter fuliAdapter; + // 用户记住CheckBox的状态 + private Map selectStausr; + private Map selectStausl; + private Map selectStaus1; + private Map selectStaus2; + private Map selectStaus3; + private Map selectStausn; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + fuCardBean= GsonTools.fromGsonToBean(resultJson, FuCardBean.class); + if ("200".equals(fuCardBean.getCode())) { + tv_total.setText("已兑换"+fuCardBean.getData().getTotal()+"张"+"\n查看现有权益"); + datas.clear(); + if(page==1) + { + + if (fuCardBean.getData() == null || fuCardBean.getData().getList()== null||fuCardBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + ll_empty1.setVisibility(View.VISIBLE); + // 完成刷新 + onLoaded1(); + return; + } else { + datas.addAll(fuCardBean.getData().getList()); + } + } + else { + ll_empty1.setVisibility(View.GONE); + datas.addAll(fuCardBean.getData().getList()); + } + selectStausr= new HashMap(); + selectStausl= new HashMap(); + selectStaus1= new HashMap(); + selectStaus2= new HashMap(); + selectStaus3= new HashMap(); + selectStausn= new HashMap();; + // 初始状态全部为不选中状态,故设为false + for (int i = 0; i < datas.size(); i++) { + // 使用当前的位置作为key,boolean作为value + selectStausr.put(i, null); + selectStausl.put(i, null); + selectStaus1.put(i, null); + selectStaus2.put(i, null); + selectStaus3.put(i, null); + selectStausn.put(i,0); + + } + if (fuliAdapter == null) { + fuliAdapter = new FuliAdapter(datas); +// fuliAdapter.setOnRightItemClickListener(new OnRightViewItemClickListener() { +// @Override +// public void onRightItemClick(int position) { +// /**获取指定位置view对象**/ +//// View view = ptrLv.getChildAt(position ); +//// getView(position, view, listView); +// } +// }); + ptrLv.getRefreshableView().setAdapter(fuliAdapter); + } else { +// isfirst=false; + fuliAdapter.notifyDataSetChanged(); + } + onLoaded1(); + if (page > 1) { + // 是否有更多 + if (fuCardBean.getData() == null || fuCardBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = fuCardBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(fuCardBean.getMessage() + ""); + } + break; + } + + } + private void onLoaded1() { + + ptrLv.onRefreshComplete(); + } + + public class FuliAdapter extends BaseAdapter { + List datas = new ArrayList<>(); +// int number = 0; + +// public FuliAdapter(List datas, List> lists, int number) { +// this.datas = datas; +//// this.lists=lists; +// this.number = number; +// } + + public FuliAdapter(List datas) { + this.datas = datas; + +// this.number = number; + } + + private ViewHolder holder; + + // List>lists=new ArrayList<>(); + @Override + public int getCount() { + return datas.size(); + } + + @Override + public Object getItem(int position) { + return datas.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + holder = null; + if (view == null) { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fucard_item_big); + } + else + { + view = UIUtils.inflate(R.layout.fucard_item); + } + holder = new ViewHolder(); + holder.tv_time = view.findViewById(R.id.tv_time); + holder.im_l = view.findViewById(R.id.im_ll); + holder.im_r = view.findViewById(R.id.im_rr); + holder.tv_1 = view.findViewById(R.id.tv_1); + holder.tv_2 = view.findViewById(R.id.tv_2); + holder.tv_3 = view.findViewById(R.id.tv_3); + holder.tv_cardid=view.findViewById(R.id.tv_cardid); + view.setTag(holder); + } else { + holder = (ViewHolder) view.getTag(); + } + holder.tv_cardid.setText("卡号:"+datas.get(position).getIdcard()); + holder.tv_time.setText("兑换时间:"+datas.get(position).getExchange_date()); + List> lists = new ArrayList<>(); + if (datas.get(position).getWelfare_list() != null && datas.get(position).getWelfare_list().size() > 3) { + lists.clear(); + int i = 1; + + for (int j = 0; Math.abs(Math.ceil(datas.get(position).getWelfare_list().size() / 3.0 - j)) > 0.1; j++) { + List list = new ArrayList<>(); + for (; i <= datas.get(position).getWelfare_list().size(); i++) { + list.add(datas.get(position).getWelfare_list().get(i - 1)); + if (i % 3 == 0) { + i++; + break; + } + } + lists.add(list); + } +// final int[] num = {0}; + holder.im_r.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + notifyDataSetChanged(ptrLv,position); +// mOnrightClickListener.onRightItemClick(position); +// holder.im_l.setVisibility(View.VISIBLE); +// if (num[0] < lists.size() - 1) { +// num[0]++; +// holder.im_r.setVisibility(View.VISIBLE); +// holder.tv_1.setText(num[0] * 3 + 1 + "、" + lists.get(num[0]).get(0).getType_name() + lists.get(num[0]).get(0).getNum() + lists.get(num[0]).get(0).getType_unit()); +// holder.tv_2.setText(num[0] * 3 + 2 + "、" + lists.get(num[0]).get(1).getType_name() + lists.get(num[0]).get(1).getNum() + lists.get(num[0]).get(1).getType_unit()); +// holder.tv_3.setText(num[0] * 3 + 3 + "、" + lists.get(num[0]).get(2).getType_name() + lists.get(num[0]).get(2).getNum() + lists.get(num[0]).get(2).getType_unit()); +// +// } +// if (num[0] >= lists.size() - 1) { +// holder.im_r.setVisibility(View.INVISIBLE); +// } + + + } + }); + holder.im_l.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + notifyDataSetChanged1(ptrLv,position); +// holder.im_r.setVisibility(View.VISIBLE); +// if (num[0] > 0) { +// num[0]--; +// holder.tv_1.setText(num[0] * 3 + 1 + "、" + lists.get(num[0]).get(0).getType_name() + lists.get(num[0]).get(0).getNum() + lists.get(num[0]).get(0).getType_unit()); +// holder.tv_2.setText(num[0] * 3 + 2 + "、" + lists.get(num[0]).get(1).getType_name() + lists.get(num[0]).get(1).getNum() + lists.get(num[0]).get(1).getType_unit()); +// holder.tv_3.setText(num[0] * 3 + 3 + "、" + lists.get(num[0]).get(2).getType_name() + lists.get(num[0]).get(2).getNum() + lists.get(num[0]).get(2).getType_unit()); +// +// +// } +// if (num[0] > 0) { +// holder.im_l.setVisibility(View.VISIBLE); +// +// } else { +// holder.im_l.setVisibility(View.INVISIBLE); +// } + + } + }); + + if(selectStausr.get(position)==null||selectStausr.get(position)) + { + // 记录状态改变了 + selectStausr.put(position,true); + holder.im_r.setVisibility(View.VISIBLE); + } + else + { + holder.im_r.setVisibility(View.INVISIBLE); + } + if(selectStausl.get(position)!=null&&selectStausl.get(position)) + { + holder.im_l.setVisibility(View.VISIBLE); + } + else + { + selectStausl.put(position,false); + holder.im_l.setVisibility(View.INVISIBLE); + } + + +// holder.im_r.setVisibility(View.VISIBLE); +// holder.im_l.setVisibility(View.INVISIBLE); + if(selectStaus1.get(position)==null) + { + holder.tv_1.setText(1+"、"+ lists.get(0).get(0).getType_name() + lists.get(0).get(0).getNum() + lists.get(0).get(0).getType_unit()); + holder.tv_2.setText( 2+"、"+ lists.get(0).get(1).getType_name() + lists.get(0).get(1).getNum() + lists.get(0).get(1).getType_unit()); + holder.tv_3.setText( 3+"、"+ lists.get(0).get(2).getType_name() + lists.get(0).get(2).getNum() + lists.get(0).get(2).getType_unit()); + selectStaus1.put(position, holder.tv_1.getText().toString()); + selectStaus2.put(position, holder.tv_2.getText().toString()); + selectStaus3.put(position, holder.tv_3.getText().toString()); + } + else + { + holder.tv_1.setText(selectStaus1.get(position)); + holder.tv_2.setText(selectStaus2.get(position)); + holder.tv_3.setText(selectStaus3.get(position)); + } + + + } else if (datas.get(position).getWelfare_list() != null && datas.get(position).getWelfare_list().size() > 0) { +// holder.im_l.setVisibility(View.INVISIBLE); +// holder.im_r.setVisibility(View.INVISIBLE); + if(selectStausr.get(position)==null||!selectStausr.get(position)) + { + // 记录状态改变了 + selectStausr.put(position,false); + holder.im_r.setVisibility(View.INVISIBLE); + } + else + { + holder.im_r.setVisibility(View.VISIBLE); + } + if(selectStausl.get(position)==null||!selectStausl.get(position)) + { + selectStausl.put(position,false); + holder.im_l.setVisibility(View.INVISIBLE); + + } + else + { + holder.im_l.setVisibility(View.VISIBLE); + } + + lists.clear(); + int i = 1; + List list = new ArrayList<>(); + for (; i <= datas.get(position).getWelfare_list().size(); i++) { + list.add(datas.get(position).getWelfare_list().get(i - 1)); + + } + lists.add(list); + switch (datas.get(position).getWelfare_list().size()) { + case 1: + if(selectStaus1.get(position)==null) + { + holder.tv_1.setText(1+"、"+ lists.get(0).get(0).getType_name() + lists.get(0).get(0).getNum() + lists.get(0).get(0).getType_unit()); + holder.tv_2.setText( ""); + holder.tv_3.setText(""); + selectStaus1.put(position, holder.tv_1.getText().toString()); + + + } + else + { + holder.tv_1.setText(selectStaus1.get(position)); + holder.tv_2.setText(""); + holder.tv_3.setText(""); + } + break; + case 2: + if(selectStaus1.get(position)==null) + { + holder.tv_1.setText(1+"、"+ lists.get(0).get(0).getType_name() + lists.get(0).get(0).getNum() + lists.get(0).get(0).getType_unit()); + holder.tv_2.setText( 2+"、"+ lists.get(0).get(1).getType_name() + lists.get(0).get(1).getNum() + lists.get(0).get(1).getType_unit()); + holder.tv_3.setText(""); + selectStaus1.put(position, holder.tv_1.getText().toString()); + selectStaus2.put(position, holder.tv_2.getText().toString()); + + } + else + { + holder.tv_1.setText(selectStaus1.get(position)); + holder.tv_2.setText(selectStaus2.get(position)); + holder.tv_3.setText(""); + } +// holder.tv_1.setText("1、" + lists.get(0).get(0).getType_name() + lists.get(0).get(0).getNum() + lists.get(0).get(0).getType_unit()); +// holder.tv_2.setText("2、" + lists.get(0).get(1).getType_name() + lists.get(0).get(1).getNum() + lists.get(0).get(1).getType_unit()); + break; + case 3: + if(selectStaus1.get(position)==null) + { + holder.tv_1.setText(1+"、"+ lists.get(0).get(0).getType_name() + lists.get(0).get(0).getNum() + lists.get(0).get(0).getType_unit()); + holder.tv_2.setText( 2+"、"+ lists.get(0).get(1).getType_name() + lists.get(0).get(1).getNum() + lists.get(0).get(1).getType_unit()); + holder.tv_3.setText( 3+"、"+ lists.get(0).get(2).getType_name() + lists.get(0).get(2).getNum() + lists.get(0).get(2).getType_unit()); + selectStaus1.put(position, holder.tv_1.getText().toString()); + selectStaus2.put(position, holder.tv_2.getText().toString()); + selectStaus3.put(position, holder.tv_3.getText().toString()); + } + else + { + holder.tv_1.setText(selectStaus1.get(position)); + holder.tv_2.setText(selectStaus2.get(position)); + holder.tv_3.setText(selectStaus3.get(position)); + } +// holder.tv_1.setText("1、" + lists.get(0).get(0).getType_name() + lists.get(0).get(0).getNum() + lists.get(0).get(0).getType_unit()); +// holder.tv_2.setText("2、" + lists.get(0).get(1).getType_name() + lists.get(0).get(1).getNum() + lists.get(0).get(1).getType_unit()); +// holder.tv_3.setText("3、" + lists.get(0).get(2).getType_name() + lists.get(0).get(2).getNum() + lists.get(0).get(2).getType_unit()); + break; + } + + } + return view; + + } + /** + * 局部更新数据,调用一次getView()方法;Google推荐的做法 + * + * @param listView 要更新的listview + * @param position 要更新的位置 + */ + public void notifyDataSetChanged1(PullToRefreshListView listView, int position) { + /**第一个可见的位置**/ + int firstVisiblePosition = listView.getRefreshableView().getFirstVisiblePosition(); + /**最后一个可见的位置**/ + int lastVisiblePosition = listView.getRefreshableView().getLastVisiblePosition(); + +// /**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/ +// if (position >= firstVisiblePosition && position <= lastVisiblePosition) { +// /**获取指定位置view对象**/ + View view = listView.getRefreshableView().getChildAt(position - firstVisiblePosition + 1); + if (view != null)//对View进行操作,这里换成你自己的需求 + { + List> lists = new ArrayList<>(); + if (datas.get(position).getWelfare_list() != null && datas.get(position).getWelfare_list().size() > 3) { + lists.clear(); + int i = 1; + + for (int j = 0; Math.abs(Math.ceil(datas.get(position).getWelfare_list().size() / 3.0 - j)) > 0.1; j++) { + List list = new ArrayList<>(); + for (; i <= datas.get(position).getWelfare_list().size(); i++) { + list.add(datas.get(position).getWelfare_list().get(i - 1)); + if (i % 3 == 0) { + i++; + break; + } + } + lists.add(list); + } + } + + ViewHolder holder = (ViewHolder) view.getTag(); +// if(selectStausr.get(position)==null) +// { +// holder.num[0]=0; +// } + // 记录状态改变了 + selectStausr.put(position,true); + + holder.im_r.setVisibility(View.VISIBLE); + if (selectStausn.get(position) >0) { + int t=selectStausn.get(position); + t--; + selectStausn.put(position,t); +// holder.num[0]--; +// holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); +// holder.tv_2.setText(selectStausn.get(position) * 3 + 2 + "、" + lists.get(selectStausn.get(position) ).get(1).getType_name() + lists.get(selectStausn.get(position) ).get(1).getNum() + lists.get(selectStausn.get(position) ).get(1).getType_unit()); +// holder.tv_3.setText(selectStausn.get(position) * 3 + 3 + "、" + lists.get(selectStausn.get(position) ).get(2).getType_name() + lists.get(selectStausn.get(position) ).get(2).getNum() + lists.get(selectStausn.get(position) ).get(2).getType_unit()); + switch (lists.get(selectStausn.get(position)).size()) + { + case 3: + holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); + holder.tv_2.setText(selectStausn.get(position) * 3 + 2 + "、" + lists.get(selectStausn.get(position) ).get(1).getType_name() + lists.get(selectStausn.get(position) ).get(1).getNum() + lists.get(selectStausn.get(position) ).get(1).getType_unit()); + holder.tv_3.setText(selectStausn.get(position) * 3 + 3 + "、" + lists.get(selectStausn.get(position) ).get(2).getType_name() + lists.get(selectStausn.get(position) ).get(2).getNum() + lists.get(selectStausn.get(position) ).get(2).getType_unit()); + break; + case 2: + holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); + holder.tv_2.setText(selectStausn.get(position) * 3 + 2 + "、" + lists.get(selectStausn.get(position) ).get(1).getType_name() + lists.get(selectStausn.get(position) ).get(1).getNum() + lists.get(selectStausn.get(position) ).get(1).getType_unit()); + holder.tv_3.setText(""); + break; + case 1: + holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); + holder.tv_2.setText(""); + holder.tv_3.setText(""); + break; + + } + } + if (selectStausn.get(position) > 0) { + selectStausl.put(position,true); + holder.im_l.setVisibility(View.VISIBLE); + + } else { + selectStausl.put(position,false); + holder.im_l.setVisibility(View.INVISIBLE); + + } + selectStaus1.put(position, holder.tv_1.getText().toString()); + selectStaus2.put(position, holder.tv_2.getText().toString()); + selectStaus3.put(position, holder.tv_3.getText().toString()); + } + } + /** + * 局部更新数据,调用一次getView()方法;Google推荐的做法 + * + * @param listView 要更新的listview + * @param position 要更新的位置 + */ + public void notifyDataSetChanged(PullToRefreshListView listView, int position) { + /**第一个可见的位置**/ + int firstVisiblePosition = listView.getRefreshableView().getFirstVisiblePosition(); + /**最后一个可见的位置**/ + int lastVisiblePosition = listView.getRefreshableView().getLastVisiblePosition(); + +// /**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/ +// if (position >= firstVisiblePosition && position <= lastVisiblePosition) { +// /**获取指定位置view对象**/ + View view = listView.getRefreshableView().getChildAt(position - firstVisiblePosition+1); + if (view != null)//对View进行操作,这里换成你自己的需求 + { + List> lists = new ArrayList<>(); + if (datas.get(position).getWelfare_list() != null && datas.get(position).getWelfare_list().size() > 3) { + lists.clear(); + int i = 1; + + for (int j = 0; Math.abs(Math.ceil(datas.get(position).getWelfare_list().size() / 3.0 - j)) > 0.1; j++) { + List list = new ArrayList<>(); + for (; i <= datas.get(position).getWelfare_list().size(); i++) { + list.add(datas.get(position).getWelfare_list().get(i - 1)); + if (i % 3 == 0) { + i++; + break; + } + } + lists.add(list); + } + } + + ViewHolder holder = (ViewHolder) view.getTag(); +// if(selectStausr.get(position)==null) +// { +// holder.num[0]=0; +// } + selectStausl.put(position,true); + holder.im_l.setVisibility(View.VISIBLE); + if (selectStausn.get(position) < lists.size() - 1) { + int t=selectStausn.get(position); + t++; + selectStausn.put(position,t) ; + selectStausr.put(position,true); + holder.im_r.setVisibility(View.VISIBLE); + switch (lists.get(selectStausn.get(position)).size()) + { + case 3: + holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); + holder.tv_2.setText(selectStausn.get(position) * 3 + 2 + "、" + lists.get(selectStausn.get(position) ).get(1).getType_name() + lists.get(selectStausn.get(position) ).get(1).getNum() + lists.get(selectStausn.get(position) ).get(1).getType_unit()); + holder.tv_3.setText(selectStausn.get(position) * 3 + 3 + "、" + lists.get(selectStausn.get(position) ).get(2).getType_name() + lists.get(selectStausn.get(position) ).get(2).getNum() + lists.get(selectStausn.get(position) ).get(2).getType_unit()); + break; + case 2: + holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); + holder.tv_2.setText(selectStausn.get(position) * 3 + 2 + "、" + lists.get(selectStausn.get(position) ).get(1).getType_name() + lists.get(selectStausn.get(position) ).get(1).getNum() + lists.get(selectStausn.get(position) ).get(1).getType_unit()); + holder.tv_3.setText(""); + break; + case 1: + holder.tv_1.setText(selectStausn.get(position) * 3 + 1 + "、" + lists.get(selectStausn.get(position) ).get(0).getType_name() + lists.get(selectStausn.get(position) ).get(0).getNum() + lists.get(selectStausn.get(position) ).get(0).getType_unit()); + holder.tv_2.setText(""); + holder.tv_3.setText(""); + break; + + } + + + + } + if (selectStausn.get(position) >= lists.size() - 1) { + selectStausr.put(position,false); + holder.im_r.setVisibility(View.INVISIBLE); + } + selectStaus1.put(position, holder.tv_1.getText().toString()); + selectStaus2.put(position, holder.tv_2.getText().toString()); + selectStaus3.put(position, holder.tv_3.getText().toString()); + } +// getView(position, view, listView); +// } + + } +// private OnRightViewItemClickListener mOnrightClickListener = null; +// +// public void setOnRightItemClickListener(OnRightViewItemClickListener listener) { +// this.mOnrightClickListener = listener; +// } + } + public class ViewHolder + { + + TextView tv_time,tv_1,tv_2,tv_3,tv_cardid; + ImageView im_l,im_r; +// final int[] num = {0}; + + + } +// public interface OnRightViewItemClickListener { +// void onRightItemClick(int position); +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyIdeaActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyIdeaActivity.java new file mode 100644 index 0000000..88e593e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyIdeaActivity.java @@ -0,0 +1,819 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.AddCaseRecordAdapter; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.GetInterrogationBean; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/7/30.我的意见 + */ + +public class MyIdeaActivity extends BaseActivity implements AdapterView.OnItemClickListener,OnCallBackFromNet{ + private View view; + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private boolean mIsModify = false; + private GetInterrogationBean.DataBean.AnswerListBean data; + private AddCaseRecordAdapter gv_adapter; + boolean isFirst = true; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private EditText et_mynote; + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 6) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + private Button bt_next; + private String uuid; + private String step1_uuid; + private CustomProgressDialog pd; + private ECAlertDialog dilaog2; + private Button mBt_get_Voice; + private KeDaXunFeiUtil VoiceUtil; + + @Override + public void setTitle() { + top_title.setText("我的意见"); + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (!mIsModify){ + if (TextUtils.isEmpty(et_mynote.getText().toString())) { + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(MyIdeaActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(MyIdeaActivity.this,"MyIdeaActivity"+step1_uuid,""); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(MyIdeaActivity.this,"MyIdeaActivity"+step1_uuid,et_mynote.getText().toString()); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + }else { + finish(); + } + + } + }); + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == event.KEYCODE_BACK){ + if (!mIsModify){ + if (TextUtils.isEmpty(et_mynote.getText().toString())) { + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(MyIdeaActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(MyIdeaActivity.this,"MyIdeaActivity"+step1_uuid,""); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(MyIdeaActivity.this,"MyIdeaActivity"+step1_uuid,et_mynote.getText().toString()); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + }else { + finish(); + } + + + + } + return super.onKeyDown(keyCode, event); + + } + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_myidea); + data = (GetInterrogationBean.DataBean.AnswerListBean) getIntent().getSerializableExtra("data"); + AppManager.getAppManager().addActivity2(this); + if (data!=null&&!StringUtil.isEmpty(data.getNote())){ + uuid = getIntent().getStringExtra("uuid"); + mIsModify = true; + } + step1_uuid = getIntent().getStringExtra("step1_uuid"); + pd = new CustomProgressDialog(MyIdeaActivity.this, "请稍候"); + initView(); + initLisener(); + if (!mIsModify){ + String context = SharePrefUtil.getString(MyIdeaActivity.this, "MyIdeaActivity"+step1_uuid, ""); + if (!context.isEmpty()){ + et_mynote.setText(context); + } + } + + + return view; + } + + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + et_mynote = view.findViewById(R.id.et_mynote); + bt_next = view.findViewById(R.id.bt_next); + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); + if (mIsModify) { + et_mynote.setText(data.getNote()); + } + PutPhotos(); + gv_adapter = new AddCaseRecordAdapter(mActivity, mBitmaps, mAddBitmaps); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.bt_get_voice: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(MyIdeaActivity.this, + et_mynote); + } else { + EasyWindow.with(MyIdeaActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(MyIdeaActivity.this, + et_mynote); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(MyIdeaActivity.this, + et_mynote); + } + + + break; + case R.id.bt_next: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + pd.show(); + String trim = et_mynote.getText().toString().trim(); + LogUtil.i("trim"); + if (StringUtil.isEmpty(trim.trim())||trim.length()<5){ + ToastUtil.showMessage("意见至少5个字"); + pd.dismiss(); + return; + } + bt_next.setFocusable(false); + bt_next.setEnabled(false); + Map map = new HashMap<>(); + map.put("note",et_mynote.getText().toString().trim()); + + LogUtil.i("uuid = "+uuid); + LogUtil.i("step1_uuid = "+step1_uuid); + LogUtil.i("note = "+et_mynote.getText().toString().trim()); + if (mIsModify){ + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5Object(Url.updateInterrogationAnswer,map,mBitmaps,200,this); + }else { + map.put("step1_uuid",step1_uuid); + sendJsonPostParamtoNetSignMD5Object(Url.addInterrogationAnswer,map,mBitmaps,200,this); + } + + break; + } + } + private void initLisener() { + bt_next.setOnClickListener(this); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + } + + public void PutPhotos() { + if (mIsModify) { + if (!StringUtil.isEmpty(data.getImgs())){ + String[] split = data.getImgs().split(","); + if (split.length > 0) { + for (int i = 0; i < split.length; i++) { + mBitmaps.add(new AddBitmaps(false, null, split[i])); + } + if (split.length < 6) { + mBitmaps.add(mAddBitmaps); + } + } else { + mBitmaps.add(mAddBitmaps); + } + }else { + mBitmaps.add(mAddBitmaps); + } + } else { + mBitmaps.add(mAddBitmaps); + } + + } + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + hideSoftKeyboard(); + isFirst = false; + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + // imageView.setVisibility(View.GONE); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(MyIdeaActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + public static Boolean isfresh = false; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + MyIdeaActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 6) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(MyIdeaActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(MyIdeaActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(MyIdeaActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + LogUtil.i("以拒绝"); + isFirst = true; + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(MyIdeaActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",6); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(MyIdeaActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(MyIdeaActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(MyIdeaActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",6); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + isFirst = true; +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(MyIdeaActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",6); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(MyIdeaActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(MyIdeaActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + pd.dismiss(); + bt_next.setFocusable(true); + bt_next.setEnabled(true); + LogUtil.i("resultJson = "+resultJson); + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code")));{ + SharePrefUtil.saveString(MyIdeaActivity.this,"MyIdeaActivity",""); + Intent intent = new Intent(MyIdeaActivity.this,GetInterrogationActivity.class); + intent.putExtra("step1_uuid",step1_uuid); + startActivity(intent); + AppManager.getAppManager().finishAllActivity2(); + } + ToastUtil.showMessage(jsonObject.optString("message")); + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyLibraryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyLibraryActivity.java new file mode 100644 index 0000000..b51ddbd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyLibraryActivity.java @@ -0,0 +1,455 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.BookshelfFragment; +import cn.shangyu.gdxzExpert.fragment.BookshelfFragment2; +import cn.shangyu.gdxzExpert.fragment.MedicineBookFragment; +import cn.shangyu.gdxzExpert.fragment.PubMedFragment; +import cn.shangyu.gdxzExpert.fragment.SearchPaperFragment; +import cn.shangyu.gdxzExpert.fragment.ToolsListFragment; +import cn.shangyu.gdxzExpert.fragment.WFSearchFragment; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.NotNormalItemView; +import cn.shangyu.gdxzExpert.widge.pickerview.PopMenu; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.PageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +/** + * MyLibraryActivity.java + * + * @author liufang + * @date 2015-11-4 上午9:40:44 + * + * + * 功能说明:我的图书馆主页面 + */ +public class MyLibraryActivity extends BaseActivity implements + OnCheckedChangeListener { + private RadioGroup main_radiogroup; + private FragmentManager fm; + private PopMenu popMenu; + private PageNavigationView mGroup_library; + View im_bg; + private NavigationController navigationController; + private RadioButton mWf_Libiary, mEn_Libiary, mPubWed, mDaiCha; + private RadioButton mRb_Journal, mRb_Medicine, mRb_Tools,tab_rbn_guide; +// private View mV_lines; + + private RadioButton mRb_chinease; + public static int ERROR = 101; + public static boolean isdrug = true; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.icon_library_right); + + // 初始化弹出菜单 + popMenu = new PopMenu(this); + popMenu.addItems(new String[] { getString(R.string.action_download), + getString(R.string.action_collect) }, + new int[] { R.drawable.icon_pop_item_down, + R.drawable.icon_pop_item_collect }); + // 菜单项点击监听器 + popMenu.setOnItemClickListener(popmenuItemClickListener); + } + + // 弹出菜单监听器 + OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // ***********下载*********** + if (position == 0) { + Intent intent = new Intent(ct, MyWFArticleActivity.class); + intent.setType("下载"); + startActivity(intent); + // ************收藏************ + } else if (position == 1) { + Intent intent = new Intent(ct, MyWFArticleActivity.class); + intent.setType("收藏"); + startActivity(intent); + } + popMenu.dismiss(); + } + }; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_library, null); + main_radiogroup = (RadioGroup) view + .findViewById(R.id.main_radiogroup_library); + mGroup_library = view + .findViewById(R.id.tab); + mDaiCha = (RadioButton) view.findViewById(R.id.iv_library_daicha); + //注意这里调用了custom()方法 + im_bg=view.findViewById(R.id.im_bg); + navigationController = mGroup_library.custom() + .addItem(newItem("代查文献")) + .addItem(newItem("英文文献")) + .build(); + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + + // 选中时触发 + if(index==0) + { + changeSearch(); + } + else + { + + changeENJournal(); + } + + } + }); +// mGroup_library.setOnCheckedChangeListener(mChangeListener); + main_radiogroup.setOnCheckedChangeListener(this); + // mLl_lines = (LinearLayout) view.findViewById(R.id.ll_lines); + mWf_Libiary = (RadioButton) view.findViewById(R.id.iv_library_wanfang); + mRb_Journal = (RadioButton) view.findViewById(R.id.tab_rbn_journal); + tab_rbn_guide=view.findViewById(R.id.tab_rbn_guide); + mRb_chinease = (RadioButton) view + .findViewById(R.id.iv_library_chinease); + mRb_Medicine = (RadioButton) view.findViewById(R.id.tab_rbn_express); + mRb_Tools = (RadioButton) view.findViewById(R.id.tab_rbn_tools); + // mV_line1 = view.findViewById(R.id.v_line1); + // mV_line2 = view.findViewById(R.id.v_line2); + // mV_line3 = view.findViewById(R.id.v_line3); + // mV_line4 = view.findViewById(R.id.v_line4); +// mV_lines = view.findViewById(R.id.v_lines); + // tvGuide = (TextView) view.findViewById(R.id.tv_guide); + // tvJournal = (TextView) view.findViewById(R.id.tv_journal); + // tvExpress = (TextView) view.findViewById(R.id.tv_express); + // tvTools = (TextView) view.findViewById(R.id.tv_tools); + if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) + { + mRb_Journal.setVisibility(View.VISIBLE); + tab_rbn_guide.setVisibility(View.VISIBLE); + view.findViewById(R.id.tv_express).setVisibility(View.VISIBLE); + view.findViewById(R.id.tv_journal).setVisibility(View.VISIBLE); + } + else + { + mRb_Journal.setVisibility(View.GONE); + tab_rbn_guide.setVisibility(View.GONE); + view.findViewById(R.id.tv_express).setVisibility(View.GONE); + view.findViewById(R.id.tv_journal).setVisibility(View.GONE); + } + fm = getSupportFragmentManager(); + String searchStr = getIntent().getStringExtra("search"); + + String navi = getIntent().getStringExtra("navi"); + if (!StringUtil.isEmpty(navi) && navi.equals("journal")) { + mRb_Journal.setChecked(true); + } else if (!StringUtil.isEmpty(navi) && navi.equals("wf")) { + mRb_Journal.setChecked(true); + mWf_Libiary.setChecked(true); + } else if (!StringUtil.isEmpty(navi) && navi.equals("drug")) { + mRb_Medicine.setChecked(true); + isdrug = true; + } else if (!StringUtil.isEmpty(navi) && navi.equals("tools")) { + mRb_Tools.setChecked(true); + } else if (!StringUtil.isEmpty(navi) && navi.equals("interaction")) { + mRb_Medicine.setChecked(true); + isdrug = false; + } else { + changeGuide(); + + } + if (!StringUtil.isEmpty(searchStr) && searchStr.equals("searchStr")) { + mRb_Journal.setChecked(true); + mWf_Libiary.setChecked(true); + } else if (!StringUtil.isEmpty(searchStr) + && searchStr.equals("medicine")) { + mRb_Medicine.setChecked(true); + } + if(!SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) + { + + mRb_Tools.setChecked(true); + } + return view; + } + //创建一个Item + private BaseTabItem newItem(String text){ + NotNormalItemView normalItemView = new NotNormalItemView(this); + normalItemView.initialize(text); + return normalItemView; + } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + OnCheckedChangeListener mChangeListener = new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + isZaZhi = true; + switch (checkedId) { + case R.id.iv_library_chinease: + changeWFJournal(); + break; + case R.id.iv_library_english: + changeENJournal(); + break; + case R.id.iv_library_pubmed: + changePubMed(); + break; + case R.id.iv_library_daicha: + changeSearch(); + break; + case R.id.iv_library_wanfang: + changeWFSearch(); + break; + + default: + break; + } + } + }; + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right: + popMenu.showAsDropDown(v); + // startActivity(new Intent(ct, DownloadCollectActivity.class)); + break; + default: + break; + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + im_bg.setVisibility(View.GONE); + top_right.setVisibility(View.VISIBLE); + isZaZhi = false; + switch (checkedId) { + case R.id.tab_rbn_guide: + if (mGroup_library.getVisibility() == View.VISIBLE) { + mGroup_library.setVisibility(View.GONE); + // mLl_lines.setVisibility(View.GONE); +// mV_lines.setVisibility(View.GONE); + } + changeGuide(); + break; + case R.id.tab_rbn_journal: + if (mGroup_library.getVisibility() == View.GONE) { + mGroup_library.setVisibility(View.VISIBLE); + // mLl_lines.setVisibility(View.VISIBLE); +// mV_lines.setVisibility(View.VISIBLE); + } + mRb_chinease.setChecked(true); + changeSearch(); +// changeWFJournal(); + break; + case R.id.tab_rbn_express: + if (mGroup_library.getVisibility() == View.VISIBLE) { + mGroup_library.setVisibility(View.GONE); + // mLl_lines.setVisibility(View.GONE); +// mV_lines.setVisibility(View.GONE); + } + changeExpress(); + break; + case R.id.tab_rbn_tools: + if (mGroup_library.getVisibility() == View.VISIBLE) { + mGroup_library.setVisibility(View.GONE); + // mLl_lines.setVisibility(View.GONE); +// mV_lines.setVisibility(View.GONE); + } + changeTools(); + break; + } + } + + /** + * 治疗指南 + */ + private void changeGuide() { + top_title.setText("诊疗指南"); + top_right.setVisibility(View.GONE); + BookshelfFragment2 mFragment = BookshelfFragment2.newInstance(Url.getGuideType, 0); + fm.beginTransaction().replace(R.id.frame_container, mFragment, "BOOKSHELF").commit(); + } + + /** + * 万方期刊杂志 + */ + boolean isZaZhi = false; + + private void changeWFJournal() { + top_title.setText("期刊杂志"); + BookshelfFragment mFragment = BookshelfFragment.newInstance( + Url.getWfmagazineType, 1); + if (isZaZhi) { + isZaZhi = false; + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "CHINEASE") + .commit(); + } else { + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "CHINEASE") + .commit(); + } + + } + + // PubMedFragment + + /** + * PubMed + */ + private void changePubMed() { + top_title.setText("期刊杂志"); + PubMedFragment mFragment = new PubMedFragment(); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "PUBMED").commit(); + } + + /** + * 代查文献 + */ + private void changeSearch() { + navigationController.setSelect(0); + im_bg.setVisibility(View.VISIBLE); + top_title.setText("期刊杂志"); +// SearchLibiaryFragment mFragment = new SearchLibiaryFragment(); + SearchPaperFragment mFragment=new SearchPaperFragment(); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "PUBMED").commit(); + } + + ; + + /** + * 万方医学 + */ + private void changeWFSearch() { + top_title.setText("期刊杂志"); + WFSearchFragment mFragment = new WFSearchFragment(); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "PUBMED").commit(); + } + + /** + * 英文期刊杂志 + */ + private void changeENJournal() { + im_bg.setVisibility(View.GONE); + top_title.setText("期刊杂志"); + BookshelfFragment mFragment = BookshelfFragment.newInstance( + Url.getCnmagazineType, 1); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "ENGLISH").commit(); + } + + /** + * 我的药箱 + */ + private void changeExpress() { + top_title.setText("药品助手"); + top_right.setVisibility(View.GONE); + MedicineBookFragment medicineBookFragment = new MedicineBookFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, medicineBookFragment, + "medicine_getsth_fragment").commitAllowingStateLoss(); + } + + /** + * 常用工具 + */ + private void changeTools() { + top_title.setText("常用工具"); + top_right.setVisibility(View.GONE); + ToolsListFragment mFragment = new ToolsListFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "TOOLS_LIST") + .commit(); + } + + /** + * singleTask 再次的回调 + */ + @Override + protected void onNewIntent(Intent intent) { + // TODO Auto-generated method stub + super.onNewIntent(intent); + mDaiCha.setChecked(true); + changeSearch(); + } + +// @Override +// public boolean dispatchTouchEvent(MotionEvent ev) { +//// hideSoftKeyboard(); +// if (ev.getAction() == MotionEvent.ACTION_DOWN) { +// +// // 获取当前焦点所在的控件; +// +// View view = this.getCurrentFocus(); +// +// if (view != null && view instanceof EditText) { +// +// Rect r = new Rect(); +// +// view.getGlobalVisibleRect(r); +// +// int rawX = (int) ev.getRawX(); +// +// int rawY = (int) ev.getRawY(); +// +// // 判断点击的点是否落在当前焦点所在的 view 上; +// +//if (!r.contains(rawX, rawY)) { +// +// view.clearFocus(); +// +// } +// +// } +// +// } +// return super.dispatchTouchEvent(ev); +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyMindActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyMindActivity.java new file mode 100644 index 0000000..146aee3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyMindActivity.java @@ -0,0 +1,257 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MyMindAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ExpertMindList; +import cn.shangyu.gdxzExpert.bean.ExpertMindList.mindList.expertMind; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyMindActivity extends BaseActivity implements OnCallBackFromNet, + OnItemClickListener { + private View view; + private TextView mTv_totle; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private MyMindActivity mActivity; + private int page = 1; + private List beanlists = new ArrayList(); + private MyMindAdapter mAdapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("我的心意"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_my_mind); + mActivity = this; + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_my_mind); + mTv_totle = (TextView) view.findViewById(R.id.tv_my_mind_totle); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + ptrLv.setMode(Mode.PULL_FROM_START); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂未送出心意"); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + } + }); + getDataResult(); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + public void getDataResult() { + String uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + Map param = new HashMap(); + param.put("expert_uuid", uuid); + param.put("page", page + ""); + sendParamtoNet(Url.getExpertXinYiList, param, 101, mActivity, true); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + ExpertMindList bean = null; + try { + bean = GsonTools.fromGsonToBean(result, ExpertMindList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + + } + // // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + if (bean != null) { + mTv_totle.setText(" " + + String.format("%.2f", bean.total / 100)); + } + // 数据为空 + if (bean == null || bean.data == null + || bean.data.list == null + || bean.data.list.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂未送出心意"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.data.list); + + } + // // 更新数据 + if (mAdapter == null) { + mAdapter = new MyMindAdapter(beanlists); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 201 不刷新 202待支付变成已支付 203待支付变成已取消 + */ + public static int GET_FRESH_RESULT = 201; + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, MindDetailActivity.class); + intent.putExtra("order_status", beanlists.get(position - 1).getOrder_status()); + intent.putExtra("order_id", beanlists.get(position - 1).getOrder_id()); + startActivityForResult(intent, GET_FRESH_RESULT); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode != 0 && resultCode != 201) { + if (data != null) { + String order_id = data.getStringExtra("order_id"); + if (resultCode == 202) { + for (int i = 0; i < beanlists.size(); i++) { + if (beanlists.get(i).getOrder_id().equals(order_id)) { + beanlists.get(i).setOrder_status("paid"); + } + } + } + if (resultCode == 203) { + for (int i = 0; i < beanlists.size(); i++) { + if (beanlists.get(i).getOrder_id().equals(order_id)) { + beanlists.get(i).setOrder_status("canceled"); + } + } + } + mAdapter.notifyDataSetChanged(); + } + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyPatientActivity.java new file mode 100644 index 0000000..51f0c13 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyPatientActivity.java @@ -0,0 +1,753 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nim.uikit.api.model.main.LoginSyncDataStatusObserver; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.ui.dialog.DialogMaker; +import com.netease.nim.uikit.common.ui.drop.DropManager; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.OnlineClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.SystemMessageObserver; +import com.netease.nimlib.sdk.msg.SystemMessageService; +import com.netease.nimlib.sdk.msg.model.CustomNotification; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.ConversationListFragment.OnUpdateMsgUnreadCountsListener; +import cn.shangyu.gdxzExpert.fragment.PatientListFragment; +import cn.shangyu.gdxzExpert.fragment.VisitPlanFragment; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; +import cn.shangyu.gdxzExpert.netease.main.CustomNotificationCache; +import cn.shangyu.gdxzExpert.netease.main.ReminderItem; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.netease.main.SystemMessageUnreadManager; +import cn.shangyu.gdxzExpert.netease.main.fragment.SessionListFragmentNew; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; +import static cn.shangyu.gdxzExpert.fragment.PatientListFragment.PatientUrl; + + +/** + * + * MainActivity.java + * + * @author ssy + * @date 2015-8-31 下午3:52:22 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的患者页面 + */ + +public class MyPatientActivity extends BaseActivity implements + OnCheckedChangeListener, OnUpdateMsgUnreadCountsListener, ReminderManager.UnreadNumChangedCallback { + + private RadioGroup main_radiogroup; + private FragmentManager fm; +// private ConversationListFragment myPatientMsgFragment; +// private MessageFragment messageFragment; + private SessionListFragmentNew sessionListFragment; + private static MyPatientActivity instance; + private PatientListFragment myPatientListFragment; + private VisitPlanFragment mVisitPlanFragment; + private BadgeView badgePublicServiceMsg; + private Button bt_paintlist; + private int consultCount; + Boolean isSuccessView = false; + private long count = 0; + private String applyListUrl = Url.getapplyList; + /** + * 云信 + */ + private Observer sysMsgUnreadCountChangedObserver = (Observer) unreadCount -> { + SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unreadCount); + ReminderManager.getInstance().updateContactUnreadNum(unreadCount); + }; + public static MyPatientActivity getInstance() { + return instance; + } + // sample + Observer customNotificationObserver = (Observer) notification -> { + // 处理自定义通知消息 +// com.netease.nim.uikit.common.util.log.LogUtil.i("demo", "receive custom notification: " + notification.getContent() + " from :" + +// notification.getSessionId() + "/" + notification.getSessionType() + +// "unread=" + (notification.getConfig() == null ? "" : notification.getConfig().enableUnreadCount + " " + "push=" + +// notification.getConfig().enablePush + " nick=" + +// notification.getConfig().enablePushNick)); + try { + JSONObject obj = JSONObject.parseObject(notification.getContent()); + if (obj != null && obj.getIntValue("id") == 2) { + // 加入缓存中 + CustomNotificationCache.getInstance().addCustomNotification(notification); + // Toast + String content = obj.getString("content"); + String tip = String.format("自定义消息[%s]:%s", notification.getFromAccount(), content); + ToastHelper.showToast(MyPatientActivity.this, tip); + } + } catch (JSONException e) { + com.netease.nim.uikit.common.util.log.LogUtil.e("demo", e.getMessage()); + } + }; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_back_layout.setVisibility(View.VISIBLE); + top_back_layout.setOnClickListener(this); + top_right.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_patient_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_patient, null); + } + + main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup_patient); + main_radiogroup.setOnCheckedChangeListener(this); + instance = this; + fm = getSupportFragmentManager(); + changeMessage(); + isSuccessView = true; + // 患者列表申请提醒 + bt_paintlist = (Button) view.findViewById(R.id.bt_paintlist); + badgePublicServiceMsg = new BadgeView(ct, bt_paintlist); + // badgePublicServiceMsg.setTargetView(bt_paintlist); + badgePublicServiceMsg.setBackgroundResource(R.drawable.unread_count_bg); + badgePublicServiceMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + registerDeletPatient(); + getNewPatientList(applyListUrl); + yuninit(); + return view; + } + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + LocalReceiver localReceiver; + private void registerDeletPatient() + { + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("DELET_PATION_ACTION"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + } + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + getPatientList(PatientUrl); + } + } + private void getPatientList(final String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", SharePrefUtil.getString(MyPatientActivity.this, + Constant.uuid, "")); + HttpHandler httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(MyPatientActivity.this, PatientUrl, + info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + protected void onResume() { + super.onResume(); + long count = SharePrefUtil.getLong(MyPatientActivity.this,"new_patient_count", 0); + showNewPatientRed(count); + if (isSuccessView) { + badgePublicServiceMsg.setText(count + ""); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + isSuccessView = true; + registerMsgUnreadInfoObserver(false); + registerSystemMessageObservers(false); + registerCustomMessageObservers(false); + localBroadcastManager.unregisterReceiver(localReceiver); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + + switch (checkedId) { + case R.id.tab_rbn_message: + changeMessage(); + break; + case R.id.tab_rbn_patlist: + changePatlist(); + break; + case R.id.tab_rbn_visit: + changevisit(); + break; + } + } + + private void changevisit() { + top_title.setText("随访计划"); + // top_right_text.setText("邀请\n患者"); + top_right_search.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("添加"); + + top_right_text.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + showPopupWindow(v); + } + }); + if(CommonUtil.BigModule()) + { + top_right_text.setTextSize(18); + } + else + { +// top_right.setImageResource(R.drawable.invite); +// top_right_search.setVisibility(View.GONE); +// top_right.setOnClickListener(new OnClickListener() { +// +// @Override +// public void onClick(View v) { +// // TODO Auto-generated method stub +// showPopupWindow(v); +// } +// }); + } + + mVisitPlanFragment = new VisitPlanFragment(); + fm.beginTransaction().replace(R.id.frame_container, mVisitPlanFragment, + "mVisitPlanFragment").commit(); + + + } + + LinearLayout mLv_addTime, mLv_addVisit; + + private void showPopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView; + if(CommonUtil.BigModule()) + { + contentView = LayoutInflater.from(instance).inflate( + R.layout.pop_window_big, null); + } + else + { + contentView = LayoutInflater.from(instance).inflate( + R.layout.pop_window, null); + } + + // 设置按钮的点击事件 + mLv_addTime = (LinearLayout) contentView.findViewById(R.id.ll_addTime); + mLv_addVisit = (LinearLayout) contentView + .findViewById(R.id.ll_addVisit); + + final PopupWindow popupWindow = new PopupWindow(contentView, + LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); + mLv_addTime.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + Intent intent = new Intent(instance, AddVisitDateActivity.class); + intent.setType("main"); + startActivityForResult(intent, 201); + popupWindow.dismiss(); + } + }); + mLv_addVisit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(instance, AddVisitPlanActivity.class); + intent.setType("main"); + startActivityForResult(intent, 201); + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + + popupWindow.setTouchInterceptor(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + Log.i("mengdd", "onTouch : "); + + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + + // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 + // 我觉得这里是API的一个bug + popupWindow.setBackgroundDrawable(getResources().getDrawable( + R.drawable.popwrite)); + + // 设置好参数之后再show + popupWindow.showAsDropDown(view); + + } + + private void changePatlist() { + top_right_text.setVisibility(View.GONE); + top_right.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + + + top_right.setImageResource(R.drawable.invite_big); + } + else + { + top_right.setImageResource(R.drawable.invite); + } + top_title.setText("我的患者"); + // top_right_text.setText("邀请\n患者"); + + top_right_search.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("邀请患者"); + startActivity(new Intent(MyPatientActivity.this, MyQrCodeActivity.class)); + /*ClientUser user = new ClientUser(SharePrefUtil.getString(ct, + "USERID", "")); + CCPAppManager.setClientUser(user); + LogUtil.i("UserId==" + user.getUserId()); + if (!ContactSqlManager.hasContact(user.getUserId())) { + ECContacts contacts = new ECContacts(); + contacts.setClientUser(user); + ContactSqlManager.insertContact(contacts); + LogUtil.i("加载联系人=="); + } + startActivity(new Intent(ct, InvitePatientActivity.class));*/ + } + }); + myPatientListFragment = new PatientListFragment(); + fm.beginTransaction().replace(R.id.frame_container, myPatientListFragment, + "PatientListFragment").commit(); + // Bundle args = new Bundle(); + // args.putInt("type", 0); + // myPatientListFragment.setArguments(args); + + } + + private void changeMessage() { + if(CommonUtil.BigModule()) + { + + top_right_search.setImageResource(R.drawable.big_search); + + } + top_right_text.setVisibility(View.GONE); + top_right.setVisibility(View.VISIBLE); + top_title.setText("患者消息"); + + top_right.setImageResource(R.drawable.icon_group_send); + // top_right_text.setText("群发\n消息"); + top_right_search.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("群发消息"); +// startActivity(new Intent(ct, GroupChatPatientActivity.class)); + startActivity(new Intent(ct, SendGroupMsgListActivity.class)); + } + }); + sessionListFragment=new SessionListFragmentNew(); + fm.beginTransaction().replace(R.id.frame_container, sessionListFragment, + "ConversationListFragment").commit(); + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + ToastUtil.showToast(top_right_text.getText().toString()); + break; + case R.id.top_right_search: + startActivity(new Intent(ct, SearchPatientActivity.class)); + break; + case R.id.top_back_layout: + finish(); + break; + default: + break; + + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK ){ + finish(); + } + + + return super.onKeyDown(keyCode, event); + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + String uuid = SharePrefUtil.getString(MyPatientActivity.this, + Constant.uuid, ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + HttpHandler httpHandlerNewPatient = HttpHelper.loadData( + HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(MyPatientActivity.this, + // loadUrl,info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // SharePrefUtil.saveString(mActivity, loadUrl,""); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + // 数据为空 + count = 0; + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + showNewPatientRed(count); + badgePublicServiceMsg.setText(count + ""); + } + + /** + * 网络注册状态改变 + * + * @param + */ + public void onNetWorkNotify( ) { +// if (myPatientMsgFragment instanceof ConversationListFragment&& myPatientMsgFragment.isResumed()) { +// ((ConversationListFragment) myPatientMsgFragment) +// .updateConnectState(); +// }m + } + + /** + * shuaxin notifyChange + * + * void + */ + public void notifyChange() { +// if (myPatientMsgFragment instanceof ConversationListFragment +// && myPatientMsgFragment.isResumed()) { +// ((ConversationListFragment) myPatientMsgFragment).notifyChange(); +// } + if (myPatientListFragment instanceof PatientListFragment + && myPatientListFragment.isResumed()) { + ((PatientListFragment) myPatientListFragment).notifyChange(); + } + } + + /** + * 显示是否有新的患者申请红点提示 + */ + public void showNewPatientRed(long count) { + if (badgePublicServiceMsg != null) { + if (count != 0) { + badgePublicServiceMsg.show(); + } else { + badgePublicServiceMsg.hide(); + } + } + } + + /** + * 统计未读数量 + */ + @Override + public void OnUpdateMsgUnreadCounts() { + // TODO Auto-generated method stub + int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); + int notifyUnreadCount = IMessageSqlManager.getUnNotifyUnreadCount(); + int count = unreadCount; + if (unreadCount >= notifyUnreadCount) { + count = unreadCount - notifyUnreadCount; + } + /* + * if(unreadCount > 0) { if(unreadCount > 99) { + * tv_new_pt_count.setText(getResources + * ().getString(R.string.unread_count_overt_100)); return; } + * tv_new_pt_count.setText(String.valueOf(unreadCount)); return; } + * tv_new_pt_count.setText(null); + */ + /* + * + */ + } + private void yuninit() + { + observerSyncDataComplete(); +// findViews(); +// setupPager(); +// setupTabs(); + registerMsgUnreadInfoObserver(true); + registerSystemMessageObservers(true); + registerCustomMessageObservers(true); + + requestSystemMessageUnreadCount(); +// initUnreadCover(); + } + Observer> clientsObserver = new Observer>() { + @Override + public void onEvent(List onlineClients) { + if (onlineClients == null || onlineClients.size() == 0) { + return; + } + + + } + }; + + /** + * 用户状态变化 + */ + Observer userStatusObserver = new Observer() { + + @Override + public void onEvent(StatusCode code) { + if (code.wontAutoLogin()) { + + LogoutHelper.logout(); + showlogout(); +// startActivity(new Intent(MyPatientActivity.this, LoginActivity.class)); +// finish(); + } + } + }; + private void showlogout() + { + + Date date = new Date(System.currentTimeMillis()); + String phone="ios"; + switch(NIMClient.getService(AuthService.class).getKickedClientType()) + { + case 1: + phone="android"; + break; + case 2: + phone="ios"; + break; + case 16: + phone="web"; + break; + default: + phone="unknow"; + break; + + } + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, + getString(R.string.nim_kick_out)+ + simpleDateFormat.format(date)+getString(R.string.nim_kick_out1)+ + phone+getString(R.string.nim_kick_out2) + , getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startActivity(new Intent(MyPatientActivity.this, LoginNewActivity.class)); + finish(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + private void observerSyncDataComplete() { + boolean syncCompleted = LoginSyncDataStatusObserver.getInstance() + .observeSyncDataCompletedEvent( + (Observer) v -> DialogMaker + .dismissProgressDialog()); + //如果数据没有同步完成,弹个进度Dialog + if (!syncCompleted) { + DialogMaker.showProgressDialog(MyPatientActivity.this, getString(com.netease.nim.uikit.R.string.prepare_data)) + .setCanceledOnTouchOutside(false); + } + } + /** + * 注册未读消息数量观察者 + */ + private void registerMsgUnreadInfoObserver(boolean register) { + if (register) { + ReminderManager.getInstance().registerUnreadNumChangedCallback(this); + } else { + ReminderManager.getInstance().unregisterUnreadNumChangedCallback(this); + } + } + + @Override + public void onUnreadNumChanged(ReminderItem item) { + + } + /** + * 注册/注销系统消息未读数变化 + */ + private void registerSystemMessageObservers(boolean register) { +// NIMClient.getService(AuthServiceObserver.class).observeOtherClients(clientsObserver, register); + NIMClient.getService(SystemMessageObserver.class).observeUnreadCountChange( + sysMsgUnreadCountChangedObserver, register); +// NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, register); + } + private void registerCustomMessageObservers(boolean register) { +// NIMClient.getService(MsgServiceObserve.class).observeCustomNotification( +// customNotificationObserver, register); + } + /** + * 查询系统消息未读数 + */ + private void requestSystemMessageUnreadCount() { + int unread = NIMClient.getService(SystemMessageService.class) + .querySystemMessageUnreadCountBlock(); + SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unread); + ReminderManager.getInstance().updateContactUnreadNum(unread); + } + //初始化未读红点动画 + private void initUnreadCover() { + DropManager.getInstance().init(this, findViewById(R.id.unread_cover), (id, explosive) -> { + if (id == null || !explosive) { + return; + } + if (id instanceof RecentContact) { + RecentContact r = (RecentContact) id; + NIMClient.getService(MsgService.class).clearUnreadCount(r.getContactId(), + r.getSessionType()); + return; + } + if (id instanceof String) { + if (((String) id).contentEquals("0")) { + NIMClient.getService(MsgService.class).clearAllUnreadCount(); + } else if (((String) id).contentEquals("1")) { + NIMClient.getService(SystemMessageService.class) + .resetSystemMessageUnreadCount(); + } + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyProjectsDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyProjectsDetailActivity.java new file mode 100644 index 0000000..b248524 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyProjectsDetailActivity.java @@ -0,0 +1,396 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; +import static cn.shangyu.gdxzExpert.utils.Url.youangetRoleList; +import static cn.shangyu.gdxzExpert.utils.Url.youanselectRole; + +import android.content.Intent; +import android.os.Build; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.RadioGroup; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.proRoleBean; +import cn.shangyu.gdxzExpert.bean.proRoleTokenBean; +import cn.shangyu.gdxzExpert.fragment.OverviewFragment; +import cn.shangyu.gdxzExpert.fragment.ProjectManageFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.OptionsPopupWindow; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; + +public class MyProjectsDetailActivity extends BaseActivity implements AdapterView.OnItemClickListener, RadioGroup.OnCheckedChangeListener { + + + @Override + public void setTitle() { + + top_right_text.setText("切换"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + hideSoftKeyboard(); + showPwOptions("选择角色",optionsItems,view); + + } + }); + } + proRoleBean roleBean; + private void role() + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + OkHttpUtils + .get() + .url(youangetRoleList+projectId) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + roleBean= GsonTools.fromGsonToBean(response, proRoleBean.class); + if(hasrealtoken(response)>0) + { + if(roleBean.getData()!=null) + { + handledata(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(youangetRoleList); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + ArrayList optionsItems=new ArrayList<>(); + List roledata=new ArrayList<>(); + private void handledata() + { + optionsItems.clear(); + roledata.clear(); + roledata.addAll(roleBean.getData()); + for (proRoleBean.RoleBean roleBean1:roledata ) + { + optionsItems.add(roleBean1.getRoleName()); + } + + + + } + /** + * 弹出单项选择框 void + */ + private OptionsPopupWindow pwOptions; + private void showPwOptions(String title, + final ArrayList optionsItems,View tv + ) { + pwOptions = new OptionsPopupWindow(ct,""); + pwOptions.setPopupTitle(title); + pwOptions.setPicker(optionsItems); + int position = 0; + + pwOptions.setSelectOptions(position); + pwOptions.showAtLocation(tv, Gravity.BOTTOM, 0, 0); + // 监听确定选择按钮 + pwOptions + .setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + String tx = optionsItems.get(options1); + roleId=roledata.get(options1).getRoleId(); + Log.d("okhttp","roleId"+roleId); + setrole(); + + } + }); + } + + proRoleTokenBean roleTokenBean; + private void setrole() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + OkHttpUtils + .get() + .url(youanselectRole+projectId+"/"+roleId) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + roleTokenBean=GsonTools.fromGsonToBean(response, proRoleTokenBean.class); + if(hasrealtoken(response)>0) + { + if(roleTokenBean.getData()!=null) + { + handledata1(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(youanselectRole); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(MyProjectsDetailActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + @RequiresApi(api = Build.VERSION_CODES.N) + private void handledata1() + { + token=roleTokenBean.getData().getToken(); + SharePrefUtil.saveString(getContext(),"x_access_token",token); + List menuList=roleTokenBean.getData().getMenuList(); + if(menuList!=null&&menuList.size()>0) { + proRoleTokenBean.MeanuBean meanuBean = menuList.stream() + .filter(customer -> "patientcase:add".equals(customer.getApiPerms())).findAny().orElse(null); + if (meanuBean != null) { + patientcase_add = true; + } else { + patientcase_add = false; + } + } + if(patientcase_add) + { + view.findViewById(R.id.add).setVisibility(View.VISIBLE); + } + else + { + view.findViewById(R.id.add).setVisibility(View.GONE); + } + refreshdata(); + } + private void refreshdata() + { + if(currentFragment instanceof ProjectManageFragment) + { + ((ProjectManageFragment)currentFragment).page=1; + ((ProjectManageFragment)currentFragment).gettokens(Url.youanpatientcase); + } + else if(currentFragment instanceof OverviewFragment) + { + ((OverviewFragment)currentFragment).getdata1(); + } + } + + + + View view; + RadioGroup radioGroup; + private Fragment currentFragment; + private FragmentManager manager; + ProjectManageFragment projectManageFragment; + OverviewFragment overviewFragment; + String projectId,roleId; + Boolean patientcase_add; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_my_projects_detail); + radioGroup=view.findViewById(R.id.grop); + radioGroup.setOnCheckedChangeListener(this); + + top_title.setText(getIntent().getStringExtra("title")); + projectId=getIntent().getStringExtra("projectId"); + patientcase_add=getIntent().getBooleanExtra("patientcase_add",false); + initFragment(); + showFragment(projectManageFragment); + role(); + if(patientcase_add) + { + view.findViewById(R.id.add).setVisibility(View.VISIBLE); + } + else + { + view.findViewById(R.id.add).setVisibility(View.GONE); + } + + view.findViewById(R.id.add).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent=new Intent(MyProjectsDetailActivity.this, CaseDetailActivity.class); + intent.putExtra("type","create"); + startActivity(intent); + } + }); + return view; + } + public void initFragment() + { + manager = getSupportFragmentManager(); + projectManageFragment=new ProjectManageFragment(); + overviewFragment=new OverviewFragment(); + } + private void showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = manager.beginTransaction(); + if(currentFragment!=null) + { + transaction.hide(currentFragment); + } + + currentFragment = fragment; + if (!fragment.isAdded()) { + transaction.add(R.id.frame_container, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + } + } + + public String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(MyProjectsDetailActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(youangetRoleList)) + { + role(); + } + else if(url.contains(youanselectRole)) + { + setrole(); + } + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + + } + + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) + { + case R.id.tab_rbn_1: + showFragment(projectManageFragment); + break; + case R.id.tab_rbn_2: + showFragment(overviewFragment); + break; + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyQrCodeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyQrCodeActivity.java new file mode 100644 index 0000000..5295d69 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyQrCodeActivity.java @@ -0,0 +1,617 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor.IMESSAGE_IMAGE; +import static cn.shangyu.gdxzExpert.utils.DownLoadUrlImage.copyFileAfterQ; +import static cn.shangyu.gdxzExpert.utils.DownLoadUrlImage.getImageContentValues; + +import android.Manifest; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.os.Handler; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; +import java.util.Calendar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.CircleImageView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * QrCodeActivity.java + * + * @author jx + * @date2015.10.21 显示二维码的界面 + */ +public class MyQrCodeActivity extends BaseActivity { + + private ImageView im_code; + private CircleImageView im_photo; + private TextView im_hospil; + private TextView im_office; + private TextView im_position; + private TextView im_name; + private String qrcode; + private String realName; + private String positionName; + private String officeName; + private String hospitalName; + private String expertUuid; + private String url = Url.getExpertQrcode; + private Drawable rightDrawable; + String photo; + private TextView btn_code; + private RelativeLayout rl_qr_code; + private X5WebView web; + private String picurl ; + + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case 0: + ToastUtil.showMessage("保存成功"); + break; + + default: + break; + } + }; + }; + + public void setTitle() { + top_title.setText("我的二维码"); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + top_right.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_qr_code_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_qr_code, null); + } + im_code = (ImageView) view.findViewById(R.id.im_qr_code);// 二维码 + X5WebView.initHardwareAccelerate(this); + web = view.findViewById(R.id.web);// 二维码 + + rl_qr_code = (RelativeLayout) view.findViewById(R.id.rl_qr_code);// 二维码 + im_photo = (CircleImageView) view.findViewById(R.id.pic);// 头像 + im_hospil = (TextView) view.findViewById(R.id.tv_hospil1);// 所在医院 + im_office = (TextView) view.findViewById(R.id.tv_offices);// 科室 + im_position = (TextView) view.findViewById(R.id.tv_position1);// 职位 + im_name = (TextView) view.findViewById(R.id.tv_names1);// 姓名 + btn_code = view.findViewById(R.id.btn_code);// 姓名 + btn_code.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(MyQrCodeActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// WebView.HitTestResult result = ((WebView) web).getHitTestResult(); +// final String imgurl = result.getExtra(); +// new DownLoadUrlImage(web.getUrl(), getApplicationContext()); +// //有访问录音 + new Thread(){ + @Override + public void run() { + super.run(); + ToastUtil.showMessage("保存成功"); + try { + Thread.sleep(1000); + saveAsImg(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }.start(); + } else { + EasyWindow.with(MyQrCodeActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(MyQrCodeActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + new Thread(){ + @Override + public void run() { + super.run(); + ToastUtil.showMessage("保存成功"); + try { + Thread.sleep(1000); + saveAsImg(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }.start(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + new Thread(){ + @Override + public void run() { + super.run(); + ToastUtil.showMessage("保存成功"); + try { + Thread.sleep(1000); + saveAsImg(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }.start(); + } + +// viewSaveToImage(web); + +// viewSaveToImage(rl_qr_code); + + } + }); + String result = SharePrefUtil.getString(ct, url, null); + LogUtil.d("response_json--SharePrefUtil" + result); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } + getExpertQrcode(); + + // qrcode = SharePrefUtil.getString(ct, "qrcode", null); + // if (!TextUtils.isEmpty(qrcode) && !"null".equals(qrcode)) { + // ImageLoader.getInstance().displayImage(Url.urlHtml+qrcode, im_code, + // ImageOptions.getImageOptions()); + // } + + photo = SharePrefUtil.getString(ct, "photo", null); + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + photo, + im_photo); + } + hospitalName = SharePrefUtil.getString(ct, "hospitalName", null); + if (!TextUtils.isEmpty(hospitalName) && !"null".equals(hospitalName)) { + im_hospil.setText(hospitalName); + } + officeName = SharePrefUtil.getString(ct, "officeName", null); + if (TextUtils.isEmpty(officeName)) { + // 此方法是判断如果科室为空的话直接把当前的TextView Gone掉 + im_office.setVisibility(View.GONE); + } else { + im_office.setVisibility(View.VISIBLE); + im_office.setText(officeName); + } + positionName = SharePrefUtil.getString(ct, "positionName", null); + if (!TextUtils.isEmpty(positionName) && !"null".equals(positionName)) { + im_position.setText(positionName); + } + realName = SharePrefUtil.getString(ct, "realName", null); + if (!TextUtils.isEmpty(realName) && !"null".equals(realName)) { + im_name.setText(realName); + } + int sex = SharePrefUtil.getInt(ct, "sex", 0); + if (rightDrawable == null) { + rightDrawable = UIUtils.getDrawable(R.drawable.new_man); + } + if (1 == sex) {// 0男,1女 + rightDrawable = UIUtils.getDrawable(R.drawable.new_woman); + } + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + im_name.setCompoundDrawables(null, null, rightDrawable, null); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("我的二维码"); + } + + public static Bitmap loadBitmapFromView1(View v) { + if (v == null) { + return null; + } + Bitmap screenshot; + screenshot = Bitmap.createBitmap(v.getWidth(), v.getHeight(), + Bitmap.Config.RGB_565); + Canvas c = new Canvas(screenshot); + v.draw(c); + return screenshot; + } + void saveAsImg() { + String fileName = null; +// if(Build.BRAND .equals("Xiaomi") ){ // 小米手机 +// fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/"+Calendar.getInstance().getTimeInMillis()+".jpg" ; +// }else{ // Meizu 、Oppo +// fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+Calendar.getInstance().getTimeInMillis()+".jpg" ; +// } + fileName =IMESSAGE_IMAGE+Calendar.getInstance().getTimeInMillis()+".jpg"; + try { + FileOutputStream fos = new FileOutputStream(fileName); + Bitmap bitmap = loadBitmapFromView1(web); + // TODO Auto-generated method stub + if(bitmap==null||bitmap.isRecycled()) + { + int a=0; + } + + boolean b = bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); + + fos.close(); +// bitmap.recycle(); + + //通知相册更新 + File file = new File(fileName); + ContentResolver localContentResolver = getApplicationContext().getContentResolver(); + ContentValues localContentValues = getImageContentValues(file, System.currentTimeMillis()); + Uri uri = localContentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, localContentValues); + copyFileAfterQ(getApplicationContext(), localContentResolver, file, uri); + // 最后通知图库更新 + sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); + bitmap.recycle(); +// MediaStore.Images.Media.insertImage(getContentResolver(),bitmap, fileName, null); +// Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); +// File file = new File(fileName); +// Uri uri = Uri.fromFile(file); +// intent.setData(uri); +// sendBroadcast(intent); + handler.sendEmptyMessage(0); + } catch (Exception e) { + Log.i(TAG, e.toString()); + } + + } + private void layoutView(View v, int width, int height) { + // 整个View的大小 参数是左上角 和右下角的坐标 + v.layout(0, 0, width, height); + int measuredWidth = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY); + int measuredHeight = View.MeasureSpec.makeMeasureSpec(10000, View.MeasureSpec.AT_MOST); + /** 当然,measure完后,并不会实际改变View的尺寸,需要调用View.layout方法去进行布局。 + * 按示例调用layout函数后,View的大小将会变成你想要设置成的大小。 + */ + v.measure(measuredWidth, measuredHeight); + v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); + } + + public void url2bitmap(String url) { + Bitmap bm = null; + try { + URL iconUrl = new URL(url); + URLConnection conn = iconUrl.openConnection(); + HttpURLConnection http = (HttpURLConnection) conn; + int length = http.getContentLength(); + conn.connect(); + // 获得图像的字符流 + InputStream is = conn.getInputStream(); + BufferedInputStream bis = new BufferedInputStream(is, length); + bm = BitmapFactory.decodeStream(bis); + bis.close(); + is.close(); + if (bm != null) { + save2Album(bm,url); + } + } catch (Exception e) { + runOnUiThread(new Runnable() { + @Override + public void run() { + ToastUtil.showMessage("保存失败"); + } + }); + e.printStackTrace(); + } + } + + private void save2Album(Bitmap bitmap, String picUrl) { + File appDir = new File(Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".png"); + if (!appDir.exists()) appDir.mkdir(); + String[] str = picUrl.split("/"); + String fileName = str[str.length - 1]; + File file = new File(appDir, fileName); + try { + FileOutputStream fos = new FileOutputStream(file); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); + fos.flush(); + fos.close(); + onSaveSuccess(file); + } catch (IOException e) { + runOnUiThread(new Runnable() { + @Override + public void run() { + ToastUtil.showMessage("保存失败"); + } + }); + e.printStackTrace(); + } + } + + private void onSaveSuccess(final File file) { + runOnUiThread(new Runnable() { + @Override + public void run() { + sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); + ToastUtil.showMessage("保存成功"); + } + }); + } + private void viewSaveToImage(View view) { + view.setDrawingCacheEnabled(true); + view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); + view.setDrawingCacheBackgroundColor(Color.WHITE); + + // 把一个View转换成图片 + Bitmap cachebmp = loadBitmapFromView(view); + + FileOutputStream fos; + String imagePath = ""; + String fileName = null; + File file = null; + try { + // 判断手机设备是否有SD卡 + boolean isHasSDCard = Environment.getExternalStorageState().equals( + android.os.Environment.MEDIA_MOUNTED); + if (isHasSDCard) { + //系统相册目录 + String galleryPath= Environment.getExternalStorageDirectory() + + File.separator + Environment.DIRECTORY_DCIM + +File.separator+"Camera"+File.separator; + // SD卡根目录 + if(Build.BRAND .equals("Xiaomi") ){ // 小米手机 + fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/"+Calendar.getInstance().getTimeInMillis()+".jpg" ; + }else{ // Meizu 、Oppo + fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+Calendar.getInstance().getTimeInMillis()+".jpg" ; + } + + file = new File(fileName); + fos = new FileOutputStream(file); + imagePath = file.getAbsolutePath(); + } else + throw new Exception("创建文件失败!"); + + cachebmp.compress(Bitmap.CompressFormat.PNG, 90, fos); + + fos.flush(); + fos.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + LogUtil.e("imagePath="+imagePath); + + view.destroyDrawingCache(); + + + //通知相册更新 + MediaStore.Images.Media.insertImage(getContentResolver(),cachebmp, fileName, null); + Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); + Uri uri = Uri.fromFile(file); + intent.setData(uri); + sendBroadcast(intent); +// ToastUtil.showMessage("保存成功"); + } + + private Bitmap loadBitmapFromView(View v) { + int w = v.getWidth(); + int h = v.getHeight(); + + Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); + Canvas c = new Canvas(bmp); + + c.drawColor(Color.WHITE); + /** 如果不设置canvas画布为白色,则生成透明 */ + + v.layout(0, 0, w, h); + v.draw(c); + + return bmp; + } + private void getExpertQrcode() { + // TODO Auto-generated method stub + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + picurl = Url.qrCode + expertUuid; + web.loadUrl(picurl); + web.setInitialScale(50); + + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", expertUuid);// 向服务器传递专家uuid + LogUtil.i("expertUuid = "+expertUuid); + HttpHelper.loadData(HttpMethod.POST, url, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("response_json---" + info.result); + SharePrefUtil.saveString(ct, url, info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // ToastUtil.showMessage("网络连接失败,请稍后再试!"); + } + }); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) { + share111(); + } + } + + private String data; + + public void processData(String result) { + JSONObject jsonObject; + try { + jsonObject = new JSONObject(result); + String retcode = jsonObject.getString("code"); + data = jsonObject.getString("data"); + LogUtil.i("data" + data); + if ("1".equals(retcode)) { + LogUtil.i("retcode =" + retcode); + if (!StringUtil.isEmpty(data)) { + // ImageLoader.getInstance().clearMemoryCache(); + // ImageLoader.getInstance().clearDiskCache(); + SharePrefUtil.saveString(ct, "qrcode", data); + qrcode = data.substring(data.indexOf("/"),data.indexOf(".")); + LogUtil.d("qrcode1 ---" + qrcode); + String[] split = qrcode.split("/"); + if (split!=null&&split.length>2) { + qrcode = split[2]; + LogUtil.d("qrcode2 ---" + qrcode); + } + // ImageLoader.getInstance().displayImage(Url.urlHtml + + // data, + // im_code, ImageOptions.getImageOptions()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + data, im_code, + ImageOptions.getImageOptions(R.drawable.default_video)); +// Glide.with(MyQrCodeActivity.this).load(Url.urlHtml + data) +// .diskCacheStrategy(DiskCacheStrategy.NONE) +// .skipMemoryCache(true).into(im_code); + } + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + /** + * + * 调用分享功能 + * 分享主标题:在肝胆相照平台联系刘小平医生,沟通交流更方便 + 分享副标题:我正在使用肝胆相照,请关注刘小平专家工作室。 + */ + private void share111() { +// String shareTitle = realName + " " + positionName + " " + hospitalName; +// String shareTitle = "在肝胆相照平台联系"+realName+"医生,沟通交流更方便"; + String shareTitle = "不方便到医院就诊,"+realName+"医生在肝胆相照平台帮助您!"; + LogUtil.i("realName = "+realName); + LogUtil.i("positionName = "+positionName); + LogUtil.i("hospitalName = "+hospitalName); + String shareUrl = "qrCodeImg/html/" + qrcode + ".html"; + // String shareUrlFile = null; + LogUtil.i("shareUrlfdadfadfaf=" + shareUrl); +// String msgSinaContent = getResources().getString(R.string.share_corde_message); +// String msgSinaContent = "我正在使用肝胆相照,请关注"+realName+"专家工作室。"; +// String msgSinaContent = "请关注"+realName+"专家工作室,沟通随访更方便"; + String msgSinaContent = "参与爱肝行动,共创美好前程"; + if (!TextUtils.isEmpty(shareUrl)) { +// shareUrl = Url.urlHtml + shareUrl; + shareUrl = Url.qrCode + expertUuid; + // File file = DiskCacheUtils.findInCache(shareUrl, + // ImageLoader.getInstance().getDiskCache()); + // if(file != null){ + // shareUrlFile = file.getAbsolutePath(); + // } + // ShareUtils.shareMsg(ct, shareTitle, + // "请用肝胆相照患者端APP扫一扫我的二维码,加我为随访医生。谢谢!" + " 二维码地址:" + shareUrl, + // shareUrlFile); +// LogUtil.i("photofdadfadfaf=" + photo); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(Url.urlHtml + photo); + ShareUtils.shareUmeng(ct, shareTitle, msgSinaContent, + msgSinaContent, Url.urlHtml + photo, shareUrl,bitmap); + // ShareUtils.mController.openShare(MyQrCodeActivity.this, false); + } else { + ToastUtil.showToast("无二维码"); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + UMShareAPI.get(this).release(); + //释放资源 + if (web != null) + web.destroy(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyScientificResearchActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyScientificResearchActivity.java new file mode 100644 index 0000000..6e7e78b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyScientificResearchActivity.java @@ -0,0 +1,115 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.ScientificMyFragment; +import cn.shangyu.gdxzExpert.fragment.ScientificOtherFragment; +import cn.shangyu.gdxzExpert.fragment.ScientificSystemFragment; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我的科研 + * + * 类名称:MyScientificResearchActivity + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-14 下午4:36:08 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ + +public class MyScientificResearchActivity extends BaseActivity implements OnCheckedChangeListener{ + + private RadioGroup main_radiogroup; + private FragmentManager fm; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_back_layout.setVisibility(View.VISIBLE); + top_title.setText("科研项目"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_scientific_research, null); + main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup_scientific); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); + changeSystem(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("科研项目"); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_system) { + changeSystem(); + } else if (checkedId == R.id.tab_rbn_other) { + changeOther(); + } else if (checkedId == R.id.tab_rbn_my) { + changeMy(); + } + } + + /** + * 平台项目 + * changePending + * + * void + */ + private void changeSystem() { + ScientificSystemFragment mySystemFragment = new ScientificSystemFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mySystemFragment, "ScientificSystemFragment").commit(); + } + + /** + * 其他项目 + * changeServices + * + * void + */ + private void changeOther() { + ScientificOtherFragment myOtherFragment = new ScientificOtherFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myOtherFragment, "ScientificOtherFragment").commit(); + } + /** + * 我的项目 + * changeComplete + * + * void + */ + private void changeMy() { + ScientificMyFragment myMyFragment = new ScientificMyFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myMyFragment, "ScientificMyFragment").commit(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyUserIconActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyUserIconActivity.java new file mode 100644 index 0000000..18b2cd2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyUserIconActivity.java @@ -0,0 +1,237 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.widget.Toast; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.DefaultItemAnimator; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.ItemTouchHelper; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MyUserIconAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.GetUserIconBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ItemDragHelperCallback; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.MyUserIconUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.fragment.HomeFragment.GETUSERICON; + + + +/** + * Created by WANGChengXin on 2020/3/9. + */ + +public class MyUserIconActivity extends BaseActivity implements OnCallBackFromNet,View.OnClickListener{ + private Context mContext; + private RecyclerView mNewsChannelMineRv; + private RecyclerView mNewsChannelMoreRv; + private List list1; + private List list2; + private MyUserIconAdapter mMineAdapter; + private MyUserIconAdapter mMoreAdapter; + private boolean is_choose; + private static final int ADDUSERICON = 222; + private List data; + private List data1; + + @Override + public void setTitle() { + top_title.setText("我的应用"); + top_right_text.setText("编辑"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + top_back_layout.setOnClickListener(this); + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_my_usericon); + mNewsChannelMineRv = view.findViewById(R.id.news_channel_mine_rv); + mNewsChannelMoreRv = view.findViewById(R.id.news_channel_more_rv); + mContext = this; + list1 = new ArrayList<>(); + list2 = new ArrayList<>(); + getUserIcon(); + return view; + } + + private void getUserIcon() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getUserIcon,map,GETUSERICON,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.top_right_text: + if ("编辑".equals(top_right_text.getText())){ + if (mMineAdapter!=null&&mMoreAdapter!=null){ + is_choose = true; + top_right_text.setText("完成"); + mMineAdapter.showChoose(1); + mMineAdapter.notifyDataSetChanged(); + mMoreAdapter.showChoose(2); + mMoreAdapter.notifyDataSetChanged(); + } + }else { + if (list1.size()<3){ + ToastUtil.showMessage("必须添加3个应用"); + }else { + //请求接口 + String idStr = list1.get(0).getId()+","+list1.get(1).getId()+","+list1.get(2).getId(); + Map map = new HashMap<>(); + map.put("idStr",idStr); + sendJsonPostParamtoNetSignMD5(Url.addUserIcon,map,ADDUSERICON,this); + } + + } + + break; + case R.id.top_back_layout: + finish(); + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case GETUSERICON: + LogUtil.i("GETUSERICON = "+resultJson); + GetUserIconBean getUserIconBean = GsonTools.fromGsonToBean(resultJson, GetUserIconBean.class); + if (getUserIconBean!=null&&getUserIconBean.getCode().equals("200")){ + List data = getUserIconBean.getData(); + for (int i = 0; i list) { + mMineAdapter = new MyUserIconAdapter(mContext, list); + mNewsChannelMineRv.setLayoutManager(new GridLayoutManager(this, 3, LinearLayoutManager.VERTICAL, false)); + mNewsChannelMineRv.setItemAnimator(new DefaultItemAnimator()); + mNewsChannelMineRv.setAdapter(mMineAdapter); + //加载数据完毕后 设置监听,拖拽移动事件 和 点击事件 把ItemDragHelperCallback设置给RecyclerView使用 + ItemDragHelperCallback callback = new ItemDragHelperCallback(mMineAdapter); + ItemTouchHelper touchHelper = new ItemTouchHelper(callback); + touchHelper.attachToRecyclerView(mNewsChannelMineRv); + mMineAdapter.setItemDragHelperCallback(callback); + mMineAdapter.setOnItemClickListener(new MyUserIconAdapter.OnItemClickListener() { + @Override + public void onItemClick(View view, int position) { + GetUserIconBean.DataBean newsChannel = mMineAdapter.getAdapterData().get(position); + if (is_choose){//可编辑 + mMoreAdapter.getAdapterData().add(newsChannel); + mMoreAdapter.notifyDataSetChanged(); + mMineAdapter.getAdapterData().remove(position); + mMineAdapter.notifyDataSetChanged(); + list1 = mMineAdapter.getAdapterData(); + + }else { + MyUserIconUtil.myIntent(mContext,newsChannel.getName()); + } + + + } + }); + } + + + public void returnMoreNewsChannels(List list) { + mMoreAdapter = new MyUserIconAdapter(mContext, list); + mNewsChannelMoreRv.setLayoutManager(new GridLayoutManager(this, 3, LinearLayoutManager.VERTICAL, false)); + mNewsChannelMoreRv.setItemAnimator(new DefaultItemAnimator()); + mNewsChannelMoreRv.setAdapter(mMoreAdapter); + mMoreAdapter.setOnItemClickListener(new MyUserIconAdapter.OnItemClickListener() { + @Override + public void onItemClick(View view, int position) { + if (is_choose){//可编辑 + if(mMineAdapter.getAdapterData().size()==3){ + Toast.makeText(mContext, "最多只能添加3个", Toast.LENGTH_SHORT).show(); + }else{ + GetUserIconBean.DataBean newsChannel = mMoreAdapter.getAdapterData().get(position); + mMoreAdapter.getAdapterData().remove(position); + mMoreAdapter.notifyDataSetChanged(); + mMineAdapter.getAdapterData().add(newsChannel); + mMineAdapter.notifyDataSetChanged(); + list1 = mMineAdapter.getAdapterData(); + + } + }else { + GetUserIconBean.DataBean newsChannel = mMoreAdapter.getAdapterData().get(position); + MyUserIconUtil.myIntent(mContext,newsChannel.getName()); + } + + + + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVIPActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVIPActivity.java new file mode 100644 index 0000000..8d7b4ce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVIPActivity.java @@ -0,0 +1,108 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import com.gyf.immersionbar.ImmersionBar; + +import androidx.fragment.app.FragmentManager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.VipCompleteFragment; +import cn.shangyu.gdxzExpert.fragment.VipPendingFragment; +import cn.shangyu.gdxzExpert.fragment.VipServicesFragment; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午3:52:22 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的VIP页面 + */ + +public class MyVIPActivity extends BaseActivity implements OnCheckedChangeListener{ + + private RadioGroup main_radiogroup; + private FragmentManager fm; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_back_layout.setVisibility(View.VISIBLE); + top_title.setText("我的VIP"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_vip, null); + main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup_vip); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getSupportFragmentManager(); + changePending(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + + switch (checkedId) { + case R.id.tab_rbn_pending: + changePending(); + break; + case R.id.tab_rbn_services: + changeServices(); + break; + case R.id.tab_rbn_complete: + changeComplete(); + break; + } + } + + /** + * 待审核 + * changePending + * + * void + */ + private void changePending() { + VipPendingFragment myVipPendingFragment = new VipPendingFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myVipPendingFragment, "VipPendingFragment").commit(); + } + + /** + * 服务中 + * changeServices + * + * void + */ + private void changeServices() { + VipServicesFragment myVipServicesFragment = new VipServicesFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myVipServicesFragment, "VipServicesFragment").commit(); + } + /** + * 已完成 + * changeComplete + * + * void + */ + private void changeComplete() { + VipCompleteFragment myVipCompleteFragment = new VipCompleteFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myVipCompleteFragment, "VipCompleteFragment").commit(); + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVisitsDressActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVisitsDressActivity.java new file mode 100644 index 0000000..ff3983a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyVisitsDressActivity.java @@ -0,0 +1,613 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AbsListView.LayoutParams; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyVisitsDressActivity extends BaseActivity implements + OnClickListener, OnCallBackFromNet { + private View view; + private GridView mGv_visit; + public final static int GET_CALENDAR_FROM_NET = 101; + private MyVisitsDressActivity mActivity; + private String startdate; + private TextView mVisitnote, mVisitTime; + + private static String CalendarForever = Url.getupdataExpertCalendarForever;// 修改门诊日历(默认全部)接口 + private static String CalendarTemporary = Url.getupdataExpertCalendarTemporary;// 修改门诊日历(当前一周) + CustomProgressDialog dialog; + private TextView mMon, mTue, mWed, mThu, mFri, mSat, mSun; + int[] intsId = { R.id.tv_vist_mon, R.id.tv_vist_tue, R.id.tv_vist_wed, + R.id.tv_vist_thu, R.id.tv_vist_fir, R.id.tv_vist_sat, + R.id.tv_vist_sun }; + TextView[] listsTime = { mMon, mTue, mWed, mThu, mFri, mSat, mSun }; + private String expertUuid; + private Button myleft; + private Button myright; + private LinearLayout lv_bt_dress; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("出诊计划"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("提交"); + top_right_text.setOnClickListener(this); + top_back_layout.setOnClickListener(this); + } + + // getExpertCalendar + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");// 取出专家的uuid + view = View.inflate(getApplicationContext(), + R.layout.activity_visit_ex, null); + + lv_bt_dress = (LinearLayout) view.findViewById(R.id.ly_bt_exit_dress); + lv_bt_dress.setOnClickListener(this); + mGv_visit = (GridView) view.findViewById(R.id.gv_visity_server); + mVisitnote = (TextView) view.findViewById(R.id.et_visit_note); + mVisitTime = (TextView) view.findViewById(R.id.tv_visiti_date); + myleft = (Button) view.findViewById(R.id.bt_visit_left); + myright = (Button) view.findViewById(R.id.bt_visit_right); + myleft.setOnClickListener(this); + myright.setOnClickListener(this); + for (int i = 0; i < listsTime.length; i++) { + listsTime[i] = (TextView) view.findViewById(intsId[i]); + } + mActivity = this; + putEmpty(); + startdate = ""; + dialog = new CustomProgressDialog(this, "请稍候"); + getCalendarData(startdate); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + if (data == null) { + return; + } + if (requestCode == 33) { + if (data.getStringExtra("NoteDress").equals("")) { + mVisitnote.setText(note); + } else { + mVisitnote.setText(data.getStringExtra("NoteDress")); + } + } + }; + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + + } + }; + private long firstTime = 0; + private String note; + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back_layout:// 返回 + finish(); + break; + case R.id.ly_bt_exit_dress:// 启动出诊备注地址编辑界面 + Intent intent = new Intent(MyVisitsDressActivity.this, + NoteDressEditActivity.class); + startActivityForResult(intent, 33); + break; + case R.id.bt_visit_left:// 上一周 + // getCalendarData(formatDate(-7)); + if (formatDate(-7).equals("0")) { + ToastUtil.showMessage("门诊时间已经失效"); + } else { + getCalendarData(formatDate(-7)); + } + break; + case R.id.bt_visit_right:// 下一周 + getCalendarData(formatDate(+7)); + break; + case R.id.top_right_text:// 提交 + // AlertDialog对话框 + // //定义列表中的选项 + String dress = mVisitnote.getText().toString().trim(); + if (TextUtils.isEmpty(dress)) { + ToastUtil.showMessage("请填写出诊地址"); + } else { + final String[] items = new String[] { "适用于以后所有周", "仅适用于本周" }; + // 设置列表选项 + new AlertDialog.Builder(MyVisitsDressActivity.this) + .setTitle("请选择适用范围") + .setItems(items, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + switch (which) { + case 0: + ExpertCalendarForever(CalendarForever);// 全部设置 + break; + case 1: + ExpertCalendarTemporary(CalendarTemporary);// 只设置当前一周 + break; + } + } + }).setNegativeButton("取消", null).show(); + } + break; + + default: + break; + } + } + + /** + * + * @param calendarForever + * 全部按当前设置 + */ + private void ExpertCalendarForever(String calendarForever) { + // TODO Auto-generated method stub + String dress = mVisitnote.getText().toString().trim(); + RequestParams params = new RequestParams(); + params.addBodyParameter("expert_uuid", expertUuid); + params.addBodyParameter("mon_am", String.valueOf(ints.get(0))); + params.addBodyParameter("mon_pm", String.valueOf(ints.get(1))); + params.addBodyParameter("tue_am", String.valueOf(ints.get(2))); + params.addBodyParameter("tue_pm", String.valueOf(ints.get(3))); + params.addBodyParameter("wed_am", String.valueOf(ints.get(4))); + params.addBodyParameter("wed_pm", String.valueOf(ints.get(5))); + params.addBodyParameter("thu_am", String.valueOf(ints.get(6))); + params.addBodyParameter("thu_pm", String.valueOf(ints.get(7))); + params.addBodyParameter("fri_am", String.valueOf(ints.get(8))); + params.addBodyParameter("fri_pm", String.valueOf(ints.get(9))); + params.addBodyParameter("sat_am", String.valueOf(ints.get(10))); + params.addBodyParameter("sat_pm", String.valueOf(ints.get(11))); + params.addBodyParameter("sun_am", String.valueOf(ints.get(12))); + params.addBodyParameter("sun_pm", String.valueOf(ints.get(13))); + params.addBodyParameter("startdate", startdate);// 起始时间(当前周的周日所对应的日期) + params.addBodyParameter("note", dress); + HttpHelper.loadData(HttpMethod.POST, calendarForever, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + ToastUtil.showMessage("设置成功"); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + dismissLoadingProgress(); + ToastUtil.showMessage("网络请求失败,请稍候再试!"); + } + }); + } + + /** + * + * @param calendarTemporary + * 只设置本周 + */ + private void ExpertCalendarTemporary(String calendarTemporary) { + // TODO Auto-generated method stub + String dress = mVisitnote.getText().toString().trim(); + RequestParams params = new RequestParams(); + params.addBodyParameter("expert_uuid", expertUuid); + params.addBodyParameter("mon_am", String.valueOf(ints.get(0))); + params.addBodyParameter("mon_pm", String.valueOf(ints.get(1))); + params.addBodyParameter("tue_am", String.valueOf(ints.get(2))); + params.addBodyParameter("tue_pm", String.valueOf(ints.get(3))); + params.addBodyParameter("wed_am", String.valueOf(ints.get(4))); + params.addBodyParameter("wed_pm", String.valueOf(ints.get(5))); + params.addBodyParameter("thu_am", String.valueOf(ints.get(6))); + params.addBodyParameter("thu_pm", String.valueOf(ints.get(7))); + params.addBodyParameter("fri_am", String.valueOf(ints.get(8))); + params.addBodyParameter("fri_pm", String.valueOf(ints.get(9))); + params.addBodyParameter("sat_am", String.valueOf(ints.get(10))); + params.addBodyParameter("sat_pm", String.valueOf(ints.get(11))); + params.addBodyParameter("sun_am", String.valueOf(ints.get(12))); + params.addBodyParameter("sun_pm", String.valueOf(ints.get(13))); + params.addBodyParameter("note", dress); + params.addBodyParameter("startdate", startdate);// 起始时间(当前周的周日所对应的日期) + HttpHelper.loadData(HttpMethod.POST, calendarTemporary, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + ToastUtil.showMessage("设置成功"); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + dismissLoadingProgress(); + ToastUtil.showMessage("网络请求失败,请稍候再试!"); + } + }); + + } + + public void getCalendarData(String startdate) { + if (!dialog.isShowing()) { + dialog.show(); + } + Map param = new HashMap(); + param.put("expert_uuid", expertUuid); + param.put("startdate", startdate); + sendParamtoNet(Url.getgetExpertCalendar, param, GET_CALENDAR_FROM_NET, + mActivity, false); + } + + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + if (dialog != null) { + dialog.dismiss(); + } + String code = null; + String message = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + startdate = jsonObject.getString("startdate"); + for (int i = 0; i < listsTime.length; i++) { + listsTime[i].setText(formatDateB(i)); + } + mVisitTime.setText(formatDateA(0) + "-" + formatDateA(6)); + } catch (JSONException e) { + e.printStackTrace(); + } + if (code.equals(0)) { + ToastUtil.showMessage("您暂未设置出诊计划"); + } + + if (code.equals("1")) { + switch (resultCode) { + case GET_CALENDAR_FROM_NET: + try { + JSONObject object = jsonObject + .getJSONObject("expertCalendar"); + + if (ints != null) { + ints.clear(); + } else { + ints = new ArrayList(); + } + ints.add( + 0, + !object.getString("mon_am").equals("null") ? object + .getString("mon_am") : "0"); + ints.add( + 1, + !object.getString("mon_pm").equals("null") ? object + .getString("mon_pm") : "0"); + ints.add( + 2, + !object.getString("tue_am").equals("null") ? object + .getString("tue_am") : "0"); + ints.add( + 3, + !object.getString("tue_pm").equals("null") ? object + .getString("tue_pm") : "0"); + ints.add( + 4, + !object.getString("wed_am").equals("null") ? object + .getString("wed_am") : "0"); + ints.add( + 5, + !object.getString("wed_pm").equals("null") ? object + .getString("wed_pm") : "0"); + ints.add( + 6, + !object.getString("thu_am").equals("null") ? object + .getString("thu_am") : "0"); + ints.add( + 7, + !object.getString("thu_pm").equals("null") ? object + .getString("thu_pm") : "0"); + ints.add( + 8, + !object.getString("fri_am").equals("null") ? object + .getString("fri_am") : "0"); + ints.add( + 9, + !object.getString("fri_pm").equals("null") ? object + .getString("fri_pm") : "0"); + ints.add( + 10, + !object.getString("sat_am").equals("null") ? object + .getString("sat_am") : "0"); + ints.add( + 11, + !object.getString("sat_pm").equals("null") ? object + .getString("sat_pm") : "0"); + ints.add( + 12, + !object.getString("sun_am").equals("null") ? object + .getString("sun_am") : "0"); + ints.add( + 13, + !object.getString("sun_pm").equals("null") ? object + .getString("sun_pm") : "0"); + note = object.getString("note"); + if (note != null) { + mVisitnote.setText(note); + } + + adapter.notifyDataSetChanged(); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + + default: + break; + } + } else { + if (code.equals(3)) { + ToastUtil.showMessage("请求失败"); + } + } + } + + VisitAdapter adapter; + + public void putEmpty() { + adapter = new VisitAdapter(); + ints = new ArrayList(); + for (int i = 0; i < 14; i++) { + ints.add("0"); + } + mGv_visit.setAdapter(adapter); + } + + List ints; + + class VisitAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return 16; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return ints.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.item_visit); + TextView mTv_time = (TextView) view.findViewById(R.id.tv_go_visit); + TextView mV_lift = (TextView) view + .findViewById(R.id.v_item_visit_lift); + TextView mV_bottom = (TextView) view + .findViewById(R.id.v_item_visit_bottom); + if (position == 0) { + mTv_time.setText("上午"); + mTv_time.setTextColor(getResources().getColor( + R.color.text_color)); + } + if (position == 1) { + mTv_time.setText("下午"); + mTv_time.setTextColor(getResources().getColor( + R.color.text_color)); + } + + if (position % 2 == 0) { + mV_lift.setVisibility(View.GONE); + } else { + mV_lift.setVisibility(View.VISIBLE); + } + if (position > 13) { + view.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, dip2px( + MyVisitsDressActivity.this, 34))); + + } + + for (int i = 0; i < ints.size(); i++) { + if (position > 1) { + if (ints.get(position - 2).equals("1")) { + mTv_time.setBackgroundResource(R.color.commonBackground); + mTv_time.setText("出诊"); + // view.setBackgroundResource(R.color.tittle_bg); + } else { + mTv_time.setText(""); + } + } + + } + mTv_time.setTag(position); + if (position > 1) { + mTv_time.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (position == 0 || position == 1) { + return; + } + ColorDrawable colorDrawable = (ColorDrawable) v + .getBackground();// 获取背景颜色 + if (getResources().getColor(R.color.commonBackground) == colorDrawable + .getColor()) { + v.setBackgroundResource(R.color.white); + ((TextView) v).setText(""); + ints.set(position - 2, "0"); + } else { + v.setBackgroundResource(R.color.commonBackground); + ((TextView) v).setText("出诊"); + ints.set(position - 2, "1"); + } + } + }); + } + return view; + } + + } + + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + private int addTime = 0; + + public String formatDate(int addTime) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + if (StringUtil.isEmpty(startdate)) { + return ""; + } + Date date = sdf.parse(startdate); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH, addTime); + if ((calendar.getTimeInMillis() - System.currentTimeMillis()) < -1000 + * 60 * 60 * 24 * 7) { + return "0"; + } + date = calendar.getTime(); + return sdf.format(date); + // 加1之后的日期Top + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; + + } + + public String formatDateA(int addTime) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat newsdf = new SimpleDateFormat("MM月dd日"); + try { + if (StringUtil.isEmpty(startdate)) { + return ""; + } + Date date = sdf.parse(startdate); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH, addTime); + date = calendar.getTime(); + return newsdf.format(date); + // 加1之后的日期Top + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; + + } + + public String formatDateB(int addTime) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat newsdf = new SimpleDateFormat("MM-dd"); + try { + if (StringUtil.isEmpty(startdate)) { + return ""; + } + Date date = sdf.parse(startdate); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.add(Calendar.DAY_OF_MONTH, addTime); + date = calendar.getTime(); + return newsdf.format(date); + // 加1之后的日期Top + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return null; + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWFArticleActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWFArticleActivity.java new file mode 100644 index 0000000..aea8b7d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWFArticleActivity.java @@ -0,0 +1,198 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.ChinWFCollectFragment; +import cn.shangyu.gdxzExpert.fragment.ChineaseWFFragment; +import cn.shangyu.gdxzExpert.fragment.EEWFCollectFragment; +import cn.shangyu.gdxzExpert.fragment.Englishragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MyWFArticleActivity.java + * + * @author zhaodewei + * @date 2015-11-4 上午9:40:44 + * + * + * 功能说明:万方下载页面 + */ +public class MyWFArticleActivity extends BaseActivity implements + OnCheckedChangeListener { + + private FragmentManager fm; + private RadioGroup mRg_Acticle; + private View mV_line_chinease, mV_line_english; + /** + * 分收藏和下载 + */ + private String type; + private boolean isDownLoad; + + // private TextView tvGuide, tvJournal, tvExpress, tvTools; + View rbn_chinease; + @Override + public void setTitle() { + type = getIntent().getType(); + top_right.setVisibility(View.GONE); + if (type != null && type.equals("收藏")) { + isDownLoad = false; + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("已收藏"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } +// top_title.setText("已收藏"); + } else { + if(StringUtil.isEmpty(getIntent().getStringExtra("name"))) + { + top_title.setText("已下载"); + } + else + { + top_title.setText(getIntent().getStringExtra("name")); + } +// top_title.setText("已下载"); + isDownLoad = true; + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_my_wfacticle_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_my_wfacticle, null); + } + mRg_Acticle = (RadioGroup) view.findViewById(R.id.rg_mywf); + mV_line_chinease = view.findViewById(R.id.v_chinease_hong); + mV_line_english = view.findViewById(R.id.v_english_hong); + + rbn_chinease=view.findViewById(R.id.rbn_chinease); + if(!isDownLoad) + { + mRg_Acticle.setVisibility(View.GONE); + rbn_chinease.setVisibility(View.GONE); + + } + fm = getSupportFragmentManager(); + mRg_Acticle.setOnCheckedChangeListener(this); + if (isDownLoad) { + changeChineaseDownload(); + } else { + changeEnglishCollect(); +// changeChineaseCollect(); + } + + return view; + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + switch (checkedId) { + case R.id.tab_rbn_chinease: + if (isDownLoad) { + // 中文下载 + changeChineaseDownload(); + } else { + // 中文收藏 + changeChineaseCollect(); + } + mV_line_chinease.setVisibility(View.VISIBLE); + mV_line_english.setVisibility(View.INVISIBLE); + break; + case R.id.tab_rbn_english: + if (isDownLoad) { + // 英文下载 + changeEnglishDownload(); + } else { + // 英文收藏 + changeEnglishCollect(); + } + mV_line_english.setVisibility(View.VISIBLE); + mV_line_chinease.setVisibility(View.INVISIBLE); + break; + + default: + break; + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + /** + * 中文期刊 + */ + private void changeChineaseDownload() { + + top_right.setVisibility(View.GONE); + ChineaseWFFragment mFragment = new ChineaseWFFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "WFCHNDOWN").commit(); + } + + /** + * 英文期刊 + */ + private void changeEnglishDownload() { + + top_right.setVisibility(View.GONE); + Englishragment englishragment = new Englishragment(); + fm.beginTransaction() + .replace(R.id.frame_container, englishragment, "ENCHNDOWN").commit(); + } + + /** + * 中文收藏 + */ + private void changeChineaseCollect() { + ChinWFCollectFragment mFragment = new ChinWFCollectFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "WFCHNCOLL").commit(); + } + + /** + * 英文收藏 + */ + private void changeEnglishCollect() { + EEWFCollectFragment eewfCollectFragment = new EEWFCollectFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, eewfCollectFragment, "eewfCollectFragment").commit(); +// EnglishCollectFragment englishCollectFragment = new EnglishCollectFragment(); +// fm.beginTransaction() +// .replace(R.id.frame_container, englishCollectFragment, "ENGLISHCOLL").commit(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWelfAreActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWelfAreActivity.java new file mode 100644 index 0000000..790b3d3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWelfAreActivity.java @@ -0,0 +1,180 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RadioButton; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.GetWelfAreFragment; +import cn.shangyu.gdxzExpert.fragment.WelfAreFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/18. + */ + +public class MyWelfAreActivity extends BaseActivity { + + private View view; + private ArrayList fragment_list; + private WelfAreFragment dis; + private GetWelfAreFragment myDis; + private FragmentPagerAdapter mAdapter; + private ViewPager frame_container; + private RadioButton my_casediscussion; + private RadioButton my_case; + private TextView btn_; + private MyWelfAreActivity mcontext; + private FragmentManager fm; + + @Override + public void setTitle() { + top_title.setText("我的福利"); + top_back_layout.setOnClickListener(this); + top_right_text = (TextView) findViewById(R.id.top_right_text); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("规则"); + top_right_text.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_mywelfare_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_mywelfare); + } + mcontext = this; + fm = getSupportFragmentManager(); + AppManager.getAppManager().addActivity1(this); +// frame_container = (ViewPager) view.findViewById(R.id.frame_container); + my_casediscussion = (RadioButton) view.findViewById(R.id.my_casediscussion); + my_case = (RadioButton) view.findViewById(R.id.my_case); + btn_ = view.findViewById(R.id.btn_); + + view.findViewById(R.id.ll_buy_point).setOnClickListener(this);//福利详情 + view.findViewById(R.id.ll_point_shop).setOnClickListener(this);//加患者 + view.findViewById(R.id.ll_integraltickit).setOnClickListener(this);//积分详情 + my_casediscussion.setOnClickListener(this); + my_case.setOnClickListener(this); + btn_.setOnClickListener(this); +// initFragment(); + int frag=getIntent().getIntExtra("changeFragment",1); + if(frag==1) + { + my_casediscussion.setChecked(true); + WelfAreFragment homeFragment = new WelfAreFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, homeFragment, "home_fragment").commitAllowingStateLoss();; + } + else + { + my_case.setChecked(true); + GetWelfAreFragment homeFragment1 = new GetWelfAreFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, homeFragment1, "home_fragment1").commitAllowingStateLoss(); + } + + + + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("我的福利"); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + Intent broadc = new Intent(MyWelfAreActivity.this, NewsDetailActivity.class); + broadc.putExtra("url","https://doc.igandan.com/app/integral/integral_welfare.html"); + broadc.putExtra("title","福利规则"); + broadc.setType("qiandao"); + startActivity(broadc); + } else if (id == R.id.top_back_layout) { + finish(); + } else if (id == R.id.my_case) { + GetWelfAreFragment homeFragment1 = new GetWelfAreFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, homeFragment1, "home_fragment1").commitAllowingStateLoss(); + } else if (id == R.id.my_casediscussion) { + WelfAreFragment homeFragment = new WelfAreFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, homeFragment, "home_fragment").commitAllowingStateLoss();; + } else if (id == R.id.btn_) { + + startActivity(new Intent(mcontext, MyFuliCardActivity.class)); +// my_case.setChecked(true); +// GetWelfAreFragment homeFragment2 = new GetWelfAreFragment(); +// fm.beginTransaction() +// .replace(R.id.frame_container, homeFragment2, "home_fragment1").commitAllowingStateLoss(); +// startActivity(new Intent(mcontext, IntegralTicketActivity.class)); + } else if (id == R.id.ll_point_shop) { + startActivity(new Intent(mcontext,MyQrCodeActivity.class)); + } else if (id == R.id.ll_buy_point) { + startActivity(new Intent(mcontext,WelfareDetailActivity.class)); + } else if (id == R.id.ll_integraltickit) { + startActivity(new Intent(mcontext,AccumulatePointsActivity.class)); + } + } + private void initFragment() { + // TODO Auto-generated method stub + fragment_list = new ArrayList<>(); + dis = new WelfAreFragment(); + myDis = new GetWelfAreFragment(); + fragment_list.add(dis); + fragment_list.add(myDis); + mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { + + @Override + public int getCount() { + return fragment_list.size(); + } + + @Override + public Fragment getItem(int arg0) { + return fragment_list.get(arg0); + } + }; + frame_container.setAdapter(mAdapter); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + AppManager.getAppManager().finishAllActivity1(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWorkTableActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWorkTableActivity.java new file mode 100644 index 0000000..439e587 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MyWorkTableActivity.java @@ -0,0 +1,516 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.GridView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MyWorkTableBean; +import cn.shangyu.gdxzExpert.bean.MyWorkTableBean.patientCliniData; +import cn.shangyu.gdxzExpert.bean.MyWorkTableBean.patientTelData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:时间段选择 + */ +public class MyWorkTableActivity extends BaseActivity implements + OnItemClickListener { + + private TextView tv_date; + //时间点的数组 + private String[] stringArrays; + private List dataList; + private TextView tv_morning; + private TextView tv_afternoon; + private String expertUuid; + private int s = 0; + private Button bt_left; + private Button bt_right; + private List dataListTwo; + private static String getMyWorkUrl = Url.getMyWork; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(getString(R.string.my_work)); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_my_work); + tv_date = (TextView) view.findViewById(R.id.tv_date); + bt_left = (Button) view.findViewById(R.id.bt_left); + bt_right = (Button) view.findViewById(R.id.bt_right); + gv_time = (GridView) view.findViewById(R.id.gv_time); + tv_morning = (TextView) view.findViewById(R.id.tv_morning);//上午 + tv_afternoon = (TextView) view.findViewById(R.id.tv_afternoon);//下午 + bt_left.setOnClickListener(this); + bt_right.setOnClickListener(this); +// gv_time.setOnItemClickListener(this); + + initData(); + + return view; + } + + /** + * 初始化数据 + * initData + * + * void + */ + private void initData() { + dataList = DateUtil.getDataList(); + dataListTwo = DateUtil.getDataListTwo(); + tv_date.setText(dataList.get(0).toString().substring(1)); + +// for (int i = 0; i < dataListTwo.size(); i++) { +// LogUtil.i(" dataListTwo =="+dataListTwo.get(i).toString()); +// } + + //时间点初始化 + stringArrays = getResources().getStringArray(R.array.date_time); + + //初始化选中位置二位数组 + for (int j = 0; j < 7; j++) { + for (int i = 0; i < stringArrays.length -1; i++) { + + position[j][i] = -1; + } + } + adapter = new MyAdapter(0); + gv_time.setAdapter(adapter); + + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, ""); + + getWorkData(getMyWorkUrl, Integer.valueOf(8), dataListTwo.get(0).toString()); + + setTextMorningString("0"); + setTextAfternoonString("0"); + } + + /** + * 设置上午预定数量 + * setTextString + * + * @param + * @param count + * void + */ + private void setTextMorningString(String count){ + //方法一:textview局部变色 +// tv_morning.setText(Html.fromHtml("红色其它颜色")); + //方法二: + //ForegroundColorSpan 为文字前景色,BackgroundColorSpan为文字背景色 + //分别有 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)、 + //Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,后面不包括)、 + //Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,后面包括)、 + //Spanned.SPAN_INCLUSIVE_INCLUSIVE(前后都包括) + String text = getString(R.string.my_work_moring, count); + SpannableStringBuilder style=new SpannableStringBuilder(text); +// style.setSpan(new BackgroundColorSpan(R.color.top_title),0,2,Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置textview的背景颜色 + style.setSpan(new ForegroundColorSpan(0xFF8D2316),3,text.length(),Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的颜色 + tv_morning.setText(style); + } + + /** + * 设置下午预定数量 + * setTextAfternoonString + * + * @param count + * void + */ + private void setTextAfternoonString(String count){ + String text = getString(R.string.my_work_aft, count); + SpannableStringBuilder style=new SpannableStringBuilder(text); + style.setSpan(new ForegroundColorSpan(0xFF8D2316),3,text.length(),Spannable.SPAN_EXCLUSIVE_INCLUSIVE); //设置指定位置文字的颜色 + tv_afternoon.setText(style); + } + + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + + /** + * 请求服务器。获取患者列表数据 + * + * @param loadUrl + * void + * @param orderDate + */ + private void getWorkData(String loadUrl, int week, String orderDate) { + showProgressDialog("正在加载"); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid", expertUuid);//uuid + params.addBodyParameter("callWeek", String.valueOf(week));//0.星期日 1.星期一 2.星期二 3.星期三 4.星期四 5.星期五 6.星期六,当天传入参数8 + params.addBodyParameter("orderDate", orderDate);//当前时间 String(年月日2008-12-29) + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + closeProgressDialog(); + + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("请求数据失败,请稍候再试"); + } + }); + } + + /** + * 解析并处理数据 + * @param result + */ + private void processData(String result) { + + closeProgressDialog(); + + MyWorkTableBean bean = GsonTools.fromGsonToBean(result,MyWorkTableBean.class); + if (StringUtil.isOneToCode(bean.code)) { + return; + } +// List expertTelList;//专家设置的电话咨询时间 + List patientTelList;//患者设置的电话咨询时间 +// List expertCliniList;//专家设置的门诊预约时间 + List patientCliniList;//患者设置的门诊预约时间 + + setTextMorningString("0"); + setTextAfternoonString("0"); + // 数据为空 + if (bean.data == null){ + //如果此处不做处理 数据为空的时候就不会在执行下一步 + return; + } else{ + //取出专家订购的 + /*expertTelList = bean.data.ECallSTBList; + if (expertTelList != null && expertTelList.size() > 0) { + for (int i = 0; i < expertTelList.size(); i++) { + String startDate = expertTelList.get(i).startDate;//设置的开始时间 + if (!TextUtils.isEmpty(startDate)) { + for (int j = 0; j < stringArrays.length -1; j++) { + if (stringArrays[j].equals(startDate)) { + position[s][j] = j; + } + } + } + } + }*/ + //取出患者订购的 + patientTelList = bean.data.PCallSTBList; + if (patientTelList != null && patientTelList.size() > 0) { + for (int i = 0; i < patientTelList.size(); i++) { + String startDate = patientTelList.get(i).startDate;//设置的开始时间 +// String endDate = patientTelList.get(i).endDate;//设置的结束时间 + if (!TextUtils.isEmpty(startDate)) { +// int startj = 0; +// int endj = 0; + for (int j = 0; j < stringArrays.length -1; j++) { + if (stringArrays[j].equals(startDate)) { + position[s][j] = j; +// startj = j; + } +// if (!TextUtils.isEmpty(endDate)) { +// if (stringArrays[j].equals(endDate)) { +// position[s][j] = j; +// endj = j; +// } +// } +// if (endj > startj) { +// for (int k = 1; k < endj - startj; k++) { +// position[s][j] = startj + k; +// LogUtil.i("startj + k="+startj + k); +// } +// } + } + } + } + } +// expertCliniList = bean.data.EClinicSTBList; +// if (expertCliniList != null && expertCliniList.size() > 0) { +// for (int i = 0; i < expertCliniList.size(); i++) { +// String morAft = expertCliniList.get(i).morAft;//0全天 1上午 2下午 +// int count = expertCliniList.get(i).count;//数量 +// if ("1".equals(morAft)) { +// setTextString(tv_morning, count+""); +// }else if ("2".equals(morAft)) { +// setTextString(tv_afternoon, count+""); +// }else if ("0".equals(morAft)) { +// setTextString(tv_morning, count+""); +// setTextString(tv_afternoon, count+""); +// } +// } +// } + patientCliniList = bean.data.PClinicSTBList; + if (patientCliniList != null && patientCliniList.size() > 0) { + for (int i = 0; i < patientCliniList.size(); i++) { + String morAft = patientCliniList.get(i).morAft;//0全天 1上午 2下午 + int count = patientCliniList.get(i).count;//数量 + if ("1".equals(morAft)) { + setTextMorningString(count+""); + }else if ("2".equals(morAft)) { + setTextAfternoonString(count+""); + }else if ("0".equals(morAft)) { + setTextMorningString(count+""); + setTextAfternoonString(count+""); + }else{ + setTextMorningString("0"); + setTextAfternoonString("0"); + } + } + } + + adapter = new MyAdapter(s); + gv_time.setAdapter(adapter); + } + } + + private class MyAdapter extends BaseAdapter { + + // 用来控制CheckBox的选中状况 + private HashMap isSelected; + public MyAdapter(int s) { + isSelected = new HashMap(); + // 初始化数据 + initDate(s); + } + + // 初始化isSelected的数据 ,要注意根据位置的二维数组动态初始化选中位置 + private void initDate(int s) { + for (int i = 0; i < stringArrays.length-1; i++) { + getIsSelected().put(i, false); +// LogUtil.i("position[s][i]=="+position[s][i]+"=s="+s+"=i="+i); + if (position[s][i] >= 0) { + getIsSelected().put(position[s][i], true); + } + } + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return stringArrays.length - 1; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder = null; + if (convertView == null) { + // 获得ViewHolder对象 + holder = new ViewHolder(); + // 导入布局并赋值给convertview + convertView = View.inflate(ct, R.layout.item_date_time, null); + holder.cb = (CheckBox) convertView.findViewById(R.id.cb_list_title); + // 为view设置标签 + convertView.setTag(holder); + } else { + // 取出holder + holder = (ViewHolder) convertView.getTag(); + } + + holder.cb.setText(stringArrays[position]); + + // 根据isSelected来设置checkbox的选中状况 + holder.cb.setChecked(getIsSelected().get(position)); + + return convertView; + } + + public HashMap getIsSelected() { + return isSelected; + } + + + } + + public static class ViewHolder { + CheckBox cb; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_left: +// 往上移动日期 + dateRemove(); + break; + case R.id.bt_right: + //往下移动日期 + dateAdd(); + break; +// case R.id.bt_ok: +// check(s); +// //提交时间选择 +// selectDate(); +// break; + + default: + break; + } + } + + //向后移动日期 + public void dateRemove() { + check(s); + s--; + if (s == 0) { + bt_left.setEnabled(false); + } + bt_right.setEnabled(true); + tv_date.setText(dataList.get(s).toString().substring(1)); + + showProgressDialog("正在加载"); + String week = dataList.get(s).toString().substring(0,1); + int w = Integer.valueOf(week) - 1; + String date = dataListTwo.get(s).toString(); + getWorkData(getMyWorkUrl, w, date); +// adapter = new MyAdapter(s); +// gv_time.setAdapter(adapter); + } + + //向前移动日期 + public void dateAdd() { + check(s); + s++; + if (s == dataList.size() - 1) { + bt_right.setEnabled(false); + } + bt_left.setEnabled(true); + tv_date.setText(dataList.get(s).toString().substring(1)); + + showProgressDialog("正在加载"); + String week = dataList.get(s).toString().substring(0,1); + int w = Integer.valueOf(week) - 1; + String date = dataListTwo.get(s).toString(); + getWorkData(getMyWorkUrl, w, date); +// adapter = new MyAdapter(s); +// gv_time.setAdapter(adapter); + } + + //保存前一个的选中的位置到二位数组 + public void check(int s){ + // 遍历 + for (int i = 0; i < stringArrays.length -1; i++) { + if (adapter.getIsSelected().get(i)) { +// adapter.getIsSelected().put(i, false); + position[s][i] = i; + }else{ + //防止受i=0的影响,故给初始化一样,未选中都赋予-1 + position[s][i] = -1; + } + } + } + + + int[][] position = new int[7][29];//选中的位置 + String[] Date = new String[7];//时间段 + String[] dates = new String[7];//回显时间段 + String[] Week = new String[7];//周几 + String[] weeks = new String[7];//回显的周几 + private GridView gv_time; + private MyAdapter adapter; +// private String startTime = ""; +// private String endTime = ""; + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + /*if (arg2 == stringArrays.length -1) { + return; + } + + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + ViewHolder holder = (ViewHolder) arg1.getTag(); + // 改变CheckBox的状态 + holder.cb.toggle(); + + // 将CheckBox的选中状况记录下来 + adapter.getIsSelected().put(arg2, holder.cb.isChecked()); */ + + } + + /*private void selectDate() { + // TODO Auto-generated method stub + //点击确定按钮,把存的选中位置取出,中共一周7天的每天的时间段 + for (int j = 0; j < 7; j++) { + Date[j] = ""; + weeks[j] = ""; + Week[j] = ""; + for (int i = 0; i < stringArrays.length -1; i++) { + if (position[j][i] >= 0) { + startTime = stringArrays[i].toString(); + endTime = stringArrays[i+1].toString(); + Date[j] += startTime + "-" + endTime + ","; + weeks[j] = dataList.get(j).toString().substring(7); + Week[j] = dataList.get(j).toString().substring(0,1); + }else{ + + } + } + } + Intent intent = getIntent(); + intent.putExtra("startDate", Date);//日期 + intent.putExtra("callWeek", Week);//周日 + intent.putExtra("weeks", weeks);//汉子回显周日 + setResult(Activity.RESULT_OK, intent); + finish(); + }*/ + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollowActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollowActivity.java new file mode 100644 index 0000000..e793cda --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollowActivity.java @@ -0,0 +1,113 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.net.Uri; +import android.view.View; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MylanBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.mailanPage; + +public class MylanFollowActivity extends BaseActivity implements OnCallBackFromNet { + + + + @Override + public void setTitle() { + top_title.setText("保肝护肾关爱一生"); + } + + TextView tv_total,tv_huanjiao,tv_expect,tv_submit_num,tv_commit_num,tv_note,tv_down; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_mylan_follow); + tv_total=view.findViewById(R.id.tv_total); + tv_huanjiao=view.findViewById(R.id.tv_huanjiao); + tv_expect=view.findViewById(R.id.tv_expect); + tv_submit_num=view.findViewById(R.id.tv_submit_num); + tv_commit_num=view.findViewById(R.id.tv_commit_num); + tv_note=view.findViewById(R.id.tv_note); + tv_down=view.findViewById(R.id.tv_down); + tv_down.setOnClickListener(this); + getMylan(); + return view; + } + private void getMylan() + { + + showProgressDialog("加载中"); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(mailanPage,param,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.tv_down: +// Intent intent=new Intent(MylanFollowActivity.this,WebActivity.class); +// intent.putExtra("url","http://qr61.cn/oxs7Wi/qVK5vS2"); +// intent.putExtra("title","病例模版"); +// intent.putExtra("need_share","1"); +// startActivity(intent); + Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + Uri content_url = Uri.parse("http://qr61.cn/oxs7Wi/qVK5vS2"); + intent.setData(content_url);startActivity(intent); + startActivity(intent); + break; + + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + MylanBean mylanBean; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + mylanBean= GsonTools.fromGsonToBean(resultJson,MylanBean.class); + if("200".equals(mylanBean.getCode())&&mylanBean.getData()!=null) + { + tv_total.setText(mylanBean.getData().getTotal()); + tv_huanjiao.setText(mylanBean.getData().getHuanjiao()); + tv_expect.setText(mylanBean.getData().getExpect()); + tv_submit_num.setText(mylanBean.getData().getSubmit_num()); + tv_commit_num.setText(mylanBean.getData().getCommit_num()); + tv_note.setText(mylanBean.getData().getNote()); + + } + else { + ToastUtil.showToast(mylanBean.getMessage() + ""); + } + break; + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollow_upProjectActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollow_upProjectActivity.java new file mode 100644 index 0000000..e11243f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/MylanFollow_upProjectActivity.java @@ -0,0 +1,223 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.view.View; +import android.widget.RadioButton; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.viewpager.widget.ViewPager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientNoticeBean; +import cn.shangyu.gdxzExpert.fragment.AppliedFragment; +import cn.shangyu.gdxzExpert.fragment.CompletedFragment; +import cn.shangyu.gdxzExpert.fragment.ConfirmedFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/22. + */ + +public class MylanFollow_upProjectActivity extends BaseActivity implements OnCallBackFromNet{ + private TextView tv_onlineapply,tv_patienteducationinfo,tv_patienteducation; + private static final int MAILANREMIND = 1; + private static final int MAILANNOTICEGET = 2; + private ArrayList fragment_list; + private FragmentPagerAdapter mAdapter; + private ViewPager frame_container; + private RadioButton rb_1,rb_2,rb_3; + private String note; + private String uuid; + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + + @Override + public void setTitle() { + top_title.setText("肝系一生"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_mylanfollow_up); + findview(view); + onClickListener(); + getmailanNoticeGet(); + initFragment(); + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("notice"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + getmailanRemind(); + } + + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + boolean booleanExtra = intent.getBooleanExtra("notice", false); + if (booleanExtra) { + getmailanNoticeGet(); + } + } + } + private void getmailanNoticeGet() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.mailanNoticeGet,map,MAILANNOTICEGET,this); + + } + + private void initFragment() { + fragment_list = new ArrayList<>(); + + AppliedFragment appliedFragment = new AppliedFragment(); + ConfirmedFragment confirmedFragment = new ConfirmedFragment(); + CompletedFragment completedFragment = new CompletedFragment(); + fragment_list.add(appliedFragment); + fragment_list.add(confirmedFragment); + fragment_list.add(completedFragment); + mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { + + @Override + public int getCount() { + return fragment_list.size(); + } + + @Override + public Fragment getItem(int arg0) { + return fragment_list.get(arg0); + } + }; + frame_container.setAdapter(mAdapter); + } + + + private void onClickListener() { + tv_onlineapply.setOnClickListener(this); + rb_1.setOnClickListener(this); + rb_2.setOnClickListener(this); + rb_3.setOnClickListener(this); + tv_patienteducation.setOnClickListener(this); + } + + private void findview(View view) { + tv_onlineapply = view.findViewById(R.id.tv_onlineapply); + tv_patienteducationinfo = view.findViewById(R.id.tv_patienteducationinfo); + tv_patienteducation = view.findViewById(R.id.tv_patienteducation); + frame_container = view.findViewById(R.id.frame_container); + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + } + + private void getmailanRemind() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.mailanRemind,map,MAILANREMIND,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.tv_onlineapply: + if (tv_patienteducationinfo.getText().toString().contains("再随访")){ + ToastUtil.showMessage("暂未达到申请条件"); + }else if(!StringUtil.isEmpty(tv_patienteducationinfo.getText().toString())){ + Intent intent = new Intent(this,PatientEducationApplyActivity.class); + startActivity(intent); + }else { + ToastUtil.showMessage("数据异常"); + } +// Intent intent = new Intent(this,PatientEducationApplyActivity.class); +// startActivity(intent); + break; + case R.id.rb_1: + frame_container.setCurrentItem(0); + break; + case R.id.rb_2: + frame_container.setCurrentItem(1); + break; + case R.id.rb_3: + frame_container.setCurrentItem(2); + break; + case R.id.tv_patienteducation: + Intent intent1 = new Intent(this,PatientEducationNoticeActivity.class); + intent1.putExtra("notice",note); + intent1.putExtra("uuid",uuid); + startActivity(intent1); + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case MAILANREMIND: + LogUtil.i("MAILANREMIND = "+resultJson); + + try { + JSONObject jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))){ + tv_patienteducationinfo.setText(jsonObject.optString("remind")); + }else + ToastUtil.showMessage(jsonObject.optString("message")); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case MAILANNOTICEGET: + LogUtil.i("MAILANNOTICEGET = "+resultJson); + Gson gson = new Gson(); + PatientNoticeBean fromJsonBean = gson.fromJson(resultJson, PatientNoticeBean.class); + PatientNoticeBean.DataBean data = fromJsonBean.getData(); + if (data==null){ + note = ""; + uuid = ""; + }else { + note = data.getNotice(); + uuid = data.getUuid(); + } + break; + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NavigationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NavigationActivity.java new file mode 100644 index 0000000..7f71b87 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NavigationActivity.java @@ -0,0 +1,595 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Constant.Changjianwenti; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBonusPointsSuccessBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author zhaodewei 2017 12 7 + */ +public class NavigationActivity extends BaseActivity implements OnCallBackFromNet { + private View view; + private LinearLayout mBt_patient, mBt_service, mBt_teach, mBt_plan, + mBt_bookshel, mBt_journal, mBt_wf, mBt_drug, mBt_tools,bt_point,ll_sign,bt_point1,ll_sign1,bt_navi_gywn,bt_navi_bwl, + mBt_interaction; + private LinearLayout mBt_video, mBt_metting, mBt_college, mBt_testing,quality_course, + mBt_hospital, mBt_hudong, mBt_casesuions, mBt_work, mBt_scientific, + mBt_news; + private LinearLayout mBt_zhaomu, mBt_huodong, mBt_newteach, mBt_zh, mBt_sc, + mBt_xz, mBt_ewm,mBt_ewm1, mBt_yhk,mBt_yhk1, mBt_sz,mBt_sz1, mBt_course, mBt_patient_video; + private LinearLayout bt_navi_cjwt, bt_navi_ylqx, bt_navi_tbhg, + bt_navi_blds, bt_navi_zsds; + private LinearLayout l_1,l_2,l_3; + private NavigationActivity mActivity; + private CustomProgressDialog pd; + private boolean isSign; + private ECAlertDialog dilaog2; + private AddBonusPointsSuccessBean addBonusPointsBean; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("快速导航"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_navigation); + mActivity = this; + l_1=view.findViewById(R.id.l_1); + l_2=view.findViewById(R.id.l_2); + l_3=view.findViewById(R.id.l_3); + mBt_patient = (LinearLayout) view.findViewById(R.id.bt_navi_patient); + mBt_service = (LinearLayout) view.findViewById(R.id.bt_navi_service); + mBt_teach = (LinearLayout) view.findViewById(R.id.bt_navi_teach); + mBt_plan = (LinearLayout) view.findViewById(R.id.bt_navi_plan); + mBt_bookshel = (LinearLayout) view.findViewById(R.id.bt_navi_bookshel); + mBt_journal = (LinearLayout) view.findViewById(R.id.bt_navi_journal); + mBt_wf = (LinearLayout) view.findViewById(R.id.bt_navi_wf); + mBt_drug = (LinearLayout) view.findViewById(R.id.bt_navi_drug); + mBt_tools = (LinearLayout) view.findViewById(R.id.bt_navi_tools); + bt_point = (LinearLayout) view.findViewById(R.id.bt_point); + ll_sign = (LinearLayout) view.findViewById(R.id.ll_sign); + bt_point1 = (LinearLayout) view.findViewById(R.id.bt_point1); + ll_sign1 = (LinearLayout) view.findViewById(R.id.ll_sign1); + bt_navi_gywn = (LinearLayout) view.findViewById(R.id.bt_navi_gywn); + bt_navi_bwl = (LinearLayout) view.findViewById(R.id.bt_navi_bwl); + mBt_patient_video = (LinearLayout) view + .findViewById(R.id.bt_navi_patient_video); + mBt_interaction = (LinearLayout) view + .findViewById(R.id.bt_navi_interaction); + mBt_video = (LinearLayout) view.findViewById(R.id.bt_navi_video); + quality_course = (LinearLayout) view.findViewById(R.id.quality_course); + mBt_metting = (LinearLayout) view.findViewById(R.id.bt_navi_meeting); + mBt_college = (LinearLayout) view.findViewById(R.id.bt_navi_college); + mBt_testing = (LinearLayout) view.findViewById(R.id.bt_navi_testing); + mBt_hospital = (LinearLayout) view.findViewById(R.id.bt_navi_hospital); + mBt_hudong = (LinearLayout) view.findViewById(R.id.bt_navi_hudong); + mBt_casesuions = (LinearLayout) view + .findViewById(R.id.bt_navi_casesuions); + mBt_scientific = (LinearLayout) view + .findViewById(R.id.bt_navi_scientific); + mBt_news = (LinearLayout) view.findViewById(R.id.bt_navi_news); + mBt_work = (LinearLayout) view.findViewById(R.id.bt_navi_work); + mBt_zhaomu = (LinearLayout) view.findViewById(R.id.bt_navi_zhaomu); + mBt_huodong = (LinearLayout) view.findViewById(R.id.bt_navi_huodong); + mBt_newteach = (LinearLayout) view.findViewById(R.id.bt_navi_newteach); + mBt_zh = (LinearLayout) view.findViewById(R.id.bt_navi_zh); + mBt_sc = (LinearLayout) view.findViewById(R.id.bt_navi_sc); + mBt_xz = (LinearLayout) view.findViewById(R.id.bt_navi_xz); + mBt_ewm = (LinearLayout) view.findViewById(R.id.bt_navi_ewm); + mBt_ewm1 = (LinearLayout) view.findViewById(R.id.bt_navi_ewm1); + mBt_yhk = (LinearLayout) view.findViewById(R.id.bt_navi_yhk); + mBt_yhk1 = (LinearLayout) view.findViewById(R.id.bt_navi_yhk1); + mBt_sz = (LinearLayout) view.findViewById(R.id.bt_navi_sz); + mBt_sz1 = (LinearLayout) view.findViewById(R.id.bt_navi_sz1); + mBt_course = (LinearLayout) view.findViewById(R.id.bt_navi_course); + bt_navi_cjwt = (LinearLayout) view.findViewById(R.id.bt_navi_cjwt); + bt_navi_ylqx = (LinearLayout) view.findViewById(R.id.bt_navi_ylqx); + bt_navi_tbhg = (LinearLayout) view.findViewById(R.id.bt_navi_tbhg); + bt_navi_blds = (LinearLayout) view.findViewById(R.id.bt_navi_blds); + bt_navi_zsds = (LinearLayout) view.findViewById(R.id.bt_navi_zsds); + if (0==SharePrefUtil.getInt(mActivity, "GETISACCOUNT", 1)){ + mBt_yhk.setVisibility(View.INVISIBLE); + mBt_yhk.setFocusable(false); + mBt_zh.setVisibility(View.GONE); + } + else + { + l_1.setVisibility(View.GONE); + l_2.setVisibility(View.VISIBLE); + l_3.setVisibility(View.VISIBLE); + mBt_zh.setVisibility(View.VISIBLE); + mBt_ewm.setVisibility(View.GONE); + + } + IninListener(); + + return view; + } + + private void IninListener() { + // TODO Auto-generated method stub + mBt_patient.setOnClickListener(this); + mBt_service.setOnClickListener(this); + mBt_teach.setOnClickListener(this); + mBt_plan.setOnClickListener(this); + bt_navi_gywn.setOnClickListener(this); + bt_navi_bwl.setOnClickListener(this); + mBt_bookshel.setOnClickListener(this); + bt_point.setOnClickListener(this); + ll_sign.setOnClickListener(this); + bt_point1.setOnClickListener(this); + ll_sign1.setOnClickListener(this); + mBt_journal.setOnClickListener(this); + mBt_wf.setOnClickListener(this); + mBt_drug.setOnClickListener(this); + mBt_tools.setOnClickListener(this); + mBt_interaction.setOnClickListener(this); + mBt_video.setOnClickListener(this); + mBt_metting.setOnClickListener(this); + mBt_college.setOnClickListener(this); + mBt_testing.setOnClickListener(this); + quality_course.setOnClickListener(this); + mBt_hospital.setOnClickListener(this); + mBt_hudong.setOnClickListener(this); + mBt_casesuions.setOnClickListener(this); + mBt_work.setOnClickListener(this); + mBt_scientific.setOnClickListener(this); + mBt_news.setOnClickListener(this); + mBt_zhaomu.setOnClickListener(this); + mBt_huodong.setOnClickListener(this); + mBt_newteach.setOnClickListener(this); + mBt_zh.setOnClickListener(this); + mBt_sc.setOnClickListener(this); + mBt_xz.setOnClickListener(this); + mBt_ewm.setOnClickListener(this); + mBt_ewm1.setOnClickListener(this); + mBt_yhk.setOnClickListener(this); + mBt_yhk1.setOnClickListener(this); + mBt_sz.setOnClickListener(this); + mBt_sz1.setOnClickListener(this); + mBt_course.setOnClickListener(this); + mBt_patient_video.setOnClickListener(this); + bt_navi_cjwt.setOnClickListener(this); + bt_navi_ylqx.setOnClickListener(this); + bt_navi_tbhg.setOnClickListener(this); + bt_navi_blds.setOnClickListener(this); + bt_navi_zsds.setOnClickListener(this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + Intent intent; + switch (v.getId()) { + case R.id.bt_navi_ylqx: + Intent intentt1 = new Intent(mActivity, NewsDetailActivity.class); + intentt1.putExtra("url", "http://wx.igandan.com/yilu/toindex?share=1"); + intentt1.putExtra("title", "乙路前行"); + intentt1.putExtra("newsTitle", "一路有你 一起前行"); + intentt1.putExtra("summary", "肝胆相照®带您了解乙肝"); + intentt1.putExtra("flag", 1); + startActivity(intentt1); +// ToastUtil.showMessage("开通在即,敬请期待"); + break; + case R.id.bt_navi_gywn: + Intent intentt_gywn = new Intent(mActivity, NewsDetailActivity.class); + intentt_gywn.putExtra("url", "http://ylxb.igandan.com/bmspatient/toindex"); + intentt_gywn.putExtra("title", "肝愿为你"); + intentt_gywn.putExtra("newsTitle", "一路陪伴,肝愿为你"); + intentt_gywn.putExtra("summary", "肝胆相照®带您了解乙肝"); + intentt_gywn.putExtra("flag", 1); + startActivity(intentt_gywn); + break; + case R.id.bt_navi_bwl: + Intent intentt_bwl = new Intent(mActivity, NewsDetailActivity.class); + intentt_bwl.putExtra("url", "http://080.igandan.com/bmsexpert/toindex"); + intentt_bwl.putExtra("title", "080中国研究"); + intentt_bwl.putExtra("newsTitle", "感恩10年,引领希望之路"); + intentt_bwl.putExtra("summary", "080数据、中国乙肝十年进展等精彩等您来看"); + intentt_bwl.putExtra("flag", 1); + startActivity(intentt_bwl); + break; + case R.id.bt_navi_tbhg: + Intent intentt = new Intent(mActivity, NewsDetailActivity.class); + intentt.putExtra("url", "http://wx.igandan.com/bing/index?share=1"); + intentt.putExtra("title", "谈丙话肝"); + intentt.putExtra("newsTitle", "谈丙话肝"); + intentt.putExtra("summary", "肝胆相照®带您了解丙肝"); + intentt.putExtra("flag", 1); + startActivity(intentt); + break; + case R.id.bt_navi_blds: + Intent intentt2 = new Intent(mActivity, NewsDetailActivity.class); + intentt2.putExtra("url", "http://www.igandan.com/web/blds/toindex"); + intentt2.putExtra("title", "病例大赛"); + intentt2.putExtra("newsTitle", "第三届利肝中国行病例大赛"); + intentt2.putExtra("summary", "期待您的参与"); + intentt2.putExtra("flag", 1); + startActivity(intentt2); +// ToastUtil.showMessage("开通在即,敬请期待"); + break; + case R.id.bt_navi_zsds: + Intent intentq = new Intent(mActivity, NewsDetailActivity.class); + intentq.putExtra("url", "http://www.igandan.com/web/yishi/toindex"); + intentq.putExtra("title", "知识大赛"); + intentq.putExtra("newsTitle", "全国青年医师肝病知识大赛"); + intentq.putExtra("summary", "观临床,拼学识"); + intentq.putExtra("flag", 1); + startActivity(intentq); + break; + case R.id.bt_navi_patient: + // 我的患者页面 + intent = new Intent(mActivity, MyPatientActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_service: + // 公益咨询 + intent = new Intent(mActivity, PublicConsultationActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_teach: + // 患教 + intent = new Intent(mActivity, MainActivity.class); + intent.putExtra("type", "teach"); + intent.putExtra("close", true); + startActivity(intent); + this.finish(); + break; + case R.id.bt_navi_plan: + // 计划 + startActivity(new Intent(mActivity, OutofPatientNoticeActivity.class)); + break; + case R.id.bt_navi_bookshel: + // 指南 + intent = new Intent(mActivity, MyLibraryActivity.class); + intent.putExtra("navi", "bookshel"); + startActivity(intent); + break; + case R.id.bt_navi_journal: + // 期刊杂志 + intent = new Intent(mActivity, MyLibraryActivity.class); + intent.putExtra("navi", "journal"); + startActivity(intent); + break; + case R.id.bt_navi_wf: + // 万方 + intent = new Intent(mActivity, MyLibraryActivity.class); + intent.putExtra("navi", "wf"); + startActivity(intent); + break; + case R.id.bt_navi_drug: + // 药品 + intent = new Intent(mActivity, MyLibraryActivity.class); + intent.putExtra("navi", "drug"); + startActivity(intent); + break; + case R.id.bt_navi_tools: + // 工具 + intent = new Intent(mActivity, MyLibraryActivity.class); + intent.putExtra("navi", "tools"); + startActivity(intent); + break; + case R.id.bt_navi_interaction: + // 相互作用 + intent = new Intent(mActivity, ToolsActivity.class); + intent.putExtra("position", "0"); + intent.putExtra("title", "丙肝DAA和其他药物相互作用在线查询"); + startActivity(intent); + break; + case R.id.bt_navi_video: + // 视频 + intent = new Intent(mActivity, VideoActivity.class); + startActivity(intent); + break; + case R.id.quality_course: + // 精品课程 +// intent = PolyvPlayerActivity.newIntent(mActivity, PolyvPlayerActivity.PlayMode.portrait, "cfb7a69a75d5667269442b13b8eebda9_c"); +// intent.putExtra("isVlmsOnline", false); + intent = new Intent(mActivity, QualityCourseActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_meeting: + // 会议 + intent = new Intent(mActivity, MainActivity.class); + intent.putExtra("type", "meeting"); + intent.putExtra("close", true); + startActivity(intent); + this.finish(); + break; + case R.id.bt_navi_college: + // 学院 + intent = new Intent(mActivity, GDLiveBroadcastActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_testing: + // 检测 + intent = new Intent(mActivity, TestingActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_hospital: + // 医院 + intent = new Intent(mActivity, GanDanHospitalActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_hudong: + // 互动圈 + intent = new Intent(mActivity, GanDanHouseActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_casesuions: + // 病例交流 + intent = new Intent(mActivity, CasediscussionActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_work: + // 经典病例 + intent = new Intent(mActivity, MyCicleActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_scientific: + // 科研 + intent = new Intent(mActivity, MyScientificResearchActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_news: + // 咨讯 + startActivity(new Intent(mActivity, NewsActivity.class)); +// intent = new Intent(mActivity, MainActivity.class); +// intent.putExtra("type", "news"); +// intent.putExtra("close", true); +// startActivity(intent); +// this.finish(); + break; + case R.id.bt_navi_zhaomu: + // 招募 + intent = new Intent(mActivity, LinChuangActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_huodong: + // 活动 + intent = new Intent(mActivity, GanDanEventActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_newteach: + // 新手教程 + intent = new Intent(mActivity, NewLessonsActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_zh: + // 账户 + intent = new Intent(mActivity, MyAccount2Activity.class); + startActivity(intent); + + break; + case R.id.bt_navi_sc: + // 收藏 + intent = new Intent(mActivity, MyDownLoadsActivity.class); + intent.setType("collection"); + startActivity(intent); + break; + case R.id.bt_navi_xz: + // 下载 + + intent = new Intent(mActivity, MyDownLoadsActivity.class); + intent.setType("download"); + startActivity(intent); + break; + case R.id.bt_navi_ewm1: + case R.id.bt_navi_ewm: + // 二维码 + intent = new Intent(mActivity, MyQrCodeActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_yhk1: + case R.id.bt_navi_yhk: + // 银行卡 + intent = new Intent(mActivity, MyBankCardActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_sz: + case R.id.bt_navi_sz1: + // 常用设置 + intent = new Intent(mActivity, SettingAndHelpActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_course: + intent = new Intent(mActivity, CoursewareActivity.class); + startActivity(intent); + // ToastUtil.showMessage("开通在即,敬请期待"); + break; + case R.id.bt_navi_patient_video: + intent = new Intent(mActivity, PatientVideoActivity.class); + startActivity(intent); + break; + case R.id.bt_navi_cjwt: + Intent intentc = new Intent(mActivity, NewsDetailActivity.class); + intentc.putExtra("url", Changjianwenti); + intentc.putExtra("title", "常见问题"); + intentc.putExtra("newsTitle", "肝病常见问题权威答"); + intentc.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); + intentc.putExtra("flag", 1); + startActivity(intentc); + break; + case R.id.bt_point1: + case R.id.bt_point: + startActivity(new Intent(mActivity, PointsMallActivity.class)); + break; + case R.id.ll_sign1: + case R.id.ll_sign: + startActivity(new Intent(NavigationActivity.this,AccumulatePointsActivity.class)); + +// if (Constant.isSignIn) { +// dilaog2 = ECAlertDialog.buildAlert(NavigationActivity.this, +// "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 +// @Override +// public void onClick(DialogInterface dialog, int which) { +// // TODO Auto-generated method stub +// dilaog2.dismiss(); +// } +// }); +// dilaog2.setTitle("温馨提示"); +// dilaog2.setCanceledOnTouchOutside(false); +// dilaog2.show(); +// }else{ +// pd = new CustomProgressDialog(NavigationActivity.this, "请稍候"); +// pd.show(); +// Map param = new HashMap<>(); +// param.put("score_type","1"); +//// param.put("debug","true");//测试签到成功返回数据 +// sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, NavigationActivity.this); +// } + break; + default: + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) { + case 1: + if (pd != null) { + pd.dismiss(); + } + try { + JSONObject jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(optString)) { + Constant.isRefreshpoint = true;//个人中心界面刷新 + Gson gson1 = new Gson(); + addBonusPointsBean = gson1.fromJson(resultJson, AddBonusPointsSuccessBean.class); + + //本地广播 + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(NavigationActivity.this); + Intent intent = new Intent("SIGNIN_ACTION"); + intent.putExtra("sign", true); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + //点击签到 + showSignInDailog(); + + } else if ("201".equals(optString)) { + dilaog2 = ECAlertDialog.buildAlert(NavigationActivity.this, + "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + } else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + } + + } + + private void showSignInDailog() { + // TODO Auto-generated method stub + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_signin, null); + TextView tv_gdxzday = (TextView) layout.findViewById(R.id.tv_gdxzday); + TextView tv_totalDay = (TextView) layout.findViewById(R.id.tv_totalDay); + TextView tv_continuous_day = (TextView) layout.findViewById(R.id.tv_continuous_day); + TextView tv_contenttext = (TextView) layout.findViewById(R.id.tv_text1); + ImageView iv_close = (ImageView) layout.findViewById(R.id.iv_close); + tv_gdxzday.setText("今天是我们相识的第"+addBonusPointsBean.getGdxzday()+"天"); + tv_totalDay.setText(addBonusPointsBean.getTotalDay()+""); + tv_continuous_day.setText(addBonusPointsBean.getContinuous_day()+""); + tv_contenttext.setText(addBonusPointsBean.getQuestionAndAnswer().getTitle()); + + final Dialog dialog = new AlertDialog.Builder( + NavigationActivity.this).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + iv_close.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + tv_contenttext.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent broadc = new Intent(NavigationActivity.this, NewsDetailActivity.class); + broadc.putExtra("url", Url.urlHtml+addBonusPointsBean.getQuestionAndAnswer().getPath()); + broadc.putExtra("newsTitle",addBonusPointsBean.getQuestionAndAnswer().getTitle()); + broadc.putExtra("summary", addBonusPointsBean.getQuestionAndAnswer().getSummary()); + broadc.putExtra("flag", 1); + startActivity(broadc); + dialog.dismiss(); + } + }); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewContributingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewContributingActivity.java new file mode 100644 index 0000000..4485538 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewContributingActivity.java @@ -0,0 +1,559 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; +import android.widget.Toast; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.ItemLongClickedPopWindow; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author 纪肖 + * + * @author 功能说明:我讲科普->我要投稿 + * + */ +public class NewContributingActivity extends BaseActivity implements + OnCheckedChangeListener { + + private View view; + private Button iwant;// 我要投稿按钮 + private String name; + private String content; + public static final int ERROR = 101; + private TextView et_donor_name;// 投稿标题 + private View sexView; + private TextView tv_female; + private TextView tv_male; + private TextView tv_donor_content; + private Button btn_dismiss; + private TextView tv_sex; + private int selectyesorno = -1;// 性别 + private LinearLayout ll_name; + private LinearLayout ll_selected_sex; + private LinearLayout ll_content; + + private PopupWindow mPopupWindowDialog; + private String getCode; + private int result = 0; + private String url = "http://doc.igandan.com/app/html/news/f771025027f2486493d9daa7eb0d9b11.html"; + private X5WebView mWebView; + private WebSettings settings; + @Override + public void setTitle() { + top_title.setText("我要投稿"); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_contributing_new); + if (getIntent().equals("code")) { + result = Constant.CONTRIBUTE_CODE; + } + if (getIntent().equals("code2")) { + result = Constant.CONTRIBUTE_CODE2; + } + initView(); + return view; + } + + /** + * 初始化控件 + */ + private void initView() { + et_donor_name = (TextView) view.findViewById(R.id.et_donor_title);// 标题 + tv_sex = (TextView) view.findViewById(R.id.tv_sure); // 是否原创 + tv_donor_content = (TextView) view + .findViewById(R.id.tv_message_content);// 投稿内容 + iwant = (Button) view.findViewById(R.id.iwant_contributing);// 确定按钮 + ll_name = (LinearLayout) view.findViewById(R.id.ll_top_title); + ll_selected_sex = (LinearLayout) view + .findViewById(R.id.ll_selected_sure); + ll_content = (LinearLayout) view.findViewById(R.id.ll_message_content); + // 提交 编辑标题 选择是否原创 编辑投稿内容点击事件 + iwant.setOnClickListener(this); + ll_name.setOnClickListener(this); + et_donor_name.setOnClickListener(this); + ll_selected_sex.setOnClickListener(this); + ll_content.setOnClickListener(this); + + X5WebView.initHardwareAccelerate(this); + //网页加载 + mWebView = view.findViewById(R.id.news_detail_wv); + loadingView = view.findViewById(R.id.loading_view); + showLoadingView(); + initData(); + } + private void initData() { +// url = getIntent().getStringExtra("url"); + // mWebView.setInitialScale(25); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + mWebView.setWebViewClient(new WebViewClient() { + + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(final WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + +// if (url.contains("#") && type != 3 && url.contains(Url.urlHtml)) { +// String keyWord = url.substring(url.indexOf("#") + 1); +// try { +// String output = URLDecoder.decode(keyWord, "UTF-8"); +// Intent intent = new Intent(ctx, KeyWordActivity.class); +// intent.putExtra("keyword", output); +// intent.setType(type + ""); +// startActivity(intent); +// } catch (UnsupportedEncodingException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// } +// String urlEnd = url; +// if (url.contains(Url.urlHtml)) { +// urlEnd = url.split(Url.urlHtml)[1]; +// } +// if (url.isEmpty() || url.length() <= Url.urlHtml.length() +// || StringUtil.isEmpty(urlEnd)) { +// loadurl(view, "file:///android_asset/error/error.html"); +// } +//// if ("乙路前行".equals(top_title.getText())||"谈丙话肝".equals(top_title.getText())||"常见问题".equals(top_title.getText())) { +//// shareurl = url; +//// sharetitl = view.getTitle(); +//// } +// if ("乙路前行".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = "乙路前行—一路有你 一起前行"; +// }else if ("谈丙话肝".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = "谈丙话肝"; +// }else if ("常见问题".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = "肝病常见问题权威答"; +// }else if("病例大赛".equals(top_title.getText())){ +// shareurl = url; +// sharetitl = "第一届利肝中国行病例大赛"; +// }else if ("知识大赛".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = "全国青年医师肝病知识大赛"; +// }else if ("肝胆医院".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = view.getTitle(); +// }else if ("动态详情".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = view.getTitle(); +// }else if ("肝愿为你".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = view.getTitle(); +// }else if ("080中国研究".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = view.getTitle(); +// } + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + // intent = getIntent(); + // content = intent.getStringExtra("content"); + // mWebView.loadUrl(Url.urlHtml+content); + // mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); + + mWebView.setOnLongClickListener(new View.OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + // TODO Auto-generated method stub + WebView.HitTestResult result = ((WebView) v).getHitTestResult(); + + if (null == result) + return false; + int type = result.getType(); + final String imgurl = result.getExtra(); + final ItemLongClickedPopWindow itemLongClickedPopWindow = new ItemLongClickedPopWindow( + NewContributingActivity.this, + ItemLongClickedPopWindow.IMAGE_VIEW_POPUPWINDOW, + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + if (type == 0) { + return false; + } + switch (type) { + case WebView.HitTestResult.PHONE_TYPE: // 处理拨号 + break; + case WebView.HitTestResult.EMAIL_TYPE: // 处理Email + break; + case WebView.HitTestResult.GEO_TYPE: // TODO + break; + case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接 + // Log.d(DEG_TAG, "超链接"); + break; + case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: + break; + case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项 + // 通过GestureDetector获取按下的位置,来定位PopWindow显示的位置 + itemLongClickedPopWindow.showAtLocation( + findViewById(R.id.ll_bottom), Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + break; + default: + break; + } + itemLongClickedPopWindow.getView( + R.id.item_longclicked_lookImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + ArrayList urls = new ArrayList(); + urls.add(new ViewImageInfo(0, imgurl, imgurl)); + CCPAppManager.startChattingImageViewAction(ct, + 0, urls, true); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_viewImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_saveImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 下载 + itemLongClickedPopWindow.dismiss(); + // 点击图片后将图片保存到SD卡跟目录下的Test文件夹内 + new DownLoadUrlImage(imgurl, NewContributingActivity.this); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + }); + return true; + } + }); + loadurl(mWebView, url); + } + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + /** + * 处理选择是否原创 + */ + private void selectedSex() { + // TODO Auto-generated method stub + tv_female.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + tv_sex.setText("否"); + selectyesorno = 0; + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + tv_male.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + tv_sex.setText("是"); + selectyesorno = 1; + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + btn_dismiss.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + } + + /** + * 显示弹出框 setPopupWindowDialog + * + * void + */ + protected void setPopupWindowDialog() { + mPopupWindowDialog = new PopupWindow(sexView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + @Override + protected void onDestroy() { + //释放资源 + if (mWebView != null) + mWebView.destroy(); + + super.onDestroy(); + } + /** + * @author iwant 确定提交 + */ + public void iwant() { + // note=tv_donor_note.getText().toString().trim(); + name = et_donor_name.getText().toString().trim(); + content = tv_donor_content.getText().toString().trim(); + // 验证输入数据 + if (!UIUtils.isNetWorkConnected(this)) { + Toast.makeText(this, "网络暂时不可用", Toast.LENGTH_SHORT).show(); + return; + } + if (TextUtils.isEmpty(name) || TextUtils.isEmpty(content)) { + Toast.makeText(this, "请完投稿信息,再次提交。", Toast.LENGTH_SHORT).show(); + return; + } + if (selectyesorno == -1) { + ToastUtil.showMessage("请选择是否原创"); + return; + } + // 专家uuid + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + showProgressDialog("提交中..."); + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("topic", name);// 标题 + params.addBodyParameter("content", content);// 内容 + params.addBodyParameter("publisherUuid", uuid);// uuid + params.addBodyParameter("isOriginal", String.valueOf(selectyesorno));// 是否原创 + params.addBodyParameter("type", String.valueOf(1));// 类型 + HttpHelper.loadData(HttpMethod.POST, Url.getSubmitScience, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + // 提交成功处理 + ToastUtil.showMessage(message); + Intent intent = new Intent(); + intent.putExtra("flag", 1); + + setResult(RESULT_OK, intent); + AppManager.getAppManager().finishActivity( + NewContributingActivity.this); + } else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showMessage("提交失败!"); + } + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("submit().onFailure = " + arg1); + closeProgressDialog(); + ToastUtil.showMessage("提交失败!"); + } + }); + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 是否原创监听 + */ + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + switch (checkedId) { + case R.id.rb_yes_male: + selectyesorno = 1;// 是 + break; + case R.id.rb_no_female: + selectyesorno = 0;// 否 + break; + } + } + + /** + * 执行返回结果 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + if (data == null) { + return; + } + // 标题 + if (requestCode == 521) { + + if (data.getStringExtra("name").equals("")) { + et_donor_name.setText(name); + + } else { + et_donor_name.setText(data.getStringExtra("name")); + } + } + + // 投稿内容 + if (requestCode == 523) { + + if (data.getStringExtra("content").equals("")) { + tv_donor_content.setText(content); + } else { + tv_donor_content.setText(data.getStringExtra("content")); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.iwant_contributing:// 提交 + iwant(); + break; + case R.id.ll_top_title:// 编辑标题 + Intent intent = new Intent(NewContributingActivity.this, + ContriButingEditTitleActivity.class); + intent.putExtra("name", et_donor_name.getText().toString().trim()); + startActivityForResult(intent, 521); + break; + case R.id.et_donor_title:// 编辑标题 + Intent intr = new Intent(NewContributingActivity.this, + ContriButingEditTitleActivity.class); + intr.putExtra("name", et_donor_name.getText().toString().trim()); + startActivityForResult(intr, 521); + break; + case R.id.ll_selected_sure:// 选择是否原创 + sexView = UIUtils + .inflate(R.layout.popupwindow_selected_contributing_); + tv_male = (TextView) sexView.findViewById(R.id.tv_yes); + tv_female = (TextView) sexView.findViewById(R.id.tv_no); + btn_dismiss = (Button) sexView.findViewById(R.id.btn_dismiss_sure); + setPopupWindowDialog(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + } + selectedSex(); + break; + case R.id.ll_message_content:// 编辑投稿内容 + Intent intent3 = new Intent(NewContributingActivity.this, + ContriButingEditActivity.class); + intent3.putExtra("content", tv_donor_content.getText().toString() + .trim()); + startActivityForResult(intent3, 523); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewLessonsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewLessonsActivity.java new file mode 100644 index 0000000..6c621bc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewLessonsActivity.java @@ -0,0 +1,625 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.format.DateUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.apache.http.message.BasicNameValuePair; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.LessonTageBean; +import cn.shangyu.gdxzExpert.bean.NewTeachData; +import cn.shangyu.gdxzExpert.bean.NewTeachData.DataBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 随访列表页面 + * + * @author gaopeng + * + */ +public class NewLessonsActivity extends BaseActivity implements OnClickListener,OnCallBackFromNet { + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + protected static final int GET_TAGE_SUCCESS = 1; + private List months; + private VisitAdapter adapter; + private List data; + private PullToRefreshListView lv_visit;// listview的框架 + private LinearLayout ll_empty; + String previewStr; + private RelativeLayout rl_back; + private TextView top_title; + private int start = 1; + private LinearLayout mLl_title; + private ImageView mIm_All1, mIm_All2; + private TextView mTv_Title; + private RelativeLayout mRl_List; + private ListView mLv_title; + private String tagid = ""; + private LessonTageBean tageData; + private TitleAdapter mAdapter3; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case GET_DATA_SUCCESS: + pd.dismiss(); + if (data.isEmpty() && start == 1) { + // 没有获取则显示暂无随访的的图文信息 + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(Mode.DISABLED); + setAdapter(); + return; + } else { + if (ll_empty.getVisibility() == View.VISIBLE) { + ll_empty.setVisibility(View.GONE); + lv_visit.setMode(Mode.BOTH); + } + } + if (data.size() < 10) { + lv_visit.setMode(Mode.PULL_DOWN_TO_REFRESH); + } + setAdapter(); + lv_visit.onRefreshComplete(); + lv_visit.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + + Intent intent = new Intent(UIUtils.getContext(), + GDEventDetailActivity.class); + intent.putExtra("url", Url.urlHtml + + data.get(arg2 - 1).getPath()); + + intent.putExtra("title", data.get(arg2 - 1).getTitle()); + + intent.putExtra("newsTitle", data.get(arg2 - 1) + .getTitle()); + intent.putExtra("summary", data.get(arg2 - 1) + .getSummary()); + intent.putExtra("imageUrl", + Url.urlHtml + data.get(arg2 - 1).getHeadImg()); + intent.setType("Lesson"); + startActivity(intent); + + } + }); + break; + case GET_TAGE_SUCCESS: + if (mAdapter3 == null) { + mAdapter3 = new TitleAdapter(); + mLv_title.setAdapter(mAdapter3); + } + break; + + default: + break; + } + } + + private void setAdapter() { + // TODO Auto-generated method stub + if (adapter == null) { + adapter = new VisitAdapter(); + lv_visit.setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + } + + }; + + /* + * private RequestQueue queue; private StringRequest request; + */ + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_new_lesson); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + mTv_Title = (TextView) findViewById(R.id.tv_title); + mIm_All1 = (ImageView) findViewById(R.id.imageView1); + mIm_All2 = (ImageView) findViewById(R.id.imageView2); + mRl_List = (RelativeLayout) findViewById(R.id.rl_pop_list); + rl_back = (RelativeLayout) findViewById(R.id.top_back_layout); + mLl_title = (LinearLayout) findViewById(R.id.ll_title); + mLv_title = (ListView) findViewById(R.id.lv_title); + rl_back.setOnClickListener(this); + + top_title = (TextView) findViewById(R.id.top_title); + top_title.setText("新手教程"); + lv_visit = (PullToRefreshListView) findViewById(R.id.lv_visit); + lv_visit.setMode(Mode.BOTH); + ll_empty = (LinearLayout) findViewById(R.id.ll_empty_visit); + mLl_title.setOnClickListener(this); + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + start = 1; + getNewData(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + start += 1; + getNewData(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + mLv_title.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + start = 1; + lv_visit.setMode(Mode.BOTH); + if (position == 0) { + tagid = ""; + mTv_Title.setText("全部教程"); + mIm_All2.setImageResource(R.drawable.all_video); + mIm_All1.setImageResource(R.drawable.video_all); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + getNewData(); + } else { + tagid = tageData.data.get(position - 1).getId() + ""; + mTv_Title.setText(tageData.data.get(position - 1).getName()); + mIm_All2.setImageResource(R.drawable.select_video); + mIm_All1.setImageResource(R.drawable.video_select); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + getNewData(); + + } + mAdapter3.notifyDataSetChanged(); + mRl_List.setVisibility(View.GONE); + } + }); + initListViewTipText(); + getNewData(); + getTagePage(); + }; + + @Override + protected void onResume() { + super.onResume(); + needreportPage("新手教程"); + } + + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + + private void getNewData() { + // TODO Auto-generated method stub + pd = new CustomProgressDialog(NewLessonsActivity.this, "正在加载"); + pd.show(); + Map paramMap = new HashMap<>(); + paramMap.put("page", start + ""); + paramMap.put("tagid", tagid); + sendJsonPostParamtoNetSignMD5(Url.getTeachDataNew, paramMap, 1, this); +// +// new Thread() { +// public void run() { +// try { +// +// List parameters = new ArrayList(); +// +// BasicNameValuePair value02 = new BasicNameValuePair("page", +// start + ""); +// BasicNameValuePair value01 = new BasicNameValuePair( +// "tagid", tagid); +// parameters.add(value02); +// parameters.add(value01); +// HttpResult httpResult = HttpHelper.post(Url.getTeachDataNew, +// parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// if (result == null) { +// return; +// } +// Log.e("TAG", result.toString()); +// Gson gson = new Gson(); +// if (result == null || result.equals("")) { +// // ToastUtil.showMessage("请求服务器失败,请重试"); +// // pd.dismiss(); +// return; +// } +// NewTeachData visitData = gson.fromJson(result, +// NewTeachData.class); +// if (visitData.getData().size() == 0) { +// if (start == 1) { +// ToastUtil.showMessage("暂无数据"); +// } else { +// ToastUtil.showMessage("没有更多数据了"); +// } +// } +// if (data == null) { +// data = new ArrayList(); +// } +// if (start == 1) { +// data.clear(); +// } +// data.addAll(visitData.getData()); +// +// handler.sendEmptyMessage(GET_DATA_SUCCESS); +// +// } catch (Exception e) { +// e.printStackTrace(); +// ToastUtil.showMessage("获取失败,请重试"); +// } +// }; +// }.start(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(NewLessonsActivity.this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + class VisitAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (data != null) + return data.size(); + return 0; + } + + @Override + public DataBean getItem(int arg0) { + // TODO Auto-generated method stub + return data.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + VisitDataHolder mHolder = null; + if (arg1 == null) { + arg1 = View.inflate(NewLessonsActivity.this, + R.layout.item_new_lesson, null); + mHolder = new VisitDataHolder(); + mHolder.tv_date_new_les = (TextView) arg1 + .findViewById(R.id.tv_date_new_les); + mHolder.tv_title = (TextView) arg1.findViewById(R.id.tv_title); + mHolder.tv_content = (TextView) arg1 + .findViewById(R.id.tv_content); + mHolder.iv_img = (ImageView) arg1.findViewById(R.id.iv_img); + arg1.setTag(mHolder); + } else { + mHolder = (VisitDataHolder) arg1.getTag(); + } + + // 给控件赋值 + DataBean dataBean = data.get(arg0); + mHolder.tv_content.setText(dataBean.getTitle()); + // mHolder.tv_title.setText(dataBean.getTitle()); + mHolder.tv_date_new_les.setText(dataBean.getCreateDate()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + dataBean.getHeadImg(), mHolder.iv_img, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + return arg1; + } + + } + + static class VisitDataHolder { + private ImageView iv_img;// 新闻的图片 + public TextView tv_title;// 標題 + public TextView tv_content;// 简要 + public TextView tv_date_new_les;// 日期 + + } + + private CustomProgressDialog pd;// 自定义进度条 + + // private void getData() { + // // TODO Auto-generated method stub + // pd = new CustomProgressDialog(NewLessonsActivity.this, "正在加载"); + // pd.show(); + // new Thread() { + // public void run() { + // try { + // + // List parameters = new + // ArrayList(); + // + // BasicNameValuePair value02 = new BasicNameValuePair("page", + // "1"); + // + // parameters.add(value02); + // HttpResult httpResult = HttpHelper.post(Url.getTeachData, + // parameters);// 请求网络 + // String result = httpResult.getString();// str为服务器返回的json串 + // if (result == null) { + // return; + // } + // Log.e("TAG", result.toString()); + // Gson gson = new Gson(); + // if (result == null || result.equals("")) { + // ToastUtil.showMessage("请求服务器失败,请重试"); + // return; + // } + // NewTeachData visitData = gson.fromJson(result, + // NewTeachData.class); + // /* + // * if (data == null) { data = visitData.data.list; } else { + // * if (data.containsAll(visitData.data.list)) { return; } + // * data.addAll(visitData.data.list); + // * + // * } + // */ + // if (data != null) { + // data.clear(); + // start = 1; + // } + // data = visitData.getData(); + // handler.sendEmptyMessage(GET_DATA_SUCCESS); + // } catch (Exception e) { + // e.printStackTrace(); + // + // ToastUtil.showMessage("获取失败,请重试"); + // lv_visit.onRefreshComplete(); + // } + // }; + // }.start(); + // + // } + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + switch (arg0.getId()) { + case R.id.top_back_layout: + finish(); + break; + case R.id.ll_title: + if (mRl_List.getVisibility() == View.GONE) { + mRl_List.setVisibility(View.VISIBLE); + } else { + mRl_List.setVisibility(View.GONE); + } + break; + default: + break; + } + } + + private void getTagePage() { + // TODO Auto-generated method stub + new Thread() { + public void run() { + try { + + List parameters = new ArrayList(); + HttpResult httpResult = HttpHelper.post( + Url.getNoviceTagListNoPage, parameters);// 请求网络 + String result = httpResult.getString();// str为服务器返回的json串 + if (result == null) { + return; + } + Gson gson = new Gson(); + if (result == null || result.equals("")) { + ToastUtil.showMessage("请求服务器失败,请重试"); + return; + } + tageData = gson.fromJson(result, LessonTageBean.class); + + handler.sendEmptyMessage(GET_TAGE_SUCCESS); + } catch (Exception e) { + e.printStackTrace(); + + ToastUtil.showMessage("获取失败,请重试"); + lv_visit.onRefreshComplete(); + } + }; + }.start(); + + } + + public class TitleAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return tageData.data.size() + 1; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if (position == 0) { + return "全部视频"; + } + return tageData.data.get(position - 1); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position - 1; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(NewLessonsActivity.this); + if (position == 0) { + tv_item.setText("全部教程"); + } else { + tv_item.setText(tageData.data.get(position - 1).getName()); + } + if ("".equals(tagid) && position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + if (position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } else { + if (tagid != null + && tagid.equals(tageData.data.get(position - 1) + .getId() + "")) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + } + tv_item.setTextSize(15); + tv_item.setPadding(10, dip2px(NewLessonsActivity.this, 10), 10, + dip2px(NewLessonsActivity.this, 10)); + return tv_item; + } + + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + if (resultJson == null) { + return; + } + Gson gson = new Gson(); + if (resultJson == null || resultJson.equals("")) { + // ToastUtil.showMessage("请求服务器失败,请重试"); + // pd.dismiss(); + return; + } + NewTeachData visitData = gson.fromJson(resultJson, + NewTeachData.class); + if (visitData==null||visitData.getData().size() == 0) { + if (start == 1) { + ToastUtil.showMessage("暂无数据"); + } else { + ToastUtil.showMessage("没有更多数据了"); + } + } + if (data == null) { + data = new ArrayList(); + } + if (start == 1) { + data.clear(); + } + data.addAll(visitData.getData()); + + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewPatientActivity.java new file mode 100644 index 0000000..40a10e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewPatientActivity.java @@ -0,0 +1,643 @@ +package cn.shangyu.gdxzExpert.activity; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.saveUnreadFollow; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.unreadFollow; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.bagder.Badger; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +/** + * + * MainActivity.java + * + * @author ssy Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:新的患者申请列表页面 + */ + +public class NewPatientActivity extends BaseActivity implements OnItemClickListener,OnCallBackFromNet { + + // listview控件 + private ListView ptrLv; + // 处理正在加载,空,错误的布局 + private TextView load_empty; + private ArrayList PatientList = new ArrayList(); + private String applyListUrl = Url.getapplyList; + private NewPatientAdapter patientAdapter; + private long count = 0; + public static int ERROR = 101; + public static int REQUEST_REFRESH = 102; + public static final int GETAPPLYLISTOPERATE = 200; + private String status; + private int position; + private String nickname; + + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("新的患者"); + + } + + @Override + public View onCreateSuccessedView() { + + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_new_patient, null); + ptrLv = (ListView) view.findViewById(R.id.lv_item_new_patient); + + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + TextView tv_add_patient = view.findViewById(R.id.tv_add_patient); + tv_add_patient.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(NewPatientActivity.this,MyQrCodeActivity.class); + startActivity(intent); + } + }); + if(!StringUtil.isEmpty(getIntent().getStringExtra("message_id"))) + { + readMessage(getIntent().getStringExtra("message_id")); + } + onLoaded(); + initData(); + if(unreadFollow>0) + { + unreadFollow=0; + refreshMessages(); + saveUnreadFollow(); + } + return view; + } + public void refreshMessages() + { + int unreadNum = NIMClient.getService(MsgService.class).getTotalUnreadCount(); + Badger.updateBadgerCount(unreadNum); + } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + needreportPage("新的患者"); +// ECNotificationManager.getInstance().forceCancelNotification(); + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 +// String result = SharePrefUtil.getString(ct, applyListUrl, null); +// LogUtil.i("result = "+result); + count = SharePrefUtil.getLong(ct, "new_patient_count", 0); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { +// // 显示加载框 +// showLoadingProgress(); +// } +// // 网络是否可用 +// if (!CommonUtil.isNetworkAvailable()) { +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// return; +// } + getNewPatientList(applyListUrl); + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + "uuid", ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + LogUtil.i("info.result = "+info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded() { + // 隐藏加载进度框 + dismissLoadingProgress(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + LogUtil.i("result = "+result); + // 解析json数据 + PatientListBean bean = GsonTools.fromGsonToBean(result,PatientListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + ptrLv.setEmptyView(load_empty); + return; + } + // 初始化列表数据 + PatientList.clear(); + count = 0; + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { + // load_empty.setVisibility(View.VISIBLE); + ptrLv.setEmptyView(load_empty); + } else { + load_empty.setVisibility(View.GONE); + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + PatientList.add(bean.data.get(i)); + count++; + } + } + // 如果待审核也没有显示空布局 + if (PatientList.size() <= 0) { + load_empty.setVisibility(View.VISIBLE); + } + } + // 实例化适配器 + patientAdapter = new NewPatientAdapter(NewPatientActivity.this, + PatientList); + ptrLv.setAdapter(patientAdapter); + SharePrefUtil.saveLong(ct, "new_patient_count", count); + // 完成 + onLoaded(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case GETAPPLYLISTOPERATE: + + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (("1").equals(retcode)) { + + // 插入该患者 + String patientUuid = PatientList.get(position).patientUuid; + String realName = PatientList.get(position).realName; + String photo = PatientList.get(position).photo; + String mobile = PatientList.get(position).mobile; + int sex = PatientList.get(position).sex; + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + patientUuid); + patientModel.setPhoto(photo); + patientModel.setMobile(mobile); + patientModel.setRealName(realName); + patientModel.setSex(sex); + patientModel.setType(Constant.typePatient); + PatientSqlManager.insertPatient(patientModel, + Constant.typePatient); + + ToastUtil.showToast("操作成功"); + PatientList.remove(position); + patientAdapter.notifyDataSetChanged(); + NewPatientActivity.this + .setResult(REQUEST_REFRESH); + if (PatientList.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + count--; + SharePrefUtil.saveLong(ct, "new_patient_count", + count); + // CCPAppManager.startChattingAction(ct, + // Constant.Patient_AppKey + patientUuid, + // realName, "2,1,2,0", patientUuid, 6); + if (status != null && status.equals("2")) { + handleSendTextMessage(Constant.Patient_AppKey + + patientUuid); + } + if (!nickname.equals(realName)){ + updatename( Url.getupdateNickname,patientUuid,SharePrefUtil.getString(ct, "uuid", ""), nickname,""); + } + + } else { + ToastUtil.showToast(message); + } + SharePrefUtil.saveString(ct, Url.getapplyListOperate, ""); + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + } + } + + public class NewPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + private String applyListOperate = Url.getapplyListOperate; + + public NewPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList = patientList; + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list, null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_patient_image); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_patient_date); + mHolder.tvInfo = (TextView) convertView + .findViewById(R.id.tv_patient_info); + mHolder.tvResult = (TextView) convertView + .findViewById(R.id.tv_ok_cancle); + mHolder.btOk = (Button) convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_new_patient_cancle); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + + mHolder.tvInfo.setText(p.content); + + mHolder.tvDate.setText(p.createDate); + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + + // 待审核 + mHolder.tvResult.setVisibility(View.GONE); + mHolder.btOk.setVisibility(View.VISIBLE); + mHolder.btCancle.setVisibility(View.VISIBLE); + + // 同意事件 + mHolder.btOk.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("ok-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String[] split = p1.content.split(",在"); + String[] split1 = split[0].split("我是"); + + String nickname = split1[split1.length-1]; + LogUtil.i("nickname = "+nickname); + String format = format(nickname); + LogUtil.i("format = "+format); + getNewPatient(applyListOperate, uuid, "2", position,format); + } + }); + // 拒绝事件 + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("cancle-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String[] split = p1.content.split(",在"); + String[] split1 = split[0].split("我是"); + String nickname = split1[split1.length-1]; + LogUtil.i("nickname = "+nickname); + String format = format(nickname); + LogUtil.i("format = "+format); + getNewPatient(applyListOperate, uuid, "3", position,format); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private NewsViewHolder mHolder = null; + + private class NewsViewHolder { + public TextView tvResult; + public Button btCancle; + public Button btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + } + public static String format(String s){ + String str=s.replaceAll("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……& ;*()——+|{}【】‘;:”“’。,、?|-]", ""); + return str; +} + + /** + * 同意或拒绝操作 getNewPatient + * + * @param loadUrl + * @param uuid + * @param status + * @param position + * void + */ + private void getNewPatient(final String loadUrl, String uuid, + final String status, final int position, final String nickname) { + showProgressDialog("请求中..."); + + this.status = status; + this.position = position; + this.nickname = nickname; + Map map = new HashMap<>(); + map.put("uuid",uuid); + map.put("status",status); + LogUtil.i("NewPatientActivity uuid = "+uuid); + LogUtil.i("NewPatientActivity status = "+status); + sendParamtoNet(loadUrl,map,GETAPPLYLISTOPERATE,this,false); + +// RequestParams params = new RequestParams(); +// params.addBodyParameter("uuid", uuid);// 申请记录uuid +// params.addBodyParameter("status", status);// 状态(2.同意 3.拒绝) +// LogUtil.i("NewPatientActivity uuid = "+uuid); +// LogUtil.i("NewPatientActivity status = "+status); +// HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// try { +// JSONObject objs = new JSONObject(info.result); +// String retcode = objs.getString("code"); +// String message = objs.getString("message"); +// +// if (("1").equals(retcode)) { +// +// // 插入该患者 +// String patientUuid = PatientList.get(position).patientUuid; +// String realName = PatientList.get(position).realName; +// String photo = PatientList.get(position).photo; +// String mobile = PatientList.get(position).mobile; +// int sex = PatientList.get(position).sex; +// PatientModel patientModel = new PatientModel( +// Constant.Patient_AppKey + patientUuid); +// patientModel.setPhoto(photo); +// patientModel.setMobile(mobile); +// patientModel.setRealName(realName); +// patientModel.setSex(sex); +// patientModel.setType(Constant.typePatient); +// PatientSqlManager.insertPatient(patientModel, +// Constant.typePatient); +// +// ToastUtil.showToast("操作成功"); +// PatientList.remove(position); +// patientAdapter.notifyDataSetChanged(); +// NewPatientActivity.this +// .setResult(REQUEST_REFRESH); +// if (PatientList.isEmpty()) { +// ptrLv.setEmptyView(load_empty); +// } +// count--; +// SharePrefUtil.saveLong(ct, "new_patient_count", +// count); +// // CCPAppManager.startChattingAction(ct, +// // Constant.Patient_AppKey + patientUuid, +// // realName, "2,1,2,0", patientUuid, 6); +// if (status != null && status.equals("2")) { +// handleSendTextMessage(Constant.Patient_AppKey +// + patientUuid); +// } +// if (!nickname.equals(realName)){ +// updatename( Url.getupdateNickname,patientUuid,SharePrefUtil.getString(ct, "uuid", ""), nickname,""); +// } +// +// } else { +// ToastUtil.showToast(message); +// } +// SharePrefUtil.saveString(ct, loadUrl, ""); +// +// } catch (JSONException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// +// +// +// +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// closeProgressDialog(); +// ToastUtil.showToast("操作失败,请稍候再试"); +// } +// }); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (ptrLv.getHeaderViewsCount() > 0) { + position = position - 1; + } + + } + private void updatename(final String loadUrl, final String patientUuid, String expertUuid, String NickName, String NoteContent) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("patientUuid",patientUuid);//患者uuid + params.addBodyParameter("expertUuid",expertUuid);//专家uuid + params.addBodyParameter("nickname",NickName);//别名 + params.addBodyParameter("note",NoteContent);//备注内容 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid,info.result); + LogUtil.i(info.result); +// getproseData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); +// ToastUtil.showMsgCustomToast("加载失败"); + } + }); + + } + /** + * 处理文本发送方法事件通知 + * + * @param + */ + private void handleSendTextMessage(String patientuuid) { + IMMessage imMessage = MessageBuilder.createTextMessage(patientuuid.split("#")[1].toLowerCase(), P2P, "你好,我已经是你的随访医生了"); + MessageFragment.ext.clear(); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_NICKNAME, UserInfoHelper.getUserName(patientuuid)); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_TYPE,general); + imMessage.setRemoteExtension(MessageFragment.ext); + NIMClient.getService(MsgService.class).sendMessage(imMessage,false); +// // 组建一个待发送的ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT); +// // 设置消息接收者 +// msg.setTo(patientuuid); +// // 创建一个文本消息体,并添加到消息对象中 +// ECTextMessageBody msgBody = new ECTextMessageBody("你好,我已经是你的随访医生了"); +// msg.setBody(msgBody); +// msg.setUserData("2,1,2,0"); +// try { +// // 发送消息,该函数见上 +// long rowId = -1; +// rowId = IMChattingHelper.sendECMessage(msg); +// // 通知列表刷新 +// msg.setId(rowId); +// // notifyIMessageListView(msg); +// } catch (Exception e) { +// e.printStackTrace(); +// } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsActivity.java new file mode 100644 index 0000000..ef01cdc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsActivity.java @@ -0,0 +1,60 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.NewsFragment; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/10. + */ + +public class NewsActivity extends BaseActivity{ + private View view; + @Override + public void setTitle() { + top_title.setText("肝胆新闻"); + top_right.setImageResource(R.drawable.search); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(ct, PublicSearchActivity.class); + intent.setType("news"); + startActivity(intent); + } + }); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_news); + NewsFragment newsFragment = new NewsFragment(); + getSupportFragmentManager().beginTransaction() + .replace(R.id.frame_container, newsFragment, "news_fragment") + .commitAllowingStateLoss(); + return view; + } + @Override + protected void onResume() { + super.onResume(); + needreportPage("肝胆新闻"); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsDetailActivity.java new file mode 100644 index 0000000..c4ab804 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NewsDetailActivity.java @@ -0,0 +1,2131 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Url.getNewWa; + +import android.Manifest; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; +import android.view.GestureDetector; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnLongClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.JsResult; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; +import com.umeng.socialize.UMShareAPI; +import com.umeng.socialize.bean.SHARE_MEDIA; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLDecoder; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.ecdemo.ECAsyncTask; +import cn.shangyu.gdxzExpert.ecdemo.RichTextBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.BitmapUtil; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.splash.WelcomeUI; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.ItemLongClickedPopWindow; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +/** + * 功能说明: + * + * @author 详细新闻页面 NewsDetailActivity + */ + +public class NewsDetailActivity extends BaseActivity implements + OnTouchListener, OnClickListener, OnCallBackFromNet { + // private static final long serialVersionUID = 5952689219411916553L; + private String url; + private String title; + private X5WebView mWebView; + private TextView mTv_agree; + private TextView mTv_readNum; + private LinearLayout ll_agree; + private LinearLayout ll_share; + private WebSettings settings; + private String newsTitle = ""; + private String summary = ""; + private String imageUrl = ""; + private ImageView mIv_agree; + private String isAgree;// 0未点赞1点赞 + private int type = 0;// 新闻传值1,科普文章传值2 + private String expertUuid; + private String bookUuid = ""; + private String agreenum = ""; + private String readnum = ""; + private String booktitle = ""; + private NewsDetailActivity ctx; + private View view; + private LinearLayout mLl_bottom; + private int noagree = 0; + private int agree = 0; + private Intent intent; + private LinearLayout ll_collect; + private String isCollection; // 是否收藏1收藏过 0为收藏 + private String collpath = ""; + private ImageView iv_collect; + private TextView tv_collect; + private GestureDetector gestureDetector; + private int downX, downY; + int flag =0; + private String hospital_uuid; + private String shareurl; + private String sharetitl; + private boolean isCollt = false; + private String isCollectiontitle; + private String isCollectionPath; + private int detailisAgree; + private String from; + private boolean need_back=false; + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private WebChromeClient.CustomViewCallback xCustomViewCallback; + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_back_layout.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_back_layout.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if("专题e站".equals(title)||need_back) + { + if(mWebView!=null&&mWebView.canGoBack()) + { + +// finish(); + mWebView.goBack(); + } + else + { + finish(); + } + + } + else + { + if ("WelcomeUI".equals(from)){ + startActivity(new Intent(NewsDetailActivity.this, WelcomeUI.class)); + } + finish(); + } + + } + }); + flag = getIntent().getIntExtra("flag", 0); +// if(flag==0&&getIntent().getData()!=null) +// { +// try { +// int flags = Integer.valueOf(getIntent().getData().getQueryParameter("types")); +// switch (flags) +// { +// case 3: +// flag=3; +// break; +// case 4: +// flag=1; +// break; +// case 6: +// flag=10; +// break; +// case 8: +// flag=2; +// break; +// } +// } +// catch (Exception e) +// { +// +// } +// } + if (flag == 1) {//含分享 + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + top_right.setOnClickListener(this); + bookUuid = intent.getStringExtra("newsuuid");//首页新闻点击上报需要uuid,其他地方不需要,但是没做改动,不知道后续有没有影响 + } else if (flag == 2) {// 科普 + Constant.isShareGetPoint = true; + type = 2; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("kepuuuid"); + agreenum = intent.getStringExtra("kepuagreenum"); + readnum = intent.getStringExtra("kepureadnum"); +// if(StringUtil.isEmpty(bookUuid)&&StringUtil.isEmpty(agreenum)&&StringUtil.isEmpty(readnum)&&getIntent().getData()!=null) +// { +// bookUuid=getIntent().getData().getQueryParameter("uuid"); +// agreenum=getIntent().getData().getQueryParameter("agreenum"); +// readnum=getIntent().getData().getQueryParameter("readnum"); +// } + } else if (flag == 3) {// 新闻 + Constant.isShareGetPoint = true; + type = 1; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("newsuuid"); + agreenum = intent.getStringExtra("newsagreenum"); + readnum = intent.getStringExtra("newsreadnum"); + collpath = intent.getStringExtra("imageUrl"); +// if(StringUtil.isEmpty(bookUuid)&&StringUtil.isEmpty(agreenum)&&StringUtil.isEmpty(readnum)&&StringUtil.isEmpty(collpath)&&getIntent().getData()!=null) +// { +// bookUuid=getIntent().getData().getQueryParameter("uuid"); +// agreenum=getIntent().getData().getQueryParameter("agreenum"); +// readnum=getIntent().getData().getQueryParameter("readnum"); +// collpath=Url.urlHtml+getIntent().getData().getQueryParameter("headImg"); +// } + } else if (flag == 4) {// 新闻轮播图 + type = 1; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("newssuuuid"); + agreenum = intent.getStringExtra("newssagreenum"); + readnum = intent.getStringExtra("newssreadnum"); + collpath = intent.getStringExtra("imageUrl"); + } else if (flag == 5) {// 首页轮播图 + type = 1; + mLl_bottom.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("newsfsuuuid"); + agreenum = intent.getStringExtra("newsfagreenum"); + readnum = intent.getStringExtra("newsfreadnum"); + } else if (flag == 6) {// 经典病例列表 + type = 3; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("nfsuuuid"); + agreenum = intent.getStringExtra("nfagreenum"); + readnum = intent.getStringExtra("nfreadnum"); + collpath = intent.getStringExtra("npath"); + booktitle = intent.getStringExtra("collect"); + } else if (flag == 7) {// 病历收藏跳过来的 + type = 3; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("other_uuid"); + agreenum = intent.getStringExtra("agreenum"); + readnum = intent.getStringExtra("readnum"); + collpath = intent.getStringExtra("path"); + booktitle = intent.getStringExtra("collection"); + } else if (flag == 8) { + int isExpert = intent.getIntExtra("isExpert", 0); + if (isExpert == 1) { + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.icon_contributing); + top_right.setOnClickListener(this); + hospital_uuid = intent.getStringExtra("hospital_uuid"); + } + }else if (flag == 9) {//更多动态 + mLl_bottom.setVisibility(View.GONE); + + + + }else if (flag == 10){//病例荟萃ShareCaseFragment + type = 7; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("nfsuuuid"); + agreenum = intent.getStringExtra("nfagreenum"); + readnum = intent.getStringExtra("nfreadnum"); + collpath = intent.getStringExtra("npath"); + booktitle = intent.getStringExtra("collect"); +// if(StringUtil.isEmpty(bookUuid)&&StringUtil.isEmpty(agreenum)&&StringUtil.isEmpty(readnum)&& +// StringUtil.isEmpty(collpath)&&StringUtil.isEmpty(booktitle)&&getIntent().getData()!=null) +// { +// bookUuid=getIntent().getData().getQueryParameter("uuid"); +// agreenum=getIntent().getData().getQueryParameter("agreeNum"); +// readnum=getIntent().getData().getQueryParameter("readNum"); +// collpath=getIntent().getData().getQueryParameter("path"); +// booktitle = getIntent().getData().getQueryParameter("title"); +// } + } + if (!"".equals(agreenum)) { + mTv_agree.setText(agreenum); + } else { + mTv_agree.setText("0"); + } + if (!"".equals(readnum)) { + mTv_readNum.setText(readnum); + } else { + mTv_readNum.setText("1"); + } + } + + @Override + public View onCreateSuccessedView() { +// if (!UIUtils.isLogined()) +// { +// Intent intent = new Intent(); +// intent.setClass(this, LoginNewActivity.class); +// startActivity(intent); +// finish(); +// return null; +// } + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_news_detail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + ctx = this; + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + + mLl_bottom = (LinearLayout) view.findViewById(R.id.ll_bottom); + ll_collect = (LinearLayout) view.findViewById(R.id.ll_collect); + ll_collect.setOnClickListener(this); + ll_agree = (LinearLayout) view.findViewById(R.id.ll_agree);// 点赞 + ll_share = (LinearLayout) view.findViewById(R.id.ll_share);// 分享 + ll_agree.setOnClickListener(this); + ll_share.setOnClickListener(this); + loadingView = view.findViewById(R.id.loading_view); + loadfailView = (LinearLayout) view.findViewById(R.id.ll_load_fail); + mTv_agree = (TextView) view.findViewById(R.id.tv_agree);// 点赞 + mTv_readNum = (TextView) view.findViewById(R.id.tv_readNum);// 显示 阅读量 + mIv_agree = (ImageView) view.findViewById(R.id.iv_agree);// 显示 阅读量 + iv_collect = (ImageView) view.findViewById(R.id.iv_collect);// + tv_collect = (TextView) view.findViewById(R.id.tv_collect);// + video_fullView = view.findViewById(R.id.f_move); +// video_fullView.setKeepScreenOn(true); //确保屏幕长亮 + + ll_agree.setOnClickListener(this); + setitle1(); + requestIsAgree(); + showLoadingView(); + initData(); + if(flag==6) + { + AddNewsDetails(); + } + else + { + AddNewsDetail(); + } + + return view; + } + + //能否解决部分手机WebView崩溃 +// @Override +// public AssetManager getAssets() { +// return getResources().getAssets(); +// } + String finalUrl =""; + private void AddNewsDetail() { + String url = null; + if (flag == 2){ + url = Url.getKePuCollection; + }else if (flag == 10){ + url = Url.caseDetial; + }else { + if(!StringUtil.isEmpty(getIntent().getStringExtra("kepuuuid"))) + { + url = Url.getKePuCollection; + bookUuid=getIntent().getStringExtra("kepuuuid");//从聊天页面进入科普,然后上报画像系统 + } + else + { + url = Url.newsDetial; + } + + } + // 提取专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("uuid", bookUuid); +// params.addBodyParameter("type", String.valueOf(1)); + LogUtil.i("user_uuid = "+expertUuid); + LogUtil.i("uuid = "+bookUuid); + + + + + finalUrl = url; + HttpHelper.loadData(HttpMethod.POST,url, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); +// Map param = new HashMap(); +// param.put("user_uuid", expertUuid); +// param.put("uuid", bookUuid); +// sendParamtoNet(Url.newsDetial, param, NEWS_DETAIL, ctx, false); + } + private void AddNewsDetails() { + Map param = new HashMap(); + param.put("uuid", bookUuid); + sendJsonPostParamtoNetSignMD5(Url.medicalRecordShareDetail, param, 101, this + ); + } + private String gettag=""; + public void processData(String result) { + LogUtil.i("新闻详情msg = "+result); +// String code = null; +// String message = null; + // "isAgree": 0, + // "code": "1", + // "isCollection": 0, + // String isAgree=null; + int isCollection = 0; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + + jsonObject = new JSONObject(result); +// code = jsonObject.getString("code"); +// message = jsonObject.getString("message"); + isCollection = jsonObject.optInt("isCollection"); + isCollectionPath = jsonObject.optString("path"); + isCollectiontitle = jsonObject.optString("title"); + detailisAgree = jsonObject.optInt("isAgree",2); + int agreenum = jsonObject.optInt("agreenum"); + mTv_agree.setText(agreenum+""); + if(flag==3||flag==2||flag==10||flag==6) + { + readnum=jsonObject.optString("readnum"); + mTv_readNum.setText(readnum); + } + + if (StringUtil.isEmpty(isCollectionPath)){ + isCollectionPath = url.replace(Url.urlHtml,""); + isCollectiontitle = newsTitle; + collpath = imageUrl; + } + if (detailisAgree==0){ + isAgree = "0"; + mIv_agree.setImageResource(R.drawable.argee_no); + noagree = agreenum; + agree = noagree + 1; + + }else if (detailisAgree==1){ + isAgree = "1"; + agree = agreenum; + noagree = agree - 1; + mIv_agree.setImageResource(R.drawable.argee_sure); + + } + if (isCollection==1) { + LogUtil.i("新闻详情isCollection = "+isCollection); + isCollt = true; + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + } else { + isCollt = false; + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + } + if(url.contains("outpatient_details")||url.contains("wxPatient/index.htm#/outPatient")||url.contains(getNewWa) + || "动态详情".equals(top_title.getText())) + { + //门诊不用上报画像系统 + } + else if(Url.getKePuCollection.equals(finalUrl)) + { + gettag=jsonObject.optString("tags"); + needreportDetail("患教文库",gettag ,isCollectiontitle); + } + else if(Url.newsDetial.equals(finalUrl)) + { + gettag=jsonObject.optString("tags"); + needreportDetail("肝胆新闻",gettag,isCollectiontitle); + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + // public void getimageUrl(){ + // Resources r = + // NewsDetailActivity.this.getApplicationContext().getResources(); + // Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + // + r.getResourcePackageName(R.drawable.default_news_iv) + "/" + // + r.getResourceTypeName(R.drawable.default_news_iv) + "/" + // + r.getResourceEntryName(R.drawable.default_news_iv)); + // String headLineString = + // getAbsoluteImagePath(NewsDetailActivity.this.getApplicationContext() + // ,uri); + // } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + url = getIntent().getStringExtra("url"); + title = getIntent().getStringExtra("title"); +// if(StringUtil.isEmpty(url)&&StringUtil.isEmpty(title)&&getIntent().getData()!=null) +// { +// url = Url.urlHtml+getIntent().getData().getQueryParameter("path"); +// switch (flag) +// { +// case 3: +// title="新闻详情"; +// break; +// case 1: +// title="科研详情"; +// break; +// case 10: +// title="病例详情"; +// break; +// case 2: +// title="患教详情"; +// break; +// } +//// title = getIntent().getData().getQueryParameter("title"); +// } + from = getIntent().getStringExtra("from"); + need_back=getIntent().getBooleanExtra("need_back",false); + if(StringUtil.isEmpty(title)) + title=""; + LogUtil.e("url = "+url); + // url = "http://www.hep-druginteractions.org/checker"; + if(title.equals("患教详情")){ + String need_inside_share=getIntent().getStringExtra("need_inside_share"); + if(StringUtil.isEmpty(need_inside_share)) + { + top_right_text.setVisibility(View.GONE); + top_right_text.setText("推荐"); + top_right_text.setOnClickListener(this); + } + +// inside_share.setVisibility(View.VISIBLE); +// inside_share.setOnClickListener(this); + } + newsTitle = getIntent().getStringExtra("newsTitle");// 新闻的标题 +// if(StringUtil.isEmpty(newsTitle)&&getIntent().getData()!=null) +// { +// if(flag==1) +// { +// newsTitle = getIntent().getData().getQueryParameter("projectName"); +// } +// else if(flag==2) +// { +// newsTitle = getIntent().getData().getQueryParameter("topic"); +// } +// else +// { +// newsTitle = getIntent().getData().getQueryParameter("title"); +// } +// +// +// } + summary = getIntent().getStringExtra("summary");// 新闻的摘要 +// if(StringUtil.isEmpty(summary)&&getIntent().getData()!=null) +// { +// if(flag==1) +// { +// summary = getIntent().getData().getQueryParameter("content"); +// } +// else +// { +// summary = getIntent().getData().getQueryParameter("summary"); +// } +// +// +// } + if (type == 1 && StringUtil.isEmpty(summary)) { + summary = "新鲜资讯,一触即达"; + } + imageUrl = getIntent().getStringExtra("imageUrl");// 新闻的图的地址 +// if(StringUtil.isEmpty(imageUrl)&&getIntent().getData()!=null) +// { +// if(flag==1) +// { +// imageUrl = Url.urlHtml+getIntent().getData().getQueryParameter("imgs"); +// } +// else if(flag==2) +// { +// imageUrl = Url.urlHtml+getIntent().getData().getQueryParameter("imgPath"); +// } +// else +// { +// imageUrl = Url.urlHtml+getIntent().getData().getQueryParameter("headImg"); +// } +// +// +// } +// if(StringUtil.isEmpty(url)&&StringUtil.isEmpty(title)&&getIntent().getData()!=null) +// { +// url = Url.urlHtml+getIntent().getData().getQueryParameter("path"); +// title = getIntent().getData().getQueryParameter("title"); +// } + if (!TextUtils.isEmpty(title)) { + if (title.length() > 13) { + String concat = title.substring(0, 13).concat("..."); + top_title.setText(concat); + } else { + top_title.setText(title); + } + } else { + top_title.setText("新闻详情"); + } + // mWebView.setOnTouchListener(this); + gestureDetector = new GestureDetector(this, + new GestureDetector.SimpleOnGestureListener() { + @Override + public void onLongPress(MotionEvent e) { + downX = (int) e.getX(); + downY = (int) e.getY(); + } + }); + dealNewsDetail(); + } + + public void loadurl(final WebView view, final String url) { + LogUtil.i("真实url = "+url); + view.loadUrl(url); + } + + + private void dealNewsDetail() { + + + settings = mWebView.getSettings(); + // mWebView.setInitialScale(25); + if(title.equals("专题e站")){ + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + + } + +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); +// } + +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 + String ua = settings.getUserAgentString(); + settings.setUserAgentString(ua + ";GdxzAndroidExpertApp"); + if(url.contains(Url.getNewWa)) + { + settings.setUserAgentString(ua + "gdxz-expert"); + } +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + if (!StringUtil.isEmpty(getIntent().getStringExtra("homemodal"))) + { + mWebView.getSettings().setBlockNetworkImage(false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + + mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); + + } + + } + else + { + mWebView.getSettings().setBlockNetworkImage(true); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mWebView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + + mWebView.setWebViewClient(new WebViewClient() { + + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if("专题e站".equals(title)||need_back) + { + return false; + } + else + { + loadurl(view, url); + return true; + } + + + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(final WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + + +// mWebView.loadUrl("javascript:accessSource('" + "app" + "')"); +// mWebView.post(new Runnable() { +// @Override +// public void run() { + + if (!StringUtil.isEmpty(getIntent().getStringExtra("homemodal"))) + { +// + mWebView.evaluateJavascript("accessSource('" + "app" + "')", new ValueCallback() { + @Override + public void onReceiveValue(String value) { + + } + }); +// view.loadUrl("javascript:(function() { " + +// "var videos = document.getElementsByTagName('audio');" + +// " for(var i=0;i= Build.VERSION_CODES.JELLY_BEAN_MR1) { +// +// mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); +// +// } + } + else + { +// if(flag==3||flag==1||flag==10||flag==2) { +// mWebView.evaluateJavascript("accessSource('" + "app" + "')", new ValueCallback() { +// @Override +// public void onReceiveValue(String value) { +// +// } +// }); +// } + + mWebView.getSettings().setBlockNetworkImage(false); + } +// } +// }); + + + + if (url.contains("#") && type != 3 && url.contains(Url.urlHtml)) { + String keyWord = url.substring(url.indexOf("#") + 1); + try { + String output = URLDecoder.decode(keyWord, "UTF-8"); + Intent intent = new Intent(ctx, KeyWordActivity.class); + intent.putExtra("keyword", output); + intent.setType(type + ""); + startActivity(intent); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + if(!url.equals("http://www.igandan.com/")&&!url.equals("http://www.igandan.com")) + loadurl(view, "file:///android_asset/error/error.html"); + } +// if ("乙路前行".equals(top_title.getText())||"谈丙话肝".equals(top_title.getText())||"常见问题".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = view.getTitle(); +// } + if ("乙路前行".equals(top_title.getText())) { + shareurl = url; + sharetitl = "乙路前行—一路有你 一起前行"; + }else if ("谈丙话肝".equals(top_title.getText())) { + shareurl = url; + sharetitl = "谈丙话肝"; + }else if ("常见问题".equals(top_title.getText())) { + shareurl = url; + sharetitl = "肝病常见问题权威答"; + }else if("病例大赛".equals(top_title.getText())){ + shareurl = url; + sharetitl = "第三届利肝中国行病例大赛"; + }else if ("知识大赛".equals(top_title.getText())) { + shareurl = url; + sharetitl = "全国青年医师肝病知识大赛"; + }else if ("肝胆医院".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + }else if ("动态详情".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + }else if ("肝愿为你".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + }else if ("080中国研究".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + } + else if("专题e站".equals(top_title.getText())) + { + shareurl = url; + sharetitl = view.getTitle(); + } + super.onPageFinished(view, url); + } + + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + mWebView.setWebChromeClient(new WebChromeClient(){ + @Override + public void onReceivedTitle(WebView view, String title1) { + super.onReceivedTitle(view, title1); + if (!StringUtil.isEmpty(getIntent().getStringExtra("homemodal"))) + title =title1; + top_title.setText(title); + + } + + @Override + public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(NewsDetailActivity.this, message, "取消", + "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + result.cancel(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + result.confirm(); + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + + return true; + } + + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { +// super.onShowCustomView(view, callback); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + mWebView.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + mToolbar.setBackgroundColor(Color.BLACK); + + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + xCustomViewCallback = callback; + video_fullView.addView(view); + + video_fullView.setVisibility(View.VISIBLE); + + setFullScreen(); + } + + @Override + public void onHideCustomView() { +// super.onHideCustomView(); + mToolbar.setBackgroundColor(getResources().getColor(R.color.top_bg)); + layout_top.setVisibility(View.VISIBLE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + xCustomViewCallback.onCustomViewHidden(); + mWebView.setVisibility(View.VISIBLE); + quitFullScreen(); + } + }); + // intent = getIntent(); + // content = intent.getStringExtra("content"); + // mWebView.loadUrl(Url.urlHtml+content); + // mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); + + mWebView.setOnLongClickListener(new OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + // TODO Auto-generated method stub + WebView.HitTestResult result = ((WebView) v).getHitTestResult(); + + if (null == result) + return false; + int type = result.getType(); + final String imgurl = result.getExtra(); + final ItemLongClickedPopWindow itemLongClickedPopWindow = new ItemLongClickedPopWindow( + NewsDetailActivity.this, + ItemLongClickedPopWindow.IMAGE_VIEW_POPUPWINDOW, + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + if (type == 0) { + return false; + } + switch (type) { + case WebView.HitTestResult.PHONE_TYPE: // 处理拨号 + break; + case WebView.HitTestResult.EMAIL_TYPE: // 处理Email + break; + case WebView.HitTestResult.GEO_TYPE: // TODO + break; + case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接 + // Log.d(DEG_TAG, "超链接"); + break; + case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: + break; + case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项 + // 通过GestureDetector获取按下的位置,来定位PopWindow显示的位置 + itemLongClickedPopWindow.showAtLocation( + findViewById(R.id.ll_bottom), Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + break; + default: + break; + } + itemLongClickedPopWindow.getView( + R.id.item_longclicked_lookImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + ArrayList urls = new ArrayList(); + urls.add(new ViewImageInfo(0, imgurl, imgurl)); + CCPAppManager.startChattingImageViewAction(ct, + 0, urls, true); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_viewImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_saveImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 下载 + itemLongClickedPopWindow.dismiss(); + // 点击图片后将图片保存到SD卡跟目录下的Test文件夹内 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(NewsDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + else + { + EasyWindow.with(NewsDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(NewsDetailActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + + } + } + else + { + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + + } + }); + return true; + } + }); + if(url.contains(Url.modernHepatology+"/modernHepatology")||url.contains("modernHepatology")) + { + setCookie(); +// CommonUtil.setCookie(url); + } + loadurl(mWebView, url); + } + + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + + } + + + @Override + protected void onResume() { + super.onResume(); +// if("专题e站".equals(getIntent().getStringExtra("title"))) +// { +// needreportPage("专题e站"); +// } + // webView.resumeTimers(); + try { + if (mWebView != null) { + mWebView.getClass().getMethod("onResume") + .invoke(mWebView, (Object[]) null); + mWebView.onResume(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onPause() { + super.onPause(); + + // webView.pauseTimers(); + try { + if (mWebView != null) { + mWebView.onPause(); + mWebView.getClass().getMethod("onPause") + .invoke(mWebView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + + + + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right_text) { + //分享功能换成分享到容联 + delVisit(); +// case R.id.inside_share: +// //分享功能换成分享到容联 +// delVisit(); +// break; + } else if (id == R.id.top_back_layout) { +// Intent intentCollection = new Intent(); +// intentCollection.putExtra("uuid", bookUuid); +// intentCollection.putExtra("isCollection", isCollt); +// setResult(112, intentCollection); + if ("WelcomeUI".equals(from)){ + startActivity(new Intent(NewsDetailActivity.this, WelcomeUI.class)); + } + finish(); + } else if (id == R.id.top_right) { + if (flag == 8) { + Intent intent = new Intent(ctx, AddProclamationActivity.class); + intent.putExtra("hospital_uuid", hospital_uuid); + ctx.startActivity(intent); + } else { + if(title.equals("患教详情")) + { + showSharePopupWindow(view);// 调用分享 + }else + { + share();// 调用分享 + } + + + } + } else if (id == R.id.ll_collect) { + // 调用收藏 + if (isCollection != null) { + if (flag==3||flag==4){//新闻 + if (!isCollt){ + //收藏 + AddCollection(1); + }else { + DisCollection(1); + //取消收藏 + } + }else if (flag==2){ + if (!isCollt){ + //收藏 + AddCollection(2); + }else { + DisCollection(2); + //取消收藏 + } + }else if (flag==10){//病例荟萃 + if (!isCollt){ + //收藏 + AddCollection(7); + }else { + DisCollection(7); + //取消收藏 + } + }else if (!isCollection.equals("1")) { + CollectListSure(3); + // 收藏 + } else { + // 取消收藏 + CollectListDis(3); + } + } + } else if (id == R.id.ll_agree) { + if (isAgree != null) { + LogUtil.i("isAgree = "+isAgree); + if (!isAgree.equals("1")) { + // 点赞 + requestToAgree(); + if(title.equals("患教详情")||title.equals("新闻详情")) + { + if(title.equals("患教详情")) + { + needreportSome("like",newsTitle,gettag+"","患教文库"); + } + else + { + needreportSome("like",newsTitle,gettag+"","肝胆新闻"); + } + + } + } else { + // 取消点赞 + requestDissAgree(); + } + } + } else if (id == R.id.ll_share) { + if(title.equals("患教详情")) + { + showSharePopupWindow(view);// 调用分享 + }else + { + share();// 调用分享 + } + if(title.equals("患教详情")||title.equals("新闻详情")) + { + if(title.equals("患教详情")) + { + needreportSome("share",newsTitle,gettag+"","患教文库"); + } + else + { + needreportSome("share",newsTitle,gettag+"","肝胆新闻"); + } + + } +// share(); +// showSharePopupWindow(view); + +// list = PatientSqlManager.getPatientInfoList(Constant.typePatient); +// new ParseHtmlTask(UIUtils.getContext()).execute(); + } + } + private void showSharePopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(this) + .inflate(R.layout.popu_share_video, null); + LinearLayout ll_huan = contentView.findViewById(R.id.ll_huan); + LinearLayout ll_weixin = contentView.findViewById(R.id.ll_weixin); + LinearLayout ll_weixincircle = contentView.findViewById(R.id.ll_weixincircle); + LinearLayout ll_sina = contentView.findViewById(R.id.ll_sina); + Button btn_quxiao = contentView.findViewById(R.id.btn_quxiao); + + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + btn_quxiao.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + } + }); + ll_huan.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + delVisit(); + } + }); + ll_weixin.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.WEIXIN); + popupWindow.dismiss(); + } + }); + ll_weixincircle.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.WEIXIN_CIRCLE); + popupWindow.dismiss(); + } + }); + ll_sina.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.SINA); + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + + + return false; + } + + }); + + popupWindow.showAtLocation(view, 0, 0, 0); + + } + private void share(SHARE_MEDIA share_media) { + String shareTitle = newsTitle; + String shareUrl = url; +// if(flag==3) +// { +// shareUrl+="?fromtype=doctor"; +// } + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = newsTitle; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + if ("专题e站".equals(top_title.getText())||"动态详情".equals(top_title.getText())||"肝胆医院".equals(top_title.getText())||"乙路前行".equals(top_title.getText())||"谈丙话肝".equals(top_title.getText())||"常见问题".equals(top_title.getText())||"病例大赛".equals(top_title.getText())||"知识大赛".equals(top_title.getText())||"肝愿为你".equals(top_title.getText())||"080中国研究".equals(top_title.getText())){ + if (!StringUtil.isEmpty(sharetitl)) { + shareTitle = sharetitl; + shareUrl = shareurl; + } + } +// if ("分享肝胆相照APP".equals(title)) { +// shareTitle = "肝胆相照专家端APP"; +// } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(ct, shareTitle, summary, msgSinaContent, + imageUrl, shareUrl, bitmap,share_media); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + public void delVisit() { + final ECListDialog dialog = new ECListDialog(ct, new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(ct,GroupChatSelectPatientActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + } else { + + Intent intent = new Intent(ct,GroupSelectParentActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(ct.getResources().getColor(R.color.top_title)); + dialog.show(); + } + private void AddCollection(int i) { + if(title.equals("患教详情")||title.equals("新闻详情")) + { + if(title.equals("患教详情")) + { + needreportSome("collect",newsTitle,gettag+"","患教文库"); + } + else + { + needreportSome("collect",newsTitle,gettag+"","肝胆新闻"); + } + } + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", isCollectiontitle); + params.addBodyParameter("path", isCollectionPath); + params.addBodyParameter("readnum", readnum); + params.addBodyParameter("imgpath", collpath); + params.addBodyParameter("public_name", isCollectiontitle); + params.addBodyParameter("type", String.valueOf(i)); + LogUtil.i("user_uuid = "+expertUuid); + LogUtil.i("other_uuid = "+bookUuid); + LogUtil.i("title = "+isCollectiontitle); + LogUtil.i("path = "+isCollectionPath); + LogUtil.i("readnum = "+readnum); + LogUtil.i("imgpath = "+collpath); + LogUtil.i("public_name = "+isCollectiontitle); + LogUtil.i("type = "+i); + HttpHelper.loadData(HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + + private void DisCollection(int i) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("type", String.valueOf(i)); + HttpHelper.loadData(HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + public void processDataColl(String result) { + LogUtil.i("收藏结果 = "+result); + String code = null; + String message = null; + JSONArray jsonArray = null; + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + if (code.equals("1")) { + if (isCollt) { + isCollt = false; + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + ToastUtil.showMessage("取消收藏成功"); + } else { + isCollt = true; + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + ToastUtil.showMessage("收藏成功"); + } + + } else { + ToastUtil.showMessage(message); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + private void CollectListSure(int i) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid); + params.addBodyParameter("type", String.valueOf(i)); + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", booktitle); + params.addBodyParameter("path", collpath); + + HttpHelper.loadData(HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, Url.getcollection,info.result); + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + ToastUtil.showMessage("收藏成功"); + isCollection = "1"; + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + private void CollectListDis(int type) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("type", String.valueOf(type)); + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", booktitle); + params.addBodyParameter("path", collpath); + HttpHelper.loadData(HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, Url.getdiscollection, + info.result); + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + ToastUtil.showMessage("取消收藏成功"); + isCollection = "0"; + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + public static final int GET_ISAGREE_FROM_NET = 101; // 是否点赞 + public static final int GET_TOAGREE_FROM_NET = 102; // 点赞 + public static final int GET_DISSAGREE_FROM_NET = 103; // 取消点赞 + public static final int NEWS_DETAIL = 104; // 取消点赞 + + private void requestIsAgree() { + Map param = new HashMap(); + param.put("user_uuid", expertUuid); + param.put("news_article_uuid", bookUuid); + param.put("type", type + ""); + sendParamtoNet(Url.getRead, param, GET_ISAGREE_FROM_NET, ctx, false); + } + + private void requestToAgree() { + Map param = new HashMap(); + param.put("user_uuid", expertUuid); + param.put("news_article_uuid", bookUuid); + param.put("type", type + ""); + sendParamtoNet(Url.getAgree, param, GET_TOAGREE_FROM_NET, ctx, false); + } + + private void requestDissAgree() { + Map param = new HashMap(); + param.put("user_uuid", expertUuid); + param.put("news_article_uuid", bookUuid); + param.put("type", type + ""); + sendParamtoNet(Url.getDisAgree, param, GET_DISSAGREE_FROM_NET, ctx, + false); + } + + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + if(resultJson==null) + return; + String code = null; + JSONObject jsonObject = null; + String message = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(jsonObject==null||code==null||message==null) + { + return; + } + if (code.equals("1")) { + switch (resultCode) { + case GET_ISAGREE_FROM_NET: + try { + isCollection = jsonObject.getString("isCollection"); + int intagree = 0; + if (!TextUtils.isEmpty(agreenum)) { + intagree = Integer.parseInt(agreenum); + } + if (flag!=10){ + isAgree = jsonObject.getString("isAgree"); + if (isAgree.equals("1")) { + agree = intagree; + noagree = agree - 1; + mIv_agree.setImageResource(R.drawable.argee_sure); + } else { + noagree = intagree; + agree = noagree + 1; + mIv_agree.setImageResource(R.drawable.argee_no); + } + } + + if (flag!=3&&flag!=4&&flag!=2&&flag!=10){ + LogUtil.i("ISAGREE+isCollection = "+isCollection); + if (isCollection!=null&&isCollection.equals("1")) { + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + } else { + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + } + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case GET_TOAGREE_FROM_NET: + isAgree = "1"; + mIv_agree.setImageResource(R.drawable.argee_sure); + ToastUtil.showMessage("点赞成功"); + + mTv_agree.setText(agree + ""); + // private TextView mTv_readNum, mTv_agree; + break; + case GET_DISSAGREE_FROM_NET: + isAgree = "0"; + mIv_agree.setImageResource(R.drawable.argee_no); + mTv_agree.setText(noagree + ""); + ToastUtil.showMessage("取消点赞成功"); + break; + case NEWS_DETAIL://新闻详情 + processData(resultJson); + break; + } + } else if(code.equals("200")) + { + switch (resultCode) + { + case 101: + try { + JSONObject object = new JSONObject(resultJson); + processData(object.optJSONObject("data").toString()); + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + } + } + else { + ToastUtil.showMessage(message); + } + + } + + @Override + public void finish() { + ViewGroup view = (ViewGroup) getWindow().getDecorView(); + view.removeAllViews(); + int flag = getIntent().getIntExtra("flag", 0); + if (flag == 2) {// 科普 + SharePrefUtil.saveString(NewsDetailActivity.this, "callnewsUuid", + bookUuid); + SharePrefUtil.saveString(NewsDetailActivity.this, "callnewsagree", + mTv_agree.getText().toString()); + SharePrefUtil.saveString(NewsDetailActivity.this, "callnewsread", + (Integer.parseInt(mTv_readNum.getText().toString()) + 1) + + ""); + Intent intent = new Intent(); + intent.putExtra("uuid", bookUuid); + intent.putExtra("agreenum", mTv_agree.getText().toString()); + intent.putExtra("readnum",(Integer.parseInt(mTv_readNum.getText().toString()) + 1)+ ""); + intent.putExtra("isCollection", isCollt); + setResult(112, intent); + } else if (flag == 3 || flag == 4 || flag == 5) {// 新闻 + SharePrefUtil.saveString(NewsDetailActivity.this, "callnewsUuid", + bookUuid); + SharePrefUtil.saveString(NewsDetailActivity.this, "callnewsagree", + mTv_agree.getText().toString()); + SharePrefUtil.saveString(NewsDetailActivity.this, "callnewsread", + (Integer.parseInt(mTv_readNum.getText().toString()) + 1)+ ""); + Intent intent = new Intent(); + intent.putExtra("isCollection", isCollt); + intent.putExtra("uuid", bookUuid); + setResult(114, intent); + } else if (flag == 6 || flag == 7|| flag == 10) {// 经典病例,病理荟萃 列表 和收藏 + Intent intent = new Intent(); + intent.putExtra("uuid", bookUuid); + intent.putExtra("agreenum", mTv_agree.getText().toString()); + intent.putExtra("readnum", + (Integer.parseInt(mTv_readNum.getText().toString()) + 1) + + ""); + setResult(113, intent); + } + + super.finish(); + } + + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = newsTitle; + String shareUrl = url; +// if(flag==3) +// { +// shareUrl+="?fromtype=doctor"; +// } + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = newsTitle; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + if ("专题e站".equals(top_title.getText())||"动态详情".equals(top_title.getText())||"肝胆医院".equals(top_title.getText())||"乙路前行".equals(top_title.getText())||"谈丙话肝".equals(top_title.getText())||"常见问题".equals(top_title.getText())||"病例大赛".equals(top_title.getText())||"知识大赛".equals(top_title.getText())||"肝愿为你".equals(top_title.getText())||"080中国研究".equals(top_title.getText())){ + if (!StringUtil.isEmpty(sharetitl)) { + shareTitle = sharetitl; + shareUrl = shareurl; + } + } + if(url.contains(Url.getNewWa)) + { + shareUrl = "https://wx.igandan.com/patientpay/index?module=shop&expert_uuid="+SharePrefUtil.getString(ct, "uuid", ""); + summary="肝胆相照®肝胆病在线公共服务平台"; + } + if(url.contains(Url.modernHepatology+"/modernHepatology")||url.contains("modernHepatology")) + { + shareUrl = Url.modernHepatology+"/modernHepatology/index.htm#/liver-tools"; + } +// if ("分享肝胆相照APP".equals(title)) { +// shareTitle = "肝胆相照专家端APP"; +// } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(ct, shareTitle, summary, msgSinaContent, + imageUrl, shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + if (requestCode == 69 + && resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + return; + } + mRecipients = data.getStringExtra("uuid"); + if (pd==null){ + pd = new CustomProgressDialog(NewsDetailActivity.this, "请稍候"); + } + pd.show(); + new ParseHtmlTask(UIUtils.getContext()).execute(); + + } + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setMaxLines(12); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + + super.onDestroy(); + if ("WelcomeUI".equals(from)) + { + + } + else + { + UMShareAPI.get(this).release(); + } + + Constant.isShareGetPoint = false; + if (video_fullView != null) + video_fullView.removeAllViews(); + //释放资源 + if (mWebView != null) + mWebView.destroy(); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + // TODO Auto-generated method stub + return gestureDetector.onTouchEvent(event); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK&& event.getRepeatCount() == 0) { + if ("WelcomeUI".equals(from)){ + LogUtil.i("开始启动"); + startActivity(new Intent(NewsDetailActivity.this, WelcomeUI.class)); + + } + finish(); + return true; + } + return super.onKeyDown(keyCode, event); + } + + + RichTextBean richTextBean; + public String imagUrl; + //public String urlShare; + public String content; +// private ArrayList list; + private String mRecipients = ""; + CustomProgressDialog pd; + public class ParseHtmlTask extends ECAsyncTask { + + public ParseHtmlTask(Context context) { + super(context); + } + + @Override + protected Object doInBackground(Object[] params) { + +// url = "http://wx.igandan.com/expert/outpatient_details?expert_uuid=" + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); +// urlShare = Url.urlOutpatient+ SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + content = "肝胆相照®肝胆病在线公共服务平台"; + imagUrl = "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png"; + // 从患者数据库里取出患者列表 + +// for (int i = 0;i list = new ArrayList<>(); +// String[] split = mRecipients.split(","); +// for (int j = 0; j < split.length; j++) { +// if (!StringUtil.isEmpty(split[j])&&!list.contains(split[j])) { +// list.add(split[j]); +// IMChattingHelper.getInstance().handleSendRichTextMessage(bean, Constant.Patient_AppKey+split[j], "2,1,2,0",NewsDetailActivity.this); +// } +// } + //添加群发记录富文本 + addGroupSendMsg("3",bookUuid,""); + + }else { + IMChattingHelper.getInstance().handleSendRichTextMessage(bean, mRecipients, "2,1,2,0", NewsDetailActivity.this); + if(pd!=null) + pd.dismiss(); + } + } + }); + + } + private final ReentrantLock lock = new ReentrantLock(); + private void addGroupSendMsg(String msg_type, String msg_content, final String mFilePath1) { + needreport(mRecipients.split(",").length+"","患教图文"); +// if (pd==null){ +// pd = new CustomProgressDialog(NewsDetailActivity.this, "请稍候"); +// } +// pd.show(); + final Map map = new HashMap<>(); + map.put("msg_type",msg_type); + if (StringUtil.isEmpty(mFilePath1)){ + map.put("msg_content",msg_content); + } + map.put("patient_user_uuid",mRecipients); + map.put("user_uuid", SharePrefUtil.getString(NewsDetailActivity.this, "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(NewsDetailActivity.this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + if(!StringUtil.isEmpty(mFilePath1)){ + FileInputStream fileInputStream = new FileInputStream(mFilePath1); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(mFilePath1,opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream, + null, opts); + String s = Base64Util.BitmaptoBase64(bitmap); + map.put("msg_content",s); + } + + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + Log.d("gdxzinside","params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.addGroupSendMsg); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + + if ("200".equals(code)){ + if(pd!=null) + pd.dismiss(); + ToastUtil.showMessage("推荐成功"); + } + else + { + if(pd!=null) + pd.dismiss(); + ToastUtil.showMessage("提交失败,请重试"); + } + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void needreport(String number,String belogn) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("group_message"); + rbens.setNumber(number); + rbens.setBelong(belogn); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + + + private void setCookie() { + + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeSessionCookies(null); + cookieManager.flush(); + } else { + cookieManager.removeSessionCookie(); + CookieSyncManager.getInstance().sync(); + } + cookieManager.setAcceptCookie(true); + URL url1 = null; + try { + url1 = new URL(url); + + } catch (MalformedURLException e) { + e.printStackTrace(); + } + String host1 = "https://"+url1.getHost(); + cookieManager.setCookie(host1, "hcp_from=expert_app"+";path=/;domain=.igandan.com"); + cookieManager.setCookie(host1, "hcp_token="+SharePrefUtil.getString(NewsDetailActivity.this,"hcp_token","")+";path=/;domain=.igandan.com"); +// cookieManager.setCookie(Url.modernHepatology, "session_token="+SharePrefUtil.getString(NewsDetailActivity.this,"hcp_token","")); +// cookieManager.setCookie(Url.modernHepatology, "domain="+".igandan.com"); +// cookieManager.setCookie(Url.modernHepatology, "path=/"); +// +// Log.d("gdxzfile","qqqq "+SharePrefUtil.getString(CourseUrlDetailActivity.this,"hcp_token","")); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + + cookieManager.flush(); + } else { + + CookieSyncManager.getInstance().sync(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/NoteDressEditActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NoteDressEditActivity.java new file mode 100644 index 0000000..6ca3e7b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/NoteDressEditActivity.java @@ -0,0 +1,142 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 专家出诊备注地址编辑内容 + * @author 纪肖 + * + */ +public class NoteDressEditActivity extends BaseActivity implements OnClickListener{ + private View view; + private Intent intent; + private String NoteDress; + private EditText et_note_dress; + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.top_back_text: + finish(); + break; + case R.id.top_right_text: + intent = getIntent(); + if(TextUtils.isEmpty(et_note_dress.getText().toString().trim())){ + ToastUtil.showMessage("请输入出诊地址或医院"); + return; + } + Intent intent=new Intent(); + intent.putExtra("NoteDress",et_note_dress.getText().toString().trim()); + setResult(33, intent); + finish(); + break; + } + } + @Override + public void setTitle() { + top_back.setVisibility(View.GONE); + top_back_text.setVisibility(View.VISIBLE); + top_back_text.setOnClickListener(this); + top_back_text.setText("取消"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + top_title.setText("出诊地址"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.ex__note_dress_content); + et_note_dress=(EditText)view.findViewById(R.id.et_note_dress); + + intent = getIntent(); + + et_note_dress.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + String count = et_note_dress.getText().toString().trim(); + if(count.length() >=100){ + ToastUtil.showMessage("最多输入一百字"); + } + } + }); +// et_note_dress.addTextChangedListener(new TextWatcher() { +// @Override +// public void onTextChanged(CharSequence s, int start, int before, int count) { +// // TODO Auto-generated method stubs +// } +// @Override +// public void beforeTextChanged(CharSequence s, int start, int count, +// int after) { +// // TODO Auto-generated method stub +// } +// +// @Override +// public void afterTextChanged(Editable s) { +// // TODO Auto-generated method stub +// String count = et_note_dress.getText().toString().trim(); +// if(count.length() >=100){ +// ToastUtil.showMessage("最多输入一百字"); +// } +// } +// @Override +// public void afterTextChanged(Editable arg0) { +// // TODO Auto-generated method stub +// +// } +// }); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + //这里重写返回键 +// intent = getIntent(); +// Intent intent1=new Intent(); +// intent1.putExtra("NoteContent",et_note_content.getText().toString().trim()); +// setResult(2, intent1); + finish(); + } + return false; + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/OrderListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/OrderListActivity.java new file mode 100644 index 0000000..3a42ad7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/OrderListActivity.java @@ -0,0 +1,910 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat1; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY_PAYING_STATUS; +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat; +import static cn.shangyu.gdxzExpert.utils.StringUtil.getYen; +import static cn.shangyu.gdxzExpert.utils.Url.cancelExcellencourseOrder; +import static cn.shangyu.gdxzExpert.utils.Url.listExcellencourseOrder; +import static cn.shangyu.gdxzExpert.utils.Url.payExcellencourseOrder; +import static cn.shangyu.gdxzExpert.utils.Url.payExcellencourseOrderSucceed; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.CountDownTimer; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.style.RelativeSizeSpan; +import android.util.Log; +import android.util.SparseArray; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.pingplusplus.android.Pingpp; +import com.tencent.mm.opensdk.modelpay.PayReq; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MyOrderBean; +import cn.shangyu.gdxzExpert.bean.PayWechatBean; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ClipboardUtils; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class OrderListActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener, OnCallBackFromNet { + + List data=new ArrayList<>(); + PullToRefreshListView ptrLv; + public View ll_empty; + int page=1; + String order_status="paid"; + RadioButton payed,not_pay; + OrderAdapter1 myListAdapter; + RadioGroup r_pay; + ImageView im_fapiao; + RelativeLayout l_needpay; + String order_id, amount,trade_no; + private String CHANNEL_ZHIFUBAO = "alipay"; + private String CHANNEL_WEIXIN = "wx"; + private String payChannel = CHANNEL_WEIXIN; + Button pay_now; + CheckBox cb_pay_wx,cb_pay_zfb; + private String excellencourse_order_id; + private String special_type_name; + + @Override + public void setTitle() { + top_title.setText("订单记录"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view= UIUtils.inflate(R.layout.activity_order_list_big); + } + else + { + view= UIUtils.inflate(R.layout.activity_order_list); + } + r_pay=view.findViewById(R.id.r_pay); + payed=view.findViewById(R.id.payed); + not_pay=view.findViewById(R.id.not_pay); + im_fapiao=view.findViewById(R.id.im_fapiao); + l_needpay=view.findViewById(R.id.l_needpay); + pay_now=view.findViewById(R.id.pay_now); + cb_pay_zfb=view.findViewById(R.id.cb_pay_zfb); + cb_pay_wx=view.findViewById(R.id.cb_pay_wx); + pay_now.setOnClickListener(this); + l_needpay.setOnClickListener(this); + r_pay.setOnCheckedChangeListener(this); + im_fapiao.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(OrderListActivity.this,FaPiaoActivity.class); + startActivity(intent); + + + } + }); + ptrLv = (PullToRefreshListView)view. findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 +// ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getMyOrder(order_status,page+""); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getMyOrder(order_status,page+""); + + } + }); + order_status=getIntent().getStringExtra("order_status"); + if(!StringUtil.isEmpty(order_status)&&order_status.equals("created")) + { + + not_pay.setChecked(true); + } + else + { + payed.setChecked(true); + } +// getMyOrder(order_status,page+""); + initPay(); + return view; + } + private void initPay() + { + cb_pay_wx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if(isChecked) + { + cb_pay_zfb.setChecked(false); + payChannel = CHANNEL_WEIXIN; + } + else + { + + } + } + }); + cb_pay_zfb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if(isChecked) + { + cb_pay_wx.setChecked(false); + payChannel = CHANNEL_ZHIFUBAO; + } + else + { + + } + } + }); + } + private void getMyOrder(String order_status,String page) { + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("order_status",order_status); + param.put("page",page); + sendJsonPostParamtoNetSignMD5(listExcellencourseOrder, param, 101, this); + } + private void cancelMyOrder(String excellencourse_order_id) { + Map course1 = new HashMap(); + course1.put("pay_status", "cancel");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("excellencourse_order_id",excellencourse_order_id); + + sendJsonPostParamtoNetSignMD5(cancelExcellencourseOrder, param, 102, this); + } + private void payOrder(String order_id,String amount,String channel) + { + + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("order_id",order_id); +// param.put("amount",amount); +// param.put("channel",channel); + sendJsonPostParamtoNetSignMD5(payExcellencourseOrder,param,104,this); + } + private void successOrder(String excellencourse_order_id) + { + + Map param = new HashMap<>(); +// param.put("trade_no","116492435227680"); + param.put("trade_no",excellencourse_order_id); + sendJsonPostParamtoNetSignMD5(payExcellencourseOrderSucceed,param,103,this); + } + private void payResult() + { + Map course1 = new HashMap(); + course1.put("pay_status", "failed");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + Intent intent=new Intent(OrderListActivity.this,PayResultActivity.class); + intent.putExtra("IS_PAY_SUCCESS","no"); +// intent.putExtra("type",) + startActivity(intent); + this.finish(); + } + private void paySucesws() + { + Map course1 = new HashMap(); + course1.put("pay_status", "success");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + Intent intent=new Intent(OrderListActivity.this,PayResultActivity.class); + intent.putExtra("IS_PAY_SUCCESS","yes"); + if("学完返现".equals(special_type_name)||"福利课堂".equals(special_type_name)) + { + intent.putExtra("special_type_name",special_type_name); + } + startActivity(intent); + this.finish(); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.l_needpay: + l_needpay.setVisibility(View.GONE); + break; + case R.id.pay_now: + if(StringUtil.isEmpty(payChannel)) + { + ToastUtil.showToast("请选择支付方式"); + } + else + { + payOrder(order_id,amount,payChannel); + } + + break; + } + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) + { + case R.id.payed: + not_pay.setTextColor(Color.parseColor("#666666")); + payed.setTextColor(Color.parseColor("#8B2316")); + if(CommonUtil.BigModule()) + { + not_pay.setTextColor(Color.parseColor("#333333")); + } + page=1; + order_status="paid"; + getMyOrder(order_status,page+""); + break; + case R.id.not_pay: + page=1; + order_status="created"; + payed.setTextColor(Color.parseColor("#666666")); + not_pay.setTextColor(Color.parseColor("#8B2316")); + if(CommonUtil.BigModule()) + { + payed.setTextColor(Color.parseColor("#333333")); + } + getMyOrder(order_status,page+""); + + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + MyOrderBean orderBean; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+" "+resultJson); + switch (resultCode) + { + case 105: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + if("SUCCESS".equals(jsonObject.getJSONObject("data").getString("tradeState"))) + { + successOrder(trade_no); + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 101: + closeProgressDialog(); + orderBean = GsonTools.fromGsonToBean(resultJson, MyOrderBean.class); + if ("200".equals(orderBean.getCode())) { + if(page==1) + { + data.clear(); + + if (orderBean.getData() == null || orderBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(orderBean.getData().getList()); + } + } + else + { + data.addAll(orderBean.getData().getList()); + } + + + + if (myListAdapter == null) { + myListAdapter = new OrderAdapter1(OrderListActivity.this,data); + + ptrLv.getRefreshableView().setAdapter(myListAdapter); + } else { + myListAdapter.notifyDataSetChanged(); + } + onLoaded(); + if (page > 1) { + // 是否有更多 + if (orderBean.getData() == null || orderBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = orderBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(orderBean.getMessage() + ""); + } + break; + case 102: + closeProgressDialog(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + ToastUtil.showToast(jsonObject.getString("msg")); + order_status="created"; + page=1; + getMyOrder(order_status,page+""); + } + else + { + ToastUtil.showToast(jsonObject.getString("msg")); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("服务器异常"); + } + break; + case 103: + closeProgressDialog(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + if(jsonObject.optJSONObject("data")!=null) + { + special_type_name=jsonObject.optJSONObject("data").optString("special_type_name"); + } + + paySucesws(); + } + else + { + ToastUtil.showMessage(jsonObject.getString("msg")); + payResult(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 104: + closeProgressDialog(); + PayWechatBean payBean= GsonTools.fromGsonToBean(resultJson, + PayWechatBean.class); + if(payBean!=null&&"200".equals(payBean.getCode())) + { + trade_no=payBean.getData().getTrade_no(); + PayReq request = new PayReq(); + request.appId = payBean.getData().getAppid(); + request.partnerId = payBean.getData().getPartnerid(); + request.prepayId= payBean.getData().getPrepayid(); + request.packageValue = payBean.getData().getPackage_str(); + request.nonceStr= payBean.getData().getNoncestr(); + request.timeStamp= payBean.getData().getTimestamp(); + request.sign=payBean.getData().getSign(); + api.sendReq(request); + + } + else + { + ToastUtil.showToast(payBean.getMessage()); + } +// JSONObject jsonObject= null; +// try { +// jsonObject = new JSONObject(resultJson); +// if("200".equals(jsonObject.getString("code"))) +// { +// String result = jsonObject.getString("data"); +//// String result1 = StringEscapeUtils.unescapeJava(result); +// if (!StringUtil.isEmpty(result)) { +//// String sssss = result1.substring(1, result.length() - 1); +// Pingpp.createPayment(OrderListActivity.this, result); +// } else { +// ToastUtil.showMessage("服务器异常"); +// } +// } +// } catch (JSONException e) { +// e.printStackTrace(); +// ToastUtil.showMessage("服务器异常"); +// } + + break; + } + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) { + if (resultCode == Activity.RESULT_OK) { + String result = data.getExtras().getString("pay_result"); + if (result.equals("success")) { +// getPaySucceedResult(); + successOrder(excellencourse_order_id); + } + // 处理返回值 + // "success" - 支付成功 + // "fail" - 支付失败 + // "cancel" - 取消支付 + // "invalid" - 支付插件未安装(一般是微信客户端未安装的情况) + String errorMsg = data.getExtras().getString("error_msg"); // 错误信息 + String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息 + // showMsg(result, errorMsg, extraMsg); + if (result.equals("cancel")) { + Map course1 = new HashMap(); + course1.put("pay_status", "cancel");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + ToastUtil.showMessage("已取消支付"); + } + if (result.equals("fail")) { + Map course1 = new HashMap(); + course1.put("pay_status", "failed");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + ToastUtil.showMessage("支付失败,请重新支付"); + } + if (result.equals("invalid")) { + ToastUtil.showMessage("请安装微信客户端"); + } + } + } + } + + + + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + + public class OrderAdapter1 extends BaseAdapter { + List data; + private SparseArray timerArray; + private ViewHolder holder; + Context context; + public OrderAdapter1(Context context,List data) + { + this.data=data; + this.context=context; + timerArray = new SparseArray<>(); + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + holder=null; + if(view==null) + { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.order_item_big); + } + else + { + view = UIUtils.inflate(R.layout.order_item); + } + holder =new ViewHolder(); + + holder.tv_num = view.findViewById(R.id.tv_num); + holder.tv_copy=view.findViewById(R.id.tv_copy); + holder.tv_n=view.findViewById(R.id.tv_n); + holder.tv_time=view.findViewById(R.id.tv_time); + holder.tv_rpr=view.findViewById(R.id.tv_rpr); + holder.tv_jifen=view.findViewById(R.id.tv_jifen); + holder.tv_yue=view.findViewById(R.id.tv_yue); + holder.tv_shifu=view.findViewById(R.id.tv_shifu); + holder.tv_l=view.findViewById(R.id.tv_l); + holder.tv_p=view.findViewById(R.id.tv_p); + holder.tv_dtime=view.findViewById(R.id.tv_dtime); + holder.r_y=view.findViewById(R.id.r_y); + holder.r_j=view.findViewById(R.id.r_j); + holder.r_t=view.findViewById(R.id.r_t); + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + //将前一个缓存清除 + if (holder.cCountDownTimer != null) { + holder.cCountDownTimer.cancel(); + } + holder.tv_num.setText(data.get(position).getUuid()); + holder.tv_n.setText(data.get(position).getExcellencourse_title()); + long t=Long.valueOf(data.get(position).getCreate_date()+"000"); + Date date = new Date(t); + holder.tv_time.setText(simpleDateFormat1.format(date)); + holder.tv_rpr.setText(fenGetYuanFormat(data.get(position).getAccount())); + holder.r_y.setVisibility(View.GONE); + holder.r_j.setVisibility(View.GONE); + holder.r_t.setVisibility(View.GONE); + holder.tv_p.setVisibility(View.VISIBLE); + if(data.get(position).getChildOrder()!=null&&data.get(position).getChildOrder().size()>0) + { + if("refund".equals(data.get(position).getOrder_status())) + { + for (MyOrderBean.ChilderBean childerBean:data.get(position).getChildOrder()) + { + if("1".equals(childerBean.getOrder_pay_type())) + { + holder.r_y.setVisibility(View.VISIBLE); + holder.tv_yue.setText + ("-"+fenGetYuanFormat(childerBean.getAccount())+"(已退还)"); + + } + else if("2".equals(childerBean.getOrder_pay_type())) + { + holder.r_j.setVisibility(View.VISIBLE); + holder.tv_jifen.setText + ("-"+childerBean.getBonuspoints()+"积分"+"(已退还)"); + + } + } + } + else + { + for (MyOrderBean.ChilderBean childerBean:data.get(position).getChildOrder()) + { + if("1".equals(childerBean.getOrder_pay_type())) + { + holder.r_y.setVisibility(View.VISIBLE); + holder.tv_yue.setText + ("-"+fenGetYuanFormat(childerBean.getAccount())); + + } + else if("2".equals(childerBean.getOrder_pay_type())) + { + holder.r_j.setVisibility(View.VISIBLE); + holder.tv_jifen.setText + ("-"+childerBean.getBonuspoints()+"积分"); + + } + } + + } + + } + switch (data.get(position).getOrder_status()) + { + case "paid": + holder.tv_l.setText("查看课程"); + holder.tv_p.setVisibility(View.GONE); + holder.tv_l.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(OrderListActivity.this, CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position).getExcellencourse_id()); + startActivity(intent); + } + }); + break; + case "created": + holder.r_t.setVisibility(View.VISIBLE); + + holder.cCountDownTimer=new CCountDownTimer(Long.valueOf(data.get(position).getExpire_time())*1000-System.currentTimeMillis(),1000,holder.tv_dtime).start(); + timerArray.put(holder.cCountDownTimer.hashCode(),holder.cCountDownTimer); + holder.tv_l.setText("继续支付"); + holder.tv_p.setText("取消订单"); + holder.r_t.setVisibility(View.VISIBLE); + holder.tv_p.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + cancelMyOrder(data.get(position).getId()); + } + }); + holder.tv_l.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + l_needpay.setVisibility(View.VISIBLE); + order_id=data.get(position).getOrder_id(); + + amount=data.get(position).getPay_account(); + excellencourse_order_id=data.get(position).getUuid(); +// type=data.get(position).get + } + }); + break; + case "canceled": + holder.tv_l.setText("查看课程"); + holder.tv_p.setText("已取消"); + holder.tv_l.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(OrderListActivity.this, CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position).getExcellencourse_id()); + startActivity(intent); + } + }); + break; + case "overtime": + holder.tv_l.setText("查看课程"); + holder.tv_p.setText("支付超时"); + holder.tv_l.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(OrderListActivity.this, CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position).getExcellencourse_id()); + startActivity(intent); + } + }); + case "refund": + holder.tv_l.setText("查看课程"); + holder.tv_p.setText("支付失败"); + holder.tv_l.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(OrderListActivity.this, CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position).getExcellencourse_id()); + startActivity(intent); + } + }); + break; + + + } + + holder.tv_shifu.setText(changTVsize(fenGetYuanFormat(data.get(position).getPay_account()))); + holder.tv_copy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ClipboardUtils.copyFromEdit(context, + getString(R.string.app_pic), data.get(position).getUuid()); + ToastUtil.showMessage(cn.shangyu.gdxzExpert.R.string.app_copy_ok); + } + }); + + return view; + } + public void cancelAllTimers() { + if (timerArray == null) { + return; + } + int size = timerArray.size(); + for (int i = 0; i < size; i++) { + CountDownTimer cdt = timerArray.get(timerArray.keyAt(i)); + if (cdt != null) { + cdt.cancel(); + } + } + } + public class ViewHolder + { + + TextView tv_num; + TextView tv_copy; + TextView tv_n; + + TextView tv_time,tv_rpr; + TextView tv_jifen; + TextView tv_yue,tv_shifu,tv_l,tv_p,tv_dtime; + RelativeLayout r_y,r_j,r_t; + CountDownTimer cCountDownTimer; + } + + public class CCountDownTimer extends CountDownTimer + { + + /** + * @param millisInFuture The number of millis in the future from the call + * to {@link #start()} until the countdown is done and {@link #onFinish()} + * is called. + * @param countDownInterval The interval along the way to receive + * {@link #onTick(long)} callbacks. + */ + DecimalFormat decimalFormat = new DecimalFormat("00"); + + private TextView textView; + public CCountDownTimer(long millisInFuture, long countDownInterval,TextView textView) { + super(millisInFuture, countDownInterval); + this.textView=textView; + } + + @Override + public void onTick(long millisUntilFinished) { + textView.setText(formatTime(millisUntilFinished)); + } + + @Override + public void onFinish() { + textView.setText("00:00:00"); + } + /** + * 将毫秒转化为 分钟:秒 的格式 + * + * @param millisecond 毫秒 + * @return + */ + public String formatTime(long millisecond) { + int day = (int) (millisecond / (1000 * 60 * 60 * 24)); //以天数为单位取整 + int hour= (int) (millisecond/(60*60*1000)-day*24); //以小时为单位取整 + int min= (int) ((millisecond/(60*1000))-day*24*60-hour*60); //以分钟为单位取整 + int second= (int) (millisecond/1000-day*24*60*60-hour*60*60-min*60);//秒 + + return decimalFormat.format(hour) + ":" + decimalFormat.format(min)+ ":" + decimalFormat.format(second); + + +// int minute;//分钟 +// int second;//秒数 +// +// minute = (int) ((millisecond / 1000) / 60); +// second = (int) ((millisecond / 1000) % 60); +// if (minute < 10) { +// if (second < 10) { +// return "0" + minute + ":" + "0" + second; +// } else { +// return "0" + minute + ":" + second; +// } +// }else { +// if (second < 10) { +// return minute + ":" + "0" + second; +// } else { +// return minute + ":" + second; +// } +// } + } + +// /** +// * 取消倒计时 +// */ +// public void timerCancel() { +// timer.cancel(); +// } + +// /** +// * 开始倒计时 +// */ +// public void timerStart() { +// timer.start(); +// } + } + + + + + } + /** + * 小数点前后大小不一致 + * + * @param value + * @return + */ + public static SpannableString changTVsize(String value) { +// SpannableStringBuilder builder = new SpannableStringBuilder(amount); +// builder.setSpan(new AbsoluteSizeSpan(UIUtils.sp2px(12)), amount.indexOf("¥"), amount.indexOf("¥") + 1 +// , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// builder.setSpan(new AbsoluteSizeSpan(UIUtils.sp2px(12)), amount.indexOf("."), amount.length() +// , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// activityRef.get().mBinding.allPrice.setText(builder); + + SpannableString spannableString = new SpannableString(value); + if (value.contains(".")) { + spannableString.setSpan(new RelativeSizeSpan(0.7f), value.indexOf(getYen()),value.indexOf(getYen())+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableString.setSpan(new RelativeSizeSpan(0.7f), value.indexOf("."), value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + return spannableString; + } + + @Override + protected void onResume() { + super.onResume(); + if(Constant.WePayed) + { + successOrder(trade_no); + } + else + { + getOrderStatus(); + } + } + private void getOrderStatus() + { + if(trade_no==null) + { + return; + } + Map param = new HashMap<>(); + param.put("trade_no",trade_no); +// param.put("trade_no","116492435227680"); + + Log.d("WXEntryActivity",trade_no+" order_id "); + sendJsonPostParamtoNetSignMD5(Url.getOrderStatus,param,105,this); + + } + @Override + protected void onDestroy() { + Constant.WePayed=false; + if(myListAdapter!=null) + { + myListAdapter.cancelAllTimers(); + } + + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/OutofPatientNoticeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/OutofPatientNoticeActivity.java new file mode 100644 index 0000000..dbd5b3b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/OutofPatientNoticeActivity.java @@ -0,0 +1,759 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; +import com.umeng.socialize.bean.SHARE_MEDIA; + +import org.json.JSONObject; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ListWorkPlaceBean; +import cn.shangyu.gdxzExpert.bean.PatientNoticeBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.ecdemo.ECAsyncTask; +import cn.shangyu.gdxzExpert.ecdemo.RichTextBean; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.BitmapUtil; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.fragment.OutpatientArrangementFragment; +import cn.shangyu.gdxzExpert.fragment.StopNoticeFragment; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/1/8. + */ + +public class OutofPatientNoticeActivity extends BaseActivity implements OnCallBackFromNet{ + + private LinearLayout ll_empty; + private CustomProgressDialog pd; + private ArrayList fragment_list; + private FragmentPagerAdapter mAdapter; + private ViewPager frame_container; + private StopNoticeFragment dis; + private OutpatientArrangementFragment myDis; + private TextView btn_add; + private RadioButton rbt_1,rbt_2; + private static final int listWorkPlace = 1; + private ListWorkPlaceBean fromJson; + private boolean flag; + public static int stopnum = 0; + private static final int MAILANNOTICEGET = 3; + private String note; + private String uuid; + private Button bt_send_feed; + public static boolean flagisStopNotice = false; + public static boolean flagisListNotice = false; + public static int StopNoticeNum = 0; + public static int ListNoticeNum = 0; + private ECAlertDialog dilaog2; + Boolean ishare=false; + + @Override + public void setTitle() { + top_title.setText("出/停诊公告"); + top_right_bookCollect.setImageResource(R.drawable.zhiyedidian); + top_right_rl_bookCollect.setVisibility(View.VISIBLE); + top_right_search.setImageResource(R.drawable.share_icon); + top_right_search.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_bookCollect.setImageResource(R.drawable.zhiyedidian_big); + + } + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (flagisStopNotice||flagisListNotice){ + dilaog2 = ECAlertDialog.buildAlert(OutofPatientNoticeActivity.this, + "您的出/停诊信息有改动,是否通知您的患者?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + flagisStopNotice = false; + flagisListNotice = false; + dilaog2.dismiss(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + flagisStopNotice = false; + flagisListNotice = false; + dilaog2.dismiss(); + list = PatientSqlManager.getPatientInfoList(Constant.typePatient); + if(list==null) + { + ToastUtil.showToast("暂未读取到随访患者"); + finish(); + return; + } + if (list.size()>200){ + startActivity(new Intent(OutofPatientNoticeActivity.this,SendGroupMsgListActivity.class)); + finish(); + }else { + new ParseHtmlTask(UIUtils.getContext()).execute(); + } + + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + }else { + finish(); + } + + } + }); + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == event.KEYCODE_BACK){ + if (flagisStopNotice||flagisListNotice){ + dilaog2 = ECAlertDialog.buildAlert(OutofPatientNoticeActivity.this, + "您的出/停诊信息有改动,是否通知您的患者?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + flagisStopNotice = false; + flagisListNotice = false; + dilaog2.dismiss(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + flagisStopNotice = false; + flagisListNotice = false; + dilaog2.dismiss(); + list = PatientSqlManager.getPatientInfoList(Constant.typePatient); + if (list.size()>0&&list.size()>200){ + startActivity(new Intent(OutofPatientNoticeActivity.this,SendGroupMsgListActivity.class)); + }else if (list.size()>0){ + new ParseHtmlTask(UIUtils.getContext()).execute(); + } + finish(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + }else { + finish(); + } + + } + return super.onKeyDown(keyCode, event); + + } + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_outofpatientnotice_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_outofpatientnotice); + } + frame_container = view.findViewById(R.id.frame_container); + bt_send_feed = view.findViewById(R.id.bt_send_feed); + btn_add = view.findViewById(R.id.btn_add); + rbt_1 = view.findViewById(R.id.rbt_1); + rbt_2 = view.findViewById(R.id.rbt_2); + initOnClick(); + initFragment(); + return view; + } + private void getmailanNoticeGet() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.mailanNoticeGet,map,MAILANNOTICEGET,this); + } + @Override + protected void onResume() { + super.onResume(); + needreportPage("出/停诊公告"); + getmailanNoticeGet(); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.listWorkPlace, param, listWorkPlace, this); + } + + private void initOnClick() { + btn_add.setOnClickListener(this); + rbt_1.setOnClickListener(this); + rbt_2.setOnClickListener(this); + bt_send_feed.setOnClickListener(this); + top_right_bookCollect.setOnClickListener(this); + } + + + private void initFragment() { + fragment_list = new ArrayList<>(); + dis = new StopNoticeFragment(); + myDis = new OutpatientArrangementFragment(); + fragment_list.add(dis); + fragment_list.add(myDis); + mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { + + @Override + public int getCount() { + return fragment_list.size(); + } + + @Override + public Fragment getItem(int arg0) { + return fragment_list.get(arg0); + } + }; + frame_container.setAdapter(mAdapter); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.btn_add) { + if ("发布新的停诊".equals(btn_add.getText().toString())){ + if (stopnum==2){ + ToastUtil.showMessage("有效停诊公告最多只能两个"); + }else { + Intent intent = new Intent(this, ReleaseStopActivity.class); + startActivity(intent); + } + }else if (flag){ + Intent intent = new Intent(this, AddOutpatientArrangement1NewActivity.class); + startActivity(intent); + }else { + ToastUtil.showMessage("请先点击右上角设置执业地点"); + } + } else if (id == R.id.rbt_1) { + frame_container.setCurrentItem(0); + btn_add.setText("发布新的停诊"); + } else if (id == R.id.rbt_2) { + frame_container.setCurrentItem(1); + btn_add.setText("增加门诊安排"); + } else if (id == R.id.top_right_bookCollect) { + Intent intent = new Intent(this,PractiseAddressManagementActivity.class); + startActivity(intent); + } else if (id == R.id.top_right_search) { +// ToastUtil.showMessage("分享"); +// share(); + showSharePopupWindownew(v); + } else if (id == R.id.bt_send_feed) { + Intent intent1 = new Intent(this,OutpatientInfoActivity.class); + intent1.putExtra("note",note); + intent1.putExtra("uuid",uuid); + startActivity(intent1); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case listWorkPlace: + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, ListWorkPlaceBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())){ + int listSize = fromJson.getList().size(); + if (listSize>0){ + flag = true; + }else { + flag = false; + } + }else { + ToastUtil.showMessage("执业列表获取失败"); + } + + break; + case MAILANNOTICEGET: + LogUtil.i("MAILANNOTICEGET = "+resultJson); + Gson gson2 = new Gson(); + PatientNoticeBean fromJsonBean = gson2.fromJson(resultJson, PatientNoticeBean.class); + PatientNoticeBean.DataBean data = fromJsonBean.getData(); + if (data==null){ + note = ""; + uuid = ""; + }else { + note = data.getNotice(); + uuid = data.getUuid(); + } + break; + } + } + + private void showSharePopupWindownew(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(this) + .inflate(R.layout.popu_share_video, null); + LinearLayout ll_huan = contentView.findViewById(R.id.ll_huan); + LinearLayout ll_weixin = contentView.findViewById(R.id.ll_weixin); + LinearLayout ll_weixincircle = contentView.findViewById(R.id.ll_weixincircle); + LinearLayout ll_sina = contentView.findViewById(R.id.ll_sina); + Button btn_quxiao = contentView.findViewById(R.id.btn_quxiao); + + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + btn_quxiao.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + } + }); + ll_huan.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + delVisit(); + } + }); + ll_weixin.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.WEIXIN); + popupWindow.dismiss(); + } + }); + ll_weixincircle.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.WEIXIN_CIRCLE); + popupWindow.dismiss(); + } + }); + ll_sina.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.SINA); + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + + + return false; + } + + }); + + popupWindow.showAtLocation(view, 0, 0, 0); + + } + + /** + * 调用分享功能 + */ + private void share(SHARE_MEDIA media) { + String shareTitle = SharePrefUtil.getString(ct, "realName", "") + "医生门诊详情"; + String shareUrl = Url.urlOutpatientnew + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") ; +// String shareUrl = Url.urlOutpatientnew+ SharePrefUtil.getString(ct, "uuid", "") + "&expert_name=" + SharePrefUtil.getString(ct, "realName", ""); + String msgSinaContent = "肝胆相照®肝胆病在线公共服务平台"; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + + String imageUrl = ""; + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(ct, shareTitle, msgSinaContent, msgSinaContent, + imageUrl, shareUrl, bitmap,media); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + public void delVisit() { + final ECListDialog dialog = new ECListDialog(OutofPatientNoticeActivity.this, new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(OutofPatientNoticeActivity.this, GroupChatSelectPatientActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + } else { + + Intent intent = new Intent(OutofPatientNoticeActivity.this, GroupSelectParentActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(OutofPatientNoticeActivity.this.getResources().getColor(R.color.top_title)); + dialog.show(); + } + + RichTextBean richTextBean; + public String imagUrl; + public String url; + public String title; + public String content; + private ArrayList list; + private String mRecipients = ""; + public class ParseHtmlTask extends ECAsyncTask { + + public ParseHtmlTask(Context context) { + super(context); + } + + @Override + protected Object doInBackground(Object[] params) { + title = SharePrefUtil.getString(UIUtils.getContext(), "realName", "") + "医生门诊详情"; +// url = "http://wx.igandan.com/expert/outpatient_details?expert_uuid=" + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); +// url = Url.urlOutpatient+ SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + url = Url.urlOutpatientnew + SharePrefUtil.getString(UIUtils.getContext(), "uuid", ""); + content = "肝胆相照®肝胆病在线公共服务平台"; + imagUrl = "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png"; + // 从患者数据库里取出患者列表 + if("".equals(mRecipients)) + { + for (int i = 0;i list = new ArrayList<>(); +// String[] split = mRecipients.split(","); +// for (int j = 0; j < split.length; j++) { +// if (!StringUtil.isEmpty(split[j])&&!list.contains(split[j])) { +// list.add(split[j]); +// IMChattingHelper.getInstance().handleSendRichTextMessage(bean, Constant.Patient_AppKey+split[j], "2,1,2,0",OutofPatientNoticeActivity.this); +// } +// } + //添加群发记录富文本 + addGroupSendMsg("5","",""); + + }else { + IMChattingHelper.getInstance().handleSendRichTextMessage(bean, mRecipients, "2,1,2,0", OutofPatientNoticeActivity.this); + } + } + }); + + } + private final ReentrantLock lock = new ReentrantLock(); + private void addGroupSendMsg(String msg_type, String msg_content, final String mFilePath1) { + needreport(mRecipients.split(",").length+"","出/停诊公告"); + if (pd==null){ + pd = new CustomProgressDialog(OutofPatientNoticeActivity.this, "请稍候"); + } + pd.show(); + final Map map = new HashMap<>(); + map.put("msg_type",msg_type); + if (StringUtil.isEmpty(mFilePath1)){ + map.put("msg_content",msg_content); + } + map.put("patient_user_uuid",mRecipients); + map.put("user_uuid", SharePrefUtil.getString(OutofPatientNoticeActivity.this, "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(OutofPatientNoticeActivity.this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + if(!StringUtil.isEmpty(mFilePath1)){ + FileInputStream fileInputStream = new FileInputStream(mFilePath1); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(mFilePath1,opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream, + null, opts); + String s = Base64Util.BitmaptoBase64(bitmap); + map.put("msg_content",s); + } + + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.addGroupSendMsg); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + pd.dismiss(); + if(ishare) + { + } + else + { + mRecipients=""; + finish(); + } + + if ("200".equals(code)){ + if(ishare) + { + ishare=false; + ToastUtil.showMessage("推荐成功"); + } + } + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 69 + && resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + return; + } + mRecipients = data.getStringExtra("uuid"); + if (pd==null){ + pd = new CustomProgressDialog(OutofPatientNoticeActivity.this, "请稍候"); + } + pd.show(); + new ParseHtmlTask(UIUtils.getContext()).execute(); + return; + } + } + private void needreport(String number,String belogn) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("group_message"); + rbens.setNumber(number); + rbens.setBelong(belogn); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/OutpatientInfoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/OutpatientInfoActivity.java new file mode 100644 index 0000000..eba4361 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/OutpatientInfoActivity.java @@ -0,0 +1,184 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Context; +import android.os.Build; +import android.view.Gravity; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/1/14. + */ + +public class OutpatientInfoActivity extends BaseActivity implements OnCallBackFromNet{ + private EditText et_feedbook; + private Button mBt_get_Voice; + private Button bt_submit; + private String note; + private static final int addOutPatient = 1; + private static final int addOutPatient1 = 101; + private String uuid; + private KeDaXunFeiUtil VoiceUtil; + + @Override + public void setTitle() { + top_title.setText("门诊信息"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_zhibo_feedbook); + et_feedbook = (EditText) view.findViewById(R.id.et_feedbook); + et_feedbook.setHint("您可以在这里填写想告诉患者的停诊补充信息,最多填写300个字哦~"); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + // 字数限制的 + // et_feedbook.addTextChangedListener(tw); + bt_submit = (Button) view.findViewById(R.id.bt_submit); + bt_submit.setOnClickListener(this); + + note = getIntent().getExtras().getString("note"); + if (!StringUtil.isEmpty(note)){ + et_feedbook.setText(note); + uuid = getIntent().getExtras().getString("uuid"); + } + + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.bt_get_voice: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(OutpatientInfoActivity.this, + et_feedbook); + } else { + EasyWindow.with(OutpatientInfoActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(OutpatientInfoActivity.this, + et_feedbook); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(OutpatientInfoActivity.this, + et_feedbook); + } + + + break; + case R.id.bt_submit: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + String trim = et_feedbook.getText().toString().trim(); + if (StringUtil.isEmpty(trim)){ + ToastUtil.showMessage("请输入信息"); + return; + } + if (trim.equals(note)){ + ToastUtil.showMessage("未修改信息内容"); + return; + } + Map param1 = new HashMap<>(); + param1.put("workplace_uuid",""); + param1.put("week",""); + param1.put("day",""); + param1.put("type","2"); + param1.put("note",trim); + param1.put("uuid",""); + sendJsonPostParamtoNetSignMD5(Url.addOutPatientA, param1, addOutPatient1, OutpatientInfoActivity.this); + Map param = new HashMap<>(); + param.put("notice",trim); + if (!StringUtil.isEmpty(note)){ + param.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.mailanNoticeUpate, param, addOutPatient, OutpatientInfoActivity.this); + }else { + sendJsonPostParamtoNetSignMD5(Url.mailanNoticeAdd, param, addOutPatient, OutpatientInfoActivity.this); + } + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case addOutPatient1: + break; + case addOutPatient: + Gson gson1 = new Gson(); + BaseBean fromJson1 = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson1!=null&&"200".equals(fromJson1.code)){ + finish(); + } + ToastUtil.showMessage(fromJson1.message); + + break; + } + } + + @Override + protected void onDestroy() { + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + super.onDestroy(); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PastHistoryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PastHistoryActivity.java new file mode 100644 index 0000000..5549c06 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PastHistoryActivity.java @@ -0,0 +1,56 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; + +import androidx.fragment.app.FragmentTransaction; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.YiganFragment; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class PastHistoryActivity extends BaseActivity { + + + @Override + public void setTitle() { + + } + View view; + private String mParam1; + private String mParam2; + private String mParam3=""; + public YiganFragment yiganFragment; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_past_history1); + String title=getIntent().getStringExtra("title"); + top_title.setText(title); + FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); + if("乙肝既往治疗史".equals(title)) + { + mParam1="是否进行过抗病毒治疗"; + mParam2=getIntent().getStringExtra("yongyaoId"); + } + else if("用药方案".equals(title)) + { + mParam1="入组后是否进行抗病毒治疗"; + mParam2=getIntent().getStringExtra("yongyaoId"); + mParam3=getIntent().getStringExtra("type"); + } + yiganFragment=YiganFragment.newInstance(mParam1,mParam2,mParam3); + transaction.replace(R.id.frame_container,yiganFragment ).commitAllowingStateLoss(); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientActivity.java new file mode 100644 index 0000000..b6f07d8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientActivity.java @@ -0,0 +1,918 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Constant.consult; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.Manifest; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.PatientDetailBean; +import cn.shangyu.gdxzExpert.bean.PatientDetailBean.PatientDetailImg; +import cn.shangyu.gdxzExpert.bean.patientExBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * PatientActivity.java + * + * @author 纪肖 + * @author ssy修改 + * @date2015.09.24 患者详情界面,患者基本信息的展示,实现了点击查看病历详情 以及备注名字修改备注内容修改 + */ +public class PatientActivity extends BaseActivity implements + OnItemClickListener { + + // private TextView tvn; + private TextView tvna; + private TextView tvnb; + private ImageView tvp; + private ListView lv; + private String mobile; + private String nickname; + private String type; + private String consultUuid; + private String patientUuid; + public static String PatientDetailUrl = Url.getpatientDetail; + private List caselist = new ArrayList(); + private TextView tvege; + private TextView tvjibing; + private TextView tvnation; + private ImageView tvsex; + private int state = 0; + private boolean isHistory; + private LinearLayout ly_btnmesscall, ly_btnmesscall2; + private ECAlertDialog buildAlert; + private Button bt_calling, mBt_visit, mBt_records; + private String paintphonenumber; + private TextView tv_dress; + private LinearLayout ly_note; + private LinearLayout ly_setting_othername; + private TextView tv_my_note; + private String NoteContent; + private String NickName; + private String addNickname = Url.gettoAddNickname; + private String expertUuid; + private TextView tv_clinical; + private String note; + private String name; + private String patientUuid1; + private Button bt_send_message; + private boolean isFriend; + private ImageView iv_shezhibieming; + private ImageView iv_wodebeizhu; + + @Override + public void setTitle() { + top_title.setText("患者详情"); + top_back_layout.setOnClickListener(this); + top_right.setImageResource(R.drawable.edit_patitent); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_patient, null); + tvp = view.findViewById(R.id.photo);// 头像 + tvsex = (ImageView) view.findViewById(R.id.im_sex);// 头像 + iv_shezhibieming = (ImageView) view.findViewById(R.id.iv_shezhibieming);// 头像 + iv_wodebeizhu = (ImageView) view.findViewById(R.id.iv_wodebeizhu);// 头像 + tvege = (TextView) view.findViewById(R.id.tv_ege);// 年龄 + tvna = (TextView) view.findViewById(R.id.real_name);// 姓名 + tvnation = (TextView) view.findViewById(R.id.tv_nation);// 民族 + tvjibing = (TextView) view.findViewById(R.id.jibing_01);// 疾病 + tv_dress = (TextView) view.findViewById(R.id.tv_dress);// 患者地址 + tvnb = (TextView) view.findViewById(R.id.paintmsg);// 临床诊断 + tv_my_note = (TextView) view.findViewById(R.id.tv_my_note);// 备注内容 + tv_clinical = (TextView) view.findViewById(R.id.tv_clinical);// 临床诊断 + lv = (ListView) view.findViewById(R.id.lv_paient_info); + lv.setFocusable(false); + ly_btnmesscall = (LinearLayout) view.findViewById(R.id.ly_btnmesscall); + ly_btnmesscall2 = (LinearLayout) view + .findViewById(R.id.ly_btnmesscall2); + ly_note = (LinearLayout) view.findViewById(R.id.ly_bz);// 备注 + ly_setting_othername = (LinearLayout) view + .findViewById(R.id.ly_setting_othername);// 设置别名 + ly_setting_othername.setOnClickListener(this); + + // 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 + // ,应该在setAdapter后面设置 + // setListViewHeightBasedOnChildren(lv); + bt_send_message = (Button) view.findViewById(R.id.bt_send_message);// 发消息 + bt_calling = (Button) view.findViewById(R.id.bt_calling);// 打电话 + mBt_visit = (Button) view.findViewById(R.id.bt_patient_visit);// 添加随访计划 + mBt_records = (Button) view.findViewById(R.id.bt_case_records);// 打电话 + initListener(); + initIntent(); + AddNickname(addNickname); + getPatientList(PatientDetailUrl); + initData(); + return view; + } + + private void initIntent() { + Intent intent = getIntent(); + name = intent.getStringExtra("realName"); + // nickname = intent.getStringExtra("nickname"); + // note = intent.getStringExtra("note"); + String photo = intent.getStringExtra("photo"); + // mobile = intent.getStringExtra("mobile"); + patientUuid = intent.getStringExtra("patientUuid"); + patientUuid1 = intent.getStringExtra("patientUuid") + "1"; + consultUuid = intent.getStringExtra("consultUuid");// 公益咨询uuid + type = intent.getStringExtra("type");// 聊天的类型 + state = intent.getIntExtra("state", 0);// 聊天的类型 + isHistory = intent.getBooleanExtra("isHistory", false);// 是否是历史咨询 + isFriend = intent.getBooleanExtra("isFriend", true);// 是否是公益咨询 + int sex = SharePrefUtil.getInt(ct, "sex", 0); + // 如果是患者类型,则,把按钮改为发送消息,是公益咨询就是我要回答,其他之外就是隐藏 + if (Constant.typeConsult.equals(type)) { + bt_send_message.setText("我要回答"); + bt_send_message.setVisibility(View.VISIBLE); + bt_calling.setVisibility(View.VISIBLE); + ly_btnmesscall.setVisibility(View.VISIBLE); + ly_btnmesscall2.setVisibility(View.VISIBLE); + if (isHistory) { + bt_send_message.setVisibility(View.GONE); + bt_calling.setVisibility(View.GONE); + ly_btnmesscall.setVisibility(View.GONE); + + } + } else if (Constant.typePatient.equals(type)) { + bt_send_message.setText("发送消息"); + bt_send_message.setVisibility(View.VISIBLE); + bt_calling.setVisibility(View.VISIBLE); + ly_btnmesscall.setVisibility(View.VISIBLE); + ly_btnmesscall2.setVisibility(View.VISIBLE); + } else { + bt_send_message.setVisibility(View.GONE); + bt_calling.setVisibility(View.GONE); + ly_btnmesscall.setVisibility(View.GONE); + ly_btnmesscall2.setVisibility(View.GONE); + + } + + if (!isFriend){//不是好友 + top_right.setVisibility(View.GONE); + iv_shezhibieming.setVisibility(View.GONE); + iv_wodebeizhu.setVisibility(View.GONE); + ly_setting_othername.setFocusable(false); + ly_note.setFocusable(false); + ly_setting_othername.setEnabled(false); + ly_note.setEnabled(false); + + } + if (!TextUtils.isEmpty(nickname) && !"null".equals(nickname)) { + tvna.setText("设置别名"); + top_title.setText(nickname); + } + Drawable rightDrawable = getResources().getDrawable(R.drawable.new_man); + ; + if (1 == sex) {// 0男,1女 + rightDrawable = getResources().getDrawable(R.drawable.new_woman); + } + tvsex.setImageDrawable(rightDrawable); + + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + tvp, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + + } + + private void initListener() { + bt_calling.setOnClickListener(this); + mBt_visit.setOnClickListener(this); + mBt_records.setOnClickListener(this); + ly_note.setOnClickListener(this); + lv.setOnItemClickListener(this); + tvnb.setOnClickListener(this); + bt_send_message.setOnClickListener(this); + } + + private void initData() { + // TODO Auto-generated method stub + String patientInfo = SharePrefUtil.getString(ct, patientUuid, ""); + String patientInfo1 = SharePrefUtil.getString(ct, patientUuid1, ""); + if (TextUtils.isEmpty(patientInfo) || TextUtils.isEmpty(patientInfo1)) { + showProgressDialog("正在加载"); + } else { + processData(patientInfo); + getproseData(patientInfo1); + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + /** + * 执行返回结果 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + // if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + // mPopupWindowDialog.dismiss(); + // } + if (data == null) { + return; + } + // 别名 + if (requestCode == 1) { + if (data.getStringExtra("NickName").equals("")) { + tvna.setText("NickName"); + } else { + tvna.setText(data.getStringExtra("NickName")); + } + } + // 备注内容 + if (requestCode == 2) { + if (data.getStringExtra("NoteContent").equals("")) { + tv_my_note.setVisibility(View.GONE); + // tv_my_note.setText(NoteContent); + } else { + tv_my_note.setVisibility(View.VISIBLE); + tv_my_note.setText(data.getStringExtra("NoteContent")); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * 请求服务器。获取备注数据 gettoAddNickname + * + * @param loadUrl + * void + */ + private void AddNickname(final String loadUrl) { + // TODO Auto-generated method stub + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid", patientUuid);// 患者uuid + params.addBodyParameter("expertUuid", expertUuid);// 专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid1, info.result); + LogUtil.i(info.result); + getproseData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // ToastUtil.showMsgCustomToast("加载失败"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void getproseData(String result) { + // TODO Auto-generated method stub + closeProgressDialog(); + patientExBean bean = GsonTools.fromGsonToBean(result, + patientExBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + if (bean.code.equals("1")) { + if (bean.patientEx != null) { + note = bean.patientEx.note;// 备注内容 + nickname = bean.patientEx.nickname;// 别名 + if (note != null) { + tv_my_note.setVisibility(View.VISIBLE); + tv_my_note.setText(note); + } else { + tv_my_note.setVisibility(View.GONE); + } + if (nickname != null && !nickname.equals("")) { + tvna.setText(nickname); + top_title.setText(nickname); + } else { + tvna.setText("设置别名"); + } + } + } + } + + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param loadUrl + * void + */ + private void getPatientList(final String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid", patientUuid);// 患者uuid + LogUtil.i("patientUuid==" + patientUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid, info.result); + LogUtil.i(info.result); + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // ToastUtil.showMsgCustomToast("加载失败"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + LogUtil.i("患者详情 = "+result); + closeProgressDialog(); + PatientDetailBean bean = GsonTools.fromGsonToBean(result, + PatientDetailBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + // if (!"".equals(bean.medicalHistoryContent)) { + // content=bean.medicalHistoryContent; + // } + if (bean.data != null) { + String dia = bean.data.diagnosis; + if (!TextUtils.isEmpty(dia)) { + if (dia.contains("肝炎(甲")) { + tv_clinical.setText("临床诊断:" + "肝炎"); + } else { + tv_clinical.setText("临床诊断:" + dia); + } + + } else { + tv_clinical.setText("临床诊断:" + "暂无"); + } + } + String medicalHistoryContent = bean.medicalHistoryContent;// 既往史 + if (!StringUtil.isEmpty(medicalHistoryContent)) { + if (medicalHistoryContent.contains("甲、乙、丙、丁")) { + String ddd = medicalHistoryContent.replace("(甲、乙、丙、丁、戊肝)", ""); + tvnb.setText(ddd); + } else { + tvnb.setText(medicalHistoryContent); + } + + } else { + tvnb.setText("暂无"); + } + int age = bean.age;// 出生日期 + if (age > 0) { + tvege.setText(getResources().getString(R.string.patient_ege, + age + "")); + } else if (age == 0) { + tvege.setText(getResources().getString(R.string.patient_ege, + "1" + "")); + } else { + tvege.setText(getResources().getString(R.string.patient_ege, "未知")); + } + + LogUtil.i("bean.casee==" + bean.patientCase); + // 先清除 + caselist.clear(); + if (bean.patientCase != null && bean.patientCase.size() != 0) { + // 把数据加进去 + caselist.addAll(bean.patientCase); + PaAdapter adapter = new PaAdapter(caselist); + lv.setAdapter(adapter); + + setListViewHeightBasedOnChildren(lv); + /* + * String diseaseName = ""; // String des = ""; for (int i = 0; i < + * caselist.size(); i++) { if + * (!"null".equals(caselist.get(i).diseaseName)) { diseaseName += + * caselist.get(i).diseaseName + "、"; } // if + * (!"null".equals(caselist.get(i).des)) { // des += + * caselist.get(i).des + "。"; // } } //疾病 + * tvjibing.setText(getResources().getString(R.string.patient_case, + * diseaseName.substring(0, diseaseName.length()-1))); + */ + tvjibing.setVisibility(View.GONE); + } + + // 数据为空 + if (bean.data == null) { + return; + } else { + // mobile = bean.data.mobile; + // if(!TextUtils.isEmpty(mobile)){ + // tvn.setText("联系方式:"+mobile); + // } + name = bean.data.realName; + if (!TextUtils.isEmpty(name)) { + // tvna.setText(name); + top_title.setText(name); + } + if (!"设置别名".equals(tvna.getText().toString())){ + top_title.setText(tvna.getText().toString()); + } + // 头像 + String sex = bean.data.sex; + Drawable rightDrawable = getResources().getDrawable( + R.drawable.new_man); + ; + if ("1" == sex) {// 0男,1女 + rightDrawable = getResources() + .getDrawable(R.drawable.new_woman); + } + tvsex.setImageDrawable(rightDrawable); + + // 头像 + String photo = bean.data.photo; + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + tvp, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + + String nationName = bean.data.nationName;// 民族 + if (!TextUtils.isEmpty(nationName) && !"null".equals(nationName)) { + tvnation.setText(getResources().getString( + R.string.patient_nation, nationName)); + } else { + tvnation.setText("民族:" + "未知"); + } + String provName = bean.data.provName;// 省 + String cityName = bean.data.cityName;// 市 + String countyName = bean.data.countyName;// 区 + String detailed_address = bean.data.detailed_address;// 详细地址 + + String pc = "";// 省市区 + if (TextUtils.isEmpty(provName) || TextUtils.isEmpty(cityName) + || "null".equalsIgnoreCase(provName) + || "null".equalsIgnoreCase(cityName)) {// 只要省市其中一个为空,则该地址无效。必须保证省市不为空 + if (TextUtils.isEmpty(detailed_address) + || "null".equalsIgnoreCase(detailed_address)) { + tv_dress.setText("住址:" + "未知"); + } else { + tv_dress.setText("住址:" + detailed_address); + } + + } else {// 这就说明省市已经不为空了 + if (!TextUtils.isEmpty(countyName) + && !"null".equalsIgnoreCase(countyName)) {// 说明区不为空 + if (cityName.equals(countyName)) {// 判断市区是否一样 + pc = provName + cityName; + } else { + pc = provName + cityName + countyName; + } + } else {// 区为空,则为没有区 + pc = provName + cityName; + } + if (TextUtils.isEmpty(detailed_address) + || "null".equalsIgnoreCase(detailed_address)) { + tv_dress.setText("住址:" + pc); + } else { + tv_dress.setText("住址:" + pc + detailed_address); + } + } + + // if (TextUtils.isEmpty(countyName) || + // "null".equalsIgnoreCase(detailed_address)) {//详细地址为空 + // tv_dress.setText("住址: "+ pc); + // }else{ + // tv_dress.setText("住址: "+ pc + detailed_address); + // } + + // if + // (!TextUtils.isEmpty(provName)||!TextUtils.isEmpty(cityName)||!TextUtils.isEmpty(countyName) + // ||!TextUtils.isEmpty(detailed_address) + // && + // !"null".equals(provName)||!"null".equals(cityName)||!"null".equals(countyName) + // ||!"null".equals(detailed_address)) { + // + // }else{ + // } + paintphonenumber = bean.data.mobile;// 患者手机号码 + if (!TextUtils.isEmpty(paintphonenumber) + && !"null".equals(paintphonenumber)) { + bt_calling.setText(paintphonenumber); + } + + // String birthDate = bean.data.birthDate;//出生日期 + // if (!TextUtils.isEmpty(age) && !"null".equals(age)) { + // int ege = DateUtil.getAgeByBirthday(birthDate); + // } + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.paintmsg: + // ******************** 既往史详情 ********************************* + // if (content != null) { + // Intent i = new + // Intent(PatientActivity.this,CaseHistoryDetailActivity.class); + // Bundle bundle = new Bundle(); + // bundle.putParcelable("content", content); + // i.putExtras(bundle); + // startActivity(i); + // }else{ + // ToastUtil.showToast("该患者无既往史"); + // } + break; + case R.id.tv_invite_message: + Intent intent = new Intent(PatientActivity.this, + CasehistoryActivity.class); + startActivity(intent); + break; + case R.id.bt_patient_visit: + Intent intentVisit = new Intent(PatientActivity.this, + VisitPlanActivity.class); + intentVisit.putExtra("patientUuid", patientUuid); + intentVisit.putExtra("patientName", name); + startActivity(intentVisit); + + break; + case R.id.bt_case_records: + Intent intentRecords = new Intent(PatientActivity.this, + CaseRecordActivity.class); + intentRecords.putExtra("patientUuid", patientUuid); + startActivity(intentRecords); + + break; + case R.id.bt_send_message: + // 如果是患者类型,则,把按钮改为发送消息,是公益咨询就是我要回答,其他之外就是隐藏 + if (Constant.typeConsult.equals(type)) { + if (0 == state) { + // 获取抢答 + showProgressDialog("抢答请求中..."); + getList(resConsult); + } else { + SessionHelper.startP2PSession(this, patientUuid.toLowerCase(),consult,""); +// CCPAppManager.startChattingAction(ct, +// Constant.Patient_AppKey + patientUuid, name, +// "2,1,1," + consultUuid, patientUuid, state); + } + } else if (Constant.typePatient.equals(type)) { + // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), + // receiver_type(接收方类型 1.患者 2.专家), + // chat_from(来源1.公益咨询 2.随访 3.vip), + // chat_from_uuid(如果是公益咨询,则存uuid,否则0) + SessionHelper.startP2PSession(this, patientUuid.toLowerCase(),general,""); +// CCPAppManager.startChattingAction(ct, Constant.Patient_AppKey +// + patientUuid, top_title.getText().toString(), "2,1,2,0", patientUuid, 0); + finish(); + } else { + finish(); + } + break; + case R.id.bt_calling: + // 拨打患者电话 增加二级弹窗 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Calling(); + } else { + EasyWindow.with(PatientActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_phone).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + Calling(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + Calling(); + } + + + break; + case R.id.ly_setting_othername:// 别名 + Intent intent2 = new Intent(PatientActivity.this, + PatientNickNameEditActivity.class); + // intent2.putExtra("NoteContent",tv_my_note.getText().toString().trim()); + // intent2.putExtra("NickName", tvna.getText().toString().trim()); + intent2.putExtra("patientUuid", patientUuid); + startActivityForResult(intent2, 1); + break; + case R.id.ly_bz:// 备注 + Intent intent3 = new Intent(PatientActivity.this, + PatientNoteContentEditActivity.class); + // intent3.putExtra("NickName",tvna.getText().toString().trim()); + intent3.putExtra("NoteContent", tv_my_note.getText().toString() + .trim()); + intent3.putExtra("patientUuid", patientUuid); + startActivityForResult(intent3, 2); + break; + case R.id.top_right: + Intent intent1 = new Intent(PatientActivity.this,PatientEditActivity.class); + intent1.putExtra("patientUuid",patientUuid); + startActivity(intent1); + break; + default: + break; + } + } + + /** + * @author 拨打电话 + * @author Calling + */ + private void Calling() { + // TODO Auto-generated method stub + String message = "确定拨打该患者手机号码?"; + buildAlert = ECAlertDialog.buildAlert(ct, message, "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + try { + // TODO Auto-generated method stub + if (!TextUtils.isEmpty(paintphonenumber)) { + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_CALL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:" + + paintphonenumber)); + startActivity(intent); + } else { + ToastUtil.showMessage("暂未获取到患者联系方式"); + } + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + } + } + }); + buildAlert.setTitle("确定拨打"); + buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + // 抢答的接口 + private static String resConsult = Url.getresConsult; + + /** + * 抢答 + * + * @param loadUrl + * void + * @param + */ + private void getList(final String loadUrl) { + // 封装参数 + RequestParams params = new RequestParams(); + // 判断是否是公益咨询列表还是抢答公益咨询,page = 0表示是抢答的接口 + String expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + params.addBodyParameter("expertUuid", expertUuid); + params.addBodyParameter("consultUuid", consultUuid); + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // 表示是抢答的 + isState(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + ToastUtil.showToast("请求失败,请稍候再试"); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + /** + * 抢答数据解析处理 isState 1.抢答成功 2.该公益咨询已被抢答 + * + * @param result + * void + */ + protected void isState(String result) { + // TODO Auto-generated method stub + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + String states = bean.code;// 1.抢答成功 2.该公益咨询已被抢答 + String message = bean.message; + closeProgressDialog(); + if (states.equals("1")) { + ToastUtil.showToast("抢答成功"); + // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), + // receiver_type(接收方类型 1.患者 2.专家), + // chat_from(来源1.公益咨询 2.随访 3.vip), + // chat_from_uuid(如果是公益咨询,则存uuid,否则0) + CCPAppManager.startChattingAction(ct, patientUuid, name, "2,1,1," + + consultUuid, patientUuid, Constant.openPublicService); + } else if (states.equals("2")) { + DialogUtil.getMyProDialog(ct, "确定", message, new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + DialogUtil.dismissMyAlertDialog(); + } + }).setProgressBarVisibility(View.GONE); + } + } + + public class PaAdapter extends BaseAdapter { + + List list; + + public PaAdapter(List list) { + this.list = list; + + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder = null; + if (convertView == null) { + // 找到自定义item布局 并赋值给 convertView + convertView = View + .inflate(ct, R.layout.item_patient_case, null); + mHolder = new NewsViewHolder(); + mHolder.tv_invite_message = (TextView) convertView + .findViewById(R.id.tv_invite_message); + mHolder.tv_invite_date = (TextView) convertView + .findViewById(R.id.tv_invite_date); + convertView.setTag(mHolder); + + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + if (list.get(position).title.contains("甲、乙、丙、丁")) { + String ddd = list.get(position).title.replace("(甲、乙、丙、丁、戊肝)", + ""); + mHolder.tv_invite_message.setText(ddd); + } else { + mHolder.tv_invite_message.setText(list.get(position).title); + } + // if (!TextUtils.isEmpty(list.get(position).createDate) && + // !"null".equals(list.get(position).createDate)) { + // if (list.get(position).createDate.length() >= 10) { + // mHolder.tv_invite_date.setText(list.get(position).createDate.substring(0, + // 10)); + // }else{ + // mHolder.tv_invite_date.setText(list.get(position).createDate); + // } + // } + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class NewsViewHolder { + public TextView tv_invite_date; + public TextView tv_invite_message; + } + } + + @Override + // 引用第三方布局 点击事件实现病历详情界面的跳转 + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent casehistoryIntent = new Intent(PatientActivity.this, + CasehistoryActivity.class); + // 获取数据 + casehistoryIntent.putExtra("caseUuid", caselist.get(arg2).uuid); + casehistoryIntent.putExtra("title", caselist.get(arg2).title); + casehistoryIntent.putExtra("diseaseUuid", + caselist.get(arg2).diseaseUuid); + casehistoryIntent.putExtra("des", caselist.get(arg2).des); + startActivity(casehistoryIntent); + } + + /** + * 动态改变ListView 高度 + * + * @param listView + */ + public void setListViewHeightBasedOnChildren(ListView listView) { + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) { + return; + } + int totalHeight = 0; + for (int i = 0; i < listAdapter.getCount(); i++) { + View listItem = listAdapter.getView(i, null, listView); + listItem.measure(0, 0); + totalHeight += listItem.getMeasuredHeight(); + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); + params.height = totalHeight + + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); + // ((MarginLayoutParams) params).setMargins(10, 10, 10, 10); + listView.setLayoutParams(params); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientDetailActivity.java new file mode 100644 index 0000000..04dc963 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientDetailActivity.java @@ -0,0 +1,164 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.graphics.Color; +import android.os.Bundle; +import android.view.View; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.fragment.app.FragmentManager; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.InterrogationPatientInfoBean; +import cn.shangyu.gdxzExpert.fragment.BasicInfoFragment; +import cn.shangyu.gdxzExpert.fragment.HepatopathyInfoFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +/** + * Created by WANGChengXin on 2019/6/21.患者详情 + */ + +public class PatientDetailActivity extends BaseActivity implements OnCallBackFromNet{ + private FragmentManager mFm; + private RadioButton rb_info1,rb_info2; + private String step1_uuid; + public static final int INTERROGATIONPATIENTINFO = 200; + private InterrogationPatientInfoBean.DataBean data; + private CustomProgressDialog pd; + + @Override + public void setTitle() { +// top_title.setText("患者详情"); + top_title.setText("患者信息"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_patientconslut_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_patientconslut); + } + + RadioGroup rg_info = view.findViewById(R.id.rg_info); + rb_info1 = view.findViewById(R.id.rb_info1); + rb_info2 = view.findViewById(R.id.rb_info2); + + step1_uuid = getIntent().getStringExtra("step1_uuid"); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + getInfo(step1_uuid); + + + rg_info.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + switch (checkedId) { + case R.id.rb_info1: + rb_info1.setTextColor(Color.parseColor("#8D2316")); + rb_info2.setTextColor(Color.parseColor("#333333")); + changeBasicInfo(); + break; + case R.id.rb_info2: + rb_info2.setTextColor(Color.parseColor("#8D2316")); + rb_info1.setTextColor(Color.parseColor("#333333")); + changeHepatopathyInfo(); + break; + + default: + break; + } + } + + + + + }); + return view; + } + + private void getInfo(String step1_uuid) { + Map map = new HashMap<>(); + map.put("step1_uuid",step1_uuid); + sendJsonPostParamtoNetSignMD5(Url.InterrogationPatientInfo,map,INTERROGATIONPATIENTINFO,this); + } + + public void changeBasicInfo() { + BasicInfoFragment gdDepartmentFragment = new BasicInfoFragment(); + Bundle bundle = new Bundle(); + bundle.putSerializable("data",data);//这里的values就是我们要传的值 + gdDepartmentFragment.setArguments(bundle); + mFm.beginTransaction() + .replace(R.id.frame_container, gdDepartmentFragment) + .commitAllowingStateLoss(); + } + public void changeHepatopathyInfo() { + HepatopathyInfoFragment gdDepartmentFragment = new HepatopathyInfoFragment(); + Bundle bundle = new Bundle(); + bundle.putSerializable("data",data);//这里的values就是我们要传的值 + gdDepartmentFragment.setArguments(bundle); + mFm.beginTransaction() + .replace(R.id.frame_container, gdDepartmentFragment) + .commitAllowingStateLoss(); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + pd.dismiss(); + switch (resultCode){ + case INTERROGATIONPATIENTINFO: + LogUtil.i("resultJson = "+resultJson); + Gson gson = new Gson(); + InterrogationPatientInfoBean interrogationPatientInfoBean = gson.fromJson(resultJson, InterrogationPatientInfoBean.class); + if (interrogationPatientInfoBean!=null&&"200".equals(interrogationPatientInfoBean.getCode())){ + data = interrogationPatientInfoBean.getData(); + mFm = getSupportFragmentManager(); + changeBasicInfo(); + }else { + ToastUtil.showMessage("获取信息失败"); + } + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEditActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEditActivity.java new file mode 100644 index 0000000..2f19a64 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEditActivity.java @@ -0,0 +1,429 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Dialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.PatientCardBean; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.big.activity.SetInformActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.ptop.P2PMessageActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.fragment.PatientListFragment.CanclePatientUrl; + +/** + * Created by WANGChengXin on 2019/10/8. + * 患者编辑 + */ + +public class PatientEditActivity extends BaseActivity implements OnCallBackFromNet{ + private View view; + private String patientUuid; + private final static int PATIENTCARD = 200; + private ImageView iv_head; + private TextView tv_time,tv_fenzu,tv_beizhu,tv_bieming; + private TextView tv_name; + private RelativeLayout rl_suifang,rl_fenzu,rl_beizhu,rl_bieming,rl_toux,rl_jubao; + private PatientCardBean bean; + private String mExpertUuid; + private String followUpDate; + private int group_type = 0; + TextView tv_jiechu; + Boolean needhead; + public static String patientuid=""; + + @Override + public void setTitle() { +// top_title.setText("患者编辑"); + top_title.setText("常用设置"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_editpatient_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_editpatient_nom); + } + + patientUuid = getIntent().getStringExtra("patientUuid"); + mExpertUuid = SharePrefUtil.getString(this, Constant.uuid, ""); + needhead=getIntent().getBooleanExtra("needhead",false); + initView(); + getDetail(); + registerDeletPatient(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + getDetail(); + } + + private void initView() { + tv_jiechu=view.findViewById(R.id.tv_jiechu); + iv_head = view.findViewById(R.id.iv_head); + tv_time = view.findViewById(R.id.tv_time); + tv_fenzu = view.findViewById(R.id.tv_fenzu); + tv_beizhu = view.findViewById(R.id.tv_beizhu); + tv_bieming = view.findViewById(R.id.tv_bieming); + tv_name = view.findViewById(R.id.tv_name); + rl_suifang = view.findViewById(R.id.rl_suifang); + rl_fenzu = view.findViewById(R.id.rl_fenzu); + rl_beizhu = view.findViewById(R.id.rl_beizhu); + rl_bieming = view.findViewById(R.id.rl_bieming); + rl_toux=view.findViewById(R.id.rl_touxiang); + rl_jubao=view.findViewById(R.id.rl_jubao); + rl_suifang.setOnClickListener(this); + rl_fenzu.setOnClickListener(this); + rl_beizhu.setOnClickListener(this); + rl_bieming.setOnClickListener(this); + rl_toux.setOnClickListener(this); + rl_jubao.setOnClickListener(this); + tv_jiechu.setOnClickListener(this); + if(needhead) + { + rl_toux.setVisibility(View.VISIBLE); + } + else + { + rl_toux.setVisibility(View.GONE); + } + } + + private void getDetail() { + if(patientUuid==null) + return; + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("patient_uuid",patientUuid); + sendJsonPostParamtoNetSignMD5(Url.patientCard,map,PATIENTCARD,this); + + } + private void canclePatient(final String loadUrl, final String patientUuid, + String expertUuid) { + showProgressDialog("解除中..."); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid", patientUuid); + params.addBodyParameter("expertUuid", expertUuid); + LogUtil.i("======" + loadUrl + " patientUuid=" + patientUuid+ "expertUuid" + expertUuid); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processCancleData(info.result, patientUuid); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("解除失败,请重试"); + } + }); + } + protected void processCancleData(String result, String patientUuid + ) { + // TODO Auto-generated method stub + closeProgressDialog(); + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + if ("1".equals(bean.code)) { + ToastUtil.showToast(bean.message); + // 从数据库里删除该患者 + PatientSqlManager.delPatientInfo(patientUuid); + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PatientEditActivity.this); + Intent intent2 = new Intent("DELET_PATION_ACTION"); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent2); + Intent intent=new Intent(); + intent.putExtra("finish","finish"); + P2PMessageActivity.position=-3; + patientuid=patientUuid.toLowerCase(); + setResult(303,intent); + finish(); + + } else { + ToastUtil.showToast("解除失败,请重试"); + } + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.tv_jiechu: + + final ECListDialog dialog = new ECListDialog(this, + new String[] { getString(R.string.patient_delete, + tv_name.getText().toString().trim()) }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + canclePatient(CanclePatientUrl, patientUuid, mExpertUuid); + dialog.dismiss(); + } + }); + dialog.setTitle("解除随访患者"); + dialog.show(); + + break; + case R.id.rl_jubao: + startActivity(new Intent(ct, SettingFeedbackActivity.class).setType("tousu")); + break; + case R.id.rl_touxiang: + Intent intent4 = new Intent(PatientEditActivity.this, + BigPatientActivity.class); + intent4.putExtra("realName", tv_name.getText().toString()); + intent4.putExtra("isFriend",false ); + intent4.putExtra("patientUuid", patientUuid); + intent4.putExtra("needmanage", false); + + startActivity(intent4);// 启动患者详情界面 + break; + case R.id.rl_suifang: + if(StringUtil.isEmpty(followUpDate)){ + Intent intent = new Intent(PatientEditActivity.this,AddVisitPlanActivity.class); + intent.putExtra("patientUuid",patientUuid); + intent.putExtra("patientName", tv_name.getText().toString()); + startActivity(intent); + }else { + Intent intent = new Intent(PatientEditActivity.this,VisitDerailActivity.class); + intent.putExtra("FollowUpUuid",bean.getFollowUpUuid()); + intent.putExtra("patientName",tv_name.getText().toString()); + intent.setType("kan"); + startActivity(intent); + } + break; + case R.id.rl_fenzu: +// if (group_type==0){ +// Intent intent1 = new Intent(PatientEditActivity.this,GroupManageActivity.class); +// intent1.putExtra("patientUuid",patientUuid); +// if ("未填写".equals(tv_fenzu.getText().toString())){ +// intent1.putExtra("fenzu",""); +// }else { +// intent1.putExtra("fenzu",tv_fenzu.getText().toString()); +// } +// startActivity(intent1); +// }else { +// ToastUtil.showMessage("该患者暂不支持分组编辑"); +// } +// +// break; + + case R.id.rl_beizhu: +// Intent intent2 = new Intent(PatientEditActivity.this,PatientNoteContentEditActivity.class); +// intent2.putExtra("patientUuid",patientUuid); +// intent2.putExtra("NickName", tv_name.getText().toString()); +// if("未填写".equals(tv_beizhu.getText().toString())){ +// intent2.putExtra("NoteContent",""); +// }else { +// intent2.putExtra("NoteContent",tv_beizhu.getText().toString()); +// } +// startActivity(intent2); +// break; + case R.id.rl_bieming: +// Intent intent3 = new Intent(PatientEditActivity.this,PatientNickNameEditActivity.class); +// intent3.putExtra("patientUuid",patientUuid); +// startActivity(intent3); + Intent intent10 = new Intent(PatientEditActivity.this, + SetInformActivity.class); + intent10.putExtra("patientUuid",patientUuid); + if("给患者添加备注名".equals(tv_bieming.getText().toString())) + { + intent10.putExtra("nickname",""); + } + else + { + intent10.putExtra("nickname",tv_bieming.getText().toString()); + } + + intent10.putExtra("fenzu",tv_fenzu.getText().toString()); + if (getResources().getString(com.netease.nim.uikit.R.string.patient_note).equals(tv_beizhu.getText().toString())){ + intent10.putExtra("miaosu",""); + }else { + intent10.putExtra("miaosu", tv_beizhu.getText().toString()); + } + startActivityForResult(intent10,21); + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case PATIENTCARD: + closeProgressDialog(); +// {"code":"200","patient":{"realname":"测试123"},"FollowUpUuid":"","message":"成功","group":{"is_star":0},"FollowUpDate":""} + + bean = GsonTools.fromGsonToBean(resultJson, + PatientCardBean.class); +// PatientCardBean bean = GsonTools.fromGsonToBean(resultJson, +// PatientCardBean.class); + if(!"200".equals(bean.getCode())) + { +// if("35000".equals(bean.getCode())) +// { +// +// } +// else +// { + ToastUtil.showMessage(bean.getMessage()); +// } + return; + } + + if("1".equals(bean.getIsFriend())) + { + patientUuid=bean.getPatient().getUuid(); + } + else + { + + top_right_text.setVisibility(View.GONE); + ECAlertDialog dilaog2 = ECAlertDialog.buildAlert(PatientEditActivity.this, + "随访关系已解除", "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dialog.dismiss(); + finish(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + } + PatientCardBean.PatientBean patient = bean.getPatient(); + String photo = null; + String realname = null; + if (patient!=null){ + photo = patient.getPhoto(); + realname = patient.getRealname(); + } + PatientCardBean.GroupBean group = bean.getGroup(); + String name = null; + String note = null; + String nickname = null; + if (group!=null){ + name = group.getName(); + note = group.getNote(); + nickname = group.getNickname(); + group_type = group.getGroup_type(); + } + + followUpDate = bean.getFollowUpDate(); + + + if (!StringUtil.isEmpty(photo)){ + ImageLoader .getInstance().displayImage(Url.urlHtml +photo,iv_head,ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + if (!StringUtil.isEmpty(followUpDate)){ + tv_time.setText(followUpDate); + } + else + { + tv_time.setText("添加随访提醒"); + } + if (!StringUtil.isEmpty(name)){ + tv_fenzu.setText(name); + } + if (!StringUtil.isEmpty(note)){ + tv_beizhu.setText(note); + } + if (!StringUtil.isEmpty(realname)){ +// top_title.setText(realname); + tv_name.setText(realname); + } + if (!StringUtil.isEmpty(nickname)){ + tv_bieming.setText(nickname); + tv_name.setText(nickname); +// top_title.setText(nickname); + } + + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + localBroadcastManager.unregisterReceiver(localReceiver); + } + + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + LocalReceiver localReceiver; + private void registerDeletPatient() + { + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("START_PATION_ACTION"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + } + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + finish(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationApplyActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationApplyActivity.java new file mode 100644 index 0000000..2988414 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationApplyActivity.java @@ -0,0 +1,487 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/22. + */ + +public class PatientEducationApplyActivity extends BaseActivity implements OnCallBackFromNet{ + private TimePopupWindow pwTime; + private int year; + private int month; + private int day; + private RadioButton rb_1,rb_2,rb_3; + private String oldDate; + private LinearLayout rl_1,rl_2; + private LinearLayout ll_11,ll_12,ll_21,ll_22,ll_23,ll_24; + private ImageView iv_11,iv_12,iv_21,iv_22,iv_23,iv_24; + private Drawable drawable_down; + private Drawable drawable_up; + private View line11,line21,line22,line23; + private Button btn_onlineapply; + private String uuid; + private String topic; + private String type; + private String expect_date; + private CustomProgressDialog pd; + Boolean isTimeright=true; + + @Override + public void setTitle() { + top_title.setText("患教申请"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_patienteducationapply); + + findview(view); + onClickListener(); + Intent intent = getIntent(); + + topic = intent.getStringExtra("topic"); + type = intent.getStringExtra("type"); + expect_date = intent.getStringExtra("expect_date"); + uuid = intent.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)){ + btn_onlineapply.setText("确认修改"); + rb_1.setText(type); + rb_2.setText(topic); + rb_3.setText(expect_date); + rb_1.setTextColor(Color.parseColor("#8d2316")); + rb_2.setTextColor(Color.parseColor("#8d2316")); + rb_3.setTextColor(Color.parseColor("#8d2316")); + } + bottomSelectDate(); + setCanNotEditAndClick(); + + drawable_down = getResources().getDrawable(R.drawable.point_down); + drawable_down.setBounds(0, 0, drawable_down.getMinimumWidth(), drawable_down.getMinimumHeight()); + drawable_up= getResources().getDrawable(R.drawable.point_up); + drawable_up.setBounds(0, 0, drawable_up.getMinimumWidth(), drawable_up.getMinimumHeight()); + + btn_onlineapply.setOnClickListener(new OnMultiClickListener() { + @Override + public void onMultiClick(View v) { + // 进行点击事件后的逻辑操作 + String trim1 = rb_1.getText().toString().trim(); + if (trim1.equals("请选择患教类型")){ + ToastUtil.showMessage("请选择患教类型"); + return; + } + String trim2 = rb_2.getText().toString().trim(); + if (trim2.equals("请选择患教主题")){ + ToastUtil.showMessage("请选择患教主题"); + return; + } + String trim3 = rb_3.getText().toString().trim(); + if (trim3.equals("开展患教时间")){ + ToastUtil.showMessage("请选择开展患教时间"); + return; + } + pd = new CustomProgressDialog(PatientEducationApplyActivity.this, "请稍候"); + pd.show(); + Map map = new HashMap<>(); + map.put("expect_date",trim3); + map.put("topic",trim2); + map.put("type",trim1); + if (!StringUtil.isEmpty(uuid)){ + if (expect_date.equals(trim3)&&topic.equals(trim2)&&type.equals(trim1)){ + ToastUtil.showMessage("您未修改任何信息"); + pd.dismiss(); + }else { + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.mailanUpdate,map,1,PatientEducationApplyActivity.this); + } + + }else{ + sendJsonPostParamtoNetSignMD5(Url.mailanAdd,map,1,PatientEducationApplyActivity.this); + + } + } + }); + + + return view; + } + + private void onClickListener() { + rb_1.setOnClickListener(this); + rb_2.setOnClickListener(this); + rb_3.setOnClickListener(this); + ll_11.setOnClickListener(this); + ll_12.setOnClickListener(this); + ll_21.setOnClickListener(this); + ll_22.setOnClickListener(this); + ll_23.setOnClickListener(this); + ll_24.setOnClickListener(this); +// btn_onlineapply.setOnClickListener(this); + + } + + private void findview(View view) { + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + rl_1 = view.findViewById(R.id.rl_1); + rl_2 = view.findViewById(R.id.rl_2); + ll_11 = view.findViewById(R.id.ll_11); + ll_12 = view.findViewById(R.id.ll_12); + ll_21 = view.findViewById(R.id.ll_21); + ll_22 = view.findViewById(R.id.ll_22); + ll_23 = view.findViewById(R.id.ll_23); + ll_24 = view.findViewById(R.id.ll_24); + iv_11 = view.findViewById(R.id.iv_11); + iv_12 = view.findViewById(R.id.iv_12); + iv_21 = view.findViewById(R.id.iv_21); + iv_22 = view.findViewById(R.id.iv_22); + iv_23 = view.findViewById(R.id.iv_23); + iv_24 = view.findViewById(R.id.iv_24); + line11 = view.findViewById(R.id.line11); + line21 = view.findViewById(R.id.line21); + line22 = view.findViewById(R.id.line22); + line23 = view.findViewById(R.id.line23); + btn_onlineapply = view.findViewById(R.id.btn_onlineapply); + } + + /** + * 实例化时间选择器,与选择时间回调 bottomSelectDate + * + * void + */ + private void bottomSelectDate() { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + year = calendar.get(Calendar.YEAR); + month = calendar.get(Calendar.MONTH); + day = calendar.get(Calendar.DATE); + + pwTime.setRange(year, 2100); + oldDate = getOldDate(7); + Long timeLong = Long.parseLong(SharePrefUtil.getString(UIUtils.getContext(), "gdxz_timestamp","1")); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//要转换的时间格式 + +// Date dateNow =sdf.parse(sdf.format(timeLong)); + calendar.setTimeInMillis(timeLong*1000L); + int year1 = calendar.get(Calendar.YEAR); + int month1 = calendar.get(Calendar.MONTH); + int day1 = calendar.get(Calendar.DATE); + if(day1==day&&month1==month &&year1==year) + isTimeright=true; + else + isTimeright=false; + + + LogUtil.i("oldDate = "+oldDate); + String[] split = oldDate.split("-"); + pwTime.setTimeold7(Integer.parseInt(split[0]),Integer.parseInt(split[1]),Integer.parseInt(split[2])); + + // 设置标题 + pwTime.setPopupTitle("选择开展日期"); + // 设置起始时间 + + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + rb_3.setCompoundDrawables(null,null,drawable_down,null); + String birthdayPost = DateUtil.date2Str(date, "yyyy-MM-dd"); + + if (!DateUtil.isDateOneBigger(birthdayPost, oldDate)||!isTimeright){ + ToastUtil.showMessage("请选择7天后合适日期开展患教活动"); + return; + } + + rb_3.setText(birthdayPost); + rb_3.setTextColor(Color.parseColor("#8d2316")); + } + }); + } + + /** + * 日期监听 + * */ + public void setCanNotEditAndClick() { + + rb_3.setFocusable(false); + rb_3.setFocusableInTouchMode(false); + + rb_3.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + if (rl_1.getVisibility()==View.VISIBLE){ + rl_1.setVisibility(View.GONE); + return; + } + rb_3.setCompoundDrawables(null,null,drawable_up,null); + String s = rb_3.getText().toString(); + if (s.equals("开展患教时间")){ + pwTime.setTime(DateUtil.str2Date(oldDate, "yyyy-MM-dd")); + }else { + pwTime.setTime(DateUtil.str2Date(s, "yyyy-MM-dd")); + } + pwTime.showAtLocation(rb_3, Gravity.BOTTOM, 0, 0); + + } + }); + } + + /** + * 获取前n天日期、后n天日期 + * + * @param distanceDay 前几天 如获取前7天日期则传-7即可;如果后7天则传7 + * @return + */ + public static String getOldDate(int distanceDay) { + SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd"); + Date beginDate = new Date(); + Calendar date = Calendar.getInstance(); + date.setTime(beginDate); + date.set(Calendar.DATE, date.get(Calendar.DATE) + distanceDay); + Date endDate = null; + try { + endDate = dft.parse(dft.format(date.getTime())); + } catch (ParseException e) { + e.printStackTrace(); + } + + return dft.format(endDate); + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.rb_1: + if (rl_2.getVisibility()==View.VISIBLE){ + rl_2.setVisibility(View.GONE); + return; + } + if (rl_1.getVisibility()==View.VISIBLE){ + rl_1.setVisibility(View.GONE); + rb_1.setCompoundDrawables(null,null,drawable_down,null); + }else { + rl_1.setVisibility(View.VISIBLE); + rb_1.setCompoundDrawables(null,null,drawable_up,null); + } + + break; + case R.id.rb_2: + if (rl_1.getVisibility()==View.VISIBLE){ + rl_1.setVisibility(View.GONE); + return; + } + if (rl_2.getVisibility()==View.VISIBLE){ + rl_2.setVisibility(View.GONE); + rb_2.setCompoundDrawables(null,null,drawable_down,null); + }else { + rl_2.setVisibility(View.VISIBLE); + rb_2.setCompoundDrawables(null,null,drawable_up,null); + } + break; + case R.id.ll_11: + rb_1.setText("线下患教"); + rb_1.setTextColor(Color.parseColor("#8d2316")); + iv_11.setVisibility(View.VISIBLE); + rl_1.setVisibility(View.GONE); + rb_1.setCompoundDrawables(null,null,drawable_down,null); + iv_12.setVisibility(View.GONE); + line11.setBackgroundColor(Color.parseColor("#8d2316")); + break; + case R.id.ll_12: + rb_1.setText("线下录制"); + rb_1.setTextColor(Color.parseColor("#8d2316")); + iv_12.setVisibility(View.VISIBLE); + rl_1.setVisibility(View.GONE); + rb_1.setCompoundDrawables(null,null,drawable_down,null); + iv_11.setVisibility(View.GONE); + line11.setBackgroundColor(Color.parseColor("#bbbbbb")); + break; + case R.id.ll_21: + rb_2.setText("病毒学应答"); + rb_2.setTextColor(Color.parseColor("#8d2316")); + iv_21.setVisibility(View.VISIBLE); + iv_24.setVisibility(View.GONE); + rl_2.setVisibility(View.GONE); + rb_2.setCompoundDrawables(null,null,drawable_down,null); + iv_22.setVisibility(View.GONE); + iv_23.setVisibility(View.GONE); + iv_24.setVisibility(View.GONE); + line21.setBackgroundColor(Color.parseColor("#8d2316")); + line22.setBackgroundColor(Color.parseColor("#bbbbbb")); + line23.setBackgroundColor(Color.parseColor("#bbbbbb")); + break; + case R.id.ll_22: + rb_2.setText("耐药问题"); + rb_2.setTextColor(Color.parseColor("#8d2316")); + iv_22.setVisibility(View.VISIBLE); + iv_24.setVisibility(View.GONE); + rl_2.setVisibility(View.GONE); + rb_2.setCompoundDrawables(null,null,drawable_down,null); + iv_21.setVisibility(View.GONE); + iv_23.setVisibility(View.GONE); + iv_24.setVisibility(View.GONE); + line22.setBackgroundColor(Color.parseColor("#8d2316")); + line21.setBackgroundColor(Color.parseColor("#bbbbbb")); + line23.setBackgroundColor(Color.parseColor("#bbbbbb")); + break; + case R.id.ll_23: + rb_2.setText("肾功能保护"); + rb_2.setTextColor(Color.parseColor("#8d2316")); + iv_23.setVisibility(View.VISIBLE); + iv_24.setVisibility(View.GONE); + rl_2.setVisibility(View.GONE); + rb_2.setCompoundDrawables(null,null,drawable_down,null); + iv_21.setVisibility(View.GONE); + iv_22.setVisibility(View.GONE); + iv_24.setVisibility(View.GONE); + line22.setBackgroundColor(Color.parseColor("#bbbbbb")); + line21.setBackgroundColor(Color.parseColor("#bbbbbb")); + line23.setBackgroundColor(Color.parseColor("#8d2316")); + break; + case R.id.ll_24: + rb_2.setText("其他"); + rb_2.setTextColor(Color.parseColor("#8d2316")); + iv_24.setVisibility(View.VISIBLE); + iv_23.setVisibility(View.GONE); + rl_2.setVisibility(View.GONE); + rb_2.setCompoundDrawables(null,null,drawable_down,null); + iv_21.setVisibility(View.GONE); + iv_22.setVisibility(View.GONE); + iv_23.setVisibility(View.GONE); + line22.setBackgroundColor(Color.parseColor("#bbbbbb")); + line21.setBackgroundColor(Color.parseColor("#bbbbbb")); + line23.setBackgroundColor(Color.parseColor("#bbbbbb")); + break; + case R.id.btn_onlineapply: + String trim1 = rb_1.getText().toString().trim(); + if (trim1.equals("请选择患教类型")){ + ToastUtil.showMessage("请选择患教类型"); + return; + } + String trim2 = rb_2.getText().toString().trim(); + if (trim2.equals("请选择患教主题")){ + ToastUtil.showMessage("请选择患教主题"); + return; + } + String trim3 = rb_3.getText().toString().trim(); + if (trim3.equals("开展患教时间")){ + ToastUtil.showMessage("请选择开展患教时间"); + return; + } + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + Map map = new HashMap<>(); + map.put("expect_date",trim3); + map.put("topic",trim2); + map.put("type",trim1); + if (!StringUtil.isEmpty(uuid)){ + if (expect_date.equals(trim3)&&topic.equals(trim2)&&type.equals(trim1)){ + ToastUtil.showMessage("您未修改任何信息"); + pd.dismiss(); + }else { + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.mailanUpdate,map,1,this); + btn_onlineapply.setEnabled(false); + btn_onlineapply.setFocusable(false); + } + + }else{ + sendJsonPostParamtoNetSignMD5(Url.mailanAdd,map,1,this); + btn_onlineapply.setEnabled(false); + btn_onlineapply.setFocusable(false); + } + + + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("mailanAdd = "+resultJson); + pd.dismiss(); + try { + JSONObject jsonObject = new JSONObject(resultJson); + String code = jsonObject.optString("code"); + if ("200".equals(code)){ + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PatientEducationApplyActivity.this); + Intent intent = new Intent("AAPLY"); + intent.putExtra("aaply", true); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + finish(); + } + ToastUtil.showMessage(jsonObject.optString("message")); + } catch (JSONException e) { + + } + } + + public abstract class OnMultiClickListener implements View.OnClickListener{ + // 两次点击按钮之间的点击间隔不能少于1500毫秒 + private final int MIN_CLICK_DELAY_TIME = 1500; + private long lastClickTime; + + public abstract void onMultiClick(View v); + + @Override + public void onClick(View v) { + long curClickTime = System.currentTimeMillis(); + if((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) { + // 超过点击间隔后再将lastClickTime重置为当前点击时间 + lastClickTime = curClickTime; + onMultiClick(v); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationNoticeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationNoticeActivity.java new file mode 100644 index 0000000..535fa6a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientEducationNoticeActivity.java @@ -0,0 +1,184 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.view.Gravity; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import androidx.annotation.NonNull; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class PatientEducationNoticeActivity extends BaseActivity implements OnCallBackFromNet{ + private EditText et_feedbook; + private Button mBt_get_Voice; + private Button bt_submit; + private String note; + private static final int MAILANNOTICEUPATE = 1; + private String uuid; + private KeDaXunFeiUtil VoiceUtil; + + @Override + public void setTitle() { + top_title.setText("患教公告"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_zhibo_feedbook); + et_feedbook = (EditText) view.findViewById(R.id.et_feedbook); + et_feedbook.setHint("亲爱的医生,您可以按照如下模板发布患教公告\n" + + "各位患友,本人将于近期开展一场科普患教活动,欢迎大家积极参与\n" + + "时间:2019年10月1日 13:00\n" + + "地点:北京佑安医院门诊大楼301室\n" + + "主题:乙肝育龄期妈妈应该注意什么?"); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + // 字数限制的 + // et_feedbook.addTextChangedListener(tw); + bt_submit = (Button) view.findViewById(R.id.bt_submit); + bt_submit.setOnClickListener(this); + + note = getIntent().getExtras().getString("notice"); + if (!StringUtil.isEmpty(note)){ + et_feedbook.setText(note); + uuid = getIntent().getExtras().getString("uuid"); + } + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.bt_get_voice: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(PatientEducationNoticeActivity.this, + et_feedbook); + } else { + EasyWindow.with(PatientEducationNoticeActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(PatientEducationNoticeActivity.this, + et_feedbook); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(PatientEducationNoticeActivity.this, + et_feedbook); + } + + + break; + case R.id.bt_submit: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + String trim = et_feedbook.getText().toString().trim(); + if (StringUtil.isEmpty(trim)){ + ToastUtil.showMessage("请输入信息"); + return; + } + if (trim.equals(note)){ + ToastUtil.showMessage("未修改信息内容"); + return; + } + Map param = new HashMap<>(); + param.put("notice",trim); + if (!StringUtil.isEmpty(note)){ + param.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.mailanNoticeUpate, param, MAILANNOTICEUPATE, this); + }else { + sendJsonPostParamtoNetSignMD5(Url.mailanNoticeAdd, param, MAILANNOTICEUPATE,this); + } + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case MAILANNOTICEUPATE: + LogUtil.i("resultJson = "+resultJson); + Gson gson1 = new Gson(); + BaseBean fromJson1 = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson1!=null&&"200".equals(fromJson1.code)){ + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PatientEducationNoticeActivity.this); + Intent intent = new Intent("notice"); + intent.putExtra("notice", true); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + finish(); + } + ToastUtil.showMessage(fromJson1.message); + + break; + } + } + + @Override + protected void onDestroy() { + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + super.onDestroy(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientGroupActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientGroupActivity.java new file mode 100644 index 0000000..5d64c8c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientGroupActivity.java @@ -0,0 +1,311 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.content.DialogInterface; +import android.content.Intent; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.hjq.window.EasyWindow; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm5; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +public class PatientGroupActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener { + + + + @Override + public void setTitle() { + top_title.setText("患者分组"); + } + String patientgroup,patientcaseId,suifangId; + TextView new_suifang; + RadioGroup grop; + RadioButton g1,g2,g3,g4,g5,g6; +// String type; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_patient_group); + view.findViewById(R.id.im1).setOnClickListener(this); + view.findViewById(R.id.im2).setOnClickListener(this); + view.findViewById(R.id.im3).setOnClickListener(this); + view.findViewById(R.id.im5).setOnClickListener(this); + view.findViewById(R.id.im6).setOnClickListener(this); + g1=view.findViewById(R.id.g1); + g2=view.findViewById(R.id.g2); + g3=view.findViewById(R.id.g3); + g4=view.findViewById(R.id.g4); + g5=view.findViewById(R.id.g5); + g6=view.findViewById(R.id.g6); +// type=getIntent().getType(); + grop=view.findViewById(R.id.grop); + grop.setOnCheckedChangeListener(this); + patientgroup=getIntent().getStringExtra("patientgroup"); + patientcaseId=getIntent().getStringExtra("patientcaseId"); + suifangId=getIntent().getStringExtra("suifangId"); + view.findViewById(R.id.change_data).setVisibility(View.GONE); + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + if("1".equals(patientgroup)) + { + g1.setChecked(true); + } + else if("2".equals(patientgroup)) + { + g2.setChecked(true); + } + else if("3".equals(patientgroup)) + { + g3.setChecked(true); + view.findViewById(R.id.l_suifang).setVisibility(View.GONE); + + } + else if("4".equals(patientgroup)) + { + g4.setChecked(true); + } + else if("5".equals(patientgroup)) + { + g5.setChecked(true); + } + else if("6".equals(patientgroup)) + { + g6.setChecked(true); + } + return view; + } + private void suifangupdate() + { + projectQueryForm5 pro=new projectQueryForm5(); + pro.setPatientcaseId(patientcaseId); + pro.setSuifangId(suifangId); + pro.setPatientgroup(patientgroup); + + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + OkHttpUtils + .postString() + .url(Url.suifangupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + finish(); + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(PatientGroupActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(PatientGroupActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.suifangupdate)) + { + suifangupdate(); + } + + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.im1: + showyiwen("单用NAs组","仅服用口服抗病毒药物—单用ETV组、单用TDF组、单用TAF组、单用TMF组,联合用药组"); + break; + case R.id.im2: + case R.id.im5: + showyiwen("单用Peg-IFN组","未接受NAs治疗,仅使用Peg-IFN治疗的患者"); + break; + case R.id.im3: + case R.id.im6: + showyiwen("NAs联合/序贯Peg-IFN","起始治疗为NAs联合Peg-IFN,以及NAs单用序贯Peg-IFN,或Peg-IFN单用后序贯NAs治疗的患者"); + break; + case R.id.new_suifang: + if(g3.isChecked()) + { + popwindow("请注意!!Nas联合/序贯Peg-IFN(≥3月)选择后,分组不能修改,此后新的随访数据中分组固定为“Nas联合/序贯Peg-IFN(≥3月)”"); + } + else + { + popwindow("确认保存新的信息?"); + } + + + break; + } + + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(PatientGroupActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + suifangupdate(); + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + public void showyiwen(String title,String content) + { + EasyWindow.with(PatientGroupActivity.this).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + } + }).show(); + } + + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) + { + case R.id.g1: + patientgroup="1"; + break; + case R.id.g2: + patientgroup="2"; + break; + case R.id.g3: + patientgroup="3"; + break; + case R.id.g4: + patientgroup="4"; + break; + case R.id.g5: + patientgroup="5"; + break; + case R.id.g6: + patientgroup="6"; + break; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNickNameEditActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNickNameEditActivity.java new file mode 100644 index 0000000..196027f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNickNameEditActivity.java @@ -0,0 +1,171 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 患者详情-别名编辑内容 + * @author 纪肖 + * + */ +public class PatientNickNameEditActivity extends BaseActivity implements OnClickListener{ + private View view; + private Intent intent; + private EditText et_nick_name; + String updateNickname = Url.getupdateNickname; + private String patientUuid; + private String expertUuid; + private String NickName; + private String NoteContent; +// private String NoteContent; + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.top_back_text: +// intent = getIntent(); +// Intent intent1=new Intent(); +// intent1.putExtra("NickName",et_nick_name.getText().toString().trim()); +// setResult(1, intent1); + hideSoftKeyboard(); + finish(); + break; + case R.id.top_right_text: + updatename(updateNickname); + intent = getIntent(); + if(TextUtils.isEmpty(et_nick_name.getText().toString().trim())){ + ToastUtil.showMessage("请输入别名"); + return; + } + Intent intent=new Intent(); + intent.putExtra("NickName",et_nick_name.getText().toString().trim()); + setResult(1, intent); + hideSoftKeyboard(); + finish(); + break; + } + } + private void updatename(final String loadUrl) { + // TODO Auto-generated method stub + Intent intent = getIntent(); + patientUuid = intent.getStringExtra("patientUuid"); + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + NickName = et_nick_name.getText().toString().trim(); + NoteContent = intent.getStringExtra("NoteContent"); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("patientUuid",patientUuid);//患者uuid + params.addBodyParameter("expertUuid",expertUuid);//专家uuid + params.addBodyParameter("nickname",NickName);//别名 + params.addBodyParameter("note",NoteContent);//备注内容 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid,info.result); + LogUtil.i(info.result); + PatientModel member = new PatientModel(Constant.Patient_AppKey+patientUuid); + member.setRealName(NickName); + PatientSqlManager.updateContactName(member); +// getproseData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); +// ToastUtil.showMsgCustomToast("加载失败"); + } + }); + + } + @Override + public void setTitle() { + top_back.setVisibility(View.GONE); + top_back_text.setVisibility(View.VISIBLE); + top_back_text.setOnClickListener(this); + top_back_text.setText("取消"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + top_title.setText("输入别名"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.patient_nick_name_content); + et_nick_name=(EditText)view.findViewById(R.id.et_nick_name); + intent = getIntent(); + String useRequirements = getIntent().getStringExtra("NickName"); + et_nick_name.setText(useRequirements); + et_nick_name.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stubs + } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + String count = et_nick_name.getText().toString().trim(); + if(count.length() >= 10){ + ToastUtil.showMessage("别名最多十个字"); + } + } + }); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + //这里重写返回键 +// intent = getIntent(); +// Intent intent1=new Intent(); +// intent1.putExtra("NickName",et_nick_name.getText().toString().trim()); +// setResult(1, intent1); + hideSoftKeyboard(); + finish(); + } + return false; + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNoteContentEditActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNoteContentEditActivity.java new file mode 100644 index 0000000..fe11571 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientNoteContentEditActivity.java @@ -0,0 +1,165 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.EditText; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 患者详情-我的备注编辑内容 + * @author 纪肖 + * + */ +public class PatientNoteContentEditActivity extends BaseActivity implements OnClickListener{ + private View view; + private Intent intent; + private EditText et_note_content; + String updateNickname = Url.getupdateNickname; + private String expertUuid; + private String patientUuid; + private String NoteContent; + private String NickName; + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.top_back_text: + hideSoftKeyboard(); +// intent = getIntent(); +// Intent intent1=new Intent(); +// intent1.putExtra("NoteContent",et_note_content.getText().toString().trim()); +// setResult(2, intent1); + finish(); + break; + case R.id.top_right_text: + updatename(updateNickname); + intent = getIntent(); + if(TextUtils.isEmpty(et_note_content.getText().toString().trim())){ + ToastUtil.showMessage("请输入备注内容"); + return; + } + Intent intent=new Intent(); + intent.putExtra("NoteContent",et_note_content.getText().toString().trim()); + setResult(2, intent); + hideSoftKeyboard(); + finish(); + break; + } + } + private void updatename(final String loadUrl) { + // TODO Auto-generated method stub + Intent intent = getIntent(); + + NoteContent = et_note_content.getText().toString().trim(); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("patientUuid",patientUuid);//患者uuid + params.addBodyParameter("expertUuid",expertUuid);//专家uuid + params.addBodyParameter("nickname",NickName);//别名 + params.addBodyParameter("note",NoteContent);//备注内容 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid,info.result); + LogUtil.i(info.result); +// getproseData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); +// ToastUtil.showMsgCustomToast("加载失败"); + } + }); + + } + @Override + public void setTitle() { + top_back.setVisibility(View.GONE); + top_back_text.setVisibility(View.VISIBLE); + top_back_text.setOnClickListener(this); + top_back_text.setText("取消"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + top_title.setText("输入备注"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.patient_donate_note_content); + et_note_content=(EditText)view.findViewById(R.id.et_note_content); + intent = getIntent(); + patientUuid = intent.getStringExtra("patientUuid"); + NickName = intent.getStringExtra("NickName"); + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + String useRequirements = getIntent().getStringExtra("NoteContent"); + et_note_content.setText(useRequirements); + + et_note_content.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + // TODO Auto-generated method stubs + } + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + String count = et_note_content.getText().toString().trim(); + if(count.length() >=200){ + ToastUtil.showMessage("最多输入两百字"); + } + } + }); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + //这里重写返回键 +// intent = getIntent(); +// Intent intent1=new Intent(); +// intent1.putExtra("NoteContent",et_note_content.getText().toString().trim()); +// setResult(2, intent1); + hideSoftKeyboard(); + finish(); + } + return false; + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientTeachActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientTeachActivity.java new file mode 100644 index 0000000..f4b558e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientTeachActivity.java @@ -0,0 +1,418 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.inputmethod.EditorInfo; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PatientTeachAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean.PatientTBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PatientTeachActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String searchStr; + private PatientTeachActivity mActivity; + private EditText mEt_search; + private ImageView mIv_search; + private ECAlertDialog buildAlert; + private DrawableCenterButton ib_search; + private DrawableCenterCheckBox cb_kp_jx; + private String topic = "1"; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("患教学堂"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_patient_teach_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_patient_teach, null); + } + + mActivity = this; + mEt_search = (EditText) view.findViewById(R.id.search); + mIv_search = (ImageView) view.findViewById(R.id.iv_search); + ib_search = view.findViewById(R.id.ib_search); + cb_kp_jx = view.findViewById(R.id.cb_kp_jx); + ib_search.setOnClickListener(this); + cb_kp_jx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + page = 1; + if (isChecked) { + topic = "2"; + cb_kp_jx.setText("最热"); + String result = SharePrefUtil.getString(mActivity, + Url.getPolularScienceArticleListByKeywordsNew + "R", + ""); + if (!StringUtil.isEmpty(result)) { + processData(result); + } else { + getScienceList(); + } + + } else { + topic = "1"; + cb_kp_jx.setText("最新"); + String result = SharePrefUtil.getString(mActivity, + Url.getPolularScienceArticleListByKeywordsNew + "X", + ""); + if (!StringUtil.isEmpty(result)) { + processData(result); + } else { + getScienceList(); + } + } + + } + }); + + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无患教学堂"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + page = 1; + getScienceList(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getScienceList(); + + // getNewsList(Url.getNewsList, false, false, page); + } + }); + initIntent(); + getScienceList(); + return view; + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + + } + + public void initIntent() { + mIv_search.setOnClickListener(this); + mEt_search.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + + searchStr = mEt_search.getText().toString().trim(); + page = 1; + getScienceList(); + // search pressed and perform your functionality. + } + return false; + } + }); + + } + + public static final int GET_SEARCH_SCRENCE_RESULT = 101; + + private void getScienceList() { + // TODO Auto-generated method stub + Log.i("TAG", "page = "+page+",topic = "+searchStr); + Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("type", topic); + param.put("keywords", ""); +// param.put("topic", mEt_search.getText().toString().trim()); + sendJsonPostParamtoNetSignMD5(Url.getPolularScienceArticleListByKeywordsNew, param, + GET_SEARCH_SCRENCE_RESULT, mActivity); + + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.iv_search: + searchStr = mEt_search.getText().toString().trim(); + page = 1; + getScienceList(); + break; + case R.id.ib_search://搜索 + Intent intent = new Intent(PatientTeachActivity.this,SearchPatientTeachActivity.class); + startActivityForResult(intent, 80); + break; + default: + break; + } + } + + @Override + public void onItemClick(AdapterView parent, View view, final int position, + long id) { + // TODO Auto-generated method stub +// sendKepu(position); + PatientTBean datas1; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas1 = data.get(position - headerViewsCount); + } else { + datas1 = data.get(position); + + } + buildAlert = ECAlertDialog.buildAlert(PatientTeachActivity.this, datas1.getTopic(), "取消", "发送", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + sendKepu(position); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("是否确定发送此患教科普"); + buildAlert.setTitleColor(PatientTeachActivity.this.getResources().getColor( + R.color.black)); + buildAlert.setMessageColor("#666666"); + buildAlert.show(); + + + } + + private void sendKepu(int position) { + PatientTBean datas; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas = data.get(position - headerViewsCount); + } else { + datas = data.get(position); + + } + + + Intent intent = new Intent(); + if (StringUtil.isEmpty(datas.getImgPath())) { + + intent.putExtra("imagUrl", + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + intent.putExtra("imagUrl", Url.urlHtml + datas.getImgPath()); + } +// System.out.println("datas.getImgPath()== " + datas.getImgPath()); + + intent.putExtra("url", Url.urlHtml + datas.getPath()); + intent.putExtra("title", datas.getTopic()); + intent.putExtra("uuid",datas.getUuid()); + intent.putExtra("content", datas.getSummary()); + setResult(70, intent); + finish(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + + } + + PatientTeachAdapter mAdapter; + List data = new ArrayList(); + + public void processData(String result) { + PatientTeachBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, PatientTeachBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.data); + } + } else { + data.addAll(bean.data); + } + // 更新 + if (mAdapter == null) { + mAdapter = new PatientTeachAdapter(data); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多患教了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode==80&&resultCode==80&&data!=null){ + Intent intent = new Intent(); + if (StringUtil.isEmpty(data.getStringExtra("imagUrl"))) { + intent.putExtra("imagUrl", + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + intent.putExtra("imagUrl",data.getStringExtra("imagUrl")); + } + System.out.println("datas.getImgPath()== " + data.getStringExtra("imagUrl")); + + intent.putExtra("url", data.getStringExtra("url")); + intent.putExtra("title", data.getStringExtra("title")); + intent.putExtra("uuid", data.getStringExtra("uuid")); + intent.putExtra("content",data.getStringExtra("content")); + setResult(70, intent); + finish(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientVideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientVideoActivity.java new file mode 100644 index 0000000..bf69078 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PatientVideoActivity.java @@ -0,0 +1,1079 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.apache.commons.lang.CharUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoGVAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.bean.VideoBean; +import cn.shangyu.gdxzExpert.bean.VideoBean.VideoData; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.big.activity.BigPublicSearchActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.view.MyGridView; +import cn.shangyu.gdxzExpert.view.RoundImageView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PatientVideoActivity extends BaseActivity implements OnCallBackFromNet { + private View view; + private PullToRefreshListView mLv_Video; + private View ll_loading; + private TextView mLoad_empty; + private PatientVideoActivity mActivity; + private VideoAdapter mAdapter; + private VideoBean bean; + private Button mBt_send_mind; + + private RelativeLayout mRl_List, mRl_Gv; + private GridView mGv_screen; + private ListView mLv_title; + private DrawableCenterButtonR mbt_screen; + private LinearLayout mLl_title; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private Button mBt_sure, mBt_reset; + private String mCheckedTitle; + private TitleAdapter mAdapter3; + private ImageView mIm_All1, mIm_All2; + private TextView mTv_Title; + private int page = 1; + private VideoSAdapter mAdapter4; + private String typeUuid= "0e5fa3d76b8047528fdd3c452b77e9dd"; + private List data; + private DrawableCenterCheckBox cb_sort; + private String sort = "2";//最新 + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("患教视频"); + top_right.setImageResource(R.drawable.search); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setText(getResources().getString(R.string.gandanshipin)); + top_title.setTextSize(23); + top_right.setImageResource(R.drawable.big_search); + + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_video); + initView(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("患教视频"); + } + + private void initView() { + mLv_Video = (PullToRefreshListView) view.findViewById(R.id.lv_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + mBt_send_mind = (Button) view.findViewById(R.id.bt_send_mind); + mbt_screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_screen); + mLl_title = (LinearLayout) view.findViewById(R.id.ll_title); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mLv_title = (ListView) view.findViewById(R.id.lv_title); + mRl_List = (RelativeLayout) view.findViewById(R.id.rl_pop_list); + mRl_Gv = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mTv_Title = (TextView) view.findViewById(R.id.tv_title); + mIm_All1 = (ImageView) view.findViewById(R.id.imageView1); + mIm_All2 = (ImageView) view.findViewById(R.id.imageView2); + cb_sort = (DrawableCenterCheckBox) view.findViewById(R.id.cb_sort);//最新,最热 + LinearLayout ll_go_patient_video1 = view.findViewById(R.id.ll_go_patient_video1); + ll_go_patient_video1.setVisibility(View.GONE); + mLoad_empty.setText("暂无患教视频"); + mTv_Title.setText("乙肝"); + mLv_Video.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + setLastUpdateTime(); + mActivity = this; + mBt_send_mind.setVisibility(View.GONE); + mLv_Video.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getVideoByKey(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getVideoByKey(); + } + }); + mBt_send_mind.setOnClickListener(this); + mbt_screen.setOnClickListener(this); + mLl_title.setOnClickListener(this); + cb_sort.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + page = 1; + if (isChecked){ + sort = "1"; + cb_sort.setText("最热"); + }else { + sort = "2"; + cb_sort.setText("最新"); + } + getVideoByKey(); + } + }); + initListener(); + getDataResult(); + getTagList(); + } + + private void initListener() { + // TODO Auto-generated method stub + mGv_screen.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_Gv.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + page = 1; + if (StringUtil.isEmpty(typeUuid) && Tags.size() == 0) { + mLv_Video.setMode(Mode.DISABLED); + getDataResult(); + } else { + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + } + } + }); + mLv_title.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (position == 0) { + mCheckedTitle = "全部视频"; + mTv_Title.setText("全部视频"); + mIm_All2.setImageResource(R.drawable.all_video); + mIm_All1.setImageResource(R.drawable.video_all); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + typeUuid = ""; + if (Tags == null || Tags.size() == 0) { + mLv_Video.setMode(Mode.DISABLED); + getDataResult(); + } else { + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + } + + } else { + page = 1; + mCheckedTitle =data.get(position - 1).getName(); + if (mCheckedTitle.length()>13){ + mTv_Title.setText(mCheckedTitle.substring(0,12)+"..."); + }else { + mTv_Title.setText(mCheckedTitle); + } + mIm_All2.setImageResource(R.drawable.select_video); + mIm_All1.setImageResource(R.drawable.video_select); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + typeUuid = data.get(position - 1).getUuid(); + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + + } + mAdapter3.notifyDataSetChanged(); + mRl_List.setVisibility(View.GONE); + } + }); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getTagList() { + Map param = new HashMap(); + param.put("type", "5"); + sendParamtoNet(Url.getTagList, param, GET_TAGS_DATAS_RESULT, mActivity, + true); + + } + + public void getVideoByKey() { + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } + showProgressDialog("请稍候"); + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", keywords.toString()); + param.put("typeUuid", typeUuid); + param.put("sort", sort); + sendJsonPostParamtoNetSignMD5(Url.getPatientVideoByKeyWordsNew, param, GET_DATAS_BY_KEY_RESULT, + mActivity); + } + + /** + * 获取列表数据 + */ + public static final int GET_VIDEO_DATAS_RESULT = 101; + public static final int GET_TAGS_DATAS_RESULT = 102; + public static final int GET_DATAS_BY_KEY_RESULT = 103; + + public static final int GET_READ_NUM_RESULT = 201; + public static final int GET_MORE_NUM_RESULT = 301; + public static final int GET_READ_NUM_RESULT2 = 401; + + public void getDataResult() { + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(Url.getPtientVideoNew, param, GET_VIDEO_DATAS_RESULT, mActivity); + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_right) { + if(BigModule()) + { + Intent intent = new Intent(mActivity, BigPublicSearchActivity.class); + intent.setType("patientVideo"); + startActivity(intent); + } + else + { + Intent intent = new Intent(mActivity, PublicSearchActivity.class); + intent.setType("patientVideo"); + startActivity(intent); + } + } else if (id == R.id.bt_send_mind) { + Intent intent1 = new Intent(mActivity, SendMindActivity.class); + startActivity(intent1); + } else if (id == R.id.bt_screen) { + // mRl_List, mRl_Gv; + if (mTagList == null) { + getTagList(); + } + if (mRl_Gv.getVisibility() == View.GONE) { + mRl_Gv.setVisibility(View.VISIBLE); + if (mRl_List.getVisibility() == View.VISIBLE) { + mRl_List.setVisibility(View.GONE); + } + } else { + mRl_Gv.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + } + } else if (id == R.id.ll_title) { + if (mRl_List.getVisibility() == View.GONE) { + mRl_List.setVisibility(View.VISIBLE); + if (mRl_Gv.getVisibility() == View.VISIBLE) { + mRl_Gv.setVisibility(View.GONE); + } + } else { + mRl_List.setVisibility(View.GONE); + } + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("resultJson", resultCode+resultJson); + switch (resultCode) { + case GET_TAGS_DATAS_RESULT: + processTage(resultJson); + break; + case GET_VIDEO_DATAS_RESULT: + processData(resultJson); + break; + case GET_DATAS_BY_KEY_RESULT: + processDatalist(resultJson); + break; + default: + break; + } + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + try { + bean = GsonTools.fromGsonToBean(result, VideoBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + } else { + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + + if (bean.data == null || bean.data.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + + return; + } else { + mLoad_empty.setVisibility(View.GONE); + // mList.addAll(bean.data.list); + } + mAdapter4 = null; + /**去除z-BMS患者端*/ + data = new ArrayList<>(); + data.addAll(bean.data); + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + data.get(i).setName(s); + } + } + } + + //显示全部默认最新视频 + getVideoByKey(); + + //取消更多显示 +// if (mAdapter == null) { +// mAdapter = new VideoAdapter(data); +// mLv_Video.getRefreshableView().setAdapter(mAdapter); +// } else { +// mAdapter.getDatas(data); +// mAdapter.notifyDataSetChanged(); +// } + if (mAdapter3 == null) { + mAdapter3 = new TitleAdapter(); + mLv_title.setAdapter(mAdapter3); + } + loaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_READ_NUM_RESULT: + if (requestCode == GET_READ_NUM_RESULT) { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < this.data.size(); i++) { + for (int j = 0; j < this.data.get(i).video.size(); j++) { + if (this.data.get(i).video.get(j).getUuid() + .equals(uuid)) { + String Snum = this.data.get(i).video.get(j) + .getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + this.data.get(i).video.get(j).setReadnum( + Inum + ""); + mAdapter.notifyDataSetChanged(); + } + } + } + } + } else { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < beanlists.size(); i++) { + if (beanlists.get(i).getUuid().equals(uuid)) { + String Snum = beanlists.get(i).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + beanlists.get(i).setReadnum(Inum + ""); + mAdapter4.notifyDataSetChanged(); + + } + } + } + } + + break; + case GET_MORE_NUM_RESULT: + + getDataResult(); + break; + default: + break; + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (mTagList != null && mTagList.data.size() > 0) { + return mTagList.data.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + + public class TitleAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return data.size() + 1; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if (position == 0) { + return "全部视频"; + } + return data.get(position - 1); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position - 1; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(mActivity); + if (position == 0) { + tv_item.setText("全部视频"); + } else { + tv_item.setText(data.get(position - 1).getName()); + } + if ("全部视频".equals(mCheckedTitle) && position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + if (position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } else { + if (mCheckedTitle != null + && mCheckedTitle.equals(data.get(position - 1) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + } + tv_item.setTextSize(15); + tv_item.setPadding(10, dip2px(mActivity, 10), 10, + dip2px(mActivity, 10)); + return tv_item; + } + + } + + private List beanlists = new ArrayList(); + + private void processDatalist(String result) { + LogUtil.i("视频列表result = "+result); + VideoMoreBean bean = GsonTools.fromGsonToBean(result, + VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + // mLv_Video.setEmptyView(mLoad_empty); + mLoad_empty.setVisibility(View.VISIBLE); + mAdapter = null; + mLv_Video.setAdapter(null); + + loaded(); + return; + + } else { + mLoad_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + beanlists.get(i).setVideo_type_name(s); + } + } + } + + } + + + + if (mAdapter4 != null) { + mLv_Video.setAdapter(mAdapter4); + } + } + } else { + // 加载更多下一页时候e + if (bean != null || bean.data != null) { + beanlists.addAll(bean.data.list); + } else { + ToastUtil.showMessage("没有更多数据了"); + } + + } + mAdapter = null; + // 更新 + if (mAdapter4 == null) { + mAdapter4 = new VideoSAdapter(beanlists); + mLv_Video.getRefreshableView().setAdapter(mAdapter4); + } else { + mAdapter4.getDatas(beanlists); + mAdapter4.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mLv_Video.setMode(Mode.PULL_FROM_START); + + } else { + mLv_Video.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + closeProgressDialog(); + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + public class VideoAdapter extends BaseAdapter { + private List datas; + + public VideoAdapter(List datas) { + // TODO Auto-generated constructor stub + this.datas = datas; + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder holder; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video); + holder = new ViewHolder(); + holder.mGv = (MyGridView) convertView.findViewById(R.id.mgv_video); + holder.mTv_Title = (TextView) convertView. findViewById(R.id.tv_video_title); + holder.mTv_more = (TextView) convertView.findViewById(R.id.tv_video_more); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.mTv_Title.setText(datas.get(position).getName()); + holder.mTv_more.setTag(position); + holder.mTv_more.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, VideoMoreActivity.class); + intent.putExtra("uuid", datas.get((int) v.getTag()).getUuid()); + intent.putExtra("title", datas.get((int) v.getTag()).getName()); + intent.setType("video2"); + mActivity.startActivityForResult(intent, + mActivity.GET_MORE_NUM_RESULT); + } + }); +// holder.mAdapter.getList(datas.get(position).video); + if(holder.mGv!=null){ + VideoGVAdapter mAdapter = new VideoGVAdapter(mActivity,datas.get(position).video); + holder.mGv.setAdapter(mAdapter); + } + holder.mGv.setTag(position); + holder.mGv.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int Num = (int) parent.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait, datas.get(Num).video.get(position) + .getPolyv_uuid()); + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); +// intent.putExtra("uuid",data.get(position).getUuid()); +// startActivity(intent1); +// Intent intent = new Intent(mActivity, VideoDetilActivity.class); + intent.putExtra("url", datas.get(Num).video.get(position) + .getPath()); + intent.putExtra("uuid", datas.get(Num).video.get(position).getUuid()); + intent.putExtra("vid", datas.get(Num).video.get(position).getPolyv_uuid()); + intent.putExtra("note", datas.get(Num).video.get(position) + .getNote()); + intent.putExtra("title", datas.get(Num).video.get(position) + .getName()); + intent.putExtra("readnum", datas.get(Num).video.get(position) + .getReadnum()); + intent.putExtra("imgpath", datas.get(Num).video.get(position) + .getImgpath()); + intent.putExtra("public_name", + datas.get(Num).video.get(position).getPublic_name()); + intent.putExtra("ispatientvideo",true); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT); + } + }); + return convertView; + } + + class ViewHolder { + TextView mTv_Title, mTv_more; + MyGridView mGv; + VideoGVAdapter mAdapter; + } + + } + public class VideoSAdapter extends BaseAdapter { + private List lists; + + public VideoSAdapter(List lists) { + this.lists = lists; + + } + + public void getDatas(List lists) { + this.lists = lists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (lists.size() % 2 == 1) { + return lists.size() / 2 + 1; + } + return lists.size() / 2; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_list); + vh = new ViewHolder(); + vh.mIv_Video1 = (RoundImageView) convertView + .findViewById(R.id.iv_video_gv1); + vh.mTv_title1 = (TextView) convertView + .findViewById(R.id.tv_video_content1); + vh.mTv_name1 = (TextView) convertView + .findViewById(R.id.tv_video_name1); + vh.mTv_lookNum1 = (TextView) convertView + .findViewById(R.id.tv_video_num1); + vh.mIv_Video2 = (RoundImageView) convertView + .findViewById(R.id.iv_video_gv2); + vh.mTv_title2 = (TextView) convertView + .findViewById(R.id.tv_video_content2); + vh.mTv_name2 = (TextView) convertView + .findViewById(R.id.tv_video_name2); + vh.mTv_lookNum2 = (TextView) convertView + .findViewById(R.id.tv_video_num2); + vh.mRl_second = (RelativeLayout) convertView + .findViewById(R.id.rl_second_view); + vh.mRl_first = (RelativeLayout) convertView + .findViewById(R.id.rl_first_view); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml + lists.get(position * 2).getImgpath(), + vh.mIv_Video1, + ImageOptions.getImageOptions(R.drawable.default_video)); + vh.mTv_title1.setText(lists.get(position * 2).getName()); + vh.mTv_name1.setText(lists.get(position * 2).getPublic_name()); + vh.mTv_lookNum1.setText(lists.get(position * 2).getReadnum()); + if (lists.size() / 2 == position && lists.size() % 2 == 1) { + vh.mRl_second.setVisibility(View.INVISIBLE); + } else { + vh.mRl_second.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + lists.get(position * 2 + 1).getImgpath(), + vh.mIv_Video2, + ImageOptions.getImageOptions(R.drawable.default_video)); + vh.mTv_title2.setText(lists.get(position * 2 + 1).getName()); + vh.mTv_name2.setText(lists.get(position * 2 + 1).getPublic_name()); + vh.mTv_lookNum2.setText(lists.get(position * 2 + 1).getReadnum()); + } + vh.mRl_first.setTag(position); + vh.mRl_first.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + int Num = (int) v.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", lists.get(Num * 2).getPath()); + intent.putExtra("uuid", lists.get(Num * 2).getUuid()); + intent.putExtra("note", lists.get(Num * 2).getNote()); + intent.putExtra("title", lists.get(Num * 2).getName()); + intent.putExtra("readnum", lists.get(Num * 2).getReadnum()); + intent.putExtra("imgpath", lists.get(Num * 2).getImgpath()); + intent.putExtra("need_inside_share", "yes"); + intent.putExtra("public_name", lists.get(Num * 2) + .getPublic_name()); + intent.putExtra("getTags", lists.get(Num * 2 ).getTags()); + intent.putExtra("ispatientvideo",true); + intent.putExtra("pagetype","患教视频"); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT2); +// needreportDetail("患教视频",lists.get(Num * 2).getTags(),lists.get(Num * 2).getName()); + } + }); + vh.mRl_second.setTag(position); + vh.mRl_second.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + int Num = (int) v.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", lists.get(Num * 2 + 1).getPath()); + intent.putExtra("uuid", lists.get(Num * 2 + 1).getUuid()); + intent.putExtra("note", lists.get(Num * 2 + 1).getNote()); + intent.putExtra("title", lists.get(Num * 2 + 1).getName()); + intent.putExtra("readnum", lists.get(Num * 2 + 1).getReadnum()); + intent.putExtra("imgpath", lists.get(Num * 2 + 1).getImgpath()); + intent.putExtra("need_inside_share", "yes"); + intent.putExtra("public_name", lists.get(Num * 2 + 1) + .getPublic_name()); + intent.putExtra("getTags", lists.get(Num * 2 + 1).getTags()); + intent.putExtra("ispatientvideo",true); + intent.putExtra("pagetype","患教视频"); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT2); + +// needreportDetail("患教视频",lists.get(Num * 2+1).getTags(),lists.get(Num * 2 + 1).getName()); + + } + }); + return convertView; + } + + class ViewHolder { + RoundImageView mIv_Video1, mIv_Video2; + RelativeLayout mRl_second, mRl_first; + TextView mTv_title1, mTv_name1, mTv_lookNum1, mTv_title2, mTv_name2, + mTv_lookNum2; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayActivity.java new file mode 100644 index 0000000..e150ea4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayActivity.java @@ -0,0 +1,692 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.app.AlertDialog.Builder; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.gyf.immersionbar.ImmersionBar; +import com.pingplusplus.android.Pingpp; +import com.tencent.mm.opensdk.modelpay.PayReq; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PayWechatBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DestroyActivityUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.OneClickUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PayActivity extends BaseActivity implements OnCallBackFromNet, + OnCheckedChangeListener{ + private Intent getintent; + private View view; + private Button mBt_pay; + private PayActivity mActivity; + private CheckBox mCb_balance, mCb_zhifubao, mCb_weixin, mCb_yinlian; + private LinearLayout mLl_balance, mLl_zhifubao, mLl_weixin, mLl_yinlian; + private String CHANNEL_ZHIFUBAO = "alipay"; + private String CHANNEL_WEIXIN = "wx"; + private String CHANNEL_YINLAN = "upacp"; + + private String payChannel = "0"; + private String pay_money; + private String order_id; + private TextView mTv_pay_money, mTv_pay_yue, mTv_monet_enough,pay_name,pay_type; + private String uuid; + private double pay; + private boolean NoMoney = false; + // private boolean isDetail = false; + private boolean paySUCCESS = false; + private String paymoney; + private String jifen; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("在线支付"); +// pay_money = getIntent().getStringExtra("money"); +// order_id = getIntent().getStringExtra("order_id"); + // if (getIntent().getType() != null + // && getIntent().getType().equals("detail")) { + // isDetail = true; + // } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + mActivity = this; +// api = WXAPIFactory.createWXAPI(this, Constant.WeId,false); +// Intent intent = getIntent(); +// api.handleIntent(intent, this); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_pay); + mBt_pay = (Button) view.findViewById(R.id.bt_pay); + mCb_balance = (CheckBox) view.findViewById(R.id.cb_pay_balance); + mCb_zhifubao = (CheckBox) view.findViewById(R.id.cb_pay_zhifubao); + mCb_weixin = (CheckBox) view.findViewById(R.id.cb_pay_weixin); + mCb_yinlian = (CheckBox) view.findViewById(R.id.cb_pay_yinlian); + mLl_balance = (LinearLayout) view.findViewById(R.id.ll_pay_balance); + mLl_zhifubao = (LinearLayout) view.findViewById(R.id.ll_pay_zhifubao); + mLl_weixin = (LinearLayout) view.findViewById(R.id.ll_pay_weixin); + mLl_yinlian = (LinearLayout) view.findViewById(R.id.ll_pay_yinlian); + mTv_pay_money = (TextView) view.findViewById(R.id.tv_pay_money); + pay_type = (TextView) view.findViewById(R.id.pay_type); + pay_name = (TextView) view.findViewById(R.id.pay_name); + mTv_monet_enough = (TextView) view.findViewById(R.id.tv_money_enough); + mTv_pay_yue = (TextView) view.findViewById(R.id.tv_yue); + uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + initIntent(); + initListener(); + getUserResult(); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + pay_money = getIntent().getStringExtra("money"); + order_id = getIntent().getStringExtra("order_id"); + paymoney = getIntent().getStringExtra("pay"); + jifen = getIntent().getStringExtra("jifen"); + if (StringUtil.isEmpty(jifen)){//送心意 + pay = Double.parseDouble(pay_money); + mTv_pay_money.setText( (pay / 100) + "元"); + }else {//购买积分 + pay = Double.parseDouble(pay_money); + mTv_pay_money.setText(paymoney); + pay_type.setVisibility(View.GONE); + pay_name.setText("您购买了"+jifen+"积分"); + } + + } + + private void initListener() { + // TODO Auto-generated method stub + mBt_pay.setOnClickListener(this); + mCb_balance.setOnCheckedChangeListener(this); + mCb_zhifubao.setOnCheckedChangeListener(this); + mCb_weixin.setOnCheckedChangeListener(this); + mCb_yinlian.setOnCheckedChangeListener(this); + mLl_balance.setOnClickListener(this); + mLl_weixin.setOnClickListener(this); + mLl_yinlian.setOnClickListener(this); + mLl_zhifubao.setOnClickListener(this); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + // TODO Auto-generated method stub + + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int buttonId = buttonView.getId(); + if (buttonId == R.id.cb_pay_balance) { + if (isChecked) { + payChannel = "balance"; + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + if (NoMoney) { + payChannel = "0"; + } + } + else + { + payChannel = "0"; + if(mCb_weixin.isChecked()) + { + payChannel = CHANNEL_WEIXIN; + } + } + if (NoMoney) { + ToastUtil.showMessage("余额不足"); + mCb_balance.setChecked(false); + } + } else if (buttonId == R.id.cb_pay_zhifubao) { + if (isChecked) { + payChannel = CHANNEL_ZHIFUBAO; + mCb_balance.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + } + } else if (buttonId == R.id.cb_pay_weixin) { + if (isChecked) { + payChannel = CHANNEL_WEIXIN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_yinlian.setChecked(false); + } + else + { + payChannel = "0"; + if(mCb_balance.isChecked()) + { + payChannel = "balance"; + } + } + } else if (buttonId == R.id.cb_pay_yinlian) { + if (isChecked) { + payChannel = CHANNEL_YINLAN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + } + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_pay) { +// if(payChannel!=null) +// { +// PayReq request = new PayReq(); +// request.appId = Constant.WeId; +// request.partnerId = Constant.PayId; +// request.prepayId= "1101000000140415649af9fc314aa427"; +// request.packageValue = "Sign=WXPay"; +// request.nonceStr= "1101000000140429eb40476f8896f4c9"; +// request.timeStamp= "1398746574"; +// request.sign="oR9d8PuhnIc+YZ8cBHFCwfgpaK9gd7vaRvkYD7rthRAZ+QBhcCYL21N7cHCTUxbQ+EAt6Uy+lwSN22f5YZvI45MLko8Pfso0jm46v5hqcVwrk6uddkGuT+Cdvu4WBqDzaDjnNa5UK3GfE1Wfl2gHxIIY5lLdUgWFts17D4WuolLLkiFZV+JSHMvH7eaLdT9N5GBovBwu5yYKUR7skR8Fu+LozcSqQixnlEZUfyE55feLOQTUYzLmR9pNtPbPsu6WVhbNHMS3Ss2+AehHvz+n64GDmXxbX++IOBvm2olHu3PsO"; +// api.sendReq(request); +// return; +// } + + + if (!payChannel.equals("0")) { + if(OneClickUtil.isFastDoubleClick(R.id.bt_pay,1500)) + { + + return; + } + if (payChannel.equals("balance")) { + if (NoMoney) { + ToastUtil.showMessage("请选择付款方式"); + mCb_balance.setChecked(false); + }else { + sendMessageDialog(); + } + + } else{ + + getPayChargeResult(""); + } + + } else { + ToastUtil.showMessage("请选择付款方式"); + } + } else if (id == R.id.ll_pay_balance) { + payChannel = "balance"; + mCb_balance.setChecked(true); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + + if (NoMoney) { + ToastUtil.showMessage("余额不足"); + mCb_balance.setChecked(false); + } + } else if (id == R.id.ll_pay_zhifubao) { + payChannel = CHANNEL_ZHIFUBAO; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(true); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + } else if (id == R.id.ll_pay_weixin) { + payChannel = CHANNEL_WEIXIN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(true); + mCb_yinlian.setChecked(false); + } else if (id == R.id.ll_pay_yinlian) { + + payChannel = CHANNEL_YINLAN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(true); + } + } + + public static final int GET_CREATE_ORDER_RESULT = 101; + public static final int GET_USER_DATA_RESULT = 201; + public static final int GET_PAYR_SUCCESS_RESULT = 301; + public static final int PAYPOINTORDER = 401; + + // public void getPayResult() { + // String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + // Map param = new HashMap(); + // param.put("uid", uuid); + // param.put("amount", 1 + ""); + // param.put("subject", "dasdkljh"); + // param.put("body", "asdasd"); + // sendParamtoNet(Url.getCreateOrder, param, GET_CREATE_ORDER_RESULT, + // mActivity, true); + // } + + public void getPayChargeResult(String password) { + Map param = new HashMap(); +// param.put("amount", pay_money); +// param.put("order_id", order_id); +// param.put("expert_uuid", uuid); + param.put("trade_no", order_id); + param.put("channel", payChannel); + + if (CHANNEL_YINLAN.equals(payChannel)){ + ToastUtil.showMessage("暂不支持"); + }else { + if (StringUtil.isEmpty(jifen)){//不是购买积分 + if (payChannel.equals("balance")) { + param.put("pwd", password); + } + + + sendJsonPostParamtoNetSignMD5(Url.getPayXinYiOrder, param, GET_CREATE_ORDER_RESULT, this); + }else {//购买积分 + if (payChannel.equals("balance")) { + param.put("pwd", password); + }else { + param.put("pwd", ""); + } + sendJsonPostParamtoNetSignMD5(Url.payPointOrder, param, GET_CREATE_ORDER_RESULT, this); + } + } + } + public void getUserResult() { + Map param = new HashMap(); +// param.put("user_uuid", uuid); + sendJsonPostParamtoNetSignMD5(Url.getRetrieveUser, param, GET_USER_DATA_RESULT, + this); + } + + // 完成订单 + public void getPaySucceedResult() { + Map param = new HashMap(); + param.put("order_id", order_id); + if (StringUtil.isEmpty(jifen)){ + sendParamtoNet(Url.getpayXinyiOrderSucceed, param, + GET_PAYR_SUCCESS_RESULT, mActivity, true); + }else { + + sendParamtoNet(Url.payPointOrderSucceed, param, + GET_PAYR_SUCCESS_RESULT, mActivity, true); + } + + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+" "+resultJson); + // TODO Auto-generated method stub + switch (resultCode) { + case 102: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + if("SUCCESS".equals(jsonObject.getJSONObject("data").getString("tradeState"))) + { + Constant.WePayed=true; + aaa(); + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case GET_USER_DATA_RESULT: +// RetrieveUser bean = GsonTools.fromGsonToBean(resultJson, +// RetrieveUser.class); + double yue = 0.0; + + try { + JSONObject jsonObject = new JSONObject(resultJson); + if (!"200".equals(jsonObject.getString("code"))) { + ToastUtil.showMessage(jsonObject.getString("msg")); + return; + } + yue = jsonObject.getDouble("data"); + + } catch (JSONException e) { + e.printStackTrace(); + + } + + mTv_pay_yue.setText("余额支付¥" + String.format("%.2f", yue / 100)); + if (pay > yue) { + NoMoney = true; + mTv_monet_enough.setVisibility(View.VISIBLE); + } else { + mTv_monet_enough.setVisibility(View.INVISIBLE); + + } + + + break; + case GET_CREATE_ORDER_RESULT: + if(payChannel.equals("balance")) + { + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + Constant.WePayed=true; + aaa(); + } + else + { + ToastUtil.showToast(jsonObject.getString("msg")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + return; + } + PayWechatBean payBean= GsonTools.fromGsonToBean(resultJson, + PayWechatBean.class); + if(payBean!=null&&"200".equals(payBean.getCode())) + { + PayReq request = new PayReq(); + request.appId = payBean.getData().getAppid(); + request.partnerId = payBean.getData().getPartnerid(); + request.prepayId= payBean.getData().getPrepayid(); + request.packageValue = payBean.getData().getPackage_str(); + request.nonceStr= payBean.getData().getNoncestr(); + request.timeStamp= payBean.getData().getTimestamp(); + request.sign=payBean.getData().getSign(); + api.sendReq(request); +// Log.d("WXEntryActivity","pay "+pay); + + } + else + { + ToastUtil.showToast(payBean.getMessage()); + } +// LogUtil.i("resultJson = "+resultJson); +// if (payChannel.equals("")) { +// if ("\"SUCCEED\"".equals(resultJson)) { +// getPaySucceedResult(); +// } else if("\"密码错误\"".equals(resultJson)) { +// ToastUtil.showMessage("密码错误"); +// }else{ +// ToastUtil.showMessage("支付失败"); +// } +// +// } else { +// String result = StringEscapeUtils.unescapeJava(resultJson); +// if (!StringUtil.isEmpty(result)) { +// String sssss = result.substring(1, result.length() - 1); +// Pingpp.createPayment(PayActivity.this, sssss); +// } else { +// ToastUtil.showMessage("服务器异常"); +// } +// +// } + + break; + case GET_PAYR_SUCCESS_RESULT: + if ("\"SUCCEED\"".equals(resultJson)) { + ToastUtil.showMessage("支付成功"); + paySUCCESS = true; + aaa(); + } + break; + default: + break; + } + } + + private ECAlertDialog buildAlert; + + public void aaa() { + if (StringUtil.isEmpty(jifen)){ + buildAlert = ECAlertDialog.buildAlert(mActivity, "送心意成功,谢谢您对肝胆相照平台的支持", + null, "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mActivity.finish(); + buildAlert.dismiss(); + + } + }); + }else { + buildAlert = ECAlertDialog.buildAlert(mActivity, "购买"+jifen+"积分成功,谢谢您对肝胆相照平台的支持", + null, "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DestroyActivityUtil.destoryActivity("BuyIntegerActivty"); + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PayActivity.this); + Intent intent = new Intent("SIGNIN_ACTION"); + intent.putExtra("sign", true); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + mActivity.finish(); + buildAlert.dismiss(); + needreportPays("order_jifenbuy",paymoney.replace("元",""),"元",jifen,null,null,"我的积分"); + } + }); + } + + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) { + if (resultCode == Activity.RESULT_OK) { + String result = data.getExtras().getString("pay_result"); + if (result.equals("success")) { + getPaySucceedResult(); + } + // 处理返回值 + // "success" - 支付成功 + // "fail" - 支付失败 + // "cancel" - 取消支付 + // "invalid" - 支付插件未安装(一般是微信客户端未安装的情况) + String errorMsg = data.getExtras().getString("error_msg"); // 错误信息 + String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息 + // showMsg(result, errorMsg, extraMsg); + if (result.equals("cancel")) { + ToastUtil.showMessage("已取消支付"); + } + if (result.equals("fail")) { + ToastUtil.showMessage("支付失败,请重新支付"); + } + if (result.equals("invalid")) { + ToastUtil.showMessage("请安装微信客户端"); + } + } + } + } + + public void showMsg(String title, String msg1, String msg2) { + String str = title; + if (null != msg1 && msg1.length() != 0) { + str += "\n" + msg1; + } + if (null != msg2 && msg2.length() != 0) { + str += "\n" + msg2; + } + Builder builder = new Builder(this); + builder.setMessage(str); + builder.setTitle("提示"); + builder.setPositiveButton("OK", null); + builder.create().show(); + } + + private Dialog dialog; + EditText mEt_getpassword; + + protected void sendMessageDialog() { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(mActivity); + RelativeLayout layout = (RelativeLayout) inflater.inflate( + R.layout.dialog_get_password, null); + // 2. 新建对话框对象 + dialog = new Builder(mActivity, + R.style.Theme_Light_FullScreenDialogAct).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + // 只用下面这一行弹出对话框时需要点击输入框才能弹出软键盘 + dialog.getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + Button btn_cancel = (Button) layout.findViewById(R.id.dilaog_cancel); + Button btn_sure = (Button) layout.findViewById(R.id.dilaog_sure); + mEt_getpassword = (EditText) layout.findViewById(R.id.et_get_password); + btn_cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + hideSoftKeyboard(v); + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + String password = mEt_getpassword.getText().toString().trim(); + if (!StringUtil.isEmpty(password)) { + getPayChargeResult(password); + hideSoftKeyboard(v); + dialog.dismiss(); + } else { + ToastUtil.showMessage("请输入您的登陆密码"); + } + + } + }); + + } + + @Override + protected void onResume() { + super.onResume(); + if(Constant.WePayed) + { + aaa(); + } + else + { + getOrderStatus(); + } + } + private void getOrderStatus() + { if(order_id==null) + { + order_id=getIntent().getStringExtra("order_id"); + } + Map param = new HashMap<>(); +// param.put("trade_no","99361202930720"); + param.put("trade_no",order_id); + Log.d("WXEntryActivity","orderId "+order_id); + sendJsonPostParamtoNetSignMD5(Url.getOrderStatus,param,102,this); + + } + @Override + public void finish() { + // TODO Auto-generated method stub + if (Constant.WePayed) { + Intent intent = new Intent(); + setResult(201, intent); + } + super.finish(); + } + + @Override + protected void onDestroy() { + Constant.WePayed=false; + super.onDestroy(); + } + public void hideSoftKeyboard(View localView) { + InputMethodManager inputMethodManager = (InputMethodManager) ct + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { +// View localView = ((Activity) ct).getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayClassActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayClassActivity.java new file mode 100644 index 0000000..349d2e2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayClassActivity.java @@ -0,0 +1,724 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY_PAYING; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY_PAYING_STATUS; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY_PAYING_TYPE; +import static cn.shangyu.gdxzExpert.utils.StringUtil.getYen; +import static cn.shangyu.gdxzExpert.utils.Url.createExcellencourseMixedOrder; +import static cn.shangyu.gdxzExpert.utils.Url.excellencoursePayPage; +import static cn.shangyu.gdxzExpert.utils.Url.payExcellencourseOrderSucceed; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.pingplusplus.android.Pingpp; +import com.tencent.mm.opensdk.modelpay.PayReq; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PageBean; +import cn.shangyu.gdxzExpert.bean.PayBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.WordWrapView; + +public class PayClassActivity extends BaseActivity implements OnCallBackFromNet { + + CircularRectangle im_j; + TextView tv_n,tv_jn; + WordWrapView l_tag; + TextView tv_pr,tv_jifen,tv_yue,tv_zong,im_yuan,tv_shifu,use_jifen,use_yue,im_buy; + String price,tags,imgurl,title,excellencourse_id; + PageBean pageBean; + + RelativeLayout l_needpay; + Button pay_now; + Boolean onlyjf=false,onlyye=false; + double firstprice,change,yue,secondprice,tmpprice,tmpprice1; + int jifen; + CheckBox cb_pay_wx,cb_pay_zfb,im_choose,im_choose1; + String order_pay_type="-1"; + String order_id, amount; + + private String CHANNEL_ZHIFUBAO = "alipay"; + private String CHANNEL_WEIXIN = "wx"; + private String payChannel = CHANNEL_WEIXIN; + private String excellencourse_order_id; + + @Override + public void setTitle() { + top_title.setText("课程支付"); + } + + @Override + public View onCreateSuccessedView() { + + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view= UIUtils.inflate(R.layout.activity_pay_class); + MobclickAgent.onEvent(this,EXPERT_CLASS_QUALITY_PAYING); + price=getIntent().getStringExtra("price"); + price=price.split(getYen())[1]; + firstprice=Double.valueOf(price); + secondprice=firstprice; + tmpprice=0; + tmpprice1=0; + tags=getIntent().getStringExtra("tags"); + imgurl=getIntent().getStringExtra("imgurl"); + title=getIntent().getStringExtra("title"); + excellencourse_id=getIntent().getStringExtra("excellencourse_id"); + im_j = view.findViewById(R.id.im_j); + tv_n=view.findViewById(R.id.tv_n); + l_tag=view.findViewById(R.id.l_tag); + tv_pr=view.findViewById(R.id.tv_pr); + tv_jifen=view.findViewById(R.id.tv_jifen); + tv_jn=view.findViewById(R.id.tv_jn); + tv_yue=view.findViewById(R.id.tv_yue); + use_jifen=view.findViewById(R.id.use_jifen); + use_yue=view.findViewById(R.id.use_yue); + tv_zong=view.findViewById(R.id.tv_zong); + tv_shifu=view.findViewById(R.id.tv_shifu); + im_yuan=view.findViewById(R.id.im_yuan); + im_choose=view.findViewById(R.id.im_choose); + im_choose1=view.findViewById(R.id.im_choose1); + im_buy=view.findViewById(R.id.im_buy); + l_needpay=view.findViewById(R.id.l_needpay); + pay_now=view.findViewById(R.id.pay_now); + cb_pay_zfb=view.findViewById(R.id.cb_pay_zfb); + cb_pay_wx=view.findViewById(R.id.cb_pay_wx); + pay_now.setOnClickListener(this); + l_needpay.setOnClickListener(this); + im_buy.setOnClickListener(this); + + tv_pr.setText(getYen()+price); + tv_zong.setText(getYen()+price); + im_yuan.setText(getYen()+price); + tv_shifu.setText(getYen()+price); + ImageLoader.getInstance().displayImage( + imgurl, im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + tv_n.setText(title); + l_tag.removeAllViews(); + if(!StringUtil.isEmpty(tags)) + { + String[]tagss=tags.split(","); + for(String tag:tagss) + { +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( +// LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); +// params.setMargins(0, 0, 20, 0); + TextView textView=new TextView(this); + textView.setText(tag); + textView.setTextColor(Color.parseColor("#666666")); + textView.setTextSize(11); + textView.setGravity(Gravity.CENTER); + textView.setPadding(8,1,8,1); + textView.setBackground(getResources().getDrawable(R.drawable.tag_bg)); +// textView.setLayoutParams(params); + l_tag.addView(textView); + } + } + + getexcellencoursePayPage(); + initpaySelect(); + return view; + } + private void getexcellencoursePayPage() + { + showProgressDialog("加载中..."); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(excellencoursePayPage,param,101,this); + } + private void initpaySelect() + { + im_choose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + + + if(!isChecked) + { + onlyjf=false; + + use_jifen.setTextColor(getResources().getColor(R.color.c666666)); + use_jifen.setText("-"+getYen()+"0.00"); + tv_jn.setText(""); + secondprice=secondprice+tmpprice; + if(im_choose1.isChecked()) + { + if(yue0.0001) + { + if(onlyye) + { + im_choose1.setChecked(false); + + } + if(yue0.0001) + { + l_needpay.setVisibility(View.VISIBLE); + if(im_choose.isChecked()&&im_choose1.isChecked()) + { + order_pay_type="7"; + } + else if(im_choose.isChecked()) + { + order_pay_type="6"; + } + else if(im_choose1.isChecked()) + { + order_pay_type="5"; + } + else + { + order_pay_type="4"; + } + createOrder(order_pay_type); + } + + else + { + if(tmpprice1<0.0001&&tmpprice<0.0001) + { + order_pay_type="0"; + } + else if(onlyye) + { + order_pay_type="1"; + } + else if(onlyjf) + { + order_pay_type="2"; + } + else if(firstprice>0) + { + order_pay_type="3"; + } + else + { + order_pay_type="0"; + } + createOrder(order_pay_type); + l_needpay.setVisibility(View.GONE); + } + } else if (id == R.id.l_needpay) { + l_needpay.setVisibility(View.GONE); + } else if (id == R.id.pay_now) { + if(!cb_pay_wx.isChecked()&&!cb_pay_zfb.isChecked()) + { + ToastUtil.showToast("请选择支付方式"); + } + else + { + payOrder(order_id,amount,payChannel); + } + } + + } + private void createOrder(String order_pay_type) + { + Map course1 = new HashMap(); + course1.put("pay_type", order_pay_type);//自定义参数:音乐类型,值:流行 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_TYPE, course1); + showProgressDialog("创建订单中..."); + Map param = new HashMap<>(); + param.put("order_pay_type",order_pay_type); + + param.put("excellencourse_id",excellencourse_id); + Log.d("WXEntryActivity",order_pay_type+"order_pay_type "+" excellencourse_id "+excellencourse_id); + sendJsonPostParamtoNetSignMD5(createExcellencourseMixedOrder,param,102,this); + } + private void successOrder(String excellencourse_order_id) + { + + Map param = new HashMap<>(); + param.put("trade_no",excellencourse_order_id); + sendJsonPostParamtoNetSignMD5(payExcellencourseOrderSucceed,param,103,this); + } + private void payOrder(String order_id,String amount,String channel) + { + PayReq request = new PayReq(); + request.appId = payBean.getData().getOrder().getAppid(); + request.partnerId = payBean.getData().getOrder().getPartnerid(); + request.prepayId= payBean.getData().getOrder().getPrepayid(); + request.packageValue = payBean.getData().getOrder().getPackage_str(); + request.nonceStr= payBean.getData().getOrder().getNoncestr(); + request.timeStamp= payBean.getData().getOrder().getTimestamp(); + request.sign=payBean.getData().getOrder().getSign(); + api.sendReq(request); + Log.d("WXEntryActivity", request.appId+" "+ request.partnerId+""+request.prepayId+" "+ + request.packageValue+" "+request.nonceStr+" "); +// Map param = new HashMap<>(); +// param.put("order_id",order_id); +// param.put("amount",amount); +// param.put("channel",channel); +// sendJsonPostParamtoNetSignMD5(payExcellencourseOrder,param,104,this); + } + private void payResult() + { + Map course1 = new HashMap(); + course1.put("pay_status", "failed");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + Intent intent=new Intent(PayClassActivity.this,PayResultActivity.class); + intent.putExtra("IS_PAY_SUCCESS","no"); + startActivity(intent); + this.finish(); + } + private void paySucesws() + { + Map course1 = new HashMap(); + course1.put("pay_status", "success");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + Intent intent=new Intent(PayClassActivity.this,PayResultActivity.class); + intent.putExtra("IS_PAY_SUCCESS","yes"); + if("学完返现".equals(special_type_name)||"福利课堂".equals(special_type_name)) + { + intent.putExtra("special_type_name",special_type_name); + } + startActivity(intent); + if (!StringUtil.isEmpty(price)) { + int nnum= (int) (Double.valueOf(price)*100); + needreportPays("order_coursebuy",nnum+"","分",1+"",title,tags,"肝胆精品课"); + + } + + this.finish(); + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + PayBean payBean; + String special_type_name; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+" "+resultJson); + switch (resultCode) + {case 105: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + if("SUCCESS".equals(jsonObject.getJSONObject("data").getString("tradeState"))) + { + successOrder(order_id); + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 101: + closeProgressDialog(); + pageBean= GsonTools.fromGsonToBean(resultJson,PageBean.class); + if("200".equals(pageBean.getCode())) + { + jifen=Integer.valueOf(pageBean.getData().getTotalPoints()); + yue=Double.valueOf(pageBean.getData().getAvailableBalance())/100.00; + tv_jifen.setText("("+jifen+"积分)"); + tv_yue.setText("("+getYen()+yue+")"); + change=Double.valueOf(pageBean.getData().getPoints_price_exchange()); + + } + else + { + ToastUtil.showToast(pageBean.getMsg()); + } + break; + case 102: + closeProgressDialog(); + payBean= GsonTools.fromGsonToBean(resultJson,PayBean.class); + + if("200".equals(payBean.getCode())) + { + Map course1 = new HashMap(); + course1.put("pay_status", "order");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + excellencourse_order_id=payBean.getData().getExcellencourse_order_id(); + order_id=payBean.getData().getTrade_no(); + if("third".equals(payBean.getData().getChannel())) + { + + +// order_id=payBean.getData().getOrder().getId(); +// amount=payBean.getData().getOrder().getAmount()+""; + } + else + { + + successOrder(order_id); + + } + } + else if("70001".equals(payBean.getCode())) + { + closeProgressDialog(); + l_needpay.setVisibility(View.GONE); + ECAlertDialog buildAlert = ECAlertDialog.buildAlert( + this, + "课程订单已创建,请前往支付", "取消", "确定", + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + Intent intent2=new Intent(PayClassActivity.this, OrderListActivity.class); + intent2.putExtra("order_status","created"); + startActivity(intent2); + finish(); + } + }); + + buildAlert.setTitle(R.string.app_tip); + buildAlert.show(); + + } + else + { + closeProgressDialog(); + ToastUtil.showMessage(payBean.getMessage()); + + } + break; + case 103: + closeProgressDialog(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + if(jsonObject.optJSONObject("data")!=null) + { + special_type_name=jsonObject.optJSONObject("data").optString("special_type_name"); + } + + paySucesws(); + } + else + { + ToastUtil.showMessage(jsonObject.getString("msg")); + payResult(); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 104: + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + String result = jsonObject.getString("data"); +// String result1 = StringEscapeUtils.unescapeJava(result); + if (!StringUtil.isEmpty(result)) { +// String sssss = result1.substring(1, result.length() - 1); + Pingpp.createPayment(PayClassActivity.this, result); + } else { + ToastUtil.showMessage("服务器异常"); + } + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showMessage("服务器异常"); + } + + break; + + } + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) { + if (resultCode == Activity.RESULT_OK) { + String result = data.getExtras().getString("pay_result"); + if (result.equals("success")) { +// getPaySucceedResult(); + successOrder(excellencourse_order_id); + } + // 处理返回值 + // "success" - 支付成功 + // "fail" - 支付失败 + // "cancel" - 取消支付 + // "invalid" - 支付插件未安装(一般是微信客户端未安装的情况) + String errorMsg = data.getExtras().getString("error_msg"); // 错误信息 + String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息 + // showMsg(result, errorMsg, extraMsg); + if (result.equals("cancel")) { + Map course1 = new HashMap(); + course1.put("pay_status", "cancel");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + ToastUtil.showMessage("已取消支付"); + } + if (result.equals("fail")) { + Map course1 = new HashMap(); + course1.put("pay_status", "failed");//自定义参数,值 + MobclickAgent.onEventObject(this, EXPERT_CLASS_QUALITY_PAYING_STATUS, course1); + ToastUtil.showMessage("支付失败,请重新支付"); + } + if (result.equals("invalid")) { + ToastUtil.showMessage("请安装微信客户端"); + } + } + } + } + + @Override + protected void onResume() { + super.onResume(); + if(Constant.WePayed) + { + successOrder(order_id); + } + else + { + getOrderStatus(); + } + } + private void getOrderStatus() + { if(order_id==null) + { + return; + } + Map param = new HashMap<>(); +// param.put("trade_no","99361202930720"); + param.put("trade_no",order_id); + Log.d("WXEntryActivity",order_id+" order_id "); + sendJsonPostParamtoNetSignMD5(Url.getOrderStatus,param,105,this); + + } + @Override + protected void onDestroy() { + Constant.WePayed=false; + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayCourseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayCourseActivity.java new file mode 100644 index 0000000..dd77b0f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayCourseActivity.java @@ -0,0 +1,617 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.app.AlertDialog.Builder; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.pingplusplus.android.Pingpp; +import com.tencent.mm.opensdk.modelpay.PayReq; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PayWechatBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.OneClickUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PayCourseActivity extends BaseActivity implements OnCallBackFromNet, + OnCheckedChangeListener { + private Intent getintent; + private View view; + private Button mBt_pay; + private PayCourseActivity mActivity; + private CheckBox mCb_balance, mCb_zhifubao, mCb_weixin, mCb_yinlian; + private LinearLayout mLl_balance, mLl_zhifubao, mLl_weixin, mLl_yinlian; + private String CHANNEL_ZHIFUBAO = "alipay"; + private String CHANNEL_WEIXIN = "wx"; + private String CHANNEL_YINLAN = "upacp"; + + private String payChannel = "0"; + private String pay_money; + private String order_id; + private TextView mTv_pay_money, mTv_pay_yue, mTv_monet_enough; + private String uuid; + private double pay; + private boolean NoMoney = false; + // private boolean isDetail = false; + private boolean paySUCCESS = false; + private TextView mTv_pay_name,mTv_pay_type; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("在线支付"); + pay_money = getIntent().getStringExtra("money"); + order_id = getIntent().getStringExtra("order_id"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + mActivity = this; + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_pay); + mBt_pay = (Button) view.findViewById(R.id.bt_pay); + mCb_balance = (CheckBox) view.findViewById(R.id.cb_pay_balance); + mCb_zhifubao = (CheckBox) view.findViewById(R.id.cb_pay_zhifubao); + mCb_weixin = (CheckBox) view.findViewById(R.id.cb_pay_weixin); + mCb_yinlian = (CheckBox) view.findViewById(R.id.cb_pay_yinlian); + mLl_balance = (LinearLayout) view.findViewById(R.id.ll_pay_balance); + mLl_zhifubao = (LinearLayout) view.findViewById(R.id.ll_pay_zhifubao); + mLl_weixin = (LinearLayout) view.findViewById(R.id.ll_pay_weixin); + mLl_yinlian = (LinearLayout) view.findViewById(R.id.ll_pay_yinlian); + mTv_pay_money = (TextView) view.findViewById(R.id.tv_pay_money); + mTv_monet_enough = (TextView) view.findViewById(R.id.tv_money_enough); + mTv_pay_yue = (TextView) view.findViewById(R.id.tv_yue); + uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + mTv_pay_name=(TextView) view.findViewById(R.id.pay_name); + mTv_pay_type=(TextView) view.findViewById(R.id.pay_type); + mTv_pay_type.setText("课件"); + initIntent(); + initListener(); + getUserResult(); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + pay_money = getIntent().getStringExtra("money"); + order_id = getIntent().getStringExtra("order_id"); + String providername = getIntent().getStringExtra("providername"); + mTv_pay_name.setText("下载"+providername+"医生的"); + pay = Double.parseDouble(pay_money); + mTv_pay_money.setText( (pay / 100) + "元"); + } + + private void initListener() { + // TODO Auto-generated method stub + mBt_pay.setOnClickListener(this); + mCb_balance.setOnCheckedChangeListener(this); + mCb_zhifubao.setOnCheckedChangeListener(this); + mCb_weixin.setOnCheckedChangeListener(this); + mCb_yinlian.setOnCheckedChangeListener(this); + mLl_balance.setOnClickListener(this); + mLl_weixin.setOnClickListener(this); + mLl_yinlian.setOnClickListener(this); + mLl_zhifubao.setOnClickListener(this); + } + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int buttonId = buttonView.getId(); + if (buttonId == R.id.cb_pay_balance) { + + if (isChecked) { + payChannel = "balance"; + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + if (NoMoney) { + payChannel = "0"; + } + }else + { + payChannel = "0"; + if(mCb_weixin.isChecked()) + { + payChannel = CHANNEL_WEIXIN; + } + + } + if (NoMoney) { + ToastUtil.showMessage("余额不足"); + mCb_balance.setChecked(false); + } + } else if (buttonId == R.id.cb_pay_zhifubao) { + if (isChecked) { + payChannel = CHANNEL_ZHIFUBAO; + mCb_balance.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + } + } else if (buttonId == R.id.cb_pay_weixin) { + if (isChecked) { + payChannel = CHANNEL_WEIXIN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_yinlian.setChecked(false); + }else + { + payChannel = "0"; + if(mCb_balance.isChecked()) + { + payChannel = "balance"; + } + } + } else if (buttonId == R.id.cb_pay_yinlian) { + if (isChecked) { + payChannel = CHANNEL_YINLAN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + } + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_pay) { + Log.d("WXEntryActivity",payChannel+" payChannel"); + if (!payChannel.equals("0")) { + if(OneClickUtil.isFastDoubleClick(R.id.bt_pay,1500)) + { + + return; + } + if (payChannel.equals("balance")) { + sendMessageDialog(); + } else { + getPayChargeResult(""); + } + + } else { + ToastUtil.showMessage("请选择支付方式"); + } + } else if (id == R.id.ll_pay_balance) { + payChannel = "balance"; + mCb_balance.setChecked(true); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + + if (NoMoney) { + ToastUtil.showMessage("余额不足"); + mCb_balance.setChecked(false); + } + } else if (id == R.id.ll_pay_zhifubao) { + + payChannel = CHANNEL_ZHIFUBAO; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(true); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(false); + } else if (id == R.id.ll_pay_weixin) { + + payChannel = CHANNEL_WEIXIN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(true); + mCb_yinlian.setChecked(false); + } else if (id == R.id.ll_pay_yinlian) { + + payChannel = CHANNEL_YINLAN; + mCb_balance.setChecked(false); + mCb_zhifubao.setChecked(false); + mCb_weixin.setChecked(false); + mCb_yinlian.setChecked(true); + } + } + + public static final int GET_CREATE_ORDER_RESULT = 101; + public static final int GET_USER_DATA_RESULT = 201; + public static final int GET_PAYR_SUCCESS_RESULT = 301; + + // public void getPayResult() { + // String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + // Map param = new HashMap(); + // param.put("uid", uuid); + // param.put("amount", 1 + ""); + // param.put("subject", "dasdkljh"); + // param.put("body", "asdasd"); + // sendParamtoNet(Url.getCreateOrder, param, GET_CREATE_ORDER_RESULT, + // mActivity, true); + // } + + public void getPayChargeResult(String password) { + Map param = new HashMap(); +// param.put("amount", pay_money); + param.put("trade_no", order_id); +// param.put("expert_uuid", uuid); + if (payChannel.equals("balance")) { + param.put("pwd", password); + } + param.put("channel", payChannel); + if (CHANNEL_YINLAN.equals(payChannel)){ + ToastUtil.showMessage("暂不支持"); + }else { + sendJsonPostParamtoNetSignMD5(Url.getPayGanDanFileOrder, param, GET_CREATE_ORDER_RESULT, this); + } + + } + + public void getUserResult() { + Map param = new HashMap(); +// param.put("user_uuid", uuid); + + sendJsonPostParamtoNetSignMD5(Url.getRetrieveUser, param, GET_USER_DATA_RESULT, + this); + } + + // 完成订单 + public void getPaySucceedResult() { + Map param = new HashMap(); + param.put("order_id", order_id); + sendParamtoNet(Url.getPayGanDanFileOrderSucceed, param, + GET_PAYR_SUCCESS_RESULT, mActivity, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("WXEntryActivity",resultCode+" "+resultJson); + switch (resultCode) { + case 102: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + if("SUCCESS".equals(jsonObject.getJSONObject("data").getString("tradeState"))) + { + Constant.WePayed=true; + aaa(); + + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case GET_USER_DATA_RESULT: +// System.out.println("resultJson++ 余额 === "+resultJson); +// RetrieveUser bean = GsonTools.fromGsonToBean(resultJson, +// RetrieveUser.class); +// double yue = Double.parseDouble(bean.getAvailableBalance()); + double yue = 0.0; + try { + JSONObject jsonObject = new JSONObject(resultJson); + if (!"200".equals(jsonObject.getString("code"))) { + ToastUtil.showMessage(jsonObject.getString("msg")); + return; + } + yue = jsonObject.getDouble("data"); + + } catch (JSONException e) { + e.printStackTrace(); + + } + mTv_pay_yue.setText("余额支付¥" + String.format("%.2f", yue / 100)); + if (pay > yue) { + NoMoney = true; + mTv_monet_enough.setVisibility(View.VISIBLE); + } else { + mTv_monet_enough.setVisibility(View.INVISIBLE); + + } + +// if (bean.code != null && bean.code.equals("1")) { +// ToastUtil.showMessage(bean.message); +// return; +// } + break; + case GET_CREATE_ORDER_RESULT: + if(payChannel.equals("balance")) + { + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + Constant.WePayed=true; + aaa(); + + + } + else + { + ToastUtil.showToast(jsonObject.getString("msg")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + return; + } + PayWechatBean payBean= GsonTools.fromGsonToBean(resultJson, + PayWechatBean.class); + if(payBean!=null&&"200".equals(payBean.getCode())) + { + PayReq request = new PayReq(); + request.appId = payBean.getData().getAppid(); + request.partnerId = payBean.getData().getPartnerid(); + request.prepayId= payBean.getData().getPrepayid(); + request.packageValue = payBean.getData().getPackage_str(); + request.nonceStr= payBean.getData().getNoncestr(); + request.timeStamp= payBean.getData().getTimestamp(); + request.sign=payBean.getData().getSign(); + api.sendReq(request); +// Log.d("WXEntryActivity","pay "+pay); + + } + else + { + ToastUtil.showToast(payBean.getMessage()); + } +// if (payChannel.equals("")) { +// if ("\"SUCCEED\"".equals(resultJson)) { +// getPaySucceedResult(); +// } else if("\"密码错误\"".equals(resultJson)) { +// ToastUtil.showMessage("密码错误"); +// }else{ +// ToastUtil.showMessage("支付失败"); +// } +// +// } else { +// String result = StringEscapeUtils.unescapeJava(resultJson); +// if (!StringUtil.isEmpty(result)) { +// String sssss = result.substring(1, result.length() - 1); +// Pingpp.createPayment(PayCourseActivity.this, sssss); +// } else { +// ToastUtil.showMessage("服务器异常"); +// } +// +// } + + break; + case GET_PAYR_SUCCESS_RESULT: + if ("\"SUCCEED\"".equals(resultJson)) { + ToastUtil.showMessage("支付成功"); + paySUCCESS = true; + aaa(); + } + break; + default: + break; + } + } + + private ECAlertDialog buildAlert; + + public void aaa() { + if(payChannel.equals("balance")) + { + needreportPays("order_gdfile_download",0+"","分",1+"",getIntent().getStringExtra("title"),getIntent().getStringExtra("getTags"),"肝胆课件"); + } + else + { + + int nnum= (int)pay; + needreportPays("order_gdfile_download",nnum+"","分",1+"",getIntent().getStringExtra("title"),getIntent().getStringExtra("getTags"),"肝胆课件"); + + + } + buildAlert = ECAlertDialog.buildAlert(mActivity, "支付成功", + null, "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mActivity.finish(); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == Pingpp.REQUEST_CODE_PAYMENT) { + if (resultCode == Activity.RESULT_OK) { + String result = data.getExtras().getString("pay_result"); + if (result.equals("success")) { + getPaySucceedResult(); + } + // 处理返回值 + // "success" - 支付成功 + // "fail" - 支付失败 + // "cancel" - 取消支付 + // "invalid" - 支付插件未安装(一般是微信客户端未安装的情况) + String errorMsg = data.getExtras().getString("error_msg"); // 错误信息 + String extraMsg = data.getExtras().getString("extra_msg"); // 错误信息 + // showMsg(result, errorMsg, extraMsg); + } + } + } + + public void showMsg(String title, String msg1, String msg2) { + String str = title; + if (null != msg1 && msg1.length() != 0) { + str += "\n" + msg1; + } + if (null != msg2 && msg2.length() != 0) { + str += "\n" + msg2; + } + Builder builder = new Builder(this); + builder.setMessage(str); + builder.setTitle("提示"); + builder.setPositiveButton("OK", null); + builder.create().show(); + } + + private Dialog dialog; + EditText mEt_getpassword; + + protected void sendMessageDialog() { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(mActivity); + RelativeLayout layout = (RelativeLayout) inflater.inflate( + R.layout.dialog_get_password, null); + // 2. 新建对话框对象 + dialog = new Builder(mActivity, + R.style.Theme_Light_FullScreenDialogAct).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + // 只用下面这一行弹出对话框时需要点击输入框才能弹出软键盘 + dialog.getWindow().clearFlags( + WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + Button btn_cancel = (Button) layout.findViewById(R.id.dilaog_cancel); + Button btn_sure = (Button) layout.findViewById(R.id.dilaog_sure); + mEt_getpassword = (EditText) layout.findViewById(R.id.et_get_password); + btn_cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + hideSoftKeyboard(v); + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + String password = mEt_getpassword.getText().toString().trim(); + if (!StringUtil.isEmpty(password)) { + getPayChargeResult(password); + hideSoftKeyboard(v); + dialog.dismiss(); + } else { + ToastUtil.showMessage("请输入您的登陆密码"); + } + + } + }); + + } + @Override + protected void onResume() { + super.onResume(); + if(Constant.WePayed) + { + aaa(); + } + else + { + getOrderStatus(); + } + } + private void getOrderStatus() + { if(order_id==null) + { + order_id=getIntent().getStringExtra("order_id"); + } + Map param = new HashMap<>(); +// param.put("trade_no","99361202930720"); + param.put("trade_no",order_id); + Log.d("WXEntryActivity","orderId "+order_id); + sendJsonPostParamtoNetSignMD5(Url.getOrderStatus,param,102,this); + + } + @Override + public void finish() { + // TODO Auto-generated method stub + if (Constant.WePayed) { + Log.d("WXEntryActivity","finish "); + Intent intent = new Intent(); + setResult(201, intent); + } + super.finish(); + } + @Override + protected void onDestroy() { + Constant.WePayed=false; + super.onDestroy(); + } + public void hideSoftKeyboard(View localView) { + InputMethodManager inputMethodManager = (InputMethodManager) ct + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { +// View localView = ((Activity) ct).getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayResultActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayResultActivity.java new file mode 100644 index 0000000..e58f352 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PayResultActivity.java @@ -0,0 +1,95 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; +import android.view.View; +import android.widget.Button; +import android.widget.LinearLayout; + +import androidx.appcompat.app.AppCompatActivity; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +public class PayResultActivity extends AppCompatActivity implements View.OnClickListener { + LinearLayout l_success,l_failde; + + Button my_class,go_fapiao,dail,look_list; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); + setContentView(R.layout.activity_pay_result); + String state=getIntent().getStringExtra("IS_PAY_SUCCESS"); + l_failde=findViewById(R.id.l_failde); + l_success=findViewById(R.id.l_success); + my_class=findViewById(R.id.my_class); + go_fapiao=findViewById(R.id.go_fapiao); + dail=findViewById(R.id.dail); + look_list=findViewById(R.id.look_list); + my_class.setOnClickListener(this); + go_fapiao.setOnClickListener(this); + dail.setOnClickListener(this); + look_list.setOnClickListener(this); + if("yes".equals(state)) + { + l_failde.setVisibility(View.GONE); + l_success.setVisibility(View.VISIBLE); + if(!StringUtil.isEmpty(getIntent().getStringExtra("special_type_name"))) + { + go_fapiao.setVisibility(View.GONE); + } + } + else + { + l_failde.setVisibility(View.VISIBLE); + l_success.setVisibility(View.GONE); + } + + } + + @Override + public void onClick(View v) { + switch (v.getId()) + { + case R.id.my_class: + Intent intent3 = new Intent(PayResultActivity.this, CourseActivity.class); + intent3.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent3.putExtra("type","2"); + startActivity(intent3); + finish(); + break; + case R.id.go_fapiao: + Intent intent1=new Intent(PayResultActivity.this,FaPiaoActivity.class); +// intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent1); + finish(); + break; + case R.id.dail: + try { + // TODO Auto-generated method stub + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_DIAL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:" + "010-67571131")); + startActivity(intent); + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + + } + break; + case R.id.look_list: + Intent intent2=new Intent(PayResultActivity.this, OrderListActivity.class); + startActivity(intent2); + finish(); + break; + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PdfViewActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PdfViewActivity.java new file mode 100644 index 0000000..6c4772b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PdfViewActivity.java @@ -0,0 +1,160 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.os.Build; +import android.view.View; +import android.widget.Toast; + +import com.github.barteksc.pdfviewer.PDFView; +import com.github.barteksc.pdfviewer.listener.OnPageChangeListener; +import com.gyf.immersionbar.ImmersionBar; + +import java.io.File; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2018/11/8. + */ + +public class PdfViewActivity extends BaseActivity { + private String path; + private File file; + @Override + public void setTitle() { + String title = getIntent().getExtras().getString("title"); + top_title.setText(title); + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + top_right.setOnClickListener(this); + + } + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_pdfview); + + path = getIntent().getExtras().getString("path"); +// Log.d("gdxzfile",path); + file = new File(path); + PDFView pdfView = view.findViewById(R.id.pdfView); + pdfView.fromFile(file).defaultPage(0).onPageChange(new OnPageChangeListener() { + @Override + public void onPageChanged(int page, int pageCount) { + ToastUtil.showMessage((page+1) + " / " + pageCount); + } + }) .load(); +// initView(view); + return view; + } + + private void initView(View view) { + + PDFView pdfView = view.findViewById(R.id.pdfView); + pdfView.fromFile(file).defaultPage(0).onPageChange(new OnPageChangeListener() { + @Override + public void onPageChanged(int page, int pageCount) { + ToastUtil.showMessage((page+1) + " / " + pageCount); + } + }) .load(); + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + + case R.id.top_right: + shareFile(PdfViewActivity.this,file); + break; + } + } + + + public void shareFile(Context context, File file) { + if (null != file && file.exists()) { + Intent share = new Intent(Intent.ACTION_SEND); +// Intent share = new Intent(Intent.ACTION_VIEW); +// share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// String s2 = null; +// try { +// s2 = new String(path.getBytes(),"utf-8"); +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } +// if(Build.VERSION.SDK_INT >= 24){ +// // 适配android7.0 ,不能直接访问原路径 +// // 需要对intent 授权 +// share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); +// share.setDataAndType(FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider",new File(s2)),"application/octet-stream"); +// } +// else{ +// share.setDataAndType(Uri.fromFile(new File(s2)), "application/octet-stream"); +// } + Uri uri ; + +// Uri uri = Uri.fromFile(file); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) + { + uri = androidx.core.content.FileProvider + .getUriForFile(this, "cn.shangyu.gdxzExpert.fileprovider", file); + } + else + { + uri = Uri.fromFile(file); + } + share.putExtra(Intent.EXTRA_STREAM,uri ); + share.setType("image/jpeg"); + share.setType("application/octet-stream"); + +// Log.d("gdxzfile","uri "+uri); + +// share.setPackage("com.tencent.mm"); +// context.startActivity(share); +// share.setType(getMimeType(file.getAbsolutePath()));//此处可发送多种文件 +// share.putExtra("Kdescription", "pdf文档");//微信朋友圈专用 +// share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + context.startActivity(Intent.createChooser(share, "分享文件")); +// Intent intent=new Intent(Intent.ACTION_SEND); +// intent.setType(getMimeType(file.getAbsolutePath()));//此处可发送多种文件 +// intent.putExtra(Intent.EXTRA_SUBJECT, "Share"); +// intent.putExtra(Intent.EXTRA_TEXT, "I have successfully share my message through my app"); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// context.startActivity(Intent.createChooser(intent, "fdasfsadfsa")); + } else { + Toast.makeText(context, "分享文件不存在", Toast.LENGTH_SHORT).show(); + } + } + // 根据文件后缀名获得对应的MIME类型。 + private static String getMimeType(String filePath) { + + MediaMetadataRetriever mmr = new MediaMetadataRetriever(); + String mime = "*/*"; + if (filePath != null) { + try { + mmr.setDataSource(filePath); + mime = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE); + } catch (IllegalStateException e) { + return mime; + } catch (IllegalArgumentException e) { + return mime; + } catch (RuntimeException e) { + return mime; + } + } + return mime; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbum2Activity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbum2Activity.java new file mode 100644 index 0000000..338afd0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbum2Activity.java @@ -0,0 +1,329 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.provider.MediaStore; +import android.provider.MediaStore.Images.Thumbnails; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout.LayoutParams; +import android.widget.GridView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.io.InvalidClassException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PhotoAdappter2; +import cn.shangyu.gdxzExpert.adapter.PhotoAibumAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PhotoAibum; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/****************************************** + * 类描述: 相册管理类 类名称:PhotoAlbum2Activity + * + * @version: 1.0 + * @author: zhaodewei + * @time: 2013-10-18 下午2:10:46 + *****************************************/ +public class PhotoAlbum2Activity extends BaseActivity { + private GridView aibumGV; + private List aibumList; + private PhotoAdappter2 adapter; + private View view; + private Intent getIntent; + private String haveNums; + // private AlbumHelper helper; + private String istopc; + private boolean isTopc = false; + private boolean isTalke = false; + private ArrayList gl_arr = new ArrayList(); + private int PhotoNum=6; + // 设置获取图片的字段信�? + private static final String[] STORE_IMAGES = { + MediaStore.Images.Media.DISPLAY_NAME, // 显示的名�? + MediaStore.Images.Media.DATA, MediaStore.Images.Media.LONGITUDE, // 经度 + MediaStore.Images.Media._ID, // id + MediaStore.Images.Media.BUCKET_ID, // dir id 目录 + MediaStore.Images.Media.BUCKET_DISPLAY_NAME // dir name 目录名字 + + }; + /** + * 相册点击事件 + */ + OnItemClickListener aibumClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // Intent intent = new Intent(PhotoAlbum2Activity.this, + // PhotoActivity.class); + // intent.putExtra("aibum", aibumList.get(position)); + // startActivity(intent); + aibum = aibumList.get(position); + changePhotos(aibumList.get(position)); + + } + }; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("全部图片"); + + } + + private PhotoAibum aibum; + + public void changePhotos(PhotoAibum aibum) { + top_right_text.setVisibility(View.VISIBLE); + top_title.setText("选择图片"); + if (isTopc) { + top_right_text.setText("确认" + haveNums + "/3"); + } else { + top_right_text.setText("确认" + haveNums + "/"+PhotoNum); + } + + top_right_text.setTextColor(PhotoAlbum2Activity.this.getResources() + .getColor(R.color.white)); + top_right_text.setTextSize(14); + top_right_text.setBackgroundResource(R.drawable.selector_btn); + LayoutParams paras = (LayoutParams) top_right_text + .getLayoutParams(); + paras.setMargins(0, 0, dip2px(PhotoAlbum2Activity.this, 10), 0); + paras.height = dip2px(PhotoAlbum2Activity.this, 30); + top_right_text.setLayoutParams(paras); + + top_right_text.setOnClickListener(this); + adapter = new PhotoAdappter2(this, aibum); + aibumGV.setNumColumns(3); + aibumGV.setAdapter(adapter); + aibumGV.setOnItemClickListener(gvItemClickListener); + } + + private ArrayList potisions = new ArrayList(); + // private ArrayList paths; + private OnItemClickListener gvItemClickListener = new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (potisions.contains(position + "")) { + potisions.remove(position + ""); + haveNums = (Integer.parseInt(haveNums) - 1) + ""; + } else { + if (isTopc) { + if (Integer.parseInt(haveNums) < 3) { + potisions.add(position + ""); + haveNums = (Integer.parseInt(haveNums) + 1) + ""; + + } else { + return; + } + } else { + if (Integer.parseInt(haveNums) < PhotoNum) { + potisions.add(position + ""); + haveNums = (Integer.parseInt(haveNums) + 1) + ""; + + } else { + return; + } + } + + } + if (isTopc) { + top_right_text.setText("确认" + haveNums + "/3"); + } else { + top_right_text.setText("确认" + haveNums + "/"+PhotoNum); + } + + // getpath(); + adapter.getPosition(potisions); + adapter.notifyDataSetChanged(); + } + }; + ContentResolver cr; + + public void getpath() { + // paths = new ArrayList(); + for (int i = 0; i < potisions.size(); i++) { + int position = Integer.parseInt(potisions.get(i)); + // paths.add(aibum.bitList.get(i).getPath()); + gl_arr.add(aibum.bitList.get(position)); + } + } + + private void getThumbnail() { + cr = PhotoAlbum2Activity.this.getContentResolver(); + String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID, + Thumbnails.DATA }; + Cursor cursor = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projection, + null, null, null); + getThumbnailColumnData(cursor); + } + + HashMap thumbnailList = new HashMap(); + + private void getThumbnailColumnData(Cursor cur) { + if (cur.moveToFirst()) { + int _id; + int image_id; + String image_path; + int _idColumn = cur.getColumnIndex(Thumbnails._ID); + int image_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID); + int dataColumn = cur.getColumnIndex(Thumbnails.DATA); + + do { + // Get the field values + _id = cur.getInt(_idColumn); + image_id = cur.getInt(image_idColumn); + image_path = cur.getString(dataColumn); + + // Do something with the values. + // Log.i(TAG, _id + " image_id:" + image_id + " path:" + // + image_path + "---"); + // HashMap hash = new HashMap(); + // hash.put("image_id", image_id + ""); + // hash.put("path", image_path); + // thumbnailList.add(hash); + thumbnailList.put("" + image_id, image_path); + } while (cur.moveToNext()); + if(cur != null &&!cur.isClosed()) + cur.close(); + } + } + + /** + * 方法描述:按相册获取图片信息 + * + * @author: why + * @time: 2013-10-18 下午1:35:24 + */ + private List getPhotoAlbum() { + getThumbnail(); + List aibumList = new ArrayList(); + Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, STORE_IMAGES); + Map countMap = new HashMap(); + PhotoAibum pa = null; + while (cursor.moveToNext()) { + String path = cursor.getString(1); + String id = cursor.getString(3); + String dir_id = cursor.getString(4); + String dir = cursor.getString(5); +// Log.e("info", "id===" + id + "==dir_id==" + dir_id + "==dir=="+ dir + "==path=" + path); + if (!countMap.containsKey(dir_id)) { + pa = new PhotoAibum(); + pa.setName(dir); + pa.setBitmapPath(path); + + + // pa.thumbnailPath = thumbnailList.get(Integer.parseInt(id)); + pa.setBitmap(Integer.parseInt(id)); + pa.setCount(1); + List list= pa.getBitList(); + list.add(new PhotoItem(Integer.valueOf(id), path)); + countMap.put(dir_id, pa); + } else { + pa = countMap.get(dir_id); + pa.setCount(pa.getCount() + 1); + List list= pa.getBitList(); + list.add(new PhotoItem(Integer.valueOf(id), path)); + } + } + cursor.close(); + Iterable it = countMap.keySet(); + for (String key : it) { + aibumList.add(countMap.get(key)); + } + + return aibumList; + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_photoalbum); + aibumGV = (GridView) view.findViewById(R.id.album_gridview); + // helper = AlbumHelper.getHelper(); + // helper.init(getApplicationContext()); + // aibumList = helper.getImagesBucketList(false); + aibumList = getPhotoAlbum(); + aibumGV.setAdapter(new PhotoAibumAdapter(aibumList, this)); + aibumGV.setOnItemClickListener(aibumClickListener); + initIntent(); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + getIntent = getIntent(); + haveNums = getIntent.getStringExtra("photonum"); + if (haveNums.equals("-1")) { + PhotoNum=5; + haveNums = "0"; + isTalke = true; + } + istopc = getIntent.getStringExtra("isTopic"); + if (istopc != null && istopc.equals("isTopic")) { + isTopc = true; + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + getpath(); + if (gl_arr.size() > 0) { + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED, + Boolean.TRUE, true); + } catch (InvalidClassException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + Intent intent = new Intent(); + intent.putExtra("photos", (Serializable) gl_arr); + if (isTalke) { + setResult(RESULT_OK, intent); + } else { + setResult(102, intent); + } + + this.finish(); + break; + + default: + break; + } + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbumActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbumActivity.java new file mode 100644 index 0000000..305ad71 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PhotoAlbumActivity.java @@ -0,0 +1,415 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.provider.MediaStore; +import android.provider.MediaStore.Images.Thumbnails; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout.LayoutParams; +import android.widget.GridView; + +import androidx.annotation.Nullable; + +import com.gyf.immersionbar.ImmersionBar; + +import java.io.InvalidClassException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PhotoAdappter2; +import cn.shangyu.gdxzExpert.adapter.PhotoAibumAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PhotoAibum; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.photo.AlbumPreviewActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/****************************************** + * 类描述: 相册管理类 类名称:PhotoAlbumActivity + * + * @version: 1.0 + * @author: zhaodewei + * @time: 2013-10-18 下午2:10:46 + *****************************************/ +public class PhotoAlbumActivity extends BaseActivity { + private GridView aibumGV; + private List aibumList; + private PhotoAdappter2 adapter; + private View view; + private Intent getIntent; + private String haveNums; + // private AlbumHelper helper; + private String istopc; + private boolean isTopc = false; + private boolean isTalke = false; + private ArrayList gl_arr = new ArrayList(); + private int PhotoNum=8; + int maxnumber,issendgroup; + // 设置获取图片的字段信�? + private static final String[] STORE_IMAGES = { + MediaStore.Images.Media.DISPLAY_NAME, // 显示的名称 + MediaStore.Images.Media.DATA,//路径 + MediaStore.Images.Media.LONGITUDE, // 经度 + MediaStore.Images.Media._ID, // id + MediaStore.Images.Media.BUCKET_ID, // dir id 目录 + MediaStore.Images.Media.BUCKET_DISPLAY_NAME // dir name 目录名字 + + }; + /** + * 相册点击事件 + */ + OnItemClickListener aibumClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // Intent intent = new Intent(PhotoAlbumActivity.this, + // PhotoActivity.class); + // intent.putExtra("aibum", aibumList.get(position)); + // startActivity(intent); + aibum = aibumList.get(position); + changePhotos(aibumList.get(position)); + + } + }; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("全部图片"); + + } + + private PhotoAibum aibum; + + public void changePhotos(PhotoAibum aibum) { + top_right_text.setVisibility(View.VISIBLE); + top_title.setText("选择图片"); + if (isTopc) { + maxnumber=3; + PhotoNum=3; + top_right_text.setText("确认" + haveNums + "/3"); + } else { + maxnumber=PhotoNum; + top_right_text.setText("确认" + haveNums + "/"+PhotoNum); + } + + top_right_text.setTextColor(PhotoAlbumActivity.this.getResources() + .getColor(R.color.white)); + top_right_text.setTextSize(14); + top_right_text.setBackgroundResource(R.drawable.selector_btn); + LayoutParams paras = (LayoutParams) top_right_text + .getLayoutParams(); + paras.setMargins(0, 0, dip2px(PhotoAlbumActivity.this, 10), 0); + paras.height = dip2px(PhotoAlbumActivity.this, 30); + top_right_text.setLayoutParams(paras); + + top_right_text.setOnClickListener(this); + adapter = new PhotoAdappter2(this, aibum); + aibumGV.setNumColumns(3); + aibumGV.setAdapter(adapter); + adapter.setOnItemClickListener(new PhotoAdappter2.ViewItemClickListener() { + @Override + public void onItemClick(int position) { + if (potisions.contains(position + "")) { + potisions.remove(position + ""); + haveNums = (Integer.parseInt(haveNums) - 1) + ""; + } else { + if (isTopc) { + if (Integer.parseInt(haveNums) < 3) { + potisions.add(position + ""); + haveNums = (Integer.parseInt(haveNums) + 1) + ""; + maxnumber=3; + } else { + ToastUtil.showMessage("最多添加"+PhotoNum+"张"); + return; + } + } else { + if (Integer.parseInt(haveNums) < PhotoNum) { + potisions.add(position + ""); + haveNums = (Integer.parseInt(haveNums) + 1) + ""; + maxnumber=PhotoNum; + } else { + ToastUtil.showMessage("最多添加"+PhotoNum+"张"); + return; + } + } + + } + if (isTopc) { + maxnumber=3; + top_right_text.setText("确认" + haveNums + "/3"); + } else { + maxnumber=PhotoNum; + top_right_text.setText("确认" + haveNums + "/"+PhotoNum); + } + + // getpath(); + adapter.getPosition(potisions); + adapter.notifyDataSetChanged(); + } + }); + aibumGV.setOnItemClickListener(gvItemClickListener); + } + + private ArrayList potisions = new ArrayList(); + // private ArrayList paths; + private OnItemClickListener gvItemClickListener = new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + Intent intent = new Intent(PhotoAlbumActivity.this, AlbumPreviewActivity.class); + intent.putExtra(AlbumPreviewActivity.ARG_BUCKET_INDEX, 0); + intent.putExtra(AlbumPreviewActivity.ARG_INDEX, position); + intent.putExtra(AlbumPreviewActivity.MAX_NUMBER, maxnumber); + intent.putExtra("aibum",aibum); + intent.putExtra("haveNums",Integer.parseInt(haveNums)); + intent.putStringArrayListExtra("potisions",potisions); + startActivityForResult(intent, 500); + + + +// if (potisions.contains(position + "")) { +// potisions.remove(position + ""); +// haveNums = (Integer.parseInt(haveNums) - 1) + ""; +// } else { +// if (isTopc) { +// if (Integer.parseInt(haveNums) < 3) { +// potisions.add(position + ""); +// haveNums = (Integer.parseInt(haveNums) + 1) + ""; +// +// } else { +// return; +// } +// } else { +// if (Integer.parseInt(haveNums) < PhotoNum) { +// potisions.add(position + ""); +// haveNums = (Integer.parseInt(haveNums) + 1) + ""; +// +// } else { +// return; +// } +// } +// +// } +// if (isTopc) { +// top_right_text.setText("确认" + haveNums + "/3"); +// } else { +// top_right_text.setText("确认" + haveNums + "/"+PhotoNum); +// } +// +// // getpath(); +// adapter.getPosition(potisions); +// adapter.notifyDataSetChanged(); + } + }; + ContentResolver cr; + + public void getpath() { + // paths = new ArrayList(); + for (int i = 0; i < potisions.size(); i++) { + int position = Integer.parseInt(potisions.get(i)); + // paths.add(aibum.bitList.get(i).getPath()); + gl_arr.add(aibum.bitList.get(position)); + } + } + + private void getThumbnail() { + cr = PhotoAlbumActivity.this.getContentResolver(); + String[] projection = { Thumbnails._ID, Thumbnails.IMAGE_ID, + Thumbnails.DATA }; + Cursor cursor = cr.query(Thumbnails.EXTERNAL_CONTENT_URI, projection, + null, null, null); + getThumbnailColumnData(cursor); + } + + HashMap thumbnailList = new HashMap(); + + private void getThumbnailColumnData(Cursor cur) { + if (cur.moveToFirst()) { + int _id; + int image_id; + String image_path; + int _idColumn = cur.getColumnIndex(Thumbnails._ID); + int image_idColumn = cur.getColumnIndex(Thumbnails.IMAGE_ID); + int dataColumn = cur.getColumnIndex(Thumbnails.DATA); + + do { + // Get the field values + _id = cur.getInt(_idColumn); + image_id = cur.getInt(image_idColumn); + image_path = cur.getString(dataColumn); + + // Do something with the values. + // Log.i(TAG, _id + " image_id:" + image_id + " path:" + // + image_path + "---"); + // HashMap hash = new HashMap(); + // hash.put("image_id", image_id + ""); + // hash.put("path", image_path); + // thumbnailList.add(hash); + thumbnailList.put("" + image_id, image_path); + } while (cur.moveToNext()); + } + } + + /** + * 方法描述:按相册获取图片信息 + * + * @author: why + * @time: 2013-10-18 下午1:35:24 + */ + private List getPhotoAlbum() { + getThumbnail(); + List aibumList = new ArrayList(); + Cursor cursor = MediaStore.Images.Media.query(getContentResolver(), + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, STORE_IMAGES); + Map countMap = new HashMap(); + PhotoAibum pa = null; + while (cursor.moveToNext()) { + String path = cursor.getString(1)+""; + String id = cursor.getString(3)+""; + String dir_id = cursor.getString(4)+""; + String dir = cursor.getString(5)+""; +// Log.e("info", "id===" + id + "==dir_id==" + dir_id + "==dir=="+ dir + "==path=" + path); + if (!countMap.containsKey(dir_id)) { + pa = new PhotoAibum(); + pa.setName(dir); + pa.setBitmapPath(path); + + + // pa.thumbnailPath = thumbnailList.get(Integer.parseInt(id)); + pa.setBitmap(Integer.parseInt(id)); + pa.setCount(1); + List list= pa.getBitList(); + list.add(new PhotoItem(Integer.valueOf(id), path)); + countMap.put(dir_id, pa); + } else { + pa = countMap.get(dir_id); + pa.setCount(pa.getCount() + 1); + List list= pa.getBitList(); + list.add(new PhotoItem(Integer.valueOf(id), path)); + } + } + cursor.close(); + Iterable it = countMap.keySet(); + for (String key : it) { + aibumList.add(countMap.get(key)); + } + + return aibumList; + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_photoalbum); + aibumGV = (GridView) view.findViewById(R.id.album_gridview); + // helper = AlbumHelper.getHelper(); + // helper.init(getApplicationContext()); + // aibumList = helper.getImagesBucketList(false); + aibumList = getPhotoAlbum(); + aibumGV.setAdapter(new PhotoAibumAdapter(aibumList, this)); + aibumGV.setOnItemClickListener(aibumClickListener); + initIntent(); + return view; + } + + private void initIntent() { + // TODO Auto-generated method stub + getIntent = getIntent(); + haveNums = getIntent.getStringExtra("photonum"); + PhotoNum =getIntent.getIntExtra("maxphotonum",8); + issendgroup=getIntent.getIntExtra("issendgroup",0); + if (haveNums.equals("-1")) { + PhotoNum=5; + haveNums = "0"; + isTalke = true; + } + else if ("1".equals(issendgroup+"")) { +// PhotoNum=1; +// haveNums = "0"; + isTalke = true; + } +// } +// else if ("1".equals(haveNums)){ +// PhotoNum=1; +// haveNums = "0"; +// isTalke = true; +// } + istopc = getIntent.getStringExtra("isTopic"); + if (istopc != null && istopc.equals("isTopic")) { + isTopc = true; + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + getpath(); + if (gl_arr.size() > 0) { + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED, + Boolean.TRUE, true); + } catch (InvalidClassException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + Intent intent = new Intent(); + intent.putExtra("photos", (Serializable) gl_arr); + if (isTalke) { + setResult(RESULT_OK, intent); + } else { + setResult(102, intent); + } + + this.finish(); + break; + + default: + break; + } + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 500) { + if (resultCode == Activity.RESULT_OK) { + potisions= data.getExtras().getStringArrayList("potisions"); + haveNums=data.getExtras().getInt("haveNums")+""; + adapter.getPosition(potisions); + adapter.notifyDataSetChanged(); + top_right_text.setText("确认" + haveNums + "/"+maxnumber+"张"); + } + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PoMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PoMessageActivity.java new file mode 100644 index 0000000..33deb7b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PoMessageActivity.java @@ -0,0 +1,312 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PoMessageBean; +import cn.shangyu.gdxzExpert.bean.PoMessageBean.myPublishMessageList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * PoMessageActivity.java + * @author jx + * @date2015.11.04 + * 显示我发布的消息的界面 + */ +public class PoMessageActivity extends BaseActivity implements OnItemClickListener{ + private ArrayList DataList = new ArrayList(); + private int page = 1; + private int totalPage = 0; + public static String myPublishMessageUrl = Url.getmyPublishMessage; + private PullToRefreshListView ptrLv; + private MessageAdapter ListAdapter; + private LinearLayout ll_empty; + @Override + public void setTitle() { + top_title.setText("我发布的消息"); + } + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_po_message); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.pl_po_message);// 下拉刷新的listview控件 + //加载布局 + ll_loading = (FrameLayout)view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + //设置空的提示信息,默认是“您暂未发布群公告” + tv_empty_msg.setText("您暂未发布群公告"); + + //设置下拉与上啦都可以用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + PoMessageData(myPublishMessageUrl, page, true); + } + + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + PoMessageData(myPublishMessageUrl, page, false); + } + }); + initData(); + return view; + } + private void initData() { + String myPublishMessage = SharePrefUtil.getString(ct, myPublishMessageUrl, null); + if (TextUtils.isEmpty(myPublishMessage)) { + showLoadingProgress(); + }else{ + processData(myPublishMessage, page, true); + } + PoMessageData(myPublishMessageUrl, page, true); + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + class MessageAdapter extends BaseAdapter { + + List list; + + public MessageAdapter(List data) { + this.list=data; + // TODO Auto-generated constructor stub + } + @Override + public int getCount() { + return list.size(); + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + NewsViewHolder mHolder = null; + if (convertView == null) { + //找到自定义item布局 并赋值给 convertView + convertView = View.inflate(ct, R.layout.item_post_message, null); + mHolder = new NewsViewHolder(); + mHolder.tv_bill_creatdate = (TextView) convertView.findViewById(R.id.tv_time); + mHolder.tv_bill_content = (TextView) convertView.findViewById(R.id.tv_message); + mHolder.tv_bill_type = (TextView) convertView.findViewById(R.id.tv_title1); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + String sub= list.get(position).createDate;//将时间转为字符串 + if(sub.length() >= 10){ + mHolder.tv_bill_creatdate.setText(sub.substring(0,10));//使用substring进行字符串截取 + }else{ + mHolder.tv_bill_creatdate.setText(sub); + } + mHolder.tv_bill_content.setText(list.get(position).content); + // if(1 == list.get(position).chatFrom){ + // mHolder.tv_bill_type.setText("公益咨询"); + // }else if (2 == list.get(position).chatFrom) { + // mHolder.tv_bill_type.setText("随访患者"); + // } + // else if (3 == list.get(position).chatFrom) { + // mHolder.tv_bill_type.setText("我的VIP"); + // } + if(!TextUtils.isEmpty(list.get(position).patientName)){ + mHolder.tv_bill_type.setText(list.get(position).patientName); + } + + + LogUtil.i("name============="+list.get(position).patientName); + return convertView; + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + private class NewsViewHolder { + public TextView tv_bill_creatdate; + public TextView tv_bill_content; + public TextView tv_bill_type; + + } + } + /** + * 请求服务器。获取我发布的消息记录 + * PoMessageData + * @param loadUrl + * void + */ + private void PoMessageData(final String loadUrl, final int page, final boolean isRefresh) { + String expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");//提取专家uuid + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid",expertUuid);//传专家uuid + params.addBodyParameter("page", String.valueOf(page));//传page参数 + LogUtil.i("========page=="+page+"========expertUuid=="+expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl,info.result); + processData(info.result, page, isRefresh); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + /** + * 刷新最后时间 + * setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + /** + * 刷新完成 + * onLoaded + * + * void + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + /** + * 解析并处理数据 + * @param result + */ + private void processData(String result,int page, boolean isRefresh) { + + PoMessageBean bean = GsonTools.fromGsonToBean(result,PoMessageBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data.list.size()); + + if (bean.data.list == null || bean.data.list.size() == 0) { + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + }else{ + DataList.addAll(bean.data.list); + } + } else { + //加载更多下一页时候e + DataList.addAll(bean.data.list); + + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new MessageAdapter(DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.data.totalPage ; + LogUtil.i("totalPage="+totalPage+"page="+page); + //是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if(!isRefresh){ + ToastUtil.showMessage("没有更多消息了"); + } + + ptrLv.setMode(Mode.PULL_FROM_START); + }else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + position = position - 1; + ListAdapter.notifyDataSetChanged(); + String content = DataList.get(position).content; + String sendDate = DataList.get(position).createDate; + Intent intent = new Intent(ct, SystemMessageDetailActivity.class); + intent.putExtra("content", content); + intent.putExtra("sendDate", sendDate); + startActivity(intent); + } + +} + + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PractiseAddressManagementActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PractiseAddressManagementActivity.java new file mode 100644 index 0000000..1ca507d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PractiseAddressManagementActivity.java @@ -0,0 +1,459 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.text.TextPaint; +import android.text.format.DateUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.Window; +import android.view.WindowManager; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.ListWorkPlaceBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/1/4. + */ + +public class PractiseAddressManagementActivity extends BaseActivity implements OnCallBackFromNet{ + + private TextView btn_add; + private PullToRefreshListView lv_item_case; + public static final int LISTWORKPLACE = 1; + private ListWorkPlaceBean fromJson; + private LinearLayout ll_empty; + private CustomProgressDialog pd; + public static int REQUESTCODE = 1; + public static int DELETEPLACE = 2; + + @Override + public void setTitle() { + top_title.setText("执业地点管理"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_practiseaddressmanagement_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_practiseaddressmanagement); + } + initView(view); + initOnClick(); + initData(); + return view; + } + + private void initData() { + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.listWorkPlace, param, LISTWORKPLACE, this); + + + + } + + private void initOnClick() { + btn_add.setOnClickListener(this); + } + + private void initView(View view) { + + btn_add = view.findViewById(R.id.btn_add); + lv_item_case = view.findViewById(R.id.lv_item_case); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + TextView tv_empty_msg = ll_empty.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂无执业地点"); + if(CommonUtil.BigModule()) + { + ll_empty.setBackgroundColor(getResources().getColor(R.color.big_bg)); + tv_empty_msg.setTextSize(18); + } + else + { + ll_empty.setBackgroundColor(Color.parseColor("#e4e4e4")); + } + + lv_item_case.setMode(PullToRefreshBase.Mode.DISABLED); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + initListViewTipText(); + lv_item_case.setEmptyView(ll_empty); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.btn_add: + Intent intent = new Intent(PractiseAddressManagementActivity.this, AddPractisingaddressActivity.class); + startActivityForResult(intent,REQUESTCODE); + break; + } + } + + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 2){ + if (requestCode==REQUESTCODE){ + initData(); + } + } + } + + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + lv_item_case.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_item_case + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_item_case.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub +// getData(); + } + private void geneItems() { + // TODO Auto-generated method stub +// getData(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case LISTWORKPLACE: + pd.dismiss(); + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, ListWorkPlaceBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())){ + PractiseAddressManagementAdapter practiseAddressManagementAdapter = new PractiseAddressManagementAdapter(PractiseAddressManagementActivity.this,fromJson.getList()); + lv_item_case.setAdapter(practiseAddressManagementAdapter); + } + break; + case 2: + Gson gson1 = new Gson(); + BaseBean fromJson = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson!=null&&"200".equals(fromJson.code)){ + initData(); + ToastUtil.showMessage("删除成功"); + }else { + ToastUtil.showMessage(fromJson.message); + } + break; + } + } + + + + class PractiseAddressManagementAdapter extends BaseAdapter { + private Context context; + private List list; + public PractiseAddressManagementAdapter(Context context, List list) { + this.context = context; + this.list = list; + } + + @Override + public int getCount() { + return list!=null&&list.size()>0?list.size():0; + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + PractiseAddressManagementAdapter.ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_practisingaddress_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_practisingaddress); + } + vh = new PractiseAddressManagementAdapter.ViewHolder(); + vh.tv_hospital = convertView.findViewById(R.id.tv_hospital); + vh.tv_department = convertView.findViewById(R.id.tv_department); + vh.tv_address =convertView.findViewById(R.id.tv_address); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_type1 = convertView.findViewById(R.id.tv_type1); + vh.tv_edit = convertView.findViewById(R.id.tv_edit); + vh.tv_delete = convertView.findViewById(R.id.tv_delete); + vh.iv_edit = convertView.findViewById(R.id.iv_edit); + vh.iv_delete = convertView.findViewById(R.id.iv_delete); + convertView.setTag(vh); + } else { + vh = (PractiseAddressManagementAdapter.ViewHolder) convertView.getTag(); + } + final String hospital_name = list.get(position).getHospital_name(); + final String office_name = list.get(position).getOffice_name(); + final String location = list.get(position).getLocation(); + vh.tv_hospital.setText(hospital_name); + vh.tv_department.setText(office_name); + + switch (list.get(position).getType()){ + case 1: + vh.tv_type.setText("普通门诊"); + vh.tv_type1.setText("普通门诊"); + break; + case 2: + vh.tv_type.setText("专家门诊"); + vh.tv_type1.setText("专家门诊"); + break; + case 3: + vh.tv_type.setText("特需门诊"); + vh.tv_type1.setText("特需门诊"); + break; + case 4: + vh.tv_type.setText("专科/专病门诊"); + vh.tv_type1.setText("专科/专病门诊"); + break; + + } + ViewTreeObserver vto = vh.tv_address.getViewTreeObserver(); + final ViewHolder finalVh = vh; + + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + TextPaint mTextPaint = finalVh.tv_address.getPaint(); + mTextPaint.setTextSize(finalVh.tv_address.getTextSize()); + int mTextViewWidth = (int) mTextPaint.measureText(location); + finalVh.tv_address.setText(location); + if (mTextViewWidth> finalVh.tv_address.getWidth()||mTextViewWidth>800){ + finalVh.tv_type.setVisibility(View.GONE); + finalVh.tv_type1.setVisibility(View.VISIBLE); + }else { + finalVh.tv_type.setVisibility(View.VISIBLE); + finalVh.tv_type1.setVisibility(View.GONE); + } + + } + }); + + vh.iv_delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isDelete(position); + } + }); + + + vh.tv_delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isDelete(position); + + } + }); + vh.iv_edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isEdit(position); + + } + }); + vh.tv_edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isEdit(position); + + + } + }); + return convertView; + } + private void isEdit(final int position) { + LayoutInflater inflater = LayoutInflater.from(context); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(context).create(); + Button btn_sure = layout.findViewById(R.id.btn_sure); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_infotitle1 = layout.findViewById(R.id.tv_infotitle1); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("修改提示"); + tv_infotitle1.setText("您确定修改此条信息吗?"); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(PractiseAddressManagementActivity.this, AddPractisingaddressActivity.class); + intent.putExtra("tv_hospital",list.get(position).getHospital_name()); + intent.putExtra("tv_department",list.get(position).getOffice_name()); + intent.putExtra("tv_address",list.get(position).getLocation()); + intent.putExtra("Hospital_uuid",list.get(position).getHospital_uuid()); + intent.putExtra("uuid",list.get(position).getUuid()); + intent.putExtra("tv_type",list.get(position).getType()); + startActivityForResult(intent,REQUESTCODE); + dialog.dismiss(); + } + }); + } + private void isDelete(final int position) { + LayoutInflater inflater = LayoutInflater.from(context); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(context).create(); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map param = new HashMap<>(); + param.put("uuid",list.get(position).getUuid()); + sendJsonPostParamtoNetSignMD5(Url.deleteWorkPlace, param, DELETEPLACE, PractiseAddressManagementActivity.this); + dialog.dismiss(); + } + }); + } + + public class ViewHolder { + + public TextView tv_hospital, tv_department, tv_address,tv_type,tv_edit,tv_delete,tv_type1; + public ImageView iv_edit,iv_delete; + + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ProjectDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ProjectDetailActivity.java new file mode 100644 index 0000000..4285fe6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ProjectDetailActivity.java @@ -0,0 +1,313 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.Url.youangetDetail; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.webkit.WebSettings; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.TextView; +import android.widget.Toast; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.proDetailBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; + +public class ProjectDetailActivity extends BaseActivity { + + + + @Override + public void setTitle() { + top_title.setText("项目详情"); + } + TextView joinproject,title,brief,unit,zhixing,expert,content,time,endtime,number,status,way,note; + private String projectId; + + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_project_detail); + joinproject=view.findViewById(R.id.joinproject); + joinproject.setOnClickListener(this); + title=view.findViewById(R.id.title); + brief=view.findViewById(R.id.brief); + unit=view.findViewById(R.id.unit); + zhixing=view.findViewById(R.id.zhixing); + expert=view.findViewById(R.id.expert); + content=view.findViewById(R.id.content); + time=view.findViewById(R.id.time); + endtime=view.findViewById(R.id.endtime); + number=view.findViewById(R.id.number); + status=view.findViewById(R.id.status); + way=view.findViewById(R.id.way); + note=view.findViewById(R.id.note); + projectId=getIntent().getStringExtra("projectId"); + gettokens(youangetDetail); + return view; + } + + String token; + private void gettokens( String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(UIUtils.getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)||token=="") + { + handletoken(url); + + return; + } + sendJsonPostParamTokenMD5(ProjectDetailActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(UIUtils.getContext(),"x_access_token",token); + + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(youangetDetail)) + { + init(); + } + } + proDetailBean detailBean; + String weurl=""; + private void init() + { + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + OkHttpUtils + .get() + .url(youangetDetail+projectId) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + detailBean=GsonTools.fromGsonToBean(response,proDetailBean.class); + if(hasrealtoken(response)>0) + { + if(detailBean.getData()!=null) + { + handledata(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(youangetDetail); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(ProjectDetailActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + private void handledata() + { + if(detailBean.getData().getWechatImg()!=null + &&detailBean.getData().getWechatImg().size()>0) + { + weurl=detailBean.getData().getWechatImg().get(0).getFileUrl(); + } + + title.setText(detailBean.getData().getName()); + brief.setText(detailBean.getData().getNickname()); + unit.setText(detailBean.getData().getSponsor()); + zhixing.setText(detailBean.getData().getExecutor()); + expert.setText(detailBean.getData().getLeader()); + content.setText(detailBean.getData().getContent()); + time.setText(detailBean.getData().getBeginDate()); + endtime.setText(detailBean.getData().getEndDate()); + number.setText(detailBean.getData().getPlannedNum()); + if("1".equals(detailBean.getData().getStatus())) + { + status.setText("进行中"); + if("1".equals(detailBean.getData().getApplyState())) + { + joinproject.setVisibility(View.VISIBLE); + } + else + { + joinproject.setVisibility(View.GONE); + } + + } + else + { + status.setText("已结束"); + joinproject.setVisibility(View.GONE); + } + if("1".equals(detailBean.getData().getApplyState())) + { + way.setText("开放式"); + + } + else if("0".equals(detailBean.getData().getApplyState())) + { + way.setText("封闭式"); + + } + else + { + way.setText(detailBean.getData().getApplyState()); + } + + note.setText(detailBean.getData().getNote()); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.joinproject: + open(); + break; + } + + } + public void open() + { + View content = LayoutInflater.from(ProjectDetailActivity.this) + .inflate(R.layout.float_cent_dialog, null); +// EasyWindow easyWindow=EasyWindow.with(ProjectDetailActivity.this); +// View content=easyWindow +// .setContentView(R.layout.float_cent_dialog) +// .getContentView(); + ImageView qcode=content.findViewById(R.id.qcode); + Glide.with(ProjectDetailActivity.this). + load(weurl) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)).into(qcode); +// easyWindow.setGravity(Gravity.CENTER) +// +// .setContentView(R.layout.float_cent_dialog).setBackgroundDimAmount(0.5f) +// .setOutsideTouchable(false) +// .setOnClickListener(R.id.im_close, new EasyWindow.OnClickListener() { +// +// @Override +// public void onClick(EasyWindow window, ImageView view) { +// window.cancel(); +// } +// }).show(); + final PopupWindow popupWindow = new PopupWindow(content, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + + popupWindow.setTouchable(true); + popupWindow.setFocusable(true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + content.findViewById(R.id.im_close) + .setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + + popupWindow.dismiss(); + + } + }); + qcode.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + + savePhoto(weurl,ProjectDetailActivity.this); + return false; + } + }); + + popupWindow.showAtLocation(joinproject, Gravity.CENTER, 0, 0); + } + private void savePhoto(String imgurl, Context ctx) + { + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicConsultationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicConsultationActivity.java new file mode 100644 index 0000000..ae37e31 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicConsultationActivity.java @@ -0,0 +1,123 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.MoreToOneConsultFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/6/18. + */ + +public class PublicConsultationActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener { + private FragmentManager fm; + private RadioGroup rg_question; + private RadioButton rb_question1,rb_question2; + + @Override + public void setTitle() { + top_title.setText("公益咨询"); + top_back_layout.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_public_consultation_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_public_consultation); + } + + fm = getSupportFragmentManager(); + rg_question = (RadioGroup) view.findViewById(R.id.rg_question); + rb_question1 = (RadioButton) view.findViewById(R.id.rb_question1); + rb_question2 = (RadioButton) view.findViewById(R.id.rb_question2); + rg_question.setOnCheckedChangeListener(this); + OneToOne(); + return view; + } + + + /** + * 一对一答疑 + * void + */ + private void OneToOne() { + PublicServiceActivity myNewFragment = new PublicServiceActivity(); + fm.beginTransaction() + .replace(R.id.frame_container, myNewFragment).commit(); + } + /** + * 多对一解惑 + */ + private void MoreToOne() { + MoreToOneConsultFragment myNewFragment = new MoreToOneConsultFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myNewFragment).commit(); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_question1: + OneToOne(); + rb_question1.setBackgroundColor(getResources().getColor(R.color.doctor_theme)); + rb_question1.setTextColor(getResources().getColor(R.color.white)); + rb_question2.setBackgroundColor(getResources().getColor(R.color.white)); + if(CommonUtil.BigModule()) + { + rb_question2.setTextColor(getResources().getColor(R.color.c333333)); + } + else + { + rb_question2.setTextColor(getResources().getColor(R.color.tab_text_nor)); + } + + break; + case R.id.rb_question2: + rb_question2.setBackgroundColor(getResources().getColor(R.color.doctor_theme)); + rb_question2.setTextColor(getResources().getColor(R.color.white)); + rb_question1.setBackgroundColor(getResources().getColor(R.color.white)); + if(CommonUtil.BigModule()) + { + rb_question1.setTextColor(getResources().getColor(R.color.c333333)); + } + else + { + rb_question1.setTextColor(getResources().getColor(R.color.tab_text_nor)); + } + + MoreToOne(); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicSearchActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicSearchActivity.java new file mode 100644 index 0000000..de4e258 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicSearchActivity.java @@ -0,0 +1,619 @@ +package cn.shangyu.gdxzExpert.activity; + +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class PublicSearchActivity extends AppCompatActivity implements OnClickListener { + private GridView gv_search; + private int[] mDrawable; + private String[] mName; + private int choicePos = -1;// 当前选中位置 + private PublicSearchAdapter mPublicSearchAdapter; + private ImageView iv_back; + private TextView tv_public_ser; + private EditText tv_top_search; + private String type;// 根据类型图标变亮 + private String searchStr; + + // @Override + // public View onCreateSuccessedView() { + // // TODO Auto-generated method stub + // View view = View.inflate(this, R.layout.activity_public_search, null); + // + // return view; + // } + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_public_search); + + Toolbar mToolbar=findViewById(R.id.toolbar); + mToolbar.getBackground().setAlpha(255); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + gv_search = (GridView) findViewById(R.id.gv_search); + iv_back = (ImageView) findViewById(R.id.top_back); + tv_public_ser = (TextView) findViewById(R.id.tv_public_ser); + tv_top_search = (EditText) findViewById(R.id.tv_top_search); +// if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) +// { +// init(); +// } +// else +// { + inithide(); +// } + mPublicSearchAdapter = new PublicSearchAdapter(this, mDrawable, mName); + gv_search.setAdapter(mPublicSearchAdapter); + initClick(); + } + + private void initClick() { + gv_search.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + choicePos = position; +// if(SharePrefUtil.getBoolean(PublicSearchActivity.this, Constant.ShowMagazine,true)) +// { +// if (choicePos == 6) { +// Intent intentwf = new Intent(PublicSearchActivity.this, +// MyLibraryActivity.class); +// intentwf.putExtra("search", "searchStr"); +// startActivity(intentwf); +// } +// if (choicePos == 5) { +// Intent intent = new Intent(PublicSearchActivity.this, +// CourseActivity.class); +// startActivity(intent); +// } +// } +// else +// { + + if (choicePos == 5) { + Intent intent = new Intent(PublicSearchActivity.this, + CourseActivity.class); + startActivity(intent); + } +// } + +// else if (choicePos == 5) { +// Intent intentwf = new Intent(PublicSearchActivity.this, +// MyLibraryActivity.class); +// intentwf.putExtra("search", "medicine"); +// startActivity(intentwf); +// +// } + mPublicSearchAdapter.notifyDataSetChanged(); + } + }); + iv_back.setOnClickListener(this); + tv_public_ser.setOnClickListener(this); + tv_top_search.setOnEditorActionListener(new OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEND + || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + // do something; +// if(SharePrefUtil.getBoolean(PublicSearchActivity.this, Constant.ShowMagazine,true)) +// { +// search(); +// } +// else +// { + searchhide(); +// } + return false; + } + return false; + } + }); + } + + private void searchhide() + { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + // TODO Auto-generated method stub + // "视频", "资讯", "科普", "指南", "患者", "万方医学" + if (choicePos != 5 ) { + searchStr = tv_top_search.getText().toString().trim(); + if (StringUtil.isEmpty(searchStr)) { + ToastUtil.showMessage("请输入搜索内容"); + return; + } + } + + switch (choicePos) { + case 1: + Intent intentpVideo = new Intent(PublicSearchActivity.this, + SearchVideoActivity.class); + intentpVideo.setType("patient"); + intentpVideo.putExtra("search", searchStr); + startActivity(intentpVideo); + needreport("患教视频"); + break; + case 0: + + Intent intentVideo = new Intent(PublicSearchActivity.this, + SearchVideoActivity.class); + intentVideo.setType("doctor"); + intentVideo.putExtra("search", searchStr); + startActivity(intentVideo); + needreport("会议视频"); + break; + case 2: + Intent intentnews = new Intent(PublicSearchActivity.this, + SearchNewsActivity.class); + intentnews.putExtra("search", searchStr); + startActivity(intentnews); + needreport("新闻"); + break; + case 3: + + Intent intentScience = new Intent(PublicSearchActivity.this, + SearchScienceActivity.class); + intentScience.putExtra("search", searchStr); + startActivity(intentScience); + needreport("科普"); + break; + case 4: + + Intent intentLibrary = new Intent(PublicSearchActivity.this, + BookshelfListActivity.class); + intentLibrary.putExtra("search", searchStr); + intentLibrary.putExtra("type", "1"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + needreport("指南"); + break; + case 5: + Intent intentjp = new Intent(PublicSearchActivity.this, + CourseActivity.class); + startActivity(intentjp); + + break; + +// case 6: +// Intent intentwf = new Intent(PublicSearchActivity.this, +// MyLibraryActivity.class); +// intentwf.putExtra("search", "searchStr"); +// startActivity(intentwf); +// break; +// case 5: +// Intent intentmd = new Intent(PublicSearchActivity.this, +// MyLibraryActivity.class); +// intentmd.putExtra("search", searchStr); +// startActivity(intentmd); +// break; + case 6: + Intent intentco = new Intent(PublicSearchActivity.this, + SearchCourseActivity.class); + intentco.putExtra("search", searchStr); + startActivity(intentco); + needreport("肝胆课件"); + // ToastUtil.showMessage("开通在即,敬请期待"); + break; + case 7: + Intent intentPatient = new Intent(PublicSearchActivity.this, + SearchPatientActivity.class); + intentPatient.putExtra("search", searchStr); + startActivity(intentPatient); + needreport("患者"); + break; + case 8: + Intent intentHospital = new Intent(PublicSearchActivity.this, + HospitalSearchActivity.class); + intentHospital.putExtra("title", searchStr); + intentHospital.setType("Hospital"); + startActivity(intentHospital); + needreport("名院"); + break; + case 10: + Intent intentDoctor = new Intent(PublicSearchActivity.this, + GanDanDoctorActivity.class); + intentDoctor.putExtra("title", searchStr); + intentDoctor.setType("Doctor"); + startActivity(intentDoctor); + needreport("名医"); + break; + case 9: + Intent intentDepart = new Intent(PublicSearchActivity.this, + HospitalSearchActivity.class); + intentDepart.putExtra("title", searchStr); + intentDepart.setType("Depart"); + startActivity(intentDepart); + needreport("名科"); + break; + case 11: + Intent intentshop = new Intent(PublicSearchActivity.this, + PointsMallActivity.class); + intentshop.putExtra("name", searchStr); + intentshop.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intentshop); + needreport("积分商城"); + break; + default: + break; + } + } + private void needreport(String belong) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("search"); + rbens.setBelong(belong); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + private void search() { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + // TODO Auto-generated method stub + // "视频", "资讯", "科普", "指南", "患者", "万方医学" + if (choicePos != 5 && choicePos != 6) { + searchStr = tv_top_search.getText().toString().trim(); + if (StringUtil.isEmpty(searchStr)) { + ToastUtil.showMessage("请输入搜索内容"); + return; + } + } + + switch (choicePos) { + case 1: + Intent intentpVideo = new Intent(PublicSearchActivity.this, + SearchVideoActivity.class); + intentpVideo.setType("patient"); + intentpVideo.putExtra("search", searchStr); + startActivity(intentpVideo); + break; + case 0: + Intent intentVideo = new Intent(PublicSearchActivity.this, + SearchVideoActivity.class); + intentVideo.setType("doctor"); + intentVideo.putExtra("search", searchStr); + startActivity(intentVideo); + break; + case 2: + Intent intentnews = new Intent(PublicSearchActivity.this, + SearchNewsActivity.class); + intentnews.putExtra("search", searchStr); + startActivity(intentnews); + break; + case 3: + + Intent intentScience = new Intent(PublicSearchActivity.this, + SearchScienceActivity.class); + intentScience.putExtra("search", searchStr); + startActivity(intentScience); + break; + case 4: + + Intent intentLibrary = new Intent(PublicSearchActivity.this, + BookshelfListActivity.class); + intentLibrary.putExtra("search", searchStr); + intentLibrary.putExtra("type", "1"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + break; + case 5: + Intent intentjp = new Intent(PublicSearchActivity.this, + CourseActivity.class); + startActivity(intentjp); + break; + + case 6: + Intent intentwf = new Intent(PublicSearchActivity.this, + MyLibraryActivity.class); + intentwf.putExtra("search", "searchStr"); + startActivity(intentwf); + break; +// case 5: +// Intent intentmd = new Intent(PublicSearchActivity.this, +// MyLibraryActivity.class); +// intentmd.putExtra("search", searchStr); +// startActivity(intentmd); +// break; + case 7: + Intent intentco = new Intent(PublicSearchActivity.this, + SearchCourseActivity.class); + intentco.putExtra("search", searchStr); + startActivity(intentco); + // ToastUtil.showMessage("开通在即,敬请期待"); + break; + case 8: + Intent intentPatient = new Intent(PublicSearchActivity.this, + SearchPatientActivity.class); + intentPatient.putExtra("search", searchStr); + startActivity(intentPatient); + break; + case 9: + Intent intentHospital = new Intent(PublicSearchActivity.this, + HospitalSearchActivity.class); + intentHospital.putExtra("title", searchStr); + intentHospital.setType("Hospital"); + startActivity(intentHospital); + break; + case 11: + Intent intentDoctor = new Intent(PublicSearchActivity.this, + GanDanDoctorActivity.class); + intentDoctor.putExtra("title", searchStr); + intentDoctor.setType("Doctor"); + startActivity(intentDoctor); +// ToastUtil.showMessage("开通在即,敬请期待"); + break; + case 10: + Intent intentDepart = new Intent(PublicSearchActivity.this, + HospitalSearchActivity.class); + intentDepart.putExtra("title", searchStr); + intentDepart.setType("Depart"); + startActivity(intentDepart); + break; + case 12: + Intent intentshop = new Intent(PublicSearchActivity.this, + PointsMallActivity.class); + intentshop.putExtra("name", searchStr); + intentshop.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intentshop); + break; + default: + break; + } + + } + + private void init() { + type = getIntent().getType(); + + if (type.equals("news")) { + choicePos = 2; + } + if (type.equals("science")) { + choicePos = 3; + } + if (type.equals("patientVideo")) { + choicePos = 1; + } + if (type.equals("drug")) { + choicePos = 4; + } + if (type.equals("video")) { + choicePos = 0; + } + if (type.equals("medicine")) { + choicePos = 5; + } + if (type.equals("course")) { + choicePos = 7; + } + if (type.equals("hospital")) { + choicePos = 9; + } + if (type.equals("doctor")) { + choicePos = 11; + } + if (type.equals("department")) { + choicePos = 10; + } + if (type.equals("shopping")) { + choicePos = 12; + } + mDrawable = new int[] { R.drawable.item_video, + R.drawable.item_patient_video, R.drawable.item_news, + R.drawable.item_science, R.drawable.item_drug, + R.drawable.item_jingpin, R.drawable.item_wfa, + R.drawable.item_course, R.drawable.item_patient, + R.drawable.item_hospital, R.drawable.item_department, + R.drawable.item_doctor,R.drawable.item_mall };// "药品",R.drawable.item_medicine, + mName = new String[] { "会议视频", "患教视频", "新闻", "科普", "指南","精品课", "万方医学", + "肝胆课件", "患者", "名院", "名科", "名医","积分商城" };// + + + } + private void inithide() { + type = getIntent().getType(); + + if (type.equals("news")) { + choicePos = 2; + } + if (type.equals("science")) { + choicePos = 3; + } + if (type.equals("patientVideo")) { + choicePos = 1; + } + if (type.equals("drug")) { + choicePos = 4; + } + if (type.equals("video")) { + choicePos = 0; + } + if (type.equals("medicine")) { + choicePos = 5; + } + if (type.equals("course")) { + choicePos = 6; + } + if (type.equals("hospital")) { + choicePos = 8; + } + if (type.equals("doctor")) { + choicePos = 10; + } + if (type.equals("department")) { + choicePos = 9; + } + if (type.equals("shopping")) { + choicePos = 11; + } + mDrawable = new int[] { R.drawable.item_video, + R.drawable.item_patient_video, R.drawable.item_news, + R.drawable.item_science, R.drawable.item_drug, + R.drawable.item_jingpin, + R.drawable.item_course, R.drawable.item_patient, + R.drawable.item_hospital, R.drawable.item_department, + R.drawable.item_doctor,R.drawable.item_mall };// "药品",R.drawable.item_medicine, + mName = new String[] { "会议视频", "患教视频", "新闻", "科普", "指南","精品课", + "肝胆课件", "患者", "名院", "名科", "名医","积分商城" };// + + + } + // 适配器 + public class PublicSearchAdapter extends BaseAdapter { + private Context mContext; + private int[] mDrawable; + private String[] mName; + + public PublicSearchAdapter(Context mContext, int[] mDrawable, + String[] mName) { + this.mContext = mContext; + this.mDrawable = mDrawable; + this.mName = mName; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mDrawable.length; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mDrawable[position]; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_public_serach); + vh = new ViewHolder(); + + vh.iv = (ImageView) convertView.findViewById(R.id.iv_ser_item); + vh.name = (TextView) convertView.findViewById(R.id.tv_ser_name); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + // vh.iv.setBackgroundResource(R.drawable.item_science); + vh.iv.setBackgroundResource(mDrawable[position]); + vh.name.setText(mName[position]); + if (choicePos == position) { + vh.iv.setEnabled(true); + } else { + vh.iv.setEnabled(false); + } + return convertView; + } + + class ViewHolder { + ImageView iv; + TextView name; + } + + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + this.finish(); + break; + case R.id.tv_public_ser: +// search(); +// if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) +// { +// search(); +// } +// else +// { + searchhide(); +// } + break; + + default: + break; + } + } + + public void startReport(List list) + { + Intent intent = new Intent(PublicSearchActivity.this, ReportService.class); + intent.putExtra("report_list", (Serializable) list); + intent.putExtra("report_token", Constant.Repotr_token); + startService(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceActivity.java new file mode 100644 index 0000000..d206ad2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceActivity.java @@ -0,0 +1,245 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.Button; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.Iterator; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.fragment.HistoryPublicServiceFragment; +import cn.shangyu.gdxzExpert.fragment.NewPublicServiceFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +/** + * + * MainActivity.java + * @author ssy + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:公益咨询页面 + */ + +public class PublicServiceActivity extends BaseFragment implements OnCheckedChangeListener { + + private RadioGroup main_radiogroup; + private FragmentManager fm; + private BadgeView badgePublicServiceMsg; + private int consultCount=0; + private Button bt_old; + private static PublicServiceActivity instance; + private HistoryPublicServiceFragment myHistoryFragment; + public static PublicServiceActivity getInstance() { +// if (instance == null) { +// instance = new PublicServiceActivity(); +// } + return instance; + } + +// @Override +// public void setTitle() { +// top_title.setText("公益咨询"); +// top_back_layout.setVisibility(View.VISIBLE); +// top_right_text.setVisibility(View.GONE); +// } + + @Override + public View onCreateSuccessedView() { + instance = this; + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_public_service_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_public_service); + } + + main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup_public_service); + bt_old = (Button) view.findViewById(R.id.bt_old); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getChildFragmentManager(); + changeNewService(); + + //公益咨询消息提醒 +// EventBus.getDefault().register(this); + badgePublicServiceMsg = new BadgeView(getContext(), bt_old); + badgePublicServiceMsg.setBackgroundResource(R.drawable.unread_dot); + badgePublicServiceMsg.setBadgeMargin(10, 10); + badgePublicServiceMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + + if (badgePublicServiceMsg != null) { + if(consultCount == 0) { + badgePublicServiceMsg.hide(); + } else { + badgePublicServiceMsg.show(); + } + } + + return view; + } + + /*public void onEventMainThread(EvenBusEvent event) { + + String msg = "public收到了消息:" + event.getmMsg()+event.getmType(); + String type = event.getmType(); + if ("1".equals(type)) {//1.公益咨询 + showPublicRedUnCount(); + } + LogUtil.v(msg); + }*/ + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + needreportPage("快速问医生"); + showPublicRedUnCount(); + + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); +// EventBus.getDefault().unregister(this); + } + + /** + * 显示红点 + * showPublicRedUnCount + * + * void + */ + public void showPublicRedUnCount() { + OnUpdateMsgUnreadCounts(); + + if (myHistoryFragment != null) { +// int unreadCount = IMessageSqlManager.getBySessionIdUnreadCount(patientUuid,Constant.typeConsult); + myHistoryFragment.noticeUpdateUncount(); + } + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_new_service) { + changeNewService(); + } else if (checkedId == R.id.tab_rbn_old_service) { + changeHistoryService(); + } + } + /** + * 切换到新的咨询 + * changeNewService + * + * void + */ + private void changeNewService() { + NewPublicServiceFragment myNewFragment = new NewPublicServiceFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myNewFragment).commit(); + } + + /** + * 切换到历史咨询 + * changeHistoryService + * + * void + */ + private void changeHistoryService() { + myHistoryFragment = new HistoryPublicServiceFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, myHistoryFragment).commit(); + } +// @Override +// protected void processClick(View v) { +// switch (v.getId()) { +// case R.id.top_right_text: +// break; +// +// default: +// break; +// } +// } + /** + * 统计未读消息数,以后要区分我的患者,朋友圈,公益咨询,这个有点复杂 OnUpdateMsgUnreadCounts + * + * void + */ + public void OnUpdateMsgUnreadCounts() { + + NIMClient.getService(MsgService.class).queryRecentContacts() + .setCallback(new RequestCallbackWrapper>() { + @Override + public void onResult(int code, List recents, Throwable e) { + consultCount=0; + // recents参数即为最近联系人列表(最近会话列表) + if (code != ResponseCode.RES_SUCCESS || recents == null) { + + + + } + else + { + Iterator it = recents.iterator(); + while (it.hasNext()) { + RecentContact loadedRecent = it.next(); + if(loadedRecent.getUnreadCount()>0) + { + + if (!PatientSqlManager.isPatient(Constant.Patient_AppKey + loadedRecent.getContactId())) + { + consultCount=loadedRecent.getUnreadCount(); + + } + } + + + } + + } + //后面放消息红点,应放在我的患者的,进口出,显示红点,或者底部导航 + if (badgePublicServiceMsg != null) { + if(consultCount <1) { + badgePublicServiceMsg.hide(); + } else { + badgePublicServiceMsg.show(); + } + } + + + } + }); +// int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); +// int consultUnreadCount = IMessageSqlManager.getUnByTypeUnreadCount(Constant.typeConsult); +// int patientUnreadCount = IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient); +// if (unreadCount >= notifyUnreadCount) { +// consultCount = consultUnreadCount; +// } +// LogUtil.i("ps未读=consultUnreadCount="+consultUnreadCount); +// String msgPatientCount = count > 100 ? "..." : String.valueOf(count); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceDetailsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceDetailsActivity.java new file mode 100644 index 0000000..c83b34d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/PublicServiceDetailsActivity.java @@ -0,0 +1,699 @@ +package cn.shangyu.gdxzExpert.activity; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.ptop.P2PMessageActivity.startwithId; +import static cn.shangyu.gdxzExpert.utils.Constant.consult; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.main.CustomPushContentProvider; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.PublicSercicePhotoBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachmentType; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 功能说明:公益咨询详情的页面 + * + * 类名称:PublicServiceDetailsActivity 类描述:TODO 创建人:苏三元 时间:2015-9-24 下午5:04:29 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class PublicServiceDetailsActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + + private String mobile; + private String patientUuid; + private String realName,nickname; + private String consultUuid; + private String expertUuid; + // 抢答的接口 + private static String resConsult = Url.getresConsult; + // 公益咨询获取图片的接口 + private static String consultImg = Url.getconsultImgList; + private int sex; + // private String birthDate; + private String photo; + private GridView gridView; + private ArrayList urls = new ArrayList(); + private boolean isCloseAnswer = false; + private String content; +// private String birthDate; + private ECAlertDialog buildAlert; + private String drungtype; + private String createDate; + private TextView tv_drugtype; + private TextView tv_time; + private TextView tv_illnessdetail_1; + private TextView tv_name; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("咨询详情"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + TextView tv_tebieshenming_huanzhe; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_public_service_detais1_big); + tv_tebieshenming_huanzhe = view.findViewById(R.id.tv_tebieshenming_huanzhe); + //改变字体颜色 + //先构造SpannableString + SpannableString spanString = new SpannableString("特别声明:答案仅为医生个人经验或建议分享,不能视为诊断依据。"); + //再构造一个改变字体颜色的Span + ForegroundColorSpan span = new ForegroundColorSpan(Color.parseColor("#8D2316")); + //将这个Span应用于指定范围的字体 + spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + //设置给EditText显示出来 + tv_tebieshenming_huanzhe.setText(spanString); + } + else + { + view = UIUtils.inflate(R.layout.activity_public_service_detais1); + } + + Button bt_answer = (Button) view.findViewById(R.id.bt_answer); +// ImageView ivTouxiang = (ImageView) view +// .findViewById(R.id.iv_patient_touxiang); +// TextView tvName = (TextView) view.findViewById(R.id.tv_patient_name); +// TextView tvContent = (TextView) view +// .findViewById(R.id.tv_patient_content); + + tv_drugtype = view.findViewById(R.id.tv_drugtype); + tv_name = view.findViewById(R.id.tv_name); + tv_illnessdetail_1 = view.findViewById(R.id.tv_illnessdetail_1); + tv_time = view.findViewById(R.id.tv_time); + bt_answer.setOnClickListener(this); +// ivTouxiang.setOnClickListener(this); + gridView = (GridView) view.findViewById(R.id.gv_zixun); + gridView.setOnItemClickListener(this); + // gridView.setAdapter(new MyAdapter(urls )); + Intent intent = getIntent(); + + consultUuid = intent.getStringExtra("consultUuid"); + isCloseAnswer = intent.getBooleanExtra("isCloseAnswer", false); + if (isCloseAnswer) { + bt_answer.setVisibility(View.GONE); + if(tv_tebieshenming_huanzhe!=null) + { + tv_tebieshenming_huanzhe.setVisibility(View.GONE); + } + } + +// tvName.setText(realName); + +// if (content.contains(" .card")) { +// content.replace(" .card", ""); +// } +// tvContent.setText(content); + + + // 头像 +// if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + photo, +// ivTouxiang, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray)); +// } + + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + +// LogUtil.i("mobile:" + mobile + " realName:" + realName + " photo:" +// + photo + " content:" + content); + getlistphoto(consultImg);// 联网获取公益咨询图片 + return view; + } + + class MyAdapter extends BaseAdapter { + + private ArrayList list; + + public MyAdapter(ArrayList list) { + // TODO Auto-generated constructor stub + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = View.inflate(ct, + R.layout.item_casejistory_bingli, null); + mHolder = new NewsViewHolder(); + // 实例化控件 + mHolder.iv_image = (ImageView) convertView + .findViewById(R.id.iv_image); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + list.get(position).getPicurl(), + mHolder.iv_image, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default)); + return convertView; + } + + } + + /** + * 请求服务器,获取公益咨询患者上传照片 getlistphoto + * + * @param consultImg + */ + private void getlistphoto(String consultImg) { + Map map = new HashMap<>(); + map.put("uuid",consultUuid); + sendJsonPostParamtoNetSignMD5(consultImg,map,102,this); + // 封装参数 +// RequestParams params = new RequestParams(); +// params.addBodyParameter("uuid", consultUuid); +// HttpHelper.loadData(HttpMethod.POST, consultImg, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// closeProgressDialog(); +// ToastUtil.showToast("请求数据失败,请稍候再试"); +// } +// }); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + + private void processData(String result) { + PublicSercicePhotoBean bean = GsonTools.fromGsonToBean(result, + PublicSercicePhotoBean.class); + if (bean.code!=null&&!bean.code.equals("200")) { + ToastUtil.showToast("请求数据失败,请稍候再试"); + return; + } + if(bean.data==null||bean.data.detail==null) + { + ToastUtil.showToast("请求数据失败,请稍候再试"); + return; + } + + if("0".equals(bean.data.detail.getUser_status())) + { + realName =getResources().getString(com.netease.nim.uikit.R.string.cancellation); + } + else + { + realName = bean.data.detail.getPatientName(); + } + + drungtype = bean.data.detail.getDiseaseName(); + if (StringUtil.isEmpty(drungtype)){ + tv_drugtype.setVisibility(View.GONE); + }else if (drungtype.contains("甲、乙、丙、丁")) { + tv_drugtype.setText("肝炎"); + } else { + tv_drugtype.setText(drungtype); + } + photo = bean.data.detail.getPatientPhoto(); + content = bean.data.detail.getContent(); + tv_illnessdetail_1.setText(content); +// mobile = intent.getStringExtra("mobile"); +// sex = intent.getIntExtra("sex", 0); +// birthDate = bean.data.detail.getCreateDate(); + createDate = bean.data.detail.getCreateDate(); + tv_name.setText(realName+""); + if (!TextUtils.isEmpty(createDate) && createDate.length() > 16) { + tv_time.setText(createDate.substring(0, 16)); + } else if (!TextUtils.isEmpty(createDate)) { + tv_time.setText(createDate); + }else { + tv_time.setVisibility(View.INVISIBLE); + } + patientUuid = bean.data.detail.getPatientUuid(); + urls.clear(); + // 先判断数据是否 为空 + if (bean.data == null ) { + return; + } + + for (int i = 0; i < bean.data.imgList.size(); i++) { + urls.add(new ViewImageInfo(i, Url.urlHtml + bean.data.imgList.get(i).path, + Url.urlHtml + bean.data.imgList.get(i).path)); + // 填充适配器 + MyAdapter adapter = new MyAdapter(urls); + gridView.setAdapter(adapter); + + } + closeProgressDialog(); + + } + + private class NewsViewHolder { + public ImageView iv_image; + } + + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // 启动图片查看器 + CCPAppManager.startChattingImageViewAction( + PublicServiceDetailsActivity.this, arg2, urls); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + // 点击头像,打开患者详情 + case R.id.iv_patient_touxiang: + Intent intent = new Intent(ct, PatientActivity.class); + intent.putExtra("mobile", mobile); + intent.putExtra("realName", realName); + intent.putExtra("patientUuid", patientUuid); + intent.putExtra("consultUuid", consultUuid); + startActivity(intent);// 启动患者详情界面 + // ToastUtil.showToast(realName+"的患者详情"+",联系:"+mobile); + break; + // 点击我要回答 + case R.id.bt_answer: + getCountConsult(); + + break; + + default: + break; + } + } + + /** + * 请求服务器。列表数据 getPatientList + * + * @param loadUrl + * void + * @param + */ + private void getList(final String loadUrl) { + // 封装参数 + RequestParams params = new RequestParams(); + // 判断是否是公益咨询列表还是抢答公益咨询,page = 0表示是抢答的接口 + params.addBodyParameter("expertUuid", expertUuid); + params.addBodyParameter("consultUuid", consultUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { +// LogUtil.d("response_json---" + info.result); + Log.d("gdxzinfo.result","info.result "+info.result); + isState(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("抢答失败,请重试"); + } + }); + } + + /** + * 抢答数据解析处理 isState 1.抢答成功 2.该公益咨询已被抢答 + * + * @param result + * void + */ + protected void isState(String result) { + // TODO Auto-generated method stub + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + String states = bean.code;// 1.抢答成功 2.该公益咨询已被抢答 + String message = bean.message; + closeProgressDialog(); + if (states.equals("1")) { + ToastUtil.showToast("抢答成功"); + try { + JSONObject jsonObject=new JSONObject(result); + nickname=jsonObject.optString("patient_name"); + } catch (JSONException e) { + e.printStackTrace(); + } + + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + patientUuid); + patientModel.setPhoto(photo); + patientModel.setMobile(""); + patientModel.setRealName(realName); +// patientModel.setSex(sex); + patientModel.setType(Constant.typeConsult); + PatientSqlManager.insertPatient(patientModel, Constant.typeConsult); + + if (!TextUtils.isEmpty(patientUuid)) { + // 根据手机号启动聊天页面,聊天类型为公益咨询 + // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), + // receiver_type(接收方类型 1.患者 2.专家), + // chat_from(来源1.公益咨询 2.随访 3.vip), + // chat_from_uuid(如果是公益咨询,则存uuid,否则0) + // CCPAppManager.startChattingAction(ct, mobile, + // realName);Constant.typeConsult + TeachAttachment teachAttachment=new TeachAttachment(content,"","",consultUuid, + "http://182.92.67.209:8081/gdxz/expert/2016-01-13/dc522b2941d248dd84ddb3231f49b6e3.jpg", + CustomAttachmentType.CouTeach,""); +// TeachAttachment teachAttachment=new TeachAttachment("", +// "consult"+ "#" +// + realName +// + "#" +// + photo +// + "#" +// + patientUuid +// + "#" +// + mobile +// + "#" +// + sex +// + "#" +// + birthDate +// + "#" +// +tv_drugtype.getText() +// +"#" +// +tv_time.getText(), +// content,consultUuid, +// "http://182.92.67.209:8081/gdxz/expert/2016-01-13/dc522b2941d248dd84ddb3231f49b6e3.jpg", CustomAttachmentType.CouTeach,""); + IMMessage imessage= MessageBuilder.createCustomMessage(patientUuid.toLowerCase(), P2P, CustomAttachmentType.CouTeach, teachAttachment); + MessageFragment.ext.clear(); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_NICKNAME, UserInfoHelper.getUserName(patientUuid)); + if (!PatientSqlManager.isPatient(Constant.Patient_AppKey + patientUuid)) + { + MessageFragment.ext.put(Extras.EXTRA_CONSULT_UUID,consultUuid); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_TYPE,consult); + } + else + { + MessageFragment.ext.put(Extras.EXTRA_GDXZ_TYPE,general); + } + imessage.setRemoteExtension(MessageFragment.ext); + CustomPushContentProvider customConfig = NimUIKitImpl.getCustomPushContentProvider(); + if (customConfig == null) { + return; + } + String content = customConfig.getPushContent(imessage); + Map payload = customConfig.getPushPayload(imessage); + Map p=new HashMap<>(); + p.put("classification",1); + payload.put("vivoField",p);//vivo推送 + payload.put("apns-collapse-id", "321");//ios需要 + payload.put("apns-from-id", NimUIKit.getAccount());//ios需要 + if (!TextUtils.isEmpty(content)) { + imessage.setPushContent(content); + } + if (payload != null) { + imessage.setPushPayload(payload); + } + NIMClient.getService(MsgService.class).sendMessage(imessage,false).setCallback(new RequestCallback() { + @Override + public void onSuccess(Void aVoid) { + startwithId(PublicServiceDetailsActivity.this, patientUuid,null,null,consult,"",consultUuid,nickname); + finish(); + } + + @Override + public void onFailed(int i) { + int a=0; + + } + + @Override + public void onException(Throwable throwable) { + int a=0; + } + }); + /** + * 拓展字段应该进行封装 + */ +// SendCardUtils.sendCardMessage(Constant.Patient_AppKey + patientUuid,content,"consult"+ "#" +// + realName +// + "#" +// + photo +// + "#" +// + content +// + ".card" +// + "#" +// + patientUuid +// + "#" +// + mobile +// + "#" +// + sex +// + "#" +// + birthDate +// + "#" +// + consultUuid +// + "#" +// + "http://182.92.67.209:8081/gdxz/expert/2016-01-13/dc522b2941d248dd84ddb3231f49b6e3.jpg" +// + "#" +// +tv_drugtype.getText() +// +"#" +// +tv_time.getText() +// ); +// SessionHelper.startP2PSession(this, patientUuid,consult,""); + +// CCPAppManager.startChattingAction(ct, Constant.Patient_AppKey +// + patientUuid, realName, "2,1,1," + consultUuid, +// patientUuid, Constant.openPublicService,false); +// if(ChattingFragment.getInstance() != null){ +// ChattingFragment.getInstance().setShower(getResources().getString(R.string.open_public_service, +// realName)); +// } + + } else { + ToastUtil.showToast("无法回答"); + } + + Map param = new HashMap<>(); + param.put("score_type","2"); + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, PublicServiceDetailsActivity.this); + + } else if (states.equals("2")) { + DialogUtil.getMyProDialog(PublicServiceDetailsActivity.this, "确定", + message, new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + DialogUtil.dismissMyAlertDialog(); + // 刷新界面数据,去除无法抢答的咨询 + } + }).setProgressBarVisibility(View.GONE); + } + } + + private void getCountConsult() { + Map param = new HashMap(); + param.put("consultUuid", consultUuid); + param.put("expertUuid", expertUuid); + sendParamtoNet(Url.getCountConsult, param, 101, + PublicServiceDetailsActivity.this, false); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + public void getMessage(String message) { + + buildAlert = ECAlertDialog.buildAlert(ct, message, "否", "是", + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + + + + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + showProgressDialog("抢答中..."); + getList(resConsult); + } + }); + buildAlert.setTitle(" "); + // + buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 102: + if (resultJson != null) + { + processData(resultJson); + } + else + { + closeProgressDialog(); + ToastUtil.showToast("请求数据失败,请稍候再试"); + } + break; + case 101: + String code = null; + String message = null; + String data = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + if (resultJson != null) { + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + data = jsonObject.getString("data"); + message = jsonObject.getString("message"); + } catch (JSONException e) { + e.printStackTrace(); + } + } + if (data != null && !data.equals("0")) { + String messag = "您已回答过该患者" + data + "次公益咨询,是否确定回答?"; + getMessage(messag); + } else { + String messag = "是否确认回答?"; + getMessage(messag); + } + break; + + case 1: + JSONObject jsonObject1; + try { + jsonObject1 = new JSONObject(resultJson); + String optString = jsonObject1.optString("code"); + if ("200".equals(optString)) { + Constant.isRefreshpoint = true;//个人中心界面刷新 + ToastUtil.showMessage(jsonObject1.optString("message")); + + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuckMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuckMessageActivity.java new file mode 100644 index 0000000..8e6e2ab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuckMessageActivity.java @@ -0,0 +1,346 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Build; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.QuickReplyBean; +import cn.shangyu.gdxzExpert.bean.QuickReplyBean.QuickReplyData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * @author JIXiao QuckMessageActivity.java + * 功能说明:快捷回复 界面 可删除添加 + */ +@SuppressLint("ResourceAsColor") +@TargetApi(Build.VERSION_CODES.JELLY_BEAN) +public class QuckMessageActivity extends BaseActivity implements OnItemClickListener,OnItemLongClickListener { + + private ArrayList Data = new ArrayList(); + public static String getQuickReplyList = Url.getQuickReplyList;//快捷回复列表 + public static String addListUrl = Url.getaddQuickReply;//添加快捷回复 + public static String deleteListUrl = Url.getdeleteQuickReply;//删除快捷回复 + private QuckMessageAdapter ListAdapter; + private ListView lv_quck_list; + private LinearLayout lv_quck_message; + private String mes; + private CustomProgressDialog pd; + private TextView quck_mess_empty; + @Override + public void setTitle() { + top_title.setText("快捷回复"); + top_back_layout.setOnClickListener(this); + } + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_quck_mess); + lv_quck_message = (LinearLayout)view.findViewById(R.id.lv_quck_message); + lv_quck_list = (ListView)view.findViewById(R.id.lv_quck_mess_list); + quck_mess_empty = (TextView)view.findViewById(R.id.quck_mess_empty); + lv_quck_message.setOnClickListener(this); + lv_quck_list.setOnItemClickListener(this); + lv_quck_list.setOnItemLongClickListener(this); + initData(); + return view; + } + private void initData() { + String CollectListMessage = SharePrefUtil.getString(ct, getQuickReplyList,null); + if (TextUtils.isEmpty(CollectListMessage)) { +// showProgressDialog("加载中..."); + CollectListData(getQuickReplyList); + }else{ + processData(CollectListMessage); +// CollectListData(getQuickReplyList); + } + ListAdapter = new QuckMessageAdapter(Data); + lv_quck_list.setAdapter(ListAdapter); + + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.lv_quck_message: + final EditText et = new EditText(this); + et.setPadding(0, 30, 0, 0); + et.setBackground(getResources().getDrawable(R.drawable.diglog_drawle)); + //更换AlertDialog主题样式 + AlertDialog.Builder builder = new AlertDialog.Builder(QuckMessageActivity.this,AlertDialog.THEME_HOLO_LIGHT);//使用浅色背景 主题 + builder.setTitle("请输入快捷回复").setView(et) + .setPositiveButton("确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface arg0, int arg1) { + //数据获取 + mes = et.getText().toString(); + if(!TextUtils.isEmpty(mes)){ + AddListData(addListUrl); + }else{ + // ToastUtil.showMessage("请输入快捷回复内容"); + } + } + }).setNegativeButton("取消", null).show(); + + break; + case R.id.top_back_layout: + finish(); + break; + default: + break; + } + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + @Override + protected void onResume() { + // TODO Auto-generated method stub + CollectListData(getQuickReplyList); + super.onResume(); + } + class QuckMessageAdapter extends BaseAdapter { + List list; + public QuckMessageAdapter(ArrayList dataList) { + this.list=dataList; + } + @Override + public int getCount() { + return list.size(); + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + convertView = View.inflate(ct, R.layout.activity_shoucangbingli_list_item, null); + holder = new Holder(); + holder.message = (TextView) convertView.findViewById(R.id.item_name_title); + holder.message.setTextSize(16); + holder.message.setTextColor(getResources().getColor(R.color.text_color)); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + final QuickReplyData data = list.get(position); + if (data != null) { + holder.message.setText(data.replystr); + }else{ + holder.message.setText(""); + } + return convertView; + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + public class Holder { + public TextView message; + } + } + /** + * 请求服务器。添加回复记录 + * AddListData + * @param loadUrl + * void + */ + private void AddListData(final String loadUrl) { + pd = new CustomProgressDialog(ct, "正在添加中...."); + pd.show(); + String expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");//提取专家uuid + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("user_uuid",expertUuid);//传专家uuid + params.addBodyParameter("replystr",mes);//传专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + pd.dismiss(); + ToastUtil.showMessage("添加成功"); + processData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + ToastUtil.showMessage("添加失败,请稍候重试"); + pd.dismiss(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + /** + * 请求服务器。删除回复记录 + * DeceleListData + * @param loadUrl + * void + */ + private void DeceleListData(final String loadUrl,final String useruuid) { + pd = new CustomProgressDialog(ct, "正在删除中...."); + pd.show(); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("uuid",useruuid);//传快捷回复的uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + // processData(info.result); + onResume(); + pd.dismiss(); + ToastUtil.showMessage("删除成功"); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + pd.dismiss(); + ToastUtil.showMessage("操作失败 请稍候重试"); + } + }); + } + /** + * 请求服务器。获取快捷回复记录 + * CollectListData + * @param loadUrl + * void + */ + private void CollectListData(final String loadUrl) { + String expertUuid = SharePrefUtil.getString(ct, Constant.uuid, "");//提取专家uuid + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("user_uuid",expertUuid);//传专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, getQuickReplyList,info.result); + processData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + /** + * 解析并处理数据 + * @param result + */ + private void processData(String result) { + QuickReplyBean bean = GsonTools.fromGsonToBean(result,QuickReplyBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + Data.clear(); + if(bean.data == null || bean.data.size() == 0 ){ + quck_mess_empty.setVisibility(View.VISIBLE); + }else{ + Data.addAll(bean.data); + quck_mess_empty.setVisibility(View.GONE); + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new QuckMessageAdapter(Data); + } else { + ListAdapter.notifyDataSetChanged(); + } + } + /** + * item 点击事件 + */ + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(); + QuickReplyData list = Data.get(position); + String messa = list.replystr; + intent.putExtra("message",messa); + setResult(69, intent); + finish(); + } + /** + * 长按删除 + */ + public boolean onItemLongClick(AdapterView parent, View view, int position, + long arg3) { + // TODO Auto-generated method stub + QuickReplyData qrdata; + final int p ; + LogUtil.i("position:"+position); + p = position; + qrdata = Data.get(p); + final String useruuid = qrdata.uuid; + final ECListDialog dialog = new ECListDialog(ct, new String[]{"删除"}); + dialog.setOnDialogItemClickListener(new + ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + DeceleListData(deleteListUrl,useruuid); + dialog.dismiss(); + } + }); + dialog.setTitle("删除快捷回复"); + dialog.show(); + return true; + } + /** + * 重写返回键 + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){ + finish(); + } + return false; + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionActivity.java new file mode 100644 index 0000000..0ea5f83 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionActivity.java @@ -0,0 +1,174 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Url.listExcellencourseQA; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.ListView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.QuestionAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.QuestionBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class QuestionActivity extends BaseActivity implements OnCallBackFromNet, AdapterView.OnItemClickListener { + + PullToRefreshListView ptrLv; + int page=1; + QuestionBean questionBean; + private LinearLayout ll_empty; + List list=new ArrayList<>(); + QuestionAdapter adapter; + @Override + public void setTitle() { + top_title.setText("常见问题"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view= UIUtils.inflate(R.layout.activity_question); + ptrLv=view.findViewById(R.id.lv_item_q); + ll_empty=view.findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page=1; + getQuestion(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getQuestion(page+""); + } + }); +// ptrLv.setOnItemClickListener(this); + getQuestion(page+""); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + + } + + private void getQuestion(String page) + { + Map param = new HashMap<>(); + param.put("page",page); + sendJsonPostParamtoNetSignMD5(listExcellencourseQA,param,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + questionBean= GsonTools.fromGsonToBean(resultJson,QuestionBean.class); + if("200".equals(questionBean.getCode())) + { + list.clear(); + if (questionBean.getData() == null || questionBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + list.addAll(questionBean.getData().getList()); + } + if(adapter==null) + { + adapter=new QuestionAdapter(list); + ptrLv.getRefreshableView().setAdapter(adapter); + + } + else + { + adapter.notifyDataSetChanged(); + } + onLoaded(); + if (page > 1) { + // 是否有更多 + if (questionBean.getData() == null || questionBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = questionBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + + } + else + { + ToastUtil.showToast(questionBean.getMsg()); + } + break; + } + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent=new Intent(QuestionActivity.this,WebActivity.class); + intent.putExtra("url",questionBean.getData().getList().get(position-1).getPath()); + intent.putExtra("title","问题详情"); + intent.putExtra("need_share","0"); + startActivity(intent); + + } + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionListActivity.java new file mode 100644 index 0000000..26fd0c5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/QuestionListActivity.java @@ -0,0 +1,340 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.ForegroundColorSpan; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.ImageIllnessAdapter; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GetInterrogationBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateGetAge; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.ScollViewGridView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/7/30. + */ + +public class QuestionListActivity extends BaseActivity implements OnCallBackFromNet { + private View view; + private String step1_uuid; + public static final int GETINTERROGATION = 200; + private PullToRefreshListView lv_list; + private View TopView; + private RelativeLayout rl_detail; + private TextView tv_name,tv_info,tv_drugtype,tv_time,tv_illnessdetail_1; + private ImageView tv_detail; + private LinearLayout ll_close; + private GridView gv_add_topic; + private Button bt_next; + private boolean flag_more = true; + private TextView tv_more; + private ImageView iv_down; + private LinearLayout ll_more; + private GetInterrogationBean getInterrogationBean; + private QuestionListAdapter adapter; + + + @Override + public void setTitle() { + top_title.setText("问题详情"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_getinterrogation_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_getinterrogation); + } + + AppManager.getAppManager().addActivity2(this); + step1_uuid = getIntent().getStringExtra("step1_uuid"); + initView(); + getData(); + return view; + } + private void initView() { + lv_list =(PullToRefreshListView) view.findViewById(R.id.lv_list); + rl_detail = view.findViewById(R.id.rl_detail); + TextView tv_tebieshenming_huanzhe = view.findViewById(R.id.tv_tebieshenming_huanzhe); + //改变字体颜色 + //先构造SpannableString + SpannableString spanString = new SpannableString("特别声明:答案仅为医生个人经验或建议分享,不能视为诊断依据,如有诊疗需求,请务必前往正规医院就诊。"); + //再构造一个改变字体颜色的Span + ForegroundColorSpan span = new ForegroundColorSpan(Color.parseColor("#8D2316")); + //将这个Span应用于指定范围的字体 + spanString.setSpan(span, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); + //设置给EditText显示出来 + tv_tebieshenming_huanzhe.setText(spanString); + if(CommonUtil.BigModule()) + { + TopView = UIUtils.inflate(R.layout.layout_illnessdetail_scrollhead_big); + } + else + { + TopView = UIUtils.inflate(R.layout.layout_illnessdetail_scrollhead); + } + + tv_name = TopView.findViewById(R.id.tv_name); + tv_info = TopView.findViewById(R.id.tv_info); + tv_detail = TopView.findViewById(R.id.tv_detail); + tv_drugtype = TopView.findViewById(R.id.tv_drugtype); + tv_time = TopView.findViewById(R.id.tv_time); + tv_illnessdetail_1 = TopView.findViewById(R.id.tv_illnessdetail_1); + gv_add_topic = TopView.findViewById(R.id.gv_add_topic); + + bt_next = view.findViewById(R.id.bt_next); + gv_add_topic.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + String imgs = getInterrogationBean.getData().getImgs(); + String[] split = imgs.split(","); + ArrayList urls = new ArrayList(); + for (int i = 0; i < split.length; i++) { + urls.add(new ViewImageInfo(i, Url.urlHtml+ split[i], + Url.urlHtml+ split[i])); + } + CCPAppManager.startChattingImageViewAction(QuestionListActivity.this, + 0, urls); + } + }); + bt_next.setOnClickListener(this); + tv_detail.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent1 = new Intent(QuestionListActivity.this,PatientDetailActivity.class); + intent1.putExtra("step1_uuid",getInterrogationBean.getData().getStep1_uuid()); + startActivity(intent1); + } + }); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.bt_next: + if (getInterrogationBean!=null&&"200".equals(getInterrogationBean.getCode())){ + Intent intent = new Intent(QuestionListActivity.this,MyIdeaActivity.class); + intent.putExtra("step1_uuid",getInterrogationBean.getData().getStep1_uuid()); + startActivity(intent); + } + + break; + } + } + private void getData() { + Map map = new HashMap<>(); + map.put("uuid",step1_uuid); + sendJsonPostParamtoNetSignMD5(Url.getInterrogation,map,GETINTERROGATION,this); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("resultJson="+resultJson); + Gson gson = new Gson(); + getInterrogationBean = gson.fromJson(resultJson, GetInterrogationBean.class); + if ("200".equals(getInterrogationBean.getCode())){ + String name = getInterrogationBean.getData().getName(); + tv_name.setText(name.subSequence(0,1)); + String birthday = getInterrogationBean.getData().getBirthday(); + int sex = getInterrogationBean.getData().getSex(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date date = sdf.parse(birthday.split(" ")[0]); + int age = DateGetAge.getAge(date); + if (sex==0){ + tv_info.setText("( 男 "+age+"岁 )"); + }else { + tv_info.setText("( 女 "+age+"岁 )"); + } + } catch (Exception e) { + e.printStackTrace(); + } + String disease_describe = getInterrogationBean.getData().getDisease_describe(); + tv_illnessdetail_1.setText(disease_describe+"\n"+getInterrogationBean.getData().getYour_question()); + tv_drugtype.setText(getInterrogationBean.getData().getDisease_name()); + tv_time.setText(getInterrogationBean.getData().getCreate_date().split(" ")[0]); + + String imgs = getInterrogationBean.getData().getImgs(); + if (StringUtil.isEmpty(imgs)){ + gv_add_topic.setVisibility(View.GONE); + }else { + String[] split = imgs.split(","); + if (split.length>4){ + ViewGroup.LayoutParams params = gv_add_topic.getLayoutParams(); + params.height = getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_stacked_tab_max_width);; + gv_add_topic.setLayoutParams(params); + } + ImageIllnessAdapter imgadapter = new ImageIllnessAdapter(QuestionListActivity.this,imgs); + gv_add_topic.setAdapter(imgadapter); + } + + if (getInterrogationBean.getData().getSupplementList().size()==0){ + rl_detail.addView(TopView); + RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) TopView.getLayoutParams(); + layoutParams.bottomMargin = getResources().getDimensionPixelSize(R.dimen.dp144); + TopView.setLayoutParams(layoutParams); + lv_list.setVisibility(View.GONE); + }else { + List supplementList = getInterrogationBean.getData().getSupplementList(); + ListView lv = lv_list.getRefreshableView(); + lv.addHeaderView(TopView); + adapter = new QuestionListAdapter(supplementList); + lv.setAdapter(adapter); + } + }else { + ToastUtil.showMessage(getInterrogationBean.getMessage()); + } + + + } + + class QuestionListAdapter extends BaseAdapter { + + private List supplementList1; + + public QuestionListAdapter(List supplementList) { + this.supplementList1 = supplementList; + } + + @Override + public int getCount() { + return supplementList1.size(); + } + + @Override + public Object getItem(int position) { + return supplementList1.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + if(CommonUtil.BigModule()) + { + convertView = LayoutInflater.from(QuestionListActivity.this).inflate( + R.layout.item_illnesscomplete_big, null); + } + else + { + convertView = LayoutInflater.from(QuestionListActivity.this).inflate( + R.layout.item_illnesscomplete, null); + } + holder.tv_add = convertView.findViewById(R.id.tv_add); + holder.tv_time = convertView.findViewById(R.id.tv_time); + holder.gv_add_topic = convertView.findViewById(R.id.gv_add_topic); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + holder.tv_time.setText(supplementList1.get(position).getCreate_date().split(" ")[0]); + String note = supplementList1.get(position).getDisease_describe(); + holder.tv_add.setText(note); + + if (!StringUtil.isEmpty(supplementList1.get(position).getImgs())) { + final String[] split = supplementList1.get(position).getImgs().split(","); + if (split.length > 4) { + ViewGroup.LayoutParams params = holder.gv_add_topic.getLayoutParams(); + params.height = getResources().getDimensionPixelOffset(R.dimen.abc_action_bar_stacked_tab_max_width); + holder.gv_add_topic.setLayoutParams(params); + } + holder.gv_add_topic.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + ArrayList urls = new ArrayList(); + for (int i = 0; i < split.length; i++) { + urls.add(new ViewImageInfo(i, Url.urlHtml + split[i], + Url.urlHtml + split[i])); + } + + CCPAppManager.startChattingImageViewAction(QuestionListActivity.this, + 0, urls); + } + }); + ImageIllnessAdapter imgadapter = new ImageIllnessAdapter(QuestionListActivity.this, supplementList1.get(position).getImgs()); + holder.gv_add_topic.setAdapter(imgadapter); + }else { + holder.gv_add_topic.setVisibility(View.GONE); + } + + + return convertView; + } + + class ViewHolder { + ScollViewGridView gv_add_topic; + TextView tv_add, tv_time, tv_add1; + + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + AppManager.getAppManager().finishActivity2(this); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/RankingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/RankingActivity.java new file mode 100644 index 0000000..7ac1a66 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/RankingActivity.java @@ -0,0 +1,319 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.content.Intent; +import android.util.Log; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.BarAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.RankingBean; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +public class RankingActivity extends BaseActivity { + + + @Override + public void setTitle() { + + } + private RecyclerView recyclerView; + BarAdapter adapter; + + LinearLayout classicsFooter,Footer; + SmartRefreshLayout refreshLayout; + String url; + TextView textname; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_ranking); + textname=view.findViewById(R.id.textname); + recyclerView=view.findViewById(R.id.recyclerview); + refreshLayout=view.findViewById(R.id.refreshLayout); + classicsFooter=view.findViewById(R.id.r_head); + Footer=view.findViewById(R.id.r_foot); + initdata(); + url=getIntent().getStringExtra("url"); + if(url.contains(Url.rankingListByUser)) + { + top_title.setText("病例创建排行"); + } + else + { + top_title.setText("入组排行"); + } + textname.setText(top_title.getText().toString()); + gettokens(url); + return view; + } + public int page=1; + public void initdata() { + + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + recyclerView.addItemDecoration(new SpaceItemDecoration(0, 20)); + + refreshLayout.setEnableNestedScroll(true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(RankingActivity.this,null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(RankingActivity.this,null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayout.refreshing(); + page++; + inits(page,url); + + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayoutNew.refreshing(); + page=1; + inits(page,url); + + + + + } + + + }); + + } + List list=new ArrayList<>(); + RankingBean rankingBean; + private void inits(int pages,String url) + { + projectQueryForm pro=new projectQueryForm(); + pro.setPageNum(pages+""); + pro.setPageSize("10"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + refreshLayout.finishRefresh(); + refreshLayout.finishLoadMore(); + if(hasrealtoken(response)>0) + { + rankingBean= GsonTools.fromGsonToBean(response, RankingBean.class); + if(rankingBean.getData()!=null) { + if(pages==1) + { + list.clear(); + } + list.addAll(rankingBean.getData().getList()); + if(page>rankingBean.getData().getPages()) + { + page--; + ToastUtil.showToast("没有更多了"); + refreshLayout.setEnableLoadMore(false); + } + else + { + refreshLayout.setEnableLoadMore(true); + } + setAdapter(); + + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(url); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(RankingActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + public void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(RankingActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.rankingListByHospital)||url.contains(Url.rankingListByUser)) + { + inits(page,url); + } + + + } + private void setAdapter() + { + if(adapter==null) + { + adapter = new BarAdapter(this,list); + recyclerView.setAdapter(adapter); + } + else + { + adapter.notifyDataSetChanged(); + } + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/RegistActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/RegistActivity.java new file mode 100644 index 0000000..f4d3a21 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/RegistActivity.java @@ -0,0 +1,1009 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.Message; +import android.text.InputType; +import android.text.Selection; +import android.text.Spannable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SmsObserver; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.ResizeLayout; +import cn.shangyu.gdxzExpert.widget.ResizeLayout.OnResizeListener; +import cn.shangyu.gdxzExpert.widget.TimeButton; + +import static cn.shangyu.gdxzExpert.activity.MainActivity.YXREGISTER; +import static cn.shangyu.gdxzExpert.utils.Url.getregist; +import static cn.shangyu.gdxzExpert.utils.Url.getsendSms; + +/** + * + * RegistActivity.java + * + * @author ssy + * @date 2015-9-8 下午3:53:19 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:注册的activity + * + * @author liufang + * @since 2015-11-16 修改 + */ +public class RegistActivity extends BaseActivity implements OnCallBackFromNet { + + protected static final String TAG = "RegistActivity"; + // private ImageButton top_back; + + private static final int BIGGER = 1; + private static final int SMALLER = 2; + private static final int MSG_RESIZE = 1; + public static final int MSG_SEND = 3; + private static final int HEIGHT_THREADHOLD = 30; + + private RelativeLayout rl_logo; + private EditText et_user_phone_number, et_user_password, + et_identifying_code, et_num; + private Button btn_regist; + private TimeButton tv_get_identifying_code; + private ResizeLayout ll_register; + private String deviceSpec;// 设备型号 + private String deviceType = "0";// 设备类型(0安卓,1IOS) + + private TextView tv_reg_service; + + private CheckBox cb_ok, mShowPass; + + private ImageView mIv_num; + private SmsObserver mObserver; + + @Override + public void setTitle() { + top_title.setText("注册"); + top_back_layout.setOnClickListener(this); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_regist); + et_user_phone_number = (EditText) view + .findViewById(R.id.et_user_phone_number); + // 设置输入框获得焦点hint提示消失 + et_user_phone_number + .setOnFocusChangeListener(onFocusAutoClearHintListener); + et_user_password = (EditText) view.findViewById(R.id.et_user_password); + // 设置输入框获得焦点hint提示消失 + et_user_password.setOnFocusChangeListener(onFocusAutoClearHintListener); + // 设置输入框获得焦点hint提示消失 + et_num = (EditText) view.findViewById(R.id.et_num_code); + mIv_num = (ImageView) view.findViewById(R.id.iv_get_num); + + et_identifying_code = (EditText) view + .findViewById(R.id.et_identifying_code); + et_identifying_code + .setOnFocusChangeListener(onFocusAutoClearHintListener); + ll_register = (ResizeLayout) view.findViewById(R.id.register_ll); + tv_get_identifying_code = (TimeButton) view + .findViewById(R.id.tv_get_identifying_code); + tv_reg_service = (TextView) view.findViewById(R.id.tv_reg_service); + cb_ok = (CheckBox) view.findViewById(R.id.cb_ok); + mShowPass = (CheckBox) view.findViewById(R.id.show_password); + /** + * 自动添加短信验证码 + * */ +// mObserver = new SmsObserver(RegistActivity.this, mHandler); +// Uri uri = Uri.parse("content://sms/"); +// // 注册短信的监听 +// getContentResolver().registerContentObserver(uri, true, mObserver); + mShowPass.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + if (isChecked) { + et_user_password + .setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); + } else { + et_user_password.setInputType(InputType.TYPE_CLASS_TEXT + | InputType.TYPE_TEXT_VARIATION_PASSWORD); + } + et_user_password.postInvalidate(); + // 切换后将EditText光标置于末尾 + CharSequence charSequence = et_user_password.getText(); + if (charSequence instanceof Spannable) { + Spannable spanText = (Spannable) charSequence; + Selection.setSelection(spanText, charSequence.length()); + } + } + }); + + rl_logo = (RelativeLayout) view.findViewById(R.id.logo); + + btn_regist = (Button) view.findViewById(R.id.btn_regist); + tv_get_identifying_code.onCreate(); + tv_get_identifying_code.clearTimer(); + tv_get_identifying_code.setTextBefore("获取验证码").setLenght(60 * 1000); + mIv_num.setOnClickListener(this); + tv_get_identifying_code.setOnClickListener(this); + btn_regist.setOnClickListener(this); + tv_reg_service.setOnClickListener(this); + cb_ok.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { +// if (!isChecked) { +// btn_regist.setEnabled(false); +// btn_regist.setClickable(false); +// } +// else { + btn_regist.setEnabled(true); + btn_regist.setClickable(true); +// } + } + }); + + initEvent(); + // 获得设备信息 + getDeviceInfo(); + // new Thread(networkTask).start(); + return view; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + /** + * + * @author gaofei + * @date 2015-9-8 下午4:22:04 + * + * 功能说明:获得设备信息,设备类型,设备型号 + * + * method + */ + private void getDeviceInfo() { + String mobileName = ""; + String mobileType = ""; + try { + mobileName = android.os.Build.MANUFACTURER; + mobileType = android.os.Build.MODEL; + } catch (Exception e) { + e.printStackTrace(); + } + deviceSpec = mobileName + " " + mobileType; + deviceSpec = deviceSpec.replaceAll("\\s*", ""); + LogUtil.i(deviceSpec); + + } + + private void initEvent() { + // 设置size改变监听 + ll_register.setOnResizeListener(new OnResizeListener() { + @Override + public void OnResize(int w, int h, int oldw, int oldh) { + int change = BIGGER; + if (h < oldh) { + change = SMALLER; + } + Message msg = new Message(); + msg.what = 1; + msg.arg1 = change; + inputHandler.sendMessage(msg); + } + }); + top_back_layout.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + } + + Runnable networkTask3 = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + yzCode(); + + } + }; + + // 获取验证码 + private void yzCode() { + final String username = et_user_phone_number.getText().toString() + .trim(); + try { + // 对输入的内容进行编码,防止中文乱码 + String usernum = URLEncoder.encode(et_num.getText().toString() + .trim(), "UTF-8"); + int a = StringUtil.getnum(); + String mc = null; + try { + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(username + "|" + system_time, + "deoep09_klodLdAo"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(getsendSms + "?mc=" + mc + "&type=1&a=" + a); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 3; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_get_identifying_code) {// 获取验证码 + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + ToastUtil.showMessage("网络异常"); + return; + } + username = et_user_phone_number.getText().toString().trim(); + if (TextUtils.isEmpty(username)) {// 手机号码不能为空 + ToastUtil.showMessage("手机号码不能为空"); + et_user_phone_number.requestFocus(); + return; + } + if (!ValidateUtils.isPhoneAndMobile(username)) {// 手机号码格式不正确 + ToastUtil.showMessage("手机号码格式不正确"); + et_user_phone_number.requestFocus(); + return; + } + + Map param = new HashMap<>(); + param.put("mobile",username); + param.put("type","1"); + sendJsonPostParamtoNetSignMD5(getsendSms,param,MSG_SEND,this); + +// getSystemTime(); + } else if (id == R.id.btn_regist) {// 注册 + if(!cb_ok.isChecked()) + { + ToastUtil.showToast("请先阅读并同意协议"); + return; + } + + initRegist(); + } else if (id == R.id.tv_reg_service) {// 注册协议 + initRegistService(); + } else if (id == R.id.iv_get_num) { + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + mIv_num.setImageResource(R.drawable.moren_yzm); + ToastUtil.showMessage("网络异常"); + } else { + new Thread(networkTask).start(); + } + } + } + + private void initRegistService() { + Intent intent = new Intent(RegistActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "注册协议"); + startActivity(intent); + } + + private void initRegist() { + registerNext(); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// +// if (PermissionsUtil.hasPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 +// registerNext(); +// } else { +// PermissionsUtil.requestPermission(this, new PermissionListener() { +// @Override +// public void permissionGranted(@NonNull String[] permissions) { +// //用户授予了访问读写的权限 +// registerNext(); +// } +// @Override +// public void permissionDenied(@NonNull String[] permissions) { +// //用户拒绝了访问读写的申请 +//// finish(); +// +// } +// +// }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); +// } +// +// }else { +// registerNext(); +// } + + } + + private void registerNext() { + username = et_user_phone_number.getText().toString().trim(); + final String password = et_user_password.getText().toString().trim(); + // String repassword = et_user_repassword.getText().toString().trim(); + // final String status = et_user_status.getText().toString().trim(); + final String identifyingCode = et_identifying_code.getText().toString() + .trim(); + if (TextUtils.isEmpty(username)) {// 手机号码不能为空 + ToastUtil.showMessage("手机号码不能为空"); + et_user_phone_number.requestFocus(); + return; + } + if (!ValidateUtils.isMobileNum(username)) {// 手机号码格式不正确 + ToastUtil.showMessage("手机号码格式不正确"); + et_user_phone_number.requestFocus(); + return; + } + if (TextUtils.isEmpty(identifyingCode)) {// 验证码为空 + ToastUtil.showMessage("请核对验证码"); + et_identifying_code.requestFocus(); + return; + } + if (TextUtils.isEmpty(password)) {// 密码为空 + ToastUtil.showMessage("密码不能为空"); + et_user_password.requestFocus(); + return; + } + if (!ValidateUtils.isPassword(password)) { + ToastUtil.showMessage("请输入6-16位字母、数字组合密码"); + et_user_password.requestFocus(); + return; + } + if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {// 为正确的情况下 + LogUtil.i("为注册正确的情况下"); + showProgressDialog("正在注册,请稍候"); + Map param = new HashMap<>(); + param.put("password",password); + param.put("mobile",username); + param.put("sms", identifyingCode); + param.put("current_spec", deviceSpec); + sendJsonPostParamtoNetSignMD5(getregist,param,YXREGISTER,this); +// new Thread() { +// public void run() { +// try { +// List parameters = new ArrayList(); +// BasicNameValuePair value01 = new BasicNameValuePair( +// "mobile", username); +// // 注册时用户密码加密 +// BasicNameValuePair value02 = new BasicNameValuePair( +// "password", password); +// BasicNameValuePair value03 = new BasicNameValuePair( +// "deviceType", deviceType); +// BasicNameValuePair value04 = new BasicNameValuePair( +// "deviceSpec", deviceSpec); +// BasicNameValuePair value05 = new BasicNameValuePair( +// "sms", identifyingCode); +// parameters.add(value01); +// parameters.add(value02); +// parameters.add(value03); +// parameters.add(value04); +// parameters.add(value05); +// HttpResult httpResult = HttpHelper.post(getregist, +// parameters);// 请求网络 +// String str = httpResult.getString();// str为服务器返回的json串 +// +// LogUtil.i("注册str" + str); +// +// Message msg = Message.obtain(); +// msg.obj = str; +// handler.sendMessage(msg); +// +// } catch (Exception e) { +// e.printStackTrace(); +// handler.sendEmptyMessage(ERROR); +// } +// }; +// }.start(); + } + } + + public static int ERROR = 101; + public Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + if (msg.what == ERROR) { + ToastUtil.showToast("注册失败,请重试"); + } else { + // try { + String str = (String) msg.obj; + if (TextUtils.isEmpty(str)) { + ToastUtil.showToast("注册失败,请重试"); + return; + } + // RegistBean bean = GsonTools.fromGsonToBean(str, + // RegistBean.class); + JSONObject strs; + try { + strs = new JSONObject(str); + String code = strs.getString("code"); + String message = strs.getString("message"); + if (("1").equals(code)) { + String expertbean = strs.getString("expertbean"); + JSONObject strsJson = new JSONObject(expertbean); + String uuid = strsJson.getString("uuid"); + String state = strsJson.getString("state"); + + getSaveUserInfor(strs); + + // JSONObject date = objs.getJSONObject("data"); + SharePrefUtil.saveString(ct, Constant.uuid, uuid); + SharePrefUtil.saveString(ct, Constant.mobile, username);// 手机号,这个为了重新登录后回显之前的手机号 + Intent intent = new Intent(RegistActivity.this, + LoginSetInfoActivity.class); + intent.putExtra("checkInfo", "1"); + intent.putExtra("phone", username); + intent.putExtra("uuid", uuid); + intent.putExtra("state", state); + startActivity(intent); + finish(); + } else { + ToastUtil.showToast(message); + } + // } catch (JSONException e) { + // e.printStackTrace(); + // ToastUtil.showToast("注册失败,请重试"); + // } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + } + }; + private String currentUsername; + private String currentPassword; + private int state; + private String checkInfo; + + // 保存个人信息 + public void getSaveUserInfor(JSONObject objs) throws JSONException { + JSONObject date = objs.getJSONObject("expertbean"); + + String uuid = date.getString("uuid"); + String realName = date.getString("realName"); + String mobile = date.getString("mobile"); + String photo = date.getString("photo"); + String email = date.getString("email"); + String birthDate = date.getString("birthDate"); + String hospitalUuid = date.getString("hospitalUuid"); + String hospitalName = date.getString("hospitalName"); + String officeUuid = date.getString("officeUuid"); + String officeName = date.getString("officeName"); + String officePhone = date.getString("officePhone"); + String positionUuid = date.getString("positionUuid"); + String positionName = date.getString("positionName"); + String intro = date.getString("intro"); + String certificate = date.getString("certificate"); + String certificateImg = date.getString("certificateImg"); + String qrcode = date.getString("qrcode"); + checkInfo = date.getString("checkInfo"); + String cityId = date.getString("cityId"); + String countyId = date.getString("countyId"); + String provId = date.getString("provId"); + int isStar = date.getInt("isStar"); + // int nation = date.getInt("nation"); + int sex = date.getInt("sex"); + state = date.getInt("state");// 审核状态( 1.待审核 2.审核中 3.需要补充修改资料 + // 4.再次提交审核 5.拒绝 6.已通过 + + // 保存个人资料到SP文件 + SharePrefUtil.saveString(ct, Constant.USERID, uuid); + SharePrefUtil.saveString(ct, Constant.uuid, uuid);// 唯一标识,我的uuid + SharePrefUtil.saveString(ct, Constant.realName, realName);// 真实姓名 + SharePrefUtil.saveString(ct, Constant.mobile, mobile);// 手机号 + if (!StringUtil.isEmpty(currentUsername) + && ValidateUtils.isMobileNum(currentUsername)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, currentUsername);// 手机号,这个为了重新登录后回显之前的手机号 + } else if (!StringUtil.isEmpty(mobile) + && ValidateUtils.isMobileNum(mobile)) { + SharePrefUtil.saveString(ct, Constant.SP_IS_FIRST_NAME, + Constant.mobile, mobile);// 手机号,这个为了重新登录后回显之前的手机号 + } + SharePrefUtil.saveString(ct, Constant.photo, photo);// 头像路径 + SharePrefUtil.saveString(ct, "email", email);// 邮箱 + SharePrefUtil.saveString(ct, "birthDate", birthDate);// 出生日期 + SharePrefUtil.saveString(ct, "hospitalUuid", hospitalUuid);// 坐诊医院uuid + SharePrefUtil.saveString(ct, "hospitalName", hospitalName);// 坐诊医院名称 + SharePrefUtil.saveString(ct, "officeUuid", officeUuid);// 科室uuid + SharePrefUtil.saveString(ct, "officeName", officeName);// 科室名称 + SharePrefUtil.saveString(ct, "officePhone", officePhone);// 科室电话 + SharePrefUtil.saveString(ct, "positionUuid", positionUuid);// //职称uuid + SharePrefUtil.saveString(ct, "positionName", positionName);// //职称名称 + SharePrefUtil.saveString(ct, "intro", intro);// 简介 + SharePrefUtil.saveString(ct, "certificate", certificate);// 执业资格证 + SharePrefUtil.saveString(ct, "certificateImg", certificateImg);// 执业资格证图片 + SharePrefUtil.saveString(ct, "qrcode", qrcode);// 二维码 + SharePrefUtil.saveString(ct, "checkInfo", checkInfo);// 审核信息 + SharePrefUtil.saveString(ct, "cityId", cityId);// 市id + SharePrefUtil.saveString(ct, "countyId", countyId);// //区县id + SharePrefUtil.saveString(ct, "provId", provId);// 省id + // SharePrefUtil.saveInt(ct, "nation", nation); + SharePrefUtil.saveInt(ct, "isStar", isStar);// 是否是肝胆名医 0否 1是 + SharePrefUtil.saveInt(ct, "sex", sex);// 性别(0.男 1.女) + SharePrefUtil.saveInt(ct, "state", state);// 审核状态( 1.待审核 + // 2.审核中3.需要补充修改资料 + // 4.再次提交审核5.拒绝 6.已通过) + LogUtil.i("登录资料date " + date + " uuid:" + uuid + " state:" + state); + // 进行判断是否进入主页面还是进入设置页面 + } + + public Handler hdler = new Handler() { + public void handleMessage(Message msg) { + + if (msg.what == ERROR) { + ToastUtil.showToast("获取验证码失败,请重试"); + tv_get_identifying_code.clearTimer(); + } else { + try { + String str = (String) msg.obj; + if (TextUtils.isEmpty(str)) { + ToastUtil.showToast("获取验证码失败,请重试"); + tv_get_identifying_code.clearTimer(); + return; + } + JSONObject objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + LogUtil.i("短信验证码:retcode====" + retcode + "==message=="+ message); + if (("1").equals(retcode)) { + ToastUtil.showToast("验证码已发送,请查收短信"); + SharePrefUtil.saveString(ct, "key_regist_code_time", + DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + // else if (("2").equals(retcode)) { + // ToastUtil.showToast("手机格式不正确,请确认"); + // } else if (("3").equals(retcode)) { + // ToastUtil.showToast("手机号已注册,请更换手机号"); + // } else if (("4").equals(retcode)) { + // ToastUtil.showToast("手机号未在运营商注册"); + // } else if (("6").equals(retcode)) { + // ToastUtil.showToast("短信发送过于频繁,请稍后"); + // } + else { + ToastUtil.showToast(message); + tv_get_identifying_code.clearTimer(); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("获取验证码失败,请重试"); + tv_get_identifying_code.clearTimer(); + } + + } + + } + }; + private String username; + + @Override + protected void onDestroy() { + tv_get_identifying_code.onDestroy(); + super.onDestroy(); +// getContentResolver().unregisterContentObserver(mObserver); + } + + private Handler inputHandler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_RESIZE: { + if (msg.arg1 == BIGGER) { + rl_logo.setVisibility(View.VISIBLE); + } else { + rl_logo.setVisibility(View.GONE); + } + } + break; + + default: + break; + } + super.handleMessage(msg); + }; + }; + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + // 在这里进行 http request.网络请求相关操作 + // Message msg = new Message(); + // Bundle data = new Bundle(); + // data.putString("value", "请求结果"); + // msg.setData(data); + long times = System.currentTimeMillis(); + mbBitmap = getInternetPicture(Url.getImagecode + "?t=" + times); + handler1.sendEmptyMessage(1); + + } + }; + Bitmap mbBitmap = null; + Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + switch (msg.what) { + case 1: + if (mbBitmap != null) + mIv_num.setImageBitmap(mbBitmap); + + break; + case 2: + String str = (String) msg.obj; + JSONObject objs; + try { + objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + + new Thread(networkTask3).start(); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 3: + String str2 = (String) msg.obj; + JSONObject objs2; + try { + objs2 = new JSONObject(str2); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals(String.valueOf(1))) { + tv_get_identifying_code.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + default: + break; + } + } + + }; + String sessionid = null; + + public Bitmap getInternetPicture(String UrlPath) { + Bitmap bm = null; + // 1、确定网址 + // http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg + String urlpath = UrlPath; + // 2、获取Uri + try { + URL uri = new URL(urlpath); + + // 3、获取连接对象、此时还没有建立连接 + HttpURLConnection connection = (HttpURLConnection) uri + .openConnection(); + // 4、初始化连接对象 + // 设置请求的方法,注意大写 + connection.setRequestMethod("GET"); + // 读取超时 + connection.setReadTimeout(5000); + // 设置连接超时 + connection.setConnectTimeout(5000); + // 5、建立连接 + connection.connect(); + String cookieval = connection.getHeaderField("set-cookie"); + + if (cookieval != null) { + sessionid = cookieval.substring(0, cookieval.indexOf(";")); + } + + // 6、获取成功判断,获取响应码 + if (connection.getResponseCode() == 200) { + // 7、拿到服务器返回的流,客户端请求的数据,就保存在流当中 + InputStream is = connection.getInputStream(); + // 8、从流中读取数据,构造一个图片对象GoogleAPI + bm = BitmapFactory.decodeStream(is); + // 9、把图片设置到UI主线程 + // ImageView中,获取网络资源是耗时操作需放在子线程中进行,通过创建消息发送消息给主线程刷新控件; + is.close(); + + } else { + bm = null; + } + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return bm; + + } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + + mIsRight(); + + } + }; + + private void mIsRight() { + try { + // 对输入的内容进行编码,防止中文乱码 + String username = URLEncoder.encode(et_num.getText().toString() + .trim(), "UTF-8"); + // 对应GET请求,要把请求信息拼接在url后面 + URL url = new URL(Url.getvalide + "?valicode=" + username); + + // 调用url的openConnection()方法,获得连接对象 + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (sessionid != null) { + conn.setRequestProperty("cookie", sessionid); + } + // 设置HttpURLConnection的属性 + conn.setRequestMethod("GET"); + conn.setReadTimeout(5000); + conn.setConnectTimeout(5000); + + // 只是建立一个连接, 并不会发送真正http请求 (可以不调用) + conn.connect(); + + // 通过响应码来判断是否连接成功 + if (conn.getResponseCode() == 200) { + // 获得服务器返回的字节流 + InputStream is = conn.getInputStream(); + + // 内存输出流,适合数据量比较小的字符串 和 图片 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buf = new byte[1024]; + int len = 0; + while ((len = is.read(buf)) != -1) { + baos.write(buf, 0, len); + } + // 可使用 toByteArray() 和 toString() 获取数据。 + byte[] result = baos.toByteArray(); + is.close(); + Message message = new Message(); + message.what = 2; + message.obj = new String(result); + handler1.sendMessage(message); + + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public final static int GET_SYSTEM_TIME_RESULT = 103; + private String system_time = null; + + public void getSystemTime() { + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, GET_SYSTEM_TIME_RESULT, + RegistActivity.this, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case MSG_SEND: + if(resultJson!=null) + { + + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + String retcode = objs2.getString("code"); + String message = objs2.getString("message"); + if (retcode.equals("200")) { + tv_get_identifying_code.startTimer(); + ToastUtil.showToast("验证码已发送,请查收短信"); + } else { + ToastUtil.showToast(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + } + break; + case YXREGISTER: + closeProgressDialog(); + String str = resultJson; + if (TextUtils.isEmpty(str)) { + ToastUtil.showToast("注册失败,请重试"); + return; + } + + JSONObject strs; + try { + strs = new JSONObject(str); + String code = strs.getString("code"); + String message = strs.getString("message"); + if (("1").equals(code)) { + String expertbean = strs.getString("expertbean"); + JSONObject strsJson = new JSONObject(expertbean); + String uuid = strsJson.getString("uuid"); + String state = strsJson.getString("state"); + + getSaveUserInfor(strs); + + // JSONObject date = objs.getJSONObject("data"); + SharePrefUtil.saveString(ct, Constant.uuid, uuid); + SharePrefUtil.saveString(ct, Constant.mobile, username);// 手机号,这个为了重新登录后回显之前的手机号 + Intent intent = new Intent(RegistActivity.this, + LoginSetInfoActivity.class); + intent.putExtra("checkInfo", "1"); + intent.putExtra("phone", username); + intent.putExtra("uuid", uuid); + intent.putExtra("state", state); + startActivity(intent); + finish(); + } else { + + ToastUtil.showToast(message); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case GET_SYSTEM_TIME_RESULT: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + } + new Thread(networkTask3).start(); + break; + + default: + break; + } + } + +// private Handler mHandler = new Handler() { +// @Override +// public void handleMessage(Message msg) { +// if (msg.what == LoginActivity.MSG_RECEIVED_CODE) { +// String code = (String) msg.obj; +// if (code != null) { +// et_identifying_code.setText(code.trim()); +// } +// } +// } +// }; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ReleaseStopActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ReleaseStopActivity.java new file mode 100644 index 0000000..6460ce9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ReleaseStopActivity.java @@ -0,0 +1,1037 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.StopOutPatientListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/1/8. + */ + +public class ReleaseStopActivity extends BaseActivity implements OnCallBackFromNet{ + + private TextView tv_zaicitianjia,tv_jia; + private LinearLayout ll_2,ll_3,ll_time1,ll_time2; + private ImageView iv_delete2,iv_delete3,iv_delete23,iv_delete22; + private int flag;//124计数器 + private int flag1;//3计数器 + + private RadioGroup rg_group; + private RadioButton rb_1,rb_2,rb_3,rb_4; + private String typeName; + private String type; + private TimePopupWindow pwTime; + private String birthdayPost; + private EditText tv_time_start,tv_time_end,tv_time_start2,tv_time_end2,tv_time_start3,tv_time_end3; + private EditText et_choosetime;//用于存储日期 + private EditText etv_choosetime;//用于存储时间段 + private EditText tv_time_start21,tv_time_start22,tv_time_start23,tv_time_end21,tv_time_end22,tv_time_end23,et_beizhu; + private LinearLayout ll_list,ll_22,ll_23; + private TextView tv_1,tv_2,tv_3,tv_4; + private TextView bt_delete_visit; + private int year,month,day; + private String data;//当前日期 + private String uuid1; + private ECAlertDialog dilaog2; + private Button mBt_get_Voice; + private KeDaXunFeiUtil VoiceUtil; + + + @Override + public void setTitle() { + top_title.setText("发布停诊"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (TextUtils.isEmpty(et_beizhu.getText().toString())) { + hideSoftKeyboard(); + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(ReleaseStopActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(ReleaseStopActivity.this,"ReleaseStopActivity",""); + hideSoftKeyboard(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(ReleaseStopActivity.this,"ReleaseStopActivity",et_beizhu.getText().toString()); + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + } + }); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == event.KEYCODE_BACK){ + if (TextUtils.isEmpty(et_beizhu.getText().toString())) { + hideSoftKeyboard(); + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(ReleaseStopActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(ReleaseStopActivity.this,"ReleaseStopActivity",""); + hideSoftKeyboard(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(ReleaseStopActivity.this,"ReleaseStopActivity",et_beizhu.getText().toString()); + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + + } + return super.onKeyDown(keyCode, event); + + } + + @Override + public View onCreateSuccessedView() { + + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_releasestop_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_releasestop); + } + initView(view); + initOnClick(); + initData(); + + String context = SharePrefUtil.getString(ReleaseStopActivity.this, "ReleaseStopActivity", ""); + if (!context.isEmpty()){ + et_beizhu.setText(context); + } + return view; + } + + private void initData() { + Intent intent = getIntent(); + Bundle extras = intent.getExtras(); + if (intent!=null&&extras!=null){ + StopOutPatientListBean.DataBean dataBean = (StopOutPatientListBean.DataBean)intent.getSerializableExtra("dataBean"); + String note = dataBean.getNote(); + int type1= dataBean.getType(); + uuid1 = dataBean.getUuid(); + List date_list = dataBean.getDate_list(); + et_beizhu.setText(note); + Drawable icon_new ; + if(CommonUtil.BigModule()) + { + icon_new = UIUtils.getDrawable(R.drawable.check_true_big1); + } + else + { + icon_new = UIUtils.getDrawable(R.drawable.check_true); + } + switch (type1){ + case 1: + rb_1.setBackground(icon_new); + type = "1"; + typeName = "出差"; + ll_time1.setVisibility(View.VISIBLE); + ll_time2.setVisibility(View.GONE); + break; + case 2: + rb_2.setBackground(icon_new); + type = "2"; + typeName = "休假"; + ll_time1.setVisibility(View.VISIBLE); + ll_time2.setVisibility(View.GONE); + break; + case 3: + rb_3.setBackground(icon_new); + type = "3"; + typeName = "临时安排"; + ll_time2.setVisibility(View.VISIBLE); + ll_time1.setVisibility(View.GONE); + break; + case 4: + rb_4.setBackground(icon_new); + type = "4"; + typeName = "其他"; + ll_time1.setVisibility(View.VISIBLE); + ll_time2.setVisibility(View.GONE); + break; + } + if (type1==3){ + if (date_list.size()>=1){ + tv_time_start21.setText(date_list.get(0).getParam1()); + tv_time_end21.setText(date_list.get(0).getParam2()); + } + if (date_list.size()>=2){ + tv_time_start22.setText(date_list.get(1).getParam1()); + tv_time_end22.setText(date_list.get(1).getParam2()); + ll_22.setVisibility(View.VISIBLE); + flag1++; + } + if (date_list.size()==3){ + tv_time_start23.setText(date_list.get(2).getParam1()); + tv_time_end23.setText(date_list.get(2).getParam2()); + ll_23.setVisibility(View.VISIBLE); + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + } + }else { + if (date_list.size()>=1){ + tv_time_start.setText(date_list.get(0).getParam1()); + tv_time_end.setText(date_list.get(0).getParam2()); + } + if (date_list.size()>=2){ + tv_time_start2.setText(date_list.get(1).getParam1()); + tv_time_end2.setText(date_list.get(1).getParam2()); + ll_2.setVisibility(View.VISIBLE); + flag++; + } + if (date_list.size()==3){ + tv_time_start3.setText(date_list.get(2).getParam1()); + tv_time_end3.setText(date_list.get(2).getParam2()); + ll_3.setVisibility(View.VISIBLE); + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + } + } + + } + + if (StringUtil.isEmpty(type)){ + et_beizhu.setCursorVisible(false); + et_beizhu.setFocusable(false); + et_beizhu.setFocusableInTouchMode(false); + }else { + et_beizhu.setFocusable(true); + et_beizhu.setCursorVisible(true); + et_beizhu.setFocusableInTouchMode(true); + et_beizhu.requestFocus(); + } + bottomSelectDate(); + + } + /** + * 实例化时间选择器,与选择时间回调 bottomSelectDate + * + * void + */ + private void bottomSelectDate() { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + year = calendar.get(Calendar.YEAR); + month = calendar.get(Calendar.MONTH); + day = calendar.get(Calendar.DATE); + pwTime.setRange(year, 2100); + int i = month + 1; + data = year+"-"+i+"-"+day; + LogUtil.i("year = "+year+",month = "+month+",day = "+day+",data = "+data); + pwTime.setTime(DateUtil.str2Date(data, "yyyy-MM-dd")); + + // 设置标题 + pwTime.setPopupTitle("选择开始日期"); + // 设置起始时间 + + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + birthdayPost = DateUtil.date2Str(date, "yyyy-MM-dd"); + et_choosetime.setText(birthdayPost); + String s_start = tv_time_start.getText().toString(); + String s_end = tv_time_end.getText().toString(); + LogUtil.i("birthdayPost = "+birthdayPost); + LogUtil.i("s_start = "+s_start+",s_end = "+s_end); + + + if (!DateUtil.isDateOneBigger(birthdayPost, data)){ + ToastUtil.showMessage("不能 发布过期时间"); + et_choosetime.setText(""); + return; + } + + if (ll_time1.getVisibility()==View.VISIBLE){ + String s_start2 = null; + String s_end2 = null; + if (!StringUtil.isEmpty(s_start)&&!StringUtil.isEmpty(s_end)&&!DateUtil.isDateOneBigger(s_end,s_start)){ + ToastUtil.showMessage("结束时间不能早于开始日期"); + et_choosetime.setText(""); + } + if (ll_2.getVisibility()==View.VISIBLE){ + s_start2 = tv_time_start2.getText().toString(); + s_end2 = tv_time_end2.getText().toString(); + if (s_start2.equals(s_start)&&s_end2.equals(s_end)){ + ToastUtil.showMessage("已存在相同停诊时间"); + et_choosetime.setText(""); + }else if (!StringUtil.isEmpty(s_start2)&&!StringUtil.isEmpty(s_end2)&&!DateUtil.isDateOneBigger(s_end2,s_start2)){ + ToastUtil.showMessage("结束时间不能早于开始日期"); + et_choosetime.setText(""); + } + } + if (ll_3.getVisibility()==View.VISIBLE){ + String s_start3 = tv_time_start3.getText().toString(); + String s_end3 = tv_time_end3.getText().toString(); + if (s_start3.equals(s_start)&&s_end3.equals(s_end)){ + ToastUtil.showMessage("已存在相同停诊时间"); + et_choosetime.setText(""); + }else if (s_start3.equals(s_start2)&&s_end3.equals(s_end2)){ + ToastUtil.showMessage("已存在相同停诊时间"); + et_choosetime.setText(""); + }else if (!StringUtil.isEmpty(s_start3)&&!StringUtil.isEmpty(s_end3)&&!DateUtil.isDateOneBigger(s_end3,s_start3)){ + ToastUtil.showMessage("结束时间不能早于开始日期"); + et_choosetime.setText(""); + } + } + }else{//临时 + + String s = tv_time_start21.getText().toString(); + String s1 = tv_time_end21.getText().toString(); + String s_start2 = null; + String s_end2 = null; + if (ll_22.getVisibility()==View.VISIBLE){ + s_start2 = tv_time_start22.getText().toString(); + s_end2 = tv_time_end22.getText().toString(); + if (s_start2.equals(s)&&s_end2.equals(s1)){ + ToastUtil.showMessage("已存在相同停诊时间"); + et_choosetime.setText(""); + } + } + if (ll_23.getVisibility()==View.VISIBLE){ + String s_start3 = tv_time_start23.getText().toString(); + String s_end3 = tv_time_end23.getText().toString(); + if (s_start3.equals(s)&&s_end3.equals(s1)){ + ToastUtil.showMessage("已存在相同停诊时间"); + et_choosetime.setText(""); + }else if (s_start3.equals(s_start2)&&s_end3.equals(s_end2)){ + ToastUtil.showMessage("已存在相同停诊时间"); + et_choosetime.setText(""); + } + } + } + + } + }); + } + + private void initOnClick() { + tv_zaicitianjia.setOnClickListener(this); + iv_delete2.setOnClickListener(this); + iv_delete3.setOnClickListener(this); + iv_delete22.setOnClickListener(this); + iv_delete23.setOnClickListener(this); + et_beizhu.setOnClickListener(this); + mBt_get_Voice.setOnClickListener(this); + setCanNotEditAndClick(tv_time_start); + setCanNotEditAndClick(tv_time_end); + setCanNotEditAndClick(tv_time_start2); + setCanNotEditAndClick(tv_time_end2); + setCanNotEditAndClick(tv_time_start3); + setCanNotEditAndClick(tv_time_end3); + setCanNotEditAndClick1(tv_1); + setCanNotEditAndClick1(tv_2); + setCanNotEditAndClick1(tv_3); + setCanNotEditAndClick1(tv_4); + setCanNotEditAndClick2(tv_time_end21); + setCanNotEditAndClick2(tv_time_end22); + setCanNotEditAndClick2(tv_time_end23); + setCanNotEditAndClick(tv_time_start21); + setCanNotEditAndClick(tv_time_start22); + setCanNotEditAndClick(tv_time_start23); + et_beizhu.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + int length = s.toString().length(); + if (length==300){ + ToastUtil.showMessage("最多300个字"); + } + } + }); + bt_delete_visit.setOnClickListener(this); + rg_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + + Drawable icon_new = UIUtils.getDrawable(R.drawable.check_true); + Drawable icon_1 = UIUtils.getDrawable(R.drawable.shap_addpractisingaddress_normal); + + switch (checkedId){ + case R.id.rb_1: + rb_1.setBackground(icon_new); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + type = "1"; + typeName = "出差"; + ll_time1.setVisibility(View.VISIBLE); + ll_time2.setVisibility(View.GONE); + ll_list.setVisibility(View.GONE); + if (flag==2){ + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + }else { + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + } + break; + case R.id.rb_2: + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_new); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_1); + type = "2"; + typeName = "休假"; + ll_time1.setVisibility(View.VISIBLE); + ll_time2.setVisibility(View.GONE); + ll_list.setVisibility(View.GONE); + if (flag==2){ + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + }else { + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + } + break; + + case R.id.rb_3: + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_new); + rb_4.setBackground(icon_1); + type = "3"; + typeName = "临时安排"; + ll_time1.setVisibility(View.GONE); + ll_time2.setVisibility(View.VISIBLE); + ll_list.setVisibility(View.GONE); + if (flag1==2){ + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + }else { + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + } + break; + case R.id.rb_4: + rb_1.setBackground(icon_1); + rb_2.setBackground(icon_1); + rb_3.setBackground(icon_1); + rb_4.setBackground(icon_new); + type = "4"; + typeName = "其他"; + ll_time1.setVisibility(View.VISIBLE); + ll_time2.setVisibility(View.GONE); + ll_list.setVisibility(View.GONE); + if (flag==2){ + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + }else { + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + } + break; + } + } + }); + + + + } + + private void initView(View view) { + rg_group = view.findViewById(R.id.rg_group); + tv_zaicitianjia = view.findViewById(R.id.tv_zaicitianjia); + ll_2 = view.findViewById(R.id.ll_2); + ll_3 = view.findViewById(R.id.ll_3); + iv_delete2 = view.findViewById(R.id.iv_delete2); + iv_delete3 = view.findViewById(R.id.iv_delete3); + tv_jia = view.findViewById(R.id.tv_jia); + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + rb_4 = view.findViewById(R.id.rb_4); + + ll_time1 = view.findViewById(R.id.ll_time1); + tv_time_start = view.findViewById(R.id.tv_time_start); + tv_time_end = view.findViewById(R.id.tv_time_end); + tv_time_start2 = view.findViewById(R.id.tv_time_start2); + tv_time_end2 = view.findViewById(R.id.tv_time_end2); + tv_time_start3 = view.findViewById(R.id.tv_time_start3); + tv_time_end3 = view.findViewById(R.id.tv_time_end3); + + + ll_time2 = view.findViewById(R.id.ll_time2); + tv_time_start21 = view.findViewById(R.id.tv_time_start21); + tv_time_start22 = view.findViewById(R.id.tv_time_start22); + tv_time_start23 = view.findViewById(R.id.tv_time_start23); + tv_time_end21 = view.findViewById(R.id.tv_time_end21); + tv_time_end22 = view.findViewById(R.id.tv_time_end22); + tv_time_end23 = view.findViewById(R.id.tv_time_end23); + ll_list = view.findViewById(R.id.ll_list); + tv_1 = view.findViewById(R.id.tv_1); + tv_2 = view.findViewById(R.id.tv_2); + tv_3 = view.findViewById(R.id.tv_3); + tv_4 = view.findViewById(R.id.tv_4); + ll_22 = view.findViewById(R.id.ll_22); + ll_23 = view.findViewById(R.id.ll_23); + + iv_delete23 = view.findViewById(R.id.iv_delete23); + iv_delete22 = view.findViewById(R.id.iv_delete22); + + + bt_delete_visit = view.findViewById(R.id.bt_delete_visit); + et_beizhu = view.findViewById(R.id.et_beizhu); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.bt_get_voice: + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(ReleaseStopActivity.this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil=new KeDaXunFeiUtil(ReleaseStopActivity.this, et_beizhu); + } else { + EasyWindow.with(ReleaseStopActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(ReleaseStopActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil=new KeDaXunFeiUtil(ReleaseStopActivity.this, et_beizhu); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil=new KeDaXunFeiUtil(ReleaseStopActivity.this, et_beizhu); + } + + + + break; + case R.id.tv_zaicitianjia: + if (ll_time1.getVisibility()==View.VISIBLE){// 1. 2 .4 + if (flag==0){ + String s = tv_time_start.getText().toString(); + String s1 = tv_time_end.getText().toString(); + if (!StringUtil.isEmpty(s)&&!StringUtil.isEmpty(s1)){ + ll_2.setVisibility(View.VISIBLE); + flag++; + }else { + ToastUtil.showMessage("请选择停诊时间"); + } + }else if (flag==1){ + String s = tv_time_start2.getText().toString(); + String s1 = tv_time_end2.getText().toString(); + if (!StringUtil.isEmpty(s)&&!StringUtil.isEmpty(s1)){ + ll_3.setVisibility(View.VISIBLE); + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + flag++; + }else { + ToastUtil.showMessage("请选择停诊时间"); + } + } + }else { // 3 + if (flag1==0){ + String s = tv_time_start21.getText().toString(); + String s1 = tv_time_end21.getText().toString(); + if (!StringUtil.isEmpty(s)&&!StringUtil.isEmpty(s1)){ + ll_22.setVisibility(View.VISIBLE); + flag1++; + }else { + ToastUtil.showMessage("请选择停诊时间"); + } + }else if (flag1==1){ + String s = tv_time_start22.getText().toString(); + String s1 = tv_time_end22.getText().toString(); + if (!StringUtil.isEmpty(s)&&!StringUtil.isEmpty(s1)){ + ll_23.setVisibility(View.VISIBLE); + tv_zaicitianjia.setVisibility(View.GONE); + tv_jia.setVisibility(View.GONE); + flag1++; + }else { + ToastUtil.showMessage("请选择停诊时间"); + } + } + } + + break; + case R.id.iv_delete2: + if (ll_3.getVisibility()==View.VISIBLE){ + ll_3.setVisibility(View.GONE); + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + flag = 1; + tv_time_start2.setText(tv_time_start3.getText().toString()); + tv_time_end2.setText(tv_time_end3.getText().toString()); + tv_time_start3.setText(""); + tv_time_end3.setText(""); + }else { + ll_2.setVisibility(View.GONE); + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + flag = 0; + tv_time_start2.setText(""); + tv_time_end2.setText(""); + } + + break; + case R.id.iv_delete3: + ll_3.setVisibility(View.GONE); + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + tv_time_start3.setText(""); + tv_time_end3.setText(""); + flag = 1; + break; + + case R.id.iv_delete22: + if (ll_23.getVisibility()==View.VISIBLE){ + ll_23.setVisibility(View.GONE); + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + flag1 = 1; + tv_time_start22.setText(tv_time_start23.getText().toString()); + tv_time_end22.setText(tv_time_end23.getText().toString()); + tv_time_start23.setText(""); + tv_time_end23.setText(""); + }else { + ll_22.setVisibility(View.GONE); + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + flag1 = 0; + tv_time_start22.setText(""); + tv_time_end22.setText(""); + } + break; + case R.id.iv_delete23: + ll_23.setVisibility(View.GONE); + tv_zaicitianjia.setVisibility(View.VISIBLE); + tv_jia.setVisibility(View.VISIBLE); + tv_time_start23.setText(""); + tv_time_end23.setText(""); + flag1 = 1; + break; + case R.id.bt_delete_visit: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + if(StringUtil.isEmpty(type)){ + ToastUtil.showMessage("请先选择停诊原因"); + return; + } + + final List> list = new ArrayList<>(); + if (ll_time1.getVisibility()==View.VISIBLE){ + String s = tv_time_start.getText().toString(); + String s1 = tv_time_end.getText().toString(); + if (StringUtil.isEmpty(s)||StringUtil.isEmpty(s1)){ + ToastUtil.showMessage("请选择停诊时间"); + return; + } + Map map = new HashMap<>(); + map.put("param1",s); + map.put("param2",s1); + list.add(map); + + if (ll_2.getVisibility()==View.VISIBLE){ + String s2 = tv_time_start2.getText().toString(); + String s12 = tv_time_end2.getText().toString(); + if (StringUtil.isEmpty(s2)||StringUtil.isEmpty(s12)){ + ToastUtil.showMessage("请选择停诊时间"); + return; + } + Map map2 = new HashMap<>(); + map2.put("param1",s2); + map2.put("param2",s12); + list.add(map2); + + } + if (ll_3.getVisibility()==View.VISIBLE){ + String s3 = tv_time_start3.getText().toString(); + String s13 = tv_time_end3.getText().toString(); + if (StringUtil.isEmpty(s3)||StringUtil.isEmpty(s13)){ + ToastUtil.showMessage("请选择停诊时间"); + return; + } + Map map3 = new HashMap<>(); + map3.put("param1",s3); + map3.put("param2",s13); + list.add(map3); + } + + }else { + String s = tv_time_start21.getText().toString(); + String s1 = tv_time_end21.getText().toString(); + if (StringUtil.isEmpty(s)||StringUtil.isEmpty(s1)){ + ToastUtil.showMessage("请选择停诊时间"); + return; + } + Map map = new HashMap<>(); + map.put("param1",s); + map.put("param2",s1); + list.add(map); + if (ll_22.getVisibility()==View.VISIBLE){ + String s2 = tv_time_start22.getText().toString(); + String s12 = tv_time_end22.getText().toString(); + if (StringUtil.isEmpty(s2)||StringUtil.isEmpty(s12)){ + ToastUtil.showMessage("请选择停诊时间"); + return; + } + Map map2 = new HashMap<>(); + map2.put("param1",s2); + map2.put("param2",s12); + list.add(map2); + + } + if (ll_23.getVisibility()==View.VISIBLE){ + String s3 = tv_time_start23.getText().toString(); + String s13 = tv_time_end23.getText().toString(); + if (StringUtil.isEmpty(s3)||StringUtil.isEmpty(s13)){ + ToastUtil.showMessage("请选择停诊时间"); + return; + } + Map map3 = new HashMap<>(); + map3.put("param1",s3); + map3.put("param2",s13); + list.add(map3); + } + + } + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_releasestop, null); + final Dialog dialog = new AlertDialog.Builder(this).create(); + TextView tv_name = layout.findViewById(R.id.tv_name); + TextView tv_time1 = layout.findViewById(R.id.tv_time1); + TextView tv_time2 = layout.findViewById(R.id.tv_time2); + TextView tv_time3 = layout.findViewById(R.id.tv_time3); + TextView tv_address = layout.findViewById(R.id.tv_address); + TextView tv_addressdetail = layout.findViewById(R.id.tv_addressdetail); + TextView tv_pointexchange = layout.findViewById(R.id.tv_pointexchange); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + tv_name.setText(typeName); + if (ll_time1.getVisibility()==View.VISIBLE){ + if (list.size()>=1){ + tv_time1.setText(list.get(0).get("param1")+" 至 "+list.get(0).get("param2")); + } + if (list.size()>=2){ + tv_time2.setText(list.get(1).get("param1")+" 至 "+list.get(1).get("param2")); + tv_time2.setVisibility(View.VISIBLE); + } + if (list.size()==3){ + tv_time3.setText(list.get(2).get("param1")+" 至 "+list.get(2).get("param2")); + tv_time3.setVisibility(View.VISIBLE); + } + }else { + if (list.size()>=1){ + tv_time1.setText(list.get(0).get("param1")+" "+list.get(0).get("param2")); + } + if (list.size()>=2){ + tv_time2.setText(list.get(1).get("param1")+" "+list.get(1).get("param2")); + tv_time2.setVisibility(View.VISIBLE); + } + if (list.size()==3){ + tv_time3.setText(list.get(2).get("param1")+" "+list.get(2).get("param2")); + tv_time3.setVisibility(View.VISIBLE); + } + } + if (StringUtil.isEmpty(et_beizhu.getText().toString().trim())){ + tv_addressdetail.setVisibility(View.GONE); + tv_address.setVisibility(View.GONE); + }else { + tv_addressdetail.setText(et_beizhu.getText().toString().trim()); + } + + int i = month + 1; + tv_pointexchange.setText(year+"年"+i+"月"+day+"日由医生本人发布"); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map param = new HashMap<>(); + param.put("note",et_beizhu.getText().toString().trim()); + param.put("type",type); + param.put("date_list",list); + if (!StringUtil.isEmpty(uuid1)){ + LogUtil.i("xiugai"); + param.put("uuid",uuid1); + sendJsonPostParamtoNetSignMD5Array(Url.updateStopOutPatient, param, 1, ReleaseStopActivity.this); + }else { + LogUtil.i("tianjia"); + sendJsonPostParamtoNetSignMD5Array(Url.addStopOutPatient, param, 1, ReleaseStopActivity.this); + } + + dialog.dismiss(); + } + }); + + + + break; + case R.id.et_beizhu: + if (StringUtil.isEmpty(type)){ + ToastUtil.showMessage("请先选择停诊原因"); + }else { + et_beizhu.setFocusable(true); + et_beizhu.setCursorVisible(true); + et_beizhu.setFocusableInTouchMode(true); + et_beizhu.requestFocus(); + } + + break; + } + } + + + + /** + * 时间段监听 + * */ + public void setCanNotEditAndClick2(final EditText etContent) { + + etContent.setFocusable(false); + etContent.setFocusableInTouchMode(false); + etContent.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + etv_choosetime = etContent; + ll_list.setVisibility(View.VISIBLE); + + + } + }); + } + /** + * 时间段监听1.上午 下午 晚上 全天 + * */ + public void setCanNotEditAndClick1(final TextView etContent) { + + etContent.setFocusable(false); + etContent.setFocusableInTouchMode(false); + etContent.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + etv_choosetime.setText(etContent.getText().toString());; + ll_list.setVisibility(View.GONE); + + String s_start2 = null; + String s_end2 = null; + String s = tv_time_start21.getText().toString(); + String s1 = tv_time_end21.getText().toString(); + if (ll_22.getVisibility()==View.VISIBLE){ + s_start2 = tv_time_start22.getText().toString(); + s_end2 = tv_time_end22.getText().toString(); + if (s_start2.equals(s)&&s_end2.equals(s1)){ + ToastUtil.showMessage("已存在相同停诊时间"); + tv_time_end22.setText(""); + } + } + if (ll_23.getVisibility()==View.VISIBLE){ + String s_start3 = tv_time_start23.getText().toString(); + String s_end3 = tv_time_end23.getText().toString(); + if (s_start3.equals(s)&&s_end3.equals(s1)){ + ToastUtil.showMessage("已存在相同停诊时间"); + tv_time_end23.setText(""); + }else if (s_start3.equals(s_start2)&&s_end3.equals(s_end2)){ + ToastUtil.showMessage("已存在相同停诊时间"); + tv_time_end23.setText(""); + } + } + + } + }); + } + /** + * 日期监听 + * */ + public void setCanNotEditAndClick(final EditText etContent) { + + etContent.setFocusable(false); + etContent.setFocusableInTouchMode(false); + etContent.setOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + if (StringUtil.isEmpty(type)){ + ToastUtil.showMessage("请先选择停诊原因"); + return; + } + et_choosetime = etContent; + String s = etContent.getText().toString(); + pwTime.setTime(DateUtil.str2Date(s, "yyyy-MM-dd")); + pwTime.showAtLocation(rb_1, Gravity.BOTTOM, 0, 0); + + } + }); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("resultJson = "+resultJson); + switch (resultCode){ + case 1: + Gson gson1 = new Gson(); + BaseBean fromJson = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson!=null&&"200".equals(fromJson.code)){ + OutofPatientNoticeActivity.flagisStopNotice = true; + SharePrefUtil.saveString(ReleaseStopActivity.this,"ReleaseStopActivity",""); + hideSoftKeyboard(); + finish(); + + }else if ("108".equals(fromJson.code)){ + ToastUtil.showMessage("有效停诊公告最多只能有两个"); + }else { + ToastUtil.showMessage(fromJson.message); + } + + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if(VoiceUtil!=null){ + VoiceUtil.dissDialog(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ReplyFeedbackActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ReplyFeedbackActivity.java new file mode 100644 index 0000000..6d07ea0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ReplyFeedbackActivity.java @@ -0,0 +1,141 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +public class ReplyFeedbackActivity extends AppCompatActivity implements OnClickListener { + private EditText mName; + public static final int FEED_BACK = 2; + private RelativeLayout top_back_layout;// 返回按钮 + private TextView top_title, top_right;// 标题 右边的文字 + private TextView sub; + private Button mBt_get_Voice; + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.settting_feed_bac_activity); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + top_back_layout = (RelativeLayout) findViewById(R.id.top_back_layout); + top_back_layout.setOnClickListener(this); + mBt_get_Voice = (Button) findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + top_title = (TextView) findViewById(R.id.top_title); + sub = (TextView) findViewById(R.id.top_right_text); + top_title.setText("评论"); + sub.setVisibility(View.VISIBLE); + sub.setClickable(true); + sub.setTextSize(16); + sub.setText("确定"); + sub.setOnClickListener(this); + mName = (EditText) findViewById(R.id.tv_feed_name); + String name = getIntent().getStringExtra("name"); + mName.setHint("写评论..."); + if(getIntent().getType().equals("YY")){ + mBt_get_Voice.setVisibility(View.VISIBLE); + }else{ + mBt_get_Voice.setVisibility(View.GONE); + } + } + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + switch (arg0.getId()) { + case R.id.top_back_layout: +// Intent intent = new Intent(); +// intent.putExtra("reply", mName.getText().toString().trim()); +// ReplyFeedbackActivity.this.setResult(FEED_BACK, intent); + finish(); + break; + case R.id.top_right_text: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + if (TextUtils.isEmpty(mName.getText().toString().trim())) { + ToastUtil.showMessage("您还未输入回复内容"); + return; + } + Intent intent1 = new Intent(); + intent1.putExtra("reply", mName.getText().toString().trim()); + ReplyFeedbackActivity.this.setResult(FEED_BACK, intent1); + finish(); + + break; + case R.id.bt_get_voice: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this ,Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil=new KeDaXunFeiUtil(ReplyFeedbackActivity.this, mName); + } else { + EasyWindow.with(ReplyFeedbackActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil=new KeDaXunFeiUtil(ReplyFeedbackActivity.this, mName); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil=new KeDaXunFeiUtil(ReplyFeedbackActivity.this, mName); + } + + break; + default: + break; + } + } + KeDaXunFeiUtil VoiceUtil; + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + if(VoiceUtil!=null){ + VoiceUtil.dissDialog(); + } + + super.onDestroy(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ResearchActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ResearchActivity.java new file mode 100644 index 0000000..d32a1b9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ResearchActivity.java @@ -0,0 +1,220 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.fragment.MyProjectFragment; +import cn.shangyu.gdxzExpert.fragment.SuggestFragment; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.KeyboardLayout; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class ResearchActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener { + + KeyboardLayout detailMainRL; + @Override + public void setTitle() { + top_title.setText("科研项目"); + top_right.setImageResource(R.drawable.search1); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showPopupWindow(view,""); + } + }); + } + String tmpstr=""; + private void showPopupWindow(View view,String text) { +// final Boolean[] issend = {false}; + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(ResearchActivity.this) + .inflate(R.layout.pop_add_comment, null); + // 设置按钮的点击事件 + Button bt_add_pinglun = contentView.findViewById(R.id.bt_add_pinglun); + EditText et_add_pinglun= contentView.findViewById(R.id.et_add_pinglun); + et_add_pinglun.setHint(text); + et_add_pinglun.setText(tmpstr); + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + bt_add_pinglun.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) + { +// issend[0] =true; +// tmpstr=""; +// if(et_add_pinglun.getText()==null|| StringUtil.isEmpty(et_add_pinglun.getText().toString())) +// { +// ToastUtil.showMessage("搜索不能为空"); +// return; +// } + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(v.getWindowToken(), 0); + popupWindow.dismiss(); + if(currentFragment instanceof SuggestFragment) + { + ((SuggestFragment) currentFragment).page=1; + ((SuggestFragment) currentFragment).keywords=et_add_pinglun.getText().toString(); + ((SuggestFragment) currentFragment).init("1"); + } + else if(currentFragment instanceof MyProjectFragment) + { + ((MyProjectFragment) currentFragment).page=1; + ((MyProjectFragment) currentFragment).keywords=et_add_pinglun.getText().toString(); + ((MyProjectFragment) currentFragment).init("1"); + } + + } + }); + + popupWindow.setTouchable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + + + popupWindow.showAtLocation(view, 0, 0, 0); + et_add_pinglun.requestFocus(); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); +// 在PopupWindow显示后,请求显示软键盘 + et_add_pinglun.postDelayed(new Runnable() { + @Override + public void run() { + imm.showSoftInput(et_add_pinglun, InputMethodManager.SHOW_IMPLICIT); + } + },100); + + detailMainRL.setOnkbdStateListener(new KeyboardLayout.onKeyboaddsChangeListener() { + + public void onKeyBoardStateChange(int state) { + switch (state) { + case KeyboardLayout.KEYBOARD_STATE_HIDE: +// if(issend[0]) +// { +// +// } +// else +// { + tmpstr=et_add_pinglun.getText()==null?"":et_add_pinglun.getText().toString(); +// } + + popupWindow.dismiss(); + + break; + case KeyboardLayout.KEYBOARD_STATE_SHOW: +// Log.d("resultJson ","键盘弹出状态"); + break; + } + } + }); + + } + RadioGroup radioGroup; + private Fragment currentFragment; + private FragmentManager manager; + SuggestFragment suggestFragment; + MyProjectFragment myProjectFragment; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_research); + detailMainRL = view.findViewById(R.id.main_ll); + radioGroup=view.findViewById(R.id.grop); + radioGroup.setOnCheckedChangeListener(this); + initFragment(); + if("myproject".equals(getIntent().getStringExtra("typename"))) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_2)).setChecked(true); + showFragment(myProjectFragment); + } + else + { + showFragment(suggestFragment); + } + return view; + } +// +// @Override +// protected void onNewIntent(Intent intent) { +// super.onNewIntent(intent); +// if("myproject".equals(intent.getStringExtra("typename"))) +// { +// showFragment(myProjectFragment); +// } +// else +// { +// showFragment(suggestFragment); +// } +// } + + private void initFragment() { + manager = getSupportFragmentManager(); + //实例化碎片对象 + suggestFragment=new SuggestFragment(); + myProjectFragment=new MyProjectFragment(); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + switch (i) + { + case R.id.tab_rbn_1: + showFragment(suggestFragment); + break; + case R.id.tab_rbn_2: + showFragment(myProjectFragment); + break; + + } + } + private void showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = manager.beginTransaction(); + if(currentFragment!=null) + { + transaction.hide(currentFragment); + } + + currentFragment = fragment; + if (!fragment.isAdded()) { + transaction.add(R.id.frame_container, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ScientificDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ScientificDetailActivity.java new file mode 100644 index 0000000..c443653 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ScientificDetailActivity.java @@ -0,0 +1,145 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我的科研项目详情 + * + * 类名称:ScientificDetailActivity + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-15 下午2:21:32 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class ScientificDetailActivity extends BaseActivity { + + + private TextView tv_applyerName; + private TextView tv_applyerCompany; + private TextView tv_projectName; + private TextView tv_officeName; + private TextView tv_mobile; + private TextView tv_email; + private TextView tv_applyerTime; + private TextView tv_state; + private TextView tv_members; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("科研详情"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_scientific_detail); + tv_projectName = (TextView) view.findViewById(R.id.tv_projectName); + tv_applyerName = (TextView) view.findViewById(R.id.tv_applyerName); + tv_applyerCompany = (TextView) view.findViewById(R.id.tv_applyerCompany); + tv_officeName = (TextView) view.findViewById(R.id.tv_officeName); + tv_mobile = (TextView) view.findViewById(R.id.tv_mobile); + tv_email = (TextView) view.findViewById(R.id.tv_email); + tv_applyerTime = (TextView) view.findViewById(R.id.tv_applyerTime); + tv_state = (TextView) view.findViewById(R.id.tv_state); + tv_members = (TextView) view.findViewById(R.id.tv_members); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + Intent intent = getIntent(); + String projectName = intent.getStringExtra("projectName"); + String members = intent.getStringExtra("members"); + String applyerCompany = intent.getStringExtra("applyerCompany"); + String officeName = intent.getStringExtra("officeName"); + String mobile = intent.getStringExtra("mobile"); + String applyerTime = intent.getStringExtra("applyerTime"); + String email = intent.getStringExtra("email"); + String state = intent.getStringExtra("state"); + String realName = SharePrefUtil.getString(ct, "realName", null); + +// top_title.setText(projectName); + if (TextUtils.isEmpty(projectName)) { + projectName = "暂无"; + } + if (TextUtils.isEmpty(realName)) { + realName = "暂无"; + } + if (TextUtils.isEmpty(members)) { + members = "暂无"; + } + if (TextUtils.isEmpty(applyerCompany)) { + applyerCompany = "暂无"; + } + if (TextUtils.isEmpty(officeName)) { + officeName = "暂无"; + } + if (TextUtils.isEmpty(email)) { + email = "暂无"; + } + if (TextUtils.isEmpty(mobile)) { + mobile = "暂无"; + } + tv_projectName.setText(getResources().getString(R.string.scientific_projectName,projectName)); + tv_applyerName.setText(getResources().getString(R.string.scientific_applyerName,realName)); + tv_members.setText(getResources().getString(R.string.scientific_members,members)); + tv_applyerCompany.setText(getResources().getString(R.string.scientific_applyerCompany,applyerCompany)); + tv_officeName.setText(getResources().getString(R.string.scientific_officeName,officeName)); + tv_mobile.setText(getResources().getString(R.string.scientific_mobile,mobile)); + tv_email.setText(getResources().getString(R.string.scientific_email,email)); + if ("0".equals(state)) { + state = "在线审核"; + }else if ("1".equals(state)) { + state = "邮寄材料"; + }else if ("2".equals(state)) { + state = "形式审查"; + }else if ("3".equals(state)) { + state = "专家委员会评审"; + }else if ("4".equals(state)) { + state = "评审通过"; + }else if ("5".equals(state)) { + state = "评审未通过"; + }else{ + state = "暂无"; + } + tv_state.setText(getResources().getString(R.string.scientific_state,state)); + if (!TextUtils.isEmpty(applyerTime) && applyerTime.length() >= 10) { + tv_applyerTime.setText(getResources().getString(R.string.scientific_applyerTime, applyerTime.substring(0, 10))); + }else{ + if (TextUtils.isEmpty(applyerTime)) { + applyerTime = "暂无"; + } + tv_applyerTime.setText(getResources().getString(R.string.scientific_applyerTime,applyerTime)); + } + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + + return ResultState.STATE_SUCCESSED; + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchClassActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchClassActivity.java new file mode 100644 index 0000000..e328a78 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchClassActivity.java @@ -0,0 +1,722 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.ReplaceLike; +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat1; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; +import static cn.shangyu.gdxzExpert.utils.Url.getCourseIndexSearch; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.text.Html; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.BaseExpandableListAdapter; +import android.widget.EditText; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexSearchBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; +import cn.shangyu.gdxzExpert.widget.WordWrapView; + +public class SearchClassActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { + private TextView tv_public_ser; + private EditText tv_top_search; + private ImageView top_back; + private LinearLayout ll_empty; + private String searchStr; + + CommentExpandableListView expandableListView; + List data=new ArrayList<>(); + public static final int GETINDEXSEARCH= 101; + private SearchExpandAdapter adapter; + Toolbar mToolbar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_class); + mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + tv_public_ser=findViewById(R.id.tv_public_ser); + tv_top_search = (EditText) findViewById(R.id.tv_top_search); + top_back=findViewById(R.id.top_back); + + ll_empty=findViewById(R.id.ll_empty); + expandableListView = findViewById(R.id.search_expandableListView); + top_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + tv_public_ser.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + searchStr = tv_top_search.getText().toString().trim(); + if (StringUtil.isEmpty(searchStr)) { + ToastUtil.showMessage("请输入搜索内容"); + return; + } + else + { + needreport("精品课"); + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + search(searchStr); + } + } + }); + + } + private void initExpandableListView() + { + expandableListView.setGroupIndicator(null); + adapter=new SearchExpandAdapter(this,data); + expandableListView.setAdapter(adapter); + if(data!=null&&data.size()>0) + { + + for(int i=0;i param = new HashMap<>(); + param.put("title",title); + sendJsonPostParamtoNetSignMD5(getCourseIndexSearch,param,GETINDEXSEARCH); + } + CourseIndexSearchBean courseIndexSearchBean; + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + + } + private Handler handler=new Handler(){ + + @Override + public void handleMessage(Message msg) { + switch (msg.what) + { + case GETINDEXSEARCH: + String str=(String) msg.obj; + courseIndexSearchBean= GsonTools.fromGsonToBean(str, CourseIndexSearchBean.class); + if("200".equals(courseIndexSearchBean.getCode())&& + courseIndexSearchBean.getData()!=null&&courseIndexSearchBean.getData().size()>0) + { + data.clear(); + data.addAll(courseIndexSearchBean.getData()); + ll_empty.setVisibility(View.GONE); + + + if (adapter == null) { + initExpandableListView(); + + } else { + adapter.refresh(expandableListView,data); + } + + } + else + { + ll_empty.setVisibility(View.VISIBLE); +// ToastUtil.showToast(courseIndexSearchBean.getMessage()+""); + } + + break; + + } + } + }; + + /** + * 2018.6.14加密请求(患者端) + */ + public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType) { + param.put("user_uuid", SharePrefUtil.getString(getContext(), "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + LogUtils.e("user_uuid+version = " + SharePrefUtil.getString(getContext(), "uuid", "") + "," + UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = " + bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + LogUtil.i("params = " + params.toString()); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("sign", sign); + conn.setRequestProperty("Content-Length", String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + handler.sendMessage(message); + } else { + + } + } + } catch (Exception e) { + //ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }).start(); + } + + + public class SearchExpandAdapter extends BaseExpandableListAdapter + { + Context context; + List beanList; + public SearchExpandAdapter(Context context, List beanList) { + this.context=context; + this.beanList=beanList; + + } + private Handler handler = new Handler(Looper.getMainLooper()){ + @Override + public void handleMessage(Message msg) { + notifyDataSetChanged();//更新数据 + super.handleMessage(msg); + } + }; + + + /*供外界更新数据的方法*/ + public void refresh(CommentExpandableListView mExpandableListView, List list){ + handler.sendMessage(new Message()); + //必须重新伸缩之后才能更新数据 + for (int i = 0; i < list.size(); i++) { + mExpandableListView.collapseGroup(i); + } + for (int i = 0; i < list.size(); i++) { + mExpandableListView.expandGroup(i); + } + } + + @Override + public int getGroupCount() { + return beanList.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + if(beanList.get(groupPosition).getSearch_second_list()!=null&& + beanList.get(groupPosition).getSearch_second_list().size()>0) + return beanList.get(groupPosition).getSearch_second_list().size(); + else + return 0; + } + + @Override + public Object getGroup(int groupPosition) { + return beanList.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return beanList.get(groupPosition).getSearch_second_list().get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.course_jing_item_1, parent, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + beanList.get(groupPosition).getIndex_img(), + groupHolder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + if(!StringUtil.isEmpty(beanList.get(groupPosition).getStudy_num())&&Integer.valueOf(beanList.get(groupPosition).getStudy_num())>4) + { + groupHolder.tv_j.setVisibility(View.VISIBLE); + } + else + { + groupHolder.tv_j.setVisibility(View.GONE); + } + groupHolder.tv_j.setText(beanList.get(groupPosition).getStudy_num()+"人学"); +// groupHolder.tv_n.setText(Html.fromHtml(beanList.get(groupPosition).getTitle())); + groupHolder.tv_n.setText(Html.fromHtml(ReplaceLike(beanList.get(groupPosition).getTitle(),searchStr))); + groupHolder.l_tag.removeAllViews(); + if(!StringUtil.isEmpty(beanList.get(groupPosition).getTags())) + { + String[]tags=beanList.get(groupPosition).getTags().split(","); + for(String tag:tags) + { +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( +// LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); +// params.setMargins(0, 0, 20, 0); + TextView textView=new TextView(context); + textView.setText(tag); + textView.setTextColor(Color.parseColor("#666666")); + textView.setTextSize(11); + textView.setGravity(Gravity.CENTER); + textView.setPadding(8,1,8,1); + textView.setBackground(context.getResources().getDrawable(R.drawable.tag_bg)); +// textView.setLayoutParams(params); + groupHolder.l_tag.addView(textView); + } + } + + +// if(beanList.get(groupPosition).getSpecial_type_name()!=null) +// { +// switch (beanList.get(groupPosition).getSpecial_type_name()+"") { +// +// case "福利课堂": +// groupHolder.tv_yh.setText("奖励"+beanList.get(groupPosition).getFuli_bon()+"积分"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_pr.setVisibility(View.GONE); +// groupHolder.tv_pr0.setVisibility(View.VISIBLE); +// groupHolder.tv_pr0.setText(fenGetYuanFormat1(beanList.get(groupPosition).getDiscount_price())); +// +// +// +// break; +// case "学完返现": +// if(StringUtil.isEmpty(beanList.get(groupPosition).getBack_bon())|| +// Integer.valueOf(beanList.get(groupPosition).getBack_bon())<0.1) +// { +// groupHolder.tv_yh.setVisibility(View.GONE); +// } +// else +// { +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// } +// groupHolder.tv_yh.setText("返"+beanList.get(groupPosition).getBack_bon()+"积分"); +//// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_pr.setVisibility(View.GONE); +// groupHolder.tv_pr0.setVisibility(View.VISIBLE); +// groupHolder.tv_pr0.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// break; +// default: +//// case "为您推荐": +//// case "精品小课": +// if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_price())) +// { +// +// groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getDiscount_price())); +// if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_type())) +// { +// switch (beanList.get(groupPosition).getDiscount_type()) +// { +// case "0": +// break; +// case "1": +// groupHolder.tv_yh.setText("永久优惠"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// +// break; +// case "2": +// groupHolder.tv_yh.setText("限时优惠"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// break; +// } +// } +// +// groupHolder.tv_ppr.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// } +// else +// { +// +// groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// } +// break; +// } +// } + switch (beanList.get(groupPosition).getSpecial_type_name()+"") { + + case "福利课堂": + groupHolder.tv_b.setText("奖励"+beanList.get(groupPosition).getFuli_bon()+"积分"); + groupHolder.tv_b.setVisibility(View.VISIBLE); + groupHolder.tv_ppr.setVisibility(View.GONE); + groupHolder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_price())) + { + groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getDiscount_price())); +// if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_type())) +// { +// switch (beanList.get(groupPosition).getDiscount_type()) +// { +// case "0": +// groupHolder.tv_yh.setVisibility(View.GONE); +// groupHolder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// groupHolder.tv_yh.setText("永久优惠"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// groupHolder.tv_ppr.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// case "2": +// groupHolder.tv_yh.setText("限时优惠"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// groupHolder.tv_ppr.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// groupHolder.tv_yh.setVisibility(View.GONE); +// groupHolder.tv_ppr.setVisibility(View.GONE); + + } + + + + break; + case "学完返现": + if(StringUtil.isEmpty(beanList.get(groupPosition).getBack_bon())|| + Integer.valueOf(beanList.get(groupPosition).getBack_bon())<0.1) + { + groupHolder.tv_b.setVisibility(View.GONE); + } + else + { + groupHolder.tv_b.setVisibility(View.VISIBLE); + } + groupHolder.tv_b.setText("返"+beanList.get(groupPosition).getBack_bon()+"积分"); + groupHolder.tv_ppr.setVisibility(View.GONE); + groupHolder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_price())) + { + groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getDiscount_price())); +// if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_type())) +// { +// switch (beanList.get(groupPosition).getDiscount_type()) +// { +// case "0": +// groupHolder.tv_yh.setVisibility(View.GONE); +// groupHolder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// groupHolder.tv_yh.setText("永久优惠"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// groupHolder.tv_ppr.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// +// break; +// case "2": +// groupHolder.tv_yh.setText("限时优惠"); +// groupHolder.tv_yh.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// groupHolder.tv_ppr.setVisibility(View.VISIBLE); +// groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); +// groupHolder.tv_yh.setVisibility(View.GONE); +// groupHolder.tv_ppr.setVisibility(View.GONE); + + } + break; + default: + groupHolder.tv_b.setVisibility(View.GONE); + if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_price())) + { + groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getDiscount_price())); + if(!StringUtil.isEmpty(beanList.get(groupPosition).getDiscount_type())) + { + switch (beanList.get(groupPosition).getDiscount_type()) + { + case "0": + groupHolder.tv_yh.setVisibility(View.GONE); + groupHolder.tv_ppr.setVisibility(View.GONE); + break; + case "1": + groupHolder.tv_yh.setText("永久优惠"); + groupHolder.tv_yh.setVisibility(View.VISIBLE); + groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); + groupHolder.tv_ppr.setVisibility(View.VISIBLE); + groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + + break; + case "2": + groupHolder.tv_yh.setText("限时优惠"); + groupHolder.tv_yh.setVisibility(View.VISIBLE); + groupHolder.tv_ppr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); + groupHolder.tv_ppr.setVisibility(View.VISIBLE); + groupHolder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + break; + } + } + + + } + else + { + groupHolder.tv_pr.setText(fenGetYuanFormat1(beanList.get(groupPosition).getAccount())); + groupHolder.tv_yh.setVisibility(View.GONE); + groupHolder.tv_ppr.setVisibility(View.GONE); + + } + break; + } + + + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildHolder childHolder; + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.second_search_item, parent, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + }else { + childHolder = (ChildHolder) convertView.getTag(); + } + if(isLastChild&&groupPosition!=getGroupCount()-1) + { + childHolder.line.setVisibility(View.VISIBLE); + } + else + { + childHolder.line.setVisibility(View.GONE); + } + childHolder.tv_n.setText(Html.fromHtml(ReplaceLike(beanList.get(groupPosition).getSearch_second_list().get(childPosition).getTitle(),searchStr) + )); + return convertView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + } + public class ChildHolder + { + TextView tv_n; + RelativeLayout line; + + public ChildHolder(View view) + { + tv_n=view.findViewById(R.id.tv_n); + line=view.findViewById(R.id.line); + } + + } + public class GroupHolder + { + + CircularRectangle im_j; + TextView tv_j; + TextView tv_n; + WordWrapView l_tag; + RelativeLayout l_c; + TextView tv_yh; + TextView tv_pr,tv_pr0; + TextView tv_ppr; + TextView tv_b; + public GroupHolder(View view) + { + im_j = view.findViewById(R.id.im_j); + tv_j = view.findViewById(R.id.tv_j); + tv_n=view.findViewById(R.id.tv_n); + l_tag=view.findViewById(R.id.l_tag); + tv_yh=view.findViewById(R.id.tv_yh); + tv_pr=view.findViewById(R.id.tv_pr); + tv_ppr=view.findViewById(R.id.tv_ppr); + tv_b=view.findViewById(R.id.tv_b); + l_c=view.findViewById(R.id.l_c); + tv_pr0=view.findViewById(R.id.tv_pr0); + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + adapter=null; + } + private void needreport(String belong) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("search"); + rbens.setBelong(belong); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(SearchClassActivity.this, ReportService.class); + intent.putExtra("report_list", (Serializable) list); + intent.putExtra("report_token", Constant.Repotr_token); + startService(intent); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchCourseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchCourseActivity.java new file mode 100644 index 0000000..47db9b5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchCourseActivity.java @@ -0,0 +1,477 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Paint; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CoursewareListBean; +import cn.shangyu.gdxzExpert.bean.CoursewareListBean.CoursewareBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class SearchCourseActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private Intent getIntent; + private View view; + private PullToRefreshListView mGv_video; + private TextView load_empty; + private SearchCourseActivity mActivity; + private int page = 1; + private CoursewareAdapter moreAdapter; + private EditText mEt_search; + private ImageButton mIb_search; + private String searchText; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝胆课件"); + searchText = getIntent().getStringExtra("search"); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_search_video_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_search_video); + } + mActivity = this; + mEt_search = (EditText) view.findViewById(R.id.et_search_text); + mIb_search = (ImageButton) view.findViewById(R.id.ib_search); + mGv_video = (PullToRefreshListView) view + .findViewById(R.id.gv_video_more); + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + load_empty.setText("暂无肝胆课件"); + // 设置只有下拉刷新 + mGv_video.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + mGv_video.getRefreshableView().setOnItemClickListener(this); + mGv_video.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + } + }); + mEt_search.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + searchText = mEt_search.getText().toString(); + if (!StringUtil.isEmpty(searchText)) { + page = 1; + getDataResult(); + } else { + ToastUtil.showMessage("请输入搜索内容"); + } + return true; + } + return false; + } + }); + if (!StringUtil.isEmpty(searchText)) { + getDataResult(); + } + mIb_search.setOnClickListener(this); + return view; + } + + public static final int GET_VIDEO_DATAS_RESULT = 102; + public static final int GET_VIDEO_NUM_RESULT = 201;; + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", ""); + param.put("sort", "0"); + param.put("title", searchText); + sendJsonPostParamtoNetSignMD5(Url.getGanDanFileByKeyWords, param, + GET_VIDEO_DATAS_RESULT, mActivity); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // super.onClick(v); + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { + SearchCourseActivity.this.setResult(301); + SearchCourseActivity.this.finish(); + } else if (id == R.id.ib_search) { + searchText = mEt_search.getText().toString(); + if (!StringUtil.isEmpty(searchText)) { + page = 1; + getDataResult(); + } else { + ToastUtil.showMessage("请输入搜索内容"); + } + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + + if (keyCode == KeyEvent.KEYCODE_BACK) { + SearchCourseActivity.this.setResult(301); + SearchCourseActivity.this.finish(); + } + return false; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, CourseUrlDetailActivity.class); + intent.putExtra("url", + beanlists.get(position - 1).getPreview_path()); + intent.putExtra("title", beanlists.get(position - 1).getTitle()); + intent.putExtra("uuid", beanlists.get(position - 1).getUuid()); + intent.putExtra("type", beanlists.get(position - 1).getType()); + intent.putExtra("providername", beanlists.get(position - 1).getProvidername()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + processData(resultJson); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private List beanlists = new ArrayList(); + + private void processData(String result) { + LogUtil.i("result = "+result); + CoursewareListBean bean = GsonTools.fromGsonToBean(result, + CoursewareListBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + + load_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + load_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.data.list); + + } + // 更新 + if (moreAdapter == null) { + moreAdapter = new CoursewareAdapter(); + mGv_video.getRefreshableView().setAdapter(moreAdapter); + } else { + moreAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 +// int totalPage = bean.data.totalPage; + if (bean.data.list==null||bean.data.list.size()==0) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mGv_video.setMode(Mode.PULL_FROM_START); +// + } else { + mGv_video.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mGv_video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + mGv_video.onRefreshComplete(); + } + +// @Override +// protected void onActivityResult(int requestCode, int resultCode, Intent data) { +// // TODO Auto-generated method stub +// super.onActivityResult(requestCode, resultCode, data); +// String uuid = data.getStringExtra("uuid"); +// if (!StringUtil.isEmpty(uuid)) { +// for (int i = 0; i < beanlists.size(); i++) { +// +// if (beanlists.get(i).getUuid().equals(uuid)) { +// String Snum = beanlists.get(i).getReadnum(); +// int Inum = (Integer.parseInt(Snum) + 1); +// beanlists.get(i).setReadnum(Inum + ""); +// moreAdapter.notifyDataSetChanged(); +// +// } +// } +// } +// } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + + public class CoursewareAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_courseware_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_courseware); + } + vh = new ViewHolder(); + vh.mIv_type = (ImageView) convertView + .findViewById(R.id.item_iv_courseware); + + vh.mTv_free = (TextView) convertView + .findViewById(R.id.item_tv_free_price); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.item_tv_title); + vh.mTv_providername = (TextView) convertView + .findViewById(R.id.item_tv_providername); + vh.mTv_hospitalname = (TextView) convertView + .findViewById(R.id.item_tv_hospitalname); + vh.mTv_readnum = (TextView) convertView + .findViewById(R.id.item_tv_rednum); + vh.mTv_price = (TextView) convertView + .findViewById(R.id.item_tv_price); + vh.mTv_yuan = (TextView) convertView + .findViewById(R.id.item_tv_yuan); + vh.mTv_old = (TextView) convertView + .findViewById(R.id.item_tv_old); + vh.mTv_old_price = (TextView) convertView + .findViewById(R.id.item_tv_old_price); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (beanlists.get(position).getType().contains("pdf")) { + vh.mIv_type.setImageResource(R.drawable.pdf); + } else if (beanlists.get(position).getType().contains("doc")) { + vh.mIv_type.setImageResource(R.drawable.word); + } else { + vh.mIv_type.setImageResource(R.drawable.ppt); + } + vh.mTv_title.setText(beanlists.get(position).getTitle()); + vh.mTv_hospitalname.setText(beanlists.get(position) + .getHospitalname()); + + vh.mTv_readnum + .setText(beanlists.get(position).getReadnum() + "人阅读"); + vh.mTv_title.setText(beanlists.get(position).getTitle()); + vh.mTv_providername.setText(beanlists.get(position) + .getProvidername()); + if (beanlists.get(position).getPrice() == 0) { + vh.mTv_free.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else if (beanlists.get(position).getPrice() > 0) { + if (beanlists.get(position).getDiscount() < 1 + && beanlists.get(position).getDiscount() > 0) { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + vh.mTv_price.setText("下载 "+beanlists.get(position).getDiscount() + * beanlists.get(position).getPrice() / 100.0 + "元"); + } + else + { + vh.mTv_price.setText(beanlists.get(position).getDiscount() + * beanlists.get(position).getPrice() / 100.0 + ""); + } + vh.mTv_old.setVisibility(View.VISIBLE); + vh.mTv_old_price.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + vh.mTv_old_price.setText(beanlists.get(position).getPrice() + / 100.0 + "元"); + } + else + { + vh.mTv_old_price.setText(beanlists.get(position).getPrice() + / 100.0 + ""); + } + vh.mTv_old_price.getPaint() + .setFlags( + Paint.STRIKE_THRU_TEXT_FLAG + | Paint.ANTI_ALIAS_FLAG); + } else if (beanlists.get(position).getDiscount() == 1) { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + vh.mTv_price.setText("下载 "+beanlists.get(position).getPrice() + / 100.0 + "元"); + } + else + { + vh.mTv_price.setText(beanlists.get(position).getPrice() + / 100.0 + ""); + } + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else if (beanlists.get(position).getDiscount() == 0) { + vh.mTv_free.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } + } else { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_yuan.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } + if(CommonUtil.BigModule()) + { + vh.mTv_yuan.setVisibility(View.GONE); + } + return convertView; + } + + class ViewHolder { + public ImageView mIv_type; + public TextView mTv_title, mTv_providername, mTv_hospitalname, + mTv_readnum, mTv_price, mTv_yuan, mTv_free, mTv_old, + mTv_old_price; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchForGroupActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchForGroupActivity.java new file mode 100644 index 0000000..2ce3136 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchForGroupActivity.java @@ -0,0 +1,573 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.FrameLayout.LayoutParams; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GroupPatientList; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +public class SearchForGroupActivity extends BaseActivity implements + OnItemClickListener { + private View view; + private ListView mResultView; + private EditText mEdittext; + private int checkNum = 0;// 记录选中的条目数量 + private GroupPatientList bean; + private PatientAdapter patientAdapter; + private ArrayList PatientList = new ArrayList(); + private ArrayList AllPatientList = new ArrayList(); + private ArrayList list2 = new ArrayList<>();//选中结果集合 + private Intent mIntent; + private SearchForGroupActivity mActivity; + private ArrayList patientList; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("选择患者"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(this); + top_right_text.setTextColor(SearchForGroupActivity.this.getResources() + .getColor(R.color.white)); + top_right_text.setTextSize(14); + top_right_text.setBackgroundResource(R.drawable.btn_style_brown); + LayoutParams paras = (LayoutParams) top_right_text + .getLayoutParams(); + paras.setMargins(0, 0, dip2px(SearchForGroupActivity.this, 10), 0); + paras.height = dip2px(SearchForGroupActivity.this, 30); + top_right_text.setLayoutParams(paras); + + onContactClick(checkNum); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_search_patient_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_search_patient); + } + + mEdittext = (EditText) view.findViewById(R.id.search); + mResultView = (ListView) view.findViewById(R.id.lv_searcha_result); + TextView mEmptyView = (TextView) view + .findViewById(R.id.tv_empty_search); + mEmptyView.setText("暂无未分组患者"); + mResultView.setEmptyView(mEmptyView); + mActivity = this; + showProgressDialog("正在加载"); + + patientList = (ArrayList)getIntent().getExtras().getSerializable("PatientList"); + getPatientList(); +// String result = SharePrefUtil.getString(mActivity, Url.getGroupList, ""); +// // 解析列表 +// if (!TextUtils.isEmpty(result)) { +// bean = GsonTools.fromGsonToBean(result, GroupPatientList.class); +// // 初始化列表的数据 +// PatientList.clear(); +// AllPatientList.clear(); +// for (int i = 0; i < bean.data.size(); i++) { +// if (bean.data.get(i).uuid.equals("0")) { +// AllPatientList.addAll(bean.data.get(i).patientList); +// PatientList.addAll(bean.data.get(i).patientList); +// patientAdapter = new PatientAdapter(PatientList); +// mResultView.setAdapter(patientAdapter); +// } +// } +// +// } + ImageView iv_search = view.findViewById(R.id.iv_search); + iv_search.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String s=mEdittext.getText().toString().trim(); + if (!TextUtils.isEmpty(s)) { + PatientList.clear(); + for (int i = 0; i < AllPatientList.size(); i++) { + String realName = AllPatientList.get(i).realName; + String nickname = AllPatientList.get(i).nickname; + String mobile = AllPatientList.get(i).mobile; + + if (realName.contains(s)) { + PatientList.add(AllPatientList.get(i)); + LogUtil.i("第几条" + i + "realName:" + realName + "包含:" + + realName.contains(s)); + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(s)){ + PatientList.add(AllPatientList.get(i)); + }else if (!StringUtil.isEmpty(mobile)&&mobile.contains(s)){ + PatientList.add(AllPatientList.get(i)); + } + } + } else { + PatientList.clear(); + PatientList.addAll(AllPatientList); + } + if (patientAdapter == null) { + patientAdapter = new PatientAdapter(PatientList); + mResultView.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + hideKeyboard(mEdittext); + } + }); + mEdittext.setOnEditorActionListener(new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_SEARCH){ + String s=mEdittext.getText().toString().trim(); + if (!TextUtils.isEmpty(s)) { + PatientList.clear(); + for (int i = 0; i < AllPatientList.size(); i++) { + String realName = AllPatientList.get(i).realName; + String nickname = AllPatientList.get(i).nickname; + String mobile = AllPatientList.get(i).mobile; + + if (realName.contains(s)) { + PatientList.add(AllPatientList.get(i)); + LogUtil.i("第几条" + i + "realName:" + realName + "包含:" + + realName.contains(s)); + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(s)){ + PatientList.add(AllPatientList.get(i)); + }else if (!StringUtil.isEmpty(mobile)&&mobile.contains(s)){ + PatientList.add(AllPatientList.get(i)); + } + } + } else { + PatientList.clear(); + PatientList.addAll(AllPatientList); + } + if (patientAdapter == null) { + patientAdapter = new PatientAdapter(PatientList); + mResultView.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + hideKeyboard(mEdittext); + + return true; + } + + return false; + } + }); + + + mResultView.setOnItemClickListener(this); + +// mEdittext.addTextChangedListener(textWatcher); + return view; + } + + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param + * + * @param + */ + private void getPatientList() { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", SharePrefUtil.getString(mActivity, Constant.uuid, "")); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getpatientList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + if (!TextUtils.isEmpty(info.result)) { + // 初始化列表的数据 +// PatientList.clear(); +// AllPatientList.clear(); + PatientListBean bean1 = GsonTools.fromGsonToBean(info.result, PatientListBean.class); + //去除已经有的患者,不显示 + if (patientList.size()>0){ + for (int i = bean1.data.size()-1; i >= 0; i--) { + for (int j = patientList.size()-1;j>=0;j--){ + if (patientList.get(j).getUuid().equals(bean1.data.get(i).getUuid())){ + bean1.data.remove(i); + break; + } + } + } + } + for (int i = 0; i < bean1.data.size(); i++) { + PatientData patientData = bean1.data.get(i); + if (patientData!=null){ + AllPatientList.add(patientData); + PatientList.add(patientData); + patientAdapter = new PatientAdapter(PatientList); + mResultView.setAdapter(patientAdapter); + } + + + } + + + } + + closeProgressDialog(); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + /** + * 隐藏软键盘 + * + * @param :上下文环境,一般为Activity实例 + * @param view :一般为EditText + */ + public static void hideKeyboard(View view) { + InputMethodManager manager = (InputMethodManager) view.getContext() + .getSystemService(Context.INPUT_METHOD_SERVICE); + manager.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + final private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + LogUtil.i("输入:" + s); + invertSelection(); + // 判断输入的是否为空 + + } + }; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + intentUuid(); + break; + + default: + break; + } + } + + ArrayList uuids; + ArrayList names; + + public void intentUuid() { + // patientAdapter.getIsSelected(); + uuids = new ArrayList(); + names = new ArrayList(); + for (int i = 0; i < list2.size(); i++) { + String uuid = list2.get(i).getUuid(); + uuids.add(uuid); + String nickname = list2.get(i).nickname; + if (StringUtil.isEmpty(nickname)){ + names.add(list2.get(i).getRealName()); + }else { + names.add(nickname); + } + + } + Intent intent = getIntent(); + intent.putStringArrayListExtra("uuids", uuids); + intent.putStringArrayListExtra("names", names); + setResult(AddGroupActivity.GET_PATIENTS_RESULT, intent); + finish(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + PatientAdapter.ViewHolder holder = (PatientAdapter.ViewHolder) view + .getTag(); + // ViewHolder holder = (ViewHolder) arg1.getTag(); + // 改变CheckBox的状态 + holder.cbSelect.toggle(); + // 将CheckBox的选中状况记录下来 +// PatientAdapter.getIsSelected().put(position, +// holder.cbSelect.isChecked()); +// // 调整选定条目 +// if (holder.cbSelect.isChecked() == true) { +// checkNum++; +// } else { +// checkNum--; +// } +// onContactClick(checkNum); + + PatientData patientData = PatientList.get(position); + if (holder.cbSelect.isChecked() == true) { + list2.add(PatientList.get(position)); + for (int j= 0;j0){ + for (int i = 0;i 0 ? true : false); + top_right_text.setText(getString(R.string.radar_ok_count, + getString(R.string.dialog_ok_button), count)); + } + + // // ***********************全选************************* + // public void selectAllContacts() { + // for (int i = 0; i < PatientList.size(); i++) { + // PatientAdapter.getIsSelected().put(i, true); + // } + // patientAdapter.notifyDataSetChanged(); + // checkNum = PatientList.size(); + // onContactClick(checkNum); + // } + // + // // ***********************非全选************************* + public void invertSelection() { + for (int i = 0; i < PatientList.size(); i++) { + PatientAdapter.getIsSelected().put(i, false); + } + if(patientAdapter!=null){ + patientAdapter.notifyDataSetChanged(); + checkNum = 0; + onContactClick(checkNum); + } + + } + + /** + * 患者列表适配器 + */ + public static class PatientAdapter extends BaseAdapter { + + private List PatientList; + // 用来控制CheckBox的选中状况 + private static HashMap isSelected; + + public PatientAdapter(ArrayList list) { + + this.PatientList = list; + isSelected = new HashMap(); + // 初始化数据 + initDate(); + } + + // 初始化isSelected的数据 ,让所有都设置为未选中 + private void initDate() { + for (int i = 0; i < PatientList.size(); i++) { + getIsSelected().put(i, false); + } + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_patient_list_big1); + } + else + { + convertView = UIUtils.inflate(R.layout.item_patient_list); + } + + mHolder = new ViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_patient_touxiang);// 头像 + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name);// 姓名 + mHolder.cbSelect = (CheckBox) convertView + .findViewById(R.id.cb_select);// 选择框 + mHolder.mNickName = (TextView) convertView + .findViewById(R.id.tv_nick_name); + mHolder.cbSelect.setVisibility(View.VISIBLE); + + convertView.setTag(mHolder); + } else { + mHolder = (ViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + mHolder.mNickName.setText(p.nickname); + // 姓名 + if (!StringUtil.isEmpty(p.nickname)){ + mHolder.tvTitle.setText(p.nickname); + }else { + mHolder.tvTitle.setText(p.getRealName()); + } + if(CommonUtil.BigModule()) + { + // 头像 + if (!TextUtils.isEmpty(p.getPhoto()) + && !"null".equals(p.getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.getPhoto(), + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + }else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + } + else + { + // 头像 + if (!TextUtils.isEmpty(p.getPhoto()) + && !"null".equals(p.getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.getPhoto(), + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + }else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + } + + + // 根据isSelected来设置checkbox的选中状况 +// mHolder.cbSelect.setChecked(getIsSelected().get(position)); + mHolder.cbSelect.setChecked(p.isSelect()); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return PatientList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + public static HashMap getIsSelected() { + return isSelected; + } + + public void setIsSelected(HashMap isSelected) { + PatientAdapter.isSelected = isSelected; + } + + public class ViewHolder { + + public CheckBox cbSelect; + public ImageView ivImage; + public TextView tvTitle, mNickName; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchHistoryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchHistoryActivity.java new file mode 100644 index 0000000..1a7ae99 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchHistoryActivity.java @@ -0,0 +1,333 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.HistoryMeetingAdapter; +import cn.shangyu.gdxzExpert.bean.MeetingBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; +import static cn.shangyu.gdxzExpert.utils.Url.getHistoryMeetingList; + +public class SearchHistoryActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { + private TextView tv_public_ser; + private EditText tv_top_search; + private ImageView top_back; + private PullToRefreshListView ptrLv; + private int page = 1; + private List mList = new ArrayList(); + HistoryMeetingAdapter mAdapter; + private LinearLayout ll_empty; + String searchStr; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_search_history); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + tv_public_ser=findViewById(R.id.tv_public_ser); + tv_top_search = (EditText) findViewById(R.id.tv_top_search); + top_back=findViewById(R.id.top_back); + ptrLv = (PullToRefreshListView) findViewById(R.id.lv_item_kepu); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + //点击软键盘外部,收起软键盘 +// tv_top_search.setOnFocusChangeListener(new View.OnFocusChangeListener() { +// @Override +// public void onFocusChange(View view, boolean hasFocus) { +// if(!hasFocus){ +// InputMethodManager manager = ((InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE)); +// if (manager != null) +// manager.hideSoftInputFromWindow(view.getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); +// } +// } +// }); + top_back.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + tv_public_ser.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + searchStr = tv_top_search.getText().toString().trim(); + if (StringUtil.isEmpty(searchStr)) { + ToastUtil.showMessage("请输入搜索内容"); + return; + } + else + { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + meetingListBySearchNew("1","","",searchStr); + } + } + }); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + if(searchStr==null) + { + ptrLv.onRefreshComplete(); + return; + } + + page = 1; + + meetingListBySearchNew(page+"","","",searchStr); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + if(searchStr==null) + { + ptrLv.onRefreshComplete(); + return; + } + + page++; + + meetingListBySearchNew(page+"","","",searchStr); + } + }); + } + private void meetingListBySearchNew(String page,String year,String month,String title) + { + + Map param = new HashMap(); + param.put("page", page); + param.put("year", year); + param.put("month", month); + param.put("title", title); + sendJsonPostParamtoNetSignMD5(getHistoryMeetingList, param, 101); + } + private Handler handler=new Handler(){ + + @Override + public void handleMessage(Message msg) { + switch (msg.what) + { + case 101: + String str=(String) msg.obj; + processData(str); + break; + + } + } + }; + /** + * 2018.6.14加密请求(患者端) + */ + public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType) { + param.put("user_uuid", SharePrefUtil.getString(getContext(), "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + LogUtils.e("user_uuid+version = " + SharePrefUtil.getString(getContext(), "uuid", "") + "," + UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = " + bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + LogUtil.i("params = " + params.toString()); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", "application/json"); + conn.setRequestProperty("sign", sign); + conn.setRequestProperty("Content-Length", String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + Log.d("gdxzpyq","hhh "+result); + handler.sendMessage(message); + } else { + + } + } + } catch (Exception e) { + //ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }).start(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent = new Intent(SearchHistoryActivity.this, GDEventDetailActivity.class); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + intent.putExtra("url", mList.get(position - 1).getPath()); + intent.putExtra("summary", mList.get(position - 1).getContent()); + intent.setType("meeting"); + startActivity(intent); + } + + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + MeetingBean bean = GsonTools.fromGsonToBean(result, MeetingBean.class); + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + getPosition(); + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多会议了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + public List DatasList; + public void getPosition() { + DatasList = new ArrayList(); + int count = 0; + for (int i = 0; i < mList.size(); i++) { + if (!DatasList.contains(mList.get(i).getBegin_date() + .substring(0, 7))) { + DatasList.add(mList.get(i).getBegin_date().substring(0, 7)); + // Positions.add(i + ""); + count = 0; + mList.get(i).setCount(count); + } else { + count++; + mList.get(i).setCount(count); + } + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new HistoryMeetingAdapter(SearchHistoryActivity.this, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchNewsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchNewsActivity.java new file mode 100644 index 0000000..463efcc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchNewsActivity.java @@ -0,0 +1,264 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.NewsAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.NewListBean; +import cn.shangyu.gdxzExpert.bean.NewListBean.NewsList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class SearchNewsActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String searchStr; + private SearchNewsActivity mActivity; + private ArrayList newsList = new ArrayList(); + private NewsAdapter newsAdapter; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝胆新闻"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_search_news_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_search_news, null); + } + + mActivity = this; + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无肝胆新闻"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + page = 1; + getNewsList(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getNewsList(); + + // getNewsList(Url.getNewsList, false, false, page); + } + }); + initIntent(); + return view; + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + String newsuuid = SharePrefUtil + .getString(mActivity, "callnewsUuid", ""); + if (newsList != null) { + if (!newsuuid.equals("")) { + + for (int i = 0; i < newsList.size(); i++) { + if (newsList.get(i).getUuid().equals(newsuuid)) { + + newsList.get(i).setReadnum( + SharePrefUtil.getString(mActivity, + "callnewsread", "")); + newsList.get(i).setAgreenum( + SharePrefUtil.getString(mActivity, + "callnewsagree", "")); + } + } + if (newsAdapter != null) { + // newsList.addAll(bean1.data); + newsAdapter.getDatas(newsList); + newsAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "callnewsUuid"); + } + + public void initIntent() { + Intent getintent = getIntent(); + searchStr = getintent.getStringExtra("search"); + getNewsList(); + + } + + public static final int GET_SEARCH_NEWS_RESULT = 101; + + private void getNewsList() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("keywords", searchStr); + param.put("type", "1"); + sendJsonPostParamtoNetSignMD5(Url.getNewsListbykeywordsNew, param, + GET_SEARCH_NEWS_RESULT, mActivity); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + NewsList news = newsList.get(position-1); + + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + news.path); + // intent.putExtra("title", news.title); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", news.uuid); + intent.putExtra("newsagreenum", news.agreenum); + intent.putExtra("newsreadnum", news.readnum); + intent.putExtra("newsTitle", news.title); + intent.putExtra("summary", news.summary); + intent.putExtra("imageUrl", Url.urlHtml + news.headImg); + intent.putExtra("flag", 3); + mActivity.startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + + } + + NewListBean bean1; + + public void processData(String result) { + bean1 = GsonTools.fromGsonToBean(result, NewListBean.class);// 测试的NewsListBean + if (StringUtil.isOneToCode(bean1.code)) { + ToastUtil.showToast(bean1.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 是否是刷新,还是加载更多 + if (page == 1) { + // 初始化新闻 + newsList.clear(); + // 数据为空 + if (bean1.data == null || bean1.data.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + newsList.addAll(bean1.data); + } + } else { + newsList.addAll(bean1.data); + } + // 更新新闻 + if (newsAdapter == null) { + newsAdapter = new NewsAdapter(mActivity); + newsAdapter.getDatas(newsList); + ptrLv.getRefreshableView().setAdapter(newsAdapter); + } else { + newsAdapter.getDatas(newsList); + newsAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean1.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多新闻了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + setLastUpdateTime(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientActivity.java new file mode 100644 index 0000000..df0d9bb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientActivity.java @@ -0,0 +1,304 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListView; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PatientAdapter2; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.fragment.PatientListFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + + +/** + * + * 类名称:SearchPatientActivity 类描述:我的患者-搜索患者 创建人:苏三元 时间:2016-2-16 下午5:59:24 + * 版权:河南商宇科技有限公司--版权所有 (c) 2016 + * + */ +public class SearchPatientActivity extends BaseActivity implements + View.OnClickListener, OnItemClickListener { + + private ListView mResultView; + private EditText mEdittext; + private PatientListBean bean; + private PatientAdapter2 patientAdapter; + private ArrayList PatientList = new ArrayList(); + private Intent mIntent; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("搜索患者"); + // top_title.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + top_right_text.setVisibility(View.GONE); + top_right_search.setVisibility(View.GONE); + // top_search.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_search_patient_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_search_patient); + } + mEdittext = (EditText) view.findViewById(R.id.search); + mResultView = (ListView) view.findViewById(R.id.lv_searcha_result); + View mEmptyView = view.findViewById(R.id.tv_empty_search); + mResultView.setEmptyView(mEmptyView); + mResultView.setOnItemClickListener(this); + mEdittext.addTextChangedListener(textWatcher); + + // 从本地取出患者列表 + String result = SharePrefUtil.getString(this,PatientListFragment.PatientUrl, null); + // 解析列表 + if (!TextUtils.isEmpty(result)) { + bean = GsonTools.fromGsonToBean(result, PatientListBean.class); + // 初始化列表的数据 + PatientList.clear(); + } + PatientList.addAll(bean.data); + patientAdapter = new PatientAdapter2(SearchPatientActivity.this, + PatientList); + mResultView.setAdapter(patientAdapter); + initIntent(); + + ImageView iv_search = view.findViewById(R.id.iv_search); + iv_search.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String s = mEdittext.getText().toString().trim(); + if (!TextUtils.isEmpty(s)) { + PatientList.clear(); + for (int i = 0; i < bean.data.size(); i++) { + String realName = bean.data.get(i).realName; + String nickname = bean.data.get(i).nickname; + String mobile = bean.data.get(i).getMobile(); + if (!StringUtil.isEmpty(realName)&&realName.contains(s)) {//姓名 + PatientList.add(bean.data.get(i)); + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(s)){//别名 + PatientList.add(bean.data.get(i)); + }else if (!StringUtil.isEmpty(mobile)&&mobile.contains(s)){//手机号 + PatientList.add(bean.data.get(i)); + } + } + } else { + PatientList.clear(); + } + if (patientAdapter == null) { + patientAdapter = new PatientAdapter2( + SearchPatientActivity.this, PatientList); + mResultView.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + } + }); + registerDeletPatient(); + return view; + } + + boolean isVisit = false; + + public void initIntent() { + mIntent = getIntent(); + // intent.setType("AddVisitDateActivity"); + String mType = mIntent.getType(); + if (mIntent.getType() != null) { + if (mIntent.getType().equals("isVisit")) { + isVisit = true; + } + } + String searchStr = getIntent().getStringExtra("search"); + if (!StringUtil.isEmpty(searchStr)) { + PatientList.clear(); + for (int i = 0; i < bean.data.size(); i++) { + String realName = bean.data.get(i).realName; + String nickname = bean.data.get(i).nickname; + LogUtil.i("第几条" + i + "realName:" + realName + "nickname:" + + nickname); + if (!StringUtil.isEmpty(realName)&&realName.contains(searchStr)) { + PatientList.add(bean.data.get(i)); + + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(searchStr)){ + PatientList.add(bean.data.get(i)); + } + } + if (patientAdapter == null) { + patientAdapter = new PatientAdapter2( + SearchPatientActivity.this, PatientList); + mResultView.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + } + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + final private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + LogUtil.i("输入:" + s); + // 判断输入的是否为空 + if (!TextUtils.isEmpty(s)) { + PatientList.clear(); + for (int i = 0; i < bean.data.size(); i++) { + String realName = bean.data.get(i).realName; + String nickname = bean.data.get(i).nickname; + String mobile = bean.data.get(i).getMobile(); + if (!StringUtil.isEmpty(realName)&&realName.contains(s)) {//姓名 + PatientList.add(bean.data.get(i)); + }else if (!StringUtil.isEmpty(nickname)&&nickname.contains(s)){//别名 + PatientList.add(bean.data.get(i)); + }else if (!StringUtil.isEmpty(mobile)&&mobile.contains(s)){//手机号 + PatientList.add(bean.data.get(i)); + } + } + } else { + PatientList.clear(); + } + if (patientAdapter == null) { + patientAdapter = new PatientAdapter2( + SearchPatientActivity.this, PatientList); + mResultView.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + } + }; + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + hideSoftKeyboard(); + PatientData patient; + LogUtil.i("position:" + position); + if (mResultView.getHeaderViewsCount() > 0) { + patient = PatientList.get(position - 1); + } else { + patient = PatientList.get(position); + } + String mobile = patient.mobile; + Log.d("gdxzbig","mobile:" + mobile + " realName:" + patient.realName+" patient.nickname "+patient.nickname); + // if(!TextUtils.isEmpty(mobile)){ + // //根据手机号启动聊天页面 + // ECDeviceKit.getIMKitManager().startConversationActivity(mobile); + // } + if (isVisit) { + Intent mIntent = new Intent(); + if (!StringUtil.isEmpty(patient.nickname)){ + mIntent.putExtra("realName", patient.nickname); + }else { + mIntent.putExtra("realName", patient.realName); + } + + mIntent.putExtra("patientUuid", patient.uuid); + setResult(201, mIntent); + finish(); + } else { + Intent intent = new Intent(this, BigPatientActivity.class); + intent.putExtra("mobile", mobile); + if (!StringUtil.isEmpty(patient.nickname)){ + intent.putExtra("realName", patient.nickname); + }else { + intent.putExtra("realName", patient.realName); + } + intent.putExtra("patientUuid", patient.uuid); + intent.putExtra("photo", patient.photo); + intent.putExtra("type", Constant.typePatient); + startActivity(intent);// 启动患者详情界面 + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + localBroadcastManager.unregisterReceiver(localReceiver); + } + + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + LocalReceiver localReceiver; + private void registerDeletPatient() + { + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("DELET_PATION_ACTION"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + } + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + finish(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientTeachActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientTeachActivity.java new file mode 100644 index 0000000..dad9de5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchPatientTeachActivity.java @@ -0,0 +1,361 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PatientTeachAdapter; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * Created by WANGChengXin on 2019/10/22. + * 搜索患教科普 + */ + +public class SearchPatientTeachActivity extends AppCompatActivity implements AdapterView.OnItemClickListener,View.OnClickListener { + private TextView tv_public_ser; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String searchStr; + private PatientTeachActivity mActivity; + private EditText mEt_search; + private ECAlertDialog buildAlert; + private ImageView top_back; + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + int i = msg.what; + if (GET_SEARCH_SCRENCE_RESULT == i) + processData(resultData); + } + }; + }; + + + @Override + public void onItemClick(AdapterView parent, View view, final int position, long id) { + PatientTeachBean.PatientTBean datas1; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas1 = data.get(position - headerViewsCount); + } else { + datas1 = data.get(position); + + } + buildAlert = ECAlertDialog.buildAlert(SearchPatientTeachActivity.this, datas1.getTopic(), "取消", "发送", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + sendKepu(position); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("是否确定发送此患教科普"); + buildAlert.setTitleColor(SearchPatientTeachActivity.this.getResources().getColor( + R.color.black)); + buildAlert.setMessageColor("#666666"); + buildAlert.show(); + } + private void sendKepu(int position) { + PatientTeachBean.PatientTBean datas; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas = data.get(position - headerViewsCount); + } else { + datas = data.get(position); + + } + + + Intent intent = new Intent(); + if (StringUtil.isEmpty(datas.getImgPath())) { + + intent.putExtra("imagUrl","http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + intent.putExtra("imagUrl", Url.urlHtml + datas.getImgPath()); + } + System.out.println("datas.getImgPath()== " + datas.getImgPath()); + + intent.putExtra("url", Url.urlHtml + datas.getPath()); + intent.putExtra("title", datas.getTopic()); + intent.putExtra("uuid",datas.getUuid()); + intent.putExtra("content", datas.getSummary()); + setResult(80, intent); + finish(); + } + + PatientTeachAdapter mAdapter; + List data = new ArrayList(); + + public void processData(String result) { + PatientTeachBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, PatientTeachBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.data); + } + } else { + data.addAll(bean.data); + } + // 更新 + if (mAdapter == null) { + mAdapter = new PatientTeachAdapter(data); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多患教了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + if(CommonUtil.BigModule()) + { + setContentView(R.layout.activity_search_patientteach_big); + } + else + { + setContentView(R.layout.activity_search_patientteach); + } + + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + tv_public_ser = findViewById(R.id.tv_public_ser); + top_back = findViewById(R.id.top_back); + top_back.setOnClickListener(this); + tv_public_ser.setOnClickListener(this); + mEt_search =findViewById(R.id.tv_top_search); + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView)findViewById(R.id.lv_item_news); + // 空布局,处理 + ll_empty = (LinearLayout) findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无患教学堂"); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + page = 1; + getScienceList(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getScienceList(); + + // getNewsList(Url.getNewsList, false, false, page); + } + }); + getScienceList(); + } + + + public static final int GET_SEARCH_SCRENCE_RESULT = 101; + + private void getScienceList() { + // TODO Auto-generated method stub + final Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("topic", mEt_search.getText().toString().trim()); + param.put("user_uuid", SharePrefUtil.getString(this, "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(Url.getPolularScienceArticleListInexpertNew); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = GET_SEARCH_SCRENCE_RESULT; + message.obj = new String(result); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }).start(); + + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + ptrLv.onRefreshComplete(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_public_ser: + page = 1; + getScienceList(); + break; + case R.id.top_back: + finish(); + break; + default: + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchScienceActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchScienceActivity.java new file mode 100644 index 0000000..5e7e98d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchScienceActivity.java @@ -0,0 +1,293 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PatientTeachAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean.PatientTBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class SearchScienceActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String searchStr; + private SearchScienceActivity mActivity; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("患教学堂"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); +// View view = View.inflate(ct, R.layout.activity_search_news, null); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_search_news_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_search_news, null); + } + mActivity = this; + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无患教学堂"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + page = 1; + getScienceList(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getScienceList(); + + // getNewsList(Url.getNewsList, false, false, page); + } + }); + initIntent(); + return view; + + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + String newsuuid = SharePrefUtil + .getString(mActivity, "callnewsUuid", ""); + if (data != null) { + if (!newsuuid.equals("")) { + + for (int i = 0; i < data.size(); i++) { + if (data.get(i).getUuid().equals(newsuuid)) { + + data.get(i).setReadnum( + SharePrefUtil.getString(mActivity, + "callnewsread", "")); + data.get(i).setAgreenum( + SharePrefUtil.getString(mActivity, + "callnewsagree", "")); + } + } + if (mAdapter != null) { + // newsList.addAll(bean1.data); + mAdapter.getDatas(data); + mAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "callnewsUuid"); + + } + + public void initIntent() { + Intent getintent = getIntent(); + searchStr = getintent.getStringExtra("search"); + getScienceList(); + + } + + public static final int GET_SEARCH_SCRENCE_RESULT = 101; + + private void getScienceList() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("topic", searchStr); + sendJsonPostParamtoNetSignMD5(Url.getPolularScienceArticleListInexpertNew, param, + GET_SEARCH_SCRENCE_RESULT, mActivity); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + PatientTBean datas; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas = data.get(position - headerViewsCount); + } else { + datas = data.get(position); + + } + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + datas.getPath()); + intent.putExtra("title", "患教详情"); + intent.putExtra("kepuuuid", datas.getUuid()); + intent.putExtra("kepuagreenum", datas.getAgreenum()); + intent.putExtra("kepureadnum", datas.getReadnum()); + intent.putExtra("newsTitle", datas.getTopic()); + intent.putExtra("summary", datas.getSummary()); + intent.putExtra("imageUrl", Url.urlHtml + datas.getImgPath()); + intent.putExtra("flag", 2); + mActivity.startActivity(intent); +// needreportDetail("患教文库",datas.getTags(),datas.getTopic()); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + + } + + PatientTeachAdapter mAdapter; + List data = new ArrayList(); + + public void processData(String result) { + PatientTeachBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, PatientTeachBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.data); + } + } else { + data.addAll(bean.data); + } + // 更新 + if (mAdapter == null) { + mAdapter = new PatientTeachAdapter(data); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多患教了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoActivity.java new file mode 100644 index 0000000..788c4e7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoActivity.java @@ -0,0 +1,470 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RadioGroup; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import com.gyf.immersionbar.ImmersionBar; + +import org.apache.commons.lang.CharUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class SearchVideoActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener,RadioGroup.OnCheckedChangeListener { + private Intent getIntent; + private View view; + private PullToRefreshListView mGv_video; + private TextView load_empty; + private String url = Url.getVideoBySearchNew; + private SearchVideoActivity mActivity; + private int page = 1; + private VideoJHAdapter moreAdapter; + private EditText mEt_search; + private ImageButton mIb_search; + private String searchText; + private String sort = "2"; + private RadioGroup rg_house; + Boolean ispatientvideo; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + searchText = getIntent().getStringExtra("search"); + type = getIntent().getType(); + if (type != null && type.equals("patient")) { + url = Url.getPatientVideoBySearchNew; + top_title.setText("患教视频"); + ispatientvideo=true; + } else { + top_title.setText("肝胆视频"); + ispatientvideo=false; + } + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_search_video_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_search_video); + } + + mActivity = this; + mEt_search = (EditText) view.findViewById(R.id.et_search_text); + mIb_search = (ImageButton) view.findViewById(R.id.ib_search); + mGv_video = (PullToRefreshListView) view.findViewById(R.id.gv_video_more); + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + rg_house = view.findViewById(R.id.rg_house); + rg_house.setVisibility(View.VISIBLE); + if (type != null && type.equals("patient")) { + load_empty.setText("暂无患教视频"); + } else { + load_empty.setText("暂无肝胆视频"); + } + // 设置只有下拉刷新 + mGv_video.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + mGv_video.getRefreshableView().setOnItemClickListener(this); + mGv_video.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + } + }); + mEt_search.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + searchText = mEt_search.getText().toString(); + if (!StringUtil.isEmpty(searchText)) { + page = 1; + getDataResult(); + } else { + ToastUtil.showMessage("请输入搜索内容"); + } + return true; + } + return false; + } + }); + if (!StringUtil.isEmpty(searchText)) { + getDataResult(); + } + mIb_search.setOnClickListener(this); + rg_house.setOnCheckedChangeListener(this); + return view; + } + + public static final int GET_VIDEO_DATAS_RESULT = 102; + public static final int GET_VIDEO_NUM_RESULT = 201;; + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("name", searchText); + param.put("sort",sort); + sendJsonPostParamtoNetSignMD5(url, param, GET_VIDEO_DATAS_RESULT, mActivity); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // super.onClick(v); + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back_layout) { + SearchVideoActivity.this.setResult(301); + SearchVideoActivity.this.finish(); + } else if (id == R.id.ib_search) { + searchText = mEt_search.getText().toString(); + if (!StringUtil.isEmpty(searchText)) { + page = 1; + getDataResult(); + } else { + ToastUtil.showMessage("请输入搜索内容"); + } + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + + if (keyCode == KeyEvent.KEYCODE_BACK) { + SearchVideoActivity.this.setResult(301); + SearchVideoActivity.this.finish(); + } + return false; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", beanlists.get(position - 1).getPath()); + intent.putExtra("uuid", beanlists.get(position - 1).getUuid()); + intent.putExtra("note", beanlists.get(position - 1).getNote()); + intent.putExtra("title", beanlists.get(position - 1).getName()); + intent.putExtra("readnum", beanlists.get(position - 1).getReadnum()); + intent.putExtra("imgpath", beanlists.get(position - 1).getImgpath()); + intent.putExtra("public_name", beanlists.get(position - 1).getPublic_name()); + intent.putExtra("ispatientvideo",ispatientvideo); + if("患教视频".equals(top_title.getText())) + { + intent.putExtra("need_inside_share", "yes"); + intent.putExtra("pagetype","患教视频"); +// needreportDetail("患教视频", beanlists.get(position - 1).getTags(),beanlists.get(position - 1).getName()); + } + else if("肝胆视频".equals(top_title.getText())) + { + intent.putExtra("pagetype","肝胆视频"); +// needreportDetail("肝胆视频", beanlists.get(position - 1).getTags(),beanlists.get(position - 1).getName()); + } + + mActivity.startActivityForResult(intent,VideoActivity.GET_READ_NUM_RESULT); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + processData(resultJson); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private List beanlists = new ArrayList(); + private String type; + + private void processData(String result) { + LogUtil.i("result = "+result); + VideoMoreBean bean = GsonTools.fromGsonToBean(result,VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (bean.code == null || !bean.code.equals("1")) { + ToastUtil.showMessage(bean.message); + return; + } + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + + load_empty.setVisibility(View.VISIBLE); + + onLoaded(); + setLastUpdateTime(); + // return; + + } else { + load_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.data.list); + + } + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + beanlists.get(i).setVideo_type_name(s); + } + } + } + + + // 更新 + if (moreAdapter == null) { + moreAdapter = new VideoJHAdapter(); + mGv_video.getRefreshableView().setAdapter(moreAdapter); + } else { + moreAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mGv_video.setMode(Mode.PULL_FROM_START); + + } else { + mGv_video.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mGv_video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + mGv_video.onRefreshComplete(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if(data==null) + { + return; + } + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < beanlists.size(); i++) { + + if (beanlists.get(i).getUuid().equals(uuid)) { + String Snum = beanlists.get(i).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + beanlists.get(i).setReadnum(Inum + ""); + moreAdapter.notifyDataSetChanged(); + + } + } + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_ht) { + sort="2"; + page = 1; + getDataResult(); + } else if (checkedId == R.id.tab_rbn_myht) { + sort="1"; + page = 1; + getDataResult(); + } + } + + public class VideoJHAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { +// convertView = UIUtils.inflate(R.layout.item_video_jh); + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_video_search_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_video_search); + } + + vh = new ViewHolder(); + vh.mTv_Title = (TextView) convertView.findViewById(R.id.tv_title); + vh.tv_name = (TextView) convertView.findViewById(R.id.tv_name); + vh.tv_time = (TextView) convertView.findViewById(R.id.tv_time); + vh.tv_video_type_name = (TextView) convertView.findViewById(R.id.tv_video_type_name); + vh.tv_num = (TextView) convertView.findViewById(R.id.tv_num); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_Title.setText(beanlists.get(position).getName()); + + + if(CommonUtil.BigModule()) + { + vh.tv_name.setText(beanlists.get(position).getPublic_name()+" "+beanlists.get(position).getCreate_date().split(" ")[0]); + vh.tv_num.setText(beanlists.get(position).getReadnum()+"人阅读"); + } + else + { + vh.tv_name.setText(beanlists.get(position).getPublic_name()); + vh.tv_num.setText(beanlists.get(position).getReadnum()+""); + vh.tv_time.setText(beanlists.get(position).getCreate_date().split(" ")[0]); + } + + vh.tv_video_type_name.setText(beanlists.get(position).getVideo_type_name()); + return convertView; + } + + public class ViewHolder { + TextView mTv_Title,tv_name,tv_time,tv_video_type_name,tv_num; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoTeachActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoTeachActivity.java new file mode 100644 index 0000000..71b602a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SearchVideoTeachActivity.java @@ -0,0 +1,376 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoTeachAdapter; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.big.adapter.BigVideoTeachAdapter; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * Created by WANGChengXin on 2019/10/28. + * 搜索患教视频 + */ + +public class SearchVideoTeachActivity extends AppCompatActivity implements View.OnClickListener,AdapterView.OnItemClickListener{ + + private TextView tv_public_ser; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String searchStr; + private PatientTeachActivity mActivity; + private EditText mEt_search; + private ECAlertDialog buildAlert; + private ImageView top_back; + public static final int GET_SEARCH_SCRENCE_RESULT = 101; + private List data = new ArrayList<>(); + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + int i = msg.what; + if (GET_SEARCH_SCRENCE_RESULT == i) + processData(resultData); + } + }; + }; + + + private String sort = "2"; + private VideoTeachAdapter mAdapter; + private String typeUuid; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if(CommonUtil.BigModule()) + { + setContentView(R.layout.activity_search_patientteach_big); + } + else + { + setContentView(R.layout.activity_search_patientteach); + } + + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + tv_public_ser = findViewById(R.id.tv_public_ser); + top_back = findViewById(R.id.top_back); + top_back.setOnClickListener(this); + tv_public_ser.setOnClickListener(this); + mEt_search =findViewById(R.id.tv_top_search); + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView)findViewById(R.id.lv_item_news); + // 空布局,处理 + ll_empty = (LinearLayout) findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无视频科普"); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + page = 1; + getVideoList(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getVideoList(); + + // getNewsList(Url.getNewsList, false, false, page); + } + }); + + typeUuid = getIntent().getStringExtra("typeUuid"); + sort = getIntent().getStringExtra("sort"); + getVideoList(); + } + + private void getVideoList() { + final Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("name", mEt_search.getText().toString().trim()); + param.put("typeUuid",typeUuid); + param.put("sort",sort); + LogUtil.i("page = "+page); + LogUtil.i("name = "+mEt_search.getText().toString().trim()); + LogUtil.i("typeUuid = "+typeUuid); + LogUtil.i("sort = "+sort); + param.put("user_uuid", SharePrefUtil.getString(this, "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(Url.patientVideoByName); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = GET_SEARCH_SCRENCE_RESULT; + message.obj = new String(result); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + }).start(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + private void processData(String resultData) { + LogUtil.i("resultData = "+resultData); + VideoMoreBean bean = null; + try { + bean = GsonTools.fromGsonToBean(resultData, VideoMoreBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.data == null || bean.data.list.size()==0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.data.list); + } + } else { + data.addAll(bean.data.list); + } + // 更新 + if (mAdapter == null) { + if(CommonUtil.BigModule()) + { + mAdapter = new BigVideoTeachAdapter(data); + } + else + { + mAdapter = new VideoTeachAdapter(data); + } + + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多患教了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void onLoaded() { + ptrLv.onRefreshComplete(); + } + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.top_back: + finish(); + break; + case R.id.tv_public_ser: + page = 1; + getVideoList(); + break; + } + } + + @Override + public void onItemClick(AdapterView parent, View view, final int position, long id) { + VideoMoreBean.VideoMore datas1; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas1 = data.get(position - headerViewsCount); + } else { + datas1 = data.get(position); + + } + buildAlert = ECAlertDialog.buildAlert(SearchVideoTeachActivity.this, datas1.getName(), "取消", "发送", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + sendKepu(position); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("是否确定发送此患教科普"); + buildAlert.setTitleColor(SearchVideoTeachActivity.this.getResources().getColor( + R.color.black)); + buildAlert.setMessageColor("#666666"); + buildAlert.show(); + } + private void sendKepu(int position) { + VideoMoreBean.VideoMore datas; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas = data.get(position - headerViewsCount); + } else { + datas = data.get(position); + + } + + + Intent intent = new Intent(); + if (StringUtil.isEmpty(datas.getImgpath())) { + + intent.putExtra("imagUrl","http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + intent.putExtra("imagUrl", Url.urlHtml + datas.getImgpath()); + } + System.out.println("datas.getImgPath()== " + datas.getImgpath()); + + intent.putExtra("url", Url.urlHtml + datas.getPath()); + intent.putExtra("title", datas.getName()); + intent.putExtra("uuid",datas.getUuid()); + intent.putExtra("content","肝胆相照®肝胆病在线公共服务平台"); + setResult(80, intent); + finish(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectBankCardActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectBankCardActivity.java new file mode 100644 index 0000000..f3f4dd3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectBankCardActivity.java @@ -0,0 +1,230 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.SelectBankCardAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BankCardBean; +import cn.shangyu.gdxzExpert.bean.BankCardBean.Card; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * SelectBankCardActivity.java + * + * @author liufang + * @date 2015-11-10 下午1:28:31 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * @date 2015-12-11 下午 4:30:20 + * @author jixiao 修改 功能说明:提现->选择银行卡页面 + */ +public class SelectBankCardActivity extends BaseActivity implements + OnItemClickListener { + private static final int TO_ADD_CARD = 0; + private ListView ptrLv; + // private TextView load_empty; + private SelectBankCardAdapter mAdapter; + private String url = Url.getBankCardList; + // private TextView add_bangk_card; + private TextView tv_empty_card; + private List datas = new ArrayList(); + private SelectBankCardActivity mActivity; + private String cardUuid; + private BankCardBean bean = null; + + @Override + public void setTitle() { + top_title.setText("选择银行卡"); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + top_right.setImageResource(R.drawable.invite); + cardUuid = getIntent().getStringExtra("cardUuid"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_select_bank_card, null); + // add_bangk_card = (TextView) view.findViewById(R.id.tv_add_card); + // add_bangk_card.setOnClickListener(this); + ptrLv = (ListView) view.findViewById(R.id.lv_item_lib);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + // load_empty = (TextView) view.findViewById(R.id.load_empty_bank); + tv_empty_card = (TextView) view.findViewById(R.id.tv_empty_bankcard); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mActivity = this; + // 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 + setListViewHeightBasedOnChildren(ptrLv); + // 得到实际的ListView 设置点击 + ptrLv.setOnItemClickListener(this); + + initData(); + return view; + } + + /** + * 解析并处理数据 + * + */ + private void processBanklist(String result) { + + bean = GsonTools.fromGsonToBean(result, BankCardBean.class); + // 初始化列表的数据 + datas.clear(); + // 数据为空 + if (bean.bankList == null || bean.bankList.size() == 0) { + // load_empty.setVisibility(View.VISIBLE); + ptrLv.setEmptyView(tv_empty_card); + } else { + tv_empty_card.setVisibility(View.GONE); + datas.addAll(bean.bankList); + } + if (mAdapter == null) { + mAdapter = new SelectBankCardAdapter(ct, datas); + mAdapter.getChange(cardUuid); + ptrLv.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 + onLoaded(); + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(ct, url, null); + if (!TextUtils.isEmpty(result)) { + processBanklist(result); + } else { + // 显示加载框 + showLoadingProgress(); + } + // getBankList(url); + + } + + /** + * 获取银行卡列表 + * + * @param loadUrl + */ + private void getBankList(String loadUrl) { + String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expert_uuid", uuid);// 专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, url, info.result); + processBanklist(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + onLoaded(); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + getBankList(url); + super.onResume(); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + closeProgressDialog(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // MyBankListData data = datas.get(position); + // + Intent intent = getIntent(); + intent.putExtra("cardId", bean.bankList.get(position).getUuid()); + setResult(Activity.RESULT_OK, intent); + finish(); + } + + @Override + // 如果银行卡列表为空 点击添加银行卡 + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right: + Intent intent = new Intent(ct, AddBankCardFirstActivity.class); + startActivity(intent); + break; + } + + } + + /** + * 动态改变ListView 高度 + * + * @param listView + */ + public void setListViewHeightBasedOnChildren(ListView listView) { + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) { + return; + } + int totalHeight = 0; + for (int i = 0; i < listAdapter.getCount(); i++) { + View listItem = listAdapter.getView(i, null, listView); + listItem.measure(0, 0); + totalHeight += listItem.getMeasuredHeight(); + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); + params.height = totalHeight + + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); + // ((MarginLayoutParams) params).setMargins(10, 10, 10, 10); + listView.setLayoutParams(params); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateClinicActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateClinicActivity.java new file mode 100644 index 0000000..c2fe948 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateClinicActivity.java @@ -0,0 +1,350 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 + * + * 功能说明:我的-服务设置-门诊预约-门诊时间设置 + */ +public class SelectDateClinicActivity extends BaseActivity { + + private CheckBox cb_one_Morning; + private CheckBox cb_one_Afternoon; + private CheckBox cb_two_Morning; + private CheckBox cb_two_Afternoon; + private CheckBox cb_three_Morning; + private CheckBox cb_three_Afternoon; + private CheckBox cb_four_Morning; + private CheckBox cb_four_Afternoon; + private CheckBox cb_five_Morning; + private CheckBox cb_five_Afternoon; + private CheckBox cb_six_Morning; + private CheckBox cb_six_Afternoon; + private CheckBox cb_seven_Morning; + private CheckBox cb_seven_Afternoon; + + @Override + public void setTitle() { + top_title.setText("门诊时间设置"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_clinic_date_select); + Button bt_ok = (Button) view.findViewById(R.id.bt_ok); + cb_one_Morning = (CheckBox) view.findViewById(R.id.cb_one_Morning);//周日,上午 + cb_one_Afternoon = (CheckBox) view.findViewById(R.id.cb_one_Afternoon);//周日,下午 + cb_two_Morning = (CheckBox) view.findViewById(R.id.cb_two_Morning);//周一,上 + cb_two_Afternoon = (CheckBox) view.findViewById(R.id.cb_two_Afternoon);//周一,下 + cb_three_Morning = (CheckBox) view.findViewById(R.id.cb_three_Morning);//周二,上 + cb_three_Afternoon = (CheckBox) view + .findViewById(R.id.cb_three_Afternoon);//周二,下 + cb_four_Morning = (CheckBox) view.findViewById(R.id.cb_four_Morning);//周三,上 + cb_four_Afternoon = (CheckBox) view + .findViewById(R.id.cb_four_Afternoon);//周三,下 + cb_five_Morning = (CheckBox) view.findViewById(R.id.cb_five_Morning);//周四,上 + cb_five_Afternoon = (CheckBox) view + .findViewById(R.id.cb_five_Afternoon);//周四,下 + cb_six_Morning = (CheckBox) view.findViewById(R.id.cb_six_Morning);//周五,上 + cb_six_Afternoon = (CheckBox) view.findViewById(R.id.cb_six_Afternoon);//周五,下 + cb_seven_Morning = (CheckBox) view.findViewById(R.id.cb_seven_Morning);//周六,上 + cb_seven_Afternoon = (CheckBox) view + .findViewById(R.id.cb_seven_Afternoon);//周六,下 + + bt_ok.setOnClickListener(this); + + initData(); + + return view; + } + + /** + * 初始化数据,并回显之前数据 initData + * + * void + */ + private void initData() { +// 取出传值 + String week = getIntent().getStringExtra("week"); + String dateTime = getIntent().getStringExtra("dateTime"); + String[] weeks = week.split(","); + String[] date = dateTime.split(","); + //循坏取出回显数据 + if (date != null && date.length > 0 && weeks != null + && weeks.length > 0 && weeks.length == date.length) { + for (int i = 0; i < date.length; i++) { + if (!TextUtils.isEmpty(date[i])) { + LogUtil.i("date=" + date[i] + "=i==" + i); + switch (Integer.parseInt(weeks[i])) { + case 1: + if ("0".equals(date[i])) { + cb_one_Morning.setChecked(true); + cb_one_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_one_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_one_Afternoon.setChecked(true); + } + break; + case 2: + if ("0".equals(date[i])) { + cb_two_Morning.setChecked(true); + cb_two_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_two_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_two_Afternoon.setChecked(true); + } + break; + case 3: + if ("0".equals(date[i])) { + cb_three_Morning.setChecked(true); + cb_three_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_three_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_three_Afternoon.setChecked(true); + } + break; + case 4: + if ("0".equals(date[i])) { + cb_four_Morning.setChecked(true); + cb_four_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_four_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_four_Afternoon.setChecked(true); + } + break; + case 5: + if ("0".equals(date[i])) { + cb_five_Morning.setChecked(true); + cb_five_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_five_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_five_Afternoon.setChecked(true); + } + break; + case 6: + if ("0".equals(date[i])) { + cb_six_Morning.setChecked(true); + cb_six_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_six_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_six_Afternoon.setChecked(true); + } + break; + case 7: + if ("0".equals(date[i])) { + cb_seven_Morning.setChecked(true); + cb_seven_Afternoon.setChecked(true); + } else if ("1".equals(date[i])) { + cb_seven_Morning.setChecked(true); + } else if ("2".equals(date[i])) { + cb_seven_Afternoon.setChecked(true); + } + break; + } + } + } + } + + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.bt_ok: + selectDate(); + break; + + default: + break; + } + } + + /** + * 提交选着的时间到上个页面 selectDate + * + * void + */ + private void selectDate() { + String[] date = new String[7];// 上下午 + String[] dates = new String[7];// 回显上下午 + String[] week = new String[7];// 周几 + String[] weeks = new String[7];// 回显的周几 + String DateTime = ""; + String Week = ""; + String WeekDate = ""; + if (cb_one_Morning.isChecked()) {// 0.全天 1.上午 2.下午 + date[0] = "1" + ","; + dates[0] = "上午"; + } + if (cb_one_Afternoon.isChecked()) { + date[0] = "2" + ","; + dates[0] = "下午"; + } + if (cb_one_Morning.isChecked() && cb_one_Afternoon.isChecked()) { + date[0] = "0" + ","; + dates[0] = "全天"; + } + if (cb_two_Morning.isChecked()) { + date[1] = "1" + ","; + dates[1] = "上午"; + } + if (cb_two_Afternoon.isChecked()) { + date[1] = "2" + ","; + dates[1] = "下午"; + } + if (cb_two_Morning.isChecked() && cb_two_Afternoon.isChecked()) { + date[1] = "0" + ","; + dates[1] = "全天"; + } + if (cb_three_Morning.isChecked()) { + date[2] = "1" + ","; + dates[2] = "上午"; + } + if (cb_three_Afternoon.isChecked()) { + date[2] = "2" + ","; + dates[2] = "下午"; + } + if (cb_three_Morning.isChecked() && cb_three_Afternoon.isChecked()) { + date[2] = "0" + ","; + dates[2] = "全天"; + } + if (cb_four_Morning.isChecked()) { + date[3] = "1" + ","; + dates[3] = "上午"; + } + if (cb_four_Afternoon.isChecked()) { + date[3] = "2" + ","; + dates[3] = "下午"; + } + if (cb_four_Morning.isChecked() && cb_four_Afternoon.isChecked()) { + date[3] = "0" + ","; + dates[3] = "全天"; + } + if (cb_five_Morning.isChecked()) { + date[4] = "1" + ","; + dates[4] = "上午"; + } + if (cb_five_Afternoon.isChecked()) { + date[4] = "2" + ","; + dates[4] = "下午"; + } + if (cb_five_Morning.isChecked() && cb_five_Afternoon.isChecked()) { + date[4] = "0" + ","; + dates[4] = "全天"; + } + if (cb_six_Morning.isChecked()) { + date[5] = "1" + ","; + dates[5] = "上午"; + } + if (cb_six_Afternoon.isChecked()) { + date[5] = "2" + ","; + dates[5] = "下午"; + } + if (cb_six_Morning.isChecked() && cb_six_Afternoon.isChecked()) { + date[5] = "0" + ","; + dates[5] = "全天"; + } + if (cb_seven_Morning.isChecked()) { + date[6] = "1"; + dates[6] = "上午"; + } + if (cb_seven_Afternoon.isChecked()) { + date[6] = "2"; + dates[6] = "下午"; + } + if (cb_seven_Morning.isChecked() && cb_seven_Afternoon.isChecked()) { + date[6] = "0"; + dates[6] = "全天"; + } + + for (int i = 0; i < date.length; i++) { + if (!TextUtils.isEmpty(date[i])) { + DateTime = DateTime + date[i]; + week[i] = i + 1 + ","; + String w = ""; + switch (i) { + case 0: + w = "星期日 "; + break; + case 1: + w = "星期一 "; + break; + case 2: + w = "星期二 "; + break; + case 3: + w = "星期三 "; + break; + case 4: + w = "星期四 "; + break; + case 5: + w = "星期五 "; + break; + case 6: + w = "星期六 "; + break; + } + weeks[i] = w; + } + } + for (int i = 0; i < week.length; i++) { + if (!TextUtils.isEmpty(week[i])) { + Week = Week + week[i]; + } + } + for (int i = 0; i < weeks.length; i++) { + if (!TextUtils.isEmpty(weeks[i])) { + WeekDate = WeekDate + weeks[i] + dates[i] + ","; + + } + } + // 没有选择时间 + if (TextUtils.isEmpty(DateTime) && TextUtils.isEmpty(Week)) { + ToastUtil.showToast("请选择服务时间"); + return; + } + + LogUtil.i("Week==" + Week + "==DateTime==" + DateTime + "==WeekDate==" + + WeekDate); + + Intent intent = getIntent(); + intent.putExtra("Week", Week); + intent.putExtra("DateTime", DateTime); + intent.putExtra("WeekDate", WeekDate); + setResult(Activity.RESULT_OK, intent); + + // SharePrefUtil.saveObj(ct, "date", date); + finish(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateTimeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateTimeActivity.java new file mode 100644 index 0000000..01b4c28 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectDateTimeActivity.java @@ -0,0 +1,358 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.GridView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-服务设置-电话咨询-咨询时间设置 + */ +public class SelectDateTimeActivity extends BaseActivity implements + OnItemClickListener { + + private TextView tv_date; + //时间点的数组 + private String[] stringArrays; + private List dataList; + + @Override + public void setTitle() { + top_title.setText("咨询时间设置"); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_date_time_select); + tv_date = (TextView) view.findViewById(R.id.tv_date);//时间 + bt_left = (Button) view.findViewById(R.id.bt_left);//回退 + bt_right = (Button) view.findViewById(R.id.bt_right);//前进 + Button bt_ok = (Button) view.findViewById(R.id.bt_ok);//确认 + gv_time = (GridView) view.findViewById(R.id.gv_time);//展示选择时间段 + bt_left.setOnClickListener(this); + bt_right.setOnClickListener(this); + bt_ok.setOnClickListener(this); + gv_time.setOnItemClickListener(this); + + initData(); + + return view; + } + + /** + * 初始化时间点选择,并回显 + * initData + * + * void + */ + private void initData() { + //从时间工具取出当前日期以后的7天日期 + dataList = DateUtil.getDataList(); + //设置为当前日期 + tv_date.setText(dataList.get(0).toString().substring(1)); + + //时间点初始化 + stringArrays = getResources().getStringArray(R.array.date_time); + intent = getIntent(); + String callWeek = intent.getStringExtra("callWeek"); + String startDate = intent.getStringExtra("startDate"); + +// 返回的结果类似如下,进行解析 +// callWeek=6,7,1,2,3,4,7,7,7,4, +// startDate= +// 8:008:009:0020:00; +// 13:00; +// 18:00; +// 9:00; + //初始化选中位置二位数组 + for (int j = 0; j < 7; j++) { + for (int i = 0; i < stringArrays.length -1; i++) { + position[j][i] = -1; + } + } + + //取出周几 + if (!TextUtils.isEmpty(callWeek)) { + callWeekArrs = callWeek.split(","); + /*for (int i = 0; i < callWeekArrs.length; i++) { + }*/ + } + //取出时间段 + if (!TextUtils.isEmpty(startDate)) { + startDateArrs = startDate.split(";"); + /*for (int i = 0; i < startDateArrs.length; i++) { + + }*/ + } + + if (callWeekArrs != null && callWeekArrs.length > 0) {//不为空 + //回显数据,三层循坏 + for (int i = 0; i < callWeekArrs.length; i++) { + String week = callWeekArrs[i]; + for (int k = 0; k < dataList.size(); k++) { + String week1 = dataList.get(k).toString().substring(0,1); + if (week.equals(week1)) { + for (int j = 0; j < stringArrays.length -1; j++) { + if (startDateArrs != null && startDateArrs.length > 0) {//不为空 + if (startDateArrs[i].contains("#" + stringArrays[j])) { + position[k][j] = j; +// continue; + } +// for (String time : startDateArrs) { +// if (time.equals(stringArrays[j])) { +// position[k][j] = j; +// } +// } + } + } + } + } + } + } + //填充数据 + adapter = new MyAdapter(0); + gv_time.setAdapter(adapter); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private class MyAdapter extends BaseAdapter { + + // 用来控制CheckBox的选中状况 + private HashMap isSelected; + public MyAdapter(int s) { + isSelected = new HashMap(); + // 初始化数据 + initDate(s); + } + + // 初始化isSelected的数据 ,要注意根据位置的二维数组动态初始化选中位置 + private void initDate(int s) { + for (int i = 0; i < stringArrays.length-1; i++) { + getIsSelected().put(i, false); + if (position[s][i] >= 0) { + getIsSelected().put(position[s][i], true); + } + } + } + + @Override + public int getCount() { + return stringArrays.length - 1; + } + + @Override + public Object getItem(int position) { + return null; + } + + @Override + public long getItemId(int position) { + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder = null; + if (convertView == null) { + // 获得ViewHolder对象 + holder = new ViewHolder(); + // 导入布局并赋值给convertview + convertView = View.inflate(ct, R.layout.item_date_time, null); + holder.cb = (CheckBox) convertView.findViewById(R.id.cb_list_title); + // 为view设置标签 + convertView.setTag(holder); + } else { + // 取出holder + holder = (ViewHolder) convertView.getTag(); + } + + holder.cb.setText(stringArrays[position]); + + // 根据isSelected来设置checkbox的选中状况 + holder.cb.setChecked(getIsSelected().get(position)); + + return convertView; + } + + public HashMap getIsSelected() { + return isSelected; + } + + + } + + public static class ViewHolder { + CheckBox cb; + } + + private int s = 0; + private Button bt_left; + private Button bt_right; + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.bt_left: +// 往上移动日期 + dateRemove(); + break; + case R.id.bt_right: + //往下移动日期 + dateAdd(); + break; + case R.id.bt_ok: + check(s); + //提交时间选择 + selectDate(); + break; + case R.id.top_back_layout: + onBackPressed(); + break; + + default: + break; + } + } + + @Override + public void onBackPressed() { + check(s); + //提交时间选择 +// selectDate(); + super.onBackPressed(); + } + + //向后移动日期 + public void dateRemove() { + check(s); + s--; + if (s == 0) { + bt_left.setEnabled(false); + } + bt_right.setEnabled(true); + tv_date.setText(dataList.get(s).toString().substring(1)); + + adapter = new MyAdapter(s); + gv_time.setAdapter(adapter); + } + + //向前移动日期 + public void dateAdd() { + check(s); + s++; + if (s == dataList.size() - 1) { + bt_right.setEnabled(false); + } + bt_left.setEnabled(true); + tv_date.setText(dataList.get(s).toString().substring(1)); + + adapter = new MyAdapter(s); + gv_time.setAdapter(adapter); + } + + //保存前一个的选中的位置到二位数组 + public void check(int s){ + // 遍历 + for (int i = 0; i < stringArrays.length -1; i++) { + if (adapter.getIsSelected().get(i)) { +// adapter.getIsSelected().put(i, false); + position[s][i] = i; + }else{ + //防止受i=0的影响,故给初始化一样,未选中都赋予-1 + position[s][i] = -1; + } + } + } + + + int[][] position = new int[7][29];//选中的位置 + String[] DateArr = new String[7];//这个是为了返回后再进来回显数据的 + String[] Date = new String[7];//时间段 + String[] dates = new String[7];//回显时间段 + String[] Week = new String[7];//周几 + String[] weeks = new String[7];//回显的周几 + private GridView gv_time; + private MyAdapter adapter; + private String startTime = ""; + private String endTime = ""; + private String[] callWeekArrs; + private String[] startDateArrs; + private Intent intent; + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + if (arg2 == stringArrays.length -1) { + return; + } + + // 取得ViewHolder对象,这样就省去了通过层层的findViewById去实例化我们需要的cb实例的步骤 + ViewHolder holder = (ViewHolder) arg1.getTag(); + // 改变CheckBox的状态 + holder.cb.toggle(); + + // 将CheckBox的选中状况记录下来 + adapter.getIsSelected().put(arg2, holder.cb.isChecked()); + + } + + private void selectDate() { + //点击确定按钮,把存的选中位置取出,中共一周7天的每天的时间段 + for (int j = 0; j < 7; j++) { + DateArr[j] = ""; + Date[j] = ""; + weeks[j] = ""; + Week[j] = ""; + for (int i = 0; i < stringArrays.length -1; i++) { + if (position[j][i] >= 0) { + startTime = stringArrays[i].toString(); + endTime = stringArrays[i+1].toString(); + Date[j] += startTime + "-" + endTime + ","; + weeks[j] = dataList.get(j).toString().substring(7); + Week[j] = dataList.get(j).toString().substring(0,1); + DateArr[j] += "#" + startTime; + } else { + + } + } + } + if (intent == null) { + intent = getIntent(); + } + intent.putExtra("startDates", Date);//日期 + intent.putExtra("callWeeks", Week);//周日 + intent.putExtra("weeks", weeks);//汉子回显周日 + intent.putExtra("DateArr", DateArr);//为了返回再回显 + this.setResult(Activity.RESULT_OK, intent); +// this.finish(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectedPhotoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectedPhotoActivity.java new file mode 100644 index 0000000..d7e4157 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SelectedPhotoActivity.java @@ -0,0 +1,453 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.graphics.Bitmap; +import android.graphics.Bitmap.CompressFormat; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileUtils; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 选择图片上传 + * 选择上传图片还是拍照 + */ + +public class SelectedPhotoActivity extends BaseActivity implements + OnClickListener { + + // private Button takePhotoBtn;// 拍照 + // private Button pickPhotoBtn;// 从相册中取 + // private Button cancelBtn;// 取消 + + public static final int SELECT_PIC_BY_TACK_PHOTO = 1; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 2; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 3;// 照相 + public static final String KEY_PHOTO_PATH = "photo_path";// 从Intent获取图片path的KEY + public static final String KEY_PHOTO_BASE64 = "photo_base64";// 从Intent获取图片base64编码的KEY + + private Intent lastIntent; + private Uri photoUri;// 图片路径 + // private Bitmap bitmap; + + private SharedPreferences sp; + private Editor editor; + private boolean isConstraint = false; + private static final String CROP_IMAGE_FILE_NAME = "gdxz_crop.jpg"; + private String mExtStorDir; + private Uri mUriPath; + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + editor.putString("photoUri", photoUri + ""); + editor.commit(); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + + + + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(SelectedPhotoActivity.this,getPackageName() + ".fileprovider", + photoFile); +// SharePrefUtil.saveString(this, "photoUri", +// photoUri + ""); + editor.putString("photoUri", photoUri + ""); + editor.commit(); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /*** + * 从相册中取图片 + */ + private void pickPhoto() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(SelectedPhotoActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(); + intent.setType("image/*"); +// intent.setAction(Intent.ACTION_GET_CONTENT); + intent.setAction(Intent.ACTION_PICK); + intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(SelectedPhotoActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(SelectedPhotoActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(); + intent.setType("image/*"); +// intent.setAction(Intent.ACTION_GET_CONTENT); + intent.setAction(Intent.ACTION_PICK); + intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(); + intent.setType("image/*"); +// intent.setAction(Intent.ACTION_GET_CONTENT); + intent.setAction(Intent.ACTION_PICK); + intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + } + + } + + /** + * 执行返回结果 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + if (resultCode == Activity.RESULT_OK) { + + doPhoto(requestCode, data); + } + + super.onActivityResult(requestCode, resultCode, data); + } + /* + * 获取图片 + */ + @SuppressLint("SimpleDateFormat") + private void doPhoto(int requestCode, Intent data) { + try { + if (requestCode == SELECT_PIC_BY_PICK_PHOTO) // 从相册取图片,有些手机有异常情况,请注意 + { + if (data == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + photoUri = data.getData(); + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + } + if (requestCode == SELECT_PIC_BY_TACK_PHOTO) { + + photoUri = Uri.parse(sp.getString("photoUri", "")); + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + } + if (requestCode == PHOTO_RESOULT) { + if (data != null) { + Bitmap bm; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + bm = BitmapFactory.decodeStream(getContentResolver() + .openInputStream(FileUtils.uri)); + + } + else + { + bm = BitmapFactory.decodeStream(getContentResolver() + .openInputStream(mUriPath)); + + } +// Bitmap bm = BitmapFactory.decodeStream(getContentResolver() +// .openInputStream(mUriPath)); + String userimg = Base64Util.BitmaptoBase64Xiongpai(bm); + + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + File temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + lastIntent.putExtra(KEY_PHOTO_PATH, temp.getAbsolutePath()); + lastIntent.putExtra(KEY_PHOTO_BASE64, userimg); + setResult(Activity.RESULT_OK, lastIntent); + finish(); + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + private void cropImage(Uri uri) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) + { + FileUtils.createImageFile(this, true); + } + + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(uri, "image/*"); + intent.putExtra("crop", "true"); + if (!isConstraint) { + // aspectX aspectY 是宽高的比例 + intent.putExtra("aspectX", 1); + intent.putExtra("aspectY", 1); + // outputX outputY 是裁剪图片宽高 + intent.putExtra("outputX", 360); + intent.putExtra("outputY", 360); + } else { + intent.putExtra("aspectX", 3); + intent.putExtra("aspectY", 2); + intent.putExtra("outputX", 450); + intent.putExtra("outputY", 300); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + intent.putExtra(MediaStore.EXTRA_OUTPUT, FileUtils.uri); + } + else + { + String mLinshi = System.currentTimeMillis() + CROP_IMAGE_FILE_NAME; + File mFile = new File(mExtStorDir, mLinshi); + mUriPath = Uri.parse("file://" + mFile.getAbsolutePath()); + intent.putExtra(MediaStore.EXTRA_OUTPUT,mUriPath); + } + + intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); + intent.putExtra("return-data", false); + startActivityForResult(intent, PHOTO_RESOULT); + + } + /** + * 剪切图片 + */ +// private void cropImage(Uri uri) { +// Intent intent = new Intent("com.android.camera.action.CROP"); +// intent.setDataAndType(uri, "image/*"); +// intent.putExtra("crop", "true");// crop=true是设置在开启的Intent中设置显示的VIEW可裁剪 +// if (!isConstraint) { +// // aspectX aspectY 是宽高的比例 +// intent.putExtra("aspectX", 1); +// intent.putExtra("aspectY", 1); +// // outputX outputY 是裁剪图片宽高 +// intent.putExtra("outputX", 360); +// intent.putExtra("outputY", 360); +// } else { +// intent.putExtra("aspectX", 3); +// intent.putExtra("aspectY", 2); +// intent.putExtra("outputX", 450); +// intent.putExtra("outputY", 300); +// } +// String mLinshi = System.currentTimeMillis() + CROP_IMAGE_FILE_NAME; +// File mFile = new File(mExtStorDir, mLinshi); +// mUriPath = Uri.parse("file://" + mFile.getAbsolutePath()); +// intent.putExtra(MediaStore.EXTRA_OUTPUT, mUriPath); +// intent.putExtra("outputFormat", CompressFormat.JPEG.toString()); +// intent.putExtra("return-data", false); +// startActivityForResult(intent, PHOTO_RESOULT); +// +// } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_selected_photo2); + // takePhotoBtn = (Button) view.findViewById(R.id.btn_take_photo); + // pickPhotoBtn = (Button) view.findViewById(R.id.btn_pick_photo); + // cancelBtn = (Button) view.findViewById(R.id.btn_cancel); + TextView btn_camera = (TextView) view.findViewById(R.id.btn_camera); + TextView btn_img = (TextView) view.findViewById(R.id.btn_img); + TextView btn_cancle = (TextView) view.findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) view.findViewById(R.id.imageView); + + // takePhotoBtn.setOnClickListener(this); + // pickPhotoBtn.setOnClickListener(this); + // cancelBtn.setOnClickListener(this); + + btn_camera.setOnClickListener(this); + btn_img.setOnClickListener(this); + btn_cancle.setOnClickListener(this); + imageView.setOnClickListener(this); +// mExtStorDir = Environment.getExternalStorageDirectory().toString(); + mExtStorDir = UIUtils.getContext().getExternalFilesDir("").toString(); + sp = getSharedPreferences("temp_photo", MODE_PRIVATE); + editor = sp.edit(); + lastIntent = getIntent(); + isConstraint = lastIntent.getBooleanExtra("isConstraint", false); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub +// layout_top.setVisibility(View.GONE); + top_title.setText("个人资料"); +// top_back_layout.setVisibility(View.GONE); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + + // case R.id.btn_take_photo: + // takePhoto(); + // break; + // + // case R.id.btn_pick_photo: + // pickPhoto(); + // break; + // + // case R.id.btn_cancel: + // finish(); + // break; + case R.id.btn_camera://拍照 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11(); + } else { + EasyWindow.with(SelectedPhotoActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto(); + } + + + + break; + + case R.id.btn_img://相册 + pickPhoto(); + break; + + case R.id.imageView: + finish(); + // 进入退出动画 + overridePendingTransition(android.R.anim.fade_in, + android.R.anim.fade_out); + break; + case R.id.btn_cancle: + finish(); + // 进入退出动画 + // overridePendingTransition(R.anim.timepicker_anim_enter_bottom,R.anim.timepicker_anim_exit_bottom); + break; + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgListActivity.java new file mode 100644 index 0000000..4532727 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgListActivity.java @@ -0,0 +1,691 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ListGroupSendMsgBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/12/6. + */ + +public class SendGroupMsgListActivity extends BaseActivity implements OnCallBackFromNet { + + private PullToRefreshListView lv_exchange; + private TextView tv_sendgroupmsg; + private int page = 1; + public static final int LISTGROUPSENDMSG = 200; + public static final int DELGROUPSENDMSG = 201; + private static int REQUESTCODE_OK = 0; + private String Patientuuid; + private String name; + private PullToRefreshListView ptrLv; + private List data = new ArrayList<>(); + private SendGroupMsgAdapter mAdapter; + private LinearLayout ll_empty; + private int position1; + private LinearLayout ll_loading; + private CustomProgressDialog pd; + private ViewPager mPager; + private RelativeLayout rl_addcase_bigphoto; + + @Override + public void setTitle() { + top_title.setText("群发消息"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_sendgroupmsglist_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_sendgroupmsglist); + } + + initView(view); + + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("群发消息"); + page = 1; + initData(); + } + + private void initData() { + if (pd==null){ + pd = new CustomProgressDialog(this, "请稍候"); + } + pd.show(); + Map map = new HashMap<>(); + map.put("page",page+""); + sendJsonPostParamtoNetSignMD5(Url.listGroupSendMsg,map,LISTGROUPSENDMSG,this); + } + + private void initView(View view) { + lv_exchange = view.findViewById(R.id.lv_exchange); + tv_sendgroupmsg = view.findViewById(R.id.tv_sendgroupmsg); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_exchange); + tv_sendgroupmsg.setOnClickListener(this); + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + mPager = (ViewPager) view.findViewById(R.id.pager); + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + if (pd==null){ + pd = new CustomProgressDialog(this, "请稍候"); + } + ptrLv.setEmptyView(ll_empty);//空布局 + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + initData(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + initData(); + + } + }); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back) { + finish(); + } else if (id == R.id.tv_sendgroupmsg) { + delVisit(); + } + } + public void delVisit() { + final ECListDialog dialog = new ECListDialog(ct, new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(ct,GroupChatSelectPatientActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, REQUESTCODE_OK); + dialog.dismiss(); + } else { + + Intent intent = new Intent(ct,GroupSelectParentActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, REQUESTCODE_OK); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(ct.getResources().getColor(R.color.top_title)); + dialog.show(); + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("resultJson = "+resultJson); + pd.dismiss(); + switch (resultCode){ + case LISTGROUPSENDMSG: + ListGroupSendMsgBean bean = null; + try { + bean = GsonTools.fromGsonToBean(resultJson, ListGroupSendMsgBean.class); + Log.d("gdxzzz",resultJson+" "+"resultJson"); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null || bean.getData() == null || bean.getData().getList().size() == 0) { + if (!"200".equals(bean.getCode())) { + ToastUtil.showToast(bean.getMessage()); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + ll_empty.setVisibility(View.VISIBLE); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + ll_empty.setVisibility(View.VISIBLE); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.getData() == null || bean.getData().getList().isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.getData().getList()); + } + } else { + data.addAll(bean.getData().getList()); + } + // 更新 + if (mAdapter == null) { + mAdapter = new SendGroupMsgAdapter(data); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.getData().getList() == null || bean.getData().getList().isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多消息了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + ptrLv.getRefreshableView().setSelection(0); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + break; + case DELGROUPSENDMSG: + try { + JSONObject jsonObject = new JSONObject(resultJson); + String code = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(code)){ + data.remove(position1); + mAdapter.notifyDataSetChanged(); + } + if(data==null||data.size()==0) + { + page = 1; + initData(); + } + ToastUtil.showMessage(message); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + } + + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == REQUESTCODE_OK + && resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + return; + } + Patientuuid = data.getStringExtra("uuid"); + name = data.getStringExtra("name"); + + CCPAppManager.startChattingAction(SendGroupMsgListActivity.this , Patientuuid , name, "2,1,2,0", Patientuuid, 0); + } + + super.onActivityResult(requestCode, resultCode, data); + } + + + class SendGroupMsgAdapter extends BaseAdapter { + + private List data; + public SendGroupMsgAdapter(List data) { + this.data = data; + } + + @Override + public int getCount() { +// if (data.size()>0){ +// for (int i = data.size()-1;i>=0;i--){ +// ListGroupSendMsgBean.DataBean.ListBean listBean = data.get(i); +// if (StringUtil.isEmpty(listBean.getRealname())||StringUtil.isEmpty(listBean.getMsg_content())||StringUtil.isEmpty(listBean.getMsg_send_date())||StringUtil.isEmpty(listBean.getUuid())||StringUtil.isEmpty(listBean.getPatient_uuid())||listBean.getMsg_type()==0){ +// data.remove(i); +// } +// } +// } + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final ViewHolder holder; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_sendgroupmsg_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_sendgroupmsg); + } + + holder = new ViewHolder(); + holder.tv_time = convertView.findViewById(R.id.tv_time); + holder.tv_sendto = convertView.findViewById(R.id.tv_sendto); + holder.tv_sendtoname = convertView.findViewById(R.id.tv_sendtoname); + holder.tv_text = convertView.findViewById(R.id.tv_text); + holder.tv_type = convertView.findViewById(R.id.tv_type); + holder.iv_delete = convertView.findViewById(R.id.iv_delete); + holder.iv_img = convertView.findViewById(R.id.iv_img); + holder.rl_richtext = convertView.findViewById(R.id.rl_richtext); + holder.tv_richtitle = convertView.findViewById(R.id.tv_richtitle); + holder.tv_summary = convertView.findViewById(R.id.tv_summary); + holder.iv_img_rich = convertView.findViewById(R.id.iv_img_rich); + + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + final ListGroupSendMsgBean.DataBean.ListBean listBean = data.get(position); + holder.tv_time.setText(listBean.getMsg_send_date()); + String nickname="(null)"; + if(StringUtil.isEmpty(listBean.getRealname())) + { + String patient_uuid = listBean.getPatient_uuid(); + if (patient_uuid!=null&&!patient_uuid.contains(",")){ + String[] split = listBean.getPatient_uuid().split(",");//listBean.getRealname()报null + holder.tv_sendto.setText(split.length+"位患者:"); + holder.tv_sendtoname.setText("(null)"); + } + else + { + holder.tv_sendto.setText("1位患者:"); + holder.tv_sendtoname.setText("(null)"); + } + } + else + { + String[] split = listBean.getRealname().split(",");//listBean.getRealname()报null + holder.tv_sendto.setText(split.length+"位患者:"); + nickname = listBean.getRealname().replaceAll(",", ","); + holder.tv_sendtoname.setText(nickname); + } + + + if (listBean.getMsg_type()==1){ + holder.tv_text.setVisibility(View.VISIBLE); + holder.iv_img.setVisibility(View.GONE); + holder.rl_richtext.setVisibility(View.GONE); + holder.tv_text.setText(listBean.getMsg_content()); + }else if (listBean.getMsg_type()==2){ + holder.iv_img.setVisibility(View.VISIBLE); + holder.tv_text.setVisibility(View.GONE); + holder.rl_richtext.setVisibility(View.GONE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + listBean.getMsg_content(), + holder.iv_img, + ImageOptions + .getImageOptions(R.drawable.default_news_iv)); + }else if ( listBean.getMsg_type()==3|| listBean.getMsg_type()==5|| listBean.getMsg_type()==6|| + listBean.getMsg_type()==7||listBean.getMsg_type()==8){//图文科普 + holder.iv_img.setVisibility(View.GONE); + holder.tv_text.setVisibility(View.GONE); + holder.rl_richtext.setVisibility(View.VISIBLE); + String msg_content = listBean.getMsg_content(); + String s = msg_content.replaceAll("\\\\", ""); + String tmp_uuid=""; + String topic =""; + LogUtil.i("s = "+s); + String path = null; + try { + JSONObject jsonObject = new JSONObject(s); + path = jsonObject.optString("path"); + String imgPath = jsonObject.optString("imgPath"); + topic = jsonObject.optString("topic"); + tmp_uuid=jsonObject.optString("UUID"); + holder.tv_richtitle.setText(topic); + holder.tv_summary.setText(path); + if ( listBean.getMsg_type()==7||listBean.getMsg_type()==8||path.contains("outpatient_details")||path.contains("wxPatient/index.htm#/outPatient")||path.contains(Url.getNewWa)){ + ImageLoader.getInstance().displayImage(imgPath, + holder.iv_img_rich, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + }else { + holder.tv_summary.setText(Url.urlHtml+path); + ImageLoader.getInstance().displayImage( + Url.urlHtml + imgPath, + holder.iv_img_rich, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + final String finalPath = path; + String finalTmp_uuid = tmp_uuid; + String finalTopic = topic; + holder.rl_richtext.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(listBean.getMsg_type()==7||listBean.getMsg_type()==8) + { + IWXAPI api = WXAPIFactory.createWXAPI(SendGroupMsgListActivity.this, Constant.WeId); + WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); + req.userName = "gh_9cd2fd72eb57"; // 填小程序原始id + req.path = "/Pages/yishi/index/index"; //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 +// req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW;// 可选打开 开发版,体验版和正式版 + api.sendReq(req); + } + else + { + Intent intent = new Intent(SendGroupMsgListActivity.this, NewsDetailActivity.class); + if(finalPath.contains(Url.getNewWa)) + { + intent.putExtra("url", finalPath); + intent.putExtra("title", holder.tv_richtitle.getText()); + + } + else + { + if (finalPath.contains("outpatient_details")||finalPath.contains("wxPatient/index.htm#/outPatient")){ + intent.putExtra("url", finalPath); + intent.putExtra("title", "门诊详情"); + }else { + intent.putExtra("kepuuuid", finalTmp_uuid); + intent.putExtra("url", Url.urlHtml + finalPath); + intent.putExtra("title", "患教详情"); + intent.putExtra("newsTitle", finalTopic); + intent.putExtra("need_inside_share", "no"); + } + + } + intent.putExtra("flag", 9); + SendGroupMsgListActivity.this.startActivity(intent); + } + + } + }); + }else if (listBean.getMsg_type()==4){//视频科普 + holder.iv_img.setVisibility(View.GONE); + holder.tv_text.setVisibility(View.GONE); + holder.rl_richtext.setVisibility(View.VISIBLE); + String tmp_uuid=""; + String msg_content = listBean.getMsg_content(); + String s = msg_content.replaceAll("\\\\", ""); + LogUtil.i("s = "+s); + String path = null; + try { + JSONObject jsonObject = new JSONObject(s); + path = jsonObject.optString("path"); + String imgPath = jsonObject.optString("imgpath"); + String topic = jsonObject.optString("name"); + tmp_uuid=jsonObject.optString("uuid"); + holder.tv_richtitle.setText(topic); + holder.tv_summary.setText(Url.urlHtml+path); + ImageLoader.getInstance().displayImage( + Url.urlHtml + imgPath, + holder.iv_img_rich, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } catch (JSONException e) { + e.printStackTrace(); + } + + final String finalPath = path; + String tmp_uuids = tmp_uuid; + holder.rl_richtext.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(SendGroupMsgListActivity.this, VideoDetilActivity.class); + intent.putExtra("url", Url.urlHtml + finalPath); + intent.putExtra("uuid", tmp_uuids); + intent.putExtra("title", "患教详情"); + intent.putExtra("flag", 9); + SendGroupMsgListActivity.this.startActivity(intent); + } + }); + } + + holder.iv_delete.setOnClickListener(new View.OnClickListener() { + + + @Override + public void onClick(View v) { + position1 = position; + delGroupSendMsg(listBean.getUuid()); + } + }); + String finalNickname = nickname; + holder.tv_type.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String patient_uuid = listBean.getPatient_uuid(); +// Log.d("gdxzname","patientUuid9 "+listBean.getPatient_uuid()); +// Log.d("gdxzname","patientUuid10 "+patient_uuid); + if (patient_uuid==null||!patient_uuid.contains(",")){ + patient_uuid = patient_uuid+","; + } + CCPAppManager.startChattingAction(SendGroupMsgListActivity.this ,patient_uuid , finalNickname, "2,1,2,0", patient_uuid, 0); + } + }); + holder.iv_img.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + PagerSetAdapter(Url.urlHtml+listBean.getMsg_content()); + } + }); + holder.tv_sendtoname.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int ellipsisCount = holder.tv_sendtoname.getLayout().getEllipsisCount(holder.tv_sendtoname.getLineCount() - 1); + if (ellipsisCount>0){ + Intent intent = new Intent(SendGroupMsgListActivity.this,SendGroupMsgPatientNameActicity.class); + intent.putExtra("name",listBean.getRealname()); + startActivity(intent); + } + } + }); + return convertView; + } + + private void delGroupSendMsg(final String uuid) { + LayoutInflater inflater = LayoutInflater.from(SendGroupMsgListActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(SendGroupMsgListActivity.this).create(); + Button btn_sure = layout.findViewById(R.id.btn_sure); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_infotitle1 = layout.findViewById(R.id.tv_infotitle1); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("删除提示"); + tv_infotitle1.setText("您确定删除此条信息吗?"); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map map = new HashMap<>(); + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.delGroupSendMsg,map,DELGROUPSENDMSG,SendGroupMsgListActivity.this); + dialog.dismiss(); + } + }); + + + } + + class ViewHolder { + TextView tv_time,tv_sendto,tv_sendtoname,tv_text,tv_type,tv_richtitle,tv_summary; + View iv_delete; + ImageView iv_img,iv_img_rich; + RelativeLayout rl_richtext; + + } + } + + private void PagerSetAdapter(final String msg_content) { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + + return 1; + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(SendGroupMsgListActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + view.setImageBitmap(ImageLoader.getInstance().loadImageSync(msg_content)); + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgPatientNameActicity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgPatientNameActicity.java new file mode 100644 index 0000000..80dba9d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendGroupMsgPatientNameActicity.java @@ -0,0 +1,55 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/12/10. + */ + +public class SendGroupMsgPatientNameActicity extends BaseActivity { + @Override + public void setTitle() { + top_title.setText("群发消息患者"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_sendgrouppatientname_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_sendgrouppatientname); + } + TextView tv_name = view.findViewById(R.id.tv_name); + String name = getIntent().getStringExtra("name"); + tv_name.setText(name.replaceAll(",", ",")); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendMindActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendMindActivity.java new file mode 100644 index 0000000..f569776 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SendMindActivity.java @@ -0,0 +1,547 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.cancelBackground; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.lucencyBackground; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MindAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ExpertMindList; +import cn.shangyu.gdxzExpert.bean.ExpertMindList.mindList.expertMind; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyEditext; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class SendMindActivity extends BaseActivity implements + OnCallBackFromNet, OnCheckedChangeListener { + private View mTopView; + private View view; + private PullToRefreshListView mLv_PL; + private Button mBt_send; + private SendMindActivity mActivity; + private RadioGroup mRg_money; + private int pay_money = 5; + // private int pay_money = 5; + private MyEditext mEt_message; + private MindAdapter mAdapter; + private int page = 1; + private TextView mTv_payMoney; + private List beanlists = new ArrayList(); + private String message = null; + private Button issure; + private RadioButton mCb_send5; + private int xinyi_price = 0; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("表达暖暖心意"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_send_mind_big); + mTopView = UIUtils.inflate(R.layout.top_send_mind_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_send_mind); + mTopView = UIUtils.inflate(R.layout.top_send_mind); + } + + mActivity = this; + mLv_PL = (PullToRefreshListView) view.findViewById(R.id.lv_get_mind); + mLv_PL.getRefreshableView().addHeaderView(mTopView); + mBt_send = (Button) mTopView.findViewById(R.id.bt_send_mind); + mRg_money = (RadioGroup) mTopView.findViewById(R.id.rg_send_mind); + mEt_message = (MyEditext) mTopView.findViewById(R.id.et_send_mind_text); + mTv_payMoney = (TextView) mTopView + .findViewById(R.id.tv_send_mind_money); + mCb_send5 = (RadioButton) mTopView.findViewById(R.id.rb_send_mind_5); + initData(); + mRg_money.setOnCheckedChangeListener(this); + mBt_send.setOnClickListener(this); + mLv_PL.setMode(Mode.BOTH); + mLv_PL.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + mLv_PL.getRefreshableView().removeHeaderView(mTopView); + mLv_PL.getRefreshableView().addHeaderView(mTopView); + page = 1; + onLoaded(); + getMindsResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getMindsResult(); + } + }); + getxinyiPrice(); + // mAdapter = new MindAdapter(beanlists); + // mLv_PL.getRefreshableView().setAdapter(mAdapter); + getMindsResult(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("表达暖暖心意"); + } + + private void initData() { +// HideIMEUtil.wrap(this);//键盘管理,点击除editText外区域收起键盘 + // TODO Auto-generated method stub + mEt_message.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stubs + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + String count1 = mEt_message.getText().toString().trim(); + if (count1.length() >= 100) { + ToastUtil.showMessage("最多输入一百字"); + } + } + }); +// mEt_message.setOnFocusChangeListener(new View.OnFocusChangeListener() { +// @Override +// public void onFocusChange(View view, boolean hasFocus) { +// if (!hasFocus) { +// // 隐藏软键盘 +// InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); +// imm.hideSoftInputFromWindow(view.getWindowToken(), 0); +// } +// } +// }); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_send_mind) { + message = mEt_message.getText().toString().trim(); + if (StringUtil.isEmpty(message)) { + message = "祝肝胆相照平台越来越好!"; + mEt_message.setText(message); + } + showPopupWindow(getWindow().getDecorView()); +// aaa(); + } + } + + public void getPayResult(String message) { + showProgressDialog("创建订单中"); +// String uuid = SharePrefUtil.getString(ct, Constant.USERID, ""); + Map param = new HashMap(); +// param.put("user_uuid", uuid); + param.put("amount", pay_money + ""); + param.put("message", message); + sendJsonPostParamtoNetSignMD5(Url.getCreateXinyiOrder, param, 101,this); + } + public void getxinyiPrice() { + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(Url.xinyiPrice, param, 103,this); + } + + public void getMindsResult() { + Map param = new HashMap(); + param.put("page", page + ""); + sendJsonPostParamtoNetSignMD5(Url.getAllPingXinYiOrder, param, 102,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("WXEntryActivity",resultCode+" "+resultJson); + switch (resultCode) { + case 103: + try { + JSONObject jsonobj = new JSONObject(resultJson); + String code = jsonobj.getString("code"); + if("200".equals(code)) + { + xinyi_price = jsonobj.getInt("data"); + double Money5 = 5 * xinyi_price; + mTv_payMoney.setText("¥" + String.format("%.2f", Money5 / 100) + "元"); + } + else + { + ToastUtil.showToast(jsonobj.getString("msg")); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 101: + + closeProgressDialog(); + JSONObject jsonobj = null; + String code = null; + + try { + jsonobj = new JSONObject(resultJson); + code = jsonobj.getString("code"); + if("200".equals(code)) + { + Intent intent = new Intent(mActivity, PayActivity.class); + intent.putExtra("money", pay_money * xinyi_price + ""); + intent.putExtra("order_id", jsonobj.getJSONObject("data").getString("trade_no")); + startActivityForResult(intent, 201); + } + else + { + ToastUtil.showToast(jsonobj.getString("msg")); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// PayWechatBean payBean= GsonTools.fromGsonToBean(resultJson, +// PayWechatBean.class); +// if(payBean!=null&&"200".equals(payBean.getCode())) +// { +// Intent intent = new Intent(mActivity, PayActivity.class); +// intent.putExtra("money", pay_money * xinyi_price + ""); +// intent.putExtra("appId", payBean.getData().getAppid()); +// intent.putExtra("partnerId", payBean.getData().getPartnerid()); +// intent.putExtra("prepayId", payBean.getData().getPrepayid()); +// intent.putExtra("packageValue", payBean.getData().getPackage_str()); +// intent.putExtra("nonceStr", payBean.getData().getNoncestr()); +// intent.putExtra("timeStamp",payBean.getData().getTimestamp()); +// intent.putExtra("sign", payBean.getData().getSign()); +// startActivityForResult(intent, 201); +// +//// PayReq request = new PayReq(); +//// request.appId = payBean.getData().getAppid(); +//// request.partnerId = payBean.getData().getPartnerid(); +//// request.prepayId= payBean.getData().getPrepayid(); +//// request.packageValue = payBean.getData().getPackage_str(); +//// request.nonceStr= payBean.getData().getNoncestr(); +//// request.timeStamp= payBean.getData().getTimestamp(); +//// request.sign=payBean.getData().getSign(); +//// api.sendReq(request); +// +// } +// else +// { +// ToastUtil.showToast(payBean.getMessage()); +// } +// if (StringUtil.isEmpty(resultJson)) { +// ToastUtil.showMessage("服务器异常"); +// return; +// } + +// closeProgressDialog(); + + break; + case 102: + processData(resultJson); + break; + default: + break; + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.rb_send_mind_1) { + // mTv_payMoney.setText("¥1元"); + pay_money = 1; + // mTv_payMoney.setText("¥0.01元"); + // pay_money = 1; + double Money = 1 * xinyi_price; + mTv_payMoney + .setText("¥" + String.format("%.2f", Money / 100) + "元"); + } else if (checkedId == R.id.rb_send_mind_2) { + pay_money = 2; + // mTv_payMoney.setText("¥0.02元"); + // pay_money = 2; + double Money2 = 2 * xinyi_price; + mTv_payMoney.setText("¥" + String.format("%.2f", Money2 / 100) + + "元"); + } else if (checkedId == R.id.rb_send_mind_5) { + pay_money = 5; + // mTv_payMoney.setText("¥0.05元"); + // pay_money = 5; + double Money5 = 5 * xinyi_price; + mTv_payMoney.setText("¥" + String.format("%.2f", Money5 / 100) + + "元"); + } else if (checkedId == R.id.rb_send_mind_10) { + pay_money = 10; + // mTv_payMoney.setText("¥0.1元"); + // pay_money = 10; + double Money10 = 10 * xinyi_price; + mTv_payMoney.setText("¥" + String.format("%.2f", Money10 / 100) + + "元"); + } else if (checkedId == R.id.rb_send_mind_50) { + pay_money = 50; + // mTv_payMoney.setText("¥0.5元"); + // pay_money = 50; + double Money50 = 50 * xinyi_price; + mTv_payMoney.setText("¥" + String.format("%.2f", Money50 / 100) + + "元"); + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private ECAlertDialog buildAlert; + + public void aaa() { + + buildAlert = ECAlertDialog.buildAlert(mActivity, "您确定是否送出?", "否", "是", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getPayResult(message); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + private void showPopupWindow(View view) { + lucencyBackground(this); + View contentView = LayoutInflater.from(this) + .inflate(R.layout.common_dialog_generic, null); + // 设置按钮的点击事件 + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + popupWindow.setOutsideTouchable(true); + // 使其聚集获取焦点 + popupWindow.setFocusable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + ((TextView)(contentView.findViewById(R.id.dialog_tv_message))).setText("您确定是否送出?"); + ((TextView)(contentView.findViewById(R.id.dialog_tv_title))).setText("提示"); + contentView.findViewById(R.id.dialog_layout_title).setVisibility(View.VISIBLE); + Button leftBtn = contentView.findViewById(R.id.dilaog_button1); + leftBtn.setText("取消"); + ((ViewGroup.MarginLayoutParams)leftBtn.getLayoutParams()).rightMargin=1; + leftBtn.setVisibility(View.VISIBLE); + Button rightBtn = contentView. findViewById(R.id.dilaog_button3); + ((ViewGroup.MarginLayoutParams)rightBtn.getLayoutParams()).leftMargin=1; + rightBtn.setVisibility(View.VISIBLE); + rightBtn.setText("确定"); + contentView.findViewById(R.id.dialog_layout_button).setVisibility(View.VISIBLE); + leftBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + popupWindow.dismiss(); + cancelBackground(SendMindActivity.this); + } + }); + rightBtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + popupWindow.dismiss(); + cancelBackground(SendMindActivity.this); + getPayResult(message); + } + }); + + popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0); + + } + private void processData(String result) { + // LibraryListBean bean = GsonTools.fromGsonToBean(result, + // LibraryListBean.class); + ExpertMindList bean = null; + try { + bean = GsonTools.fromGsonToBean(result, ExpertMindList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + mAdapter = new MindAdapter(beanlists); + mLv_PL.getRefreshableView().setAdapter(mAdapter); + } + + // // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + if (bean == null || bean.data == null + || bean.data.list == null + || bean.data.list.size() == 0) { +// if (bean != null) { +// xinyi_price = bean.xinyi_price; +// double Money5 = 5 * xinyi_price; +// mTv_payMoney.setText("¥" +// + String.format("%.2f", Money5 / 100) + "元"); +// } + mAdapter = new MindAdapter(beanlists); + mLv_PL.getRefreshableView().setAdapter(mAdapter); + onLoaded(); + setLastUpdateTime(); + return; + + } else { + beanlists.addAll(bean.data.list); + } + } else { + if (bean == null || bean.data == null + || bean.data.list == null + || bean.data.list.size() == 0) { + return; + } + // 加载更多下一页时候e + beanlists.addAll(bean.data.list); + + } + // // 更新数据 + if (mAdapter == null) { + mAdapter = new MindAdapter(beanlists); + mLv_PL.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 +// xinyi_price = bean.xinyi_price; +// double Money5 = 5 * xinyi_price; +// mTv_payMoney.setText("¥" + String.format("%.2f", Money5 / 100) + "元"); + long totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mLv_PL.setMode(Mode.PULL_FROM_START); + + } else { + mLv_PL.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_PL.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + mLv_PL.onRefreshComplete(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + mEt_message.setText("祝肝胆相照平台越来越好!"); + mCb_send5.setChecked(true); + page = 1; + getMindsResult(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingAndHelpActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingAndHelpActivity.java new file mode 100644 index 0000000..7593266 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingAndHelpActivity.java @@ -0,0 +1,964 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.umeng.PushHelper.addUMToken; +import static cn.shangyu.gdxzExpert.utils.Url.checkVersion; + +import android.Manifest; +import android.app.AlertDialog; +import android.app.AppOpsManager; +import android.app.Dialog; +import android.app.NotificationManager; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMAuthListener; +import com.umeng.socialize.UMShareAPI; +import com.umeng.socialize.bean.SHARE_MEDIA; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.InvalidClassException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.storage.ConversationSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.SettingItem; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; +import cn.shangyu.gdxzExpert.utils.BadgeCountUtils; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-设置与帮助的页面 + */ +public class SettingAndHelpActivity extends BaseActivity implements OnCallBackFromNet { + + private static final String TAG = "SettingAndHelpActivity"; + private SettingItem m_group_notif; + private SettingItem m_system_notif; + private SettingAndHelpActivity ctx; + public static MainActivity mMainActivity; + private static final int ISBOUNDWECHATBYUUID = 200; + private static final int ADDWECHATEXPERT = 201; + private static final int DELWECHATEXPERT = 202; + private TextView mTv_new_version; + private TextView tv_bandingwx,tv_send; + private String openid; + private RelativeLayout ll_dynamic; + + @Override + public void setTitle() { + ctx = this; + + top_title.setText("设置与帮助"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_setting_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_setting); + } + m_group_notif = (SettingItem) view + .findViewById(R.id.switch_group_notification); + m_system_notif = (SettingItem) view + .findViewById(R.id.switch_system_notification); + RelativeLayout m_version = (RelativeLayout) view + .findViewById(R.id.rl_setting_version);// 版本 + RelativeLayout m_abouat = (RelativeLayout) view + .findViewById(R.id.rl_abouat_version);// 关于我们 + RelativeLayout m_feedback = (RelativeLayout) view + .findViewById(R.id.rl_setting_feedback);// 意见反馈 + RelativeLayout rl_setting_zhuxiao = (RelativeLayout) view + .findViewById(R.id.rl_setting_zhuxiao);// 注销账户 + RelativeLayout m_cache = (RelativeLayout) view + .findViewById(R.id.rl_setting_cache);// 清除缓存 + RelativeLayout m_changepsw = (RelativeLayout) view + .findViewById(R.id.rl_setting_changepsw);// 修改密码 + RelativeLayout rl_changenum = (RelativeLayout) view + .findViewById(R.id.rl_changenum);// 更换手机号 + RelativeLayout m_help = (RelativeLayout) view + .findViewById(R.id.rl_setting_help);// 帮助 + RelativeLayout rl_setting_yinsi = (RelativeLayout) view + .findViewById(R.id.rl_setting_yinsi);// 注册协议及隐私政策 + RelativeLayout rl_setting_yinsi1 = (RelativeLayout) view + .findViewById(R.id.rl_setting_yinsi1); + RelativeLayout rl_gdxz_live = (RelativeLayout) view + .findViewById(R.id.rl_gdxz_live);// 肝胆相照直播群 + RelativeLayout rl_shareapp = (RelativeLayout) view + .findViewById(R.id.rl_shareapp);// 分享肝胆相照app + RelativeLayout rl_setting_bindwx = view.findViewById(R.id.rl_setting_bindwx);//绑定微信 + tv_bandingwx = view.findViewById(R.id.tv_bandingwx); + ll_dynamic=view.findViewById(R.id.ll_dynamic); + + // RelativeLayout m_out = (RelativeLayout) + // view.findViewById(R.id.rl_setting_out);//退出 + Button m_out = (Button) view.findViewById(R.id.bt_setting_out);// 退出 + tv_cache = (TextView) view.findViewById(R.id.tv_cache); + mTv_new_version=(TextView) view.findViewById(R.id.tv_new_version); + tv_send=view.findViewById(R.id.tv_send); + if(isNotificationEnabled()) + { + tv_send.setText("已开启"); + } + else + { + tv_send.setText("已关闭"); + + } + // m_open_system_notif = (ImageView) + // findViewById(R.id.iv_switch_open_group_notification); + // m_close_system_notif = (ImageView) + // findViewById(R.id.iv_switch_close_group_notification); + + // String groupId = getIntent().getStringExtra(GROUP_ID); + // mGroup = GroupSqlManager.getECGroup(groupId); + // 初始化是否选中 + // m_group_notif.setChecked(!mGroup.isNotice()); + // 判断切换开关是否点击事件,系统消息免打扰 + + RelativeLayout mRl_call = (RelativeLayout) view + .findViewById(R.id.rl_setting_call);// 版本 + m_system_notif.getCheckedTextView().setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + // updateGroupNewMsgNotify(); + m_system_notif.toggle(); + SharePrefUtil.saveBoolean(ct, "m_system_notif", + m_system_notif.isChecked()); + } + }); + // 群消息免打扰 + m_group_notif.getCheckedTextView().setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + m_group_notif.toggle(); + // updateGroupNewMsgNotify(); + + SharePrefUtil.saveBoolean(ct, "m_new_msg_notif", + m_group_notif.isChecked()); + } + }); + m_system_notif.setChecked(SharePrefUtil.getBoolean(ct, + "m_system_notif", false)); + m_group_notif.setChecked(SharePrefUtil.getBoolean(ct, + "m_new_msg_notif", false)); + mRl_call.setOnClickListener(this); + m_version.setOnClickListener(this); + m_feedback.setOnClickListener(this); + m_cache.setOnClickListener(this); + m_changepsw.setOnClickListener(this); + m_help.setOnClickListener(this); + rl_setting_yinsi.setOnClickListener(this); + rl_setting_yinsi1.setOnClickListener(this); + m_out.setOnClickListener(this); + m_abouat.setOnClickListener(this); + rl_gdxz_live.setOnClickListener(this); + rl_shareapp.setOnClickListener(this); + rl_setting_bindwx.setOnClickListener(this); + m_group_notif.setOnClickListener(this); + m_system_notif.setOnClickListener(this); + rl_changenum.setOnClickListener(this); + rl_setting_zhuxiao.setOnClickListener(this); + ll_dynamic.setOnClickListener(this); + // 缓存大小回显 + tv_cache.setText(getCacheSize()); + + // 注册退出监听 + registerReceiver(new String[] { SDKCoreHelper.ACTION_LOGOUT }); + // initData(); + getGroup(); + + //isBoundWechatByUuid(); + return view; + } + + // 计算缓存大小 + private String getCacheSize() { + try { + String totalCacheSize = DataCleanManager.getTotalCacheSize(ct); + if (!TextUtils.isEmpty(totalCacheSize)) { + return totalCacheSize; + } + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("设置与帮助"); + if(tv_send!=null) + { + if(isNotificationEnabled()) + { + tv_send.setText("已开启"); + } + else + { + tv_send.setText("已关闭"); + + } + } + + + + } + + /** 群组ID */ +// private ECGroup mGroup; + private TextView tv_cache; + private Intent intent; + + /** + * 群消息免打扰 updateGroupNewMsgNotify + * + * void + */ + private void updateGroupNewMsgNotify() { +// if (mGroup == null || mGroup.getGroupId() == null) { +// return; +// } + // 处理消息免打扰 + try { + if (m_group_notif == null) { + return; + } + m_group_notif.toggle(); + boolean checked = m_group_notif.isChecked(); + showProgressDialog(getString(R.string.login_posting_submit)); +// ECGroupOption option = new ECGroupOption(); +// option.setGroupId(mGroup.getGroupId()); +// option.setRule(checked ? ECGroupOption.Rule.SILENCE +// : ECGroupOption.Rule.NORMAL); +// GroupService.setGroupMessageOption(option); + LogUtil.d("updateGroupNewMsgNotify: " + checked); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 更新状态设置 + * + * @param type + */ + protected void updateNewMsgNotification(int type) { + try { + if (type == 0) { + if (m_system_notif == null) { + return; + } + m_system_notif.toggle(); + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_NEW_MSG_SOUND, + m_system_notif.isChecked(), true); + LogUtil.d(TAG, "new_msg_sound " + m_system_notif.isChecked()); + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_NEW_MSG_SHAKE, + m_system_notif.isChecked(), true); + LogUtil.d(TAG, "new_msg_shake " + m_system_notif.isChecked()); + return; + } + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + String versionName; + public void getGroup() { + versionName = UpdateVersionUtils.getVersionName(); + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(checkVersion,param,101,this); +// Map param = new HashMap(); +// param.put("currVer", "1"); +// param.put("appType", String.valueOf(1)); +// sendParamtoNet(Url.getUpdateApk, param, 101,SettingAndHelpActivity.this, true); + } + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.ll_dynamic) { + goToNotificationSetting(); + } else if (id == R.id.rl_setting_version) {// 版本 + startActivity(new Intent(ct, SettingVersionActivity.class)); + } else if (id == R.id.rl_abouat_version) {// 版本 + intent = new Intent(ct, NewsDetailActivity.class); + intent.putExtra("url", "http://doc.igandan.com/app/html/about/2017/about2.html"); + intent.putExtra("title", "关于肝胆相照"); + startActivity(intent); + } else if (id == R.id.rl_setting_feedback) {// 意见反馈 + startActivity(new Intent(ct, SettingFeedbackActivity.class).setType("yijian")); + } else if (id == R.id.rl_setting_zhuxiao) {// 注销账户 + startActivity(new Intent(ct, SettingFeedbackActivity.class).setType("zhuxiao")); + } else if (id == R.id.rl_setting_help) {// 帮助 + intent = new Intent(ct, NewsDetailActivity.class); + intent.putExtra("url", Url.gethelp); + intent.putExtra("title", "使用说明"); + intent.putExtra("newsTitle", "使用说明"); + startActivity(intent); + } else if (id == R.id.rl_setting_changepsw) {// 更改密码 + startActivity(new Intent(ct, ChangePasswordActivity.class)); + } else if (id == R.id.rl_setting_cache) {// 清除缓存 + cleanAllCache(); + // case R.id.rl_setting_out: + // exitApp(); + // break; + } else if (id == R.id.bt_setting_out) {// 退出 + exitApp(); + } else if (id == R.id.rl_setting_call) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this,Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + toCall(); + } else { + EasyWindow.with(SettingAndHelpActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_phone).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + toCall(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + toCall(); + } + } else if (id == R.id.rl_gdxz_live) { + intent = new Intent(ct, NewsDetailActivity.class); + intent.putExtra("url", "http://wx.igandan.com/qun/gdxzqun"); + intent.putExtra("title", "肝胆相照直播群"); + intent.putExtra("summary", "肝胆病在线公共服务平台"); + intent.putExtra("flag", 1); + startActivity(intent); + } else if (id == R.id.rl_shareapp) { +// intent = new Intent(ct, NewsDetailActivity.class); +// intent.putExtra("url", "http://sj.qq.com/myapp/detail.htm?apkName=cn.shangyu.gdxzExpert"); +// intent.putExtra("title", "分享肝胆相照APP"); +// intent.putExtra("flag", 1); +// intent.putExtra("summary", "肝胆病在线公共服务平台"); +// startActivity(intent); + share(); + } else if (id == R.id.rl_changenum) { + Intent intentnum = new Intent(SettingAndHelpActivity.this,EditPhoneActivity.class); + String phone = SharePrefUtil.getString(ct, "mobile", ""); + intentnum.putExtra("phone",phone); + startActivity(intentnum); + } else if (id == R.id.rl_setting_yinsi) { + Intent intent = new Intent(SettingAndHelpActivity.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "注册协议"); + startActivity(intent); + } else if (id == R.id.rl_setting_yinsi1) { + Intent intent1 = new Intent(SettingAndHelpActivity.this, + NewsDetailActivity.class); + intent1.putExtra("url", Url.getyyzc); + intent1.putExtra("title", "隐私政策"); +// intent.putExtra("from", "WelcomeUI"); + startActivity(intent1); + } else if (id == R.id.rl_setting_bindwx) { + startActivity(new Intent(ct, BindWeChatActivity.class)); +// if ("绑定微信".equals(tv_bandingwx.getText().toString())){ +// BindWX(); +// }else { +// UnBindWX(); +// }wcx旧版 + } + } + + private void UnBindWX() { + Map map = new HashMap<>(); + map.put("openid",openid); + sendJsonPostParamtoNetSignMD5(Url.delWechatExpert,map,DELWECHATEXPERT,this); + } + + //判断用户是否绑定过微信 + private void isBoundWechatByUuid() { + Map map = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.isBoundWechatByUuid,map,ISBOUNDWECHATBYUUID,this); + } + + /** + * 打开允许通知的设置页 + */ + private void goToNotificationSetting() { + Intent intent = new Intent(); + if (Build.VERSION.SDK_INT >= 26) { + intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); + intent.setData(Uri.fromParts("package", getPackageName(), null)); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); +// intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS); +// intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName()); +// intent.putExtra("app_uid",getApplicationInfo().uid); +//// intent.putExtra(Settings.EXTRA_CHANNEL_ID, "随访消息"); +// startActivity(intent); + + } else if (Build.VERSION.SDK_INT >= 21) { + // android 5.0-7.0 + intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); + intent.putExtra("app_package",getPackageName()); + intent.putExtra("app_uid", getApplicationInfo().uid); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } else { + // 其他 + intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS"); + intent.setData(Uri.fromParts("package", getPackageName(), null)); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + + } + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + private boolean isNotificationEnabled() { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + //8.0手机以上 + if (((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).getImportance() == NotificationManager.IMPORTANCE_NONE) { + + + return false; + } + } + + String CHECK_OP_NO_THROW = "checkOpNoThrow"; + String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; + + AppOpsManager mAppOps = (AppOpsManager)getSystemService(Context.APP_OPS_SERVICE); + ApplicationInfo appInfo = getApplicationInfo(); + String pkg = getApplicationContext().getPackageName(); + int uid = appInfo.uid; + + Class appOpsClass = null; + + try { + appOpsClass = Class.forName(AppOpsManager.class.getName()); + Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, + String.class); + Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); + + int value = (Integer) opPostNotificationValue.get(Integer.class); + return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); + + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = "肝胆相照专家端APP"; + String shareUrl = "http://sj.qq.com/myapp/detail.htm?apkName=cn.shangyu.gdxzExpert"; + String summary = "肝胆病在线公共服务平台"; + + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(""); + ShareUtils.shareUmeng(ct, shareTitle, summary, "", + "", shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + private ECAlertDialog buildAlert; + + /** + * 拨打电话 + */ + private void toCall() { + String message = "项目办公室 010-87573022\n工作时间 8:30-21:00"; + buildAlert = ECAlertDialog.buildAlert(SettingAndHelpActivity.this, + message, "取消", "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + try { + // TODO Auto-generated method stub + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_CALL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:01087573022")); + startActivity(intent); + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + + } + + } + + }); + buildAlert.setTitle("确定拨打"); + buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + private int mExitType = 0; + + /** + * 退出操作 exitApp + * + * void + */ + private void exitApp() { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(this).create(); + Button btn_sure = layout.findViewById(R.id.btn_sure); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_infotitle1 = layout.findViewById(R.id.tv_infotitle1); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("退出"); + tv_infotitle1.setText("确定要退出当前账号吗?"); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mExitType = 0; + handleLogout(false); + dialog.dismiss(); + } + }); +// ECListDialog dialog = new ECListDialog(ct, R.array.out_menu); +// dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { +// @Override +// public void onDialogItemClick(Dialog d, int position) { +// switch (position) { +// case 0: // 退出当前账号 +// mExitType = 0; +// handleLogout(false); +// break; +// case 1: // 退出客户端 +// mExitType = 1; +// handleLogout(true); +// break; +// default: +// break; +// } +// } +// }); +// dialog.setTitle("退出"); +// dialog.show(); + } + + /** + * 处理退出操作 + */ + private void handleLogout(boolean isNotice) { + // ECProgressDialog mPostingdialog = new ECProgressDialog(this, + // R.string.posting_logout); + // mPostingdialog.show(); + showProgressDialog(getString(R.string.posting_logout)); + /** + * 无网络情况也可退出2018.12.6 + * */ + + handleLogout(); + + + + } + + /** + * @author 王帅 处理退出操作 + */ + + private void handleLogout() { + + if (mExitType == 1) { + SDKCoreHelper.logout(true); + // 1登入系统 2退出系统 3患者客户端在手机前台运行 4.客户端在手机后台运行 + BaseActivity.foreBack(mMainActivity, 4); + AppManager.getAppManager().AppExit(ctx); + + } else if (mExitType == 0) { + // ECProgressDialog mPostingdialog = new ECProgressDialog(this, + // R.string.posting_logout); +// if (SDKCoreHelper.getConnectState() == ECDevice.ECConnectState.CONNECT_SUCCESS){ +// SDKCoreHelper.logout(false); +// LogUtil.i("容联在线正常退出"); +// } +// if (SDKCoreHelper.getConnectState() == ECDevice.ECConnectState.CONNECTING){ +// LogUtil.i("容联正在连接"); +// } +// if (SDKCoreHelper.getConnectState() == ECDevice.ECConnectState.CONNECT_FAILED){ +// LogUtil.i("容联连接失败"); +// } +// PatientSqlManager.delAllPatientInfo(Constant.typePatient); + LogoutHelper.logout(); + addUMToken(""); + Intent intent = new Intent(ctx, LoginNewActivity.class); + intent.putExtra("flag", true); + intent.putExtra("phone",SharePrefUtil.getString(ctx, Constant.mobile, "")); + startActivity(intent); + Constant.islogout =1; + // 1登入系统 2退出系统 3患者客户端在手机前台运行 4.客户端在手机后台运行 + BaseActivity.foreBack(mMainActivity, 2); + + ctx.finish(); + } + } + + + // 接受广播 + @Override + protected void handleReceiver(Context context, Intent intent) { + super.handleReceiver(context, intent); + if (SDKCoreHelper.ACTION_LOGOUT.equals(intent.getAction())) { + closeProgressDialog(); + try { + Intent outIntent = new Intent(); +// if(BigModule()) +// { +// outIntent.setClass(this, BigMainActivity.class); +// +// } +// else +// { + outIntent.setClass(this, MainActivity.class); +// } + outIntent.putExtra("close", true); + outIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + if (mExitType == 1) { + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_FULLY_EXIT, true, + true); + startActivity(outIntent); + finish(); + return; + } +// ECDevice.unInitial(); + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_REGIST_AUTO, "", true); + SharePrefUtil.saveBoolean(ct, Constant.IS_LOGIN, false); + startActivity(outIntent); + finish(); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + } + + // 清除缓存 + private void cleanAllCache() { + showProgressDialog("清除缓存中..."); + DataCleanManager.clearAllCache(ct); + // 缓存大小回显 + tv_cache.setText(getCacheSize()); + LogUtil.i("cache==" + getCacheSize()); + closeProgressDialog(); + //清除随访患者未读消息数 + int i = IMessageSqlManager.UnreadCount(Constant.typePatient); + //清除公益咨询未读消息数 + int i1 = IMessageSqlManager.UnreadCount(Constant.typeConsult); + ConversationSqlManager.setChattingSessionRead(1); + String brand = android.os.Build.BRAND; + if ("Xiaomi".equals(brand)){ + //小米不需要原生角标 + }else { + BadgeCountUtils.removeBadge(UIUtils.getContext()); + + } + String pathName = getApplicationContext().getExternalFilesDir("").getAbsolutePath()+ "/欢迎页/huanyingye.jpg"; + File currentFile = new File(pathName); + if (currentFile.exists()) { + currentFile.delete(); + } + SharePrefUtil.saveString(getApplicationContext(), + Url.getStartpage+"new", ""); + NIMClient.getService(MsgService.class).clearAllUnreadCount(); + ToastUtil.showToast("清除完毕"); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + //微信登陆信息 + private void BindWX(){ + + UMShareAPI.get(this).getPlatformInfo(this, SHARE_MEDIA.WEIXIN, umAuthListener); + } + + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode){ + case 101: + if (resultJson == null) { + return; + } + String code = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + if("80002".equals(code)) + { + mTv_new_version.setVisibility(View.VISIBLE); + + return; + } + else + { + mTv_new_version.setVisibility(View.GONE); + } +// jsonObject = new JSONObject(resultJson); +// code = jsonObject.getString("code"); +// String newVersion = jsonObject.getString("newVersion"); +// LogUtil.i("newVersion = "+newVersion); +// if ("1".equals(code)&&!versionName.equals(newVersion)) { +// if (UpdateVersionUtils.isUpdataInfo(versionName,newVersion)){ +// mTv_new_version.setVisibility(View.VISIBLE); +// }else { +// mTv_new_version.setVisibility(View.GONE); +// } +// }else{ +// mTv_new_version.setVisibility(View.GONE); +// } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + + break; + case ISBOUNDWECHATBYUUID: + LogUtil.i("ISBOUNDWECHATBYUUID = "+resultJson); + try { + JSONObject jsonObject1 = new JSONObject(resultJson); + String code1 = jsonObject1.getString("code"); + if ("200".equals(code1)){ + int isBound = jsonObject1.getInt("isBound"); + if (isBound==0){ + // tv_bandingwx.setText("绑定微信"); + }else { + // tv_bandingwx.setText("解除绑定微信"); + openid = jsonObject1.getString("openid"); + } + }else { + ToastUtil.showMessage(jsonObject1.getString("message")); + } + + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + break; + case ADDWECHATEXPERT: + LogUtil.i("ADDWECHATEXPERT = "+resultJson); + JSONObject jsonObject2 = null; + try { + jsonObject2 = new JSONObject(resultJson); + String code1 = jsonObject2.getString("code"); + if ("200".equals(code1)){ + tv_bandingwx.setText("解除绑定微信"); + } + ToastUtil.showMessage(jsonObject2.getString("message")); + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case DELWECHATEXPERT: + LogUtil.i("DELWECHATEXPERT = "+resultJson); + try { + JSONObject jsonObject3 = new JSONObject(resultJson); + String code1 = jsonObject3.getString("code"); + if ("200".equals(code1)){ + tv_bandingwx.setText("绑定微信"); + } + ToastUtil.showMessage(jsonObject3.getString("message")); + + } catch (JSONException e) { + e.printStackTrace(); + } + break; + } + } + + + + private UMAuthListener umAuthListener = new UMAuthListener() { + @Override + public void onStart(SHARE_MEDIA platform) { + //授权开始的回调 + } + @Override + public void onComplete(SHARE_MEDIA platform, int action, Map data) { +// Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show(); + + String name = data.get("name"); + openid = data.get("openid"); + String gender = data.get("gender"); + String iconurl = data.get("iconurl"); + String city = data.get("city"); + String prvinice = data.get("prvinice"); + String country = data.get("country"); + String privilege = data.get("privilege"); + String unionid = data.get("unionid"); + LogUtil.i("name = "+name); + LogUtil.i("openid = "+openid); + LogUtil.i("gender = "+gender); + LogUtil.i("iconurl = "+iconurl); + LogUtil.i("city = "+city); + LogUtil.i("prvinice = "+prvinice); + LogUtil.i("country = "+country); + LogUtil.i("data = "+data.toString()); +// {country=中国, +// unionid=oCwO1wOWbP4RqmG7m5KnSdhLnyzg, +// gender=男, +// city=, +// openid=odr10s9qElmuO4O0GVE_i7RXuJfU, +// language=zh_CN, +// profile_image_url=http://thirdwx.qlogo.cn/mmopen/vi_32/t7KAzibDicb1pRq7VvLct5XGT7SJmTMlawIO9teLSqad0VVljEC1l9HMcibyWKxy07DJlbHkj620hcD6W8d5NXykg/132, +// accessToken=36_YNuIDu65cbK53Eat1CDec0IX8kGRTZePWZZvcEC-7clvoy2SC1qXVAf99RGlX3QyGzqy9sDFGJkyLB1R4YcaRn5f6EFWK6QFAVRQ5LlXg9M, +// access_token=36_YNuIDu65cbK53Eat1CDec0IX8kGRTZePWZZvcEC-7clvoy2SC1qXVAf99RGlX3QyGzqy9sDFGJkyLB1R4YcaRn5f6EFWK6QFAVRQ5LlXg9M, +// uid=oCwO1wOWbP4RqmG7m5KnSdhLnyzg, +// province=, +// screen_name=12355, +// name=12355, +// iconurl=http://thirdwx.qlogo.cn/mmopen/vi_32/t7KAzibDicb1pRq7VvLct5XGT7SJmTMlawIO9teLSqad0VVljEC1l9HMcibyWKxy07DJlbHkj620hcD6W8d5NXykg/132, +// expiration=1597635314447, +// expires_in=1597635314447, +// refreshToken=36_182iVW8iB03NQUXg7ktFTi0Zj4Z6SurQv9MZyYuB1rr3fHcOE-lFqD2Ue6k9X3-JC4BcsmdxqNuFi5vX69_hATi3JKj78g8xi6-xS1udCTI} + + sendJsonPostParamtoNetSignMD5(Url.addWechatExpert,data,ADDWECHATEXPERT,SettingAndHelpActivity.this); + + } + + @Override + public void onError(SHARE_MEDIA platform, int action, Throwable t) { + Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCancel(SHARE_MEDIA platform, int action) { + Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show(); + } + }; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingFeedbackActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingFeedbackActivity.java new file mode 100644 index 0000000..04d0f76 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingFeedbackActivity.java @@ -0,0 +1,475 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Handler; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我的-设置-意见反馈 + * + * @author susanyuan + * + */ + +public class SettingFeedbackActivity extends BaseActivity implements + OnClickListener { + + private Button bt_submit; + private EditText et_feedbook; + private TextView tv_feedbook; + private String content; + private Intent getIntent; + boolean isCommen = false; + private String name, text; + private String expert_uuid = ""; + private Button mBt_get_Voice; + private HttpHandler httpHandler; + private AlertDialog dialog4;//提示随访患者 + private CustomProgressDialog pd; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_feedbook); + et_feedbook = (EditText) view.findViewById(R.id.et_feedbook); + tv_feedbook = (TextView) view.findViewById(R.id.tv_feedbook); + // 字数限制的 + // et_feedbook.addTextChangedListener(tw); + bt_submit = (Button) view.findViewById(R.id.bt_submit); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + bt_submit.setOnClickListener(this); + + et_feedbook.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (hasFocus) {// 获得焦点 + et_feedbook.setHint(""); + } else {// 失去焦点 + et_feedbook.setHint(getResources().getString( + R.string.feed_back_hint)); + } + } + }); + setTitle1(); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void setTitle1() { + // TODO Auto-generated method stub + getIntent = getIntent(); + if (getIntent.getType().equals("comment")) { + name = getIntent.getStringExtra("name"); + text = getIntent.getStringExtra("content"); + expert_uuid = getIntent.getStringExtra("uuid"); + isCommen = true; + top_title.setText("回复"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + mBt_get_Voice.setVisibility(View.GONE); + } else if (getIntent.getType().equals("commentY")) { + name = getIntent.getStringExtra("name"); + text = getIntent.getStringExtra("content"); + expert_uuid = getIntent.getStringExtra("uuid"); + isCommen = true; + top_title.setText("回复"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + } + else if (getIntent.getType().equals("commentC")) { + name = getIntent.getStringExtra("name"); + isCommen = true; + top_title.setText("回复"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("确定"); + top_right_text.setOnClickListener(this); + } + else if (getIntent.getType().equals("yijian")){ + top_title.setText("意见反馈"); + }else if (getIntent.getType().equals("tousu")){ + top_title.setText("投诉反馈"); + et_feedbook.setHint("尊敬的医生您好,若在交流过程中发现患者发布不适当内容,请您及时填写相关信息,我们将第一时间处理,谢谢您的支持。"); + } + else if (getIntent.getType().equals("zhuxiao")){ + top_title.setText("注销账户"); + tv_feedbook.setText("账户注销后不可恢复,您将永久放弃此账户现有权益\n" + + "1.您将不能再使用此账户随访患者,不能接收随访患者发送的信息\n" + + "2.您所有的咨询、订单、下载记录将被清除且不能找回\n" + + "3.肝胆相照平台提供的文献、视频等服务将结束\n" + + "4.申请注销账户前,请确保账户相关权益已结清\n" + + "\n" + + "收到您的注销申请后,我们将在10个工作日内帮您完成注销及数据清除工作" ); + tv_feedbook.setVisibility(View.VISIBLE); + et_feedbook.setVisibility(View.GONE); + bt_submit.setText("已确认风险,提交注销申请"); + mBt_get_Voice.setVisibility(View.GONE); + } + if (isCommen) { + bt_submit.setVisibility(View.GONE); + et_feedbook.setHint("回复 " + name + ":"); + } + } + + /** + * 提交反馈的信息 submit + * + * void + */ + public void submit() { + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, null); + if (getIntent.getType().equals("zhuxiao")){ + showProgressDialog("注销申请中..."); + content = "注销此账户"; + }else { + content = et_feedbook.getText().toString().trim(); + if (TextUtils.isEmpty(content)) { + ToastUtil.showToast("请输入反馈意见"); + return; + } + + showProgressDialog("提交反馈中..."); + } + + new Thread() { + public void run() { + + try { + List parameters = new ArrayList(); + // 封装参数名称和参数值 + BasicNameValuePair value01 = new BasicNameValuePair( + "content", content); + BasicNameValuePair value02 = new BasicNameValuePair( + "expertUuid", expertUuid); + // 把参数放到list中 + parameters.add(value01); + parameters.add(value02); + HttpResult httpResult = HttpHelper.post(Url.getfeedBack, + parameters); + + String result = httpResult.getString(); + + LogUtil.i(result + "jsob-retcode"); + + JSONObject jsob = new JSONObject(result); + String retcode = jsob.getString("code"); + if (retcode.equals("1")) { + handler.sendEmptyMessage(99); + } else { + handler.sendEmptyMessage(101); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(101); + } + }; + }.start(); + } + + @SuppressLint("HandlerLeak") + public Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + closeProgressDialog(); + switch (msg.what) { + case 99: + if (getIntent.getType().equals("zhuxiao")){ + ToastUtil.showToast("提交成功"); + }else { + ToastUtil.showToast("我们已收到您的反馈,感谢您对我们的支持。"); + } + + finish(); + break; + case 101: + ToastUtil.showToast("提交失败,请重试"); + break; + } + }; + }; + + private String expertUuid; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_submit: // 提交 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + if (getIntent.getType().equals("zhuxiao")){ + isEdit(); + }else{ + submit(); + } + break; + case R.id.top_right_text: + View view1 = getWindow().peekDecorView(); + if (view1 != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view1.getWindowToken(), 0); + } + if (!StringUtil.isEmpty(et_feedbook.getText().toString().trim())) { + if(et_feedbook.getText().toString().length()>300) + { + ToastUtil.showToast("您的评论字数过多"); + return; + } + getIntent.putExtra("content", et_feedbook.getText().toString() + .trim() + + " || " + name + ":" + text); + getIntent.putExtra("uuid", expert_uuid); + getIntent.putExtra("contentclass", et_feedbook.getText().toString() + .trim()); + if(StringUtil.isEmpty(name)) + { +// setResult(500,getIntent); + ToastUtil.showMessage("该评论无法回复"); + return; + } + else + { + setResult(GDEventDetailActivity.GET_HF_COMMENT_RESULT, + getIntent); + } + + finish(); + } + else + { + ToastUtil.showMessage("回复不能为空"); + } + + break; + case R.id.bt_get_voice: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(ct, et_feedbook); + } else { + EasyWindow.with(SettingFeedbackActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(ct, et_feedbook); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(ct, et_feedbook); + } + + break; + default: + break; + } + } + + KeDaXunFeiUtil VoiceUtil; + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + super.onDestroy(); + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + private void isEdit() { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(this).create(); + Button btn_sure = layout.findViewById(R.id.btn_sure); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_infotitle1 = layout.findViewById(R.id.tv_infotitle1); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("注销账户"); + tv_infotitle1.setText("确定要注销肝胆相照平台账号吗?\n" + + "注销后您的所有数据将无法恢复"); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getPatientList(Url.getpatientList); + dialog.dismiss(); + } + }); + } + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param loadUrl + * void + * @param + */ + private void getPatientList(final String loadUrl) { + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "")); + httpHandler = HttpHelper.loadData(HttpRequest.HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + pd.dismiss(); + PatientListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(info.result, PatientListBean.class); + if (StringUtil.isOneToCode(bean.code)||bean.data.size()<1) { + submit(); + } + else + { + LayoutInflater inflater = LayoutInflater.from(SettingFeedbackActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + dialog4 = new AlertDialog.Builder( + SettingFeedbackActivity.this).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText("请您解除所有随访患者后再提交注销申请"); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + btn_sure.setTextSize(TypedValue.COMPLEX_UNIT_SP,17); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + View line=layout.findViewById(R.id.line1); + line.setVisibility(View.GONE); + btn_cancel.setVisibility(View.GONE); + dialog4.show(); + dialog4.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog4.dismiss(); + + + } + }); + + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + pd.dismiss(); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingServiceActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingServiceActivity.java new file mode 100644 index 0000000..55fa090 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingServiceActivity.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RelativeLayout; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-服务设置 + */ +public class SettingServiceActivity extends BaseActivity { + + + @Override + public void setTitle() { + top_title.setText("服务设置"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_setting_service); + RelativeLayout m_consultation = (RelativeLayout) view.findViewById(R.id.rl_telephone_consultation);//电话咨询 + RelativeLayout m_appointment = (RelativeLayout) view.findViewById(R.id.rl_outpatient_appointment);//门诊预约 + RelativeLayout m_service = (RelativeLayout) view.findViewById(R.id.rl_monthly_service);//包月服务 + RelativeLayout m_visits = (RelativeLayout) view.findViewById(R.id.rl_monthly_visits);//出诊计划 + m_consultation.setOnClickListener(this); + m_appointment.setOnClickListener(this); + m_service.setOnClickListener(this); + m_visits.setOnClickListener(this); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.rl_telephone_consultation: + //启动电话咨询 + startActivity(new Intent(ct, TelephoneConsultationActivity.class)); + break; + case R.id.rl_outpatient_appointment: +// 启动门诊预约 + startActivity(new Intent(ct, AddOutpatientAppointmentActivity.class)); + break; + case R.id.rl_monthly_service: +// 启动包月服务 + startActivity(new Intent(ct, MonthlyServiceActivity.class)); + break; + case R.id.rl_monthly_visits: +// 启动出诊计划 + startActivity(new Intent(ct, MyVisitsDressActivity.class)); + break; + default: + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingVersionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingVersionActivity.java new file mode 100644 index 0000000..864a75a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingVersionActivity.java @@ -0,0 +1,835 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Url.checkVersion; + +import android.Manifest; +import android.app.ActivityManager; +import android.app.ActivityManager.RunningServiceInfo; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Environment; +import android.os.PowerManager; +import android.provider.Settings; +import android.text.Html; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.service.UpdateService; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.view.CommonProgressDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-设置-版本 + */ +public class SettingVersionActivity extends BaseActivity implements + OnCallBackFromNet { + private SettingVersionActivity ctx; + private File updateDir = null; + private File updateFile = null; + private CommonProgressDialog pBar; + private String newVersion; + + + @Override + public void setTitle() { + top_title.setText("版本"); + } + + @Override + public View onCreateSuccessedView() { + ctx = this; + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_setting_version); + View m_update = view.findViewById(R.id.rl_check_update); + TextView tv_version = (TextView) view.findViewById(R.id.tv_version); + m_update.setOnClickListener(this); + // initData(); + String versionName = UpdateVersionUtils.getVersionName(); + if (!TextUtils.isEmpty(versionName)) { + tv_version.setText(getResources().getString(R.string.app_name) + + " " + versionName); + } + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("版本"); + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + + } + + String dowmLoadPath; + String versionName; + + public void getGroup() { + versionName = UpdateVersionUtils.getVersionName(); + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(checkVersion,param,101,this); +// param.put("currVer", "1"); +// param.put("appType", String.valueOf(1)); +// sendParamtoNet(Url.getUpdateApk, param, 101, +// SettingVersionActivity.this, true); + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_check_update) { + // 检查更新 + if (isServiceRunning()) { + ToastUtil.showMessage("后台正在更新"); + return; + } + getGroup(); + } + } + + public void getUndate(String newVewsion) { + if (Build.VERSION.SDK_INT>26){ + boolean b = getPackageManager().canRequestPackageInstalls(); + if(b){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(SettingVersionActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("titleId", R.string.app_name); + startService(intent); + } else { + EasyWindow.with(SettingVersionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(SettingVersionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("titleId", R.string.app_name); + startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("titleId", R.string.app_name); + startService(intent); + } +// Intent intent = new Intent(SettingVersionActivity.this, +// UpdateService.class); +// intent.putExtra("newVersion", newVewsion); +// intent.putExtra("oldVersion", versionName); +// intent.putExtra("url", dowmLoadPath); +// intent.putExtra("titleId", R.string.app_name); +// startService(intent); + } + else { + //请求安装未知应用来源的权限   + Uri packageURI = Uri.parse("package:" + getPackageName()); + Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); + startActivityForResult(intent, 10086); + } + } + else + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(SettingVersionActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("titleId", R.string.app_name); + startService(intent); + } else { + EasyWindow.with(SettingVersionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(SettingVersionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("titleId", R.string.app_name); + startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("newVersion", newVewsion); + intent.putExtra("oldVersion", versionName); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("titleId", R.string.app_name); + startService(intent); + } + } + + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + /** + * 新的版本更新 + * + * @param */ + private void UpApk() { + pBar = new CommonProgressDialog(this); + pBar.setCanceledOnTouchOutside(false); + pBar.setTitle("正在下载"); + pBar.setCustomTitle(LayoutInflater.from(this).inflate( + R.layout.title_dialog, null)); + pBar.setMessage("正在下载"); + pBar.setIndeterminate(true); + pBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + pBar.setCancelable(true); + pBar.show(); + + final DownloadTask downloadTask = new DownloadTask( + this); + + downloadTask.execute(dowmLoadPath); + + + + + } + + private static final String DOWNLOAD_NAME = "gdxztExpert.apk"; + /** + * 下载应用 + * + * @author Administrator + */ + class DownloadTask extends AsyncTask { + + private Context context; + private PowerManager.WakeLock mWakeLock; + + public DownloadTask(Context context) { + this.context = context; + } + + @Override + protected String doInBackground(String... sUrl) { + InputStream input = null; + OutputStream output = null; + HttpURLConnection connection = null; + File file = null; + try { + URL url = new URL(sUrl[0]); + connection = (HttpURLConnection) url.openConnection(); + connection.connect(); + // expect HTTP 200 OK, so we don't mistakenly save error + // report + // instead of the file + if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { + return "Server returned HTTP " + + connection.getResponseCode() + " " + + connection.getResponseMessage(); + } + // this will be useful to display download percentage + // might be -1: server did not report the length + int fileLength = connection.getContentLength(); + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + file = new File(Environment.getExternalStorageDirectory(), + DOWNLOAD_NAME); + + if (!file.exists()) { + // 判断父文件夹是否存在 + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + } + + } else { + ToastUtil.showMessage("sd卡未挂载"); + } + input = connection.getInputStream(); + output = new FileOutputStream(file); + byte data[] = new byte[4096]; + long total = 0; + int count; + while ((count = input.read(data)) != -1) { + // allow canceling with back button + if (isCancelled()) { + input.close(); + return null; + } + total += count; + // publishing the progress.... + if (fileLength > 0) // only if total length is known + publishProgress((int) (total * 100 / fileLength)); + output.write(data, 0, count); + + } + } catch (Exception e) { + System.out.println(e.toString()); + return e.toString(); + + } finally { + try { + if (output != null) + output.close(); + if (input != null) + input.close(); + } catch (IOException ignored) { + } + if (connection != null) + connection.disconnect(); + } + return null; + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + // take CPU lock to prevent CPU from going off if the user + // presses the power button during download + PowerManager pm = (PowerManager) context + .getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, + getClass().getName()); + mWakeLock.acquire(); + pBar.show(); + } + + @Override + protected void onProgressUpdate(Integer... progress) { + super.onProgressUpdate(progress); + // if we get here, length is known, now set indeterminate to false + pBar.setIndeterminate(false); + pBar.setMax(100); + pBar.setProgress(progress[0]); + } + + @Override + protected void onPostExecute(String result) { + mWakeLock.release(); + pBar.dismiss(); + if (result != null) { + + }else + checkIsAndroidO(); + } + } + + private void update() { + //安装应用 + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStorageDirectory(), DOWNLOAD_NAME)),"application/vnd.android.package-archive"); + startActivity(intent); + } + + private void checkIsAndroidO(){ + if (Build.VERSION.SDK_INT>26){ + boolean b = getPackageManager().canRequestPackageInstalls(); + if (b){ + update();//安装应用的逻辑(写自己的就可以) + }else { + //请求安装未知应用来源的权限   + ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 1); + } + }else { + update(); + } + } + + + private Dialog dialog; + + protected void showUpDateDialog(String version_meaasge, + final String newVersion, final String oldVersion) { + // TODO Auto-generated method stub + this.newVersion = newVersion; + // if (!SharePrefUtil.getString(MainActivity.this, "newVersion", "") + // .equals("true")) { + // 1. 布局文件转换View对象 + LayoutInflater inflater = LayoutInflater + .from(SettingVersionActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate( + R.layout.dialog_update_version, null); + // 2. 新建对话框对象 + dialog = new AlertDialog.Builder(SettingVersionActivity.this, + R.style.Dialog_Fullscreen).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + // 3. 消息内容 + ImageView img_del = (ImageView) layout.findViewById(R.id.iv_dialog_del);// 取消本次更新 + TextView btn_ignore = (TextView) layout.findViewById(R.id.btn_ignore);// 忽略 + TextView btn_update = (TextView) layout.findViewById(R.id.btn_update);// 更新 + TextView tv_update_info = (TextView) layout + .findViewById(R.id.tv_update_info);// 更新内容 + tv_update_info.setText(Html.fromHtml(version_meaasge)); + btn_ignore.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + SharePrefUtil.saveString(SettingVersionActivity.this, + "newVersion", newVersion); + dialog.dismiss(); + } + }); + btn_update.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + // 启动服务 + // updateDir = new + // File(Environment.getExternalStorageDirectory(), + // "app/download/"); + // updateFile = new File(updateDir.getPath(), + // (R.string.app_name + newVersion) + ".apk"); + // if (!isServiceRunning()&&updateFile.exists()) { + // Intent i = new Intent(); + // i.setAction(Intent.ACTION_VIEW); + // i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + // i.setDataAndType(Uri.fromFile(updateFile), + // "application/vnd.android.package-archive"); + // startActivity(i); + // return; + // } + if (Build.VERSION.SDK_INT>26){ + boolean b = getPackageManager().canRequestPackageInstalls(); + LogUtil.i("b = "+b); + if (b){ + SharePrefUtil.saveString(SettingVersionActivity.this, + "newVersion", newVersion); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(SettingVersionActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } else { + EasyWindow.with(SettingVersionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(SettingVersionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } + + }else { + //请求安装未知应用来源的权限   +// ActivityCompat.requestPermissions(SettingVersionActivity.this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, 1); + Uri packageURI = Uri.parse("package:" + getPackageName()); + Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); + startActivityForResult(intent, 10086); + + } + }else { + LogUtil.i("SDK_INT = "+25); + SharePrefUtil.saveString(SettingVersionActivity.this, + "newVersion", newVersion); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(SettingVersionActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } else { + EasyWindow.with(SettingVersionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(SettingVersionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } +// Intent intent = new Intent(SettingVersionActivity.this, +// UpdateService.class); +// intent.putExtra("titleId", R.string.app_name); +// intent.putExtra("url", dowmLoadPath); +// intent.putExtra("newVersion", newVersion); +// intent.putExtra("oldVersion", versionName); +// ToastUtil.showMessage("开始后台下载"); +// SettingVersionActivity.this.startService(intent); + } + +// UpApk(); + } + }); + img_del.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + // } + + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (resultCode == RESULT_OK && requestCode == 10086) { + //返回权限后,执行自己的逻辑; + SharePrefUtil.saveString(SettingVersionActivity.this, + "newVersion", newVersion); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(SettingVersionActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } else { + EasyWindow.with(SettingVersionActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(SettingVersionActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + Intent intent = new Intent(SettingVersionActivity.this, + UpdateService.class); + intent.putExtra("titleId", R.string.app_name); + intent.putExtra("url", dowmLoadPath); + intent.putExtra("newVersion", newVersion); + intent.putExtra("oldVersion", versionName); + ToastUtil.showMessage("开始后台下载"); + SettingVersionActivity.this.startService(intent); + } +// Intent intent = new Intent(SettingVersionActivity.this, +// UpdateService.class); +// intent.putExtra("titleId", R.string.app_name); +// intent.putExtra("url", dowmLoadPath); +// intent.putExtra("newVersion", newVersion); +// intent.putExtra("oldVersion", versionName); +// ToastUtil.showMessage("开始后台下载"); +// SettingVersionActivity.this.startService(intent); + }else { + ToastUtil.showMessage("请允许来自此来源的应用安装"); + } + + } + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode){ + case 101: + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + + if (StringUtil.isEmpty(resultJson)) { + return; + } + if (resultJson == null) { + return; + } + String code = null; + String message = null; + String isCollection = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + String result = null; + String intro = null; + String newVewsion = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + if(!jsonObject.isNull("data")) + { + dowmLoadPath = jsonObject.getJSONObject("data").getString("apk_path"); + intro = jsonObject.getJSONObject("data").getString("intro"); + newVersion = jsonObject.getJSONObject("data").getString("version"); + } +// if("80001".equals(code)) +// { +// ToastUtil.showMessage("当前版本"+versionName); +// return; +// } + if("80002".equals(code)) + { + + if(jsonObject.getJSONObject("data").getInt("upgrade")==1) + { + showUpDateDialog(intro, newVewsion, versionName); + + } + else + { + MainActivity.isneedupdatewindow=false; + getUndate(newVewsion); + } + + } + else + { + + ToastUtil.showMessage("当前版本"+versionName); + + } +// jsonObject = new JSONObject(resultJson); +// code = jsonObject.getString("code"); +// result = jsonObject.getString("reuslt"); +// message = jsonObject.getString("message"); +// dowmLoadPath = jsonObject.getString("downloadPath"); +// intro = jsonObject.getString("intro"); +// newVewsion = jsonObject.getString("newVersion"); +// if (code.equals("1")) { +// if (result.equals("Y")) { +// if (!StringUtil.isEmpty(intro)) { +// if (UpdateVersionUtils.isUpdataInfo(versionName,newVewsion)){ +// getUndate(newVewsion); +// } +// else +// { +// ToastUtil.showMessage("当前版本"+versionName); +// } +// +// } +// +// else +// { +// ToastUtil.showMessage("当前版本"+versionName); +// } +// // } +// } else if (StringUtil.isEmpty(intro)){ +// ToastUtil.showMessage("无版本信息"); +// }else if (newVewsion.equals(versionName)){ +// ToastUtil.showMessage("当前版本"+versionName); +// }else {//有新版的版本号大于本地版本 +// if (UpdateVersionUtils.isUpdataInfo(versionName,newVewsion)){ +// showUpDateDialog(intro, newVewsion, versionName); +// }else { +// ToastUtil.showMessage("当前版本"+versionName); +// } +// +// } +// +// +// } else { +// ToastUtil.showMessage("当前版本"+versionName); +// } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + } + + } + + + private boolean isServiceRunning() { + ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + for (RunningServiceInfo service : manager + .getRunningServices(Integer.MAX_VALUE)) { + if ("cn.shangyu.gdxzExpert.service.UpdateService" + .equals(service.service.getClassName())) { + return true; + } + } + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingZhiboFeedbackActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingZhiboFeedbackActivity.java new file mode 100644 index 0000000..71f0b3f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SettingZhiboFeedbackActivity.java @@ -0,0 +1,216 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Build; +import android.os.Handler; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.KeDaXunFeiUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 我的-设置-意见反馈 + * + * @author susanyuan + * + */ + +public class SettingZhiboFeedbackActivity extends BaseActivity implements + OnClickListener { + + private Button bt_submit; + private EditText et_feedbook; + private String content; + boolean isCommen = false; + private String name, text; + private String expert_uuid = ""; + private Button mBt_get_Voice; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_zhibo_feedbook); + et_feedbook = (EditText) view.findViewById(R.id.et_feedbook); + mBt_get_Voice = (Button) view.findViewById(R.id.bt_get_voice); + + mBt_get_Voice.setOnClickListener(this); + // 字数限制的 + // et_feedbook.addTextChangedListener(tw); + bt_submit = (Button) view.findViewById(R.id.bt_submit); + bt_submit.setOnClickListener(this); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("会议信息"); + + } + + /** + * 提交反馈的信息 submit + * + * void + */ + public void submit() { + content = et_feedbook.getText().toString().trim(); + if (TextUtils.isEmpty(content)) { + ToastUtil.showToast("请输入反馈意见"); + return; + } + expertUuid = SharePrefUtil.getString(ct, Constant.uuid, null); + showProgressDialog("提交反馈中..."); + new Thread() { + public void run() { + + try { + List parameters = new ArrayList(); + // 封装参数名称和参数值 + BasicNameValuePair value01 = new BasicNameValuePair( + "content", content); + BasicNameValuePair value02 = new BasicNameValuePair( + "expertUuid", expertUuid); + // 把参数放到list中 + parameters.add(value01); + parameters.add(value02); + HttpResult httpResult = HttpHelper.post(Url.getfeedBack, + parameters); + + String result = httpResult.getString(); + JSONObject jsob = new JSONObject(result); + String retcode = jsob.getString("code"); + if (retcode.equals("1")) { + handler.sendEmptyMessage(99); + } else { + handler.sendEmptyMessage(101); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(101); + } + }; + }.start(); + } + + @SuppressLint("HandlerLeak") + public Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + closeProgressDialog(); + switch (msg.what) { + case 99: + ToastUtil.showToast("我们已收到您的反馈,感谢您对我们的支持。"); + finish(); + break; + case 101: + ToastUtil.showToast("提交失败,请重试"); + break; + } + }; + }; + + private String expertUuid; + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.bt_submit: // 提交 + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + submit(); + break; + case R.id.bt_get_voice: + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + VoiceUtil = new KeDaXunFeiUtil(SettingZhiboFeedbackActivity.this, + et_feedbook); + } else { + EasyWindow.with(SettingZhiboFeedbackActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + VoiceUtil = new KeDaXunFeiUtil(SettingZhiboFeedbackActivity.this, + et_feedbook); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + VoiceUtil = new KeDaXunFeiUtil(SettingZhiboFeedbackActivity.this, + et_feedbook); + } + + break; + default: + break; + } + } + + KeDaXunFeiUtil VoiceUtil; + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + if (VoiceUtil != null) { + VoiceUtil.dissDialog(); + } + + super.onDestroy(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangActivity.java new file mode 100644 index 0000000..48ba0b4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangActivity.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.github.gzuliyujiang.wheelpicker.DatePicker; +import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; +import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity; +import com.github.gzuliyujiang.wheelpicker.widget.DateWheelLayout; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class SuifangActivity extends BaseActivity implements OnDatePickedListener { + + + + @Override + public void setTitle() { + top_title.setText("随访详情"); + + } + LinearLayout l_yigan; + TextView tv_bir; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_suifang); + l_yigan=view.findViewById(R.id.l_yigan); + l_yigan.setOnClickListener(this); + tv_bir=view.findViewById(R.id.tv_bir); + view.findViewById(R.id.l_flex).setOnClickListener(this); + view.findViewById(R.id.l_base).setOnClickListener(this); + view.findViewById(R.id.l_ct).setOnClickListener(this); + view.findViewById(R.id.group).setOnClickListener(this); + view.findViewById(R.id.hbdna).setOnClickListener(this); + view.findViewById(R.id.l_bio).setOnClickListener(this); + + + return view; + } + public void onYearMonth(View view) { + DatePicker picker = new DatePicker(this); + picker.setBodyWidth(240); + DateWheelLayout wheelLayout = picker.getWheelLayout(); + wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.today(), DateEntity.today()); + wheelLayout.setDateMode(DateMode.YEAR_MONTH); + wheelLayout.setDateLabel("年", "月", ""); + picker.setOnDatePickedListener(this); + picker.show(); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.l_base: + onYearMonth(v); + break; + case R.id.l_bio: + Intent intent12=new Intent(SuifangActivity.this,BiochemistryActivity.class); + startActivity(intent12); + break; + case R.id.hbdna: + Intent intent11=new Intent(SuifangActivity.this,HbvdnaActivity.class); + startActivity(intent11); + break; + case R.id.group: + Intent intent10=new Intent(SuifangActivity.this,PatientGroupActivity.class); + startActivity(intent10); + break; + case R.id.l_flex: + Intent intent0=new Intent(SuifangActivity.this,FibroActivity.class); + startActivity(intent0); + break; + case R.id.l_ct: + Intent intent2=new Intent(SuifangActivity.this,CtActivity.class); + startActivity(intent2); + break; + case R.id.l_yigan: + Intent intent1=new Intent(SuifangActivity.this,PastHistoryActivity.class); + intent1.putExtra("title","用药方案"); + startActivity(intent1); + break; + + } + } + + @Override + public void onDatePicked(int year, int month, int day) { + double y=0,m=0; + if(month>DateEntity.today().getMonth()) + { + y=DateEntity.today().getYear()-year-1; + m=(12-(month-DateEntity.today().getMonth()))/12.00; + } + else + { + y=DateEntity.today().getYear()-year; + m=(DateEntity.today().getMonth()-month)/12.00; + } + + tv_bir.setText(year+"-"+month+"("+String.format("%.2f", y+m)+"年"+")"); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangNewActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangNewActivity.java new file mode 100644 index 0000000..9ee2578 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SuifangNewActivity.java @@ -0,0 +1,588 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.content.Intent; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.adapter.SuifangAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.ChildTree; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.SuifagnBean; +import cn.shangyu.gdxzExpert.bean.TreeBean; +import cn.shangyu.gdxzExpert.bean.TreeDetailBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm5; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +public class SuifangNewActivity extends BaseActivity { + + + + @Override + public void setTitle() { + + } + LinearLayout classicsFooter,Footer; + SmartRefreshLayout refreshLayout; + RecyclerView recyclerView; + SuifangAdapter suifangAdapter; + List list=new ArrayList<>(); + String suifangId,type; + TextView tv_bir; + String key,patientcaseId; + String title; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_suifang_new); + tv_bir=view.findViewById(R.id.tv_bir); + view.findViewById(R.id.l_base).setOnClickListener(this); + recyclerView=view.findViewById(R.id.lv_item_c); + refreshLayout=view.findViewById(R.id.refreshLayout); + classicsFooter=view.findViewById(R.id.r_head); + Footer=view.findViewById(R.id.r_foot); +// list= (List) getIntent().getSerializableExtra("tree"); + title=getIntent().getStringExtra("title"); + top_title.setText(title); + suifangId=getIntent().getStringExtra("suifangId"); + type=getIntent().getStringExtra("type"); + key=getIntent().getStringExtra("key"); + patientcaseId=getIntent().getStringExtra("patientcaseId"); + initdata(); +// settAdapter(); + + gettrees(); + onYearMonth(); + + + return view; + } + + @Override + protected void onResume() { + super.onResume(); + if(patientcaseId!=null) + { + + gettrees(); + } + + } + + public void initdata() + { + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(SuifangNewActivity.this); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + recyclerView.addItemDecoration(new SpaceItemDecoration(0,10)); + refreshLayout.setEnableNestedScroll(true); + refreshLayout.setEnableLoadMore(false); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(SuifangNewActivity.this,null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(SuifangNewActivity.this,null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayout.refreshing(); + + + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayoutNew.refreshing(); +// settAdapter(); + gettrees(); + + + } + + + }); + + } + + private void settAdapter() + { +// refreshLayout.finishRefresh(); + if(suifangAdapter==null) + { + suifangAdapter=new SuifangAdapter(SuifangNewActivity.this,list); + recyclerView.setAdapter(suifangAdapter); + suifangAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + if((list.get(position).getKey()+"").contains("SUIFANGMEDICENSHOW")) + { + Intent intent1=new Intent(SuifangNewActivity.this,PastHistoryActivity.class); + intent1.putExtra("title","用药方案"); + intent1.putExtra("yongyaoId",list.get(position).getApiId()); + intent1.putExtra("type",type); + startActivity(intent1);; + } + else if((list.get(position).getKey()+"").contains("SUIFANGGROUPSHOW")) + { + if(suifagnBean.getData()!=null) + { + Intent intent1=new Intent(SuifangNewActivity.this,PatientGroupActivity.class); + intent1.putExtra("yongyaoId",list.get(position).getApiId()); + intent1.putExtra("patientgroup",suifagnBean.getData().getPatientgroup()); + intent1.putExtra("patientcaseId",suifagnBean.getData().getPatientcaseId()); + intent1.putExtra("type",type); + intent1.putExtra("suifangId",suifagnBean.getData().getSuifangId()); + startActivity(intent1); + } + else + { + ToastUtil.showToast("暂无分组"); + } + + } + else if((list.get(position).getKey()+"").contains("SUIFANGHBVSYMBOLSHOW")) + { + Intent intent1=new Intent(SuifangNewActivity.this,HbvdnaActivity.class); + intent1.putExtra("hbvSymbolId",list.get(position).getApiId()); + intent1.putExtra("type",type); + startActivity(intent1);; + } + else if((list.get(position).getKey()+"").contains("SUIFANGLIVERFUNCTIONSHOW")) + { + Intent intent1=new Intent(SuifangNewActivity.this,BiochemistryActivity.class); + intent1.putExtra("liverFunctionId",list.get(position).getApiId()); + intent1.putExtra("dataStatus",list.get(position).getDataStatus()); + startActivity(intent1);; + } + else if((list.get(position).getKey()+"").contains("SUIFANGCTSHOW")) + { + Intent intent1=new Intent(SuifangNewActivity.this,CtActivity.class); + intent1.putExtra("ctId",list.get(position).getApiId()); + intent1.putExtra("dataStatus",list.get(position).getDataStatus()); + intent1.putExtra("type",type); + startActivity(intent1);; + } + else if((list.get(position).getKey()+"").contains("SUIFANGLIVERELASTICITYSHOW")) + { + Intent intent1=new Intent(SuifangNewActivity.this,FibroActivity.class); + intent1.putExtra("liverElasticityId",list.get(position).getApiId()); + intent1.putExtra("dataStatus",list.get(position).getDataStatus()); + startActivity(intent1);; + } + + } + }); + } + else + { + suifangAdapter.notifyDataSetChanged(); + } + + + + } + SuifagnBean suifagnBean; + private void gettree() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.suifanggetDetail+suifangId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + refreshLayout.finishRefresh(); + if(hasrealtoken(response)>0) + { + suifagnBean= GsonTools.fromGsonToBean(response, SuifagnBean.class); + if(suifagnBean.getData().getSuifangDate()!=null) + { + if(title.contains("基线")) + { + tv_bir.setText(suifagnBean.getData().getSuifangDate()); + } + else + { + tv_bir.setText(suifagnBean.getData().getSuifangDate() + +"("+ DateUtil.gettimeBydate(suifagnBean.getData().getSuifangDate(),birthdayPost1)+"年"+")"); + } + inittime=DateUtil.str2Date(suifagnBean.getData().getSuifangDate(), "yyyy-MM-dd"); + pwTime.setTime(inittime); + } + else + { + tv_bir.setText("请选择随访时间"); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifanggetDetail); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + + + } + TreeBean treeBean; + private List data=new ArrayList<>(); + private void gettrees() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token"+token); + String url = Url.getPatientcaseTree+patientcaseId; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + refreshLayout.finishRefresh(); + if(hasrealtoken(response)>0) + { + treeBean=GsonTools.fromGsonToBean(response, TreeBean.class); + if(treeBean.getData()!=null) + { + data.clear(); + data.addAll(treeBean.getData()); + list.clear(); + for (TreeDetailBean treeDetailBean:data) + { + if(key.equals(treeDetailBean.getKey())) + { + list.addAll(treeDetailBean.getChildren()); + settAdapter(); + } + else if(treeDetailBean.getKey()!=null&&treeDetailBean.getKey().contains("JIXIANDATESHOW")) + { + birthdayPost1=treeDetailBean.getSuifangDate(); + } + } + gettree(); + } + + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.getPatientcaseTree); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(SuifangNewActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.suifanggetDetail)) + { + gettree(); + } + else if(url.contains(Url.getPatientcaseTree)) + { + gettrees(); + } + + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.l_base: + pwTime.showAtLocation(v, Gravity.BOTTOM, 0, 0); + + break; + } + } + private String birthdayPost="",birthdayPost1=""; + private TimePopupWindow pwTime; + /** + * 实例化时间选择器,与选择时间回调 bottomSelectDate + * + * void + */ + Date inittime=new Date(); + private void onYearMonth() { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY);; + pwTime.setTime(inittime); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR); + // 设置标题 + pwTime.setPopupTitle("请选择报告时间"); + // 设置起始时间 + pwTime.setRange(1900, year); + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + + if (DateUtil.isDateOneBigger1( DateUtil.date2Str(date, "yyyy-MM-dd"), DateUtil.date2Str(new Date(), "yyyy-MM-dd"))){ + ToastUtil.showMessage("随访时间不能大于今天"); + return; + } + inittime=date; + pwTime.setTime(inittime); + birthdayPost = DateUtil.date2Str(date, "yyyy-MM-dd"); + if(title.contains("基线")) + { + tv_bir.setText(birthdayPost); + } + else + { + tv_bir.setText(birthdayPost + +"("+ DateUtil.gettimeBydate(birthdayPost,birthdayPost1)+"年"+")"); + } + + suifangupdate(); + + } + }); + } + private void suifangupdate() + { + projectQueryForm5 pro=new projectQueryForm5(); + pro.setPatientcaseId(suifagnBean.getData().getPatientcaseId()); + pro.setSuifangId(suifangId); + pro.setSuifangDate(birthdayPost); + + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(Url.suifangupdate) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.suifangupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(SuifangNewActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageActivity.java new file mode 100644 index 0000000..d5797cc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageActivity.java @@ -0,0 +1,505 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.annotation.SuppressLint; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.MessageListBean; +import cn.shangyu.gdxzExpert.bean.MessageListBean.MessageList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import static cn.shangyu.gdxzExpert.utils.Url.readAll; + +/** + * + * @author ssy Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:首页-系统消息 + */ + +public class SystemMessageActivity extends BaseActivity implements + OnItemClickListener, OnItemLongClickListener, OnCallBackFromNet { + + // listview控件 + private PullToRefreshListView ptrLv; + // 处理正在加载,空,错误的布局 + private TextView load_empty; + private ArrayList MessageList = new ArrayList(); + private String getmessageList = Url.getmessageList; + private MessageAdapter msgAdapter; + private HttpHandler httpHandler; + public static int ERROR = 101; + public static final int READALL = 103; + public static int REQUEST_REFRESH = 102; + private String deleteUuid = null; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("我的消息"); + + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_system_message, null); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_message); + + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + load_empty.setText("暂无系统消息"); + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.getRefreshableView().setOnItemLongClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + // 下拉刷新 + getMessageList(getmessageList, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + + } + }); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("一键已读"); + top_right_text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + readAll(); + } + }); + + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + // 取消所有的状态栏通知 +// ECNotificationManager.getInstance().forceCancelNotification(); + } + private void readAll() + { + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(readAll,param,READALL,this); + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + String result = SharePrefUtil.getString(ct, getmessageList, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + // 显示加载框 + showProgressDialog("正在加载"); + } + getMessageList(getmessageList, true); + } + + // 设置刷新时间 + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + // 刷新完成 + private void onLoaded() { + closeProgressDialog(); + ptrLv.onRefreshComplete(); + } + + /** + * 请求网络,获取消息的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getMessageList(final String loadUrl, final boolean isRefresh) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + "uuid", ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // CustomToast.show(ct, "加载失败,请稍后再试", 1); + onLoaded(); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + closeProgressDialog(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + // 解析json数据 + MessageListBean bean = GsonTools.fromGsonToBean(result, + MessageListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + ptrLv.setEmptyView(load_empty); + return; + } + // 初始化列表数据 + MessageList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + } else { + load_empty.setVisibility(View.GONE); + for (int i = 0; i < bean.data.size(); i++) { + if ("1".equals(bean.data.get(i).receiveType)) {// 1.专家 2.患者 + MessageList.add(bean.data.get(i)); + } + } + // MessageList.addAll(bean.data); + } + // 实例化适配器 + msgAdapter = new MessageAdapter(ct, MessageList); + ptrLv.setAdapter(msgAdapter); + + // 完成 + onLoaded(); + } + + public class MessageAdapter extends BaseAdapter { + + private Context context; + private List List; + + public MessageAdapter(Context context, + ArrayList messageList) { + this.context = context; + this.List = messageList; + } + + @Override + public int getCount() { + return List.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View + .inflate(context, R.layout.item_message, null); + mHolder = new NewsViewHolder(); + mHolder.tv_title = (TextView) convertView + .findViewById(R.id.tv_title);// 标题 + mHolder.tv_type = (TextView) convertView + .findViewById(R.id.tv_type);// 类型 + mHolder.tv_content = (TextView) convertView + .findViewById(R.id.tv_content);// 内容 + mHolder.tv_date = (TextView) convertView + .findViewById(R.id.tv_date);// 日期 + mHolder.iv_msg = (ImageView) convertView + .findViewById(R.id.iv_msg);// 图片logo + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + MessageList msg = List.get(position); + String type = ""; + if ("1".equals(msg.type)) {// 1.电话咨询提醒 2.门诊预约提醒 3.包月定制提醒消息 + type = "(电话咨询)"; + mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); + } else if ("2".equals(msg.type)) { + type = "(门诊预约)"; + mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); + } else if ("3".equals(msg.type)) { + type = "(按月定制)"; + mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); + } else if ("4".equals(msg.type)) { + type = "(鲜花服务)"; + mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); + } else if ("5".equals(msg.type)) { + type = "(申请通知)"; + mHolder.iv_msg + .setImageResource(R.drawable.icon_system_doc_patient1); + } + // else if ("7".equals(msg.type)) { + // type = "(订单通知)"; + // mHolder.iv_msg.setImageResource(R.drawable.icon_system_doctor); + // } + else { + type = "(系统消息)"; + mHolder.iv_msg.setImageResource(R.drawable.icon_system_notice1); + } + mHolder.tv_type.setText(type); + mHolder.tv_title.setText(msg.title); + mHolder.tv_content.setText(msg.content); + + if (!TextUtils.isEmpty(msg.sendDate) && msg.sendDate.length() >= 16) { + mHolder.tv_date.setText(msg.sendDate.substring(0, 10)); + } else if (!TextUtils.isEmpty(msg.sendDate)) { + mHolder.tv_date.setText(msg.sendDate); + } + + // 判断当前这条消息是否已经读过 + String readIDArray = SharePrefUtil.getString(context, + Constant.READ_MSG_ID_ARRAY_KEY, null); + if (!TextUtils.isEmpty(readIDArray) + && readIDArray.contains(msg.uuid + msg.title)) { + mHolder.tv_title.setTextColor(Color.GRAY); + mHolder.tv_content.setTextColor(Color.GRAY); + mHolder.tv_type.setTextColor(Color.GRAY); + } else { + if (msg.isRead.equals("1")) { + mHolder.tv_title.setTextColor(Color.GRAY); + mHolder.tv_content.setTextColor(Color.GRAY); + mHolder.tv_type.setTextColor(Color.GRAY); + } else { + mHolder.tv_title.setTextColor(Color.BLACK); + mHolder.tv_content.setTextColor(Color.BLACK); + mHolder.tv_type.setTextColor(Color.BLACK); + } + + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private NewsViewHolder mHolder = null; + + private class NewsViewHolder { + public ImageView iv_msg; + public TextView tv_date; + public TextView tv_content; + public TextView tv_type; + public TextView tv_title; + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + position = position + - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + + String messageUuid = MessageList.get(position).uuid; + String title = MessageList.get(position).title; + String content = MessageList.get(position).content; + String sendDate = MessageList.get(position).sendDate; + // 把当前被点击的这条新闻的id存起来 1#2#3#4 + String readMsgIDArray = SharePrefUtil.getString(ct, + Constant.READ_MSG_ID_ARRAY_KEY, null); + String idArray = null; + if (TextUtils.isEmpty(readMsgIDArray)) { + // 唯一标示id,采用uuid与标题 + idArray = messageUuid + title; + } else { + idArray = readMsgIDArray + "#" + messageUuid + title; + } + SharePrefUtil.saveString(ct, Constant.READ_MSG_ID_ARRAY_KEY, idArray); + + // 通知ListView刷新 + msgAdapter.notifyDataSetChanged(); + String ms = MessageList.get(position).content; + Boolean mHave = ms.contains("申请成为您的随访患者");// 是否包含“申请成为您的随访患者” + // 如果返回的状态是5 添加好友申请点击item跳转的相应位置 + if (MessageList.get(position).type.equals("5") && mHave == true) { + Intent intent = new Intent(ct, NewPatientActivity.class); + startActivity(intent); + } else { + Intent intent = new Intent(ct, SystemMessageDetailActivity.class); + intent.putExtra("messageUuid", messageUuid); + intent.putExtra("title", title); + intent.putExtra("content", content); + intent.putExtra("sendDate", sendDate); + startActivity(intent); + } + // ToastUtil.showToast("消息详情:"+MessageList.get(position).uuid); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + position = position + - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + + deleteUuid = MessageList.get(position).uuid; + @SuppressLint({"StringFormatInvalid", "LocalSuppress"}) final ECListDialog dialog = new ECListDialog( + SystemMessageActivity.this, new String[] { getString( + R.string.message_delete, "") }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + DeleteMessage(); + dialog.dismiss(); + } + }); + dialog.setTitle("删除此系统消息"); + dialog.show(); + return true; + } + + public void DeleteMessage() { + Map param = new HashMap(); + param.put("uuid", deleteUuid); + sendParamtoNet(Url.getDeleteMessage, param, 101, + SystemMessageActivity.this, true); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) + { + case 101: + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (bean.code.equals("1")) { + for (int i = 0; i < MessageList.size(); i++) { + if (deleteUuid.equals(MessageList.get(i).uuid)) { + MessageList.remove(i); + msgAdapter.notifyDataSetChanged(); + } + } + if (MessageList.size() == 0) { + ptrLv.setEmptyView(load_empty); + } + } else { + ToastUtil.showMessage(bean.message); + } + break; + case READALL: + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(resultJson); + String message = jsonObject.getString("message"); + ToastUtil.showMessage(message); + initData(); + } catch (JSONException e) { + e.printStackTrace(); + + ToastUtil.showMessage("获取失败,请重试"); + } + + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageDetailActivity.java new file mode 100644 index 0000000..5faf8d6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/SystemMessageDetailActivity.java @@ -0,0 +1,164 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MessageListDetailBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 注意: 系统消息详细界面, 与我的-我发布消息-消息详情共用 + * + * 类名称:SystemMessageDetailActivity 类描述:TODO 创建人:苏三元 时间:2015-12-15 下午2:21:09 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class SystemMessageDetailActivity extends BaseActivity { + + private TextView tv_content; +// private TextView tv_title; + private TextView tv_msg_date; + private String getMessageDetail = Url.getMessageDetail; + private String messageUuid; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("消息详情"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_system_message_detail); + tv_msg_date = (TextView) view.findViewById(R.id.tv_msg_date);// 时间 +// tv_title = (TextView) view.findViewById(R.id.tv_title);// 标题 + tv_content = (TextView) view.findViewById(R.id.tv_content);// 内容 + initData(); + return view; + } + + // 获取数据 + private void initData() { + // TODO Auto-generated method stub + Intent intent = getIntent(); + messageUuid = intent.getStringExtra("messageUuid"); + // String title = intent.getStringExtra("title"); + String content = intent.getStringExtra("content"); + String sendDate = intent.getStringExtra("sendDate"); + + // if (!TextUtils.isEmpty(sendDate) && sendDate.length() >= 16) { + // tv_msg_date.setText(sendDate.substring(0, 16)); + // }else if(!TextUtils.isEmpty(sendDate)){ + // tv_msg_date.setText(sendDate); + // } + if (!TextUtils.isEmpty(sendDate)) { + tv_msg_date.setText(sendDate); + } else { + tv_msg_date.setText(""); + } + + // if (!TextUtils.isEmpty(title)) { + // tv_title.setText(title); + // } + // 判断是否为空 + if (!TextUtils.isEmpty(content)) { + tv_content.setText(getResources().getString( + R.string.activity_sysMsgDetail_content, content)); + } else { + tv_content.setText(getResources().getString( + R.string.activity_sysMsgDetail_content, "")); + } + + // showProgressDialog("加载中..."); + getMessageDetail(getMessageDetail); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + + return ResultState.STATE_SUCCESSED; + + } + + /** + * 请求网络,暂时无用 ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getMessageDetail(String loadUrl) { + RequestParams params = new RequestParams(); + params.addBodyParameter("messageUuid", messageUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("加载失败,请稍候再试"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + // 解析json数据 + MessageListDetailBean bean = GsonTools.fromGsonToBean(result, + MessageListDetailBean.class); + // 数据为空 + if (bean.data != null) { + if (!StringUtil.isEmpty(bean.data.sendDate) + && bean.data.sendDate.length() >= 16) { + tv_msg_date.setText(bean.data.sendDate.substring(0, 16)+""); + } else if (!StringUtil.isEmpty(bean.data.sendDate)) { + tv_msg_date.setText(bean.data.sendDate+""); + } + +// if (!StringUtil.isEmpty(bean.data.title)) { +// tv_title.setText(bean.data.title+""); +// } + + if (!StringUtil.isEmpty(bean.data.content)) { + tv_content.setText(bean.data.content+""); + } + } + closeProgressDialog(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TelephoneConsultationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TelephoneConsultationActivity.java new file mode 100644 index 0000000..1eaf28c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TelephoneConsultationActivity.java @@ -0,0 +1,486 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean.DataFee; +import cn.shangyu.gdxzExpert.bean.MonthDetailBean.DataTime; +import cn.shangyu.gdxzExpert.ecdemo.ui.SettingItem; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ssy + * @date 2015-8-31 下午2:47:47 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的-服务设置-电话咨询 + */ +public class TelephoneConsultationActivity extends BaseActivity { + + + private TextView tv_howLong; + private EditText et_ten_price; + private EditText et_twenty_price; + private SettingItem m_consultation; + public static final int RESILTCODE = 99; + + private String price = ""; + private String howLong = ""; + private String isEnable = ""; + //电话咨询服务查看 + public static String callServiceDetailUrl=Url.getcallServiceDetail; + //电话服务设置1(价格、人次等设置) + public static String callServiceFeeUrl=Url.getcallServiceFee; + //电话服务设置2(时间设置) + public static String callServiceTimeUrl=Url.getcallServiceTime; + private String callWeek = ""; + private String startDate = ""; + private String hl = ""; + private Button bt_ok; + private LinearLayout m_service; + private String startDateArr = ""; + + @Override + public void setTitle() { + top_title.setText("电话咨询"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_telephone_consultation); + m_consultation = (SettingItem) view.findViewById(R.id.switch_telephone_consultation);//是否开启服务 + et_ten_price = (EditText) view.findViewById(R.id.et_ten_price);//10分钟价格 + et_twenty_price = (EditText) view.findViewById(R.id.et_twenty_price);//20分钟价格 + m_service = (LinearLayout) view.findViewById(R.id.rl_setting_howLong); + tv_howLong = (TextView) view.findViewById(R.id.tv_howLong);//服务时段回显 + bt_ok = (Button) view.findViewById(R.id.bt_ok); + + //初始化是否开启 + boolean isOpen = SharePrefUtil.getBoolean(ct, "Telephone_m_consultation", false); + m_consultation.setChecked(isOpen); + //是否开启服务 + m_consultation.getCheckedTextView().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + m_consultation.toggle(); + if (m_consultation.isChecked()) { + setEnable(true); + operaterVIP(1); + } else { + setEnable(false); + operaterVIP(0); + } + } + }); + //初始化是否选中 + if (m_consultation.isChecked()) { + setEnable(true); + }else{ + setEnable(false); + } + + m_service.setOnClickListener(this); + bt_ok.setOnClickListener(this); + + //从sp里取出缓存 + String monthDetail = SharePrefUtil.getString(ct, callServiceDetailUrl, null); + if (!TextUtils.isEmpty(monthDetail)) { + processData(monthDetail, true, 0, true); + }else{ + showProgressDialog("正在加载"); + } + // showProgressDialog("加载中..."); + //查看服务设置 + lookAndSetMonth(callServiceDetailUrl, true, 0, false); + + return view; + } + + /** + * 设置未选中则禁止输入 + * setEnable + * + * @param isEnable + * void + */ + private void setEnable(boolean isEnable){ +// et_ten_price.setEnabled(isEnable); +// et_twenty_price.setEnabled(isEnable); +// bt_ok.setEnabled(isEnable); +// m_service.setEnabled(isEnable); + if (isEnable) { + bt_ok.setVisibility(View.VISIBLE); + }else{ + bt_ok.setVisibility(View.GONE); + } + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.bt_ok: + //确定提交设置 + submitSetting(); + break; + case R.id.rl_setting_howLong: + // 服务时段 + Intent intent = new Intent(ct, SelectDateTimeActivity.class); + intent.putExtra("callWeek", callWeek);//把获取的星期几传过去 + intent.putExtra("startDate", startDateArr);//把选择的时间传过去,以便回显设置的时间 + LogUtil.i("callWeek = "+callWeek+", startDate = "+startDateArr); + startActivityForResult(intent, RESILTCODE); + break; + default: + break; + } + } + + /** + * 修改设置提交 + * submitSetting + * + * void + */ + private void submitSetting() { + String ten_price = et_ten_price.getText().toString();//价格 + String twenty_price = et_twenty_price.getText().toString();//次数 + if (m_consultation.isChecked()) { + isEnable = "1";//开启 + }else{ + isEnable = "0";//关闭 + } + if (TextUtils.isEmpty(ten_price) || TextUtils.isEmpty(twenty_price)) { + ToastUtil.showToast("请输入价格"); + return ; + } + if (Double.parseDouble(ten_price) >= Double.parseDouble(twenty_price)) { + ToastUtil.showToast("10分钟的电话咨询价格不可以大于或者等于20分钟的电话咨询价格!"); + return ; + } + if (0 > Double.parseDouble(ten_price)) { + ToastUtil.showToast("价格最小0元"); + return ; + } + if (100000 < Double.parseDouble(ten_price)) { + ToastUtil.showToast("价格最大100000元"); + return ; + } + if (0 > Double.parseDouble(twenty_price)) { + ToastUtil.showToast("价格最小0元"); + return ; + } + if (100000 < Double.parseDouble(twenty_price)) { + ToastUtil.showToast("价格最大100000元"); + return ; + } + if (TextUtils.isEmpty(callWeek) && TextUtils.isEmpty(startDate)) { + ToastUtil.showToast("请设置电话咨询时间"); + return ; + } + showProgressDialog("提交中..."); + //价格 (多个价格以逗号隔开) 必填 + price = ten_price + "," + twenty_price; + //时长 (多个以逗号隔开,与价格一一对应)必填 + howLong = "10,20";//这里按照页面的是10分钟,20分钟,写死,如果以后更改分钟,请注意。 + //价格、人次等设置 + lookAndSetMonth(callServiceFeeUrl, false, 1, false); + } + + private void lookAndSetMonth(final String loadUrl, final boolean isLook, final int type, final boolean isCache) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + if (isLook && 0 == type) {//判断是查看服务,还是设置服务 + params.addBodyParameter("expertUuid", expertUuid); + }else if (!isLook && 1 == type) {//价格,人次设置 + params.addBodyParameter("price", price); + params.addBodyParameter("howLong", howLong); + params.addBodyParameter("isEnable", isEnable); + params.addBodyParameter("expertUuid", expertUuid); + }else if (!isLook && 2 == type) {//时间设置 + //取出电话咨询uuid + String callServiceUuid = SharePrefUtil.getString(ct, "callServiceUuid",""); + params.addBodyParameter("callWeek", callWeek); + params.addBodyParameter("startDate", startDate); + params.addBodyParameter("callServiceUuid", callServiceUuid); + } + //请求数据 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (isCache) { + SharePrefUtil.saveString(ct, callServiceDetailUrl, info.result); + }else{ + processData(info.result, isLook, type, false); + } + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("请求失败,请稍候再试"); + } + }); + } + + //解析数据 + protected void processData(String result, boolean isLook, int type, boolean isCache) { + MonthDetailBean bean = GsonTools.fromGsonToBean(result,MonthDetailBean.class); + //判断是查看还是修改 + if (isLook) { + SharePrefUtil.saveString(ct, callServiceDetailUrl, result); + closeProgressDialog(); + if ("1".equals(bean.code)) {//查询成功 + if (bean.data != null && !isCache) { + if (1 == bean.data.isEnable) {//是否开启,1是,0否 + m_consultation.setChecked(true); + }else{ + m_consultation.setChecked(false); + } + SharePrefUtil.saveBoolean(ct, "Telephone_m_consultation", m_consultation.isChecked()); + } + //价格 + List fee = bean.fee; + if (fee != null && fee.size() > 0) { + for (int i = 0; i < fee.size(); i++) { + int hl = fee.get(i).howLong; + // int price = Integer.parseInt(fee.get(i).price); + int price = (int) Math.round(Double.parseDouble(fee.get(i).price)); + switch (hl) { + case 10://10分钟的价格 + + et_ten_price.setText(price+""); + break; + case 20://20分钟的 + et_twenty_price.setText(price+""); + break; + + default: + break; + } + } + } + LogUtil.i("bean.data====="+result); + //时间 + List time = bean.time; + tv_howLong.setText(""); + callWeek = ""; + startDate = ""; + if (time != null && time.size() > 0) { + for (int i = 0; i < time.size(); i++) { + String cw = time.get(i).callWeek; + String w = ""; + if (!TextUtils.isEmpty(cw)) { + callWeek += cw + ","; + switch (Integer.parseInt(cw)) { + case 1: + w = "星期日 "; + break; + case 2: + w = "星期一 "; + break; + case 3: + w = "星期二 "; + break; + case 4: + w = "星期三 "; + break; + case 5: + w = "星期四 "; + break; + case 6: + w = "星期五 "; + break; + case 7: + w = "星期六 "; + break; + } + } + String sd = time.get(i).startDate; + String ed = time.get(i).endDate; + String m = sd + "-" + ed; + startDate += m + ";"; + startDateArr += "#" + sd + ";"; + //查看的回显 + if (i == time.size() - 1) { + tv_howLong.append(w+m); + }else{ + tv_howLong.append(w + m + ","); + } + } + } + //如果返回的code是 3 说明该服务已经被禁用 radiobutton禁用 + }else if("3".equals(bean.code)){ + SharePrefUtil.saveString(ct, callServiceDetailUrl, null); + m_consultation.setChecked(false); + m_consultation.setEnabled(false); + ToastUtil.showMessage(bean.message, 1); + } + } else {//修改设置 + if ("1".equals(bean.code)) {//设置成功 + if (1 == type) { + //时间设置 + //保存电话uuid到sp + MonthDetailBean b = GsonTools.fromGsonToBean(result,MonthDetailBean.class); + SharePrefUtil.saveString(ct, "callServiceUuid",b.data.uuid); + if (1 == bean.data.isEnable) {//是否开启,1是,0否 + SharePrefUtil.saveBoolean(ct, "Telephone_m_consultation", true); + }else{ + SharePrefUtil.saveBoolean(ct, "Telephone_m_consultation", false); + } + lookAndSetMonth(callServiceTimeUrl, false, 2, false); + }else if (2 == type) { + closeProgressDialog(); + ToastUtil.showToast("设置成功"); + lookAndSetMonth(callServiceDetailUrl, true, 0, true); + } + }else{ + closeProgressDialog(); + ToastUtil.showToast(bean.message); + } + } + + //初始化是否选中 + if (m_consultation.isChecked()) { + setEnable(true); + }else{ + setEnable(false); + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + LogUtil.i("onActivityResult=="+requestCode+"==="+resultCode+"=="+data); + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == RESILTCODE && data != null && resultCode == Activity.RESULT_OK) { + startDate = ""; + callWeek = ""; + startDateArr = ""; + hl = ""; + String[] Date = data.getStringArrayExtra("startDates"); + String[] Week = data.getStringArrayExtra("callWeeks"); + String[] weeks = data.getStringArrayExtra("weeks"); + String[] DateArr = data.getStringArrayExtra("DateArr"); + //时间(与星期对应,以分号分隔,如当天设置多个时段,时段之间以逗号分隔。 + //如周日8:00-9:00,13:00-15:00 周一8:00-15:00 周二 13:00-15:00, + //传参格式为”8:00-9:00,13:00-15:00;8:00-15:00;13:00-15:00;”) + for (int i = 0; i < Date.length; i++) { + if (!TextUtils.isEmpty(Date[i])) { + Date[i] = Date[i].substring(0, Date[i].length() - 1); + startDate += Date[i] + ";"; + hl += weeks[i] + Date[i]; + startDateArr += DateArr[i] + ";"; + } + LogUtil.i("Date=="+Date[i] + "startDateArr="+ startDateArr); + } + //遍历星期,并以星期 (多天以逗号分隔,如周日、周一、周二,传参格式为”1,2,3”)传参 + for (int i = 0; i < Week.length; i++) { + if (!TextUtils.isEmpty(Week[i])) { + callWeek += Week[i] + ","; + } + LogUtil.i("Week=="+Week[i]); + } + + LogUtil.i("callWeek = "+callWeek+", startDate = "+startDate); + //回显 + tv_howLong.setText(hl); + } + } + + /** + * 服务是否开启 + */ + private void operaterVIP(int type) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + params.addBodyParameter("VIPType", String.valueOf(1)); + params.addBodyParameter("operaterType", String.valueOf(type)); + LogUtil.d("expertUuid = " + expertUuid + ", VIPType = 1" + ", operaterType = " + type); + showProgressDialog("操作中..."); + HttpHelper.loadData(HttpMethod.POST, Url.operaterVIP, params, new RequestCallBack() { + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + // ToastUtil.showToast(arg1); + LogUtil.d("onFailure = " + arg1); + m_consultation.toggle(); + setEnable(false); + SharePrefUtil.saveBoolean(ct, "Telephone_m_consultation", m_consultation.isChecked()); + } + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + LogUtil.d("onSuccess = " + info.result); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + if (retcode.equals(String.valueOf(1))) { + //ToastUtil.showToast("开启成功!"); + } else if (retcode.equals(String.valueOf(3))) { + //ToastUtil.showToast("关闭成功"); + setEnable(false); + //如果返回状态是5 说明该专家所在医院或地区限制开启服务 默认关闭该服务 + } else if (retcode.equals(String.valueOf(5))){ + ToastUtil.showToast(message); + m_consultation.toggle(); + setEnable(false); + m_consultation.setEnabled(false); + }else{ + ToastUtil.showToast(message); + m_consultation.toggle(); + setEnable(false); + } + SharePrefUtil.saveBoolean(ct, "Telephone_m_consultation", m_consultation.isChecked()); + } catch (JSONException e) { + e.printStackTrace(); + // ToastUtil.showToast("提交失败!"); + m_consultation.toggle(); + setEnable(false); + SharePrefUtil.saveBoolean(ct, "Telephone_m_consultation", m_consultation.isChecked()); + } + } + }); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationActivity.java new file mode 100644 index 0000000..5385959 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationActivity.java @@ -0,0 +1,1568 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.base.BaseFragment.mActivity; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.provider.MediaStore; +import android.text.Editable; +import android.text.InputType; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.Spinner; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.github.gzuliyujiang.wheelpicker.DatePicker; +import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; +import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity; +import com.github.gzuliyujiang.wheelpicker.widget.DateWheelLayout; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.ArrayAdapterNew; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.adapter.TermAdapterNew; +import cn.shangyu.gdxzExpert.adapter.endpointImgBean; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.YearsBean; +import cn.shangyu.gdxzExpert.bean.endpoing; +import cn.shangyu.gdxzExpert.bean.endpoingetDetailBean; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.SimpleTextWatcher; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class TerminationActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + + private String baseinfoDataStatus; + + @Override + public void setTitle() { + top_title.setText("主要终点事件"); + + } + LinearLayout classicsFooter,Footer; + SmartRefreshLayout refreshLayout; + RecyclerView recyclerView; + TermAdapterNew adapter; + ArrayAdapterNew adapter1; + List type= new ArrayList<>(); + String patientcaseId,endpointImgId; + View ll_empty; + + + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + View view; + TextView new_suifang; + + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.activity_termination1); + new_suifang=view.findViewById(R.id.new_suifang); + new_suifang.setOnClickListener(this); + view.findViewById(R.id.change_data).setOnClickListener(this); + ll_empty=view.findViewById(R.id.ll_empty); + recyclerView=view.findViewById(R.id.lv_item_c); + refreshLayout=view.findViewById(R.id.refreshLayout); + classicsFooter=view.findViewById(R.id.r_head); + Footer=view.findViewById(R.id.r_foot); + initView(); + initdata(); + patientcaseId=getIntent().getStringExtra("patientcaseId"); + birthdayPost1=getIntent().getStringExtra("jixiantime"); + setadapter(); + view.findViewById(R.id.add).setOnClickListener(this); + gettokens(Url.endpoingetDetail); + return view; + } + + private void initView() { + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(TerminationActivity.this, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + public List imgs= new ArrayList<>();; + public void initdata() + { + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(TerminationActivity.this); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + recyclerView.addItemDecoration(new SpaceItemDecoration(0,10)); + refreshLayout.setEnableNestedScroll(true); + refreshLayout.setEnableLoadMore(false); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(TerminationActivity.this,null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(TerminationActivity.this,null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayout.refreshing(); + + + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + + tweenAnimLoadingLayoutNew.refreshing(); + gettokens(Url.endpoingetDetail); + + + } + + + }); + + } + private void setadapter() + { + type.add("表面抗原阴转"); + type.add("表面抗原复阳"); + type.add("代偿性肝硬化"); + type.add("失代偿期肝硬化"); + type.add("肝癌"); + type.add("其他恶性肿瘤"); + type.add("死亡"); + type.add("失访"); + type.add("戒酒"); + type.add("戒酒后复饮"); + type.add("请选择发生的终点事件"); + adapter1 = new ArrayAdapterNew(ct, + R.layout.spinner_item, type); + adapter1.setDropDownViewResource(R.layout.drop_down_layout_new); + + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.add: + showwindow(); + break; + case R.id.new_suifang: + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认保存新的信息?"); + } + },300); + break; + case R.id.change_data: + hideSoftKeyboard(); + v.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认本数据项已全部完成?"); + } + },300); + break; + } + + + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(TerminationActivity.this, content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(content.contains("保存")) + { + sendpre(); + hideSoftKeyboard(); + } + else{ + baseinfoDataStatus="2"; + sendpre(); + hideSoftKeyboard(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + public void showwindow() + { + + EasyWindow easyWindow=EasyWindow.with(TerminationActivity.this); + View content=easyWindow + .setContentView(R.layout.float_end_dialog) + .getContentView(); + Spinner spinner_car=content.findViewById(R.id.sp); + spinner_car.setAdapter(adapter1); + //默认选中最后一项 + spinner_car.setSelection(type.size()-1); + LinearLayout l_time=content.findViewById(R.id.l_time); + LinearLayout l_name=content.findViewById(R.id.l_name); + EditText name=content.findViewById(R.id.name); + TextView tv_bir=content.findViewById(R.id.tv_bir); + TextView tv_time2=content.findViewById(R.id.tv_time2); + LinearLayout ll_time=content.findViewById(R.id.ll_time); + YearsBean bean=new YearsBean(R.id.year2,R.id.month2,R.id.t2,0,0); + ((EditText)content.findViewById(bean.getEditText())).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)content.findViewById(bean.getEditText())).addTextChangedListener(new SimpleTextWatcher() + { + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + bean.setYs1(Integer.valueOf(editable.toString())) ; + } + else + { + bean.setYs1(0); + } + setyear(content,bean.getT1(),bean.getYs1(),bean.getMs1()); + } + }); + ((EditText)content.findViewById(bean.getEditText2())).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)content.findViewById(bean.getEditText2())).addTextChangedListener(new SimpleTextWatcher() + { + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + bean.setMs1(Integer.valueOf(editable.toString())); ; + } + else + { + bean.setMs1(0); + } + setyear(content,bean.getT1(),bean.getYs1(),bean.getMs1()); + } + }); + + l_time.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + hideSoftKeyboard(view); +// onYearMonth(l_time,tv_bir); + onYearMonth(tv_bir); + pwTime.showAtLocation(tv_bir, Gravity.BOTTOM, 0, 0); + + } + }); + spinner_car.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { + @Override + public void onItemSelected(AdapterView adapterView, View view, int i, long l) { + hideSoftKeyboard(view); + eventType=type.get(i); + ll_time.setVisibility(View.GONE); + tv_time2.setVisibility(View.GONE); + l_name.setVisibility(View.GONE); + l_time.setVisibility(View.VISIBLE); + if("其他恶性肿瘤".equals(eventType)) + { + + updatetime(tv_bir); + + l_name.setVisibility(View.VISIBLE); + } + else + { + if("请选择发生的终点事件".equals(eventType)) + { + l_time.setVisibility(View.GONE); + } + else + { + updatetime(tv_bir); + if("戒酒".equals(eventType)|| + "戒酒后复饮".equals(eventType) ) + { + if("戒酒".equals(eventType)) + { + tv_time2.setText("已戒酒时间"); + } + else + { + tv_time2.setText("已复饮时间"); + } + ll_time.setVisibility(View.VISIBLE); + tv_time2.setVisibility(View.VISIBLE); + } + + } + } + + + } + + @Override + public void onNothingSelected(AdapterView adapterView) { + + } + }); + easyWindow.setGravity(Gravity.CENTER) + + .setBackgroundDimAmount(0.8f) + .setOutsideTouchable(false) + . setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + hideSoftKeyboard(view); + if(StringUtil.isEmpty(eventType)||eventType.contains("终点事件")) + { + ToastUtil.showToast("终点事件不能为空"); + return; + } + if(StringUtil.isEmpty(birthdayPost)) + { + ToastUtil.showToast("报告时间不能为空"); + return; + } + if(eventType.contains("戒酒")||eventType.contains("戒酒后复饮")) + { + + if(!StringUtil.isEmpty(((TextView)content.findViewById(R.id.t2)).getText().toString())) + { + notes=((TextView)content.findViewById(R.id.t2)).getText().toString() + .replace("(","") .replace(")",""); + } + + } + if(eventType.contains("其他恶性肿瘤")) + { + if(name.getText()!=null) + { + notes=name.getText().toString(); + } + if(StringUtil.isEmpty(notes)) + { + ToastUtil.showToast("肿瘤名称不能为空"); + return; + } + } + window.cancel(); + endpoingetadd(); + } + }) + .setOnClickListener(R.id.btn_cancel, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + hideSoftKeyboard(view); + notes=""; + window.cancel(); + + + } + }) + + .show(); + + + + } + private void setyear(View view1,int id,int y1,int mon1) + { + ((TextView)view1.findViewById(id)).setText("("+String.format("%.2f", y1+mon1/12.00)+"年"+")"); + } + + /** + * hide inputMethod + */ + public void hideSoftKeyboard(View localView) { + InputMethodManager inputMethodManager = (InputMethodManager) ct + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + public String birthdayPost="",eventType="",notes="",birthdayPost1=""; + private TimePopupWindow pwTime; + /** + * 实例化时间选择器,与选择时间回调 bottomSelectDate + * + * void + */ + private void onYearMonth(TextView textView) { + // 时间选择器 + pwTime = new TimePopupWindow(this, TimePopupWindow.Type.YEAR_MONTH_DAY);; + pwTime.setTime(new Date()); + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR); + // 设置标题 + pwTime.setPopupTitle("请选择报告时间"); + // 设置起始时间 + pwTime.setRange(1900, year); + // 时间选择后回调 + pwTime.setOnTimeSelectListener(new TimePopupWindow.OnTimeSelectListener() { + + @Override + public void onTimeSelect(Date date) { + + if (DateUtil.isDateOneBigger1( DateUtil.date2Str(date, "yyyy-MM-dd"), DateUtil.date2Str(new Date(), "yyyy-MM-dd"))){ + ToastUtil.showMessage("报告时间不能大于今天"); + return; + } + birthdayPost = DateUtil.date2Str(date, "yyyy-MM-dd"); + + updatetime(textView); + + + } + }); + } + public void updatetime(TextView textView) + { + if(StringUtil.isEmpty(birthdayPost)||textView==null) + { + return; + } + if("戒酒".equals(eventType)|| + "戒酒后复饮".equals(eventType) ){ + textView.setText(birthdayPost); + } + else + { + textView.setText(birthdayPost + +"("+ DateUtil.gettimeBydate(birthdayPost,birthdayPost1)+"年"+")"); + } + } + + public void onYearMonth1(View view,TextView textView) { + DatePicker picker = new DatePicker(this); + picker.setBodyWidth(240); + DateWheelLayout wheelLayout = picker.getWheelLayout(); + wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.today(), DateEntity.today()); + wheelLayout.setDateMode(DateMode.YEAR_MONTH_DAY); + wheelLayout.setDateLabel("年", "月", "日"); + picker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + double y=0,m=0; + if(month>DateEntity.today().getMonth()) + { + y=DateEntity.today().getYear()-year-1; + m=(12-(month-DateEntity.today().getMonth()))/12.00; + } + else + { + y=DateEntity.today().getYear()-year; + m=(DateEntity.today().getMonth()-month)/12.00; + } + textView.setText(year+"-"+month+"("+String.format("%.2f", y+m)+"年"+")"); + } + }); + picker.show(); + } + endpoingetDetailBean endpoingetDetailBean; + List data=new ArrayList<>(); + private void endpoingetDetail() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + String url1 = Url.endpoingetDetail+patientcaseId; + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + OkHttpUtils + .get() + .url(url1) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); +// ll_empty.setVisibility(View.GONE); + refreshLayout.finishRefresh(); +// ptr.onRefreshComplete(); + if(hasrealtoken(response)>0) + { + endpoingetDetailBean= GsonTools.fromGsonToBean(response, endpoingetDetailBean.class); + if(endpoingetDetailBean.getData()!=null) + { + if(endpoingetDetailBean.getData().getList().size()==0) + { +// ll_empty.setVisibility(View.VISIBLE); +// ptr.setEmptyView(ll_empty); + } + hindledata(); + } + else + { +// ll_empty.setVisibility(View.VISIBLE); +// ptr.setEmptyView(ll_empty); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.endpoingetDetail); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + + public void endpoingetdelete(String endpointId) + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.endpoingetdelete+endpointId; + OkHttpUtils + .get() + .url(url1) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + endpoingetDetail(); + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.endpoingetdelete); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + private void endpoingetadd() + { + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + endpoing pro=new endpoing(); + pro.setPatientcaseId(patientcaseId); + pro.setEventType(eventType); + pro.setReportDate(birthdayPost); + pro.setNotes(notes); + String url1 = Url.endpoingetadd; + OkHttpUtils + .postString() + .url(url1) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + notes=""; + birthdayPost=""; + eventType=""; + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + notes=""; + birthdayPost=""; + eventType=""; + endpoingetDetail(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.endpoingetadd); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + notes=""; + birthdayPost=""; + eventType=""; + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void hindledata() + { + data.clear(); + data.addAll(endpoingetDetailBean.getData().getList()); + + if(adapter==null) + { + adapter =new TermAdapterNew(TerminationActivity.this,data); + adapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + + } + }); + recyclerView.setAdapter(adapter); + } + else + { + adapter.notifyDataSetChanged(); + } + imgs.clear(); + mBitmaps.clear(); + endpointImgId=endpoingetDetailBean.getData().getEndpointImg().getEndpointImgId(); + if(endpoingetDetailBean.getData().getEndpointImg().getImgPath()!=null&&endpoingetDetailBean.getData().getEndpointImg().getImgPath().size()>0) + { + imgs.addAll(endpoingetDetailBean.getData().getEndpointImg().getImgPath()); + } + if(endpoingetDetailBean.getData().getEndpointImg().getImgPath()!=null) + { + for(imBean urlBean:endpoingetDetailBean.getData().getEndpointImg().getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(TerminationActivity.this,new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.endpoingetDetail)) + { + endpoingetDetail(); + } + else if(url.contains(Url.endpoingetadd)) + { + endpoingetadd(); + } + else if(url.contains(Url.endpointImgupdate)) + { + updatedata(); + } + else + { + endpoingetdelete(url); + } + + } + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(TerminationActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(TerminationActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(TerminationActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(TerminationActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(TerminationActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(TerminationActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(TerminationActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(TerminationActivity.this, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(TerminationActivity.this,new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(TerminationActivity.this, + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(TerminationActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + if(!StringUtil.isEmpty(mBitmaps.get(position).getPath())) + { + Glide.with(TerminationActivity.this).asBitmap().load(mBitmaps.get(position).getPath()) + .apply(new RequestOptions().error(R.drawable.home_scroll_default)) + .into(view); + } + else + { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + TerminationActivity.this, "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(this.getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + + private void sendpre() + { + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { + + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(TerminationActivity.this,ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { + endpointImgBean imgBean=new endpointImgBean(); + imgBean.setPatientcaseId(patientcaseId); + imgBean.setEndpointImgId(endpointImgId); + if(baseinfoDataStatus!=null) + { + imgBean.setDataStatus(baseinfoDataStatus); + } + + imgBean.setImgPath(imgs); + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + + OkHttpUtils + .postString() + .url(Url.endpointImgupdate) + .headers(headers) + .content(new Gson().toJson(imgBean)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + + if(hasrealtoken(response)>0) + { + finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.endpointImgupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + + + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationDetailActivity.java new file mode 100644 index 0000000..3dce7dd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TerminationDetailActivity.java @@ -0,0 +1,86 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.github.gzuliyujiang.wheelpicker.DatePicker; +import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; +import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity; +import com.github.gzuliyujiang.wheelpicker.widget.DateWheelLayout; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class TerminationDetailActivity extends BaseActivity { + + + @Override + public void setTitle() { + + } + LinearLayout l_name; + String name; + TextView tv_bir; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.activity_termination_detail); + l_name=view.findViewById(R.id.l_name); + name=getIntent().getStringExtra("name"); + top_title.setText(name); + if("其他恶性肿瘤".equals(name)) + { + l_name.setVisibility(View.VISIBLE); + } + tv_bir=view.findViewById(R.id.tv_bir); + tv_bir.setOnClickListener(this); + return view; + } + + public void onYearMonth(View view) { + DatePicker picker = new DatePicker(this); + picker.setBodyWidth(240); + DateWheelLayout wheelLayout = picker.getWheelLayout(); + wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.today(), DateEntity.today()); + wheelLayout.setDateMode(DateMode.YEAR_MONTH); + wheelLayout.setDateLabel("年", "月", ""); + picker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + double y=0,m=0; + if(month>DateEntity.today().getMonth()) + { + y=DateEntity.today().getYear()-year-1; + m=(12-(month-DateEntity.today().getMonth()))/12.00; + } + else + { + y=DateEntity.today().getYear()-year; + m=(DateEntity.today().getMonth()-month)/12.00; + } + + tv_bir.setText(year+"-"+month+"("+String.format("%.2f", y+m)+"年"+")"); + } + }); + picker.show(); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.tv_bir: + onYearMonth(v); + break; + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingActivity.java new file mode 100644 index 0000000..f8a986e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingActivity.java @@ -0,0 +1,271 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.ListView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TestingBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class TestingActivity extends BaseActivity implements OnCallBackFromNet, + OnItemClickListener { + private View view; + // private LinearLayout mLabel_one_news; + private View topNewsView; + private TestingActivity mActivity; + private LinearLayout dotLl; + private LinearLayout mViewPagerLay; + private ArrayList urlList; + private RollViewPager mViewPager; + private ArrayList dotList; + private ListView mLv_testing; + private TestingAdapter mAdapter; + private LinearLayout ll_hos_select; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝病检测"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_testing); + mActivity = this; + // mLabel_one_news = (LinearLayout) + // view.findViewById(R.id.label_news);// 初始化RadioGroup布局 + mLv_testing = (ListView) view.findViewById(R.id.lv_testing); + topNewsView = UIUtils.inflate(R.layout.layout_roll_testing_view); + dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); + ll_hos_select = (LinearLayout) topNewsView + .findViewById(R.id.ll_hos_select); + mViewPagerLay = (LinearLayout) topNewsView + .findViewById(R.id.top_news_viewpager); + // newsAdapter = new NewsAdapter(mActivity); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = mActivity.getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ll_hos_select.setVisibility(View.GONE); + ivLp.width = width; + ivLp.height = height; + mAdapter = new TestingAdapter(); + mViewPagerLay.setLayoutParams(ivLp); + mLv_testing.setOnItemClickListener(this); + getNewsList(); + return view; + } + + public final int GET_SCOLL_RESULT = 101; + + private void getNewsList() { + Map param = new HashMap(); + sendParamtoNet(Url.getDetectionIndex, param, GET_SCOLL_RESULT, + mActivity, false); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + // case R.id.iv_testing_1: + + // } + // + // break; + + default: + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + } + + TestingBean bean; + + private void processData(String result) { + // TODO Auto-generated method stub + bean = GsonTools.fromGsonToBean(result, TestingBean.class);// + + if (!StringUtil.isOneToCode(bean.code)) { + if (bean.roll != null && bean.roll.size() > 0) { + urlList = new ArrayList(); + for (int i = 0; i < bean.roll.size(); i++) { + if (!TextUtils.isEmpty(bean.roll.get(i).getImgpath())) { + urlList.add(Url.urlHtml + bean.roll.get(i).getImgpath());// //封面图片 + } else { + urlList.add(""); + } + } + // 轮播图的点 + initDot(bean.roll.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent = new Intent(mActivity, + TestingUrlDetailActivity.class); + intent.putExtra("title", bean.roll + .get(position).getTitle()); + intent.putExtra("imageurl", bean.roll + .get(position).getImgpath()); + intent.putExtra("url", bean.roll.get(position) + .getPath()); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + mLv_testing.addHeaderView(topNewsView); + } + + mLv_testing.setAdapter(mAdapter); + + } + + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + @Override + public void onStop() { + // TODO Auto-generated method stub + if (mViewPager != null) { + mViewPager.stopRunning(); + } + super.onStop(); + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + int headerViewsCount = mLv_testing.getHeaderViewsCount(); + int position=arg2-headerViewsCount; + Intent intent = new Intent(mActivity, TestingDetailActivity.class); + intent.putExtra("title", bean.type_2.get(position).getTitle()); + intent.putExtra("id", bean.type_2.get(position).getId()); + intent.putExtra("call", bean.type_2.get(position).getContact()); + startActivity(intent); + } + + public class TestingAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return bean.type_2.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return bean.type_2.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.item_testing_lv); + + ImageView image = (ImageView) view.findViewById(R.id.iv_testing); + ImageLoader.getInstance().displayImage( + Url.urlHtml + bean.type_2.get(arg0).getImgpath(), + image, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default)); + return view; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingDetailActivity.java new file mode 100644 index 0000000..2d19cce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingDetailActivity.java @@ -0,0 +1,254 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.HashMap; +import java.util.Map; + +import androidx.annotation.NonNull; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TestingDetailBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class TestingDetailActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private View view; + TestingDetailActivity mActivity; + private int id; + private String call; + private LinearLayout mBt_call; + private GridView mGv_testing; + private TestGvAdapter mAdapter; + String title; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + title = getIntent().getStringExtra("title"); + id = getIntent().getIntExtra("id", 0); + call = getIntent().getStringExtra("call"); + top_title.setText(title); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_testing_detail); + mActivity = this; + mBt_call = (LinearLayout) view.findViewById(R.id.bt_testing_call); + mGv_testing = (GridView) view.findViewById(R.id.gv_testing); + initListener(); + getNewsList(); + return view; + } + + private void initListener() { + // TODO Auto-generated method stub + mBt_call.setOnClickListener(this); + mGv_testing.setOnItemClickListener(this); + } + + public static final int GET_TESTING_DETAIL_RESULT = 101; + + private void getNewsList() { + Map param = new HashMap(); + param.put("id", id + ""); + sendParamtoNet(Url.getDetectionContent, param, + GET_TESTING_DETAIL_RESULT, mActivity, false); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + + case R.id.bt_testing_call: + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(this, Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + network(); + } else { + PermissionsUtil.requestPermission(this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + //用户授予了访问摄像头的权限 + network(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + network(); + } + + break; + + default: + break; + } + } + + private ECAlertDialog buildAlert; + + private void network() { + // TODO Auto-generated method stub + buildAlert = ECAlertDialog.buildAlert(mActivity, "确定拨打电话?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + try { + // TODO Auto-generated method stub + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_CALL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:" + call)); + startActivity(intent); + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + + } + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + processData(resultJson); + } + + TestingDetailBean bean; + + public void processData(String result) { + bean = GsonTools.fromGsonToBean(result, TestingDetailBean.class);// 测试的NewsListBean + if (bean != null && bean.data != null) { + if (!bean.code.equals("1")) { + ToastUtil.showMessage(bean.message); + return; + } + if (mAdapter == null) { + mAdapter = new TestGvAdapter(); + } + mGv_testing.setAdapter(mAdapter); + } else { + ToastUtil.showMessage("服务器异常"); + } + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, TestingUrlDetailActivity.class); + intent.putExtra("title", title); + intent.putExtra("url", bean.data.get(arg2).getPath()); + intent.putExtra("imageurl", bean.data.get(arg2).getImgpath()); + startActivity(intent); + } + + public class TestGvAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return bean.data.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return bean.data.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.item_testing_detail); + ImageView image = (ImageView) view.findViewById(R.id.iv_testing); + View view_white = view.findViewById(R.id.v_testing_white); + if (arg0 == 0 || arg0 == 1) { + view_white.setVisibility(View.VISIBLE); + } else { + view_white.setVisibility(View.GONE); + } + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + bean.data.get(arg0).getImgpath(), + image, + ImageOptions + .getImageOptions(R.drawable.testing_detail_default)); + return view; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingUrlDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingUrlDetailActivity.java new file mode 100644 index 0000000..87b1414 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TestingUrlDetailActivity.java @@ -0,0 +1,213 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.graphics.Bitmap; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +//import com.umeng.socialize.net.r; +//import com.umeng.socialize.sso.UMSsoHandler; + +/** + * 功能说明: + * + * @author 详细新闻页面 NewsDetailActivity + */ + +public class TestingUrlDetailActivity extends BaseActivity implements + OnClickListener { + // private static final long serialVersionUID = 5952689219411916553L; + private String url; + private String title; + private X5WebView mWebView; + private WebSettings settings; + private TestingUrlDetailActivity ctx; + private String imageurl; + private View view; + private String summary; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_news_detail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + ctx = this; + loadingView = view.findViewById(R.id.loading_view); + loadfailView = (LinearLayout) view.findViewById(R.id.ll_load_fail); + + showLoadingView(); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + url = getIntent().getStringExtra("url"); + // url = "http://www.hep-druginteractions.org/checker"; + title = getIntent().getStringExtra("title"); + imageurl = Url.urlHtml; + if (!TextUtils.isEmpty(title)) { + top_title.setText(title); + } + + dealNewsDetail(); + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + + private void dealNewsDetail() { + // mWebView.setInitialScale(25); + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT);//LOAD_NO_CACHE,LOAD_DEFAULT +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + WebChromeClient wvcc = new WebChromeClient() { + @Override + public void onReceivedTitle(WebView view, String title) { + super.onReceivedTitle(view, title); + TestingUrlDetailActivity.this.title = title; + } + + }; + // 设置setWebChromeClient对象 + mWebView.setWebChromeClient(wvcc); + loadurl(mWebView, url); + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + case R.id.top_right: + share(); + break; + } + + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = title; + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + + summary = "首医肝病转化医学研究所|肝胆相照平台联合肝病检测"; + + if (TextUtils.isEmpty(imageurl)) { + imageurl = ""; + } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageurl); + ShareUtils.shareUmeng(ct, shareTitle, summary, msgSinaContent, + imageurl, shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + @Override + public void finish() { + + super.finish(); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + //释放资源 + if (mWebView != null) + mWebView.destroy(); + super.onDestroy(); + UMShareAPI.get(this).release(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/Text.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/Text.java new file mode 100644 index 0000000..82dad1c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/Text.java @@ -0,0 +1,19 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Activity; +import android.os.Bundle; +import android.os.PersistableBundle; + +import androidx.annotation.Nullable; + +/** + * Created by wangchengxin on 2018/11/2. + */ + +public class Text extends Activity { + + @Override + public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) { + super.onCreate(savedInstanceState, persistentState); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TicketDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TicketDetailActivity.java new file mode 100644 index 0000000..dd7dc59 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TicketDetailActivity.java @@ -0,0 +1,653 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat; +import static cn.shangyu.gdxzExpert.utils.StringUtil.getYen; +import static cn.shangyu.gdxzExpert.utils.StringUtil.isEmpty; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; +import static cn.shangyu.gdxzExpert.utils.Url.addExcellencourseOrderInvoice; +import static cn.shangyu.gdxzExpert.utils.Url.getExcellencourseOrderInvoice; +import static cn.shangyu.gdxzExpert.utils.Url.updateExcellencourseOrderInvoice; +import static cn.shangyu.gdxzExpert.utils.ValidateUtils.isTaxNumber; +import static cn.shangyu.gdxzExpert.utils.ValidateUtils.isValidEmail; + +import android.Manifest; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.FapiaoBean; +import cn.shangyu.gdxzExpert.bean.TicketDetailBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.WFBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class TicketDetailActivity extends BaseActivity implements OnCallBackFromNet { + + + private FapiaoAdapter adapter; + + @Override + public void setTitle() { + + + } + RelativeLayout r_tips,r_tips1,r_tips2; + EditText title,num,emails; + TextView yun,tv_sub,tv_not,tv_ok1,tv_down,tv_tip; + String uuidStr; + double price; + LinearLayout l_t; + String amount,head,tax_number,email,id,status; + PullToRefreshListView ptrLv; + List data=new ArrayList<>(); + ImageView i_d,i_d1,i_d2; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view= UIUtils.inflate(R.layout.activity_ticket_detail); + + r_tips=view.findViewById(R.id.r_tips); + r_tips1=view.findViewById(R.id.r_tips1); + title=view.findViewById(R.id.title); + tv_not=view.findViewById(R.id.tv_not); + tv_ok1=view.findViewById(R.id.tv_ok1); + l_t=view.findViewById(R.id.l_t); + tv_not.setOnClickListener(this); + tv_ok1.setOnClickListener(this); + num=view.findViewById(R.id.num); + emails=view.findViewById(R.id.email); + tv_sub=view.findViewById(R.id.tv_sub); + tv_down=view.findViewById(R.id.tv_down); + r_tips2=view.findViewById(R.id.r_tips2); + tv_tip=view.findViewById(R.id.tv_tip); + yun=view.findViewById(R.id.yun); + i_d=view.findViewById(R.id.i_d); + i_d1=view.findViewById(R.id.i_d1); + i_d2=view.findViewById(R.id.i_d2); + i_d.setOnClickListener(this); + i_d1.setOnClickListener(this); + i_d2.setOnClickListener(this); + ptrLv = (PullToRefreshListView)view.findViewById(R.id.lv_item_c); + r_tips.setOnClickListener(this); + tv_sub.setOnClickListener(this); + r_tips2.setOnClickListener(this); + id=getIntent().getStringExtra("id"); + if (!StringUtil.isEmpty(id)) { + top_title.setText("开票详情"); + status=getIntent().getStringExtra("status"); + switch (status) + { + case "0": + tv_down.setText("开票中"); + title.setKeyListener(null); + num.setKeyListener(null); + emails.setKeyListener(null); + i_d.setVisibility(View.GONE); + i_d1.setVisibility(View.GONE); + i_d2.setVisibility(View.GONE); + break; + case "1": + title.setKeyListener(null); + num.setKeyListener(null); + emails.setKeyListener(null); + tv_down.setText("下载发票"); + i_d.setVisibility(View.GONE); + i_d1.setVisibility(View.GONE); + i_d2.setVisibility(View.GONE); + + break; + case "2": + i_d.setVisibility(View.VISIBLE); + i_d1.setVisibility(View.VISIBLE); + i_d2.setVisibility(View.VISIBLE); + tv_down.setText("提交"); + r_tips2.setVisibility(View.VISIBLE); + } + tv_sub.setVisibility(View.GONE); + l_t.setVisibility(View.VISIBLE); + getTicket(id); + } + else + { + + top_title.setText("填写发票信息"); + top_right1.setImageResource(R.drawable.fapaio_tip); + l_t.setVisibility(View.GONE); + top_right1.setVisibility(View.VISIBLE); + tv_sub.setVisibility(View.VISIBLE); + top_right1.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + r_tips.setVisibility(View.VISIBLE); + } + }); + + uuidStr=getIntent().getStringExtra("uuidStr"); + price=getIntent().getDoubleExtra("price",0.0); + amount=(int) (price*100)+""; + yun.setText(getYen()+String.format("%.2f",price)); + } + + tv_down.setOnClickListener(this); + return view; + } + private void getTicket(String id) + { + + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("id",id); + sendJsonPostParamtoNetSignMD5(getExcellencourseOrderInvoice,param,102,this); + + } + + private void addTicket(String amount,String head,String tax_number,String email,String uuidStr) + { + + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("amount",amount); + param.put("head",head); + param.put("tax_number",tax_number); + param.put("email",email); + param.put("uuidStr",uuidStr); + sendJsonPostParamtoNetSignMD5(addExcellencourseOrderInvoice,param,101,this); + + } + private void updateTicket(String head,String tax_number,String email,String id) + { + + showLoadingProgress(); + Map param = new HashMap<>(); + param.put("head",head); + param.put("tax_number",tax_number); + param.put("email",email); + param.put("id",id); + sendJsonPostParamtoNetSignMD5(updateExcellencourseOrderInvoice,param,103,this); + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id. i_d: + emails.setText(""); + break; + case R.id. i_d1: + num.setText(""); + break; + case R.id. i_d2: + title.setText(""); + break; + + case R.id.tv_down: + if("开票中".equals(tv_down.getText().toString())) + { + ToastUtil.showToast("开票中"); + return; + } + if("提交".equals(tv_down.getText().toString())) + { + + if(!isEmpty(title.getText().toString()) + &&isTaxNumber(num.getText().toString()) + &&isValidEmail(emails.getText().toString())) + { + head=title.getText().toString().trim(); + tax_number=num.getText().toString().trim(); + email=emails.getText().toString().trim(); + r_tips1.setVisibility(View.VISIBLE); + } + else + { + if(isEmpty(title.getText().toString())) + { + ToastUtil.showToast("发票抬头不能为空"); + } + else if(!isTaxNumber(num.getText().toString())) + { + ToastUtil.showToast("税号格式不正确"); + } + else if(!isValidEmail(emails.getText().toString())) + { + + ToastUtil.showToast("邮件格式不正确"); + } + + } + } + else + { + int downloadState = BookDownloadSqlManager.getDownloadState(ticketDetailBean.getData().getId()); + if (downloadState == 2) { + tv_down.setText("查看发票"); + // 如果已下载,取出该指南的本地路径 + String downloadFilePath = BookDownloadSqlManager + .getDownloadFilePath(ticketDetailBean.getData().getId()); + if (!TextUtils.isEmpty(downloadFilePath)) { + // 路径不为空,打开该指南 + openFile(downloadFilePath,ticketDetailBean.getData().getId()); + } else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(ticketDetailBean.getData().getId()); + tv_down.setText("下载发票"); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } + else + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(TicketDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + downloadPdf(ticketDetailBean.getData().getDown_url(),ticketDetailBean.getData().getId()); + } else { + EasyWindow.with(TicketDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(TicketDetailActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + downloadPdf(ticketDetailBean.getData().getDown_url(),ticketDetailBean.getData().getId()); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + downloadPdf(ticketDetailBean.getData().getDown_url(),ticketDetailBean.getData().getId()); + } + + } + + } + break; + case R.id.r_tips2: + r_tips2.setVisibility(View.GONE); + break; + case R.id.tv_ok1: + r_tips1.setVisibility(View.GONE); + if(!StringUtil.isEmpty(status)) + { + updateTicket(head,tax_number,email,id); + }else + { + addTicket(amount,head,tax_number,email,uuidStr); + } + + break; + case R.id.tv_not: + r_tips1.setVisibility(View.GONE); + break; + case R.id.tv_sub: + + if(!isEmpty(title.getText().toString()) + &&isTaxNumber(num.getText().toString()) + &&isValidEmail(emails.getText().toString())) + { + head=title.getText().toString().trim(); + tax_number=num.getText().toString().trim(); + email=emails.getText().toString().trim(); + r_tips1.setVisibility(View.VISIBLE); + } + else + { + if(isEmpty(title.getText().toString())) + { + ToastUtil.showToast("发票抬头不能为空"); + } + else if(!isTaxNumber(num.getText().toString())) + { + ToastUtil.showToast("税号格式不正确"); + } + else if(!isValidEmail(emails.getText().toString())) + { + + ToastUtil.showToast("邮件格式不正确"); + } + + } + break; + case R.id.r_tips: + r_tips.setVisibility(View.GONE); + break; + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + TicketDetailBean ticketDetailBean; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 103: + case 101: + + try { + JSONObject jsonObject=new JSONObject(resultJson); + dismissLoadingProgress(); + ToastUtil.showToast(jsonObject.getString("message")); + if("200".equals(jsonObject.getString("code"))) + { + finish(); + } + + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 102: + closeProgressDialog(); + ticketDetailBean = GsonTools.fromGsonToBean(resultJson, TicketDetailBean.class); + if ("200".equals(ticketDetailBean.getCode())) { + data.clear(); + if (ticketDetailBean.getData() == null || ticketDetailBean.getData().getExcellencourseList() == null) { +// // 显示空布局 +// ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(ticketDetailBean.getData().getExcellencourseList()); + } + + + if (adapter == null) { + adapter = new FapiaoAdapter(TicketDetailActivity.this,data); + + ptrLv.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + onLoaded(); + + tv_tip.setText(ticketDetailBean.getData().getNote()+""); + title.setText(ticketDetailBean.getData().getHead()); + num.setText(ticketDetailBean.getData().getTax_number()); + yun.setText(fenGetYuanFormat(ticketDetailBean.getData().getAmount())); + emails.setText(ticketDetailBean.getData().getEmail()); + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(ticketDetailBean.getMessage() + ""); + } + break; + } + + } + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + public class FapiaoAdapter extends BaseAdapter { + List data; + private ViewHolder holder; + Context context; + public FapiaoAdapter(Context context,List data) + { + this.data=data; + this.context=context; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + holder=null; + if(view==null) + { + view = UIUtils.inflate(R.layout.fapiao_tiem); + holder =new ViewHolder(); + + + holder.tv_n=view.findViewById(R.id.tv_n); + holder.tv_rpr=view.findViewById(R.id.tv_rpr); + holder.cb_f=view.findViewById(R.id.cb_f); + holder.im_j=view.findViewById(R.id.im_j); + + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } +// checkBoxes.add( holder.cb_f); + holder.cb_f.setBackground(context.getResources().getDrawable(R.drawable.nochoose)); + holder.cb_f.setEnabled(false); + holder.tv_n.setText(data.get(position).getExcellencourse_title()); + holder.tv_rpr.setText("实际支付:"+fenGetYuanFormat(data.get(position).getAccount())); + + ImageLoader.getInstance().displayImage( + data.get(position).getExcellencourse_img(),holder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + + return view; + } + public class ViewHolder + { + + CheckBox cb_f; + CircularRectangle im_j; + TextView tv_rpr; + TextView tv_n; + + + } + + } + + + /** + * 下载文件 + * downloadPdf + * @param position + * @param holder + * + * @param path + * void + * @param title + */ +// private String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() +// + "/gdxzExpert/download/发票/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/发票/"; + private HttpHandler hand; + + + + protected void downloadPdf(final String url, final String name) { + // TODO Auto-generated method stub + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + final String path = filePath + name + ".pdf"; + //下载的路径,及app安装包的命名 + //*************************************************** + + hand = http.download(url, path, + false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + @Override + public void onStart() { + + ToastUtil.showToast("开始下载"+name); + } + + @Override + public void onLoading(long total, long current, + boolean isUploading) { +// // +// if ((int) holder.iv_down.getTag() == position) { +// //异步显示 +// holder.iv_down.setVisibility(View.GONE); +// // holder.tv_down.setText(progress[position]+"%"); +// holder.tv_down.setText("下载中"); +// holder.tv_down.setVisibility(View.VISIBLE); +// } + } + + @Override + public void onSuccess(ResponseInfo responseInfo) { + ToastUtil.showToast("下载完成!"); + //插入 + DownloadModel downloadModel = new DownloadModel(ticketDetailBean.getData().getId()); + downloadModel.setFilePath(path); + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager.insertDownload(downloadModel); + tv_down.setText("查看发票"); + //打开文件 + // openFile(path); + } + + + @Override + public void onFailure(HttpException error, String msg) { + ToastUtil.showToast(name+"下载失败!"); + LogUtil.i("下载失败msg = "+msg+",error = "+error.getExceptionCode()+","+error.getMessage()); + + //maybe the file has downloaded completely + // if (msg.contains("maybe the file has downloaded completely")) { + // + // } + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + /** + * 打开文件 openFile + * + * @param path + * @param listUuid + * void + * @param + */ + public void openFile(final String path, String listUuid) { + File file = new File(path); + if(path.contains(Constant.OldfilePath)) + { + WFBookDownloadSqlManager.delDownladInfo(listUuid); + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + LogUtil.i("listUuid=" + listUuid); + ToastUtil.showToast("文件已删除,请重新下载!"); + return; + } +// String fileMD5 = TikaUtil.getFileMD5(file); +// LogUtil.e("fileMD5 = "+fileMD5); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","发票详情"); + startActivity(intent1); + }else{ + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } + } else { // 文件不存在,则进行把此数据从数据库清除 + + WFBookDownloadSqlManager.delDownladInfo(listUuid); + Intent intent = getIntent(); + setResult(RESULT_OK, intent); + LogUtil.i("listUuid=" + listUuid); + ToastUtil.showToast("文件已删除,请重新下载!"); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ToolsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ToolsActivity.java new file mode 100644 index 0000000..eae7e18 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ToolsActivity.java @@ -0,0 +1,4921 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.graphics.Color; +import android.os.Bundle; +import android.text.Editable; +import android.text.InputFilter; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.View; +import android.view.View.OnClickListener; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.EditText; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.text.DecimalFormat; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.MathUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * ToolsActivity.java + * + * @author liufang + * @date 2015-11-6 下午4:33:19 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的工具类页面 + */ +public class ToolsActivity extends BaseActivity { + private int position; + private String title; + private X5WebView mWebView; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + position = getIntent().getIntExtra("position", 0); + title = getIntent().getStringExtra("title"); + top_title.setText(title); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = null; + if (position == 7 || position == 3 || position == 8 || position == 9 + || position == 0 || position == 22|| position == 23) { + view = View.inflate(ct, R.layout.activity_tools, null); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.tools_webview); + mWebView.setVisibility(View.VISIBLE); + + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); + WebSettings webSettings = mWebView.getSettings(); + + webSettings.setUseWideViewPort(true); + webSettings.setLoadWithOverviewMode(true); + // 设置 缓存模式 + + webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); + // webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); + // 开启 DOM storage API 功能 + webSettings.setDatabaseEnabled(true); + + webSettings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 + webSettings.setJavaScriptEnabled(true);// 启用javascript脚本 + webSettings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 + webSettings.setDomStorageEnabled(true); + webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); + webSettings.setSupportZoom(true); + webSettings.setBuiltInZoomControls(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return super.shouldOverrideUrlLoading(view, url); + } + }); + mWebView.setBackgroundColor(Color.TRANSPARENT); // WebView 背景透明效果 + switch (position) { + case 0:// 丙肝DAA和其他药物相互作用在线查询 + mWebView.loadUrl("http://www.hep-druginteractions.org/checker"); + break; + case 7:// 肝癌TNM分期 + mWebView.loadUrl("file:///android_asset/html/tools_seven.html"); + break; + case 3:// 巴塞罗那肝癌分级 + mWebView.loadUrl("file:///android_asset/html/tools_eight.html"); + break; + case 8:// 肝性脑病分期 + mWebView.loadUrl("file:///android_asset/html/tools_nine.html"); + break; + case 9:// 肝衰竭分类和分期 + mWebView.loadUrl("file:///android_asset/html/tools_ten.html"); + break; + case 22:// RUCAM因果关系评估量表 + mWebView.loadUrl("http://www.igandan.com/web/rucam"); + break; + case 23://肝脏肝纤维化与脂肪变性检查报告解读 + mWebView.loadUrl(" http://www.igandan.com/fibrosis_check/index.html"); + break; + } + } else { + switch (position) { + case 1:// 临床检验常用单位换算 + view = View.inflate(ct, R.layout.activity_conversion, null); + startConversion(view); + break; + case 2:// APRI指数 + view = View.inflate(ct, R.layout.activity_basic_ten, null); + startTent(view); + break; + case 4:// 标准体重计算 + view = View + .inflate(ct, R.layout.activity_standard_weight, null); + startOne(view); + break; + case 5:// Child——Pugh评分 + view = View.inflate(ct, R.layout.activity_child_pugh, null); + startSix(view); + break; + case 6:// FIB-4指数 + view = View.inflate(ct, R.layout.activity_basic_twelve, null); + startTwelve(view); + break; + case 10:// 估算肾小球滤过率(eGFR) + view = View.inflate(ct, R.layout.activity_basic_evenlen, null); + startEvenle(view); + break; + case 11:// 基础能耗 + view = View.inflate(ct, R.layout.activity_basic_energy, null); + startFour(view); + break; + case 12:// 酒精性肝病Maddrey判别函数 + view = View.inflate(ct, R.layout.activity_basic_eight, null); + startEight(view); + break; + case 13:// MELD评分 + view = View.inflate(ct, R.layout.activity_meld, null); + startSeven(view); + break; + case 15:// 体重指数(BMI) + view = View.inflate(ct, R.layout.activity_bmi, null); + startThree(view); + break; + case 16:// 体表面积 + view = View.inflate(ct, R.layout.activity_body_area, null); + startFive(view); + break; + case 17:// 血清腹水白蛋白梯度(SAAG) + view = View.inflate(ct, R.layout.activity_nine, null); + startNine(view); + break; + case 18:// 小儿标准体重计算 + view = View.inflate(ct, + R.layout.activity_child_standard_weight, null); + startTwo(view); + break; + case 19:// 序贯器官衰竭估计评分(SOFA评分) + view = View.inflate(ct, R.layout.activity_sofa_pugh, null); + startSeventeen(view); + break; + case 20:// 预后营养指数(PNI) + view = View.inflate(ct, R.layout.activity_basic_thirteen, null); + startThirteen(view); + break; + case 21:// 营养风险筛查 + view = View.inflate(ct, R.layout.activity_eighten_pugh, null); + startEighteen(view); + break; + + case 14:// 内生肌酐清除率 + view = View.inflate(ct, R.layout.activity_nineten_pugh, null); + startNineteen(view); + break; + } + } + return view; + } + + MyTextWatcher mt1, mt2; + MyTextWatcher2 dbil1, dbil2; + MyTextWatcher3 chol1, chol2; + MyTextWatcher4 afp1, afp2; + MyTextWatcher5 cr1, cr2; + MyTextWatcher6 js1, js2; + MyTextWatcher7 ca1, ca2; + MyTextWatcher8 p1, p2; + MyTextWatcher9 me1, me2; + MyTextWatcher10 zn1, zn2; + MyTextWatcher11 pb1, pb2; + MyTextWatcher12 bun1, bun2; + MyTextWatcher13 u1, u2; + MyTextWatcher14 ua1, ua2; + MyTextWatcher15 trlg1, trlg2; + + private void startConversion(View view) { + + final EditText mEt_tbil_mg, mEt_dbil_mg, mEt_chol_mg, mEt_afp_ng, mEt_cr_mg, mEt_js_mg, + + mEt_ca_mg, mEt_p_mg, mEt_me_ug, mEt_zn_ug, mEt_pb_ug, mEt_bun_mg, mEt_u_mg, mEt_ua_mg, mEt_trlg_ug; + + final EditText mEt_tbil_um, mEt_dbil_um, mEt_chol_mm, mEt_afp_nm, mEt_cr_um, mEt_js_um, + + mEt_ca_mm, mEt_p_mm, mEt_me_um, mEt_zn_um, mEt_pb_um, mEt_bun_mm, mEt_u_mm, mEt_ua_um, mEt_trlg_mm; + + double tbil = 17.10, dbil = 17.10, chol = 0.02586, afp = 0.05848, cr = 88.402, js = 76.26, ca = 0.2495, p = 0.3229, me = 0.4114, zn = 0.1530, pb = 0.04826, bun = 0.3570, u = 0.1665, ua = 59.48, trlg = 0.01129; + boolean isTbil = true, isDbil = true, isChol = true, isAfp = true, isCr = true, isJs = true; + // final ImageView mIv_tbil, mIv_dbil, mIv_chol, mIv_afp, mIv_cr, + // mIv_js; + mEt_trlg_ug = (EditText) view.findViewById(R.id.et_trlg_mg); + mEt_trlg_mm = (EditText) view.findViewById(R.id.et_trlg_mm); + trlg1 = new MyTextWatcher15(mEt_trlg_ug, mEt_trlg_mm, true, trlg); + trlg2 = new MyTextWatcher15(mEt_trlg_ug, mEt_trlg_mm, false, trlg); + mEt_trlg_ug.addTextChangedListener(trlg1); + mEt_trlg_mm.addTextChangedListener(trlg2); + + mEt_ua_mg = (EditText) view.findViewById(R.id.et_ua_mg); + mEt_ua_um = (EditText) view.findViewById(R.id.et_ua_um); + ua1 = new MyTextWatcher14(mEt_ua_mg, mEt_ua_um, true, ua); + ua2 = new MyTextWatcher14(mEt_ua_mg, mEt_ua_um, false, ua); + mEt_ua_mg.addTextChangedListener(ua1); + mEt_ua_um.addTextChangedListener(ua2); + + mEt_u_mg = (EditText) view.findViewById(R.id.et_u_mg); + mEt_u_mm = (EditText) view.findViewById(R.id.et_u_mm); + u1 = new MyTextWatcher13(mEt_u_mg, mEt_u_mm, true, u); + u2 = new MyTextWatcher13(mEt_u_mg, mEt_u_mm, false, u); + mEt_u_mg.addTextChangedListener(u1); + mEt_u_mm.addTextChangedListener(u2); + + mEt_bun_mg = (EditText) view.findViewById(R.id.et_bun_mg); + mEt_bun_mm = (EditText) view.findViewById(R.id.et_bun_um); + bun1 = new MyTextWatcher12(mEt_bun_mg, mEt_bun_mm, true, bun); + bun2 = new MyTextWatcher12(mEt_bun_mg, mEt_bun_mm, false, bun); + mEt_bun_mg.addTextChangedListener(bun1); + mEt_bun_mm.addTextChangedListener(bun2); + + mEt_pb_ug = (EditText) view.findViewById(R.id.et_pb_ug); + mEt_pb_um = (EditText) view.findViewById(R.id.et_pb_um); + pb1 = new MyTextWatcher11(mEt_pb_ug, mEt_pb_um, true, pb); + pb2 = new MyTextWatcher11(mEt_pb_ug, mEt_pb_um, false, pb); + mEt_pb_ug.addTextChangedListener(pb1); + mEt_pb_um.addTextChangedListener(pb2); + + mEt_zn_ug = (EditText) view.findViewById(R.id.et_zn_ug); + mEt_zn_um = (EditText) view.findViewById(R.id.et_zn_um); + zn1 = new MyTextWatcher10(mEt_zn_ug, mEt_zn_um, true, zn); + zn2 = new MyTextWatcher10(mEt_zn_ug, mEt_zn_um, false, zn); + mEt_zn_ug.addTextChangedListener(zn1); + mEt_zn_um.addTextChangedListener(zn2); + + mEt_me_ug = (EditText) view.findViewById(R.id.et_me_ug); + mEt_me_um = (EditText) view.findViewById(R.id.et_me_um); + me1 = new MyTextWatcher9(mEt_me_ug, mEt_me_um, true, me); + me2 = new MyTextWatcher9(mEt_me_ug, mEt_me_um, false, me); + mEt_me_ug.addTextChangedListener(me1); + mEt_me_um.addTextChangedListener(me2); + + mEt_p_mg = (EditText) view.findViewById(R.id.et_p_mg); + mEt_p_mm = (EditText) view.findViewById(R.id.et_p_mm); + p1 = new MyTextWatcher8(mEt_p_mg, mEt_p_mm, true, p); + p2 = new MyTextWatcher8(mEt_p_mg, mEt_p_mm, false, p); + mEt_p_mg.addTextChangedListener(p1); + mEt_p_mm.addTextChangedListener(p2); + + mEt_ca_mg = (EditText) view.findViewById(R.id.et_ca_mg); + mEt_ca_mm = (EditText) view.findViewById(R.id.et_ca_mm); + ca1 = new MyTextWatcher7(mEt_ca_mg, mEt_ca_mm, true, ca); + ca2 = new MyTextWatcher7(mEt_ca_mg, mEt_ca_mm, false, ca); + mEt_ca_mg.addTextChangedListener(ca1); + mEt_ca_mm.addTextChangedListener(ca2); + + mEt_tbil_mg = (EditText) view.findViewById(R.id.et_tbil_mg); + mEt_tbil_um = (EditText) view.findViewById(R.id.et_tbil_um); + mt1 = new MyTextWatcher(mEt_tbil_mg, mEt_tbil_um, true, tbil); + mt2 = new MyTextWatcher(mEt_tbil_mg, mEt_tbil_um, false, tbil); + mEt_tbil_mg.addTextChangedListener(mt1); + mEt_tbil_um.addTextChangedListener(mt2); + + mEt_dbil_mg = (EditText) view.findViewById(R.id.et_dbil_mg); + mEt_dbil_um = (EditText) view.findViewById(R.id.et_dbil_um); + dbil1 = new MyTextWatcher2(mEt_dbil_mg, mEt_dbil_um, true, dbil); + dbil2 = new MyTextWatcher2(mEt_dbil_mg, mEt_dbil_um, false, dbil); + mEt_dbil_mg.addTextChangedListener(dbil1); + mEt_dbil_um.addTextChangedListener(dbil2); + + mEt_chol_mg = (EditText) view.findViewById(R.id.et_chol_mg); + mEt_chol_mm = (EditText) view.findViewById(R.id.et_chol_mm); + chol1 = new MyTextWatcher3(mEt_chol_mg, mEt_chol_mm, true, chol); + chol2 = new MyTextWatcher3(mEt_chol_mg, mEt_chol_mm, false, chol); + mEt_chol_mg.addTextChangedListener(chol1); + mEt_chol_mm.addTextChangedListener(chol2); + + mEt_afp_ng = (EditText) view.findViewById(R.id.et_afp_ng); + mEt_afp_nm = (EditText) view.findViewById(R.id.et_afp_nm); + // mIv_afp = (ImageView) view.findViewById(R.id.iv_afp); + afp1 = new MyTextWatcher4(mEt_afp_ng, mEt_afp_nm, true, afp); + afp2 = new MyTextWatcher4(mEt_afp_ng, mEt_afp_nm, false, afp); + mEt_afp_ng.addTextChangedListener(afp1); + mEt_afp_nm.addTextChangedListener(afp2); + + mEt_cr_mg = (EditText) view.findViewById(R.id.et_cr_mg); + mEt_cr_um = (EditText) view.findViewById(R.id.et_cr_um); + // mIv_cr = (ImageView) view.findViewById(R.id.iv_cr); + cr1 = new MyTextWatcher5(mEt_cr_mg, mEt_cr_um, true, cr); + cr2 = new MyTextWatcher5(mEt_cr_mg, mEt_cr_um, false, cr); + mEt_cr_mg.addTextChangedListener(cr1); + mEt_cr_um.addTextChangedListener(cr2); + + mEt_js_mg = (EditText) view.findViewById(R.id.et_js_mg); + mEt_js_um = (EditText) view.findViewById(R.id.et_js_um); + // mIv_js = (ImageView) view.findViewById(R.id.iv_js); + js1 = new MyTextWatcher6(mEt_js_mg, mEt_js_um, true, js); + js2 = new MyTextWatcher6(mEt_js_mg, mEt_js_um, false, js); + mEt_js_mg.addTextChangedListener(js1); + mEt_js_um.addTextChangedListener(js2); + } + + class MyTextWatcher15 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher15(EditText Ev1, final EditText tv2, boolean isC, + double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(trlg2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(trlg1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(trlg2); + } else { + et1.addTextChangedListener(trlg1); + } + + } + } + + class MyTextWatcher14 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher14(EditText Ev1, final EditText tv2, boolean isC, + double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(ua2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(ua1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(ua2); + } else { + et1.addTextChangedListener(ua1); + } + + } + } + + class MyTextWatcher13 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher13(EditText Ev1, final EditText tv2, boolean isC, + double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(u2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(u1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(u2); + } else { + et1.addTextChangedListener(u1); + } + + } + } + + class MyTextWatcher12 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher12(EditText Ev1, final EditText tv2, boolean isC, + double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(bun2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(bun1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(bun2); + } else { + et1.addTextChangedListener(bun1); + } + + } + } + + class MyTextWatcher11 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher11(EditText Ev1, final EditText tv2, boolean isC, + double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(pb2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(pb1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(pb2); + } else { + et1.addTextChangedListener(pb1); + } + + } + } + + class MyTextWatcher10 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher10(EditText Ev1, final EditText tv2, boolean isC, + double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(zn2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(zn1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(zn2); + } else { + et1.addTextChangedListener(zn1); + } + + } + } + + class MyTextWatcher9 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher9(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(me2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(me1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(me2); + } else { + et1.addTextChangedListener(me1); + } + + } + } + + class MyTextWatcher8 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher8(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(p2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(p1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(p2); + } else { + et1.addTextChangedListener(p1); + } + + } + } + + class MyTextWatcher7 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher7(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(ca2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(ca1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(ca2); + } else { + et1.addTextChangedListener(ca1); + } + + } + } + + class MyTextWatcher implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(mt2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(mt1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(mt2); + } else { + et1.addTextChangedListener(mt1); + } + + } + } + + class MyTextWatcher2 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher2(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(dbil2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(dbil1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(dbil2); + } else { + et1.addTextChangedListener(dbil1); + } + + } + } + + class MyTextWatcher3 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher3(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(chol2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(chol1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(chol2); + } else { + et1.addTextChangedListener(chol1); + } + + } + } + + class MyTextWatcher4 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher4(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(afp2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(afp1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(afp2); + } else { + et1.addTextChangedListener(afp1); + } + + } + } + + class MyTextWatcher5 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher5(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(cr2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(cr1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(cr2); + } else { + et1.addTextChangedListener(cr1); + } + + } + } + + class MyTextWatcher6 implements TextWatcher { + private EditText et1, et2; + private boolean isC; + double num; + + MyTextWatcher6(EditText Ev1, final EditText tv2, boolean isC, double num) { + this.et1 = Ev1; + this.et2 = tv2; + this.isC = isC; + this.num = num; + } + + DecimalFormat df = new DecimalFormat("#.####"); + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + String ste1 = et1.getText().toString().toString(); + String ste2 = et2.getText().toString().toString(); + if (isC) { + et2.removeTextChangedListener(js2); + if (!StringUtil.isEmpty(ste1)) { + double nums = Double.parseDouble(ste1); + et2.setText(df.format(nums * num) + ""); + } else { + et2.setText(""); + } + + } else { + + et1.removeTextChangedListener(js1); + if (!StringUtil.isEmpty(ste2)) { + double nums = Double.parseDouble(et2.getText().toString() + .toString()); + et1.setText(df.format(nums / num) + ""); + } else { + et1.setText(""); + } + + } + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + if (isC) { + et2.addTextChangedListener(js2); + } else { + et1.addTextChangedListener(js1); + } + + } + } + + /** + * @author 营养风险筛查 + * + */ + int nutrition; + int healthy; + int age; + + private void startEighteen(View view) { + // TODO Auto-generated method stub + + RadioGroup onezero = (RadioGroup) view.findViewById(R.id.rg_nutrition); + RadioGroup twoa = (RadioGroup) view.findViewById(R.id.rg_healthy); + RadioGroup threeb = (RadioGroup) view.findViewById(R.id.rg_age); + // RadioGroup fourc = (RadioGroup) view.findViewById(R.id.rg_four_c); + final TextView tvResult = (TextView) view + .findViewById(R.id.tv_result_healthy); + tvResult.setText("营养状态评分:0分\n疾病有关评分:0分\n年龄评分:0分\n营养风险筛查总评分:0分"); + onezero.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_nutrition_a: + nutrition = 0; + break; + case R.id.rb_nutrition_b: + nutrition = 1; + break; + case R.id.rb_nutrition_c: + nutrition = 2; + break; + case R.id.rb_nutrition_d: + nutrition = 3; + break; + } + int result = nutrition + healthy + age; + tvResult.setText("营养状态评分:" + String.valueOf(nutrition) + "分" + + "\n" + "疾病有关评分:" + String.valueOf(healthy) + "分" + + "\n" + "年龄评分:" + String.valueOf(age) + "分" + "\n" + + "营养风险筛查总评分:" + String.valueOf(result) + "分"); + } + }); + twoa.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_healthy_a: + healthy = 0; + break; + case R.id.rb_healthy_b: + healthy = 1; + break; + case R.id.rb_healthy_c: + healthy = 2; + break; + case R.id.rb_healthy_d: + healthy = 3; + break; + } + + int result = nutrition + healthy + age; + tvResult.setText("营养状态评分:" + String.valueOf(nutrition) + "分" + + "\n" + "疾病有关评分:" + String.valueOf(healthy) + "分" + + "\n" + "年龄评分:" + String.valueOf(age) + "分" + "\n" + + "营养风险筛查总评分:" + String.valueOf(result) + "分"); + } + }); + threeb.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_age_a: + age = 0; + break; + case R.id.rb_age_b: + age = 1; + break; + // case R.id.rb_b_big: + // threeScore = 3; + // break; + } + int result = nutrition + healthy + age; + tvResult.setText("营养状态评分:" + String.valueOf(nutrition) + "分" + + "\n" + "疾病有关评分:" + String.valueOf(healthy) + "分" + + "\n" + "年龄评分:" + String.valueOf(age) + "分" + "\n" + + "营养风险筛查总评分:" + String.valueOf(result) + "分"); + + } + }); + + } + + /** + * 序贯器官衰竭估计评分(SOFA评分) + * + */ + int oneScoreo = 0; + int twoScoret; + int threeScoret = 0; + int fourScoref = 0; + int fiveScoref = 0; + int nineScore = 0; + int tenScore = 0; + private RadioButton tbt4; + private RadioButton tbt3; + private RadioButton bt1; + private RadioButton bt2; + private RadioButton bt3; + private RadioButton bt4; + private RadioGroup oneo; + private RadioGroup twot; + private String strBtnSelected = "unInit"; + private RadioButton btten4; + private RadioButton btten3; + private RadioButton btten2; + private RadioButton btten1; + private RadioButton bteleven1; + private RadioButton bteleven2; + private RadioButton btfive; + private RadioButton btsix1; + private RadioButton btsix2; + private RadioButton btsix3; + private RadioButton btseven1; + private RadioButton btseven2; + private RadioButton bteight1; + private RadioButton bteight2; + private RadioGroup eleven; + private RadioGroup ten; + private RadioGroup eight; + private RadioGroup seven; + private RadioGroup six; + private RadioGroup fivee; + + private void startSeventeen(View view) { + + class BtnSelected implements OnClickListener { + public BtnSelected(String str) { + bntID = str; + } + + final public String bntID; + + @Override + public void onClick(View arg0) { + // TODO Auto-generated method stub + strBtnSelected = bntID; + if (bntID.equals("1") || bntID.equals("2") || bntID.equals("3") + || bntID.equals("4")) { + twot.clearCheck(); + } else if (bntID.equals("5") || bntID.equals("6")) { + oneo.clearCheck(); + } else if (bntID.equals("51")) { + six.clearCheck(); + seven.clearCheck(); + eight.clearCheck(); + + } else if (bntID.equals("61") || bntID.equals("62") + || bntID.equals("63")) { + fivee.clearCheck(); + seven.clearCheck(); + eight.clearCheck(); + } else if (bntID.equals("71") || bntID.equals("72")) { + fivee.clearCheck(); + six.clearCheck(); + eight.clearCheck(); + } else if (bntID.equals("81") || bntID.equals("82")) { + fivee.clearCheck(); + six.clearCheck(); + seven.clearCheck(); + } else if (bntID.equals("101") || bntID.equals("102") + || bntID.equals("103") || bntID.equals("104")) { + eleven.clearCheck(); + } else if (bntID.equals("111") || bntID.equals("112")) { + ten.clearCheck(); + } + } + } + ; + // 呼吸两项 + BtnSelected btnListener1 = new BtnSelected("1"); + BtnSelected btnListener2 = new BtnSelected("2"); + BtnSelected btnListener3 = new BtnSelected("3"); + BtnSelected btnListener4 = new BtnSelected("4"); + BtnSelected btnListener5 = new BtnSelected("5"); + BtnSelected btnListener6 = new BtnSelected("6"); + // 循环四项 + BtnSelected btnListener51 = new BtnSelected("51"); + BtnSelected btnListener61 = new BtnSelected("61"); + BtnSelected btnListener62 = new BtnSelected("62"); + BtnSelected btnListener63 = new BtnSelected("63"); + BtnSelected btnListener71 = new BtnSelected("71"); + BtnSelected btnListener72 = new BtnSelected("72"); + BtnSelected btnListener81 = new BtnSelected("81"); + BtnSelected btnListener82 = new BtnSelected("82"); + // 肾脏两项 + BtnSelected btnListener101 = new BtnSelected("101"); + BtnSelected btnListener102 = new BtnSelected("102"); + BtnSelected btnListener103 = new BtnSelected("103"); + BtnSelected btnListener104 = new BtnSelected("104"); + BtnSelected btnListener111 = new BtnSelected("111"); + BtnSelected btnListener112 = new BtnSelected("112"); + + oneo = (RadioGroup) view.findViewById(R.id.rg_one_o); + bt1 = (RadioButton) view.findViewById(R.id.rb_one_default); + bt2 = (RadioButton) view.findViewById(R.id.rb_one_small); + bt3 = (RadioButton) view.findViewById(R.id.rb_one_big); + bt4 = (RadioButton) view.findViewById(R.id.rb_one_big_b); + // 为每个RadioButton设置监听器 + bt1.setOnClickListener(btnListener1); + bt2.setOnClickListener(btnListener2); + bt3.setOnClickListener(btnListener3); + bt4.setOnClickListener(btnListener4); + twot = (RadioGroup) view.findViewById(R.id.rg_two_t); + tbt3 = (RadioButton) view.findViewById(R.id.rb_two_big); + tbt4 = (RadioButton) view.findViewById(R.id.rb_two_big_b); + tbt3.setOnClickListener(btnListener5); + tbt4.setOnClickListener(btnListener6); + RadioGroup threet = (RadioGroup) view.findViewById(R.id.rg_three_t); + RadioGroup fourf = (RadioGroup) view.findViewById(R.id.rg_four_f); + fivee = (RadioGroup) view.findViewById(R.id.rg_five_f); + // 循环四项 + btfive = (RadioButton) view.findViewById(R.id.rb_fi_default); + btfive.setOnClickListener(btnListener51); + six = (RadioGroup) view.findViewById(R.id.rg_six); + btsix1 = (RadioButton) view.findViewById(R.id.rb_six_small); + btsix2 = (RadioButton) view.findViewById(R.id.rb_six_big); + btsix3 = (RadioButton) view.findViewById(R.id.rb_six_big_b); + btsix1.setOnClickListener(btnListener61); + btsix2.setOnClickListener(btnListener62); + btsix3.setOnClickListener(btnListener63); + seven = (RadioGroup) view.findViewById(R.id.rg_seven); + btseven1 = (RadioButton) view.findViewById(R.id.rb_seven_big); + btseven2 = (RadioButton) view.findViewById(R.id.rb_seven_big_b); + btseven1.setOnClickListener(btnListener71); + btseven2.setOnClickListener(btnListener72); + eight = (RadioGroup) view.findViewById(R.id.rg_eight); + bteight1 = (RadioButton) view.findViewById(R.id.rb_eight_big); + bteight2 = (RadioButton) view.findViewById(R.id.rb_eight_big_b); + bteight1.setOnClickListener(btnListener81); + bteight2.setOnClickListener(btnListener82); + + RadioGroup nine = (RadioGroup) view.findViewById(R.id.rg_nine); + + // 肾脏两项 + ten = (RadioGroup) view.findViewById(R.id.rg_ten); + btten1 = (RadioButton) view.findViewById(R.id.rb_ten_default); + btten2 = (RadioButton) view.findViewById(R.id.rb_ten_small); + btten3 = (RadioButton) view.findViewById(R.id.rb_ten_big); + btten4 = (RadioButton) view.findViewById(R.id.rb_ten_big_b); + btten1.setOnClickListener(btnListener101); + btten2.setOnClickListener(btnListener102); + btten3.setOnClickListener(btnListener103); + btten4.setOnClickListener(btnListener104); + + eleven = (RadioGroup) view.findViewById(R.id.rg_eleven); + bteleven1 = (RadioButton) view.findViewById(R.id.rb_eleven_big); + bteleven2 = (RadioButton) view.findViewById(R.id.rb_eleven_big_b); + bteleven1.setOnClickListener(btnListener111); + bteleven2.setOnClickListener(btnListener112); + final TextView tvResult = (TextView) view + .findViewById(R.id.tv_result_r1); + tvResult.setText("0分(您已选择0个必选项,还有6个必选项未选)"); + oneo.setOnCheckedChangeListener(new OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + + switch (checkedId) { + case R.id.rb_one_default: + if (bt1.isChecked()) { + oneScoreo = 1; + } + break; + case R.id.rb_one_small: + if (bt2.isChecked()) { + oneScoreo = 2; + } + break; + case R.id.rb_one_big: + if (bt3.isChecked()) { + oneScoreo = 3; + } + break; + case R.id.rb_one_big_b: + if (bt4.isChecked()) { + oneScoreo = 4; + } + break; + } + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) { + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + } else { + tvResult.setText(String.valueOf(result) + "分"); + } + } + }); + twot.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + + switch (checkedId) { + // case R.id.rb_two_default: + // oneScoreo = 1; + // break; + // case R.id.rb_two_small: + // oneScoreo = 2; + // break; + case R.id.rb_two_big: + if (tbt3.isChecked()) { + oneScoreo = 3; + } + break; + case R.id.rb_two_big_b: + if (tbt4.isChecked()) { + oneScoreo = 4; + } + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + threet.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_three_default: + threeScoret = 1; + break; + case R.id.rb_three_small: + threeScoret = 2; + break; + case R.id.rb_three_big: + threeScoret = 3; + break; + case R.id.rb_three_big_b: + threeScoret = 4; + break; + } + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + // if (elevenScore == 0) { + // sum++; + // } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + fourf.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_four_default: + fourScoref = 1; + break; + case R.id.rb_four_small: + fourScoref = 2; + break; + case R.id.rb_four_big: + fourScoref = 3; + break; + case R.id.rb_four_big_b: + fourScoref = 4; + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + fivee.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_fi_default: + if (btfive.isChecked()) { + fiveScoref = 1; + } + break; + // case R.id.rb_fi_small: + // fiveScoref = 2; + // break; + // case R.id.rb_fi_big: + // fiveScoref = 3; + // break; + // case R.id.rb_fi_big_b: + // fiveScoref = 4; + // break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + six.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + // case R.id.rb_six_default: + // fiveScoref = 1; + // break; + case R.id.rb_six_small: + if (btsix1.isChecked()) { + fiveScoref = 2; + } + break; + case R.id.rb_six_big: + if (btsix2.isChecked()) { + fiveScoref = 3; + } + break; + case R.id.rb_six_big_b: + if (btsix3.isChecked()) { + fiveScoref = 4; + } + break; + } + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + seven.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + // case R.id.rb_seven_default: + // fiveScoref = 1; + // break; + // case R.id.rb_seven_small: + // fiveScoref = 2; + // break; + case R.id.rb_seven_big: + if (btseven1.isChecked()) { + + fiveScoref = 3; + } + break; + case R.id.rb_seven_big_b: + if (btseven2.isChecked()) { + + fiveScoref = 4; + } + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + eight.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + // case R.id.rb_eight_default: + // fiveScoref = 1; + // break; + // case R.id.rb_eight_small: + // fiveScoref = 2; + // break; + case R.id.rb_eight_big: + if (bteight1.isChecked()) { + fiveScoref = 3; + } + break; + case R.id.rb_eight_big_b: + if (bteight2.isChecked()) { + fiveScoref = 4; + } + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + nine.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_nine_default: + nineScore = 1; + break; + case R.id.rb_nine_small: + nineScore = 2; + break; + case R.id.rb_nine_big: + nineScore = 3; + break; + case R.id.rb_nine_big_b: + nineScore = 4; + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + ten.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_ten_default: + if (btten1.isChecked()) { + tenScore = 1; + } + break; + case R.id.rb_ten_small: + if (btten2.isChecked()) { + tenScore = 2; + } + break; + case R.id.rb_ten_big: + if (btten3.isChecked()) { + tenScore = 3; + } + break; + case R.id.rb_ten_big_b: + if (btten4.isChecked()) { + tenScore = 4; + } + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + eleven.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + // case R.id.rb_eleven_default: + // tenScore = 1; + // break; + // case R.id.rb_eleven_small: + // tenScore = 2; + // break; + case R.id.rb_eleven_big: + if (bteleven1.isChecked()) { + tenScore = 3; + } + break; + case R.id.rb_eleven_big_b: + if (bteleven2.isChecked()) { + tenScore = 4; + } + break; + } + + int sum = 0; + if (oneScoreo == 0) { + sum++; + } + if (threeScoret == 0) { + sum++; + } + if (fourScoref == 0) { + sum++; + } + if (fiveScoref == 0) { + sum++; + } + if (nineScore == 0) { + sum++; + } + if (tenScore == 0) { + sum++; + } + int result = oneScoreo + threeScoret + fourScoref + fiveScoref + + nineScore + tenScore; + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(6 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + } + + private int select; + private double chushu = 1; + protected double mAges; + protected String strBoold; + protected double mBoold; + + private void startEight(View view) { + // TODO Auto-generated method stub + + final RadioGroup rg_sex = (RadioGroup) view.findViewById(R.id.rg_sex); + final EditText et_height = (EditText) view.findViewById(R.id.et_height); + final EditText et_weight = (EditText) view.findViewById(R.id.et_weight); + final EditText et_age = (EditText) view.findViewById(R.id.et_age); + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + final TextView hongdansu = (TextView) view.findViewById(R.id.hongdansu); + // String age = et_age.getText().toString().trim(); + // final double value = + // MathUtil.div(Double.parseDouble(et_age.getText().toString()), + // chushu); + + rg_sex.check(R.id.rb_male); + rg_sex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + et_age.setText(""); + et_weight.setText(""); + et_height.setText(""); + tv_result.setText(""); + switch (checkedId) { + case R.id.rb_male: + select = 1; + chushu = 1; + hongdansu.setText("mg/dL"); + break; + case R.id.rb_female: + select = 2; + chushu = 17.1; + hongdansu.setText("µmol/L"); + break; + + } + } + }); + et_height.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + final String height = et_height.getText().toString().trim(); + final String weight = et_weight.getText().toString().trim(); + final String value = et_age.getText().toString().trim(); + if (!height.equals("0") && !weight.equals("0") + && !value.equals("0") && !height.equals("") + && !weight.equals("") && !value.equals("")) { + try { + // + Double mHeight = Double.parseDouble(height); + Double mWeight = Double.parseDouble(weight); + Double mAges = Double.parseDouble(value); + defaultWeight = 4.6 * (mHeight - mWeight) + mAges + / chushu; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + + } catch (Exception e) { + } + + } + } + }); + et_weight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + final String height = et_height.getText().toString().trim(); + final String weight = et_weight.getText().toString().trim(); + final String value = et_age.getText().toString().trim(); + if (!height.equals("0") && !weight.equals("0") + && !value.equals("0") && !height.equals("") + && !weight.equals("") && !value.equals("")) { + try { + // double height1=Double.parseDouble(height); + // double weight1=Double.parseDouble(weight); + // double value1=Double.parseDouble(value); + Double mHeight = Double.parseDouble(height); + Double mWeight = Double.parseDouble(weight); + Double mAges = Double.parseDouble(value); + + defaultWeight = 4.6 * (mHeight - mWeight) + mAges + / chushu; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + + // double result = MathUtil.add(value1,MathUtil.div(4.6, + // MathUtil.sub(height1, weight1))); + // DecimalFormat df = new DecimalFormat("0.00"); + // String des = df.format(result); + // tv_result.setText(des); + } catch (Exception e) { + // TODO: handle exception + } + + } + + } + }); + et_age.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + final String height = et_height.getText().toString().trim(); + final String weight = et_weight.getText().toString().trim(); + final String value = et_age.getText().toString().trim(); + if (!height.equals("0") && !weight.equals("0") + && !value.equals("0") && !height.equals("") + && !weight.equals("") && !value.equals("")) { + try { + Double mHeight = Double.parseDouble(height); + Double mWeight = Double.parseDouble(weight); + Double mAges = Double.parseDouble(value); + + defaultWeight = 4.6 * (mHeight - mWeight) + mAges + / chushu; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + + // double height1=Double.parseDouble(height); + // double weight1=Double.parseDouble(weight); + // double value1=Double.parseDouble(value); + // double result = MathUtil.add(value1,MathUtil.sub(4.6, + // MathUtil.sub(height1, weight1))); + // tv_result.setText(result + ""); + } catch (Exception e) { + // TODO: handle exception + } + + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + } + + private double value = 2; + + private void startThirteen(View view) { + + final EditText et_height = (EditText) view.findViewById(R.id.et_height); + final EditText et_height1 = (EditText) view + .findViewById(R.id.et_height1); + final EditText et_weight = (EditText) view.findViewById(R.id.et_weight); + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + final RadioGroup rg_sex = (RadioGroup) view.findViewById(R.id.rg_sex); + + rg_sex.check(R.id.rb_1); + rg_sex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_1: + value = 2; + et_height.setText(""); + et_height1.setText(""); + et_weight.setText(""); + et_height.setFocusable(true); + break; + case R.id.rb_2: + value = 1; + et_height.setText(""); + et_height1.setText(""); + et_weight.setText(""); + et_height.setFocusable(true); + break; + case R.id.rb_3: + value = 0; + et_height.setText(""); + et_height1.setText(""); + et_weight.setText(""); + et_height.setFocusable(true); + break; + } + + } + }); + + et_height.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + try { + String height = et_height.getText().toString().trim(); + String height1 = et_height1.getText().toString().trim(); + String weight = et_weight.getText().toString().trim(); + // if (height.equals("")) { + // height="0"; + // } + // if (height1.equals("")) { + // height1="0"; + // } + // if (weight.equals("")) { + // weight="0"; + // } + double heigh = Double.parseDouble(height); + double heigh1 = Double.parseDouble(height1); + double weigh = Double.parseDouble(weight); + if (heigh != 0 && heigh1 != 0 && weigh != 0) { + double a = 158 - (16.6 * heigh) - (0.78 * heigh1) + - (0.20 * weigh) - (5.8 * value); + DecimalFormat df = new DecimalFormat("0.00"); + String result = df.format(a); + tv_result.setText(result); + } else { + tv_result.setText(""); + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + et_height1.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + try { + String height = et_height.getText().toString().trim(); + String height1 = et_height1.getText().toString().trim(); + String weight = et_weight.getText().toString().trim(); + // if (height.equals("")) { + // height="0"; + // } + // if (height1.equals("")) { + // height1="0"; + // } + // if (weight.equals("")) { + // weight="0"; + // } + double heigh = Double.parseDouble(height); + double heigh1 = Double.parseDouble(height1); + double weigh = Double.parseDouble(weight); + if (heigh != 0 && heigh1 != 0 && weigh != 0) { + double a = 158 - (16.6 * heigh) - (0.78 * heigh1) + - (0.20 * weigh) - (5.8 * value); + DecimalFormat df = new DecimalFormat("0.00"); + String result = df.format(a); + tv_result.setText(result); + } else { + tv_result.setText(""); + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + et_weight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + try { + String height = et_height.getText().toString().trim(); + String height1 = et_height1.getText().toString().trim(); + String weight = et_weight.getText().toString().trim(); + // if (height.equals("")) { + // height="0"; + // } + // if (height1.equals("")) { + // height1="0"; + // } + // if (weight.equals("")) { + // weight="0"; + // } + double heigh = Double.parseDouble(height); + double heigh1 = Double.parseDouble(height1); + double weigh = Double.parseDouble(weight); + if (heigh != 0 && heigh1 != 0 && weigh != 0) { + double a = 158 - (16.6 * heigh) - (0.78 * heigh1) + - (0.20 * weigh) - (5.8 * value); + DecimalFormat df = new DecimalFormat("0.00"); + String result = df.format(a); + tv_result.setText(result); + } else { + tv_result.setText(""); + } + } catch (NumberFormatException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + } + + /** + * 计算公式:FIB-4=[年龄×AST]/[血小板数×ALT 1 /2] 精度保持小数点后2位。 startTwelve + * + * @param view + * void + */ + private void startTwelve(View view) { + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight);// 谷丙转氨酶ALT + final EditText etHeight = (EditText) view.findViewById(R.id.et_height);// 谷草转氨酶AST + final EditText etBoold = (EditText) view.findViewById(R.id.et_boold);// 血小板数(PLT) + final EditText etAge = (EditText) view.findViewById(R.id.et_age);// 年龄 + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + strBoold = etBoold.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge) + && !TextUtils.isEmpty(strBoold)) { + try {// FIB-4=[年龄×AST]/[血小板数×ALT 1 /2] + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + mBoold = Double.parseDouble(strBoold.trim()); + defaultWeight = (mAges * mHeight) + / (mBoold * Math.sqrt(mWeight)); + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + strBoold = etBoold.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge) + && !TextUtils.isEmpty(strBoold)) { + try {// FIB-4=[年龄×AST]/[血小板数×ALT 1 /2] + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + mBoold = Double.parseDouble(strBoold.trim()); + defaultWeight = (mAges * mHeight) + / (mBoold * Math.sqrt(mWeight)); + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + etAge.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + strBoold = etBoold.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge) + && !TextUtils.isEmpty(strBoold)) { + try {// FIB-4=[年龄×AST]/[血小板数×ALT 1 /2] + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + mBoold = Double.parseDouble(strBoold.trim()); + defaultWeight = (mAges * mHeight) + / (mBoold * Math.sqrt(mWeight)); + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + etBoold.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + strBoold = etBoold.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge) + && !TextUtils.isEmpty(strBoold)) { + try {// FIB-4=[年龄×AST]/[血小板数×ALT 1 /2] + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + mBoold = Double.parseDouble(strBoold.trim()); + defaultWeight = (mAges * mHeight) + / (mBoold * Math.sqrt(mWeight)); + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + + } + + private void startEvenle(View view) { + + final RadioGroup rg_sex = (RadioGroup) view.findViewById(R.id.rg_sex); + final RadioGroup rg_sexs = (RadioGroup) view.findViewById(R.id.rg_sex1); + + final EditText et_height = (EditText) view.findViewById(R.id.et_height); + final EditText et_age = (EditText) view.findViewById(R.id.et_age); + + final TextView hongdansu = (TextView) view.findViewById(R.id.hongdansu); + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + + final RadioButton rb_mg = (RadioButton) view.findViewById(R.id.rb_mg); + final RadioButton rb_um = (RadioButton) view.findViewById(R.id.rb_um); + final RadioButton rb_man = (RadioButton) view.findViewById(R.id.rb_man); + final RadioButton rb_woman = (RadioButton) view + .findViewById(R.id.rb_woman); + rg_sex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + et_age.setText(""); + et_height.setText(""); + tv_result.setText(""); + switch (checkedId) { + case R.id.rb_mg: + hongdansu.setText("mg/dL"); + break; + case R.id.rb_um: + hongdansu.setText("µmol/L"); + break; + + default: + break; + } + } + }); + rg_sexs.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + et_age.setText(""); + et_height.setText(""); + tv_result.setText(""); + } + }); + + rg_sex.check(R.id.rb_mg); + rg_sexs.check(R.id.rb_man); + et_height.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + final String height = et_height.getText().toString().trim(); + final String age = et_age.getText().toString().trim(); + if (!height.equals("0") && !age.equals("0") + && !height.equals("") && !age.equals("")) { + double height1 = Double.parseDouble(height); + double age1 = Double.parseDouble(age); + double result = 0; + // 男 mg/dl + if (rb_mg.isChecked() && rb_man.isChecked()) { + result = 186 * Math.pow(height1, -1.154) + * Math.pow(age1, -0.203); + } + // 女 mg/dl + if (rb_mg.isChecked() && rb_woman.isChecked()) { + result = 186 * Math.pow(height1, -1.154) + * Math.pow(age1, -0.203) * 0.742; + } + // 男 µmol/L + // c=new Double(Math.round(a/b)/1000.0);//这样为保持3位 + if (rb_um.isChecked() && rb_man.isChecked()) { + result = 186 * Math.pow(height1 / 88.4, -1.154) + * Math.pow(age1, -0.203); + } + // 女 µmol/L + if (rb_um.isChecked() && rb_woman.isChecked()) { + result = 186 * Math.pow(height1 / 88.4, -1.154) + * Math.pow(age1, -0.203) * 0.742; + } + + if (result != 0) { + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(result); + tv_result.setText(Weight); + } + + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + et_age.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + final String height = et_height.getText().toString().trim(); + final String age = et_age.getText().toString().trim(); + if (!height.equals("0") && !age.equals("0") + && !height.equals("") && !age.equals("")) { + double height1 = Double.parseDouble(height); + double age1 = Double.parseDouble(age); + double result = 0; + // 男 mg/dl + if (rb_mg.isChecked() && rb_man.isChecked()) { + result = 186 * Math.pow(height1, -1.154) + * Math.pow(age1, -0.203); + } + // 女 mg/dl + if (rb_mg.isChecked() && rb_woman.isChecked()) { + result = 186 * Math.pow(height1, -1.154) + * Math.pow(age1, -0.203) * 0.742; + } + // 男 µmol/L + // c=new Double(Math.round(a/b)/1000.0);//这样为保持3位 + if (rb_um.isChecked() && rb_man.isChecked()) { + result = 186 * Math.pow(height1 / 88.4, -1.154) + * Math.pow(age1, -0.203); + } + // 女 µmol/L + if (rb_um.isChecked() && rb_woman.isChecked()) { + result = 186 * Math.pow(height1 / 88.4, -1.154) + * Math.pow(age1, -0.203) * 0.742; + } + + if (result != 0) { + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(result); + tv_result.setText(Weight); + } + + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } + + /** + * APRI指数 APRI=[AST(u/L)/ AST正常值上限/血小板数(109 /L)]×100 计算公式:APRI=[AST/ + * AST正常值上限/血小板数]×100 + * + * @param view + * void + */ + private void startTent(View view) { + + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight);// AST正常值上限 + final EditText etHeight = (EditText) view.findViewById(R.id.et_height);// 谷草转氨酶AST + final EditText etAge = (EditText) view.findViewById(R.id.et_age);// 血小板PLT + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge)) { + try {// APRI=[AST/ AST正常值上限/血小板数]×100 + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + defaultWeight = (mHeight / mWeight / mAges) * 100.00; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge)) { + try {// APRI=[AST/ AST正常值上限/血小板数]×100 + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + defaultWeight = (mHeight / mWeight / mAges) * 100.00; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + etAge.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + strAge = etAge.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight) + && !TextUtils.isEmpty(strAge)) { + try {// APRI=[AST/ AST正常值上限/血小板数]×100 + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + mAges = Double.parseDouble(strAge.trim()); + defaultWeight = (mHeight / mWeight / mAges) * 100.00; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + + } + + /** + * SAAG =血清白蛋白(g/L)–腹水白蛋白(g/L) >=11g/L:提示门静脉高压 <11g/L:提示非门静脉高压 startNine + * + * @param view + * void + */ + private void startNine(View view) { + + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight);// 血清血蛋白 + final EditText etHeight = (EditText) view.findViewById(R.id.et_height);// 腹水血蛋白 + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight)) { + try { + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + defaultWeight = mWeight - mHeight; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + // if (defaultWeight >= 11) { + // ToastUtil.showMessage("门静脉高压"); + // }else{ + // ToastUtil.showMessage("非门静脉高压"); + // } + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + // TODO Auto-generated method stub + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + // TODO Auto-generated method stub + + } + + @Override + public void afterTextChanged(Editable s) { + // TODO Auto-generated method stub + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + if (!TextUtils.isEmpty(strWeight) + && !TextUtils.isEmpty(strHeight)) { + try { + mWeight = Double.parseDouble(strWeight.trim()); + mHeight = Double.parseDouble(strHeight.trim()); + defaultWeight = mWeight - mHeight; + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tv_result.setText(Weight); + // if (defaultWeight >= 11) { + // ToastUtil.showMessage("门静脉高压"); + // }else{ + // ToastUtil.showMessage("非门静脉高压"); + // } + } catch (Exception e) { + // TODO: handle exception + } + + } + } + }); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + private String strHeight; + private String strWeight; + private double mHeight = 0.00; + private double mWeight = 0.00; + private double defaultWeight = 0.0; + + /** + * 标准体重计算 + */ + private void startOne(View view) { + final RadioGroup rgSex = (RadioGroup) view.findViewById(R.id.rg_sex); + final TextView tvResult = (TextView) view.findViewById(R.id.one_result); + final EditText etHeight = (EditText) view.findViewById(R.id.et_height); + rgSex.check(R.id.rb_male); + rgSex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + tvResult.setText("结果:"); + etHeight.setText(""); + } + }); + + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + if (etHeight.getText().toString().indexOf(".") >= 0) { + if (etHeight + .getText() + .toString() + .indexOf( + ".", + etHeight.getText().toString().indexOf(".") + 1) > 0) { + etHeight.setText(etHeight + .getText() + .toString() + .substring( + 0, + etHeight.getText().toString().length() - 1)); + etHeight.setSelection(etHeight.getText().toString() + .length()); + } + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("结果:"); + if (etHeight.getText().toString().indexOf(".") >= 0) { + if (etHeight + .getText() + .toString() + .indexOf( + ".", + etHeight.getText().toString().indexOf(".") + 1) > 0) { + etHeight.setText(etHeight + .getText() + .toString() + .substring( + 0, + etHeight.getText().toString().length() - 1)); + etHeight.setSelection(etHeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + // if(strHeight.trim().length() < 3){ + // return; + // } + if (".".equals(strHeight.substring(0, 1))) { + ToastUtil.showToast("请输入身高参考范围:100.00cm-300.00cm"); + etHeight.setText(""); + return; + } + mHeight = Double.parseDouble(strHeight.trim()); + + if (mHeight < 1 || mHeight > 300.00) { + ToastUtil.showToast("请输入身高参考范围:100.00cm-300.00cm"); + etHeight.setText(""); + return; + } + if(mHeight < 100) + { + ToastUtil.showToast("请输入身高参考范围:100.00cm-300.00cm"); + return; + } + if (rgSex.getCheckedRadioButtonId() == R.id.rb_male) { + + defaultWeight = mHeight * 1.00 - 105.00; + } else { + defaultWeight = mHeight * 1.00 - 100.00; + } + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + LogUtil.i("defaultWeight=" + defaultWeight + "Weight=" + + Weight); + // double result = MathUtil.div(MathUtil.sub(mWeight, + // defaultWeight), defaultWeight); + // BigDecimal b = new BigDecimal(defaultWeight); + // tvResult.setText(String.valueOf(b.setScale(3,BigDecimal.ROUND_HALF_UP).doubleValue())); + tvResult.setText(Weight); + } + } + }); + + } + + /** + * 小儿标准体重计算 + */ + private void startTwo(View view) { + final View llWeight = view.findViewById(R.id.ll_weight); + final RadioGroup rgTime = (RadioGroup) view.findViewById(R.id.rg_time); + // final RadioButton rb_month = (RadioButton) + // view.findViewById(R.id.rb_month); + final TextView tvHeightText = (TextView) view + .findViewById(R.id.tv_month_text); + final TextView tvHeightUnit = (TextView) view + .findViewById(R.id.tv_month_unit); + final EditText etHeight = (EditText) view.findViewById(R.id.et_age); + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight); + final TextView tvResult = (TextView) view.findViewById(R.id.two_result); + rgTime.check(R.id.rb_month); + etHeight.setFilters(new InputFilter[] { new InputFilter.LengthFilter(2) }); + rgTime.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + tvResult.setText("--"); + etHeight.setText(""); + etWeight.setText(""); + if (checkedId == R.id.rb_month) { + llWeight.setVisibility(View.VISIBLE); + tvHeightText.setText("月龄"); + tvHeightUnit.setText("月"); + } else { + llWeight.setVisibility(View.GONE); + tvHeightText.setText("年龄"); + tvHeightUnit.setText("岁"); + } + } + }); + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etHeight.getText().toString().indexOf(".") >= 0) { + if (etHeight + .getText() + .toString() + .indexOf( + ".", + etHeight.getText().toString().indexOf(".") + 1) > 0) { + etHeight.setText(etHeight + .getText() + .toString() + .substring( + 0, + etHeight.getText().toString().length() - 1)); + etHeight.setSelection(etHeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + mHeight = Long.parseLong(strHeight.trim()); + if (rgTime.getCheckedRadioButtonId() == R.id.rb_year) { + if (strHeight.length() > 1) { + if (mHeight < 2 || mHeight > 12) { + ToastUtil.showToast("年龄范围:2-12"); + etHeight.setText(""); + return; + } + } + defaultWeight = MathUtil.add(MathUtil.mul(mHeight, 2), + 8); + } else { + if (mHeight < 1 || mHeight > 12) { + ToastUtil.showToast("月龄范围:1-12"); + etHeight.setText(""); + return; + } + strWeight = etWeight.getText().toString(); + if (StringUtil.notEmpty(strWeight) + && !".".equals(strWeight.substring(0, 1))) { + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 0 || mWeight > 400) { + ToastUtil.showToast("出生体重范围:5-400.00之间"); + return; + } + + if (mHeight < 0 || mWeight < 0) { + return; + } + if (mHeight > 6) { + defaultWeight = MathUtil.add( + MathUtil.add(mWeight, + MathUtil.mul(6, 0.7)), + MathUtil.mul((mHeight - 6), 0.5)); + } else { + defaultWeight = MathUtil.add(mWeight, + MathUtil.mul(mHeight, 0.7)); + } + } + } + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tvResult.setText(Weight); + + // double temp = MathUtil.div(mHeight, 100); + // double result = MathUtil.div(mWeight, MathUtil.mul(temp, + // temp)); + // + // showTwoResult(result, tvResult); + } + } + }); + + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + if (etWeight.getText().toString().indexOf(".") >= 0) { + if (etWeight + .getText() + .toString() + .indexOf( + ".", + etWeight.getText().toString().indexOf(".") + 1) > 0) { + etWeight.setText(etWeight + .getText() + .toString() + .substring( + 0, + etWeight.getText().toString().length() - 1)); + etWeight.setSelection(etWeight.getText().toString() + .length()); + } + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etWeight.getText().toString().indexOf(".") == -1) { + return; + } + if (etWeight.getText().toString().indexOf(".") >= 0) { + if (etWeight + .getText() + .toString() + .indexOf( + ".", + etWeight.getText().toString().indexOf(".") + 1) > 0) { + etWeight.setText(etWeight + .getText() + .toString() + .substring( + 0, + etWeight.getText().toString().length() - 1)); + etWeight.setSelection(etWeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + mHeight = Integer.parseInt(strHeight.trim()); + + if (rgTime.getCheckedRadioButtonId() == R.id.rb_year) { + defaultWeight = MathUtil.add(MathUtil.mul(mHeight, 2), + 8); + } else { + strWeight = etWeight.getText().toString().trim(); + if (StringUtil.notEmpty(strWeight) + && !".".equals(strWeight.substring(0, 1))) { + mWeight = Double.parseDouble(strWeight); + if (mHeight < 0 || mWeight < 0) { + return; + } + if (mHeight > 6) { + defaultWeight = MathUtil.add( + MathUtil.add(mWeight, + MathUtil.mul(6, 0.7)), + MathUtil.mul((mHeight - 6), 0.5)); + } else { + defaultWeight = MathUtil.add(mWeight, + MathUtil.mul(mHeight, 0.7)); + } + } + } + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(defaultWeight); + tvResult.setText(Weight); + + } + } + }); + } + + private int mAge; + private String strAge; + + /** + * 体重指数(BMI) + */ + private void startThree(View view) { + final EditText etHeight = (EditText) view.findViewById(R.id.et_height); + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight); + final TextView tvResult = (TextView) view.findViewById(R.id.tv_result); + + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etHeight.getText().toString().indexOf(".") >= 0) { + if (etHeight + .getText() + .toString() + .indexOf( + ".", + etHeight.getText().toString().indexOf(".") + 1) > 0) { + etHeight.setText(etHeight + .getText() + .toString() + .substring( + 0, + etHeight.getText().toString().length() - 1)); + etHeight.setSelection(etHeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + strWeight = etWeight.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + if (".".equals(strHeight.substring(0, 1))) { + ToastUtil.showToast("请输入身高参考范围:100.00cm-300.00cm"); + etHeight.setText(""); + return; + } + mHeight = Double.parseDouble(strHeight.trim()); + if (mHeight > 300.00 || mHeight < 1) { + ToastUtil.showToast("请输入身高参考范围:100.00-300.00cm"); + etHeight.setText(""); + return; + } + if(mHeight < 100) + { + ToastUtil.showToast("请输入身高参考范围:100.00cm-300.00cm"); + return; + } + if (StringUtil.notEmpty(strWeight)) { + if (".".equals(strWeight.substring(0, 1))) { + ToastUtil.showToast("请输入体重参考范围:5-400.00Kg"); + etWeight.setText(""); + return; + } + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400.00) { + ToastUtil.showToast("体重范围:5-400.00Kg"); + etWeight.setText(""); + return; + } + + } else { + return; + } + if (mHeight < 100 || mWeight < 0) { + return; + } + double temp = MathUtil.div(mHeight, 100); + + double result = MathUtil.div(mWeight, + MathUtil.mul(temp, temp)); + DecimalFormat df = new DecimalFormat("0.0"); + String r = df.format(result); + tvResult.setText(r); + + // BigDecimal b = new BigDecimal(result); + // tvResult.setText(String.valueOf(b.setScale(2, + // BigDecimal.ROUND_HALF_UP).doubleValue())); + } + } + }); + + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etWeight.getText().toString().indexOf(".") >= 0) { + if (etWeight + .getText() + .toString() + .indexOf( + ".", + etWeight.getText().toString().indexOf(".") + 1) > 0) { + etWeight.setText(etWeight + .getText() + .toString() + .substring( + 0, + etWeight.getText().toString().length() - 1)); + etWeight.setSelection(etWeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strWeight = etWeight.getText().toString(); + strHeight = etHeight.getText().toString(); + if (StringUtil.notEmpty(strWeight)) { + if (".".equals(strWeight.substring(0, 1))) { + ToastUtil.showToast("请输入体重参考范围:5-400.00kg"); + etWeight.setText(""); + return; + } + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400.00) { + ToastUtil.showToast("体重范围:5-400.00Kg"); + etWeight.setText(""); + return; + } + + if (StringUtil.notEmpty(strHeight)) { + if (".".equals(strHeight.substring(0, 1))) { + ToastUtil.showToast("请输入身高参考范围:100.00cm-300.00cm"); + etHeight.setText(""); + return; + } + mHeight = Double.parseDouble(strHeight.trim()); + if (mHeight > 300.00 || mHeight < 1) { + ToastUtil.showToast("请输入身高参考范围:100.00-300.00cm"); + etHeight.setText(""); + return; + } + } else { + return; + } + if (mHeight < 100 || mWeight < 0) { + return; + } + double temp = MathUtil.div(mHeight, 100); + + double result = MathUtil.div(mWeight, + MathUtil.mul(temp, temp), 1); + DecimalFormat df = new DecimalFormat("0.0"); + String r = df.format(result); + tvResult.setText(r); + + } + } + }); + } + + /** + * 基础能耗 + */ + private void startFour(View view) { + final RadioGroup rgSex = (RadioGroup) view.findViewById(R.id.rg_sex); + final EditText etHeight = (EditText) view.findViewById(R.id.et_height); + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight); + final EditText etAge = (EditText) view.findViewById(R.id.et_age); + final TextView tvResult = (TextView) view.findViewById(R.id.tv_result); + rgSex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + tvResult.setText("--"); + etHeight.setText(""); + etWeight.setText(""); + etAge.setText(""); + } + }); + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText(""); + if (etHeight.getText().toString().indexOf(".") >= 0) { + if (etHeight + .getText() + .toString() + .indexOf( + ".", + etHeight.getText().toString().indexOf(".") + 1) > 0) { + etHeight.setText(etHeight + .getText() + .toString() + .substring( + 0, + etHeight.getText().toString().length() - 1)); + etHeight.setSelection(etHeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + strWeight = etWeight.getText().toString(); + strAge = etAge.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + if (".".equals(strHeight.substring(0, 1))) { + ToastUtil.showToast("身高范围:100cm-300cm"); + etHeight.setText(""); + return; + } + mHeight = Double.parseDouble(strHeight.trim()); + if (strHeight.length() <= 2) { + return; + } + if (mHeight < 100 || mHeight > 300) { + ToastUtil.showToast("身高范围:100cm-300cm"); + etHeight.setText(""); + return; + } + if (StringUtil.notEmpty(strWeight)) { + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + } else { + return; + } + if (StringUtil.notEmpty(strAge)) { + mAge = Integer.parseInt(strAge.trim()); + if (mAge < 1 || mAge > 200) { + ToastUtil.showToast("年龄范围:0-200"); + etAge.setText(""); + return; + } + } else { + return; + } + double result = 0.0; + + if (mHeight <100 || mWeight < 0 || mAge < 0) { + return; + } + // (1)男性BEE(kcal)=66.5+13.7×W+5.0×H-6.8×A + // (2)女性BEE(kcal)=65.1+9.56×W+1.85×H-4.68×A + // W为体重(kg),H为身高(cm),A为年龄(岁),BEE以kcal为计算单位,1kcal=4.184kJ + if (rgSex.getCheckedRadioButtonId() == R.id.rb_male) { + double temp = MathUtil.add(66.5, + MathUtil.mul(13.7, mWeight)); + double temp1 = MathUtil.sub(MathUtil.mul(5.0, mHeight), + MathUtil.mul(6.8, mAge)); + result = MathUtil.mul(4.184, MathUtil.add(temp, temp1)); + } else { + double temp = MathUtil.add(655.1, + MathUtil.mul(9.56, mWeight)); + double temp1 = MathUtil.sub( + MathUtil.mul(1.85, mHeight), + MathUtil.mul(4.68, mAge)); + result = MathUtil.mul(4.184, MathUtil.add(temp, temp1)); + } + DecimalFormat df = new DecimalFormat("0.0000"); + + String r = df.format(result / 4.184); + tvResult.setText(r); + + // tvResult.setText(String.valueOf(result/4.184)); + + } + } + }); + + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etWeight.getText().toString().indexOf(".") >= 0) { + if (etWeight + .getText() + .toString() + .indexOf( + ".", + etWeight.getText().toString().indexOf(".") + 1) > 0) { + etWeight.setText(etWeight + .getText() + .toString() + .substring( + 0, + etWeight.getText().toString().length() - 1)); + etWeight.setSelection(etWeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + strWeight = etWeight.getText().toString(); + strAge = etAge.getText().toString(); + if (StringUtil.notEmpty(strWeight)) { + if (".".equals(strWeight.substring(0, 1))) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + if (StringUtil.notEmpty(strHeight)) { + mHeight = Double.parseDouble(strHeight.trim()); + if (mHeight < 100 || mHeight > 300) { + ToastUtil.showToast("身高范围:100cm-300cm"); + etHeight.setText(""); + return; + } + } else { + return; + } + if (StringUtil.notEmpty(strAge)) { + mAge = Integer.parseInt(strAge.trim()); + if (mAge < 1 || mAge > 200) { + ToastUtil.showToast("年龄范围:0-200"); + etAge.setText(""); + return; + } + } else { + return; + } + double result = 0.0; + + if (mHeight < 0 || mWeight < 0 || mAge < 0) { + return; + } + + if (rgSex.getCheckedRadioButtonId() == R.id.rb_male) { + double temp = MathUtil.add(66.5, + MathUtil.mul(13.7, mWeight)); + double temp1 = MathUtil.sub(MathUtil.mul(5.0, mHeight), + MathUtil.mul(6.8, mAge)); + result = MathUtil.mul(4.184, MathUtil.add(temp, temp1)); + + } else { + double temp = MathUtil.add(655.1, + MathUtil.mul(9.56, mWeight)); + double temp1 = MathUtil.sub( + MathUtil.mul(1.85, mHeight), + MathUtil.mul(4.68, mAge)); + result = MathUtil.mul(4.184, MathUtil.add(temp, temp1)); + } + DecimalFormat df = new DecimalFormat("0.0000"); + + String r = df.format(result / 4.184); + tvResult.setText(r); + // tvResult.setText(String.valueOf(result/4.184)); + } + } + }); + + etAge.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etAge.getText().toString().indexOf(".") >= 0) { + if (etAge + .getText() + .toString() + .indexOf(".", + etAge.getText().toString().indexOf(".") + 1) > 0) { + etAge.setText(etAge + .getText() + .toString() + .substring(0, + etAge.getText().toString().length() - 1)); + etAge.setSelection(etAge.getText().toString().length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + strWeight = etWeight.getText().toString(); + strAge = etAge.getText().toString(); + if (StringUtil.notEmpty(strAge)) { + mAge = Integer.parseInt(strAge.trim()); + if (mAge < 1 || mAge > 200) { + ToastUtil.showToast("年龄范围:0-200"); + etAge.setText(""); + return; + } + if (strHeight.length() <= 2) { + return; + } + if (StringUtil.notEmpty(strHeight)) { + mHeight = Double.parseDouble(strHeight.trim()); + if (mHeight < 100 || mHeight > 300) { + ToastUtil.showToast("身高范围:100cm-300cm"); + etHeight.setText(""); + return; + } + } else { + return; + } + if (StringUtil.notEmpty(strWeight)) { + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + } else { + return; + } + double result = 0.0; + + if (mHeight < 0 || mWeight < 0 || mAge < 0) { + return; + } + if (rgSex.getCheckedRadioButtonId() == R.id.rb_male) { + double temp = MathUtil.add(66.5, + MathUtil.mul(13.7, mWeight)); + double temp1 = MathUtil.sub(MathUtil.mul(5.0, mHeight), + MathUtil.mul(6.8, mAge)); + result = MathUtil.mul(4.184, MathUtil.add(temp, temp1)); + } else { + double temp = MathUtil.add(655.1, + MathUtil.mul(9.56, mWeight)); + double temp1 = MathUtil.sub( + MathUtil.mul(1.85, mHeight), + MathUtil.mul(4.68, mAge)); + result = MathUtil.mul(4.184, MathUtil.add(temp, temp1)); + } + DecimalFormat df = new DecimalFormat("0.0000"); + + String r = df.format(result / 4.184); + tvResult.setText(r); + // tvResult.setText(String.valueOf(result/4.184)); + } + } + }); + } + + /** + * 体表面积 + */ + private void startFive(View view) { + final EditText etHeight = (EditText) view.findViewById(R.id.et_height); + final EditText etWeight = (EditText) view.findViewById(R.id.et_weight); + final TextView tvResult = (TextView) view.findViewById(R.id.tv_result); + etHeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etHeight.getText().toString().indexOf(".") >= 0) { + if (etHeight + .getText() + .toString() + .indexOf( + ".", + etHeight.getText().toString().indexOf(".") + 1) > 0) { + etHeight.setText(etHeight + .getText() + .toString() + .substring( + 0, + etHeight.getText().toString().length() - 1)); + etHeight.setSelection(etHeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + strWeight = etWeight.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + if (".".equals(strHeight.substring(0, 1))) { + ToastUtil.showToast("身高范围:100cm-300cm"); + etHeight.setText(""); + return; + } + mHeight = Double.parseDouble(strHeight.trim()); + // if (strHeight.length() <= 2) { + // return; + // } + if (mHeight > 300.00 || mHeight < 1) { + ToastUtil.showToast("请输入身高参考范围:100cm-300cm"); + etHeight.setText(""); + return; + } + if (StringUtil.notEmpty(strWeight)) { + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400.00) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + } else { + return; + } + if (mHeight < 100 || mWeight < 0) { + return; + } + double temp = MathUtil.add(MathUtil.mul(0.0061, mHeight), + MathUtil.mul(0.0128, mWeight)); + double result = MathUtil.sub(temp, 0.1529); + + DecimalFormat df = new DecimalFormat("0.0000"); + + String r = df.format(result); + tvResult.setText(r); + } + } + }); + + etWeight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etWeight.getText().toString().indexOf(".") >= 0) { + if (etWeight + .getText() + .toString() + .indexOf( + ".", + etWeight.getText().toString().indexOf(".") + 1) > 0) { + etWeight.setText(etWeight + .getText() + .toString() + .substring( + 0, + etWeight.getText().toString().length() - 1)); + etWeight.setSelection(etWeight.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etHeight.getText().toString(); + + strWeight = etWeight.getText().toString(); + if (StringUtil.notEmpty(strWeight)) { + if (".".equals(strWeight.substring(0, 1))) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + mWeight = Double.parseDouble(strWeight.trim()); + if (mWeight < 1 || mWeight > 400) { + ToastUtil.showToast("体重范围:5Kg-400Kg"); + etWeight.setText(""); + return; + } + if (StringUtil.notEmpty(strHeight)) { + mHeight = Double.parseDouble(strHeight.trim()); + if (mHeight > 300 || mHeight < 1) { + ToastUtil.showToast("请输入身高参考范围:100cm-300cm"); + etHeight.setText(""); + return; + } + } else { + return; + } + if (mHeight < 100 || mWeight < 0) { + return; + } + double temp = MathUtil.add(MathUtil.mul(0.0061, mHeight), + MathUtil.mul(0.0128, mWeight)); + double result = MathUtil.sub(temp, 0.1529); + DecimalFormat df = new DecimalFormat("0.0000"); + + String r = df.format(result); + tvResult.setText(r); + } + } + }); + } + + int oneScore; + int twoScore; + int threeScore; + int fourScore; + int fiveScore; + + /** + * Child-Pugh评分 + */ + private void startSix(View view) { + RadioGroup one = (RadioGroup) view.findViewById(R.id.rg_one); + RadioGroup two = (RadioGroup) view.findViewById(R.id.rg_two); + RadioGroup three = (RadioGroup) view.findViewById(R.id.rg_three); + RadioGroup four = (RadioGroup) view.findViewById(R.id.rg_four); + RadioGroup five = (RadioGroup) view.findViewById(R.id.rg_five); + final TextView tvResult = (TextView) view.findViewById(R.id.tv_result); + tvResult.setText("0分(您已选择0个必选项,还有5个必选项未选)"); + one.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_five_default: + oneScore = 1; + break; + case R.id.rb_five_small: + oneScore = 2; + break; + case R.id.rb_five_big: + oneScore = 3; + break; + } + + int sum = 0; + if (oneScore == 0) { + sum++; + } + if (twoScore == 0) { + sum++; + } + if (threeScore == 0) { + sum++; + } + if (fourScore == 0) { + sum++; + } + if (fiveScore == 0) { + sum++; + } + int result = oneScore + twoScore + threeScore + fourScore + + fiveScore; + + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(5 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + two.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_ascites_default: + twoScore = 1; + break; + case R.id.rb_ascites_small: + twoScore = 2; + break; + case R.id.rb_ascites_big: + twoScore = 3; + break; + } + + int sum = 0; + if (oneScore == 0) { + sum++; + } + if (twoScore == 0) { + sum++; + } + if (threeScore == 0) { + sum++; + } + if (fourScore == 0) { + sum++; + } + if (fiveScore == 0) { + sum++; + } + int result = oneScore + twoScore + threeScore + fourScore + + fiveScore; + + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(5 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + three.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_μmol_default: + threeScore = 1; + break; + case R.id.rb_μmol_small: + threeScore = 2; + break; + case R.id.rb_μmol_big: + threeScore = 3; + break; + } + + int sum = 0; + if (oneScore == 0) { + sum++; + } + if (twoScore == 0) { + sum++; + } + if (threeScore == 0) { + sum++; + } + if (fourScore == 0) { + sum++; + } + if (fiveScore == 0) { + sum++; + } + int result = oneScore + twoScore + threeScore + fourScore + + fiveScore; + + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(5 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + four.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_g_default: + fourScore = 1; + break; + case R.id.rb_g_small: + fourScore = 2; + break; + case R.id.rb_g_big: + fourScore = 3; + break; + } + + int sum = 0; + if (oneScore == 0) { + sum++; + } + if (twoScore == 0) { + sum++; + } + if (threeScore == 0) { + sum++; + } + if (fourScore == 0) { + sum++; + } + if (fiveScore == 0) { + sum++; + } + int result = oneScore + twoScore + threeScore + fourScore + + fiveScore; + + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(5 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + five.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_s_default: + fiveScore = 1; + break; + case R.id.rb_s_small: + fiveScore = 2; + break; + case R.id.rb_s_big: + fiveScore = 3; + break; + } + + int sum = 0; + if (oneScore == 0) { + sum++; + } + if (twoScore == 0) { + sum++; + } + if (threeScore == 0) { + sum++; + } + if (fourScore == 0) { + sum++; + } + if (fiveScore == 0) { + sum++; + } + int result = oneScore + twoScore + threeScore + fourScore + + fiveScore; + + if (sum != 0) + tvResult.setText(String.valueOf(result) + "分(您已选择" + + formatterNum(5 - sum) + "个必选项,还有" + sum + + "个必选项未选)"); + else + tvResult.setText(String.valueOf(result) + "分"); + } + }); + } + + /** + * + * 格式化数字 + */ + private String formatterNum(int num) { + String result = ""; + switch (num) { + case 1: + result = "一"; + break; + case 2: + result = "二"; + break; + case 3: + result = "三"; + break; + case 4: + result = "四"; + break; + case 5: + result = "五"; + break; + case 6: + result = "六"; + break; + case 7: + result = "七"; + break; + case 8: + result = "八"; + break; + case 9: + result = "九"; + break; + case 10: + result = "十"; + break; + case 11: + result = "十一"; + break; + } + return result; + } + + double mRed; + double mTemp; + + /** + * MELD评分 + */ + private void startSeven(View view) { + final EditText etRed = (EditText) view.findViewById(R.id.et_red); + final EditText etBlood = (EditText) view.findViewById(R.id.et_blood); + final EditText etINR = (EditText) view.findViewById(R.id.et_inr); + final RadioGroup rgCause = (RadioGroup) view + .findViewById(R.id.rg_cause); + final TextView tvResult = (TextView) view.findViewById(R.id.tv_result); + rgCause.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + strHeight = etRed.getText().toString(); + strWeight = etBlood.getText().toString(); + strAge = etINR.getText().toString(); + if (StringUtil.notEmpty(strHeight) + && StringUtil.notEmpty(strWeight) + && StringUtil.notEmpty(strAge)) { + mRed = Double.parseDouble(strHeight.trim()); + mWeight = Double.parseDouble(strWeight.trim()); + mTemp = Double.parseDouble(strAge.trim()); + // R=3.8×ln[总胆红素(umol/L)/17.1]+11.2×ln(INR)+9.6ln[肌酐(umol/L)/88.4]+6.4×(病因:胆汁性或酒精性0,其他1) + double temp1 = MathUtil.add( + MathUtil.mul(3.8, + MathUtil.ln(MathUtil.div(mRed, 17.1))), + MathUtil.mul(11.2, MathUtil.ln(mTemp))); + double temp2 = MathUtil.mul(9.6, + MathUtil.ln(MathUtil.div(mWeight, 88.4))); + double result = MathUtil.add(temp1, temp2); + + if (checkedId == R.id.rb_other) { + result = result + 6.4 * 1; + } else { + result = result + 6.4 * 0; + } + DecimalFormat df = new DecimalFormat("0.00"); + String r = df.format(result); + tvResult.setText(r); + } + } + }); + etRed.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etRed.getText().toString().indexOf(".") >= 0) { + if (etRed + .getText() + .toString() + .indexOf(".", + etRed.getText().toString().indexOf(".") + 1) > 0) { + etRed.setText(etRed + .getText() + .toString() + .substring(0, + etRed.getText().toString().length() - 1)); + etRed.setSelection(etRed.getText().toString().length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strHeight = etRed.getText().toString(); + if (StringUtil.notEmpty(strHeight)) { + if (".".equals(strHeight.substring(0, 1))) { + ToastUtil.showToast("请正确输入总胆红素(0.1-2000)"); + etRed.setText(""); + return; + } + mRed = Double.parseDouble(strHeight.trim()); + if (strHeight.length() <= 1 + && "0".equals(strHeight.substring(0, 1))) { + return; + } + if (strHeight.length() > 2 + && ".".equals(strHeight.substring(1, 2))) { + if (mRed < 0.1) { + ToastUtil.showToast("请正确输入总胆红素(0.1-2000)"); + etRed.setText(""); + return; + } + } + if (mRed > 2000) { + ToastUtil.showToast("请正确输入总胆红素(0.1-2000)"); + etRed.setText(""); + return; + } + } + strWeight = etBlood.getText().toString(); + strAge = etINR.getText().toString(); + if (StringUtil.notEmpty(strHeight) + && StringUtil.notEmpty(strWeight) + && StringUtil.notEmpty(strAge)) { + mWeight = Double.parseDouble(strWeight.trim()); + mTemp = Double.parseDouble(strAge.trim()); + + if (mRed < 0 || mTemp < 0 || mWeight < 0) { + return; + } + double temp1 = MathUtil.add( + MathUtil.mul(3.8, + MathUtil.ln(MathUtil.div(mRed, 17.1))), + MathUtil.mul(11.2, MathUtil.ln(mTemp))); + double temp2 = MathUtil.mul(9.6, + MathUtil.ln(MathUtil.div(mWeight, 88.4))); + double result = MathUtil.add(temp1, temp2); + + if (rgCause.getCheckedRadioButtonId() == R.id.rb_other) { + result = result + 6.4 * 1; + } else { + result = result + 6.4 * 0; + } + DecimalFormat df = new DecimalFormat("0.00"); + String r = df.format(result); + tvResult.setText(r); + } + } + }); + + etBlood.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etBlood.getText().toString().indexOf(".") >= 0) { + if (etBlood + .getText() + .toString() + .indexOf( + ".", + etBlood.getText().toString().indexOf(".") + 1) > 0) { + etBlood.setText(etBlood + .getText() + .toString() + .substring( + 0, + etBlood.getText().toString().length() - 1)); + etBlood.setSelection(etBlood.getText().toString() + .length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strWeight = etBlood.getText().toString(); + if (StringUtil.notEmpty(strWeight)) { + if (".".equals(strWeight.substring(0, 1))) { + ToastUtil.showToast("请正确输入肌酐(0.1-5000)"); + etBlood.setText(""); + return; + } + mWeight = Double.parseDouble(strWeight.trim()); + if (strWeight.length() <= 1 + && "0".equals(strWeight.substring(0, 1))) { + return; + } + if (strWeight.length() > 2 + && ".".equals(strWeight.substring(1, 2))) { + if (mWeight < 0.1) { + ToastUtil.showToast("请正确输入肌酐(0.1-5000)"); + etBlood.setText(""); + return; + } + } + if (mWeight > 5000) { + ToastUtil.showToast("请正确输入肌酐(0.1-5000)"); + etBlood.setText(""); + return; + } + } + strHeight = etRed.getText().toString(); + strAge = etINR.getText().toString(); + if (StringUtil.notEmpty(strHeight) + && StringUtil.notEmpty(strWeight) + && StringUtil.notEmpty(strAge)) { + mRed = Double.parseDouble(strHeight.trim()); + mTemp = Double.parseDouble(strAge.trim()); + + if (mRed < 0 || mTemp < 0 || mWeight < 0) { + return; + } + double temp1 = MathUtil.add( + MathUtil.mul(3.8, + MathUtil.ln(MathUtil.div(mRed, 17.1))), + MathUtil.mul(11.2, MathUtil.ln(mTemp))); + double temp2 = MathUtil.mul(9.6, + MathUtil.ln(MathUtil.div(mWeight, 88.4))); + double result = MathUtil.add(temp1, temp2); + + if (rgCause.getCheckedRadioButtonId() == R.id.rb_other) { + result = result + 6.4 * 1; + } else { + result = result + 6.4 * 0; + } + DecimalFormat df = new DecimalFormat("0.00"); + String r = df.format(result); + tvResult.setText(r); + } + } + }); + + etINR.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + tvResult.setText("--"); + if (etINR.getText().toString().indexOf(".") >= 0) { + if (etINR + .getText() + .toString() + .indexOf(".", + etINR.getText().toString().indexOf(".") + 1) > 0) { + etINR.setText(etINR + .getText() + .toString() + .substring(0, + etINR.getText().toString().length() - 1)); + etINR.setSelection(etINR.getText().toString().length()); + } + } + } + + @Override + public void afterTextChanged(Editable s) { + strAge = etINR.getText().toString(); + if (StringUtil.notEmpty(strAge)) { + if (".".equals(strAge.substring(0, 1))) { + ToastUtil.showToast("请正确输入INR(0.01-5)"); + etINR.setText(""); + return; + } + mTemp = Double.parseDouble(strAge.trim()); + if (strAge.length() <= 1 + && "0".equals(strAge.substring(0, 1))) { + return; + } + if ("0".equals(strAge.substring(0, 1)) + && strAge.length() >= 2 + && ".".equals(strAge.substring(1, 2)) + && strAge.length() >= 3 + && "0".equals(strAge.substring(2, 3)) + && strAge.length() >= 4) { + if (mTemp < 0.01) { + ToastUtil.showToast("请正确输入INR(0.01-5)"); + etINR.setText(""); + return; + } + } else if ("0".equals(strAge.substring(0, 1)) + && strAge.length() >= 2 + && ".".equals(strAge.substring(1, 2)) + && strAge.length() >= 3 + && "0".equals(strAge.substring(2, 3))) { + return; + } + if (mTemp > 5) { + ToastUtil.showToast("请正确输入INR(0.01-5)"); + etINR.setText(""); + return; + } + } + strHeight = etRed.getText().toString(); + strWeight = etBlood.getText().toString(); + if (StringUtil.notEmpty(strHeight) + && StringUtil.notEmpty(strWeight) + && StringUtil.notEmpty(strAge)) { + mRed = Double.parseDouble(strHeight.trim()); + mWeight = Double.parseDouble(strWeight.trim()); + + if (mRed < 0 || mTemp < 0 || mWeight < 0) { + return; + } + double temp1 = MathUtil.add( + MathUtil.mul(3.8, + MathUtil.ln(MathUtil.div(mRed, 17.1))), + MathUtil.mul(11.2, MathUtil.ln(mTemp))); + double temp2 = MathUtil.mul(9.6, + MathUtil.ln(MathUtil.div(mWeight, 88.4))); + double result = MathUtil.add(temp1, temp2); + + if (rgCause.getCheckedRadioButtonId() == R.id.rb_other) { + result = result + 6.40; + } + DecimalFormat df = new DecimalFormat("0.00"); + String r = df.format(result); + tvResult.setText(r); + } + } + }); + } + + private void startNineteen(View view) { + + final RadioGroup rg_sex = (RadioGroup) view.findViewById(R.id.rg_sex); + final RadioGroup rg_sexs = (RadioGroup) view.findViewById(R.id.rg_sex1); + + final EditText et_height = (EditText) view.findViewById(R.id.et_height); + + final EditText et_weight = (EditText) view.findViewById(R.id.et_weight); + + final EditText et_age = (EditText) view.findViewById(R.id.et_age); + + final TextView jiganzhi = (TextView) view.findViewById(R.id.jiganzhi); + final TextView tv_result = (TextView) view.findViewById(R.id.tv_result); + + final RadioButton rb_mg = (RadioButton) view.findViewById(R.id.rb_mg); + final RadioButton rb_um = (RadioButton) view.findViewById(R.id.rb_umol); + final RadioButton rb_man = (RadioButton) view.findViewById(R.id.rb_man); + final RadioButton rb_woman = (RadioButton) view + .findViewById(R.id.rb_woman); + + rg_sex.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + et_age.setText(""); + et_height.setText(""); + et_weight.setText(""); + tv_result.setText(""); + switch (checkedId) { + case R.id.rb_mg: + jiganzhi.setText("mg/dL"); + break; + case R.id.rb_umol: + jiganzhi.setText("µmol/L"); + break; + + default: + break; + } + } + }); + rg_sexs.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + et_age.setText(""); + et_height.setText(""); + et_weight.setText(""); + tv_result.setText(""); + } + }); + + rg_sex.check(R.id.rb_mg); + rg_sexs.check(R.id.rb_man); + et_weight.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + final String height = et_height.getText().toString().trim(); + final String age = et_age.getText().toString().trim(); + final String weight = et_weight.getText().toString().trim(); + if (!height.equals("0") && !age.equals("0") + && !et_weight.equals("0") && !height.equals("") + && !age.equals("") && !weight.equals("")) { + double height1 = Double.parseDouble(height); + double age1 = Double.parseDouble(age); + double weight1 = Double.parseDouble(weight); + double result = 0; + // 男 mg/dl + if (rb_mg.isChecked() && rb_man.isChecked()) { + result = ((140 - age1) * weight1) / (72 * height1); + + } + // 女 mg/dl + if (rb_mg.isChecked() && rb_woman.isChecked()) { + result = ((140 - age1) * weight1) / (72 * height1) + * 0.85; + } + // 男 µmol/L + // c=new Double(Math.round(a/b)/1000.0);//这样为保持3位 + if (rb_um.isChecked() && rb_man.isChecked()) { + result = ((140 - age1) * weight1) / (0.818 * height1); + } + // 女 µmol/L + if (rb_um.isChecked() && rb_woman.isChecked()) { + result = ((140 - age1) * weight1) / (0.818 * height1) + * 0.85; + } + + if (result != 0) { + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(result); + tv_result.setText(Weight); + } + + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + et_height.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + final String height = et_height.getText().toString().trim(); + final String age = et_age.getText().toString().trim(); + final String weight = et_weight.getText().toString().trim(); + if (!height.equals("0") && !age.equals("0") + && !et_weight.equals("0") && !height.equals("") + && !age.equals("") && !weight.equals("")) { + double height1 = Double.parseDouble(height); + double age1 = Double.parseDouble(age); + double weight1 = Double.parseDouble(weight); + + double result = 0; + // 男 mg/dl + if (rb_mg.isChecked() && rb_man.isChecked()) { + result = (140 - age1) * weight1 / (72 * height1); + } + // 女 mg/dl + if (rb_mg.isChecked() && rb_woman.isChecked()) { + result = (140 - age1) * weight1 / (72 * height1) * 0.85; + } + // 男 µmol/L + // c=new Double(Math.round(a/b)/1000.0);//这样为保持3位 + if (rb_um.isChecked() && rb_man.isChecked()) { + result = ((140 - age1) * weight1) / (0.818 * height1); + } + // 女 µmol/L + if (rb_um.isChecked() && rb_woman.isChecked()) { + result = ((140 - age1) * weight1) / (0.818 * height1) + * 0.85; + } + + if (result != 0) { + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(result); + tv_result.setText(Weight); + } + + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + // et_age.addTextChangedListener(new TextWatcher() { + // @Override + // public void onTextChanged(CharSequence s, int start, int before, + // int count) { + // final String height = et_height.getText().toString().trim(); + // final String age = et_age.getText().toString().trim(); + // + // if (!height.equals("0") && !age.equals("0") &&!height.equals("") && + // !age.equals("") ) { + // double height1=Double.parseDouble(height); + // double age1=Double.parseDouble(age); + // // Math.pow + // //男 mg/dl + // double result = 186*Math.pow(height1, -1.154)*Math.pow(age1, -0.203); + // DecimalFormat df = new DecimalFormat("0.00"); + // String Weight = df.format(result); + // tv_result.setText(Weight); + // } + // + // } + // + // @Override + // public void beforeTextChanged(CharSequence s, int start, int count, + // int after) { + // + // } + // + // @Override + // public void afterTextChanged(Editable s) { + // + // } + // }); + et_age.addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + final String height = et_height.getText().toString().trim(); + final String age = et_age.getText().toString().trim(); + final String weight = et_weight.getText().toString().trim(); + if (!height.equals("0") && !age.equals("0") + && !et_weight.equals("0") && !height.equals("") + && !age.equals("") && !weight.equals("")) { + double height1 = Double.parseDouble(height); + double age1 = Double.parseDouble(age); + double weight1 = Double.parseDouble(weight); + + double result = 0; + // 男 mg/dl + if (rb_mg.isChecked() && rb_man.isChecked()) { + result = (140 - age1) * weight1 / (72 * height1); + } + // 女 mg/dl + if (rb_mg.isChecked() && rb_woman.isChecked()) { + result = (140 - age1) * weight1 / (72 * height1) * 0.85; + } + // 男 µmol/L + // c=new Double(Math.round(a/b)/1000.0);//这样为保持3位 + if (rb_um.isChecked() && rb_man.isChecked()) { + result = ((140 - age1) * weight1) / (0.818 * height1); + } + // 女 µmol/L + if (rb_um.isChecked() && rb_woman.isChecked()) { + result = ((140 - age1) * weight1) / (0.818 * height1) + * 0.85; + } + + if (result != 0) { + DecimalFormat df = new DecimalFormat("0.00"); + String Weight = df.format(result); + tv_result.setText(Weight); + } + + } + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/TopicAcitivty.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TopicAcitivty.java new file mode 100644 index 0000000..f794c46 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/TopicAcitivty.java @@ -0,0 +1,457 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.format.DateUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.GanDanHouseAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.bean.HouseBean; +import cn.shangyu.gdxzExpert.bean.HouseBean.HouseList; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class TopicAcitivty extends AppCompatActivity { + private String topic; + private CustomProgressDialog pd; + private RelativeLayout top_back_layout; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_topic); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + lv_visit = (PullToRefreshListView) findViewById(R.id.lv_item_case); + top_title = (TextView) findViewById(R.id.top_title); + top_back = (ImageView) findViewById(R.id.top_back); + top_back_layout = (RelativeLayout) findViewById(R.id.top_back_layout); + + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + top_back.setVisibility(View.VISIBLE); + top_right_message = (ImageButton) findViewById(R.id.top_right_system_msg); + top_right_message.setVisibility(View.VISIBLE); + top_right_message.setImageDrawable(getResources().getDrawable( + R.drawable.icon_contributing)); + + top_right_message.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + + Intent in = new Intent(TopicAcitivty.this, + WriteTopicActivity.class); + TopicAcitivty.this.startActivityForResult(in, 201); + + } + }); + top_back_layout.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + TopicAcitivty.this.finish(); + } + }); + Intent in = getIntent(); + topic = in.getStringExtra("topic"); + top_title.setText(topic + "话题"); + lv_visit.setMode(Mode.BOTH); + initListViewTipText(); + beans = new ArrayList<>(); + getData(); + } + + private TextView top_title; + private ImageView top_back; + private ImageButton top_right_message; + private PullToRefreshListView lv_visit; + private LinearLayout ll_empty; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private List beans; + private int start = 1; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + switch (msg.what) { + case 101: + if(pd!=null&&pd.isShowing()) + { + pd.dismiss(); + } + Gson gson = new Gson(); + if (beans.size() != 0) { + beans.clear(); + start = 1; + } + HouseBean ganDanHouseBean = gson.fromJson((String) msg.obj, + HouseBean.class); + beans.addAll(ganDanHouseBean.data.list); + case GET_DATA_SUCCESS: + StringUtil.TOPIC = null; + if (beans.isEmpty()) { + // 没有获取则显示暂无随访的的图文信息 + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(Mode.DISABLED); + return; + } + if (beans.size() < 4) { + lv_visit.setMode(Mode.PULL_DOWN_TO_REFRESH); + } + setAdapter(); + lv_visit.onRefreshComplete(); + lv_visit.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + Intent intent = new Intent(TopicAcitivty.this, + GanDanHouseDetialActivity.class); + + intent.putExtra("uuid", beans.get(arg2 - 1).getUuid()); + // getActivity().startActivity(intent); + TopicAcitivty.this.startActivityForResult(intent, 201); + } + }); + break; + + default: + break; + } + } + + private void setAdapter() { + // TODO Auto-generated method stub + + if (ganDanAdapter == null) { + ganDanAdapter = new GanDanHouseAdapter(beans, + TopicAcitivty.this); + lv_visit.setAdapter(ganDanAdapter); + } else { + ganDanAdapter.notifyDataSetChanged(); + } + } + + }; + private GanDanHouseAdapter ganDanAdapter; + + public static int isLookingImg = 0; + + // @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + if (ganDanAdapter != null && BaseApplication.getNotify() == true) { + getData(); + BaseApplication.setNotify(false); + } + + } + + // 获取数据 + private void getData() { + // TODO Auto-generated method stub + + new Thread() { + public void run() { + Map param = new HashMap<>(); + param.put("page", "1"); + param.put("tag", topic); + sendJsonPostParamNoResultMD5(Url.getInteractionListByTag, param, + 101); +// try { +// +// List parameters = new ArrayList(); +// +// BasicNameValuePair value01 = new BasicNameValuePair("page", +// "1"); +// BasicNameValuePair value02 = new BasicNameValuePair("tag", +// topic); +// parameters.add(value02); +// parameters.add(value01); +// HttpResult httpResult = HttpHelper.post( +// Url.getInteractionListByTag, parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// // LogUtils.e("discussionFragment" + result); +// Gson gson = new Gson(); +// +// if (beans.size() != 0) { +// beans.clear(); +// start = 1; +// } +// HouseBean ganDanHouseBean = gson.fromJson(result, +// HouseBean.class); +// beans.addAll(ganDanHouseBean.data.list); +// pd.dismiss(); +// handler.sendEmptyMessage(GET_DATA_SUCCESS); +// } catch (Exception e) { +// e.printStackTrace(); +// +// ToastUtil.showMessage("获取失败,请重试"); +// lv_visit.onRefreshComplete(); +// } + }; + }.start(); + + } + + private void getNewData(final String page) { + // TODO Auto-generated method stub + new Thread() { + public void run() { + Map param = new HashMap<>(); + param.put("page", page); + param.put("tag", topic); + sendJsonPostParamNoResultMD5(Url.getInteractionListByTag, param, + 101); +// try { +// +// List parameters = new ArrayList(); +// +// BasicNameValuePair value02 = new BasicNameValuePair("page", +// page); +// BasicNameValuePair value01 = new BasicNameValuePair("tag", +// topic); +// parameters.add(value01); +// parameters.add(value02); +// HttpResult httpResult = HttpHelper.post( +// Url.getInteractionListByTag, parameters);// 请求网络 +// String result = httpResult.getString();// str为服务器返回的json串 +// // if (result == null) { +// // return; +// // } +// // Log.e("TAG", result.toString()); +// Gson gson = new Gson(); +// // if (result == null || result.equals("")) { +// // ToastUtil.showMessage("请求服务器失败,请重试"); +// // // pd.dismiss(); +// // return; +// // } +// HouseBean ganDanHouseBean = gson.fromJson(result, +// HouseBean.class); +// if (ganDanHouseBean.data.list.size() == 0) { +// ToastUtil.showMessage("没有更多数据了"); +// +// } +// beans.addAll(ganDanHouseBean.data.list); +// +// handler.sendEmptyMessage(GET_DATA_SUCCESS); +// +// } catch (Exception e) { +// e.printStackTrace(); +// +// ToastUtil.showMessage("获取失败,请重试"); +// } + }; + }.start(); + } + + // 上拉加载 + protected void geneItems() { + // TODO Auto-generated method stub + start += 1; + getNewData(start + ""); + } + + // 下拉刷新 + protected void refreshItems() { + // TODO Auto-generated method stub + getData(); + + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(TopicAcitivty.this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + }); + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + + @Override + public void finish() { + // TODO Auto-generated method stub + if (BaseApplication.getNotify() == false) { + BaseApplication.setNotify(true); + } + + super.finish(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if(resultCode==201){ + getData(); + } + } + public void sendJsonPostParamNoResultMD5(final String postUrl, final Map param, final int callType) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign1(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)||"106".equals(optString)||"1".equals(optString)) { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + handler.sendMessage(msg); + }else { + handler.sendEmptyMessage(100); + } + }else { + handler.sendEmptyMessage(100); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + handler.sendEmptyMessage(404); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + } + }); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/UpanExchangeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/UpanExchangeActivity.java new file mode 100644 index 0000000..82af8d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/UpanExchangeActivity.java @@ -0,0 +1,174 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.RadioButton; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.UGoodsBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.ContactEmailActivity; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class UpanExchangeActivity extends BaseActivity implements OnCallBackFromNet{ + + public static final int GETUGOODS = 203; + private CustomProgressDialog pd; + private TextView tv_name; + private TextView tv_jifen; + private TextView tv_duihuan; + private RadioButton rb_1; + private TextView tv_exchange,tv_jian,tv_jia; + private String uuid; + private int upannum=0; + private int goodsNum=1; + + @Override + public void setTitle() { + top_title.setText("U盘在线兑换"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_onlineexchange_upan); + tv_jian=view.findViewById(R.id.tv_jian); + tv_jia=view.findViewById(R.id.tv_jia); + tv_jia.setOnClickListener(this); + tv_jian.setOnClickListener(this); +// view.findViewById(R.id.rb_2).setVisibility(View.INVISIBLE); +// view.findViewById(R.id.rb_3).setVisibility(View.INVISIBLE); + AppManager.getAppManager().addActivity1(this); + rb_1 = view.findViewById(R.id.rb_1); + tv_name = view.findViewById(R.id.tv_name); + tv_jifen = view.findViewById(R.id.tv_jifen); + + tv_duihuan = view.findViewById(R.id.tv_duihuan); + tv_exchange = (TextView) view.findViewById(R.id.tv_exchange); + rb_1.setText("1"); + tv_exchange.setOnClickListener(this); + if (pd==null){ + pd = new CustomProgressDialog(this, "请稍候"); + } + upannum=getIntent().getIntExtra("upannum",0); + if(upannum==0) + { + getUpan(); + } + else + { + tv_jifen.setText("免费兑换剩余"+upannum+"个"); + } + getUGoods(); + return view; + } + private void getUpan() + { + Map param1= new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getUpanWelfareCount, param1, 2, this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_jia) { + if(upannum!=0&&upannum>goodsNum) + { + goodsNum++; + rb_1.setText(goodsNum+""); + } + } else if (id == R.id.tv_jian) { + if(upannum!=0&&goodsNum>1) + { + goodsNum--; + rb_1.setText(goodsNum+""); + } + } else if (id == R.id.tv_exchange) { + if(upannum==0) + { + ToastUtil.showMessage("暂无可兑换u盘"); + return; + } + + Intent intent = new Intent(UpanExchangeActivity.this,ContactEmailActivity.class); + intent.putExtra("type", 1); + intent.putExtra("uuid", uuid); + intent.putExtra("goodsNum", goodsNum+""); + intent.setType("UpanExchangeActivityt"); + startActivity(intent); + needreportPay("boint_jifengood",0+"","积分",goodsNum+"",tv_name.getText().toString(),null,"U盘","积分商城"); + } + } + private void getUGoods() { + pd.show(); + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getUGoods,map,GETUGOODS,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + pd.dismiss(); + switch (resultCode) { + case 2: + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) { + upannum = jsonObject.getInt("data"); + tv_jifen.setText("免费兑换剩余"+upannum+"个"); + } + + else + { + ToastUtil.showMessage(jsonObject.getString("msg")+""); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case GETUGOODS: + LogUtils.i("GETUGOODS = " + resultJson); + Gson gson1 = new Gson(); + UGoodsBean ubean = gson1.fromJson(resultJson, UGoodsBean.class); + if (ubean != null && "200".equals(ubean.getCode())) { + tv_name.setText(ubean.getData().getName()); +// tv_jifen.setText("本年度新增随访已达"); + if (ubean.getData().getTimes() == 0) { + tv_duihuan.setVisibility(View.GONE); + } else { + tv_duihuan.setText("已兑换" + ubean.getData().getTimes() + "件"); + } + uuid = ubean.getData().getUuid(); + } + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoActivity.java new file mode 100644 index 0000000..2247920 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoActivity.java @@ -0,0 +1,1302 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.apache.commons.lang.CharUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoAdapter; +import cn.shangyu.gdxzExpert.adapter.VideoSAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.bean.VideoBean; +import cn.shangyu.gdxzExpert.bean.VideoBeanNew; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.bean.VideoRollBean; +import cn.shangyu.gdxzExpert.bean.ZengshuBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class VideoActivity extends BaseActivity implements OnCallBackFromNet { + private View view; + private PullToRefreshListView mLv_Video; + private View ll_loading; + private TextView mLoad_empty; + private VideoActivity mActivity; + private VideoAdapter mAdapter; + private VideoBean bean; + private VideoBeanNew beantag; + private Button mBt_send_mind; + private ImageView bt_gandanxyb; + + private RelativeLayout mRl_List, mRl_Gv; + private GridView mGv_screen; + private ListView mLv_title; + private ListView mLv_title_tag; + private DrawableCenterButtonR mbt_screen; + private LinearLayout mLl_title; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private Button mBt_sure, mBt_reset; + private String mCheckedTitle = "全部";; + private String mCheckedTitle1; + private TitleAdapter mAdapter3; + private TitleAdapter1 mAdapter5; + private ImageView mIm_All1, mIm_All2; + private TextView mTv_Title; + private int page = 1; + private VideoSAdapter mAdapter4; + private String typeUuid = ""; + private LinearLayout mLl_patient_video,mLl_patient_video1,ll_go_qualitycourse; + private List data; + private List datatag; + List datatagname; + public static final int VIDEOROLL = 200; + private RollViewPager mViewPager; + private ArrayList dotList; + private View rl_topview; + private String sort = "2";//最新 + private DrawableCenterCheckBox cb_sort; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(getResources().getString(R.string.gandanshipin)); + top_right.setImageResource(R.drawable.gandanshipin_list); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + top_right_search.setOnClickListener(this); + top_right_search.setVisibility(View.VISIBLE); + top_back.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_video1); + initView(); + getscrllView(); + + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("肝胆视频"); + } + + private void getscrllView() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.videoRoll,map,VIDEOROLL,this); + } + private LinearLayout dotLl; + private TextView topNewsTitle; + private LinearLayout mViewPagerLay; + private View topNewsView; + private void initView() { + mLv_Video = (PullToRefreshListView) view.findViewById(R.id.lv_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + mBt_send_mind = (Button) view.findViewById(R.id.bt_send_mind); + bt_gandanxyb = view.findViewById(R.id.bt_gandanxyb); + mbt_screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_screen); + cb_sort = (DrawableCenterCheckBox) view.findViewById(R.id.cb_sort);//最新,最热 + mLl_title = (LinearLayout) view.findViewById(R.id.ll_title); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mLv_title = (ListView) view.findViewById(R.id.lv_title); + mLv_title_tag=view.findViewById(R.id.lv_title_tag); + mRl_List = (RelativeLayout) view.findViewById(R.id.rl_pop_list); + mRl_Gv = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mTv_Title = (TextView) view.findViewById(R.id.tv_title); + mIm_All1 = (ImageView) view.findViewById(R.id.imageView1); + mIm_All2 = (ImageView) view.findViewById(R.id.imageView2); + mLl_patient_video = (LinearLayout) view.findViewById(R.id.ll_go_patient_video); + mLl_patient_video1= (LinearLayout) view.findViewById(R.id.ll_go_patient_video1); + ll_go_qualitycourse= (LinearLayout) view.findViewById(R.id.ll_go_qualitycourse); + mLl_patient_video1.setVisibility(View.VISIBLE); + + //添加轮播 + rl_topview = view.findViewById(R.id.rl_topview); + dotLl = (LinearLayout) view.findViewById(R.id.dots_ll); + topNewsTitle = (TextView) view.findViewById(R.id.top_news_title); + mViewPagerLay = (LinearLayout) view.findViewById(R.id.top_news_viewpager); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + mViewPagerLay.setLayoutParams(ivLp); + +// topNewsView = UIUtils.inflate(R.layout.layout_videoroll_view); +// dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); +// topNewsTitle = (TextView) topNewsView.findViewById(R.id.top_news_title); +// mViewPagerLay = (LinearLayout) topNewsView.findViewById(R.id.top_news_viewpager); +// // 根据手机尺寸设置顶部轮播图的宽高 +// int width = getResources().getDisplayMetrics().widthPixels; +// // int height = CommonUtil.dip2px(mActivity, 180); +// int height = width * 320 / 640; +// if (width < 720) { +// height = width * 7 / 16 - 10; +// // height = width/2; +// LogUtil.i("width=" + width + "height=" + height); +// } +// ViewGroup.LayoutParams ivLp = mViewPagerLay +// .getLayoutParams(); +// ivLp.width = width; +// ivLp.height = height; +// mViewPagerLay.setLayoutParams(ivLp); + //------------------------------------- + mLv_Video.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + setLastUpdateTime(); + mActivity = this; + mLv_Video.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getVideoByKey(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getVideoByKey(); + } + }); + if (Constant.from==1){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_gandanxyb + ); + bt_gandanxyb.setVisibility(View.VISIBLE); + }else if (Constant.from==2){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_gandanxyb + ); + bt_gandanxyb.setVisibility(View.VISIBLE); + } +// if (Constant.HERO2019==1){ +// bt_gandanxyb.setVisibility(View.VISIBLE); +// }else { +// bt_gandanxyb.setVisibility(View.GONE); +// } + + mBt_send_mind.setOnClickListener(this); + bt_gandanxyb.setOnClickListener(this); + mbt_screen.setOnClickListener(this); + mLl_title.setOnClickListener(this); + mLl_patient_video.setOnClickListener(this); + ll_go_qualitycourse.setOnClickListener(this); + cb_sort.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + page = 1; + if (isChecked){ + sort = "1"; + cb_sort.setText("最热"); + }else { + sort = "2"; + cb_sort.setText("最新"); + } + mRl_List.setVisibility(View.GONE); + getVideoByKey(); + } + }); + initListener(); + getDataResult(); + getTagList(); + getNewDataResult(); + } + + private void initListener() { + // TODO Auto-generated method stub + mGv_screen.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_Gv.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + page = 1; + if (StringUtil.isEmpty(typeUuid) && Tags.size() == 0) { + mLv_Video.setMode(Mode.DISABLED); + getDataResult(); + } else { + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + } + } + }); + mLv_title.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if(mAdapter5!=null) + mAdapter5.setDataList(datatag.get(position).getList()); + mAdapter5.notifyDataSetChanged(); + if (position == 0) { + mCheckedTitle = "全部"; +// mTv_Title.setText("全部"); + mIm_All2.setImageResource(R.drawable.all_video); + mIm_All1.setImageResource(R.drawable.video_all); +// mTv_Title.setTextColor(getResources().getColor( +// R.color.tab_text_nor)); +// typeUuid = ""; +// if (Tags == null || Tags.size() == 0) { +// mLv_Video.setMode(Mode.DISABLED); +// getDataResult(); +// } else { +// mLv_Video.setMode(Mode.BOTH); +// getVideoByKey(); +// } + + } else { +// page = 1; + mCheckedTitle = datatag.get(position).getName(); +// if (mCheckedTitle.length()>13){ +// mTv_Title.setText(mCheckedTitle.substring(0,12)+"..."); +// }else { +// mTv_Title.setText(mCheckedTitle); +// } + +// mIm_All2.setImageResource(R.drawable.select_video); +// mIm_All1.setImageResource(R.drawable.video_select); +// mTv_Title.setTextColor(getResources().getColor( +// R.color.tab_text_sel)); +// typeUuid = data.get(position - 1).getUuid(); +// mLv_Video.setMode(Mode.BOTH); +// getVideoByKey(); + + } + mAdapter3.notifyDataSetChanged(); +// mRl_List.setVisibility(View.GONE); + } + }); + mLv_title_tag.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + + + + page = 1; + if(mAdapter5.getCount()-1==datatag.get(0).getList().size()) + { + if (position == 0) { + mCheckedTitle1 = "全部视频"; + typeUuid=""; + + + } + else + { + mCheckedTitle1 = mAdapter5.getDataItem().get(position-1).getName(); + typeUuid = mAdapter5.getDataItem().get(position-1).getUuid(); + } + } + else + { + mCheckedTitle1 = mAdapter5.getDataItem().get(position).getName(); + typeUuid = mAdapter5.getDataItem().get(position).getUuid(); + } + + if (mCheckedTitle1.length()>13){ + mTv_Title.setText(mCheckedTitle1.substring(0,12)+"..."); + }else { + mTv_Title.setText(mCheckedTitle1); + } + + mIm_All2.setImageResource(R.drawable.select_video); + mIm_All1.setImageResource(R.drawable.video_select); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + + mAdapter5.notifyDataSetChanged(); + + mRl_List.setVisibility(View.GONE); + } + }); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getTagList() { + Map param = new HashMap(); + param.put("type", "2"); + sendParamtoNet(Url.getTagList, param, GET_TAGS_DATAS_RESULT, mActivity, + true); + + } + + public void getVideoByKey() { + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } + + showProgressDialog("请稍候"); + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", keywords.toString()); + param.put("typeUuid", typeUuid); + param.put("sort", sort); + sendJsonPostParamtoNetSignMD5(Url.getVideoByKeyWordsNew, param, GET_DATAS_BY_KEY_RESULT, + mActivity); + } + + /** + * 获取列表数据 + */ + public static final int GET_VIDEO_DATAS_RESULT = 101; + public static final int GET_TAGS_DATAS_RESULT = 102; + public static final int GET_DATAS_BY_KEY_RESULT = 103; + public static final int GET_VIDEO_TAG_DATAS_RESULT = 104; + public static final int GET_READ_NUM_RESULT = 201; + public static final int GET_MORE_NUM_RESULT = 301; + public static final int GET_READ_NUM_RESULT2 = 401; + public static final int URL_PATH= 220; + + + public void getDataResult() { + Map param = new HashMap(); +// sendParamtoNet(Url.getVideo, param, GET_VIDEO_DATAS_RESULT, mActivity,true); + sendJsonPostParamtoNetSignMD5(Url.getVideoNew, param, GET_VIDEO_DATAS_RESULT, mActivity); + + } + public void getNewDataResult() { + Map param = new HashMap(); + + sendJsonPostParamtoNetSignMD5(Url.getVideoTagNew, param, GET_VIDEO_TAG_DATAS_RESULT, mActivity); + + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back) { + finish(); + } else if (id == R.id.top_right) { + Intent intent3 = new Intent(ct, HistoryActivity.class); + intent3.putExtra("title",top_title.getText()); + startActivity(intent3); + finish(); + } else if (id == R.id.bt_send_mind) { + Intent intent1 = new Intent(mActivity, SendMindActivity.class); + startActivity(intent1); + } else if (id == R.id.bt_gandanxyb) { + if (Constant.from==2){ + getUrl_path(); + }else { + Intent intent =new Intent(VideoActivity.this,NewsDetailActivity.class); + intent.putExtra("url",Constant.url_path); + intent.putExtra("title",Constant.zengshuName); + intent.putExtra("summary","肝胆相照®肝胆病在线公共服务平台"); + intent.putExtra("flag", 1); + intent.putExtra("need_back",true); + startActivity(intent); + } +// Intent intentgandanxyb = new Intent(mActivity, HeroListActivity.class); +// mActivity.startActivity(intentgandanxyb); + } else if (id == R.id.bt_screen) { + // mRl_List, mRl_Gv; + if (mTagList == null) { + getTagList(); + } + if (mRl_Gv.getVisibility() == View.GONE) { + mRl_Gv.setVisibility(View.VISIBLE); + if (mRl_List.getVisibility() == View.VISIBLE) { + mRl_List.setVisibility(View.GONE); + } + } else { + mRl_Gv.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + } + } else if (id == R.id.ll_title) { + if (mRl_List.getVisibility() == View.GONE) { + mRl_List.setVisibility(View.VISIBLE); + if (mRl_Gv.getVisibility() == View.VISIBLE) { + mRl_Gv.setVisibility(View.GONE); + } + } else { + mRl_List.setVisibility(View.GONE); + } + } else if (id == R.id.ll_go_patient_video) { + + Intent intent2 = new Intent(ct, PatientVideoActivity.class); + startActivity(intent2); + } else if (id == R.id.ll_go_qualitycourse) { + + Intent intentll_go_qualitycourse = new Intent(ct, QualityCourseActivity.class); + startActivity(intentll_go_qualitycourse); + } else if (id == R.id.top_right_search) { + Intent intent = new Intent(mActivity, PublicSearchActivity.class); + intent.setType("video"); + startActivity(intent); + } + } + private void getUrl_path() { + Map map = new HashMap<>(); + LogUtil.i("url_path = "+Url.url_path+Constant.url_path); + sendJsonPostParamtoNetSignMD5(Url.url_path+Constant.url_path,map,URL_PATH,this); + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + switch (resultCode) { + case URL_PATH: + ZengshuBean zengshuBean = GsonTools.fromGsonToBean(resultJson, ZengshuBean.class); + showFuliZengshuDailog(zengshuBean); + break; + case GET_TAGS_DATAS_RESULT: + processTage(resultJson); + break; + case GET_VIDEO_DATAS_RESULT: + processData(resultJson); + break; + case GET_VIDEO_TAG_DATAS_RESULT: + processTagData(resultJson); + break; + case GET_DATAS_BY_KEY_RESULT: + processDatalist(resultJson); + break; + case VIDEOROLL: + processRoll(resultJson); + default: + break; + } + } + private void showFuliZengshuDailog(ZengshuBean bean1) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_fulizengshu, null); + TextView tv_rennum = layout.findViewById(R.id.tv_rennum); + TextView tv_bennum = layout.findViewById(R.id.tv_bennum); + ImageView iv_fuli_close = layout.findViewById(R.id.iv_fuli_close); + Button btn_canyu = layout.findViewById(R.id.btn_canyu); + tv_rennum.setText(bean1.getData().getPatient_num()+""); + tv_bennum.setText(bean1.getData().getBook_num()+""); + final Dialog dialog = new AlertDialog.Builder( + this).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + iv_fuli_close.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_canyu.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(VideoActivity.this, MyQrCodeActivity.class); + startActivity(intent); + dialog.dismiss(); + } + }); + + } + private ArrayList titleList; + private ArrayList urlList; + private String newsuuid = ""; + private String agreenum = ""; + private String readnum = ""; + //添加轮播 + private void processRoll(String resultJson) { + LogUtil.d("VIDEOROLL = "+resultJson); + final VideoRollBean bean = GsonTools.fromGsonToBean(resultJson, VideoRollBean.class); + if (bean.getData() != null && bean.getData().size() > 0) { + rl_topview.setVisibility(View.VISIBLE); + titleList = new ArrayList(); + urlList = new ArrayList(); + for (int i = 0; i < bean.getData().size(); i++) { + titleList.add(bean.getData().get(i).getName());// 标题 + if (!TextUtils.isEmpty(bean.getData().get(i).getImgpath())) { + urlList.add(Url.urlHtml + bean.getData().get(i).getImgpath());// //封面图片 + } else { + urlList.add("");// + } + } + // 轮播图的点 + initDot(bean.getData().size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + + + + String url = Url.urlHtml+ bean.getData().get(position).getPath(); + String title = bean.getData().get(position).getName(); + String summary = bean.getData().get(position).getName(); + String headImg = bean.getData().get(position).getImgpath(); + newsuuid = bean.getData().get(position).getUuid(); + agreenum = ""; + readnum = ""; + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", url); + intent.putExtra("uuid", newsuuid); + intent.putExtra("note", summary); + intent.putExtra("title", title); + intent.putExtra("readnum",readnum); + intent.putExtra("imgpath", headImg); + intent.putExtra("public_name",title); + intent.putExtra("pagetype","肝胆视频"); + mActivity.startActivityForResult(intent,mActivity.GET_READ_NUM_RESULT); +// needreportDetail("肝胆视频",bean.getData().get(position).getTags(),title); + + +// Intent intent = new Intent(mActivity,NewsDetailActivity.class); +// String url = Url.urlHtml+ bean.getData().get(position).getPath(); +// String title = bean.getData().get(position).getName(); +// String summary = bean.getData().get(position).getName(); +// String headImg = bean.getData().get(position).getImgpath(); +// newsuuid = bean.getData().get(position).getUuid(); +// agreenum = ""; +// readnum = ""; +// intent.putExtra("url", url); +// // intent.putExtra("title", title); +// intent.putExtra("newssuuuid", newsuuid); +// intent.putExtra("newssagreenum", agreenum); +// intent.putExtra("newssreadnum", readnum); +// intent.putExtra("title", "新闻详情"); +// intent.putExtra("newsTitle", title); +// intent.putExtra("summary", summary); +// intent.putExtra("imageUrl", Url.urlHtml +// + headImg); +// intent.putExtra("flag", 4); +// mActivity.startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // top标题 + mViewPager.setTitle(topNewsTitle, titleList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); +// mLv_Video.getRefreshableView().addHeaderView(topNewsView); + }else { + rl_topview.setVisibility(View.GONE); + } + } + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + + } + private void processTagData(String result) + { + beantag= GsonTools.fromGsonToBean(result, VideoBeanNew.class); + datatag=beantag.data; + + for (int i = 0;i k=new ArrayList<>(); + for(int j=0;j=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + datatagname.get(j).setName(s); + } + } + } + for(int h :k) + { + datatagname.remove(h); + } + k.clear(); + + } + if (mAdapter3 == null) { + mAdapter3 = new TitleAdapter(datatag); + mLv_title.setAdapter(mAdapter3); + } + if (mAdapter5 == null) { + mAdapter5 = new TitleAdapter1(datatag.get(0).getList()); + mLv_title_tag.setAdapter(mAdapter5); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + LogUtil.i("视频列表result = "+result); + try { + bean = GsonTools.fromGsonToBean(result, VideoBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + } else { + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + + if (bean.data == null || bean.data.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("暂无肝胆视频"); + return; + } else { + mLoad_empty.setVisibility(View.GONE); + // mList.addAll(bean.data.list); + } + mAdapter4 = null; + /**去除z-BMS专家端*/ + data = new ArrayList<>(); + data.addAll(bean.data); + List k=new ArrayList<>(); + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + data.get(i).setName(s); + } + } + } + for(int h :k) + { + data.remove(h); + } + k.clear(); + //显示全部默认最新视频 + getVideoByKey(); + + //取消更多显示 +// if (mAdapter == null) { +// mAdapter = new VideoAdapter(mActivity, data); +// mLv_Video.getRefreshableView().setAdapter(mAdapter); +// } else { +// mAdapter.getDatas(data); +// mAdapter.notifyDataSetChanged(); +// } + + loaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_READ_NUM_RESULT: + if (requestCode == GET_READ_NUM_RESULT) { + String uuid = data.getStringExtra("uuid"); + if(bean==null||bean.data==null) + return; + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < bean.data.size(); i++) { + for (int j = 0; j < bean.data.get(i).video.size(); j++) { + if (bean.data.get(i).video.get(j).getUuid().equals(uuid)) { + String Snum = bean.data.get(i).video.get(j).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + bean.data.get(i).video.get(j).setReadnum(Inum + ""); + if (mAdapter!=null){ + mAdapter.notifyDataSetChanged(); + } + + } + } + } + } + } else { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < beanlists.size(); i++) { + if (beanlists.get(i).getUuid().equals(uuid)) { + String Snum = beanlists.get(i).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + beanlists.get(i).setReadnum(Inum + ""); + if (mAdapter4!=null){ + mAdapter4.notifyDataSetChanged(); + } + + + } + } + } + } + + break; + case GET_MORE_NUM_RESULT: + + getDataResult(); + break; + default: + break; + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (mTagList != null && mTagList.data.size() > 0) { + return mTagList.data.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + public class TitleAdapter1 extends BaseAdapter { + + private List titledata; + public TitleAdapter1(List data) { + this.titledata = data; + } + public void setDataList(List data) + { + this.titledata = data; + } + public List getDataItem() + { + return this.titledata; + } + @Override + public int getCount() { + // TODO Auto-generated method stub + if(titledata.size()==datatag.get(0).getList().size()) + return titledata.size()+1; + else + return titledata.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if(titledata.size()==datatag.get(0).getList().size()) + { + if(position==0) + return titledata.get(0); + else + return titledata.get(position-1); + } + else + { + return titledata.get(position); + } + + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(mActivity); + if(titledata.size()==datatag.get(0).getList().size()) + { + if (position == 0) { + tv_item.setText("全部视频"); + } else { + tv_item.setText(titledata.get(position-1).getName()); + } + if (mCheckedTitle1 != null&&("全部视频".equals(mCheckedTitle1))&& position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + tv_item.setBackgroundColor(Color.WHITE); + } else + { + if (mCheckedTitle1 != null&& position != 0&& mCheckedTitle1.equals(titledata.get(position-1) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + } + else + { + tv_item.setText(titledata.get(position).getName()); + if (mCheckedTitle1 != null&& mCheckedTitle1.equals(titledata.get(position) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + + + + + + + + + tv_item.setTextSize(15); + tv_item.setPadding(10, dip2px(mActivity, 10), 10, + dip2px(mActivity, 10)); + return tv_item; + } + + } + public class TitleAdapter extends BaseAdapter { + + private List titledata; + public TitleAdapter(List data) { + this.titledata = data; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return titledata.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if (position == 0) { + return "全部"; + } + return titledata.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(mActivity); + tv_item.setGravity(Gravity.CENTER); + if (position == 0) { + tv_item.setText("全部"); + } else { + tv_item.setText(titledata.get(position).getName()); + } + if (("全部".equals(mCheckedTitle))&& position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + tv_item.setBackgroundColor(Color.WHITE); + } else { + + if (mCheckedTitle != null&& mCheckedTitle.equals(titledata.get(position) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + tv_item.setBackgroundColor(Color.WHITE); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + + + } + tv_item.setTextSize(15); + tv_item.setPadding(10, dip2px(mActivity, 10), 10, + dip2px(mActivity, 10)); + return tv_item; + } + + } + + private List beanlists = new ArrayList(); + + private void processDatalist(String result) { + + VideoMoreBean bean = GsonTools.fromGsonToBean(result, + VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + // mLv_Video.setEmptyView(mLoad_empty); + mLoad_empty.setVisibility(View.VISIBLE); + mAdapter = null; + mLv_Video.setAdapter(null); + loaded(); + // setLastUpdateTime(); + return; + + } else { + mLoad_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + if (mAdapter4 != null) { + mLv_Video.setAdapter(mAdapter4); + } + } + } else { + // 加载更多下一页时候e + if (bean != null || bean.data != null) { + beanlists.addAll(bean.data.list); + } else { + ToastUtil.showMessage("没有更多数据了"); + } + + } + mAdapter = null; + // 更新 + if (mAdapter4 == null) { + mAdapter4 = new VideoSAdapter(beanlists, mActivity); + mLv_Video.getRefreshableView().setAdapter(mAdapter4); + } else { + mAdapter4.getDatas(beanlists); + mAdapter4.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + // 得到总页码数 + + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mLv_Video.setMode(Mode.PULL_FROM_START); + + } else { + mLv_Video.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + closeProgressDialog(); + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoDetilActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoDetilActivity.java new file mode 100644 index 0000000..23bb5b5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoDetilActivity.java @@ -0,0 +1,1305 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.PowerManager; +import android.text.TextUtils; +import android.text.method.ScrollingMovementMethod; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoCommentAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.CommentBean; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.bean.OldCommentBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.VideoTeachDetailBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; + +public class VideoDetilActivity extends AppCompatActivity implements OnClickListener { + private View view; + private X5WebView mWebView; + private WebSettings settings; + private VideoDetilActivity mActivity; + private String url; + + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private WebChromeClient.CustomViewCallback xCustomViewCallback; + private myWebChromeClient xwebchromeclient; + + private ImageView top_back; + private TextView mTitle; + private View layout_top; + private ImageButton top_right, top_colloct; + private RadioGroup mRg_video; + private LinearLayout mLl_video_below; + + + private TextView mTv_jinajie; + private View mLine_jianjie, mLine_pinglun; + private PullToRefreshListView mLv_video_pinglun; + private LinearLayout mLl_video_pinglun; + private EditText mEt_add; + private Button mBt_add; + private boolean isCollt = false; + private boolean fromColl = false; + private int page = 1; + private View loading_view; + private PowerManager.WakeLock wakeLock; + private PowerManager powerManager; +// private String content; + Toolbar mToolbar; + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_video_detil); + mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if (getPhoneAndroidSDK() >= 14) {// 4.0 需打开硬件加速 + getWindow().setFlags(0x1000000, 0x1000000); + } + mActivity = this; + initView(); + initIntent(); + dealNewsDetail(); + AddReadNum(); + getCommentList(); + if ("患教详情".equals(title)){ + mTitle.setText(title); + top_right.setVisibility(View.GONE); + top_colloct.setVisibility(View.GONE); + } + } + + public static int getPhoneAndroidSDK() { + int version = 0; + try { + version = Integer.valueOf(android.os.Build.VERSION.SDK); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + return version; + + } + + public void initView() { + X5WebView.initHardwareAccelerate(this); + mWebView = this.findViewById(R.id.news_detail_wv); + video_fullView = (FrameLayout) this.findViewById(R.id.f_move); + layout_top = findViewById(R.id.layout_top); + // loadingView = this.findViewById(R.id.loading_view); + top_back = (ImageView) this.findViewById(R.id.top_back); + top_colloct = (ImageButton) findViewById(R.id.top_right_search); + top_right = (ImageButton) this.findViewById(R.id.top_right); + mTitle = (TextView) this.findViewById(R.id.top_title); + mRg_video = (RadioGroup) this.findViewById(R.id.rg_video_detil); + mLl_video_below = (LinearLayout) this.findViewById(R.id.ll_video_below); + loading_view = this.findViewById(R.id.loading_view); + mTv_jinajie = (TextView) this.findViewById(R.id.tv_video_jianjie); + + mTv_jinajie.setMovementMethod(ScrollingMovementMethod.getInstance()); + mLine_jianjie = this.findViewById(R.id.v_line_jianjie); + mLine_pinglun = this.findViewById(R.id.v_line_pinglun); + mLv_video_pinglun = (PullToRefreshListView) this + .findViewById(R.id.lv_video_pinglun); + mLl_video_pinglun = (LinearLayout) this + .findViewById(R.id.ll_video_pinglun); + mEt_add = (EditText) this.findViewById(R.id.et_add_pinglun); + mBt_add = (Button) this.findViewById(R.id.bt_add_pinglun); + + powerManager = (PowerManager)this.getSystemService(this.POWER_SERVICE); + + // 设置只有下拉刷新模式 + mLv_video_pinglun.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + mLv_video_pinglun + .setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getCommentList(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getCommentList(); + } + }); + top_back.setOnClickListener(this); + mTitle.setText("视频详情"); + mLv_video_pinglun.setVisibility(View.GONE); + } + + String expertUuid; + private String videoUuid, note, title, readnum, imgpath, public_name; + + private void initIntent() { + + expertUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + url = getIntent().getStringExtra("url"); + LogUtil.i("url = "+url); + videoUuid = getIntent().getStringExtra("uuid"); + title = getIntent().getStringExtra("title"); + readnum = getIntent().getStringExtra("readnum"); + imgpath = getIntent().getStringExtra("imgpath"); + public_name = getIntent().getStringExtra("public_name"); +// content = getIntent().getStringExtra("content"); + if (getIntent().getType() != null + && getIntent().getType().equals("coll")) { + fromColl = true; + } + + + top_right.setVisibility(View.VISIBLE); + top_colloct.setVisibility(View.VISIBLE); + top_colloct.setImageResource(R.drawable.share_icon); + top_right.setImageResource(R.drawable.nor_nes_no); + top_colloct.setOnClickListener(this); + top_right.setOnClickListener(this); + mEt_add.setOnClickListener(this); + mBt_add.setOnClickListener(this); + mRg_video.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_jianjie) { + mTv_jinajie.setVisibility(View.VISIBLE); + mLl_video_pinglun.setVisibility(View.GONE); + mLv_video_pinglun.setVisibility(View.GONE); + mLine_jianjie.setVisibility(View.VISIBLE); + mLine_pinglun.setVisibility(View.INVISIBLE); + } else if (checkedId == R.id.tab_rbn_pinglun) { + mTv_jinajie.setVisibility(View.GONE); + mLl_video_pinglun.setVisibility(View.VISIBLE); + mLv_video_pinglun.setVisibility(View.VISIBLE); + mLine_jianjie.setVisibility(View.INVISIBLE); + mLine_pinglun.setVisibility(View.VISIBLE); + } + } + }); + if(!StringUtil.isEmpty(videoUuid)) + { + videoDetail(); + } + + } + + public void dealNewsDetail() { + if (url.startsWith("http://") || url.startsWith("https://")) { + mWebView.loadUrl(url); + } else { + mWebView.loadUrl(Url.urlHtml + url); + } + mWebView.setInitialScale(50); + WebSettings setting = mWebView.getSettings(); + setting.setPluginState(WebSettings.PluginState.ON); + setting.setUseWideViewPort(true); + setting.setJavaScriptEnabled(true); // Support JavaScript + setting.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 + setting.setLoadWithOverviewMode(true); + setting.setUseWideViewPort(true); + setting.setDomStorageEnabled(true); + setting.setSupportZoom(true); // Zoom Control on web (You don't need + // setting.setBuiltInZoomControls(true); // Enable Multitouch if + // supported + // by ROM + xwebchromeclient = new myWebChromeClient(); + mWebView.setWebChromeClient(xwebchromeclient); +// + mWebView.setWebViewClient(new MyWebViewClient()); + } + + public class MyWebViewClient extends WebViewClient { + + private ProgressDialog loadingBar; + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loading_view.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + // Intent.ACTION_VIEW, Uri.parse(url) +// try { +// Intent intent = new Intent(mActivity, NewsDetailActivity.class); +// intent.putExtra("title", "详情"); +// intent.putExtra("url", url); +// startActivity(intent); +// mWebView.reload(); +// } catch (Exception e) { +// } + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + // if (loadingBar.isShowing()) { + // loadingBar.dismiss(); + // } + loading_view.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // ToastUtil.showToast("加载失败,请检查网络"); + loading_view.setVisibility(View.GONE); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + } + } + + public class myWebChromeClient extends WebChromeClient { + private View xprogressvideo; + + // 播放网络视频时全屏会被调用的方法 + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + // Log.i("fangfa","已经进入了。。。。。。。。"); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + mWebView.setVisibility(View.GONE); + mLl_video_below.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + mToolbar.setVisibility(View.GONE); + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + xCustomViewCallback = callback; + video_fullView.addView(view); + + video_fullView.setVisibility(View.VISIBLE); + + setFullScreen(); + } + + // 视频播放退出全屏会被调用的 + @Override + public void onHideCustomView() { + layout_top.setVisibility(View.VISIBLE); + mToolbar.setVisibility(View.VISIBLE); + mLl_video_below.setVisibility(View.GONE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + xCustomViewCallback.onCustomViewHidden(); + mWebView.setVisibility(View.VISIBLE); + quitFullScreen(); + } + + // 视频加载时进程loading + @Override + public View getVideoLoadingProgressView() { + if (xprogressvideo == null) { + LayoutInflater inflater = LayoutInflater + .from(VideoDetilActivity.this); + xprogressvideo = inflater.inflate(R.layout.loading_view, null); + } + return xprogressvideo; + } + } + + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + + } + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + + + + } + + /** + * 判断是否是全屏 + * + * @return + */ + public boolean inCustomView() { + return (xCustomView != null); + } + + /** + * 全屏时按返加键执行退出全屏方法 + */ + public void hideCustomView() { + xwebchromeclient.onHideCustomView(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + @Override + protected void onResume() { + super.onResume(); + // webView.resumeTimers(); + try { + if (mWebView != null) { + mWebView.getClass().getMethod("onResume") + .invoke(mWebView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + /** + * 设置为横屏 + */ + if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + } + + @Override + protected void onPause() { + super.onPause(); + mWebView.onPause(); + try { + if (mWebView != null) { + mWebView.getClass().getMethod("onPause").invoke(mWebView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 主要是把webview所持用的资源销毁, + */ + @Override + protected void onDestroy() { + mWebView.setVisibility(View.GONE); + super.onDestroy(); + video_fullView.removeAllViews(); + mWebView.loadUrl("about:blank"); + mWebView.stopLoading(); + mWebView.setWebChromeClient(null); + mWebView.setWebViewClient(null); + mWebView.destroy(); + UMShareAPI.get(this).release(); + Constant.isShareGetPoint = false; + + + } + + /** + * 判断是否是全屏,如果是就隐藏,否则就退出当前的页面 + * + * @param keyCode + * @param event + * @return + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (inCustomView()) { + // webViewDetails.loadUrl("about:blank"); + hideCustomView(); + return false; + } else { + mWebView.loadUrl("about:blank"); + Intent intent = new Intent(); + intent.putExtra("uuid", videoUuid); + VideoDetilActivity.this.setResult( + VideoActivity.GET_READ_NUM_RESULT, intent); + this.finish(); + } + } + return false; + } + + public void loadurl(final WebView view, final String url) { + // + // showProgressDialog(""); + view.loadUrl(url); + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.top_back) { + Intent intent = new Intent(); + intent.putExtra("uuid", videoUuid); + VideoDetilActivity.this.setResult( + VideoActivity.GET_READ_NUM_RESULT, intent); + this.finish(); + } else if (id == R.id.top_right) { + if (isCollt) { + showProgressDialog("正在取消收藏"); + DisCollection(); + } else { + showProgressDialog("收藏"); + AddCollection(); + needreportSome("collect","",""); + } + } else if (id == R.id.top_right_search) { + share(); + needreportSome("share","",""); + } else if (id == R.id.bt_add_pinglun) { + if (StringUtil.isEmpty(mEt_add.getText().toString().trim())) { + ToastUtil.showMessage("输入内容"); + return; + } + getAddComment(); + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } else if (id == R.id.et_add_pinglun) { + showPopupWindow(v); + } + } + /**视频详情*/ + private void videoDetail() { + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("video_uuid",videoUuid); + sendJsonPostParamNoResultMD5(Url.videoDetail,map,200); + } + /** + * 调用分享功能 + */ + private void share() { + Constant.isShareGetPoint = true; + String shareTitle = title; + String shareUrl = null; + if (url.startsWith("http://") || url.startsWith("https://")) { + shareUrl = url; + } else { + shareUrl = Url.urlHtml + url; + } + + String msgSinaContent = shareTitle + shareUrl; + String imageurl = Url.urlHtml + imgpath; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageurl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(note)) { + note = ""; + } + if (TextUtils.isEmpty(imageurl)) { + imageurl = ""; + } + ShareUtils.shareUmeng(mActivity, shareTitle, note, msgSinaContent, + imageurl, shareUrl, bitmap); + +// UMImage shareImg; +// if (imageurl != null) { +// shareImg = new UMImage(VideoDetilActivity.this, imageurl); +// } else { +// shareImg = new UMImage(VideoDetilActivity.this, +// "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); +// } +// UMMin umMin = new UMMin(shareUrl); +// //兼容低版本的网页链接 +// umMin.setThumb(shareImg); +// // 小程序消息封面图片 +// umMin.setTitle(shareTitle); +// // 小程序消息title +// umMin.setDescription(msgSinaContent); +// // 小程序消息描述 +// umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content+"¬eIN="+note+"&titleName=" +shareTitle); +// //小程序页面路径 +// umMin.setUserName("gh_11f9423d9de3"); +// // 小程序原始id,在微信平台查询 +// new ShareAction(VideoDetilActivity.this) +// .withMedia(umMin) +// .setPlatform(SHARE_MEDIA.WEIXIN) +// .setCallback(new UMengShareHelper(VideoDetilActivity.this).shareListener).share(); + + } + + public void processData(String result) { + String code = null; + String message = null; + // "isAgree": 0, + // "code": "1", + // "isCollection": 0, + // String isAgree=null; + String isCollection = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + isCollection = jsonObject.getString("isCollection"); + note = jsonObject.getString("note"); + if (isCollection.equals("1")) { + isCollt = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + isCollt = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } + mTv_jinajie.setText(note); + } catch (JSONException e) { + e.printStackTrace(); + } + } + + public void processDataColl(String result) { + String code = null; + String message = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + if (code.equals("1")) { + if (isCollt) { + isCollt = false; + top_right.setImageResource(R.drawable.nor_nes_no); + ToastUtil.showMessage("取消收藏成功"); + } else { + isCollt = true; + top_right.setImageResource(R.drawable.nor_news_yes); + ToastUtil.showMessage("收藏成功"); + } + + } else { + ToastUtil.showMessage(message); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + + private void AddReadNum() { + // 提取专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("news_article_uuid", videoUuid); + params.addBodyParameter("type", String.valueOf(4)); + HttpHelper.loadData(HttpMethod.POST, Url.getRead, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + + private void AddCollection() { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", videoUuid); + params.addBodyParameter("title", title); + params.addBodyParameter("path", url); + params.addBodyParameter("readnum", readnum); + params.addBodyParameter("imgpath", imgpath); + params.addBodyParameter("public_name", public_name); + params.addBodyParameter("type", String.valueOf(5)); + HttpHelper.loadData(HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + + private void DisCollection() { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", videoUuid); + params.addBodyParameter("type", String.valueOf(5)); + HttpHelper.loadData(HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + + EditText mEt_adds; + TextView mTV_Sure, mTV_Cancel; + + private void showPopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(VideoDetilActivity.this) + .inflate(R.layout.popu_add_comment, null); + // 设置按钮的点击事件 + mTV_Sure = (TextView) contentView.findViewById(R.id.bt_pop_sure); + mTV_Cancel = (TextView) contentView.findViewById(R.id.bt_pop_cancel); + mEt_adds = (EditText) contentView.findViewById(R.id.et_pop_add); + if (mEt_add != null && !TextUtils.isEmpty(mEt_add.getText())) { + mEt_adds.setText(mEt_add.getText().toString().trim()); + mEt_adds.setSelection(mEt_add.getText().length()); + } + final PopupWindow popupWindow = new PopupWindow(contentView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true); + mTV_Cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + } + }); + mTV_Sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mEt_add != null) { + mEt_add.setText(mEt_adds.getText().toString()); + } + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + Log.i("mengdd", "onTouch : "); + + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + + // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 + // 我觉得这里是API的一个bug + // popupWindow.setBackgroundDrawable(getResources().getDrawable( + // R.drawable.popwrite)); + // 设置好参数之后再show + popupWindow.showAtLocation(view, 0, 0, 0); + + } + + CustomProgressDialog dialog; + + public void showProgressDialog(String content) { + + if (dialog == null && mActivity != null) { + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog( + mActivity, content); + } else { + dialog.setContent(content); + } + dialog.show(); + } + + /** + * + * closeProgressDialog 关闭加载框 void + */ + public void closeProgressDialog() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + // showLoadingProgress(); + // Map param = new HashMap(); + // param.put("article_uuid", bookUuid); + // param.put("user_uuid", expertUuid); + // param.put("type", 6 + ""); + // param.put("comment", mEt_AddPL.getText().toString().trim()); + // sendParamtoNet(Url.getAddComment, param, GET_ADD_COMMENT_RESULT, ctx, + // false); + /** + * 一下为评论代码 + */ + + public static final int GET_HF_COMMENT_RESULT = 201; + + // 评论列表 + public void getCommentList() { + Map map = new HashMap<>(); + map.put("uuid", videoUuid); + map.put("page", page + ""); + sendJsonPostParamNoResultMD5(Url.getCommentList,map,301); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("uuid", videoUuid); +// params.addBodyParameter("page", page + ""); +// HttpHelper.loadData(HttpMethod.POST, Url.getCommentList, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// prossData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// LogUtil.i("数据请求失败了: " + arg1); +// } +// }); + } + + VideoCommentAdapter mAdapter; + List datas = new ArrayList(); + + public void prossData(String result) { + CommentBean data = GsonTools.fromGsonToBean(result, CommentBean.class); + if (page == 1) { + datas.clear(); + } + if (data.data != null && data.data.list.size() > 0) { + datas.addAll(data.data.list); + Iterator it=datas.iterator(); + while (it.hasNext()) { + CommentBean.CommentData bean1=it.next(); + if("0".equals(bean1.getExamine_status())) + { + if(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean1.getExpert_uuid())){ + continue; + } + else + { + it.remove(); + } + } + } + if (mAdapter == null) { + mAdapter = new VideoCommentAdapter(mActivity, expertUuid); + mAdapter.getDatas(datas); + mLv_video_pinglun.setAdapter(mAdapter); + } else { + mAdapter.getDatas(datas); + mAdapter.notifyDataSetChanged(); + } + long totalPage = (data.totalPage / 10) + 1; + if (totalPage <= 1 || totalPage <= page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + onLoaded(); + mLv_video_pinglun.setMode(Mode.PULL_FROM_START); + + } else { + mLv_video_pinglun.setMode(Mode.BOTH); + } + } + setLastUpdateTime(); + onLoaded(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_video_pinglun.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + mLv_video_pinglun.onRefreshComplete(); + } + + // 删除评论 + int deletePosition = -1; + + public void getDeleteComment(int position) { + showProgressDialog("加载中"); + deletePosition = position; + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("uuid", datas.get(position).getComment_uuid()); + HttpHelper.loadData(HttpMethod.POST, Url.getDeleteComment, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + prossDataDelete(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + public void prossDataDelete(String result) { + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + if (deletePosition > -1) { + datas.remove(datas.get(deletePosition)); + mAdapter.getDatas(datas); + mAdapter.notifyDataSetChanged(); + } + + } + } + + // 添加评论 + private void getAddComment() { + page = 1; + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("article_uuid", videoUuid); + map.put("type", "8"); + map.put("page", "1"); + map.put("comment", mEt_add.getText().toString().replaceAll(" +","")); + sendJsonPostParamNoResultMD5(Url.getAddComment,map,302); + needreportSome("comment","",""); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("article_uuid", videoUuid); +// params.addBodyParameter("user_uuid", expertUuid); +// params.addBodyParameter("type", "8"); +// params.addBodyParameter("page", "1"); +// params.addBodyParameter("comment", mEt_add.getText().toString().trim()); +// HttpHelper.loadData(HttpMethod.POST, Url.getAddComment, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// mEt_add.setText(""); +// prossData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// LogUtil.i("数据请求失败了: " + arg1); +// } +// }); + } + + // 回复评论 + private void getAddCommentReply(String content) { + page = 1; + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("article_uuid", videoUuid); + map.put("type", "8"); +// map.put("page", "1"); + map.put("comment", content.replaceAll(" +","")); + sendJsonPostParamNoResultMD5(Url.getAddComment,map,302); + needreportSome("comment","",""); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("article_uuid", videoUuid); +// params.addBodyParameter("user_uuid", expertUuid); +// params.addBodyParameter("type", "8"); +// params.addBodyParameter("page", "1"); +// params.addBodyParameter("comment", content); +// HttpHelper.loadData(HttpMethod.POST, Url.getAddCommentReply, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// mEt_add.setText(""); +// prossData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// LogUtil.i("数据请求失败了: " + arg1); +// } +// }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == GET_HF_COMMENT_RESULT) { + String content = data.getStringExtra("content"); + mEt_add.setText(content); + getAddCommentReply(content); + + } + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + public void sendJsonPostParamNoResultMD5(final String postUrl, final Map param, final int callType) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)||"106".equals(optString)||"1".equals(optString)) { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + mHandler.sendMessage(msg); + }else { + mHandler.sendEmptyMessage(0); + } + }else { + mHandler.sendEmptyMessage(0); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + mHandler.sendEmptyMessage(404); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + } + }); + + } + private VideoTeachDetailBean videoTeachDetailBean; + Handler mHandler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { +// super.handleMessage(msg); + if (msg != null) { + closeProgressDialog(); + switch (msg.what) { + case 200: + videoTeachDetailBean = GsonTools.fromGsonToBean((String) msg.obj, VideoTeachDetailBean.class); + if("200".equals(videoTeachDetailBean.getCode())){ + needreportDetail("患教视频", videoTeachDetailBean.getVideo().getTags(),videoTeachDetailBean.getVideo().getName()); + } + + break; + case 302: + mEt_add.setText(""); + prossData1((String) msg.obj); + break; + case 301: +// closeProgressDialog(); +// prossData((String) msg.obj); + break; + } + } + } + + }; + public void prossData1(String result) { +// LogUtil.i("评论 result = "+result); + OldCommentBean data = GsonTools.fromGsonToBean(result, OldCommentBean.class); + if (page == 1) { + datas.clear(); + } + if (data.data != null && data.data.size() > 0) { + datas.addAll(data.data); + if (mAdapter == null) { + mAdapter = new VideoCommentAdapter(mActivity, expertUuid); + mAdapter.getDatas(datas); + mLv_video_pinglun.setAdapter(mAdapter); + + } else { + mAdapter.getDatas(datas); + mAdapter.notifyDataSetChanged(); + } +// long totalPage = (data.total / 10) + 1; +// if (totalPage <= 1 || totalPage <= page) { +// if (page != 1) { +// ToastUtil.showMessage("没有更多数据了"); +// onLoaded(); +// } +// mLv_video_pinglun.setMode(PullToRefreshBase.Mode.PULL_FROM_START); +// +// } else { + mLv_video_pinglun.setMode(PullToRefreshBase.Mode.BOTH); +// } + } + setLastUpdateTime(); + onLoaded(); + } + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) + { + + + } + else + { + + } + + } + public void needreportSome(String name,String page,String tags) + { + if(getIntent().getStringExtra("pagetype")==null) + { + return; + } + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + + rbens.setResource_name(title); + rbens.setResource_option(videoTeachDetailBean.getVideo().getTags()+""); + + rbens.setPage_type(getIntent().getStringExtra("pagetype")); + + + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + private void needreport(String number,String belogn) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("group_message"); + rbens.setNumber(number); + rbens.setBelong(belogn); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportDetail(String page,String tags,String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("detail_page"); + rbens.setPage_type(page); + rbens.setResource_name(name); + rbens.setPage_type(page); + rbens.setResource_option(tags+""); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(VideoDetilActivity.this, ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + startService(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoJHActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoJHActivity.java new file mode 100644 index 0000000..9e515b4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoJHActivity.java @@ -0,0 +1,312 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class VideoJHActivity extends BaseActivity implements OnCallBackFromNet, + OnItemClickListener { + public static final int GET_VIDEO_JH_DATA_RESULT = 101; + private VideoJHActivity mActivity; + private View view; + private Intent getIntent; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String typeUuid = null; + private VideoJHAdapter mAdapter; + private String url=Url.getJHVideoNew; + @Override + public void setTitle() { + // TODO Auto-generated method stub + getIntent = getIntent(); + String title = getIntent.getStringExtra("title"); + typeUuid = getIntent.getStringExtra("typeUuid"); + String type=getIntent.getType(); + if(type!=null&&type.equals("docviedo")){ + url=Url.getJHVideoNew; + }else if(type!=null&&type.equals("patviedo")){ + url=Url.getPatientVideoByJingHuaNew; + } + top_title.setText(title); + } + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("typeUuid", typeUuid); + sendJsonPostParamtoNetSignMD5(url, param, GET_VIDEO_JH_DATA_RESULT, + mActivity); + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_video_jh); + mActivity = this; + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_video_jh); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + } + }); + String result = SharePrefUtil.getString(mActivity, typeUuid + 2, ""); + if (!StringUtil.isEmpty(result)) { + processData(result); + } + getDataResult(); + return view; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // super.onClick(v); + switch (v.getId()) { + case R.id.top_back_layout: + VideoJHActivity.this.setResult(301); + VideoJHActivity.this.finish(); + break; + + default: + break; + + } + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + if (keyCode == KeyEvent.KEYCODE_BACK) { + VideoJHActivity.this.setResult(301); + VideoJHActivity.this.finish(); + } + return false; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + SharePrefUtil.saveString(mActivity, typeUuid + 2, resultJson); + processData(resultJson); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", beanlists.get(position - 1).getPath()); + intent.putExtra("uuid", beanlists.get(position - 1).getUuid()); + intent.putExtra("note", beanlists.get(position - 1).getNote()); + intent.putExtra("title", beanlists.get(position - 1).getName()); + intent.putExtra("readnum", beanlists.get(position - 1).getReadnum()); + intent.putExtra("imgpath", beanlists.get(position - 1).getImgpath()); + intent.putExtra("public_name", beanlists.get(position - 1) + .getPublic_name()); + BaseApplication.addNum(beanlists.get(position - 1).getUuid(), 1); + mActivity.startActivity(intent); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private List beanlists = new ArrayList(); + + private void processData(String result) { + VideoMoreBean bean = GsonTools.fromGsonToBean(result, + VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.data.list); + + } + // 更新 + if (mAdapter == null) { + mAdapter = new VideoJHAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + public class VideoJHAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_jh); + vh = new ViewHolder(); + vh.mTv_Title = (TextView) convertView + .findViewById(R.id.item_video_jh_title); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_Title.setText(beanlists.get(position).getName()); + return convertView; + } + + public class ViewHolder { + TextView mTv_Title; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoMoreActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoMoreActivity.java new file mode 100644 index 0000000..7f07c28 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoMoreActivity.java @@ -0,0 +1,406 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.KeyEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoMoreAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshGridView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class VideoMoreActivity extends BaseActivity implements + OnCallBackFromNet, OnItemClickListener { + private Intent getIntent; + private String uuid, title; + private View view; + private PullToRefreshGridView mGv_video; + private TextView load_empty; + private String url = Url.getVideoByTypeNew; + private VideoMoreActivity mActivity; + private int page = 1; + private VideoMoreAdapter moreAdapter; + private boolean mIsPlayBack = false; + private String name; + boolean DocVideo; + private Button bt_cjwt; + public void setTitle1() { + // TODO Auto-generated method stub + getIntent = getIntent(); + name = getIntent.getStringExtra("name"); + if (!StringUtil.isEmpty(name)) { + top_title.setText(name); + mIsPlayBack = true; + } else { + uuid = getIntent.getStringExtra("uuid"); + title = getIntent.getStringExtra("title"); + String type=getIntent.getType(); + if(type!=null&&type.equals("video1")){ + DocVideo=true; + url = Url.getVideoByTypeNew; + }else if(type!=null&&type.equals("video2")) { + DocVideo=false; + url = Url.getPatientVideoByTypeNew; + } + if (!StringUtil.isEmpty(title)) { + top_title.setText(title); + } + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("精选"); + top_right_text.setOnClickListener(this); + } + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_video_more); + mActivity = this; + + mGv_video = (PullToRefreshGridView) view + .findViewById(R.id.gv_video_more); + load_empty = (TextView) view.findViewById(R.id.load_empty); + bt_cjwt = (Button) view.findViewById(R.id.bt_cjwt); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + load_empty.setText("暂无肝胆视频"); + // 设置只有下拉刷新 + mGv_video.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + mGv_video.getRefreshableView().setOnItemClickListener(this); + mGv_video.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + if (mIsPlayBack) { + getPlayBackResult(); + } else { + getDataResult(); + } + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + // TODO Auto-generated method stub +// page++; + if (mIsPlayBack) { + getPlayBackResult(); + } else { + getDataResult(); + } + } + + }); + // St/*ring result = SharePrefUtil.getString(mActivity, uuid + 1, ""); + // if (!StringUtil.isEmpty(result)) { + // processData(result); + // }*/ + setTitle1(); + if (mIsPlayBack) { + getPlayBackResult(); + } else { + getDataResult(); + } + + return view; + } + + private void getPlayBackResult() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("name", name); + sendParamtoNet(Url.getPlayBack, param, GET_VIDEO_PLAYBACK_RESULT, + mActivity, true); + } + + public static final int GET_VIDEO_DATAS_RESULT = 102; + public static final int GET_VIDEO_PLAYBACK_RESULT = 103; + public static final int GET_VIDEO_NUM_RESULT = 201;; + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", String.valueOf(page)); + param.put("typeUuid", uuid); + sendJsonPostParamtoNetSignMD5(url, param, GET_VIDEO_DATAS_RESULT, + mActivity); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // super.onClick(v); + switch (v.getId()) { + case R.id.top_back_layout: + + VideoMoreActivity.this.setResult(301); + VideoMoreActivity.this.finish(); + break; + + case R.id.top_right_text: + Intent intent = new Intent(mActivity, VideoJHActivity.class); + intent.putExtra("typeUuid", uuid); + intent.putExtra("title", title); + if(DocVideo){ + intent.setType("docviedo"); + }else{ + intent.setType("patviedo"); + } + startActivityForResult(intent, 301); + break; + + default: + break; + + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + // TODO Auto-generated method stub + + if (keyCode == KeyEvent.KEYCODE_BACK) { + VideoMoreActivity.this.setResult(301); + VideoMoreActivity.this.finish(); + } + return false; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", beanlists.get(position).getPath()); + intent.putExtra("uuid", beanlists.get(position).getUuid()); + intent.putExtra("note", beanlists.get(position).getNote()); + intent.putExtra("title", beanlists.get(position).getName()); + intent.putExtra("readnum", beanlists.get(position).getReadnum()); + intent.putExtra("imgpath", beanlists.get(position).getImgpath()); + intent.putExtra("public_name", beanlists.get(position).getPublic_name()); + mActivity.startActivityForResult(intent, + VideoActivity.GET_READ_NUM_RESULT); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + // SharePrefUtil.saveString(mActivity, uuid + 1, resultJson); + + switch (resultCode) { + case GET_VIDEO_DATAS_RESULT: + processData(resultJson); + break; + case GET_VIDEO_PLAYBACK_RESULT: + processData(resultJson); + break; + default: + break; + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private List beanlists = new ArrayList(); + + private void processData(String result) { + VideoMoreBean bean = GsonTools.fromGsonToBean(result, + VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("暂时没有数据"); + mGv_video.setMode(Mode.DISABLED); + onLoaded(); + setLastUpdateTime(); + return; + + } else { + load_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + if (beanlists.size()>6) { + bt_cjwt.setVisibility(View.VISIBLE); + } + } + } else { + // 加载更多下一页时候e + if (bean != null || bean.data != null) { + beanlists.addAll(bean.data.list); + if (bean.data.list.size()>6) { + bt_cjwt.setVisibility(View.VISIBLE); + }else{ + bt_cjwt.setVisibility(View.GONE); + } + } else { + ToastUtil.showMessage("没有更多数据了"); + bt_cjwt.setVisibility(View.GONE); + } + + } + // 更新 + if (moreAdapter == null) { + moreAdapter = new VideoMoreAdapter(beanlists, mActivity); + mGv_video.getRefreshableView().setAdapter(moreAdapter); + } else { + moreAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + bt_cjwt.setVisibility(View.GONE); + } + mGv_video.setMode(Mode.PULL_FROM_START); + + } else { + mGv_video.setMode(Mode.BOTH); + } + page++;//加载完成后页数+1 + if (totalPage>1 && page <=totalPage ) {//gzz180828 + bt_cjwt.setVisibility(View.VISIBLE); + }else { + bt_cjwt.setVisibility(View.GONE); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mGv_video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + mGv_video.onRefreshComplete(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (data != null) { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < beanlists.size(); i++) { + + if (beanlists.get(i).getUuid().equals(uuid)) { + + String Snum = beanlists.get(i).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + beanlists.get(i).setReadnum(Inum + ""); + moreAdapter.notifyDataSetChanged(); + + } + } + } + } + + // if (resultCode == GET_VIDEO_NUM_RESULT) { + // getDataResult(); + // + // } + if (resultCode == 301) { + Map getNum = BaseApplication.getNumMap(); + // int aaaaa=getNum.size(); + if (getNum != null && getNum.size() != 0) { + for (int i = 0; i < beanlists.size(); i++) { + VideoMore chengNum = beanlists.get(i); + for (Map.Entry entry : getNum.entrySet()) { + if (entry.getKey().equals(chengNum.getUuid())) { + int newnum = Integer + .parseInt(chengNum.getReadnum()) + + entry.getValue(); + chengNum.setReadnum(newnum + ""); + } + } + } + BaseApplication.clearMap(); + moreAdapter.notifyDataSetChanged(); + } + + } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoTeachActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoTeachActivity.java new file mode 100644 index 0000000..8a56bb7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VideoTeachActivity.java @@ -0,0 +1,525 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.CompoundButton; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.apache.commons.lang.CharUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoTeachAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientVideoTypeBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.big.adapter.BigVideoTeachAdapter; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/10/25. + * 视频科普 + */ + +public class VideoTeachActivity extends BaseActivity implements OnCallBackFromNet,AdapterView.OnItemClickListener{ + private DrawableCenterButtonR dcb_class; + private DrawableCenterCheckBox cb_kp_jx; + private int page = 1; + private String sort = "2";//默认2 最新,1最热 + public static final int GET_DATAS_BY_KEY_RESULT = 103; + public static final int PATIENTVIDEOTYPE = 200; + private PatientVideoTypeBean beanType; + private String typeUuid; + private List data = new ArrayList<>(); + private LinearLayout ll_empty; + private PullToRefreshListView ptrLv; + private TextView tv_empty_msg; + private VideoTeachAdapter mAdapter; + private ListView lv_class; + private ArrayList list_class; + private String moren ="乙肝"; + private TitleAdapter mclassAdapter; + private String mCheckedTitle; + private ECAlertDialog buildAlert; + + @Override + public void setTitle() { + top_title.setText("视频科普"); + top_right_rl_bookCollect.setVisibility(View.VISIBLE); + top_right_bookCollect.setImageResource(R.drawable.search); + top_right_rl_bookCollect.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_bookCollect.setImageResource(R.drawable.big_search); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_video_teach_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_video_teach, null); + } + lv_class = view.findViewById(R.id.lv_class); + lv_class.setOnItemClickListener(this); + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无视频科普"); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + page = 1; + getVideo(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getVideo(); + + // getNewsList(Url.getNewsList, false, false, page); + } + }); + dcb_class = view.findViewById(R.id.dcb_class); + cb_kp_jx = view.findViewById(R.id.cb_kp_jx); + + getpatientVideoType(); + dcb_class.setOnClickListener(this); + cb_kp_jx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + page = 1; + if (isChecked) { + sort = "1"; + cb_kp_jx.setText("最热"); + getVideo(); + } else { + sort = "2"; + cb_kp_jx.setText("最新"); + getVideo(); + } + + } + }); + return view; + } + + private void getpatientVideoType() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.patientVideoType,map,PATIENTVIDEOTYPE,VideoTeachActivity.this); + } + + private void getVideo() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("name", ""); + param.put("typeUuid", typeUuid); + param.put("sort", sort); + sendJsonPostParamtoNetSignMD5(Url.patientVideoByName, param, GET_DATAS_BY_KEY_RESULT, + VideoTeachActivity.this); + + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.dcb_class) { + if (lv_class.getVisibility() == View.VISIBLE) { + lv_class.setVisibility(View.GONE); + ptrLv.setVisibility(View.VISIBLE); + return; + } + lv_class.setVisibility(View.VISIBLE); + ptrLv.setVisibility(View.GONE); + if (mclassAdapter == null) { + mclassAdapter = new TitleAdapter(beanType.getData()); + lv_class.setAdapter(mclassAdapter); + } else { + mclassAdapter.notifyDataSetChanged(); + } + } else if (id == R.id.top_right_rl_bookCollect) { + Intent intent = new Intent(VideoTeachActivity.this,SearchVideoTeachActivity.class); + intent.putExtra("typeUuid",typeUuid); + intent.putExtra("sort",sort); + startActivityForResult(intent, 80); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case PATIENTVIDEOTYPE: + LogUtil.i("PATIENTVIDEOTYPE = "+resultJson); + + beanType = GsonTools.fromGsonToBean(resultJson, + PatientVideoTypeBean.class); + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + beanType.getData().get(i).setName(s); + } + } + + if (moren.equals(beanType.getData().get(i).getName())){ + typeUuid = beanType.getData().get(i).getUuid(); + dcb_class.setText(beanType.getData().get(i).getName()); + } + } + } + + + getVideo(); + break; + case GET_DATAS_BY_KEY_RESULT: + processData(resultJson); + break; + } + } + + public void processData(String result) { + VideoMoreBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, VideoMoreBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.data == null || bean.data.list.size()==0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.data.list); + } + } else { + data.addAll(bean.data.list); + } + // 更新 + if (mAdapter == null) { + if(CommonUtil.BigModule()) + { + mAdapter = new BigVideoTeachAdapter(data); + } + else + { + mAdapter = new VideoTeachAdapter(data); + } + + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多患教了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + public class TitleAdapter extends BaseAdapter { + + private List data1; + public TitleAdapter(List data1) { + this.data1 = data1; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return data1.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + + return data1.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(VideoTeachActivity.this); + + tv_item.setText(data1.get(position).getName()); + + if (mCheckedTitle != null&& mCheckedTitle.equals(data1.get(position).getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + + tv_item.setTextSize(15); + tv_item.setPadding(10, dip2px(VideoTeachActivity.this, 10), 10, + dip2px(VideoTeachActivity.this, 10)); + return tv_item; + } + + } + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + @Override + public void onItemClick(AdapterView parent, View view, final int position, long id) { + if (lv_class.getVisibility()==View.VISIBLE){ + page = 1; + lv_class.setVisibility(View.GONE); + ptrLv.setVisibility(View.VISIBLE); + typeUuid = beanType.getData().get(position).getUuid(); + mCheckedTitle = beanType.getData().get(position).getName(); + chengeImg(dcb_class,beanType.getData().get(position).getName()); + getVideo(); + }else{ + VideoMoreBean.VideoMore datas1; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas1 = data.get(position - headerViewsCount); + } else { + datas1 = data.get(position); + + } + buildAlert = ECAlertDialog.buildAlert(VideoTeachActivity.this, datas1.getName(), "取消", "发送", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + sendKepu(position); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("是否确定发送此患教科普"); + buildAlert.setTitleColor(VideoTeachActivity.this.getResources().getColor( + R.color.black)); + buildAlert.setMessageColor("#666666"); + buildAlert.show(); + } + + + } + + private void sendKepu(int position) { + VideoMoreBean.VideoMore datas; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas = data.get(position - headerViewsCount); + } else { + datas = data.get(position); + + } + + + Intent intent = new Intent(); + if (StringUtil.isEmpty(datas.getImgpath())) { + + intent.putExtra("imagUrl","http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + intent.putExtra("imagUrl", Url.urlHtml + datas.getImgpath()); + } +// System.out.println("datas.getImgPath()== " + datas.getImgpath()); + + intent.putExtra("url", Url.urlHtml + datas.getPath()); + + intent.putExtra("title", datas.getName()); + intent.putExtra("uuid",datas.getUuid()); + intent.putExtra("video",true); + intent.putExtra("content","肝胆相照®肝胆病在线公共服务平台"); + + setResult(70, intent); + finish(); + } + + public void chengeImg(DrawableCenterButtonR mDb_sort,String text){ + if(CommonUtil.BigModule()) + { + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme_big); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(VideoTeachActivity.this.getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } + else + { + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(VideoTeachActivity.this.getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } + + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode==80&&resultCode==80&&data!=null){ + Intent intent = new Intent(); + if (StringUtil.isEmpty(data.getStringExtra("imagUrl"))) { + intent.putExtra("imagUrl", + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + intent.putExtra("imagUrl",data.getStringExtra("imagUrl")); + } + System.out.println("datas.getImgPath()== " + data.getStringExtra("imagUrl")); + + intent.putExtra("url", data.getStringExtra("url")); + intent.putExtra("title", data.getStringExtra("title")); + intent.putExtra("uuid", data.getStringExtra("uuid")); + intent.putExtra("video",true); + intent.putExtra("content",data.getStringExtra("content")); + setResult(70, intent); + finish(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitDerailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitDerailActivity.java new file mode 100644 index 0000000..fed18d9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitDerailActivity.java @@ -0,0 +1,304 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.DatePickerDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.view.View; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.GetFollowUpBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +//3、最后尝试使用editText.setFocusable(false);和editText.setFocusableInTouchMode(false); +//设置不可编辑状态;editText.setFocusableInTouchMode(true);editText.setFocusable(true); +//editText.requestFocus();设置可编辑状态 + +public class VisitDerailActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private VisitDerailActivity mActivity; + + private RelativeLayout mRl_date; + private DatePickerDialog mPickerDialog; + private TextView mTv_date, mTv_name; + + int v_year, v_month, v_day; + private Intent mIntent; + private String patientDate; + private String patientName; + private String patientNote; + private String Uuid; + private GetFollowUpBean bean; + + private boolean isKan = false; + // private String mUpTime = null; + Button mBt_delete; + private EditText mEt_note; + private String followUpUuid; + public static final int GETFOLLOWUP = 200; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + initIntent(); + if (isKan) { + top_title.setText("随访详情"); + } else { + top_title.setText("添加随访计划"); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("添加"); + top_right_text.setOnClickListener(this); + + } + + } + + public void initIntent() { + mIntent = getIntent(); + if ("kan".equals(mIntent.getType())) { + isKan = true; + } else { + isKan = false; + } + + patientName = mIntent.getStringExtra("patientName"); + patientDate = mIntent.getStringExtra("patientDate"); + patientNote = mIntent.getStringExtra("patientNote"); + Uuid = mIntent.getStringExtra("patientuuid"); + + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_visit_derail_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_visit_derail); + } + + mActivity = this; + mRl_date = (RelativeLayout) view.findViewById(R.id.rl_visitde_date); + mTv_date = (TextView) view.findViewById(R.id.tv_visitde_date); + mTv_name = (TextView) view.findViewById(R.id.tv_visitde_patientname); + mEt_note = (EditText) view.findViewById(R.id.et_visitdevisit_note); + mBt_delete = (Button) view.findViewById(R.id.bt_delete_visit); + followUpUuid = mIntent.getStringExtra("FollowUpUuid"); + if (!StringUtil.isEmpty(followUpUuid)){ + Map param = new HashMap(); + param.put("uuid", followUpUuid); + sendParamtoNet(Url.getFollowUp, param, GETFOLLOWUP, + VisitDerailActivity.this, false); + }else { + mTv_date.setText(formTime(patientDate)); + if (!StringUtil.isEmpty(patientName)) { + mTv_name.setText(patientName); + } + mEt_note.setText(patientNote); + initLienser(); + } + return view; + } + + // 最后尝试使用editText.setFocusable(false);和editText.setFocusableInTouchMode(false);设置不可编辑状态; + // editText.setFocusableInTouchMode(true);editText.setFocusable(true);editText.requestFocus();设置可编辑状态 + public void initLienser() { + + if (isKan) { + mRl_date.setVisibility(View.VISIBLE); + mEt_note.setFocusable(false); + mEt_note.setFocusableInTouchMode(false); + mBt_delete.setOnClickListener(this); + mBt_delete.setVisibility(View.VISIBLE); + // } else { + // mEt_note.setFocusableInTouchMode(true); + // mEt_note.setFocusable(true); + // mEt_note.requestFocus(); + } else { + mRl_date.setVisibility(View.GONE); + mBt_delete.setVisibility(View.GONE); + } + + } + + public String formTime(String time) { + if (StringUtil.isEmpty(time)) { + return ""; + } + v_year = Integer.parseInt(time.substring(0, 4)); + v_month = Integer.parseInt(time.substring(5, 7)); + v_day = Integer.parseInt(time.substring(8)); + return v_year + "年" + v_month + "月" + v_day + "日"; + + } + + public void getTime() { + + if (mPickerDialog == null) { + mPickerDialog = new DatePickerDialog(mActivity, null, v_year, + v_month, v_day); + mPickerDialog.setTitle("时间日期"); + mPickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DatePicker datePicker = mPickerDialog + .getDatePicker(); + v_year = datePicker.getYear(); + v_month = datePicker.getMonth() + 1; + v_day = datePicker.getDayOfMonth(); + // if (year < v_year) { + // + // } + DecimalFormat decimalFormat = new DecimalFormat( + "00"); + String m = decimalFormat.format(v_month); + String d = decimalFormat.format(v_day); + // mUpTime = year + "-" + m + "-" + d; + mTv_date.setText(v_year + "年" + m + "月" + d + "日"); + + } + }); + mPickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mPickerDialog.dismiss(); + } + }); + + } + if (!mPickerDialog.isShowing()) { + mPickerDialog.show(); + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + if (!StringUtil.isEmpty(mEt_note.getText().toString().trim())) { + Intent intent = new Intent(); + intent.putExtra("note", mEt_note.getText().toString().trim()); + // intent.putExtra("time", + // formTime2(mTv_date.getText().toString() + // .trim())); + setResult(202, intent); + this.finish(); + } else { + ToastUtil.showMessage("随访内容不能为空"); + } + break; + case R.id.bt_delete_visit: + deleteDataResult(); + break; + default: + break; + } + } + + /** + * 删除 + */ + public static final int GET_VISIT_DELETE_RESULT = 101; + + public void deleteDataResult() { + + showProgressDialog("正在删除请稍候....."); + Map param = new HashMap(); + param.put("uuid", Uuid); + sendParamtoNet(Url.getDeleteFollowUp, param, GET_VISIT_DELETE_RESULT, + mActivity, false); + + } + + public String formTime2(String time) { + if (StringUtil.isEmpty(time)) { + return ""; + } + v_year = Integer.parseInt(time.substring(0, 4)); + v_month = Integer.parseInt(time.substring(5, 7)); + v_day = Integer.parseInt(time.substring(8)); + return v_year + "." + v_month + "." + v_day; + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + LogUtil.i("GETFOLLOWUP = "+resultJson); + switch (resultCode){ + case GETFOLLOWUP: + LogUtil.i("GETFOLLOWUP = "+resultJson); + + bean = GsonTools.fromGsonToBean(resultJson, GetFollowUpBean.class); + if (bean!=null&&"1".equals(bean.getCode())){ + String note = bean.getData().getNote(); + String datatime = bean.getData().getDatetime(); + patientDate = datatime; + patientNote = note; + Uuid = followUpUuid; + mTv_date.setText(formTime(patientDate)); + if (!StringUtil.isEmpty(patientName)) { + mTv_name.setText(patientName); + } + mEt_note.setText(patientNote); + initLienser(); + } + break; + case GET_VISIT_DELETE_RESULT: + closeProgressDialog(); + BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + SharePrefUtil.saveString(mActivity, "adddate", "add"); + Intent intent = new Intent(); + setResult(201, intent); + finish(); + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitPlanActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitPlanActivity.java new file mode 100644 index 0000000..bb63866 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/VisitPlanActivity.java @@ -0,0 +1,457 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.app.Dialog; +import android.content.Intent; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VisitPlanAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.VisitPlanListBean; +import cn.shangyu.gdxzExpert.bean.VisitPlanListBean.Datas; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ZHAODeWei 2016-06-21 + * + */ +public class VisitPlanActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet, OnItemLongClickListener { + private View view; + private PullToRefreshListView mLv_Visit; + private TextView mLoad_empty; + private VisitPlanActivity context; + private String patientUuid;// 患者id + private String patientName;// 患者名字 + private Intent mIntent; + public static final int GET_VISIT_DATAS_RESULT = 101; + public static final int GET_VISIT_DELETE_RESULT = 102; + public static final int GET_ADD_DATA_BACK = 201; + + private String mUuid; + private int page = 1; + private int totalPage = 0; + private ArrayList mList = new ArrayList(); + private VisitPlanAdapter mAdapter; + private View ll_loading; + private int DeletePosition = -1;// 删除随访的position + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("随访计划"); + top_right_text.setText("添加"); + top_right_text.setVisibility(View.VISIBLE); +// top_right.setImageResource(R.drawable.invite); + top_right_text.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + showPopupWindow(v); + } + }); + if(CommonUtil.BigModule()) + { + top_right_text.setTextSize(18); + } + + } + + /** + * 获取列表数据 + */ + public void getDataResult() { + Map param = new HashMap(); + param.put("patient_uuid", patientUuid); + param.put("expert_uuid", mUuid); + param.put("page", page + ""); + sendParamtoNet(Url.getFollowUpList, param, GET_VISIT_DATAS_RESULT, + context, true); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_visit_plan_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_visit_plan); + } + context = this; + mUuid = SharePrefUtil.getString(context, Constant.uuid, ""); + initIntent(); + initView(); + getDataResult(); + return view; + } + + private void initIntent() { + mIntent = getIntent(); + // intentVisit.putExtra("patientUuid", patientUuid); + // intentVisit.putExtra("patientName", name); + patientName = mIntent.getStringExtra("patientName"); + patientUuid = mIntent.getStringExtra("patientUuid"); + } + + private void initView() { + mLv_Visit = (PullToRefreshListView) view + .findViewById(R.id.lv_visit_plan); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + mLv_Visit.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + mLv_Visit.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + mLv_Visit.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDataResult(); + } + }); + // mLv_Visit.setOnItemClickListener(this); + // mLv_Visit. + mLv_Visit.getRefreshableView().setOnItemClickListener(this); + mLv_Visit.getRefreshableView().setOnItemLongClickListener(this); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Visit.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + String add = SharePrefUtil.getString(context, "adddate", ""); + if (!StringUtil.isEmpty(add)) { + SharePrefUtil.clear(context, "adddate"); + } + super.onResume(); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Visit.onRefreshComplete(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + VisitPlanListBean bean = GsonTools.fromGsonToBean(result, + VisitPlanListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + mLv_Visit.setEmptyView(mLoad_empty); + // 完成刷新 + loaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + mList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.list); + + if (bean.data.list == null || bean.data.list.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("您暂未添加随访计划"); + } else { + mLoad_empty.setVisibility(View.GONE); + mList.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候e + mList.addAll(bean.data.list); + + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new VisitPlanAdapter(context, mList); + mLv_Visit.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.DatasList.clear(); + mAdapter.getPosition(); + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + // if (bean.data.list == null || bean.data.list.isEmpty()) {// + // 由于暂时虚构没数据,所以加载更多也没数据 + // ToastUtil.showMessage("没有更多随访计划了"); + // mLv_Visit.setMode(Mode.PULL_FROM_START); + // if (page > 1) + // page--; + // } else { + // mLv_Visit.setMode(Mode.BOTH); + // } + // 得到总页码数 + int totalPage = bean.totalPage; + // 是否有更多 + // if (bean.data.list == null || bean.data.list.isEmpty()) {// + // 由于暂时虚构没数据,所以加载更多也没数据 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多随访计划了"); + } + mLv_Visit.setMode(Mode.PULL_FROM_START); + + } else { + mLv_Visit.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, VisitDerailActivity.class); + intent.putExtra("patientDate", mList.get(position - 1).getDatetime()); + intent.putExtra("patientName", mList.get(position - 1).getPatientname()); + intent.putExtra("patientNote", mList.get(position - 1).getNote()); + intent.putExtra("patientuuid", mList.get(position - 1).getUuid()); + intent.setType("kan"); + startActivityForResult(intent, 201); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_VISIT_DATAS_RESULT: + processData(resultJson); + break; + case GET_VISIT_DELETE_RESULT: + BaseBean bean = GsonTools + .fromGsonToBean(resultJson, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + if (DeletePosition >= 0) { + mList.remove(DeletePosition); + mAdapter.DatasList.clear(); + mAdapter.getPosition(); + mAdapter.notifyDataSetChanged(); + if (mList.size() == 0) { + // mLoad_empty.setVisibility(View.VISIBLE); + page = 1; + getDataResult(); + } + } + } + break; + + default: + break; + } + + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (resultCode) { + + case GET_ADD_DATA_BACK: + + page = 1; + getDataResult(); + break; + + default: + break; + } + }; + + LinearLayout mLv_addTime, mLv_addVisit; + + private void showPopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(VisitPlanActivity.this).inflate( + R.layout.pop_window, null); + // 设置按钮的点击事件 + mLv_addTime = (LinearLayout) contentView.findViewById(R.id.ll_addTime); + mLv_addVisit = (LinearLayout) contentView + .findViewById(R.id.ll_addVisit); + + final PopupWindow popupWindow = new PopupWindow(contentView, + LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true); + mLv_addTime.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + Intent intent = new Intent(VisitPlanActivity.this, + AddVisitDateActivity.class); + intent.putExtra("patientUuid", patientUuid); + intent.putExtra("patientName", patientName); + intent.setType("noMain"); + VisitPlanActivity.this.startActivityForResult(intent, + GET_ADD_DATA_BACK); + + } + }); + mLv_addVisit.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + Intent intent = new Intent(VisitPlanActivity.this, + AddVisitPlanActivity.class); + intent.putExtra("patientUuid", patientUuid); + intent.putExtra("patientName", patientName); + intent.setType("noMain"); + VisitPlanActivity.this.startActivityForResult(intent, + GET_ADD_DATA_BACK); + + } + }); + popupWindow.setTouchable(true); + + popupWindow.setTouchInterceptor(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + Log.i("mengdd", "onTouch : "); + + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + + // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 + // 我觉得这里是API的一个bug + popupWindow.setBackgroundDrawable(getResources().getDrawable( + R.drawable.popwrite)); + + // 设置好参数之后再show + popupWindow.showAsDropDown(view); + + } + + /** + * 删除 + */ + + public void deleteDataResult() { + if (DeletePosition >= 0) { + showProgressDialog("正在删除请稍候....."); + Map param = new HashMap(); + param.put("uuid", mList.get(DeletePosition).getUuid()); + sendParamtoNet(Url.getDeleteFollowUp, param, + GET_VISIT_DELETE_RESULT, context, false); + + } + + } + + public void delVisit(final int positions) { + final ECListDialog dialog = new ECListDialog(context, + new String[] { getString(R.string.visit_delete, "") }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + DeletePosition = positions - 1; + deleteDataResult(); + dialog.dismiss(); + } + }); + dialog.setTitle("删除此随访"); + dialog.show(); + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + delVisit(position); + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/WFArticleListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WFArticleListActivity.java new file mode 100644 index 0000000..13501c5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WFArticleListActivity.java @@ -0,0 +1,632 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.WFArticleAdapter; +import cn.shangyu.gdxzExpert.adapter.WFArticleAdapter1; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.WFSearchListBean; +import cn.shangyu.gdxzExpert.bean.WFSearchListBean.RecordsBean; +import cn.shangyu.gdxzExpert.bean.WFYKArticleListBean; +import cn.shangyu.gdxzExpert.bean.WFYKArticleListBean.WFYKBean; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.PopMenu; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * + * @author 赵德伟 + * @date 2015-11-4 下午2:05:13 + * + * + */ +public class WFArticleListActivity extends BaseActivity implements + OnItemClickListener { + private PullToRefreshListView ptrLv; + private String libraryUuid; + private String title; + private String cn; + private PopMenu popMenu; + private int page = 1; + private int type = 2; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private static WFArticleListActivity instance; + // private WFArticleListBean WFbean; + private List beanlists = new ArrayList(); + private WFArticleAdapter mWFAdapter; + private RelativeLayout mRl; + private WFArticleAdapter1 mWFAdapter1;//万方 + public static WFArticleListActivity getInstance() { + return instance; + } + + @Override + public void setTitle() { + instance = this; + // top_back_layout.setVisibility(View.VISIBLE); + // top_right.setVisibility(View.VISIBLE); + // top_right.setImageResource(R.drawable.icon_library_right); + // 获取传值数据 + // url = getIntent().getStringExtra("loadUrl"); + // uuid = getIntent().getStringExtra("typeUuid"); + title = getIntent().getStringExtra("title"); + cn = getIntent().getStringExtra("cn"); + // 设置标题 + if (StringUtil.isEmpty(title)) { + top_title.setText("我的图书馆"); + } else { + top_title.setText(title); + } + popMenu = new PopMenu(this); + // 初始化弹出菜单的选项与选项图标 + popMenu.addItems(new String[] { getString(R.string.action_download), + getString(R.string.action_collect) }, + new int[] { R.drawable.icon_pop_item_down, + R.drawable.icon_pop_item_collect }); + // 菜单项点击监听器 + popMenu.setOnItemClickListener(popmenuItemClickListener); + + } + + // 弹出菜单监听器 + OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + + if (position == 0) { + // ***********下载*********** + Intent intent = new Intent(ct, MyWFArticleActivity.class); + intent.setType("下载"); + startActivity(intent); + + } else if (position == 1) { + // ************收藏************ + Intent intent = new Intent(ct, MyWFArticleActivity.class); + intent.setType("收藏"); + startActivity(intent); + } + popMenu.dismiss(); + } + }; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_bookshelf_list, null); + mRl = (RelativeLayout) view.findViewById(R.id.rl_search_text); + mRl.setVisibility(View.GONE); + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + new Thread(networkTask2).start(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + new Thread(networkTask2).start(); + } + }); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据,即缓存 + showLoadingProgress(); + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + new Thread(networkTask2).start(); + // addWF(WFQuery()); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + + + /** + * 万方接口 + * */ + private List beanlists1 = new ArrayList<>();//万方 + private void processData1(String str) { + // TODO Auto-generated method stub + Log.i("TAG","万方搜索结果 = "+str); + WFSearchListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(str, WFSearchListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("万方医学维护中"); + } + if (page == 1 && bean.getTotal()==0) { + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + // ToastUtil.showMessage(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists1.clear(); + // 数据为空 + if (bean == null || bean.getRecords() == null + || bean.getRecords().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists1.addAll(bean.getRecords()); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.getRecords() == null + || bean.getRecords().size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + beanlists1.addAll(bean.getRecords()); + + } + + // 时间从大到小排序 +// Collections.sort(beanlists1); + + // 更新科普 + if (mWFAdapter1 == null) { + mWFAdapter1 = new WFArticleAdapter1(WFArticleListActivity.this, beanlists1);//mWFAdapter = new WFArticleAdapter(mActivity, beanlists, "") + ptrLv.getRefreshableView().setAdapter(mWFAdapter1); + } else { + mWFAdapter1.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = (bean.getTotal() / 10) + 1; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + // LibraryListBean bean = GsonTools.fromGsonToBean(result, + // LibraryListBean.class); + + closeProgressDialog(); + WFYKArticleListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, WFYKArticleListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("万方医学维护中"); + } + if (page == 1&&!bean.status) { + ToastUtil.showMessage(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null + || bean.data.results.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.results); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.data == null + || bean.data.results.size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + beanlists.addAll(bean.data.results); + + } + // 更新科普 + if (mWFAdapter == null) { + mWFAdapter = new WFArticleAdapter(instance, beanlists, title); + ptrLv.getRefreshableView().setAdapter(mWFAdapter); + } else { + mWFAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = (bean.data.total / 10) + 1; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right: + // 弹出菜单 + popMenu.showAsDropDown(v); + break; + default: + break; + } + } + + // mTv_titleTime.setText(ykbean.getJournal() + "." + // + getStrTime(ykbean.getPubDate()) + ";" + ykbean.getIssue() + // + "(" + ykbean.getVolue() + "):" + ykbean.getPagination()); + // mTv_Title.setText(ykbean.getTitle()); + // mTv_Abstract.setText("\u3000\u3000" + ykbean.getText()); + // StringBuffer author = new StringBuffer(); + // if (ykbean.getAuthorList().length > 0) { + // for (int i = 0; i < ykbean.getAuthorList().length; i++) { + // if (i == ykbean.getAuthorList().length - 1) { + // author.append(ykbean.getAuthorList()[i]); + // } else { + // author.append(ykbean.getAuthorList()[i] + ","); + // } + // + // } + // mTv_Creator.setText("作者:" + author.toString()); + // } + // StringBuffer Keyword = new StringBuffer(); + // if (ykbean.getKeywordList().length > 0) { + // for (int i = 0; i < ykbean.getKeywordList().length; i++) { + // if (i == ykbean.getKeywordList().length - 1) { + // Keyword.append(ykbean.getKeywordList()[i]); + // } else { + // Keyword.append(ykbean.getKeywordList()[i] + ","); + // } + // + // } + // mTv_KeyWords.setText("关键词:" + Keyword.toString()); + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = arg2 - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + + RecordsBean recordsBean = beanlists1.get(p);//万方 + String libraryUuid = recordsBean.getArticleID(); + Intent intent = new Intent(ct, BookDetailActivity.class); + intent.putExtra("title", "杂志详情"); + intent.putExtra("articleId", libraryUuid); + startActivity(intent); + +// WFYKBean bean = beanlists.get(p); +// Intent intent = new Intent(ct, BookDetailActivity.class); +// intent.putExtra("title", "杂志详情"); +// intent.putExtra("articleId", bean.getId()); +//// intent.putExtra("dbid", bean.getDbid()); +// startActivity(intent); + } + + public static final int GET_RESULT_WF = 101; + public static final int GET_RESULT_SEARCH_WF = 102; + + // /** + // * 万方期刊杂志列表 + // * + // * @throws Exception + // */ + // public void addWF(String query) { + // showProgressDialog("加载中"); + // Map param = new HashMap(); + // param.put("query", query); + // param.put("token", Constant.WFToken); + // param.put("startIndex", page + ""); + // param.put("pageSize", 10 + ""); + // sendParamtoNet(Url.WFSearch, param, GET_RESULT_WF, instance, true); + // } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO +// addYK(); + getTooken1(); + } + }; + + + + /** + * 万方期刊详情 + * */ + public void getTooken1() { + /* + * 参数封装 + */ + String squery = "期刊-CN:"+cn; + String encode = null; + try { + encode = URLEncoder.encode(squery, "utf-8"); + } catch (UnsupportedEncodingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + String urlStringUtil = Url.WFSearch+"?query="+encode+"&type="+Constant.WFtype+"&token="+Constant.WFToken+"&StartIndex="+page+"&Sort=Date%20desc"; + Log.i("TAG", "万方搜索接口 = "+urlStringUtil); + try { + URL url = new URL(urlStringUtil); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setDoOutput(true); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = 102; + message.obj = new String(result); + handler.sendMessage(message); + }else { + Message message = new Message(); + message.what = 105; + handler.sendMessage(message); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showMessage("请求失败,请稍后重试"); + } + + } + + + + public void addYK() { + /* + * 参数封装 + */ + Map param1 = new HashMap(); + param1.put("logic", "AND"); + param1.put("field", "CN"); + param1.put("query", cn); + List> aa = new ArrayList>(); + aa.add((HashMap) param1); + Map param = new HashMap(); + param.put("source", "WF"); + param.put("database", "WF_QK"); + param.put("searchType", "Advanced"); + param.put("condition", aa); + param.put("page", page); + param.put("size", "10"); + param.put("startYear", initTime(-9)); + param.put("endYear", initTime(9)); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + data = params.getBytes(encoding); + URL url = new URL(Url.YKSearch); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("token", Constant.YKToken); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", + "application/x-javascript; charset=" + encoding); + conn.setRequestProperty("Content-Length", + String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = SUCCESS; + message.obj = new String(result); + handler.sendMessage(message); + } else { + handler.sendEmptyMessage(ERROR); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(ERROR); + } + + } + + public static final int ERROR = 101; + public static final int SUCCESS = 102; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + switch (msg.what) { + case ERROR: + closeProgressDialog(); + ToastUtil.showMessage("网络异常"); + break; + case SUCCESS: + String str = (String) msg.obj; + if (StringUtil.isEmpty(str)) { + closeProgressDialog(); + ToastUtil.showMessage("数据异常"); + return; + } +// processData(str); + processData1(str); + break; + default: + break; + } + super.handleMessage(msg); + }; + }; + Calendar dateAndTime; + int v_year, v_month, v_day; + + // public String WFQuery() { + // String query = null; + // + // if (StringUtil.isEmpty(cn)) { + // query = "Source=" + title + " and DBID=WF_QK" + // + " and Date within \"" + initTime(-8) + " " + initTime(8) + // + "\" sortby date"; + // + // } else { + // query = "CN exact" + "\"" + cn + "\"" + " and DBID=WF_QK" + // + " and Date within \"" + initTime(-8) + " " + initTime(8) + // + "\" sortby date"; + // } + // + // return query; + // + // } + + public String initTime(int addyear) { + if (dateAndTime == null) { + dateAndTime = Calendar.getInstance(Locale.CHINA); + } + dateAndTime.add(Calendar.YEAR, addyear); + int year = dateAndTime.get(Calendar.YEAR); + int month = dateAndTime.get(Calendar.MONTH); + int day = dateAndTime.get(Calendar.DAY_OF_MONTH); + // DecimalFormat decimalFormat = new DecimalFormat("00"); + // String m = decimalFormat.format(month + 1); + // String d = decimalFormat.format(day); + String returnTime = year + ""; + return returnTime; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/WebActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WebActivity.java new file mode 100644 index 0000000..1dd9eab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WebActivity.java @@ -0,0 +1,139 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.text.TextUtils; +import android.view.View; +import android.webkit.DownloadListener; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class WebActivity extends BaseActivity { + + private X5WebView mWebView; + + + @Override + public void setTitle() { + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_web); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.web); + loadingView = view.findViewById(R.id.loading_view); + String url=getIntent().getStringExtra("url"); + String title=getIntent().getStringExtra("title"); + top_title.setText(title); +// if(StringUtil.isEmpty(url)) +// { +// url=getIntent().getData().getQueryParameter("url"); +// } + if("1".equals(getIntent().getStringExtra("need_share"))) + { + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + } + + mWebView.setWebViewClient(new WebViewClient() + { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(final WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + + super.onPageFinished(view, url); + } + + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + mWebView.setDownloadListener(new DownloadListener() { + @Override + public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { + downloadByBrowser(url); + } + }); + mWebView.loadUrl(url); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.top_right: + share();// 调用分享 + break; + } + + } + private void downloadByBrowser(String url) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.setData(Uri.parse(url)); + startActivity(intent); + } + /** + * 调用分享功能 + */ + private void share() { + String shareTitle ="[保肝护肾,关爱一生]" ; + String shareUrl = "http://qr61.cn/oxs7Wi/qVK5vS2"; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + + + Bitmap bitmap = ImageLoader.getInstance().loadImageSync("http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + ShareUtils.shareUmeng(ct, shareTitle, "点击查看并下载病例模版", msgSinaContent, + "http://doc.igandan.com/app/html/img/2016/20160714132557.png", shareUrl, bitmap); + // ShareUtils.mController.openShare(GDEventDetailActivity.this, false); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/WelfareDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WelfareDetailActivity.java new file mode 100644 index 0000000..2586bf9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WelfareDetailActivity.java @@ -0,0 +1,300 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.WelfareListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/18. + */ + +public class WelfareDetailActivity extends BaseActivity implements OnCallBackFromNet{ + private View view; + + private PullToRefreshListView ptrLv; + private int page = 1; + private List beanlists = new ArrayList<>(); + private WelfareListAdapter mAdapter; + private String type; + public static final int WELFARELIST = 101; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + + @Override + public void setTitle() { + top_title.setText("福利明细"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_welfaredetail_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_welfaredetail); + } + view.findViewById(R.id.rb_shipin).setOnClickListener(this); + view.findViewById(R.id.rb_kejian).setOnClickListener(this); + view.findViewById(R.id.rb_wanfang).setOnClickListener(this); + view.findViewById(R.id.rb_jingpin).setOnClickListener(this); + + ptrLv = view.findViewById(R.id.lv_my_mind); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无数据"); + // 得到实际的ListView 设置点击 + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + } + }); + type = "1"; + getDataResult(); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.rb_shipin: + page = 1; + type = "1"; + getDataResult(); + break; + case R.id.rb_kejian: + page = 1; + type = "2"; + getDataResult(); + break; + case R.id.rb_wanfang: + page = 1; + type = "4"; + getDataResult(); + break; + case R.id.rb_jingpin: + page = 1; + type = "6"; +// type = "3";精品课改成查找文献 + getDataResult(); + break; + } + } + private void getDataResult() { + ll_loading.setVisibility(View.VISIBLE); + Map param = new HashMap<>(); + param.put("type", type); + param.put("page", page + ""); + sendJsonPostParamtoNetSignMD5(Url.welfareList, param, WELFARELIST, this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case WELFARELIST: + LogUtil.i("WELFARELIST = "+resultJson); + processData(resultJson); + break; + } + + } + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + ll_loading.setVisibility(View.GONE); + WelfareListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, WelfareListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + + } + // // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + if (bean != null) { + + } + // 数据为空 + if (bean == null || bean.getData() == null + || bean.getData().getList() == null + || bean.getData().getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.getData().getList()); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.getData().getList()); + + } + // // 更新数据 + if (mAdapter == null) { + mAdapter = new WelfareListAdapter(beanlists); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + + } + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + + + class WelfareListAdapter extends BaseAdapter { + + private List beanlists; + + public WelfareListAdapter(List beanlists) { + this.beanlists = beanlists; + } + + @Override + public int getCount() { + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + WelfareListAdapter.ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_my_mind_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_my_mind); + } + vh = new WelfareListAdapter.ViewHolder(); + vh.mTv_jine = (TextView) convertView + .findViewById(R.id.tv_my_mind_jine); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_my_mind_time); + vh.mTv_type = (TextView) convertView + .findViewById(R.id.tv_my_mind_type); + convertView.setTag(vh); + } else { + vh = (WelfareListAdapter.ViewHolder) convertView.getTag(); + } + vh.mTv_time.setText(beanlists.get(position).getName()); + vh.mTv_jine.setText(beanlists.get(position).getCreate_date().split(" ")[0]); + vh.mTv_type.setText(beanlists.get(position).getCount_num()+""); + return convertView; + } + + class ViewHolder { + TextView mTv_time, mTv_jine, mTv_type; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/WriteTopicActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WriteTopicActivity.java new file mode 100644 index 0000000..1d38319 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/WriteTopicActivity.java @@ -0,0 +1,1109 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class WriteTopicActivity extends BaseActivity implements OnClickListener,OnCallBackFromNet{ + + private EditText et_house_topic; + private CheckBox cb_hous_01, cb_hous_02, cb_hous_03, cb_hous_04, + cb_hous_05, cb_hous_06, cb_hous_07, cb_hous_08; + private ArrayList checkBoxs; + private ArrayList checked; + public static int isTopic = 0; + private Button btn_pop; + private String tag1; + private String tag2; + private String tag3; + private String tag4; + private String tag5; + private String tag6; + private String tag7; + private TextView top_title, top_right_text; + private GridView gv_View; + private Bitmap bmp;// 添加按钮图片 + private AddTopicAdapter gv_adapter; + private List mBitmaps; + private AddBitmaps addBipmap; + private View mView; + private RelativeLayout back; + private ViewPager mPager; + private Handler handler1 = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == 88) { + + if (mBitmaps.size() < 3) { + mBitmaps.add(addBipmap); + } + gv_adapter.notifyDataSetChanged(); + + } + + if (msg.what == 11) { + if (pd.isShowing()) { + pd.dismiss(); + } + Map param = new HashMap<>(); + param.put("score_type","3"); + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, WriteTopicActivity.this); + ToastUtil.showMessage("发布成功"); + Intent intent = new Intent(); + WriteTopicActivity.this + .setResult(GanDanHouseActivity.GET_ADD_FOR_RESULT); + SharePrefUtil.saveString(WriteTopicActivity.this,"WriteTopicActivity",""); + hideSoftKeyboard(); + WriteTopicActivity.this.finish(); + } + }; + }; + private RelativeLayout mRl_bigPhoto; + private View mToolbar1; + + /** + * hide inputMethod + */ + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) + getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + private ECAlertDialog dilaog2; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.topic_activity); + mToolbar1=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar1).init(); + back = (RelativeLayout) findViewById(R.id.top_back_layout); + back.setOnClickListener(this); + initView(); + String context = SharePrefUtil.getString(WriteTopicActivity.this, "WriteTopicActivity", ""); + if (!context.isEmpty()){ + et_house_topic.setText(context); + } + } + + private void initView() { + isTopic = 1; + // TODO Auto-generated method stub + et_house_topic = (EditText) findViewById(R.id.et_house_topic); + mRl_bigPhoto = findViewById(R.id.rl_addcase_bigphoto); + mPager = findViewById(R.id.pager); + cb_hous_01 = (CheckBox) findViewById(R.id.cb_hous_01); + cb_hous_02 = (CheckBox) findViewById(R.id.cb_hous_02); + cb_hous_03 = (CheckBox) findViewById(R.id.cb_hous_03); + cb_hous_04 = (CheckBox) findViewById(R.id.cb_hous_04); + cb_hous_05 = (CheckBox) findViewById(R.id.cb_hous_05); + cb_hous_06 = (CheckBox) findViewById(R.id.cb_hous_06); + cb_hous_07 = (CheckBox) findViewById(R.id.cb_hous_07); + cb_hous_08 = (CheckBox) findViewById(R.id.cb_hous_08); + checkBoxs = new ArrayList<>(); + checked = new ArrayList<>(); + checkBoxs.add(cb_hous_01); + checkBoxs.add(cb_hous_02); + checkBoxs.add(cb_hous_03); + checkBoxs.add(cb_hous_04); + checkBoxs.add(cb_hous_05); + checkBoxs.add(cb_hous_06); + checkBoxs.add(cb_hous_07); + checkBoxs.add(cb_hous_08); + pd = new CustomProgressDialog(this, "请稍候"); + // for (int i = 0; i < checkBoxs.size(); i++) { + // //if(checkBoxs.get(i).isChecked()){ + // // c + // //} + // } + btn_pop = (Button) findViewById(R.id.btn_pop); + setListener(); + top_title = (TextView) findViewById(R.id.top_title); + top_title.setText("发布新话题"); + top_right_text = (TextView) findViewById(R.id.top_right_text); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("发送"); + top_right_text.setOnClickListener(this); + gv_View = (GridView) findViewById(R.id.gv_add_topic); + // + bmp = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + addBipmap = new AddBitmaps(true, bmp, null); + mBitmaps = new ArrayList<>(); + mBitmaps.add(addBipmap); + gv_adapter = new AddTopicAdapter(); + gv_View.setAdapter(gv_adapter); + // ToastUtil.showMessage(mBitmaps.size()+'"'); + gv_View.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + hideSoftKeyboard(); + // TODO Auto-generated method stub + if (mBitmaps.get(arg2).isAdd()) { + // initSelectedHeadPopupwindow(); + // selectedPhoto(); + selectedPhotoView = UIUtils + .inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + // imageView.setVisibility(View.GONE); + imageView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(btn_pop, + Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, + 0); + } + + selectedPhoto(); + } + else + { + mRl_bigPhoto.setVisibility(View.VISIBLE); + PagerSetAdapter(arg2); + } + } + }); + } + public void PagerSetAdapter(int p) { + mToolbar1.setVisibility(View.INVISIBLE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(WriteTopicActivity.this); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + mToolbar1.setVisibility(View.VISIBLE); + mRl_bigPhoto.setVisibility(View.GONE); + + + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private void setListener() { + // TODO Auto-generated method stub + cb_hous_01.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + checked.add(cb_hous_01); + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_01.setChecked(false); + checked.remove(cb_hous_01); + return; + } + // ToastUtil.showMessage(checked.get(0).getText().toString()); + } else { + checked.remove(cb_hous_01); + cb_hous_01.setEnabled(true); + } + + } + }); + cb_hous_02.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + + checked.add(cb_hous_02); + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_02.setChecked(false); + checked.remove(cb_hous_02); + return; + } + } else { + checked.remove(cb_hous_02); + cb_hous_01.setEnabled(true); + } + + } + }); + cb_hous_03.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + + checked.add(cb_hous_03); + } else { + checked.remove(cb_hous_03); + cb_hous_01.setEnabled(true); + } + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_03.setChecked(false); + checked.remove(cb_hous_03); + return; + } + } + }); + cb_hous_04.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + + checked.add(cb_hous_04); + } else { + checked.remove(cb_hous_04); + cb_hous_01.setEnabled(true); + } + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_04.setChecked(false); + checked.remove(cb_hous_04); + return; + } + } + }); + cb_hous_05.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + checked.add(cb_hous_05); + } else { + checked.remove(cb_hous_05); + cb_hous_01.setEnabled(true); + } + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_05.setChecked(false); + checked.remove(cb_hous_05); + return; + } + } + }); + cb_hous_06.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + + checked.add(cb_hous_06); + } else { + checked.remove(cb_hous_06); + cb_hous_01.setEnabled(true); + } + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_06.setChecked(false); + checked.remove(cb_hous_06); + return; + } + } + }); + cb_hous_07.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + + checked.add(cb_hous_07); + } else { + checked.remove(cb_hous_07); + cb_hous_01.setEnabled(true); + } + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_07.setChecked(false); + checked.remove(cb_hous_07); + return; + } + } + }); + cb_hous_08.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + + if (isChecked) { + + checked.add(cb_hous_08); + } else { + checked.remove(cb_hous_08); + cb_hous_01.setEnabled(true); + } + if (checked.size() > 3) { + ToastUtil.showMessage("最多选择三个标签"); + cb_hous_08.setChecked(false); + checked.remove(cb_hous_08); + return; + } + } + }); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + isTopic = 0; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: + + if (TextUtils.isEmpty(et_house_topic.getText().toString())) { + ToastUtil.showMessage("话题内容不能为空!"); + return; + } + StringUtil.IS_PUBLISH_TOPIC = true; + pd.show(); + uploadInfo(); + + break; + case R.id.top_back_layout: + + if (TextUtils.isEmpty(et_house_topic.getText().toString())) { + hideSoftKeyboard(); + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(WriteTopicActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(WriteTopicActivity.this,"WriteTopicActivity",""); + hideSoftKeyboard(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(WriteTopicActivity.this,"WriteTopicActivity",et_house_topic.getText().toString()); + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + break; + + default: + break; + } + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == event.KEYCODE_BACK){ + if (TextUtils.isEmpty(et_house_topic.getText().toString())) { + hideSoftKeyboard(); + finish(); + }else { + dilaog2 = ECAlertDialog.buildAlert(WriteTopicActivity.this, + "您有未发布的内容,是否保存?", "取消", "保存", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(WriteTopicActivity.this,"WriteTopicActivity",""); + hideSoftKeyboard(); + finish(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + SharePrefUtil.saveString(WriteTopicActivity.this,"WriteTopicActivity",et_house_topic.getText().toString()); + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + + } + return super.onKeyDown(keyCode, event); + } + + List parameters; + private StringBuffer buffer; + private String code; + + // 提交信息 + private void uploadInfo() { + buffer = new StringBuffer(); + for (int i = 0; i < checked.size(); i++) { + if (i == (checked.size() - 1)) { + buffer.append(checked.get(i).getText()); + } else { + buffer.append(checked.get(i).getText() + ","); + } + } + + new Thread() { + public void run() { + parameters = new ArrayList(); + BasicNameValuePair value01 = new BasicNameValuePair( + "expert_uuid", SharePrefUtil.getString( + WriteTopicActivity.this, "uuid", "")); + BasicNameValuePair value02 = new BasicNameValuePair("content", + et_house_topic.getText().toString()); + if (TextUtils.isEmpty(buffer.toString())) { + BasicNameValuePair value03 = new BasicNameValuePair("tags", + ""); + parameters.add(value03); + } else { + BasicNameValuePair value03 = new BasicNameValuePair("tags", + buffer.toString()); + parameters.add(value03); + } + + parameters.add(value01); + parameters.add(value02); + + for (int i = 0; i < mBitmaps.size(); i++) { + int num = i + 1; + if (!mBitmaps.get(i).isAdd()) { + BasicNameValuePair value = new BasicNameValuePair("img" + + num, Base64Util.BitmaptoBase64(mBitmaps + .get(i).getBitmap())); + parameters.add(value); + } + } + /* + * else { + * + * BasicNameValuePair value = new BasicNameValuePair("img" + + * "1", ""); parameters.add(value); + * + * } + */ + + HttpResult httpResult = HttpHelper.post(Url.getAddInteraction, + parameters); + // 请求网络,添加病例 + String result = httpResult.getString();// str为服务器返回的json串 + + if (!StringUtil.isEmpty(result)) { + handler1.sendEmptyMessage(11); + } + }; + }.start(); + + } + + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private TextView tv_cancel;// 取消 + private File temp; + private PopupWindow mPopupWindowDialog; + private Uri photoUri;// 图片路径 + private CustomProgressDialog pd; + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // 拍照获取照片 + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(WriteTopicActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11(); + } else { + EasyWindow.with(WriteTopicActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(WriteTopicActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto(); + } + + + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss();// 消失 + } + } + }); + + ll_selected_photo.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // 从相册获取 + pickPhoto(); + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss();// 消失 + } + } + }); + tv_cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss();// 消失 + } + } + }); + + } + + /** + * 拍照获取图片 + */ + private void takePhoto() { + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = Uri.fromFile(new File(Environment + .getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(WriteTopicActivity.this, + "startConsultPhotoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(this, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(this,getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(this, "startConsultPhotoUri", + photoUri + ""); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(this, getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /*** + * 从相册中取图片 + */ + public static final int SELECT_PIC_BY_TACK_PHOTO = 1; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 2; // 使用相册中的图片 + /** + * 执行返回结果 + */ + private ArrayList paths; + + private void pickPhoto() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(WriteTopicActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + isTopic = 1; + Intent intent = new Intent(WriteTopicActivity.this, + PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("isTopic", "isTopic"); + startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(WriteTopicActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(WriteTopicActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + isTopic = 1; + Intent intent = new Intent(WriteTopicActivity.this, + PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("isTopic", "isTopic"); + startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + isTopic = 1; + Intent intent = new Intent(WriteTopicActivity.this, + PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("isTopic", "isTopic"); + startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + } + + } + + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // this.data = data; + + if (resultCode == 102) { + if (data == null) { + return; + } + + paths = (ArrayList) data.getSerializableExtra("photos"); + + mBitmaps.remove(addBipmap); + new Thread() { + + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + // String picPath = + // Base64Util.BitmaptoBase64(bitmap); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + } + handler1.sendEmptyMessage(88); + }; + }.start(); + + return; + + } + + if (resultCode == Activity.RESULT_OK) { + doPhoto(requestCode, data); + } + super.onActivityResult(requestCode, resultCode, data); + } + + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + + private void doPhoto(int requestCode, Intent data) { + if (requestCode == SELECT_PIC_BY_PICK_PHOTO) // 从相册取图片,有些手机有异常情况,请注意 + { + if (data == null) { + Toast.makeText(this, " ", Toast.LENGTH_LONG).show(); + return; + } + photoUri = data.getData(); + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImg(photoUri); + } + if (requestCode == SELECT_PIC_BY_TACK_PHOTO) { + // pd = new CustomProgressDialog(AddCaseActivity.this, "请稍候"); + // pd.show(); + photoUri = Uri.parse(SharePrefUtil.getString( + WriteTopicActivity.this, "startConsultPhotoUri", "")); + // LogUtils.e("photoUri" + photoUri); + if (photoUri == null) { + Toast.makeText(this, "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImg(photoUri); + gv_View.setAdapter(gv_adapter); + // pd.dismiss(); + } + + } + + private void cropImg(Uri photoUri) { + // TODO Auto-generated method stub + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + baos); + String aaa = baos.toByteArray().length + ""; + String name = "picPath" + mPhotos.size(); + name = Base64Util.BitmaptoBase64(loadedImage);// 路径 + + mBitmaps.add(mBitmaps.size() - 1, new AddBitmaps(false, + loadedImage, name)); + if (mBitmaps.size() > 3) { + mBitmaps.remove(addBipmap); + } + gv_adapter.notifyDataSetChanged(); + } + }); + + } + + private List mPhotos = new ArrayList<>();// 存gridview的照片的集合 + + class AddTopicAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mBitmaps.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mBitmaps.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + View view = UIUtils.inflate(R.layout.item_gv_case_record); + ImageView iv_photo = (ImageView) view + .findViewById(R.id.iv_item_gv_case_photo); + ImageView iv_delete = (ImageView) view + .findViewById(R.id.iv_item_gv_case_delete); + if (mBitmaps.get(position).isAdd()) { + iv_delete.setVisibility(View.GONE); + } + if (mBitmaps.get(position).getBitmap() != null) { + iv_photo.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + iv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + mBitmaps.remove(position); + if (!mBitmaps.contains(addBipmap)) { + mBitmaps.add(addBipmap); + } + notifyDataSetChanged(); + } + }); + return view; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 1: + JSONObject jsonObject; + try { + jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + if ("200".equals(optString)) { + Constant.isRefreshpoint = true;//个人中心界面刷新 + ToastUtil.showMessage(jsonObject.optString("message")); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + + default: + break; + } + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionDetailActivity.java new file mode 100644 index 0000000..c443a5e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionDetailActivity.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import medicool.com.mylibrary.SecretView; + +//import com.umeng.socialize.net.r; +//import com.umeng.socialize.sso.UMSsoHandler; + +/** + * 功能说明: + * + * @author 详细新闻页面 NewsDetailActivity + */ + +public class XHYKMedicionDetailActivity extends BaseActivity implements + OnClickListener { + // private static final long serialVersionUID = 5952689219411916553L; + private String result; + private String booktitle = ""; + private XHYKMedicionDetailActivity ctx; + private View view; + private Intent intent; + private SecretView mSv_result_detail; + + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_back_layout.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_xhyk_medicion); + ctx = this; + mSv_result_detail = (SecretView) view + .findViewById(R.id.sv_result_detail); + setitle1(); + showLoadingView(); + initData(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + result = getIntent().getStringExtra("result"); + mSv_result_detail.setSecretText(result); + top_title.setText("相互作用结果"); + + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + } + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionListActivity.java new file mode 100644 index 0000000..3680a5f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/XHYKMedicionListActivity.java @@ -0,0 +1,272 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Random; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.XHYKMediconDetailBean; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.HttpUtils; +import cn.shangyu.gdxzExpert.utils.Sign; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import medicool.com.mylibrary.SecretView; + +//import com.umeng.socialize.net.r; +//import com.umeng.socialize.sso.UMSsoHandler; + +/** + * 功能说明: + * + * @author 详细新闻页面 NewsDetailActivity + */ + +public class XHYKMedicionListActivity extends BaseActivity implements + OnClickListener, OnItemClickListener { + // private static final long serialVersionUID = 5952689219411916553L; + private int drugid; + private String booktitle = ""; + private XHYKMedicionListActivity ctx; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private View view; + private Intent intent; + private ListView mLv_detail; + private XHYKMedicionAdapter mAdapter; + + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_back_layout.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_yk_medicion); + mLv_detail = (ListView) view.findViewById(R.id.lv_yk_medicion); + + mLv_detail.setOnItemClickListener(this); + ctx = this; + mLv_detail.setDivider(ctx.getResources().getDrawable( + R.color.devider_line)); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("未查询到数据"); + mLv_detail.setDividerHeight(1); + setitle1(); + showLoadingView(); + initData(); + new Thread(networkTask).start(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + drugid = getIntent().getIntExtra("drugid", 0); + top_title.setText("相互作用"); + + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + } + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + addYK(); + + } + }; + private String sign; + private final String xhYKurl = Url.YKmdeicioninteractionList; + private final String xhYKsearch_method = "medicool.drug.interact"; + + public void addYK() { + int numberSix = NextInt(100000, 999999); + LinkedHashMap args_sign = new LinkedHashMap<>(); + args_sign.put("drugid", drugid); + try { + sign = Sign.getSign(XHYKMedicionListActivity.this, + xhYKsearch_method, numberSix + "", args_sign); + } catch (Exception e) { + e.printStackTrace(); + } + HashMap args_jsondata = new LinkedHashMap<>(); + args_jsondata.put("method", xhYKsearch_method); + args_jsondata.put("nonce_str", numberSix + ""); + args_jsondata.put("partnerid", Sign.PARTNERID); + args_jsondata.put("sign", sign); + args_jsondata.put("drugid", drugid + ""); + String result = HttpUtils.getData(xhYKurl, args_jsondata); + Message message = new Message(); + message.what = SUCCESS; + message.obj = new String(result); + handler.sendMessage(message); + + } + + public static final int ERROR = 101; + public static final int SUCCESS = 102; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + switch (msg.what) { + case ERROR: + ToastUtil.showMessage("网络异常"); + break; + case SUCCESS: + String str = (String) msg.obj; + if (StringUtil.isEmpty(str)) { + ToastUtil.showMessage("数据异常"); + return; + } + processData(str); + break; + default: + break; + } + super.handleMessage(msg); + }; + }; + XHYKMediconDetailBean bean = null; + + public void processData(String result) { + closeProgressDialog(); + + try { + bean = GsonTools + .fromGsonToBean(result, XHYKMediconDetailBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("维护中"); + } + if (bean == null || bean.mediData == null) { + ToastUtil.showMessage("数据异常"); + return; + } + if (bean.mediCode != 10000) { + ToastUtil.showMessage(bean.mediMsg); + return; + } + if (bean.mediData == null && bean.mediData.size() == 0) { + ll_empty.setVisibility(View.VISIBLE); + return; + } + if (mAdapter == null) { + mAdapter = new XHYKMedicionAdapter(); + mLv_detail.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + } + + Random rand = null; + + public int NextInt(final int min, final int max) { + rand = new Random(); + int tmp = Math.abs(rand.nextInt()); + return tmp % (max - min + 1) + min; + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + public class XHYKMedicionAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return bean.mediData.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return bean.mediData.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_ykmedicion); + vh = new ViewHolder(); + vh.mTv_medicion_title = (SecretView) arg1 + .findViewById(R.id.tv_item_yk); + arg1.setTag(vh); + } else { + vh = (ViewHolder) arg1.getTag(); + } + vh.mTv_medicion_title.setSecretText(bean.mediData.get(arg0) + .getElementMsg()); + return arg1; + } + + } + + class ViewHolder { + SecretView mTv_medicion_title; + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent intent = new Intent(ctx, XHYKMedicionDetailActivity.class); + intent.putExtra("result", bean.mediData.get(arg2).getDataResult()); + startActivity(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMedicionDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMedicionDetailActivity.java new file mode 100644 index 0000000..182a599 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMedicionDetailActivity.java @@ -0,0 +1,258 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ListView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Random; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.YKMediconDetailBean; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.HttpUtils; +import cn.shangyu.gdxzExpert.utils.Sign; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import medicool.com.mylibrary.SecretView; + +//import com.umeng.socialize.net.r; +//import com.umeng.socialize.sso.UMSsoHandler; + +/** + * 功能说明: + * + * @author 详细新闻页面 NewsDetailActivity + */ + +public class YKMedicionDetailActivity extends BaseActivity implements + OnClickListener { + // private static final long serialVersionUID = 5952689219411916553L; + private int drugid; + private int drugtype; + private String booktitle = ""; + private YKMedicionDetailActivity ctx; + private View view; + private Intent intent; + private ListView mLv_detail; + private YKMedicionAdapter mAdapter; + + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_back_layout.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_yk_medicion); + mLv_detail = (ListView) view.findViewById(R.id.lv_yk_medicion); + ctx = this; + setitle1(); + showLoadingView(); + initData(); + new Thread(networkTask).start(); + return view; + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + drugid = getIntent().getIntExtra("drugid", 0); + drugtype = getIntent().getIntExtra("drugtype", 0); + top_title.setText("药品详情"); + + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + } + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + addYK(); + + } + }; + private String sign; + private final String xhYKurl = Url.YKmdeicioninteractionList; + private final String YKurl = Url.YKmdeiciondruginfoList; + private final String xhYKsearch_method = "medicool.drug.interact"; + private final String YKsearch_method = "medicool.drug.detail"; + + public void addYK() { + String search_method = null; + String url = null; + int numberSix = NextInt(100000, 999999); + LinkedHashMap args_sign = new LinkedHashMap<>(); + args_sign.put("drugid", drugid); + + args_sign.put("drugtype", drugtype); + url = YKurl; + search_method = YKsearch_method; + + try { + sign = Sign.getSign(YKMedicionDetailActivity.this, search_method, + numberSix + "", args_sign); + } catch (Exception e) { + e.printStackTrace(); + } + HashMap args_jsondata = new LinkedHashMap<>(); + args_jsondata.put("method", search_method); + args_jsondata.put("nonce_str", numberSix + ""); + args_jsondata.put("partnerid", Sign.PARTNERID); + args_jsondata.put("sign", sign); + args_jsondata.put("drugid", drugid + ""); + args_jsondata.put("drugtype", drugtype + ""); + String result = HttpUtils.getData(url, args_jsondata); + Message message = new Message(); + message.what = SUCCESS; + message.obj = new String(result); + handler.sendMessage(message); + + } + + public static final int ERROR = 101; + public static final int SUCCESS = 102; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + switch (msg.what) { + case ERROR: + ToastUtil.showMessage("网络异常"); + break; + case SUCCESS: + String str = (String) msg.obj; + if (StringUtil.isEmpty(str)) { + ToastUtil.showMessage("数据异常"); + return; + } + processData(str); + break; + default: + break; + } + super.handleMessage(msg); + }; + }; + YKMediconDetailBean bean = null; + + public void processData(String result) { + closeProgressDialog(); + + try { + bean = GsonTools.fromGsonToBean(result, YKMediconDetailBean.class); + } catch (Exception e) { + // TODO: handle exception + } + if (bean == null || bean.mediData == null) { + ToastUtil.showMessage("数据异常"); + return; + } + if (bean.mediCode != 10000) { + ToastUtil.showMessage(bean.mediMsg); + return; + } + if (mAdapter == null) { + mAdapter = new YKMedicionAdapter(); + mLv_detail.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + + Random rand = null; + + public int NextInt(final int min, final int max) { + rand = new Random(); + int tmp = Math.abs(rand.nextInt()); + return tmp % (max - min + 1) + min; + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + public class YKMedicionAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return bean.mediData.getKeydata().size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return bean.mediData.getKeydata().get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_yk_detail); + vh = new ViewHolder(); + vh.mSv_content = (SecretView) convertView + .findViewById(R.id.sv_item_detail_content); + vh.mSv_title = (SecretView) convertView + .findViewById(R.id.sv_item_detail_title); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mSv_title.setSecretText(bean.mediData.getKeydata().get(position) + .getTitle()); + vh.mSv_content.setSecretText(bean.mediData.getKeydata() + .get(position).getContent()); + + return convertView; + } + + } + + class ViewHolder { + public SecretView mSv_title, mSv_content; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconActivity.java new file mode 100644 index 0000000..0e1976d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconActivity.java @@ -0,0 +1,481 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Random; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.YKMediconTitleBean; +import cn.shangyu.gdxzExpert.bean.YKMediconTitleBean.MediconBeanTitle; +import cn.shangyu.gdxzExpert.bean.YKMediconXHTitleBean; +import cn.shangyu.gdxzExpert.bean.YKMediconXHTitleBean.MediconXHBeanTitle; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.HttpUtils; +import cn.shangyu.gdxzExpert.utils.Sign; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import medicool.com.mylibrary.SecretView; + +public class YKMediconActivity extends BaseActivity implements + OnItemClickListener { + private View view; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private String SearchName = null; + private List beanlists = new ArrayList(); + private List xhbeanlists = new ArrayList(); + private YKMedicionAdapter mAdapter; + private YKMedicionXHAdapter mXHAdapter; + + private boolean interaction = false; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_ykmedicion_list); + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("无搜索结果"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + new Thread(networkTask).start(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + new Thread(networkTask).start(); + } + }); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + SearchName = getIntent().getStringExtra("seerchName"); + interaction = getIntent().getBooleanExtra("interaction", false); + top_title.setText(SearchName); + showLoadingProgress(); + new Thread(networkTask).start(); + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + addYK(); + + } + }; + private String sign; + private final String url = Url.YKSearchMdeicion; + private final String search_method = "medicool.drug.search"; + + public void addYK() { + int numberSix = NextInt(100000, 999999); + LinkedHashMap args_sign = new LinkedHashMap<>(); + args_sign.put("cpage", page); + args_sign.put("keywords", SearchName); + if (interaction) { + args_sign.put("searchtype", 1); + } + try { + sign = Sign.getSign(YKMediconActivity.this, search_method, + numberSix + "", args_sign); + } catch (Exception e) { + e.printStackTrace(); + } + HashMap args_jsondata = new LinkedHashMap<>(); + args_jsondata.put("method", search_method); + args_jsondata.put("nonce_str", numberSix + ""); + args_jsondata.put("partnerid", Sign.PARTNERID); + args_jsondata.put("sign", sign); + args_jsondata.put("cpage", page + ""); + args_jsondata.put("keywords", SearchName); + if (interaction) { + args_jsondata.put("searchtype", 1 + ""); + } + String result = HttpUtils.getData(url, args_jsondata); + + Message message = new Message(); + message.what = SUCCESS; + message.obj = new String(result); + handler.sendMessage(message); + + } + + public static final int ERROR = 101; + public static final int SUCCESS = 102; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + switch (msg.what) { + case ERROR: + ToastUtil.showMessage("网络异常"); + break; + case SUCCESS: + String str = (String) msg.obj; + if (StringUtil.isEmpty(str)) { + ToastUtil.showMessage("数据异常"); + return; + } + if (interaction) { + processXHData(str); + } else { + processData(str); + } + + break; + default: + break; + } + super.handleMessage(msg); + }; + }; + Random rand = null; + + public int NextInt(final int min, final int max) { + rand = new Random(); + int tmp = Math.abs(rand.nextInt()); + return tmp % (max - min + 1) + min; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void processData(String result) { + closeProgressDialog(); + YKMediconTitleBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, YKMediconTitleBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("维护中"); + } + if (page == 1 && bean.mediCode != 10000) { + ToastUtil.showMessage(bean.mediMsg); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.mediData == null + || bean.mediData.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("无搜索结果"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + onLoaded(); + ptrLv.setMode(Mode.BOTH); + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.mediData); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.mediData == null + || bean.mediData.size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + ptrLv.setMode(Mode.PULL_FROM_START); + return; + } + beanlists.addAll(bean.mediData); + + } + // 更新 + if (mAdapter == null) { + mAdapter = new YKMedicionAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + // long totalPage = (bean.data.total / 10) + 1; + // if (totalPage <= 1 || totalPage < page) { + // if (page != 1) { + // ToastUtil.showMessage("没有更多数据了"); + // } + // ptrLv.setMode(Mode.PULL_FROM_START); + // + // } else { + // ptrLv.setMode(Mode.BOTH); + // } + + // 设置刷新的时间 + setLastUpdateTime(); + + } + + public void processXHData(String result) { + closeProgressDialog(); + YKMediconXHTitleBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, YKMediconXHTitleBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("维护中"); + } + if (page == 1 && bean.mediCode != 10000) { + ToastUtil.showMessage(bean.mediMsg); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + xhbeanlists.clear(); + // 数据为空 + + if (bean == null || bean.mediData == null + || bean.mediData.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("无搜索结果"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + onLoaded(); + ptrLv.setMode(Mode.BOTH); + ll_empty.setVisibility(View.GONE); + xhbeanlists.addAll(bean.mediData); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.mediData == null + || bean.mediData.size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + ptrLv.setMode(Mode.PULL_FROM_START); + return; + } + xhbeanlists.addAll(bean.mediData); + + } + // 更新 + if (mXHAdapter == null) { + mXHAdapter = new YKMedicionXHAdapter(); + ptrLv.getRefreshableView().setAdapter(mXHAdapter); + } else { + mXHAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + // long totalPage = (bean.data.total / 10) + 1; + // if (totalPage <= 1 || totalPage < page) { + // if (page != 1) { + // ToastUtil.showMessage("没有更多数据了"); + // } + // ptrLv.setMode(Mode.PULL_FROM_START); + // + // } else { + // ptrLv.setMode(Mode.BOTH); + // } + + // 设置刷新的时间 + setLastUpdateTime(); + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + if (interaction) { + Intent intent = new Intent(YKMediconActivity.this, + YKMediconListActivity.class); + intent.putExtra("NameId", xhbeanlists.get(arg2 - 1).getNameID()); + intent.putExtra("Dataype", xhbeanlists.get(arg2 - 1).getDataType()); + intent.putExtra("interaction", interaction); + this.startActivity(intent); + } else { + Intent intent = new Intent(YKMediconActivity.this, + YKMediconListActivity.class); + intent.putExtra("NameId", beanlists.get(arg2 - 1).getNameID()); + intent.putExtra("Dataype", beanlists.get(arg2 - 1).getDataType()); + intent.putExtra("interaction", interaction); + this.startActivity(intent); + } + + } + + public class YKMedicionAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return beanlists.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_ykmedicion); + vh = new ViewHolder(); + vh.mTv_medicion_title = (SecretView) arg1 + .findViewById(R.id.tv_item_yk); + arg1.setTag(vh); + } else { + vh = (ViewHolder) arg1.getTag(); + } + vh.mTv_medicion_title.setSecretText(beanlists.get(arg0) + .getDrugName()); + return arg1; + } + + } + + class ViewHolder { + SecretView mTv_medicion_title; + } + + public class YKMedicionXHAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return xhbeanlists.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return xhbeanlists.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewXHHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_ykmedicion); + vh = new ViewXHHolder(); + vh.mTv_medicion_title = (SecretView) arg1 + .findViewById(R.id.tv_item_yk); + arg1.setTag(vh); + } else { + vh = (ViewXHHolder) arg1.getTag(); + } + vh.mTv_medicion_title.setSecretText(xhbeanlists.get(arg0) + .getDrugTypeName()); + return arg1; + } + + } + + class ViewXHHolder { + SecretView mTv_medicion_title; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconListActivity.java new file mode 100644 index 0000000..b30caa2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/YKMediconListActivity.java @@ -0,0 +1,351 @@ +package cn.shangyu.gdxzExpert.activity; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Random; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.YKMediconBean; +import cn.shangyu.gdxzExpert.bean.YKMediconBean.MediconBean; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.HttpUtils; +import cn.shangyu.gdxzExpert.utils.Sign; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import medicool.com.mylibrary.SecretView; + +public class YKMediconListActivity extends BaseActivity implements + OnItemClickListener { + private View view; + private PullToRefreshListView ptrLv; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + private int page = 1; + private int NameId; + private int Dataype; + private List beanlists = new ArrayList(); + private YKMedicionAdapter mAdapter; + private boolean interaction; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("搜索结果"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_ykmedicion_list); + // 下拉刷新的listview控件 + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library); + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("无搜索结果"); + // 设置只有下拉刷新模式 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + new Thread(networkTask).start(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + new Thread(networkTask).start(); + } + }); + initData(); + return view; + } + + private void initData() { + // TODO Auto-generated method stub + NameId = getIntent().getIntExtra("NameId", 0); + Dataype = getIntent().getIntExtra("Dataype", 0); + interaction = getIntent().getBooleanExtra("interaction", false); + showLoadingProgress(); + new Thread(networkTask).start(); + } + + Runnable networkTask = new Runnable() { + + @Override + public void run() { + // TODO + addYK(); + + } + }; + private String sign; + private final String url = Url.YKmdeicionList; + private final String search_method = "medicool.drug.list"; + + public void addYK() { + int numberSix = NextInt(100000, 999999); + LinkedHashMap args_sign = new LinkedHashMap<>(); + args_sign.put("cpage", page); + args_sign.put("nameid", NameId); + args_sign.put("typetype", Dataype); + try { + sign = Sign.getSign(YKMediconListActivity.this, search_method, + numberSix + "", args_sign); + } catch (Exception e) { + e.printStackTrace(); + } + HashMap args_jsondata = new LinkedHashMap<>(); + args_jsondata.put("method", search_method); + args_jsondata.put("nonce_str", numberSix + ""); + args_jsondata.put("partnerid", Sign.PARTNERID); + args_jsondata.put("sign", sign); + args_jsondata.put("cpage", page + ""); + args_jsondata.put("nameid", NameId + ""); + args_jsondata.put("typetype", Dataype + ""); + String result = HttpUtils.getData(url, args_jsondata); + Message message = new Message(); + message.what = SUCCESS; + message.obj = new String(result); + handler.sendMessage(message); + + } + + public static final int ERROR = 101; + public static final int SUCCESS = 102; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + closeProgressDialog(); + switch (msg.what) { + case ERROR: + ToastUtil.showMessage("网络异常"); + break; + case SUCCESS: + String str = (String) msg.obj; + if (StringUtil.isEmpty(str)) { + ToastUtil.showMessage("数据异常"); + return; + } + + processData(str); + break; + default: + break; + } + super.handleMessage(msg); + }; + }; + Random rand = null; + + public int NextInt(final int min, final int max) { + rand = new Random(); + int tmp = Math.abs(rand.nextInt()); + return tmp % (max - min + 1) + min; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void processData(String result) { + closeProgressDialog(); + YKMediconBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, YKMediconBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("维护中"); + } + if (page == 1 && bean.mediCode != 10000) { + ToastUtil.showMessage(bean.mediMsg); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.mediData == null + || bean.mediData.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("无搜索结果"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + onLoaded(); + ptrLv.setMode(Mode.BOTH); + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.mediData); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.mediData == null + || bean.mediData.size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + ptrLv.setMode(Mode.PULL_FROM_START); + return; + } + beanlists.addAll(bean.mediData); + + } + // 更新 + if (mAdapter == null) { + mAdapter = new YKMedicionAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + // long totalPage = (bean.data.total / 10) + 1; + // if (totalPage <= 1 || totalPage < page) { + // if (page != 1) { + // ToastUtil.showMessage("没有更多数据了"); + // } + // ptrLv.setMode(Mode.PULL_FROM_START); + // + // } else { + // ptrLv.setMode(Mode.BOTH); + // } + + // 设置刷新的时间 + setLastUpdateTime(); + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + if (interaction) { + Intent intent = new Intent(YKMediconListActivity.this, + XHYKMedicionListActivity.class); + intent.putExtra("drugid", beanlists.get(arg2 - 1).getDrugID()); + intent.putExtra("drugtype", beanlists.get(arg2 - 1).getDrugType()); + this.startActivity(intent); + } else { + Intent intent = new Intent(YKMediconListActivity.this, + YKMedicionDetailActivity.class); + intent.putExtra("drugid", beanlists.get(arg2 - 1).getDrugID()); + intent.putExtra("drugtype", beanlists.get(arg2 - 1).getDrugType()); + + intent.putExtra("interaction", interaction); + this.startActivity(intent); + } + + } + + public class YKMedicionAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return beanlists.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_ykmedicion); + vh = new ViewHolder(); + vh.mTv_medicion_title = (SecretView) arg1 + .findViewById(R.id.tv_item_yk); + arg1.setTag(vh); + } else { + vh = (ViewHolder) arg1.getTag(); + } + vh.mTv_medicion_title.setSecretText(beanlists.get(arg0) + .getProduceName()); + return arg1; + } + + } + + class ViewHolder { + SecretView mTv_medicion_title; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/activity/ZhiBoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ZhiBoActivity.java new file mode 100644 index 0000000..0970afb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/activity/ZhiBoActivity.java @@ -0,0 +1,563 @@ +package cn.shangyu.gdxzExpert.activity; + +import static cn.shangyu.gdxzExpert.utils.Url.zhibourl; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Base64; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import java.io.UnsupportedEncodingException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; + +public class ZhiBoActivity extends AppCompatActivity implements OnClickListener { + private X5WebView webView; + private ZhiBoActivity mActivity; + public View loadingView; + private String url; + private ImageView top_back; + private TextView mTitle; + + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private WebChromeClient.CustomViewCallback xCustomViewCallback; + private myWebChromeClient xwebchromeclient; + private View layout_top; + private ImageButton mIb_share; + private String summary; + private String imageUrl = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); +// if (!UIUtils.isLogined()) +// { +// Intent intent = new Intent(); +// intent.setClass(this, LoginNewActivity.class); +// startActivity(intent); +// finish(); +// return; +// } + this.setContentView(R.layout.activity_zhi_bo); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + X5WebView.initHardwareAccelerate(this); + webView = this.findViewById(R.id.aaaaaa); + webView.setKeepScreenOn(true); //确保屏幕长亮 + layout_top = this.findViewById(R.id.layout_top); + loadingView = this.findViewById(R.id.loading_view); + top_back = (ImageView) this.findViewById(R.id.top_back); + mTitle = (TextView) this.findViewById(R.id.top_title); + if(CommonUtil.BigModule()) + { + mTitle.setTextSize(23); + } + mIb_share = (ImageButton) this.findViewById(R.id.top_right); + video_fullView = (FrameLayout) this.findViewById(R.id.f_move); + video_fullView.setKeepScreenOn(true); //确保屏幕长亮 + mIb_share.setVisibility(View.VISIBLE); + mIb_share.setImageResource(R.drawable.share_icon); + top_back.setOnClickListener(this); + mIb_share.setOnClickListener(this); + mActivity = this; + url = getIntent().getStringExtra("url"); +// if(StringUtil.isEmpty(url)&&getIntent().getData()!=null) +// { +// url=getIntent().getData().getQueryParameter("liveurl"); +// getIntent().setType("zhibo"); +// } + if (!getIntent().getType().equals("zhibo")) + { + createhideWebVeiw();//解决WebView写入localstorage但首次加载取不到值的问题 + } + else + { + InitIntent(); + } + + } + private void createhideWebVeiw() { + + final WebView webView = new WebView(this); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true);// 打开本地缓存提供JS调用,至关重要 +// webView.getSettings().setAppCacheEnabled(false); + + webView.getSettings().setDatabaseEnabled(true); // 如果需要 WebSQL(也部分废弃) + webView.getSettings().setAllowFileAccess(true); // 如需访问文件 + webView.getSettings().setAllowContentAccess(true); + + webView.loadUrl(url); + webView.setWebViewClient(new WebViewClient() { + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + String id = SharePrefUtil.getString(ZhiBoActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(ZhiBoActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(ZhiBoActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String params = "{\"name\":\""+name+"\",\"id\":\""+id+"\",\"avatar\":\""+avatar+"\"}"; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + params = params.toString().replaceAll("\\+", "=").replaceAll("\n", ""); + LogUtil.i("params = "+params); + view.evaluateJavascript("window.localStorage.setItem('watchlive_current_user','" +params + "');", null); + } else { + view.loadUrl("javascript:(function({window.localStorage.setItem('watchlive_current_user','" + params.toString() + "')})()"); + view.reload(); + } + webView.destroy(); + + //正常加载网页 + InitIntent(); + } + }); + } + public class MyWebViewClient extends WebViewClient { + + private ProgressDialog loadingBar; + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + String id = SharePrefUtil.getString(ZhiBoActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(ZhiBoActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(ZhiBoActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String params = "{\"name\":\""+name+"\",\"id\":\""+id+"\",\"avatar\":\""+avatar+"\"}"; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + view.evaluateJavascript("window.localStorage.setItem('watchlive_current_user','" +params + "');", null); + } else { + view.loadUrl("javascript:(function({window.localStorage.setItem('watchlive_current_user','" + params.toString() + "')})()"); + view.reload(); + } + + loadingView.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // ToastUtil.showToast("加载失败,请检查网络"); + loadingView.setVisibility(View.GONE); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + } + } + + @SuppressLint("NewApi") + public void InitIntent() { + summary = getIntent().getStringExtra("newsTitle"); + imageUrl = Url.urlHtml + getIntent().getStringExtra("summary");// 图的地址 +// if(StringUtil.isEmpty(summary)&&StringUtil.isEmpty(imageUrl)&&getIntent().getData()!=null) +// { +// summary=getIntent().getData().getQueryParameter("title"); +// imageUrl=Url.urlHtml+getIntent().getData().getQueryParameter("liveimg"); +// +// } + if (getIntent().getType().equals("zhibo")) { + mTitle.setText("肝胆直播"); + } else { + mTitle.setText("现代肝病学院"); + } + // url="http://www.baidu.com/"; +// DataCleanManager.cleanWebCache(this); +// WebSettings setting = webView.getSettings(); +// setting.setPluginState(PluginState.ON); +// setting.setUseWideViewPort(true); +// setting.setJavaScriptEnabled(true); // Support JavaScript +// setting.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// // setting.setPluginsEnabled(true); //Support Plugins, for example just +// // like flash plugin. +// setting.setLoadWithOverviewMode(true); +// setting.setUseWideViewPort(true); +// setting.setDomStorageEnabled(true); +// setting.setSupportZoom(true); // Zoom Control on web (You don't need + // setting.setBuiltInZoomControls(true); // Enable Multitouch if + // supported + // by ROM + + //新添加使用了localStorage存储 +// webView.getSettings().setAppCacheMaxSize(1024*1024*8); +// String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); +// webView.getSettings().setAppCachePath(appCachePath); +// webView.getSettings().setAllowFileAccess(true); +// webView.getSettings().setAppCacheEnabled(true); + + WebSettings webSettings = webView.getSettings(); + webSettings.setJavaScriptEnabled(true); // 如果需要 JS + webSettings.setDomStorageEnabled(true); // 启用 DOM 存储(LocalStorage 等) + webSettings.setDatabaseEnabled(true); // 如果需要 WebSQL(也部分废弃) + webSettings.setAllowFileAccess(true); // 如需访问文件 + webSettings.setAllowContentAccess(true); + + String userAgent = webView.getSettings().getUserAgentString(); + String userAgents = userAgent + "gdxz-expert"; + webView.getSettings().setUserAgentString(userAgents); + webView.setInitialScale(50); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + if (getIntent().getType().equals("zhibo")) + { + String id = SharePrefUtil.getString(ZhiBoActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(ZhiBoActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(ZhiBoActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + name=name.replaceAll("\r|\n", ""); + //name = str; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String temurl= null; + try { + temurl = zhibourl+"?id="+id+"&name="+name+"&avatar="+avatar+"&url="+url+"&sign="+ AESUtil.Encrypt(id+name+avatar+url,"deoep09_klodLdAo"); + + Log.d("gdxzzhibo","temurl ="+temurl); + } catch (Exception e) { + e.printStackTrace(); + } + webView.loadUrl(temurl); + xwebchromeclient = new myWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + webView.setWebViewClient(new WebViewClient(){ + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }); + //webView.loadUrl("https://www.baidu.com"); + + + } + else + { + webView.loadUrl(url); + xwebchromeclient = new myWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + webView.setWebViewClient(new MyWebViewClient()); + } + + + + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stubdes + switch (v.getId()) { + case R.id.top_back: + this.finish(); + + break; + case R.id.top_right: + share(); + break; + default: + break; + } + + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = summary; + String shareUrl = url; + String msgSinaContent = shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = ""; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + ShareUtils.shareUmeng(ZhiBoActivity.this, "肝胆相照直播:" + shareTitle, + summary, msgSinaContent, imageUrl, shareUrl, bitmap); + // final UMImage shareImg;// 友盟分享的缩略图 + // Bitmap file = null; + // try { + // file = Glide.with(BaseApplication.getInstance()) + // .load(imageUrl).asBitmap() + // .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get(); + // } catch (InterruptedException | ExecutionException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // if (StringUtil.isEmpty(imageUrl.replace(Url.urlHtml, ""))) { + // shareImg = new UMImage(ZhiBoActivity.this, + // "http://doc.igandan.com/app/img/expert_logo.png"); + // } else { + // + // shareImg = new UMImage(ZhiBoActivity.this, file); + // } + // UMWeb web = new UMWeb(shareUrl); + // shareTitle = "肝胆想照直播:" + shareTitle; + // web.setTitle(shareTitle);// 标题 + // web.setThumb(shareImg); // 缩略图 + // + // web.setDescription(msgSinaContent);// 描述 + // new ShareAction(ZhiBoActivity.this) + // .withMedia(web) + // .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, + // SHARE_MEDIA.SINA) + // .setCallback( + // new UMengShareHelper(ZhiBoActivity.this).shareListener) + // .open(); + + } + + public class myWebChromeClient extends WebChromeClient { + private View xprogressvideo; + + // 播放网络视频时全屏会被调用的方法 + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + // Log.i("fangfa","已经进入了。。。。。。。。"); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + webView.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + xCustomViewCallback = callback; + video_fullView.addView(view); + + video_fullView.setVisibility(View.VISIBLE); + + setFullScreen(); + } + + // 视频播放退出全屏会被调用的 + @Override + public void onHideCustomView() { + layout_top.setVisibility(View.VISIBLE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + xCustomViewCallback.onCustomViewHidden(); + webView.setVisibility(View.VISIBLE); + quitFullScreen(); + } + + // 视频加载时进程loading + @Override + public View getVideoLoadingProgressView() { + if (xprogressvideo == null) { + LayoutInflater inflater = LayoutInflater + .from(ZhiBoActivity.this); + xprogressvideo = inflater.inflate(R.layout.loading_view, null); + } + return xprogressvideo; + } + } + + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + + } + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + /** + * 判断是否是全屏 + * + * @return + */ + public boolean inCustomView() { + return (xCustomView != null); + } + + /** + * 全屏时按返加键执行退出全屏方法 + */ + public void hideCustomView() { + xwebchromeclient.onHideCustomView(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + @Override + protected void onResume() { + super.onResume(); + webView.onResume(); + // webView.resumeTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onResume") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + /** + * 设置为横屏 + */ + if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + } + + @Override + protected void onPause() { + super.onPause(); + webView.onPause(); + // webView.pauseTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onPause") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 主要是把webview所持用的资源销毁, + */ + @Override + protected void onDestroy() { + super.onDestroy(); + if (video_fullView != null) + video_fullView.removeAllViews(); + if (webView != null) + { + webView.setVisibility(View.GONE); + webView.loadUrl("about:blank"); + webView.stopLoading(); + webView.setWebChromeClient(null); + webView.setWebViewClient(null); + webView.destroy(); + } + + UMShareAPI.get(this).release(); + //释放资源 +// if (webView != null) +// webView.destroy(); + } + + /** + * 判断是否是全屏,如果是就隐藏,否则就退出当前的页面 + * + * @param keyCode + * @param event + * @return + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (inCustomView()) { + // webViewDetails.loadUrl("about:blank"); + hideCustomView(); + return false; + } else { + webView.loadUrl("about:blank"); + this.finish(); + } + } + return false; + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter.java new file mode 100644 index 0000000..b8c658b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter.java @@ -0,0 +1,101 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +public class AddCaseRecordAdapter extends BaseAdapter { + private Activity mActivity; + private List mBitmaps; + private AddBitmaps mAddBitmaps; + + public AddCaseRecordAdapter(Activity mActivity, List mBitmaps, + AddBitmaps mAddBitmaps) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + this.mBitmaps = mBitmaps; + this.mAddBitmaps = mAddBitmaps; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mBitmaps.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mBitmaps.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.item_gv_case_record); + ImageView iv_photo = (ImageView) view + .findViewById(R.id.iv_item_gv_case_photo); + ImageView iv_delete = (ImageView) view + .findViewById(R.id.iv_item_gv_case_delete); + if (mBitmaps.get(position).isAdd()) { + iv_delete.setVisibility(View.GONE); + } + + if (mBitmaps.get(position).getBitmap() != null) { + iv_photo.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + if (mBitmaps.get(position).getPath() != null) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + mBitmaps.get(position).getPath(), iv_photo, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + iv_delete.setVisibility(View.VISIBLE); + ImageLoader.getInstance().loadImage( + Url.urlHtml + mBitmaps.get(position).getPath(), + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + mBitmaps.get(position).setBitmap(loadedImage); + } + }); + } + iv_delete.setTag(position); + iv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if ((Integer) v.getTag() < mBitmaps.size()) { + mBitmaps.remove(mBitmaps.get((Integer) v.getTag())); + } + if (!mBitmaps.contains(mAddBitmaps)) { + mBitmaps.add(mAddBitmaps); + } + notifyDataSetChanged(); + } + }); + return view; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter01.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter01.java new file mode 100644 index 0000000..c82955d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AddCaseRecordAdapter01.java @@ -0,0 +1,101 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PhotoAlbumActivity; +import cn.shangyu.gdxzExpert.activity.SelectedPhotoActivity; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +public class AddCaseRecordAdapter01 extends BaseAdapter { + private Activity mActivity; + private List mBitmaps; + + public AddCaseRecordAdapter01(Activity mActivity, List mBitmaps) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + this.mBitmaps = mBitmaps; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mBitmaps.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mBitmaps.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.item_gv_case_record); + ImageView iv_photo = (ImageView) view + .findViewById(R.id.iv_item_gv_case_photo); + ImageView iv_delete = (ImageView) view + .findViewById(R.id.iv_item_gv_case_delete); + if (mBitmaps.get(position).isAdd()) { + iv_delete.setVisibility(View.GONE); + } + + if (mBitmaps.get(position).getBitmap() != null) { + iv_photo.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + if (mBitmaps.get(position).getPath() != null) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + mBitmaps.get(position).getPath(), iv_photo, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + iv_delete.setVisibility(View.VISIBLE); + ImageLoader.getInstance().loadImage( + Url.urlHtml + mBitmaps.get(position).getPath(), + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + mBitmaps.get(position).setBitmap(loadedImage); + + } + }); + } + iv_delete.setTag(position); + iv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if ((Integer) v.getTag() < mBitmaps.size()) { + mBitmaps.remove(mBitmaps.get((Integer) v.getTag())); + } + + notifyDataSetChanged(); + } + }); + return view; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AppliedListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AppliedListAdapter.java new file mode 100644 index 0000000..7085d46 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/AppliedListAdapter.java @@ -0,0 +1,83 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PatientEducationApplyActivity; +import cn.shangyu.gdxzExpert.bean.MailanListBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class AppliedListAdapter extends BaseAdapter { + private ArrayList beans; + private Context context; + public AppliedListAdapter(ArrayList beans, Context context) { + this.beans = beans; + this.context =context; + } + + @Override + public int getCount() { + return beans.size(); + } + + @Override + public Object getItem(int position) { + return beans.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_appliedlist); + vh = new ViewHolder(); + vh.iv_edit = convertView.findViewById(R.id.iv_edit); + vh.tv_infotime = convertView.findViewById(R.id.tv_infotime); + vh.tv_topic = convertView.findViewById(R.id.tv_topic); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_time = convertView.findViewById(R.id.tv_time); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.iv_edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, PatientEducationApplyActivity.class); + intent.putExtra("topic",beans.get(position).getTopic()); + intent.putExtra("type",beans.get(position).getType()); + intent.putExtra("expect_date",beans.get(position).getExpect_date()); + intent.putExtra("uuid",beans.get(position).getUuid()); + context.startActivity(intent); + } + }); + vh.tv_infotime.setText(beans.get(position).getCreate_date().replace("-",".")); + vh.tv_type.setText(beans.get(position).getType()); + vh.tv_topic.setText(beans.get(position).getTopic()); + vh.tv_time.setText(beans.get(position).getExpect_date().replace("-",".")); + return convertView; + } + public static class ViewHolder { + + public TextView tv_type, tv_topic, tv_time,tv_infotime; + public ImageView iv_edit; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ArrayAdapterNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ArrayAdapterNew.java new file mode 100644 index 0000000..6d9ed7d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ArrayAdapterNew.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.widget.ArrayAdapter; + +import androidx.annotation.NonNull; + +import java.util.List; + +public class ArrayAdapterNew extends ArrayAdapter { + + public ArrayAdapterNew(@NonNull Context context, int resource, @NonNull List objects) { + super(context, resource, objects); + } + + + + @Override + public int getCount() { + //返回数据的统计数量,大于0项则减去1项,从而不显示最后一项 + int i = super.getCount(); + return i>0?i-1:i; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BankListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BankListAdapter.java new file mode 100644 index 0000000..f71dcae --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BankListAdapter.java @@ -0,0 +1,61 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.Bank; +import cn.shangyu.gdxzExpert.widget.CircleImageView; + +public class BankListAdapter extends BaseAdapter { + private Context mContext; + private List bank; + + public BankListAdapter(Context mContext, List bank) { + this.mContext = mContext; + this.bank=bank; + } + + @Override + public int getCount() { + return bank.size(); + } + + @Override + public Object getItem(int position) { + return bank.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, R.layout.item_bank_list_card1, null); + holder.img = (CircleImageView) convertView.findViewById(R.id.item_img); + holder.name = (TextView) convertView.findViewById(R.id.tv_bank_name); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + Bank bankItem = bank.get(position); + holder.name.setText(bankItem.bankName); + holder.img.setImageResource(bankItem.bankIcon); + return convertView; + } + + class Holder { + CircleImageView img; + TextView name; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BarAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BarAdapter.java new file mode 100644 index 0000000..d7029f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BarAdapter.java @@ -0,0 +1,77 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.RankingBean; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import me.zhouzhuo.zzhorizontalprogressbar.ZzHorizontalProgressBar; + +public class BarAdapter extends RecyclerView.Adapter { + private Context context; + private List list; + public BarAdapter(Context context,List list) { + this.context = context; + this.list=list; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.bar_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + viewHolder.name=view.findViewById(R.id.name); + viewHolder.num=view.findViewById(R.id.num); + viewHolder.pb=view.findViewById(R.id.pb); + return viewHolder; + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + if(StringUtil.isEmpty(list.get(position).getName())) + { + holder.name.setText(list.get(position).getHospitalName()+""); + } + else + { + holder.name.setText(list.get(position).getName()+ + "("+list.get(position).getHospitalName() +")"); + } + + holder.num.setText(list.get(position).getNum()+""); + holder.pb.setProgress(list.get(position).getNum()); + holder.pb.setMax(list.get(0).getNum()); + holder.pb.setBgColor(Color.parseColor("#F5F5F5")); + holder.pb.setProgressColor(Color.parseColor("#56A5EB")); + + } + + @Override + public int getItemCount() { + return list.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + + TextView name,num; + ZzHorizontalProgressBar pb; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BaseFragemetAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BaseFragemetAdapter.java new file mode 100644 index 0000000..1d916a4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BaseFragemetAdapter.java @@ -0,0 +1,48 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.ViewGroup; + +import java.util.ArrayList; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; + +public class BaseFragemetAdapter extends FragmentStatePagerAdapter { + ArrayList fgs; + private String[] mTitles; + public Fragment currentFragment; + + public void setFgs(ArrayList fgs, String[] mTitles){ + this.fgs=fgs; + this.mTitles=mTitles; + } + public BaseFragemetAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) { + + this.currentFragment = (Fragment) object; + super.setPrimaryItem(container, position, object); + } + + @Override + public Fragment getItem(int position) { + + return fgs.get(position); + } + + @Override + public int getCount() { + return fgs.size(); + } + + @Override + public CharSequence getPageTitle(int position) { + return mTitles[position];//很重要,起到与tableLayout关联的作用, +// 否则会报错 + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BillDetailAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BillDetailAdapter.java new file mode 100644 index 0000000..e37c620 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BillDetailAdapter.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.BillListBean.PingOrder.PingOrderBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class BillDetailAdapter extends BaseAdapter { + List list; + + public BillDetailAdapter(List list) { + + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (list == null) { + return 0; + } + return list.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return list.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_bill_detail_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_bill_detail); + } + vh = new ViewHolder(); + vh.mTv_money = (TextView) convertView + .findViewById(R.id.tv_order_money); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.tv_order_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_order_time); + vh.mTv_type = (TextView) convertView + .findViewById(R.id.tv_order_type); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_money.setText(list.get(position).getAccountstr()); + + vh.mTv_type.setText(list.get(position).getType_name()); + vh.mTv_name.setText(list.get(position).getUser_name()); + +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); +// +// String sd = sdf.format(new Date(Long.parseLong(list.get(position) +// .getCreate_time()) * 1000)); +// vh.mTv_time.setText(sd); + vh.mTv_time.setText(list.get(position).getCreate_time().substring(0, 10)); + return convertView; + } + + class ViewHolder { + TextView mTv_type, mTv_name, mTv_time, mTv_money; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BookshelfListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BookshelfListAdapter.java new file mode 100644 index 0000000..67af9a1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/BookshelfListAdapter.java @@ -0,0 +1,1155 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamNoResultMD5; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import java.io.File; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity2; +import cn.shangyu.gdxzExpert.activity.EnglishDetailActivity; +import cn.shangyu.gdxzExpert.activity.MyDownloadActivity; +import cn.shangyu.gdxzExpert.activity.PdfViewActivity; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ENBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * LibraryListAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆(权威速递、常用工具)适配器 + */ +@SuppressLint("ResourceAsColor") +public class BookshelfListAdapter extends BaseAdapter { + private Context mContext; + private List mList; + private int type;//0:指南 + private HttpHandler hand; + private int[] progress; + private ECAlertDialog buildAlert; + private String guide_type_uuid; + Boolean ENGLISH=false; + // private ArrayList currentprogress = new ArrayList(); +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/治疗指南/"; + private String filePath = getContext().getExternalFilesDir("").getAbsolutePath()+ "/gdxzExpert/download/治疗指南/"; +// private String filePath1 = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/期刊杂志/"; + + public BookshelfListAdapter(Context context, List list, + int type,Boolean ENGLISH) { + this.mContext = context; + this.mList = list; + this.type = type; + this.progress = new int[mList.size()]; + this.ENGLISH=ENGLISH; + } + public BookshelfListAdapter(Context context, List list, + int type,String uuid) { + this.mContext = context; + this.mList = list; + this.type = type; + this.progress = new int[mList.size()]; + this.guide_type_uuid = uuid; + } + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + @Override + public long getItemId(int position) { + return position; + } + + @SuppressWarnings("deprecation") + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final Holder holder; + if (convertView == null) { + holder = new Holder(); + if(CommonUtil.BigModule()) + { + if(ENGLISH) + { + convertView = View.inflate(mContext, + R.layout.activity_bookshelf_list_item_big_en, null); + } + else + { + convertView = View.inflate(mContext, + R.layout.activity_bookshelf_list_item_big, null); + } + + + holder.iv_down = convertView + .findViewById(R.id.item_tv_down1); + } + else + { + convertView = View.inflate(mContext, + R.layout.activity_bookshelf_list_item, null); + + holder.iv_down = convertView + .findViewById(R.id.item_iv_down); + } + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.date = (TextView) convertView.findViewById(R.id.item_date); + + holder.tv_down =convertView + .findViewById(R.id.item_tv_down); + holder.iv_right = (ImageView) convertView + .findViewById(R.id.item_iv_right); + holder.bt_content = (Button) convertView + .findViewById(R.id.bt_content); + holder.bt_down_load = (Button) convertView + .findViewById(R.id.bt_down_load); + if (type == 0) { + holder.iv_right.setVisibility(View.GONE); + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.VISIBLE); + } else { + holder.iv_right.setVisibility(View.VISIBLE); + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.GONE); + } + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + final LibraryData data = mList.get(position); + holder.name.setText(data.title); + if (type == 0) { + if (!TextUtils.isEmpty(data.releaseTime)) { + if (data.releaseTime.length() > 10) { + holder.date.setText(data.releaseTime.substring(0, 10)); + } else { + holder.date.setText(data.releaseTime); + } + }else if (!TextUtils.isEmpty(data.updateTime)) { + if (data.updateTime.length() > 10) { + holder.date.setText(data.updateTime.substring(0, 10)); + } else { + holder.date.setText(data.updateTime); + } + } + int downloadState = getDownloadS(data.uuid); + LogUtil.i("downloadState=" + downloadState); + if (downloadState == 1||downloadState == 5) {// 0未下载,1下载中,2已下载 + holder.tv_down.setVisibility(View.VISIBLE); + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("下载中"); + } else if (downloadState == 2||downloadState == 4) { + holder.tv_down.setVisibility(View.VISIBLE); + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("查看"); + } else { + + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.VISIBLE); + holder.tv_down.setText("未下载"); + + + + } + } else { + holder.name.setText(data.title); + holder.date .setText(data.contentTxt); + int downloadState = getDownloadState(data.uuid); + LogUtil.i("downloadState=" + downloadState); + if (downloadState == 1||downloadState == 5) {// 0未下载,1下载中,2已下载 + // holder.bt_down_load.setText("下载中"); + holder.bt_down_load.setVisibility(View.VISIBLE); + holder.bt_down_load.setBackgroundDrawable(mContext + .getResources().getDrawable(R.drawable.downloading)); + } else if (downloadState == 2||downloadState == 4) { + // holder.bt_down_load.setText("查看全文"); + holder.bt_down_load.setVisibility(View.VISIBLE); + holder.bt_down_load.setBackgroundDrawable(mContext + .getResources().getDrawable(R.drawable.lookmess)); + } else { + // holder.bt_down_load.setText("下载全文"); + holder.bt_down_load.setVisibility(View.VISIBLE); + holder.bt_down_load.setBackgroundDrawable(mContext + .getResources().getDrawable(R.drawable.download)); + } + if (!TextUtils.isEmpty(data.contentTxt)) { + holder.bt_content.setVisibility(View.VISIBLE); + } else { + holder.bt_content.setVisibility(View.GONE); + } + if (data.filepath != null || !TextUtils.isEmpty(data.filepath)) { + holder.bt_down_load.setVisibility(View.VISIBLE); + } else { + holder.bt_down_load.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(data.secondTitle)) { + holder.date.setText(data.secondTitle); + } else { + holder.date.setText(""); + } + } + + /** + * **************下载************ 指南期刊都可以下载 + */ + holder.iv_down.setTag(position); + holder.tv_down.setTag(position); + holder.iv_down.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TextUtils.isEmpty(data.path)) { + ToastUtil.showToast("不存在此指南,无法下载。"); + return; + } + if (CommonUtil.isNetworkAvailable(mContext) == 1) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadPdf(Url.urlHtml + data.getPath(), data.getTitle(), + position, holder); + } else { + EasyWindow.with((Activity) mContext).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission((Activity)mContext, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + downloadPdf(Url.urlHtml + data.getPath(), data.getTitle(), + position, holder); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + downloadPdf(Url.urlHtml + data.getPath(), data.getTitle(), + position, holder); + } + + } else { + network(); + } + // //下载 + // downloadPdf(Url.urlHtml+data.path, data.title, position, + // holder); + } + + private void network() { + // TODO Auto-generated method stub + String message = "您当前正使用手机网络,是否继续下载?"; + buildAlert = ECAlertDialog.buildAlert(mContext, message, "否", + "是", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + try { + // TODO Auto-generated method stub + // 下载 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadPdf(Url.urlHtml + data.getPath(), data.getTitle(), + position, holder); + } else { + EasyWindow.with((Activity) mContext).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission((Activity)mContext, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + downloadPdf(Url.urlHtml + data.getPath(), data.getTitle(), + position, holder); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + downloadPdf(Url.urlHtml + data.getPath(), data.getTitle(), + position, holder); + } + + } catch (Exception e) { + // TODO: handle exception + } + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mContext.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + }); + holder.bt_content.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Summay(position); + } + + }); + holder.bt_down_load.setTag(position); + holder.bt_down_load.setOnClickListener(new OnClickListener() { + + private String SmmaryUuid; + private BookshelfListAdapter mAdapter; + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TextUtils.isEmpty(data.filepath)) { + ToastUtil.showToast("此期刊杂志暂时无法下载。"); + return; + } + if (CommonUtil.isNetworkAvailable(mContext) == 1) { + // 下载 + LibraryData list = mList.get(position); + SmmaryUuid = list.uuid; + int downloadState = ENBookDownloadSqlManager + .getDownloadState(SmmaryUuid); + if (downloadState == 2||downloadState == 4) { + if(mContext instanceof BookshelfListActivity) + { + if(((BookshelfListActivity)mContext).rela.getVisibility()==View.GONE) + { + ((BookshelfListActivity)mContext).needreportDetail("诊疗指南",mList.get(position).getTags(),mList.get(position).getTitle()); + } + else + { + ((BookshelfListActivity)mContext).needreportDetail("期刊杂志",mList.get(position).getTags(),mList.get(position).getTitle()); + } + + } + // 如果已下载,取出该指南的本地路径 + String downloadFilePath = ENBookDownloadSqlManager + .getDownloadFilePath(SmmaryUuid); + LogUtil.i(downloadFilePath); + + if (!TextUtils.isEmpty(downloadFilePath)) { + // 路径不为空,打开该指南 + if(downloadFilePath.contains(Constant.OldfilePath)) + { + showDialog(Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); +// ENBookDownloadSqlManager.delDownladInfo(SmmaryUuid); +// mAdapter.notifyDataSetChanged(); +// ToastUtil.showToast("文件不存在,请重新下载"); + return; + } + openFile(downloadFilePath); + + } else { + // 路径为空,则删除不存在文件的记录 + ENBookDownloadSqlManager.delDownladInfo(SmmaryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadPdfen( + Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); + } else { + EasyWindow.with((Activity) mContext).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission((Activity)mContext, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + downloadPdfen( + Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + downloadPdfen( + Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); + } + + } + } else { + networks(); + } + } + + private void networks() { + // TODO Auto-generated method stub + String message = "您当前正使用手机网络,是否继续下载?"; + buildAlert = ECAlertDialog.buildAlert(mContext, message, "否", + "是", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + try { + // TODO Auto-generated method stub + // 下载 + LibraryData list = mList.get(position); + SmmaryUuid = list.uuid; + int downloadState = ENBookDownloadSqlManager + .getDownloadState(SmmaryUuid); + if (downloadState == 2) { + if(mContext instanceof BookshelfListActivity2) + { + ((BookshelfListActivity2)mContext).needreportDetail("诊疗指南",mList.get(position).getTags(),mList.get(position).getTitle()); + } + if(mContext instanceof BookshelfListActivity) + { + if(((BookshelfListActivity)mContext).rela.getVisibility()==View.GONE) + { + ((BookshelfListActivity)mContext).needreportDetail("诊疗指南",mList.get(position).getTags(),mList.get(position).getTitle()); + } + else + { + ((BookshelfListActivity)mContext).needreportDetail("期刊杂志",mList.get(position).getTags(),mList.get(position).getTitle()); + } + + } + // 如果已下载,取出该指南的本地路径 + String downloadFilePath = ENBookDownloadSqlManager + .getDownloadFilePath(SmmaryUuid); + if (!TextUtils + .isEmpty(downloadFilePath)) { + if(downloadFilePath.contains(Constant.OldfilePath)) + { + showDialog(Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); +// ENBookDownloadSqlManager.delDownladInfo(SmmaryUuid); +// mAdapter.notifyDataSetChanged(); +// ToastUtil.showToast("文件不存在,请重新下载"); + return; + } + // 路径不为空,打开该指南 + openFile(downloadFilePath); + + } else { + // 路径为空,则删除不存在文件的记录 + ENBookDownloadSqlManager + .delDownladInfo(SmmaryUuid); + mAdapter.notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(mContext, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadPdfen( + Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); + } else { + EasyWindow.with((Activity) mContext).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission((Activity)mContext, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + downloadPdfen( + Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + downloadPdfen( + Url.urlHtml + data.filepath, + data.getTitle(), position, + holder); + } + + + } + } catch (Exception e) { + // TODO: handle exception + } + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mContext.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + }); + return convertView; + } + + private void Summay(int position) { + // TODO Auto-generated method stub + LibraryData list = mList.get(position); + String path = list.path; + String isCollect = list.isCollect; + Intent intent = new Intent(mContext, EnglishDetailActivity.class); + intent.putExtra("url", Url.urlHtml + path); + intent.putExtra("title", "杂志详情"); + intent.putExtra("libraryUuid", list.uuid); + intent.putExtra("bookType", 1); + intent.putExtra("isCollect", isCollect); + mContext.startActivity(intent); + } + + private int getDownloadState(String uuid) { + // TODO Auto-generated method stub + int downloadState = ENBookDownloadSqlManager.getDownloadState(uuid); + return downloadState; + } + private int getDownloadS(String uuid) { + // TODO Auto-generated method stub + int downloadState = BookDownloadSqlManager.getDownloadState(uuid); + return downloadState; + } + /** + * 下载文件 downloadPdf + * + * @param position + * @param holder + * + * @param + * + * @param + */ + protected void downloadPdf(String url, final String name, + final int position, final Holder holder) { + // TODO Auto-generated method stub + if(mContext instanceof BookshelfListActivity2) + { + ((BookshelfListActivity2)mContext).reportDown(name,mList.get(position).getTags(),1+""); + } + if(mContext instanceof BookshelfListActivity) + { + ((BookshelfListActivity)mContext).reportDown(name,mList.get(position).getTags(),1+""); + } + + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + LogUtil.i("下载url = "+url); + LogUtil.i("下载name = "+name); + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(mList + .get(position).uuid); + downloadModel.setTitle(mList.get(position).title);// 设置标题 + if (!TextUtils.isEmpty(mList.get(position).releaseTime)) { + downloadModel.setTime(mList.get(position).releaseTime);// 设置时间 + } else if (!TextUtils.isEmpty(mList.get(position).updateTime)) { + downloadModel.setTime(mList.get(position).updateTime); + } else { + downloadModel.setTime(DateUtil + .getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + downloadModel.setPath(mList.get(position).path);// 设置url路劲 + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .insertDownload(downloadModel); + + // 改变页面状态为下载中 + if ((int) holder.iv_down.getTag() == position) { + // 异步显示 + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("下载中"); + holder.tv_down.setVisibility(View.VISIBLE); + } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + // progress[position] = (int) (current * 100 / + // total); + // currentprogress.add(position, + // progress[position]+""); + // LogUtil.i(name+"下载进度:"+progress[position]); + + /* + * if ((int) (current * 100 / total) % 10 == 0) { + * LogUtil.i("current="+(int) (current * 100 / + * total)); DownloadModel downloadModel = new + * DownloadModel(mList.get(position).uuid); + * downloadModel.setState(1); + * BookDownloadSqlManager. + * updateDownloadState(downloadModel); } + */ + + /* + * if ((int) holder.iv_down.getTag() == position) { + * //异步显示 holder.iv_down.setVisibility(View.GONE); + * // + * holder.tv_down.setText(progress[position]+"%"); + * holder.tv_down.setText("下载中"); + * holder.tv_down.setVisibility(View.VISIBLE); } + */ + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + + if ((int) holder.iv_down.getTag() == position) { + // 异步显示 + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("查看"); + holder.tv_down.setVisibility(View.VISIBLE); + } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + if (MyDownloadActivity.getInstance() != null) { + MyDownloadActivity.getInstance() + .notifyAdapter(); + } + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + /** + * 添加下载次数 + * */ + addGuideDownload(mList.get(position).uuid); + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + LogUtil.e("下载失败","error = "+error.getMessage()+"code ="+error.getExceptionCode()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).uuid); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + if ((int) holder.iv_down.getTag() == position) { + // 异步显示 + holder.iv_down.setVisibility(View.VISIBLE); + holder.tv_down.setVisibility(View.GONE); + } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance().notifyAdapter(); + } + // maybe the file has downloaded completely + // if + // (msg.contains("maybe the file has downloaded completely")) + // { + // + // } + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + + private void addGuideDownload(String guide_uuid) { + Map map = new HashMap<>(); + map.put("guide_type_uuid",guide_type_uuid); + map.put("guide_uuid",guide_uuid); + sendJsonPostParamNoResultMD5(Url.addGuideDownload,map); + } + /** + * @param + * + * + */ + protected void downloadPdfennew(String url, final String name, + final int position, final Holder holder) { + // TODO Auto-generated method stub + // 下载pdf + if(mContext instanceof BookshelfListActivity) + { + ((BookshelfListActivity)mContext).reportDown(name,mList.get(position).getTags(),1+""); + } + if(mContext instanceof BookshelfListActivity2) + { + ((BookshelfListActivity2)mContext).reportDown(name,mList.get(position).getTags(),1+""); + } + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(mList + .get(position).uuid); +// downloadModel.setPath(mList.get(position).filepath);// 设置url路劲 + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setState(5);// 0未下载,1下载中,2已下载 +// ENBookDownloadSqlManager +// .insertDownload(downloadModel); + ENBookDownloadSqlManager + .updateDownloadState(downloadModel); + // 改变页面状态为下载中 + if ((int) holder.iv_down.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("下载中"); + holder.bt_down_load + .setBackgroundDrawable(mContext + .getResources() + .getDrawable( + R.drawable.downloading)); + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setVisibility(View.GONE); + } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .updateDownloadState(downloadModel); + ENBookDownloadSqlManager + .updateDownloadFilePaht(downloadModel); + if ((int) holder.bt_down_load.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("查看全文"); + holder.bt_down_load.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.lookmess)); + holder.tv_down.setVisibility(View.GONE); + } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + if (MyDownloadActivity.getInstance() != null) { + MyDownloadActivity.getInstance() + .notifyAdapter(); + } + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { +// Log.e("下载失败","error"+error.getMessage()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).uuid); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .updateDownloadState(downloadModel); + if ((int) holder.bt_down_load.getTag() == position) { + // 异步显示 + holder.bt_down_load + .setBackgroundDrawable(mContext + .getResources() + .getDrawable( + R.drawable.download)); + holder.tv_down.setVisibility(View.GONE); + } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + /** + * @param + * + * + */ + protected void downloadPdfen(String url, final String name, + final int position, final Holder holder) { + if(mContext instanceof BookshelfListActivity) + { + ((BookshelfListActivity)mContext).reportDown(name,mList.get(position).getTags(),1+""); + } + if(mContext instanceof BookshelfListActivity2) + { + ((BookshelfListActivity2)mContext).reportDown(name,mList.get(position).getTags(),1+""); + } + // TODO Auto-generated method stub + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(mList + .get(position).uuid); + downloadModel.setTitle(mList.get(position).title);// 设置标题 + downloadModel.setTime(mList.get(position).secondTitle);// 设置标题 +// if (!TextUtils.isEmpty(mList.get(position).releaseTime)) { +// downloadModel.setTime(mList.get(position).releaseTime);// 设置时间 +// } else if (!TextUtils.isEmpty(mList.get(position).updateTime)) { +// downloadModel.setTime(mList.get(position).updateTime); +// } else { +// downloadModel.setTime(DateUtil +// .getCurDateStr("yyyy-MM-dd HH:mm:ss")); +// } + downloadModel.setPath(mList.get(position).filepath);// 设置url路劲 + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .insertDownload(downloadModel); + + // 改变页面状态为下载中 + if ((int) holder.iv_down.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("下载中"); + holder.bt_down_load + .setBackgroundDrawable(mContext + .getResources() + .getDrawable( + R.drawable.downloading)); + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setVisibility(View.GONE); + } + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).uuid); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .insertDownload(downloadModel); + if ((int) holder.bt_down_load.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("查看全文"); + holder.bt_down_load.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.lookmess)); + holder.tv_down.setVisibility(View.GONE); + } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + if (MyDownloadActivity.getInstance() != null) { + MyDownloadActivity.getInstance() + .notifyAdapter(); + } + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + Log.e("下载失败","error"+error.getMessage()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).uuid); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .updateDownloadState(downloadModel); + if ((int) holder.bt_down_load.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("下载全文"); + holder.bt_down_load + .setBackgroundDrawable(mContext + .getResources() + .getDrawable( + R.drawable.download)); + holder.tv_down.setVisibility(View.GONE); + } + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + + public void openFile(final String path) { + + + File file = new File(path); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(mContext,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + mContext.startActivity(intent1); + }else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + mContext.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } + + } + } + + public void showDialog(String url, final String name, + final int position, final Holder holder) + { + LayoutInflater inflater = LayoutInflater.from(mContext); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(mContext).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(mContext.getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + downloadPdfennew(url,name,position,holder); + dialog4.dismiss(); + + } + }); + } + public static class Holder { + public Button bt_down_load; + public Button bt_content; + public ImageView iv_right; + public TextView tv_down; + public View iv_down; + public TextView date; + public TextView name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CaseRecordAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CaseRecordAdapter.java new file mode 100644 index 0000000..ea9d7a2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CaseRecordAdapter.java @@ -0,0 +1,121 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AddCaseRecordActivity; +import cn.shangyu.gdxzExpert.activity.CaseRecordActivity; +import cn.shangyu.gdxzExpert.bean.CaseRecordBean.DatasCase; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyGridView; + +import android.app.Activity; +import android.content.Intent; +import android.media.Image; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +public class CaseRecordAdapter extends BaseAdapter { + ArrayList mDatas; + CaseRecordActivity macActivity; + + public CaseRecordAdapter(ArrayList mDatas, + CaseRecordActivity macActivity) { + this.mDatas = mDatas; + this.macActivity = macActivity; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mDatas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mDatas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + // ImageLoader.getInstance().displayImage(Url.urlHtml + news.headImg, + // mHolder.ivImage, + // ImageOptions.getImageOptions(R.drawable.default_news_iv)); + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_lv_caserecord); + vh = new ViewHolder(); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_item_case_time); + vh.mTv_context = (TextView) convertView + .findViewById(R.id.tv_item_case_context); + vh.mGv_photo = (MyGridView) convertView + .findViewById(R.id.item_gv_photo); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_time.setText(mDatas.get(position).getCreate_date()); + vh.mTv_context.setText(mDatas.get(position).getDes()); + if (vh.mGv_photo != null) { + PhotoAdapter mAdapter = new PhotoAdapter(mDatas.get(position) + .getPhoto()); + vh.mGv_photo.setAdapter(mAdapter); + } + + vh.mGv_photo.setTag(position); + vh.mGv_photo.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int Num = (int) parent.getTag(); + Intent intent = new Intent(macActivity, + AddCaseRecordActivity.class); + intent.setType("modify"); + intent.putExtra("caseRecord", (Serializable) mDatas.get(Num)); + macActivity.startActivityForResult(intent, 202); + } + }); + return convertView; + } + + class ViewHolder { + TextView mTv_time, mTv_context; + MyGridView mGv_photo; + PhotoAdapter mAdapter; + + // public ViewHolder(View view) { + // mTv_time = (TextView) view.findViewById(R.id.tv_item_case_time); + // mTv_context = (TextView) view + // .findViewById(R.id.tv_item_case_context); + // mGv_photo = (MyGridView) view.findViewById(R.id.item_gv_photo); + // mAdapter = new PhotoAdapter(); + // mGv_photo.setAdapter(mAdapter); + // view.setTag(this); + // } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/Casediscussion01Adapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/Casediscussion01Adapter.java new file mode 100644 index 0000000..cbd6550 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/Casediscussion01Adapter.java @@ -0,0 +1,360 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.Bitmap; +import android.media.Image; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.viewpager.widget.ViewPager; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AddcasediscussionActivity; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.bean.MyCasediscussionBean.DataBean.MYCasediscussion; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * CasediscussionAdapter 病例讨论适配器 + */ +public class Casediscussion01Adapter extends BaseAdapter { + private Activity context; + private List casediscussion; + private ArrayList imageSource; + private ArrayList imagelist; + private MyPagerAdapter myPagerAdapter; + private MYCasediscussion caseDic; + List mImagePath; + + public Casediscussion01Adapter(Activity context, + List casediscussion) { + this.context = context; + this.casediscussion = casediscussion; + this.caseDic = caseDic; + } + + @Override + public int getCount() { + return casediscussion.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder; + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_case_discussion_01, null); + mHolder = new NewsViewHolder(); + mHolder.im_pic = convertView + .findViewById(R.id.im_pic); + mHolder.case_name = (TextView) convertView + .findViewById(R.id.tv_case_name); + mHolder.case_hos = (TextView) convertView + .findViewById(R.id.tv_case_hos); + mHolder.vp = (ViewPager) convertView.findViewById(R.id.vp); + mHolder.dots = (LinearLayout) convertView + .findViewById(R.id.ll_dots_item01); + mHolder.lytag = (LinearLayout) convertView + .findViewById(R.id.ly_tag); + mHolder.top_fl = (RelativeLayout) convertView + .findViewById(R.id.top_fl); + mHolder.case_rl = (RelativeLayout) convertView + .findViewById(R.id.rl_all_delmess); + + // label_one_ac_cu + + mHolder.case_rl_tag = (RadioGroup) convertView + .findViewById(R.id.label_one_ac_cu); + mHolder.case_date = (TextView) convertView + .findViewById(R.id.tv_case_date); + mHolder.tv_bt = (TextView) convertView.findViewById(R.id.tv_bt_bj); + mHolder.tag_1 = (TextView) convertView.findViewById(R.id.tag_1); + mHolder.tag_2 = (TextView) convertView.findViewById(R.id.tag_2); + mHolder.tag_3 = (TextView) convertView.findViewById(R.id.tag_3); + mHolder.case_mess = (TextView) convertView + .findViewById(R.id.tv_case_mess); + mHolder.comment_num = (TextView) convertView + .findViewById(R.id.tv_case_num); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + caseDic = casediscussion.get(position); + mHolder.comment_num.setText("评论" + "(" + caseDic.getCommentNum() + ")"); + ImageLoader.getInstance().displayImage( + Url.urlHtml + caseDic.getExpert_photo(), mHolder.im_pic); + if (!TextUtils.isEmpty(caseDic.getExpert_name())) { + mHolder.case_name.setText(caseDic.getExpert_name()); + } else { + mHolder.case_name.setText(""); + } + if (!TextUtils.isEmpty(caseDic.getExpert_hospital_name())) { + mHolder.case_hos.setText(caseDic.getExpert_hospital_name()); + } else { + mHolder.case_hos.setText(""); + } + if (!TextUtils.isEmpty(caseDic.getCreate_date())) { + String date = caseDic.getCreate_date().substring(5, 16); + mHolder.case_date.setText(date); + } else { + mHolder.case_date.setText(""); + } + if (!TextUtils.isEmpty(caseDic.getDes())) { + mHolder.case_mess.setText(caseDic.getDes()); + } else { + mHolder.case_mess.setText(""); + } + if (TextUtils.isEmpty(caseDic.getTag1()) && TextUtils.isEmpty(caseDic.getTag2()) + && TextUtils.isEmpty(caseDic.getTag3())) { + mHolder.lytag.setVisibility(View.GONE); + } else { + mHolder.lytag.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(caseDic.getTag1())) { + mHolder.tag_1.setVisibility(View.VISIBLE); + mHolder.tag_1.setText(caseDic.getTag1()); + } else { + mHolder.tag_1.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(caseDic.getTag2())) { + mHolder.tag_2.setVisibility(View.VISIBLE); + mHolder.tag_2.setText(caseDic.getTag2()); + } else { + mHolder.tag_2.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(caseDic.getTag3())) { + mHolder.tag_3.setVisibility(View.VISIBLE); + mHolder.tag_3.setText(caseDic.getTag3()); + } else { + mHolder.tag_3.setVisibility(View.GONE); + } + } + if (caseDic.getPhoto().size() == 0) { + mHolder.top_fl.setVisibility(View.GONE); + } else { + mHolder.top_fl.setVisibility(View.VISIBLE); + } + if("0".equals(caseDic.getExamine_status())) + { + mHolder.tv_bt.setText("待审核"); + } + else + { + mHolder.tv_bt.setText("编辑"); + mHolder.tv_bt.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, + AddcasediscussionActivity.class); + intent.setType("modify"); + intent.putExtra("caseRecord", + (Serializable) casediscussion.get(position)); + LogUtil.i("casediscussion=================" + + casediscussion.get(position)); + context.startActivityForResult(intent, 202); + } + }); + } + + + mHolder.case_rl.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, + CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussion.get(position).getUuid()); + context.startActivity(intent); + } + }); + + mHolder.case_mess.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method + Intent intent = new Intent(context, + CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussion.get(position).getUuid()); + context.startActivity(intent); + } + }); + + /* + * mHolder.case_rl_tag.setOnClickListener(new OnClickListener() { + * + * @Override public void onClick(View v) { // TODO Auto-generated method + * Intent intent = new Intent(context,CaseCussionDetailActivity.class); + * intent.putExtra("uuid", casediscussion.get(position).uuid); + * context.startActivity(intent); } }); + */ + + mHolder.lytag.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + Intent intent = new Intent(context, + CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussion.get(position).getUuid()); + context.startActivity(intent); + } + }); + init(mHolder); + return convertView; + } + + @Override + public Object getItem(int position) { + return casediscussion.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + private class NewsViewHolder { + public RadioGroup case_rl_tag; + public RelativeLayout case_rl; + public TextView tv_bt; + public LinearLayout lytag; + public ImageView im_pic; + public TextView case_name; + public TextView case_hos; + public TextView case_date; + public RelativeLayout top_fl; + public ViewPager vp; + public LinearLayout dots; + public TextView tag_1; + public TextView tag_2; + public TextView tag_3; + public TextView case_mess; + public TextView comment_num; + } + + /** + * 功能说明: 更新首页轮播图 + * + * @param mHolder + */ + private void init(NewsViewHolder mHolder) { + // 将要显示的图片放到list集合中 + imageSource = new ArrayList(); + imageSource.clear(); + mHolder.dots.removeAllViews(); + initImageResource(mHolder); + // 为viewPager设置适配器 + myPagerAdapter = new MyPagerAdapter(context, imageSource); + mHolder.vp.setAdapter(myPagerAdapter); + myPagerAdapter.getPath(mImagePath); + // 为viewPager添加监听器,该监听器用于当图片变换时,点也跟着变化 + MyPageChangeListener listener = new MyPageChangeListener(mHolder); + mHolder.vp.setOnPageChangeListener(listener); + // mHolder.vp.setOnTouchListener(new OnTouchListener() { + // + // @Override + // public boolean onTouch(View v, MotionEvent event) { + // ViewPager vPager = (ViewPager) v; + // return false; + // } + // }); + } + + // 监听ViewPager的变化 + private class MyPageChangeListener implements ViewPager.OnPageChangeListener { + public NewsViewHolder mHolder; + private int currPage = 0;// 当前显示的页 + private int oldPage = 0;// 上一次显示的页 + + public MyPageChangeListener(NewsViewHolder mHolder) { + this.mHolder = mHolder; + } + + @Override + public void onPageScrollStateChanged(int arg0) { + + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + public void onPageSelected(int position) { + // 当显示的图片发生变化之后 + // 设置标题 + mHolder.dots.getChildAt(position).setEnabled(true); + mHolder.dots.getChildAt(oldPage).setEnabled(false); + oldPage = position; + currPage = position; + } + } + + public void initImageResource(NewsViewHolder mHolder) { + mImagePath = new ArrayList(); + for (int i = 0; i < caseDic.getPhoto().size(); i++) { + /** + * 加载图片并放在集合中 + */ + mImagePath.add(caseDic.getPhoto().get(i)); + ImageView imageview = new ImageView(context); + imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); + DisplayImageOptions options = new DisplayImageOptions.Builder() + .showImageOnLoading(R.drawable.home_scroll_default) + .showImageOnFail(R.drawable.home_scroll_default) + .showImageForEmptyUri(R.drawable.home_scroll_default) + .cacheInMemory(true).cacheOnDisk(true) + .imageScaleType(ImageScaleType.EXACTLY)// 设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY) + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// + .displayer(new FadeInBitmapDisplayer(100))// 淡入 + .build(); + ImageLoader.getInstance().displayImage( + Url.urlHtml + caseDic.getPhoto().get(i), imageview, options); + imageSource.add(imageview); + + if (imageSource.size() != 0 && imageSource.size() == 1) { + mHolder.dots.setVisibility(View.GONE); + } else { + mHolder.dots.setVisibility(View.VISIBLE); + } + /** + * 初始化小圆点并放在集合中 + */ + ImageView viewPoint = new ImageView(context); + viewPoint.setBackgroundResource(R.drawable.select_yes_no); + if (i == 0) { + viewPoint.setEnabled(true); + } else { + viewPoint.setEnabled(false); + } + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + -2, -2); + params.leftMargin = 20; + mHolder.dots.addView(viewPoint, params); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionAdapter.java new file mode 100644 index 0000000..5b79101 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionAdapter.java @@ -0,0 +1,318 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.media.Image; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.viewpager.widget.ViewPager; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.bean.CasediscussionBean.DataBean.Casediscussion; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * CasediscussionAdapter 病例讨论适配器 + */ +public class CasediscussionAdapter extends BaseAdapter { + private Context context; + private List casediscussion; + private ArrayList imageSource; + private ArrayList imagelist; + private MyPagerAdapter myPagerAdapter; + private Casediscussion caseDic; + List mImagePath; + + public CasediscussionAdapter(Context context, + List casediscussion) { + this.context = context; + this.casediscussion = casediscussion; + } + + @Override + public int getCount() { + return casediscussion.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder; + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_case_discussion_big, + null); + mHolder = new NewsViewHolder(); + mHolder.im_pic = convertView + .findViewById(R.id.im_pic); + mHolder.ra_all = (RelativeLayout) convertView + .findViewById(R.id.rl_all_delmess); + mHolder.case_name = (TextView) convertView + .findViewById(R.id.tv_case_name); + mHolder.case_hos = (TextView) convertView + .findViewById(R.id.tv_case_hos); + mHolder.vp = (ViewPager) convertView.findViewById(R.id.vp); + mHolder.dots = (LinearLayout) convertView + .findViewById(R.id.ll_dots_item); + mHolder.lytag = (LinearLayout) convertView + .findViewById(R.id.ly_tag); + mHolder.top_fl = (RelativeLayout) convertView + .findViewById(R.id.top_fl_case); + mHolder.case_date = (TextView) convertView + .findViewById(R.id.tv_case_date); + mHolder.tag_1 = (TextView) convertView.findViewById(R.id.tag_1); + mHolder.tag_2 = (TextView) convertView.findViewById(R.id.tag_2); + mHolder.tag_3 = (TextView) convertView.findViewById(R.id.tag_3); + mHolder.case_mess = (TextView) convertView + .findViewById(R.id.tv_case_mess); + mHolder.comment_num = (TextView) convertView + .findViewById(R.id.tv_case_num); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + // 给控件赋值. + caseDic = casediscussion.get(position); + mHolder.comment_num.setText("评论" + "(" + caseDic.getCommentNum() + ")"); + ImageLoader.getInstance().displayImage( + Url.urlHtml + caseDic.getExpert_photo(), mHolder.im_pic, ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + if (!TextUtils.isEmpty(caseDic.getExpert_name())) { + mHolder.case_name.setText(caseDic.getExpert_name()); + } else { + mHolder.case_name.setText(""); + } + if (!TextUtils.isEmpty(caseDic.getExpert_hospital_name())) { + mHolder.case_hos.setText(caseDic.getExpert_hospital_name()); + } else { + mHolder.case_hos.setText(""); + } + if (!TextUtils.isEmpty(caseDic.getCreate_date())) { + String date = caseDic.getCreate_date().substring(5, 16); + mHolder.case_date.setText(date); + } else { + mHolder.case_date.setText(""); + } + if (!TextUtils.isEmpty(caseDic.getDes())) { + mHolder.case_mess.setText(caseDic.getDes()); + } else { + mHolder.case_mess.setText(""); + } + if (TextUtils.isEmpty(caseDic.getTag1()) + && TextUtils.isEmpty(caseDic.getTag2()) + && TextUtils.isEmpty(caseDic.getTag3())) { + mHolder.lytag.setVisibility(View.GONE); + } else { + mHolder.lytag.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(caseDic.getTag1())) { + mHolder.tag_1.setVisibility(View.VISIBLE); + mHolder.tag_1.setText(caseDic.getTag1()); + } else { + mHolder.tag_1.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(caseDic.getTag2())) { + mHolder.tag_2.setVisibility(View.VISIBLE); + mHolder.tag_2.setText(caseDic.getTag2()); + } else { + mHolder.tag_2.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(caseDic.getTag3())) { + mHolder.tag_3.setVisibility(View.VISIBLE); + mHolder.tag_3.setText(caseDic.getTag3()); + } else { + mHolder.tag_3.setVisibility(View.GONE); + } + } + if (caseDic.getPhoto().size() == 0) { + mHolder.top_fl.setVisibility(View.GONE); + } else { + mHolder.top_fl.setVisibility(View.VISIBLE); + } + mHolder.case_mess.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, + CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussion.get(position).getUuid()); + context.startActivity(intent); + } + }); + + mHolder.ra_all.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, + CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussion.get(position).getUuid()); + context.startActivity(intent); + } + }); + mHolder.lytag.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context, + CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussion.get(position).getUuid()); + context.startActivity(intent); + } + }); + init(mHolder); + return convertView; + } + + @Override + public Object getItem(int position) { + return casediscussion.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + private class NewsViewHolder { + public RelativeLayout ra_all; + public LinearLayout lytag; + public ImageView im_pic; + public TextView case_name; + public TextView case_hos; + public TextView case_date; + public RelativeLayout top_fl; + public ViewPager vp; + public LinearLayout dots; + public TextView tag_1; + public TextView tag_2; + public TextView tag_3; + public TextView case_mess; + public TextView comment_num; + } + + /** + * 功能说明: 更新首页轮播图 + * + * @param mHolder + */ + private void init(NewsViewHolder mHolder) { + // 将要显示的图片放到list集合中 + imageSource = new ArrayList(); + imageSource.clear(); + mHolder.dots.removeAllViews(); + initImageResource(mHolder); + // 为viewPager设置适配器 + myPagerAdapter = new MyPagerAdapter(context, imageSource); + mHolder.vp.setAdapter(myPagerAdapter); + myPagerAdapter.getPath(mImagePath); + // 为viewPager添加监听器,该监听器用于当图片变换时,点也跟着变化 + MyPageChangeListener listener = new MyPageChangeListener(mHolder); + mHolder.vp.setOnPageChangeListener(listener); + // mHolder.vp.setOnTouchListener(new OnTouchListener() { + // + // @Override + // public boolean onTouch(View v, MotionEvent event) { + // ViewPager vPager = (ViewPager) v; + // return false; + // } + // }); + } + + // 监听ViewPager的变化 + private class MyPageChangeListener implements ViewPager.OnPageChangeListener { + public NewsViewHolder mHolder; + private int currPage = 0;// 当前显示的页 + private int oldPage = 0;// 上一次显示的页 + + public MyPageChangeListener(NewsViewHolder mHolder) { + this.mHolder = mHolder; + } + + @Override + public void onPageScrollStateChanged(int arg0) { + + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + public void onPageSelected(int position) { + // 当显示的图片发生变化之后 + // 设置标题 + mHolder.dots.getChildAt(position).setEnabled(true); + mHolder.dots.getChildAt(oldPage).setEnabled(false); + oldPage = position; + currPage = position; + } + } + + public void initImageResource(NewsViewHolder mHolder) { + mImagePath = new ArrayList(); + for (int i = 0; i < caseDic.getPhoto().size(); i++) { + /** + * 加载图片并放在集合中 + */ + mImagePath.add(caseDic.getPhoto().get(i)); + ImageView imageview = new ImageView(context); + imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); + DisplayImageOptions options = new DisplayImageOptions.Builder() + .showImageOnLoading(R.drawable.home_scroll_default) + .showImageOnFail(R.drawable.home_scroll_default) + .showImageForEmptyUri(R.drawable.home_scroll_default) + .cacheInMemory(true).cacheOnDisk(true) + .imageScaleType(ImageScaleType.EXACTLY)// 设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY) + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// + .displayer(new FadeInBitmapDisplayer(100))// 淡入 + .build(); + ImageLoader.getInstance() + .displayImage(Url.urlHtml + caseDic.getPhoto().get(i), + imageview, options); + imageSource.add(imageview); + /** + * 初始化小圆点并放在集合中 + */ + ImageView viewPoint = new ImageView(context); + viewPoint.setBackgroundResource(R.drawable.select_yes_no); + + if (imageSource.size() != 0 && imageSource.size() == 1) { + mHolder.dots.setVisibility(View.GONE); + } else { + mHolder.dots.setVisibility(View.VISIBLE); + } + + if (i == 0) { + viewPoint.setEnabled(true); + } else { + viewPoint.setEnabled(false); + } + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + -2, -2); + params.leftMargin = 20; + mHolder.dots.addView(viewPoint, params); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionCollentAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionCollentAdapter.java new file mode 100644 index 0000000..d87acda --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CasediscussionCollentAdapter.java @@ -0,0 +1,318 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.viewpager.widget.ViewPager; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.bean.CasediscussionCollentBean.CasediscussionCollent; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * CasediscussionAdapter 病例讨论适收藏病例适配器 + */ +public class CasediscussionCollentAdapter extends BaseAdapter { + private Context context; + private List casediscussionCollents ; + private ArrayList imageSource; + private MyPagerAdapter myPagerAdapter; + private CasediscussionCollent caseDic; + List mImagePath; + + public CasediscussionCollentAdapter(Context context, + List casediscussionCollents) { + this.context = context; + this.casediscussionCollents = casediscussionCollents; + } + + @Override + public int getCount() { + return casediscussionCollents.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, R.layout.item_case_discussion, + null); + } + else + { + convertView = View.inflate(context, R.layout.item_case_discussion_big, + null); + } + mHolder = new NewsViewHolder(); + mHolder.tv_case_num = convertView + .findViewById(R.id.tv_case_num); + + mHolder.im_pic = convertView + .findViewById(R.id.im_pic); + mHolder.ra_all = (RelativeLayout) convertView + .findViewById(R.id.rl_all_delmess); + mHolder.case_name = (TextView) convertView + .findViewById(R.id.tv_case_name); + mHolder.case_hos = (TextView) convertView + .findViewById(R.id.tv_case_hos); + mHolder.vp = (ViewPager) convertView.findViewById(R.id.vp); + mHolder.dots = (LinearLayout) convertView + .findViewById(R.id.ll_dots_item); + mHolder.lytag = (LinearLayout) convertView + .findViewById(R.id.ly_tag); + mHolder.top_fl = (RelativeLayout) convertView + .findViewById(R.id.top_fl_case); + mHolder.case_date = (TextView) convertView + .findViewById(R.id.tv_case_date); + mHolder.tag_1 = (TextView) convertView.findViewById(R.id.tag_1); + mHolder.tag_2 = (TextView) convertView.findViewById(R.id.tag_2); + mHolder.tag_3 = (TextView) convertView.findViewById(R.id.tag_3); + mHolder.case_mess = (TextView) convertView + .findViewById(R.id.tv_case_mess); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + mHolder.tv_case_num.setVisibility(View.GONE); + // 给控件赋值. + caseDic = casediscussionCollents.get(position); + ImageLoader.getInstance().displayImage( + Url.urlHtml + caseDic.expert_photo, mHolder.im_pic); + if (!TextUtils.isEmpty(caseDic.expert_name)) { + mHolder.case_name.setText(caseDic.expert_name); + } else { + mHolder.case_name.setText(""); + } + if (!TextUtils.isEmpty(caseDic.expert_hospital_name)) { + mHolder.case_hos.setText(caseDic.expert_hospital_name); + } else { + mHolder.case_hos.setText(""); + } + if (!TextUtils.isEmpty(caseDic.create_date)) { + String date = caseDic.create_date.substring(5, 16); + mHolder.case_date.setText(date); + } else { + mHolder.case_date.setText(""); + } + if (!TextUtils.isEmpty(caseDic.des)) { + mHolder.case_mess.setText(caseDic.des); + } else { + mHolder.case_mess.setText(""); + } + if (TextUtils.isEmpty(caseDic.tag1) && TextUtils.isEmpty(caseDic.tag2) + && TextUtils.isEmpty(caseDic.tag3)) { + mHolder.lytag.setVisibility(View.GONE); + } else { + mHolder.lytag.setVisibility(View.VISIBLE); + if(!TextUtils.isEmpty(caseDic.tag1)){ + mHolder.tag_1.setVisibility(View.VISIBLE); + mHolder.tag_1.setText(caseDic.tag1); + }else{ + mHolder.tag_1.setVisibility(View.GONE); + } + if(!TextUtils.isEmpty(caseDic.tag2)){ + mHolder.tag_2.setVisibility(View.VISIBLE); + mHolder.tag_2.setText(caseDic.tag2); + }else{ + mHolder.tag_2.setVisibility(View.GONE); + } + if(!TextUtils.isEmpty(caseDic.tag3)){ + mHolder.tag_3.setVisibility(View.VISIBLE); + mHolder.tag_3.setText(caseDic.tag3); + }else{ + mHolder.tag_3.setVisibility(View.GONE); + } + } + if (caseDic.photo.size() == 0) { + mHolder.top_fl.setVisibility(View.GONE); + } else { + mHolder.top_fl.setVisibility(View.VISIBLE); + } + mHolder.case_mess.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context,CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussionCollents.get(position).uuid); + context.startActivity(intent); + } + }); + + mHolder.ra_all.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context,CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussionCollents.get(position).uuid); + context.startActivity(intent); + } + }); + mHolder.lytag.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(context,CaseCussionDetailActivity.class); + intent.putExtra("uuid", casediscussionCollents.get(position).uuid); + context.startActivity(intent); + } + }); + init(mHolder); + return convertView; + } + + @Override + public Object getItem(int position) { + return casediscussionCollents.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + private class NewsViewHolder { + public RelativeLayout ra_all; + public LinearLayout lytag; + public ImageView im_pic; + public TextView case_name; + public TextView case_hos; + public TextView case_date; + public RelativeLayout top_fl; + public ViewPager vp; + public LinearLayout dots; + public TextView tag_1; + public TextView tag_2; + public TextView tag_3; + public TextView case_mess,tv_case_num; + } + + /** + * 功能说明: 更新首页轮播图 + * + * @param mHolder + */ + private void init(NewsViewHolder mHolder) { + // 将要显示的图片放到list集合中 + imageSource = new ArrayList(); + imageSource.clear(); + mHolder.dots.removeAllViews(); + initImageResource(mHolder); + // 为viewPager设置适配器 + myPagerAdapter = new MyPagerAdapter(context, imageSource); + mHolder.vp.setAdapter(myPagerAdapter); + myPagerAdapter.getPath(mImagePath); + // 为viewPager添加监听器,该监听器用于当图片变换时,点也跟着变化 + MyPageChangeListener listener = new MyPageChangeListener(mHolder); + mHolder.vp.setOnPageChangeListener(listener); + // mHolder.vp.setOnTouchListener(new OnTouchListener() { + // + // @Override + // public boolean onTouch(View v, MotionEvent event) { + // ViewPager vPager = (ViewPager) v; + // return false; + // } + // }); + } + + // 监听ViewPager的变化 + private class MyPageChangeListener implements ViewPager.OnPageChangeListener { + public NewsViewHolder mHolder; + private int currPage = 0;// 当前显示的页 + private int oldPage = 0;// 上一次显示的页 + + public MyPageChangeListener(NewsViewHolder mHolder) { + this.mHolder = mHolder; + } + + @Override + public void onPageScrollStateChanged(int arg0) { + + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + public void onPageSelected(int position) { + // 当显示的图片发生变化之后 + // 设置标题 + mHolder.dots.getChildAt(position).setEnabled(true); + mHolder.dots.getChildAt(oldPage).setEnabled(false); + oldPage = position; + currPage = position; + } + } + + public void initImageResource(NewsViewHolder mHolder) { + mImagePath = new ArrayList(); + for (int i = 0; i < caseDic.photo.size(); i++) { + /** + * 加载图片并放在集合中 + */ + mImagePath.add(caseDic.photo.get(i)); + ImageView imageview = new ImageView(context); + imageview.setScaleType(ImageView.ScaleType.CENTER_CROP); + DisplayImageOptions options = new DisplayImageOptions.Builder() + .showImageOnLoading(R.drawable.home_scroll_default) + .showImageOnFail(R.drawable.home_scroll_default) + .showImageForEmptyUri(R.drawable.home_scroll_default) + .cacheInMemory(true).cacheOnDisk(true) + .imageScaleType(ImageScaleType.EXACTLY)// 设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY) + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// + .displayer(new FadeInBitmapDisplayer(100))// 淡入 + .build(); + ImageLoader.getInstance().displayImage( + Url.urlHtml + caseDic.photo.get(i), imageview, options); + imageSource.add(imageview); + /** + * 初始化小圆点并放在集合中 + */ + ImageView viewPoint = new ImageView(context); + viewPoint.setBackgroundResource(R.drawable.select_yes_no); + + if(imageSource.size() != 0 && imageSource.size() == 1){ + mHolder.dots.setVisibility(View.GONE); + }else{ + mHolder.dots.setVisibility(View.VISIBLE); + } + + if (i == 0) { + viewPoint.setEnabled(true); + } else { + viewPoint.setEnabled(false); + } + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + -2, -2); + params.leftMargin = 20; + mHolder.dots.addView(viewPoint, params); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellAdapter.java new file mode 100644 index 0000000..b694b08 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellAdapter.java @@ -0,0 +1,116 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; + +public class CellAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CellAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.gongge_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.mImageView = (ImageView) view.findViewById(R.id.iv_g); + viewHolder.mTextView = (TextView) view.findViewById(R.id.tv_g); + viewHolder.mLayout = (RelativeLayout) view.findViewById(R.id.rl_g); + viewHolder.iv_red=view.findViewById(R.id.iv_red); + viewHolder.mLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); + if(position==getItemCount()-1) + { + holder.mTextView.setText("更多"); + holder.iv_red.setVisibility(View.GONE); + ImageLoader.getInstance().displayImage( + "", + holder.mImageView, + ImageOptions.getImageOptions(R.drawable.home_more)); + } + else + { + if((datas.get(position).getRed()==null||!datas.get(position).getRed()) + &&(datas.get(position).getRed1()==null||!datas.get(position).getRed1())) + { + + holder.iv_red.setVisibility(View.GONE); + } + else + { + + holder.iv_red.setVisibility(View.VISIBLE); + + } + holder.mTextView.setText(datas.get(position).getName()); + ImageLoader.getInstance().displayImage( + datas.get(position).getImg(), + holder.mImageView, + ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + } + + + + } + + @Override + public int getItemCount() { + return datas.size()+1; + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + private TextView mTextView; + private ImageView mImageView,iv_red; + private RelativeLayout mLayout; + public ViewHolder(@NonNull View itemView) { + super(itemView); + + } + + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellHonorAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellHonorAdapter.java new file mode 100644 index 0000000..37d723e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CellHonorAdapter.java @@ -0,0 +1,79 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.GethonorDetailBean; + +public class CellHonorAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CellHonorAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_honor, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.mTextView = view.findViewById(R.id.tv_nick_name); + +// viewHolder.mLayout.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); +// } +// } +// }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + + holder.mTextView.setText(datas.get(position).getNick_name()); + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + private TextView mTextView; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + } + + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollcetNewsAdataper.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollcetNewsAdataper.java new file mode 100644 index 0000000..4df2519 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollcetNewsAdataper.java @@ -0,0 +1,88 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CollectNewsBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by wangchengxin on 2019/2/25. + */ + +public class CollcetNewsAdataper extends BaseAdapter{ + List DataList; + + public CollcetNewsAdataper(List dataList) { + DataList = dataList; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (DataList != null) { + return DataList.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return DataList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + CollcetNewsAdataper.ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_collect_video_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_collect_video); + } + vh = new CollcetNewsAdataper.ViewHolder(); + vh.mIv_imag = convertView + .findViewById(R.id.iv_video_image); + vh.mTv_content = (TextView) convertView + .findViewById(R.id.tv_video_title); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.tv_video_name); + convertView.setTag(vh); + + } else { + vh = (CollcetNewsAdataper.ViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + DataList.get(position).getImgpath(), vh.mIv_imag, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + vh.mTv_content.setText(DataList.get(position).getTitle()); + vh.mTv_name.setVisibility(View.GONE); + return convertView; + } + + class ViewHolder { + public ImageView mIv_imag; + public TextView mTv_content, mTv_name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollectVideoAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollectVideoAdapter.java new file mode 100644 index 0000000..fc99ce3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CollectVideoAdapter.java @@ -0,0 +1,86 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CollectVideoBean.CollectVideo; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class CollectVideoAdapter extends BaseAdapter { + List DataList; + + public CollectVideoAdapter(List dataList) { + DataList = dataList; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (DataList != null) { + return DataList.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return DataList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_collect_video_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_collect_video); + } + vh = new ViewHolder(); + vh.mIv_imag = (ImageView) convertView + .findViewById(R.id.iv_video_image); + vh.mTv_content = (TextView) convertView + .findViewById(R.id.tv_video_title); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.tv_video_name); + convertView.setTag(vh); + + } else { + vh = (ViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml + DataList.get(position).getImgpath(), vh.mIv_imag, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + vh.mTv_content.setText(DataList.get(position).getTitle()); + vh.mTv_name.setText(DataList.get(position).getPublic_name()); + + return convertView; + } + + class ViewHolder { + public ImageView mIv_imag; + public TextView mTv_content, mTv_name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentAdapter.java new file mode 100644 index 0000000..4040bce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentAdapter.java @@ -0,0 +1,227 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.DialogInterface; +import android.content.Intent; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GDEventDetailTopActivity; +import cn.shangyu.gdxzExpert.activity.SettingFeedbackActivity; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyTextView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +public class CommentAdapter extends BaseAdapter { + List datas; + GDEventDetailTopActivity mActivity; + String uuid; + ForegroundColorSpan redSpan, greySpan; + + public CommentAdapter(GDEventDetailTopActivity mActivity, String uuid) { + this.uuid = uuid; + this.datas = datas; + this.mActivity = mActivity; + redSpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.top_title)); + greySpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.darkGrey)); + + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (datas == null) { + return 0; + } + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_comment); + vh = new ViewHolder(); + vh.mIv_delete = (ImageView) convertView + .findViewById(R.id.iv_item_comment_delete); + vh.mIv_tou = (ImageView) convertView + .findViewById(R.id.iv_patient_touxiang); + vh.mTv_content = (MyTextView) convertView + .findViewById(R.id.item_comment_content); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.item_comment_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.item_comment_time); + vh.mTv_hf = (TextView) convertView + .findViewById(R.id.item_comment_hf); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (!TextUtils.isEmpty(datas.get(position).getPhoto()) + && !"null".equals(datas.get(position).getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datas.get(position).getPhoto(), + vh.mIv_tou, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + vh.mIv_tou.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + String content = datas.get(position).getComment().replaceAll(":", ":").replaceAll(" ", "") + .replaceAll(" ", " "); + if (content.contains("||")) { + vh.mTv_content.setTextColor(mActivity.getResources().getColor(R.color.top_title)); + int i=content.indexOf("||"); + String sss=content.replaceAll("\\|\\|", "\n\n"); + SpannableStringBuilder builder = new SpannableStringBuilder(sss); + builder.setSpan(greySpan, i, sss.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); +// vh.mTv_content.setSpecifiedTextsColor(content, "||", +// Color.parseColor("#FF0000"), builder); + } else if (content.contains("回复") && content.contains(":")) { + vh.mTv_content.setTextColor(mActivity.getResources().getColor(R.color.darkGrey)); + if (content.indexOf(":") - content.indexOf("回复") > 0) { + SpannableStringBuilder builder = new SpannableStringBuilder( + content); + builder.setSpan(redSpan, 3, content.indexOf(":"), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + } else { + vh.mTv_content.setText(content); + } + + } else { + vh.mTv_content.setTextColor(mActivity.getResources().getColor(R.color.darkGrey)); + vh.mTv_content.setText(content); + } + + if (datas.get(position).getCreate_date().length() > 16) { + vh.mTv_time.setText(datas.get(position).getCreate_date() + .substring(5, 16)); + } else { + vh.mTv_time.setText(datas.get(position).getCreate_date()); + } + + vh.mTv_name.setText(datas.get(position).getRealname()); + if (!StringUtil.isEmpty(datas.get(position).getExpert_uuid())) { + if (uuid.equals(datas.get(position).getExpert_uuid())) { + vh.mIv_delete.setVisibility(View.VISIBLE); + vh.mTv_hf.setVisibility(View.GONE); + } else { + vh.mIv_delete.setVisibility(View.GONE); + vh.mTv_hf.setVisibility(View.VISIBLE); + } + } else { + if (uuid.equals(datas.get(position).getUser_uuid())) { + vh.mIv_delete.setVisibility(View.VISIBLE); + vh.mTv_hf.setVisibility(View.GONE); + } else { + vh.mIv_delete.setVisibility(View.GONE); + vh.mTv_hf.setVisibility(View.VISIBLE); + } + } + + vh.mIv_delete.setTag(position); + vh.mIv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + delVisit((Integer) v.getTag()); + + } + }); + vh.mTv_hf.setTag(position); + vh.mTv_hf.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + SettingFeedbackActivity.class); + intent.setType("comment"); + intent.putExtra("name", datas.get((Integer) v.getTag()) + .getRealname()); + intent.putExtra("uuid", datas.get((Integer) v.getTag()) + .getExpert_uuid()); + intent.putExtra("content", datas.get((Integer) v.getTag()) + .getComment()); + mActivity.startActivityForResult(intent, + mActivity.GET_HF_COMMENT_RESULT); + } + }); + + return convertView; + } + + class ViewHolder { + ImageView mIv_tou, mIv_delete; + TextView mTv_name, mTv_time, mTv_hf; + MyTextView mTv_content; + } + + ECAlertDialog buildAlert; + + public void delVisit(final int positions) { + buildAlert = ECAlertDialog.buildAlert(mActivity, "删除此评论?", "取消", "确认", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + + + buildAlert.dismiss(); + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentExpandAdapter1.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentExpandAdapter1.java new file mode 100644 index 0000000..724be13 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CommentExpandAdapter1.java @@ -0,0 +1,312 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.DialogInterface; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.Child; +import cn.shangyu.gdxzExpert.bean.NewCommentBean; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + + +/** + * Author: Moos + * E-mail: moosphon@gmail.com + * Date: 18/4/20. + * Desc: 评论与回复列表的适配器 + */ + +public class CommentExpandAdapter1 extends BaseExpandableListAdapter { + private static final String TAG = "CommentExpandAdapter"; + private List commentBeanList; + private List replyBeanList; + private Context context; + private int pageIndex = 1; + private String puuid; + ECAlertDialog buildAlert; + public CommentExpandAdapter1(Context context, List commentBeanList) { + this.context = context; + this.commentBeanList = commentBeanList; + puuid = SharePrefUtil.getString(context, "uuid", ""); + } + + @Override + public int getGroupCount() { + return commentBeanList.size(); + } + + @Override + public int getChildrenCount(int i) { + if(commentBeanList.get(i).getChildList() == null){ + return 0; + }else { + return commentBeanList.get(i).getChildList().size()>0 ? commentBeanList.get(i).getChildList().size():0; + } + + } + + @Override + public Object getGroup(int i) { + return commentBeanList.get(i); + } + + @Override + public Object getChild(int i, int i1) { + return commentBeanList.get(i).getChildList().get(i1); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + boolean isLike = false; + + @Override + public View getGroupView(final int groupPosition, boolean isExpand, View convertView, ViewGroup viewGroup) { + final GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new_p, viewGroup, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + if(puuid.equals(commentBeanList.get(groupPosition).getUser_uuid())) + { + groupHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); + groupHolder.item_comment_hf.setVisibility(View.GONE); + } + else + { + groupHolder.iv_item_comment_delete.setVisibility(View.GONE); + groupHolder.item_comment_hf.setVisibility(View.VISIBLE); + } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(context).load( + Url.urlHtml + commentBeanList.get(groupPosition).getPhoto()).apply(requestOptions).into(groupHolder.logo); + } + else + { + Glide.with(context).load(R.drawable.icon_touxiang_persion_gray_big).into(groupHolder.logo); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getPhoto(), +// groupHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + groupHolder.tv_time.setText(commentBeanList.get(groupPosition).getCreate_date()); + groupHolder.tv_content.setText(commentBeanList.get(groupPosition).getContent()); + groupHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + + return convertView; + } + + @Override + public View getChildView(final int groupPosition, int childPosition, boolean b, View convertView, ViewGroup viewGroup) { + final ChildHolder childHolder; + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new,viewGroup, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + } + else { + childHolder = (ChildHolder) convertView.getTag(); + } + if(puuid.equals(commentBeanList.get(groupPosition).getUser_uuid())) + { + childHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); + } + else + { + childHolder.iv_item_comment_delete.setVisibility(View.GONE); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto(), +// childHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(context). + load( Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto()) + .apply(requestOptions).into(childHolder.logo); + + } + else + { + Glide.with(context).load(R.drawable.icon_touxiang_persion_gray_big).into( childHolder.logo); + } + String replyUser = commentBeanList.get(groupPosition).getChildList().get(childPosition).getName(); + if(!TextUtils.isEmpty(replyUser)){ + childHolder.tv_name.setText(replyUser + ":"); + }else { + childHolder.tv_name.setText("无名"+":"); + } + + childHolder.tv_content.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent()); + + return convertView; + } + + @Override + public boolean isChildSelectable(int i, int i1) { + return true; + } + + private class GroupHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete; + private TextView tv_name, tv_content, tv_time,item_comment_hf; + // private ImageView iv_like; + public GroupHolder(View view) { + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + item_comment_hf=view.findViewById(R.id.item_comment_hf); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + // iv_like = (ImageView) view.findViewById(R.id.comment_item_like); + } + } + + private class ChildHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete; + private TextView tv_name, tv_content, tv_time; + public ChildHolder(View view) { + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + } + } + + + /** + * by moos on 2018/04/20 + * func:评论成功后插入一条数据 + * @param commentDetailBean 新的评论数据 + */ + public void addTheCommentData(NewCommentBean commentDetailBean){ + if(commentDetailBean!=null){ + + commentBeanList.add(commentDetailBean); + notifyDataSetChanged(); + }else { + throw new IllegalArgumentException("评论数据为空!"); + } + + } + + /** + * by moos on 2018/04/20 + * func:回复成功后插入一条数据 + * @param replyDetailBean 新的回复数据 + */ + public void addTheReplyData(Child replyDetailBean, int groupPosition){ + if(replyDetailBean!=null){ + Log.e(TAG, "addTheReplyData: >>>>该刷新回复列表了:"+replyDetailBean.toString() ); + if(commentBeanList.get(groupPosition).getChildList() != null ){ + commentBeanList.get(groupPosition).getChildList().add(replyDetailBean); + }else { + List replyList = new ArrayList<>(); + replyList.add(replyDetailBean); + commentBeanList.get(groupPosition).setChildList(replyList); + } + notifyDataSetChanged(); + }else { + throw new IllegalArgumentException("回复数据为空!"); + } + + } + + /** + * by moos on 2018/04/20 + * func:添加和展示所有回复 + * @param replyBeanList 所有回复数据 + * @param groupPosition 当前的评论 + */ + private void addReplyList(List replyBeanList, int groupPosition){ + if(commentBeanList.get(groupPosition).getChildList() != null ){ + commentBeanList.get(groupPosition).getChildList().clear(); + commentBeanList.get(groupPosition).getChildList().addAll(replyBeanList); + }else { + + commentBeanList.get(groupPosition).setChildList(replyBeanList); + } + + notifyDataSetChanged(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CompletedListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CompletedListAdapter.java new file mode 100644 index 0000000..bec1ea4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CompletedListAdapter.java @@ -0,0 +1,66 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import androidx.fragment.app.FragmentActivity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MailanListBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class CompletedListAdapter extends BaseAdapter { + private ArrayList beans; + private Context context; + public CompletedListAdapter(ArrayList beans, FragmentActivity activity) { + this.beans = beans; + this.context =context; + } + + @Override + public int getCount() { + return beans.size(); + } + + @Override + public Object getItem(int position) { + return beans.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_completedlist); + vh = new ViewHolder(); + vh.tv_topic = convertView.findViewById(R.id.tv_topic); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_time = convertView.findViewById(R.id.tv_time); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.tv_type.setText(beans.get(position).getType()); + vh.tv_topic.setText(beans.get(position).getTopic()); + vh.tv_time.setText(beans.get(position).getExpect_date().replace("-",".")); + return convertView; + } + public static class ViewHolder { + + public TextView tv_type, tv_topic, tv_time,tv_infotime; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ComplexViewMF.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ComplexViewMF.java new file mode 100644 index 0000000..b1afeff --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ComplexViewMF.java @@ -0,0 +1,62 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.gongwen.marqueen.MarqueeFactory; + +import java.util.Date; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.HomeBean; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat2; +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat3; +import static com.netease.nim.uikit.common.util.sys.TimeUtil.isSameDay; + +public class ComplexViewMF extends MarqueeFactory { + private LayoutInflater inflater; + + public ComplexViewMF(Context mContext) { + super(mContext); + inflater = LayoutInflater.from(mContext); + } + + @Override + public RelativeLayout generateMarqueeItemView(HomeBean.MettingBean data) { + RelativeLayout mView = (RelativeLayout) inflater.inflate(R.layout.complex_view, null); + + ((TextView) mView.findViewById(R.id.tv_title)).setText(data.getTitle()); + switch (data.getState()+"") + { + case "1": + if(isSameDay(new Date(Long.valueOf(data.getBegin_date_timestamp())), + new Date(System.currentTimeMillis()))) + { + ((TextView) mView.findViewById(R.id.tv_time)).setText("开播"+simpleDateFormat3.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + Glide.with(mContext).load(R.drawable.sign).into((ImageView) mView.findViewById(R.id.im_s)); + } + else + { + + Glide.with(mContext).load(R.drawable.jing_sign).into((ImageView) mView.findViewById(R.id.im_s)); + ((TextView) mView.findViewById(R.id.tv_time)).setText(simpleDateFormat2.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + } + break; + case "2": + ((TextView) mView.findViewById(R.id.tv_time)).setText("正在直播"); + Glide.with(mContext).load(R.drawable.sign).into((ImageView) mView.findViewById(R.id.im_s)); + break; + default: + Glide.with(mContext).load(R.drawable.jing_sign).into((ImageView) mView.findViewById(R.id.im_s)); + ((TextView) mView.findViewById(R.id.tv_time)).setText(simpleDateFormat2.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + break; + + } + return mView; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConfirmedListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConfirmedListAdapter.java new file mode 100644 index 0000000..6173291 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConfirmedListAdapter.java @@ -0,0 +1,68 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import androidx.fragment.app.FragmentActivity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MailanListBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class ConfirmedListAdapter extends BaseAdapter { + private ArrayList beans; + private Context context; + public ConfirmedListAdapter(ArrayList beans, FragmentActivity activity) { + this.beans = beans; + this.context =context; + } + + @Override + public int getCount() { + return beans.size(); + } + + @Override + public Object getItem(int position) { + return beans.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_confirmedlist); + vh = new ViewHolder(); + vh.tv_infotime = convertView.findViewById(R.id.tv_infotime); + vh.tv_topic = convertView.findViewById(R.id.tv_topic); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_time = convertView.findViewById(R.id.tv_time); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.tv_type.setText(beans.get(position).getType()); + vh.tv_topic.setText(beans.get(position).getTopic()); + vh.tv_time.setText(beans.get(position).getExpect_date().replace("-",".")); + vh.tv_infotime.setText(beans.get(position).getCreate_date().replace("-",".")); + return convertView; + } + public static class ViewHolder { + + public TextView tv_type, tv_topic, tv_time,tv_infotime; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConsultAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConsultAdapter.java new file mode 100644 index 0000000..95d67b6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ConsultAdapter.java @@ -0,0 +1,353 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PublicServiceDetailsActivity; +import cn.shangyu.gdxzExpert.bean.ConsultListBean.DataList; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; + +/** + * 公益咨询适配器 + * + * 类名称:ConsultAdapter 类描述:TODO 创建人:苏三元 时间:2015-9-24 下午3:12:22 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class ConsultAdapter extends BaseAdapter { + + private Context context; + private List DataList; + // 是否是历史咨询 + private boolean isHistory = false; + + /** + * 公益咨询列表的适配器 创建一个新的实例 ConsultAdapter. + * + * @param context + * @param isHistory + * 是否是历史咨询 + * @param dataList + * list数据 + */ + public ConsultAdapter(Context context, boolean isHistory, + ArrayList dataList) { + this.context = context; + this.DataList = dataList; + this.isHistory = isHistory; + + } + + @Override + public int getCount() { + return DataList.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, R.layout.item_consuit_list1_big, + null); + } + else + { + convertView = View.inflate(context, R.layout.item_consuit_list1, + null); + } + + mHolder = new Holder(); +// mHolder.ivImage = (ImageView) convertView +// .findViewById(R.id.iv_patient_touxiang); +// mHolder.prospect_iv = (ImageView) convertView +// .findViewById(R.id.avatar_prospect_iv); +// // mHolder.ivChat = (ImageView) +// // convertView.findViewById(R.id.iv_chat); +// mHolder.tvContent = (TextView) convertView +// .findViewById(R.id.tv_patient_content); +// mHolder.tv_name = (TextView) convertView.findViewById(R.id.tv_name); +// mHolder.tv_date = (TextView) convertView.findViewById(R.id.tv_date); +// mHolder.tipcnt_tv = (TextView) convertView +// .findViewById(R.id.tipcnt_tv); +// mHolder.tv_deaseName = (TextView) convertView +// .findViewById(R.id.tv_dieasename); +// // 新的公益咨询头像不可以有点击事件 +// if (isHistory) { +// mHolder.ivImage.setFocusable(false); +// mHolder.ivImage.setClickable(true); +// mHolder.ivImage.setEnabled(true); +// } + + mHolder.tv_name = convertView.findViewById(R.id.tv_name); + mHolder.tv_state = convertView.findViewById(R.id.tv_state); + mHolder.tv_contant = convertView.findViewById(R.id.tv_contant); + mHolder.tv_questiondetail = convertView.findViewById(R.id.tv_questiondetail); + mHolder.tv_drungtype = convertView.findViewById(R.id.tv_drungtype); + mHolder.tv_redpoint = convertView.findViewById(R.id.tv_redpoint); + + + + convertView.setTag(mHolder); + } else { + mHolder = (Holder) convertView.getTag(); + } + + // 给控件赋值. + final DataList p = DataList.get(position); + // 标题 + if (isHistory) { +// if (3 == p.getState()) { +// mHolder.tvContent.setTextColor(context.getResources().getColor( +// R.color.gray)); +// mHolder.tv_name.setTextColor(context.getResources().getColor( +// R.color.gray)); +// } else { +// mHolder.tvContent.setTextColor(context.getResources().getColor( +// R.color.text_color)); +// mHolder.tv_name.setTextColor(context.getResources().getColor( +// R.color.text_color)); +// } + // 未读提醒设置 + OnUpdateMsgUnreadCounts(mHolder, p.getPatientUuid(),p.getState()); + } +// int sex = p.getSex(); +// String sex1; +// if (sex==0){ +// sex1 = "男"; +// }else { +// sex1 = "女"; +// } +// String s = p.getBirthDate().split(" ")[0]; +// SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); +// int age = 0; +// try { +// Date parse = simpleDateFormat.parse(s); +// age = DateGetAge.getAge(parse); +// } catch (Exception e) { +// e.printStackTrace(); +// } + if("0".equals(p.getUser_status())) + { + mHolder.tv_name.setText(context.getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + mHolder.tv_name.setText(p.getRealName()); + } + + String time = p.getCreateDate(); + if (!TextUtils.isEmpty(time) && time.length() > 16) { + mHolder.tv_state.setText(time.substring(0, 16)); + } else if (!TextUtils.isEmpty(time)) { + mHolder.tv_state.setText(time); + } + mHolder.tv_contant.setText(p.getContent()); + if (p.getDiseaseName().contains("甲、乙、丙、丁")) { + mHolder.tv_drungtype.setText("肝炎"); + } else { + mHolder.tv_drungtype.setText(p.getDiseaseName()); + } + mHolder.tv_questiondetail.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + String name = p.getRealName(); + String mobile = p.getMobile(); + String birthDate = p.getBirthDate(); + String content = p.getContent(); + String photo = p.getPhoto(); + int sex = p.getSex(); + String patientUuid = p.getPatientUuid(); + String consultUuid = p.getUuid(); + int state = p.getState(); + String diseaseName = p.getDiseaseName(); + String createDate = p.getCreateDate(); + + Intent intent = new Intent(context, + PublicServiceDetailsActivity.class); + intent.putExtra("realName", name); + intent.putExtra("photo", photo); + intent.putExtra("content", content); + intent.putExtra("patientUuid", patientUuid); + intent.putExtra("mobile", mobile); + intent.putExtra("sex", sex); + intent.putExtra("birthDate", birthDate); + intent.putExtra("consultUuid", consultUuid); + intent.putExtra("drungtype",diseaseName); + intent.putExtra("createDate",createDate); + intent.putExtra("isCloseAnswer", true); + context.startActivity(intent); + } + }); + +// mHolder.tvContent.setText(p.getContent()); +// String name = p.getRealName(); +// if (!TextUtils.isEmpty(name) && !"null".equals(name)) { +// mHolder.tv_name.setText(name); +// } +// if (p.getDiseaseName().contains("甲、乙、丙、丁")) { +// mHolder.tv_deaseName.setText("肝炎"); +// } else { +// mHolder.tv_deaseName.setText(p.getDiseaseName()); +// } +// +// String time = p.getCreateDate(); +// if (!TextUtils.isEmpty(time) && time.length() > 16) { +// mHolder.tv_date.setText(time.substring(0, 16)); +// } else if (!TextUtils.isEmpty(time)) { +// mHolder.tv_date.setText(time); +// } +// String photo = p.getPhoto(); +// // 头像 +// if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + photo, +// mHolder.ivImage, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray)); +// } else { +// mHolder.ivImage +// .setImageResource(R.drawable.icon_touxiang_persion_gray); +// } +// +// // 新的公益咨询去掉头像点击事件 +// if (isHistory) { +// mHolder.ivImage.setOnClickListener(new OnClickListener() { +// +// @Override +// public void onClick(View v) { +// String name = p.getRealName(); +// String mobile = p.getMobile(); +// String birthDate = p.getBirthDate(); +// String content = p.getContent(); +// String photo = p.getPhoto(); +// int sex = p.getSex(); +// String patientUuid = p.getPatientUuid(); +// String consultUuid = p.getUuid(); +// int state = p.getState(); +// +// // 原来是启动患者详情页面 +// /* +// * Intent intent = new Intent(context, +// * PatientActivity.class); intent.putExtra("mobile", +// * mobile); intent.putExtra("realName", name); +// * intent.putExtra("patientUuid", patientUuid); if +// * (isHistory) { intent.putExtra("state", state); +// * intent.putExtra("isHistory", isHistory); }else{ +// * intent.putExtra("state", 0); } intent.putExtra("type", +// * Constant.typeConsult); intent.putExtra("consultUuid", +// * consultUuid); context.startActivity(intent);//启动患者详情界面 // +// * ToastUtil.showMsgCustomToast(name+"的患者详情"+",联系:"+mobile); +// */ +// // 启动公益咨询详情页面 +// Intent intent = new Intent(context, +// PublicServiceDetailsActivity.class); +// intent.putExtra("realName", name); +// intent.putExtra("photo", photo); +// intent.putExtra("content", content); +// intent.putExtra("patientUuid", patientUuid); +// intent.putExtra("mobile", mobile); +// intent.putExtra("sex", sex); +// intent.putExtra("birthDate", birthDate); +// intent.putExtra("consultUuid", consultUuid); +// intent.putExtra("isCloseAnswer", true); +// context.startActivity(intent); +// } +// }); +// } + /* + * mHolder.ivChat.setOnClickListener(new OnClickListener() { + * + * @Override public void onClick(View v) { // TODO Auto-generated method + * stub // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), // + * receiver_type(接收方类型 1.患者 2.专家), // chat_from(来源1.公益咨询 2.随访 3.vip), // + * chat_from_uuid(如果是公益咨询,则存uuid,否则0) + * CCPAppManager.startChattingAction(context, p.patientUuid, p.realName, + * "2,1,1,"+p.uuid, p.patientUuid); } }); + */ + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + /** + * 统计未读消息数,以后要区分我的患者,朋友圈,公益咨询,这个有点复杂 OnUpdateMsgUnreadCounts + * + * void + * + * @param + */ + public void OnUpdateMsgUnreadCounts(Holder mViewHolder, String patientUuid,int state) { + // int consultUnreadCount = + // IMessageSqlManager.getUnByTypeUnreadCount(Constant.typeConsult); +// int unreadCount = IMessageSqlManager.getBySessionIdUnreadCount( +// Constant.Patient_AppKey + patientUuid, Constant.typeConsult); + // LogUtil.i("UnreadCount="+unreadCount); + int unreadCount=0; + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(patientUuid.toLowerCase(), SessionTypeEnum.P2P); + if (recentContact!=null&&!PatientSqlManager.isPatient(Constant.Patient_AppKey + recentContact.getContactId())) + { + unreadCount=recentContact.getUnreadCount(); + } + + String msgPatientCount = unreadCount > 100 ? "..." : String + .valueOf(unreadCount); + mViewHolder.tv_redpoint.setText(msgPatientCount); + if (unreadCount == 0||state==3) { + mViewHolder.tv_redpoint.setVisibility(View.GONE); + // mViewHolder.prospect_iv.setVisibility(View.GONE); + } else { + // mViewHolder.prospect_iv.setVisibility(View.GONE); + mViewHolder.tv_redpoint.setVisibility(View.VISIBLE); + } + } + + private class Holder { + + public ImageView prospect_iv; + public TextView tipcnt_tv; + public TextView tv_date; + public TextView tv_name; + public TextView tv_redpoint; + public TextView tv_state; + public TextView tv_contant; + public TextView tv_drungtype; + public TextView tv_questiondetail; + public ImageView ivImage; + // public ImageView ivChat; + public TextView tvContent; + public TextView tv_deaseName; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseAdapter.java new file mode 100644 index 0000000..3606517 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseAdapter.java @@ -0,0 +1,102 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; + + +public class CourseAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CourseAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.course_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_c = view.findViewById(R.id.im_c); + viewHolder.tv_c = view.findViewById(R.id.tv_c); + viewHolder.l_c=view.findViewById(R.id.l_c); + +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels - CommonUtil.dip2px(context, 5)) / 4.5f), +// ViewGroup.LayoutParams.MATCH_PARENT);平分屏幕宽度,显示4个半 + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels ) / 4f), + ViewGroup.LayoutParams.MATCH_PARENT); + viewHolder.l_c.setLayoutParams(params); + viewHolder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + Glide.with(context).asBitmap().load(datas.get(position).getImg()) + .into(holder.im_c); +// ImageLoader.getInstance().displayImage( +// datas.get(position).getImg(), +// holder.im_c, +// ImageOptions.getImageOptions(R.drawable.default_news_iv)); + if("为您推荐".equals(datas.get(position).getName())) + { + holder.tv_c.setText("近期热门"); + } + else + { + holder.tv_c.setText(datas.get(position).getName()); + } + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + ImageView im_c; + TextView tv_c; + LinearLayout l_c; + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstAdapter.java new file mode 100644 index 0000000..2619a2f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstAdapter.java @@ -0,0 +1,101 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; + + +public class CourseFirstAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CourseFirstAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.course_first_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_c = view.findViewById(R.id.im_c); + viewHolder.tv_c = view.findViewById(R.id.tv_c); + viewHolder.l_c=view.findViewById(R.id.l_c); + +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels - CommonUtil.dip2px(context, 5)) / 4.5f), +// ViewGroup.LayoutParams.MATCH_PARENT);平分屏幕宽度,显示4个半 + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels ) / 3f), + ViewGroup.LayoutParams.MATCH_PARENT); + viewHolder.l_c.setLayoutParams(params); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + Glide.with(context).asBitmap().load(datas.get(position).getImg()) + .into(holder.im_c); +// ImageLoader.getInstance().displayImage( +// datas.get(position).getImg(), +// holder.im_c, +// ImageOptions.getImageOptions(R.drawable.default_news_iv)); + holder.tv_c.setText(datas.get(position).getName()); + holder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition()); + } + } + }); + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + ImageView im_c; + TextView tv_c; + LinearLayout l_c; + } + + + + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstListAdapter.java new file mode 100644 index 0000000..d31d69b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFirstListAdapter.java @@ -0,0 +1,287 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat1; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Paint; +import android.text.Html; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.WordWrapView; + + +public class CourseFirstListAdapter extends BaseAdapter { + private Context context; + private List datas; + + + public CourseFirstListAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + + @Override + public int getCount() { + return datas.size(); + } + + @Override + public Object getItem(int position) { + return datas.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + ViewHolder holder=null; + if(view==null) + { + view = UIUtils.inflate(R.layout.course_jing_item2); + holder = new ViewHolder(); + holder.im_j = view.findViewById(R.id.im_j); + holder.tv_j = view.findViewById(R.id.tv_j); + holder.tv_n=view.findViewById(R.id.tv_n); + holder.l_tag=view.findViewById(R.id.l_tag); + holder.tv_yh=view.findViewById(R.id.tv_yh); + holder.tv_pr=view.findViewById(R.id.tv_pr); + holder.tv_ppr=view.findViewById(R.id.tv_ppr); + holder.tv_b=view.findViewById(R.id.tv_b); + holder.tv_pr0=view.findViewById(R.id.tv_pr0); + holder.r_h=view.findViewById(R.id.r_h); + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + if(position==getCount()-1) + { + holder.r_h.setVisibility(View.VISIBLE); + } + else + { + holder.r_h.setVisibility(View.GONE); + } + ImageLoader.getInstance().displayImage( + datas.get(position).getIndex_img(),holder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// Glide.with(context).asBitmap().load() +// .into(); + + + if(!StringUtil.isEmpty(datas.get(position).getStudy_num())&&Integer.valueOf(datas.get(position).getStudy_num())>4) + { + holder.tv_j.setVisibility(View.VISIBLE); + } + else + { + holder.tv_j.setVisibility(View.GONE); + } + holder.tv_j.setText(datas.get(position).getStudy_num()+"人学"); + holder.tv_n.setText(Html.fromHtml(datas.get(position).getTitle())); + holder.l_tag.removeAllViews(); + if(!StringUtil.isEmpty(datas.get(position).getTags())) + { + String[]tags=datas.get(position).getTags().split(","); + for(String tag:tags) + { +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( +// LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); +// params.setMargins(0, 0, 20, 0); + TextView textView=new TextView(context); + textView.setText(tag); + textView.setTextColor(Color.parseColor("#666666")); + textView.setTextSize(11); + textView.setGravity(Gravity.CENTER); + textView.setPadding(8,1,8,1); +// textView.setLayoutParams(params); + textView.setBackground(context.getResources().getDrawable(R.drawable.tag_bg)); + holder.l_tag.addView(textView); + } + } + switch (datas.get(position).getSpecial_type_name()+"") { + + case "福利课堂": + holder.tv_b.setText("奖励"+datas.get(position).getFuli_bon()+"积分"); + holder.tv_b.setVisibility(View.VISIBLE); + holder.tv_ppr.setVisibility(View.GONE); + holder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); + + } + + + + break; + case "学完返现": + if(StringUtil.isEmpty(datas.get(position).getBack_bon())|| + Integer.valueOf(datas.get(position).getBack_bon())<0.1) + { + holder.tv_b.setVisibility(View.GONE); + } + else + { + holder.tv_b.setVisibility(View.VISIBLE); + } + holder.tv_b.setText("返"+datas.get(position).getBack_bon()+"积分"); + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// +// holder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +//// holder.tv_yh.setText("永久优惠"); +//// holder.tv_yh.setVisibility(View.VISIBLE); +//// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +//// holder.tv_ppr.setVisibility(View.VISIBLE); +//// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// +// break; +// case "2": +//// holder.tv_yh.setText("限时优惠"); +//// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } +// + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); + + } + break; + default: + holder.tv_b.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) + { + switch (datas.get(position).getDiscount_type()) + { + case "0": + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + break; + case "1": + holder.tv_yh.setText("永久优惠"); + holder.tv_yh.setVisibility(View.VISIBLE); + holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_ppr.setVisibility(View.VISIBLE); + holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + + break; + case "2": + holder.tv_yh.setText("限时优惠"); + holder.tv_yh.setVisibility(View.VISIBLE); + holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_ppr.setVisibility(View.VISIBLE); + holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + break; + } + } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + + } + break; + } + + return view; + } + + public class ViewHolder + { + CircularRectangle im_j; + TextView tv_j; + TextView tv_n; + WordWrapView l_tag; + TextView tv_yh; + TextView tv_pr,tv_pr0; + TextView tv_ppr; + TextView tv_b; + RelativeLayout r_h; + } + + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFuAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFuAdapter.java new file mode 100644 index 0000000..96db443 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseFuAdapter.java @@ -0,0 +1,93 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; + + +public class CourseFuAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CourseFuAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.course_item_big, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_c = view.findViewById(R.id.im_c); + + viewHolder.l_c=view.findViewById(R.id.l_c); + +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels - CommonUtil.dip2px(context, 5)) / 4.5f), +// ViewGroup.LayoutParams.MATCH_PARENT);平分屏幕宽度,显示4个半 + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels- CommonUtil.dip2px(context, 10) ) / 1.8f), + ViewGroup.LayoutParams.MATCH_PARENT); + viewHolder.l_c.setLayoutParams(params); + viewHolder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); + ImageLoader.getInstance().displayImage( + datas.get(position).getIndex_img(), + holder.im_c, + ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + CircularRectangle im_c; + LinearLayout l_c; + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseMyListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseMyListAdapter.java new file mode 100644 index 0000000..df811cc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseMyListAdapter.java @@ -0,0 +1,168 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.text.Html; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MyCourseBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.WordWrapView; + +public class CourseMyListAdapter extends BaseAdapter { + private Context context; + private List datas; + + + public CourseMyListAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + + @Override + public int getCount() { + return datas.size(); + } + + @Override + public Object getItem(int position) { + return datas.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + ViewHolder holder=null; + if(view==null) + { + view = UIUtils.inflate(R.layout.course_jing_item); + holder = new ViewHolder(); + holder.im_j = view.findViewById(R.id.im_j); + holder.tv_j = view.findViewById(R.id.tv_j); + holder.tv_n=view.findViewById(R.id.tv_n); + holder.l_tag=view.findViewById(R.id.l_tag); + holder.tv_yh=view.findViewById(R.id.tv_yh); + holder.tv_pr=view.findViewById(R.id.tv_pr); + holder.tv_ppr=view.findViewById(R.id.tv_ppr); + holder.tv_b=view.findViewById(R.id.tv_b); + holder.tv_pr0=view.findViewById(R.id.tv_pr0); + holder.r_h=view.findViewById(R.id.r_h); + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + if(position==getCount()-1) + { + holder.r_h.setVisibility(View.VISIBLE); + } + else + { + holder.r_h.setVisibility(View.GONE); + } + ImageLoader.getInstance().displayImage( + datas.get(position).getExcellencourse_index_img(),holder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// Glide.with(context).asBitmap().load() +// .into(); + +// if(Integer.valueOf(datas.get(position).getStudy_num())>4) +// { +// holder.tv_j.setVisibility(View.VISIBLE); +// } +// else +// { +// holder.tv_j.setVisibility(View.GONE); +// } +// holder.tv_j.setText(datas.get(position).getStudy_num()+"人学"); + holder.tv_n.setText(Html.fromHtml(datas.get(position).getExcellencourse_title())); + holder.l_tag.removeAllViews(); +// if(!StringUtil.isEmpty(datas.get(position).getTags())) +// { +// String[]tags=datas.get(position).getTags().split(","); +// for(String tag:tags) +// { + +// } +// } + if(datas.get(position).getExcellencourse_video_num().equals(datas.get(position).getExcellencourse_upload_num())) + { + if(datas.get(position).getExcellencourse_video_num().equals(datas.get(position).getStudy_num())) + { + holder.tv_pr.setText( + datas.get(position).getExcellencourse_video_num()+"节•" + +"已完结•"+"已学完"); + } + else + { + holder.tv_pr.setText( + datas.get(position).getExcellencourse_video_num()+"节•" + +"已完结•"+"已学"+datas.get(position).getStudy_num()+"节"); + } + + } + else + { + holder.tv_pr.setText( + datas.get(position).getExcellencourse_video_num()+"节•"+ + "更新"+datas.get(position).getExcellencourse_upload_num()+"节•"+"已学"+datas.get(position).getStudy_num()+"节"); + } + holder.tv_pr.setTextColor(Color.parseColor("#666666")); + holder.tv_pr.setTextSize(15); + switch (datas.get(position).getSpecial_type_name()+"") { + case "课程推荐": + case "为您推荐": + case "精品小课": + break; + case "福利课堂": + case "学完返现": + TextView textView=new TextView(context); + textView.setText(datas.get(position).getSpecial_type_name()); + textView.setTextColor(Color.parseColor("#ffffff")); + textView.setTextSize(11); + textView.setGravity(Gravity.CENTER); + textView.setBackground(context.getResources().getDrawable(R.drawable.xianshi)); + textView.setPadding(8,0,8,0); + holder.l_tag.addView(textView); + break; + } + + return view; + } + + public class ViewHolder + { + CircularRectangle im_j; + TextView tv_j; + TextView tv_n; + WordWrapView l_tag; + TextView tv_yh; + TextView tv_pr,tv_pr0; + TextView tv_ppr; + TextView tv_b; + RelativeLayout r_h; + } + + + + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter.java new file mode 100644 index 0000000..d319e41 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter.java @@ -0,0 +1,352 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Paint; +import android.text.Html; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.WordWrapView; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat1; + + +public class CourseTuiAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CourseTuiAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.course_jing_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_j = view.findViewById(R.id.im_j); + viewHolder.tv_j = view.findViewById(R.id.tv_j); + viewHolder.tv_n=view.findViewById(R.id.tv_n); + viewHolder.l_tag=view.findViewById(R.id.l_tag); + viewHolder.tv_yh=view.findViewById(R.id.tv_yh); + viewHolder.tv_pr=view.findViewById(R.id.tv_pr); + viewHolder.tv_ppr=view.findViewById(R.id.tv_ppr); + viewHolder.tv_b=view.findViewById(R.id.tv_b); + viewHolder.l_c=view.findViewById(R.id.l_c); + viewHolder.tv_pr0=view.findViewById(R.id.tv_pr0); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_j); + ImageLoader.getInstance().displayImage( + datas.get(position).getIndex_img(), + holder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + if(!StringUtil.isEmpty(datas.get(position).getStudy_num())&&Integer.valueOf(datas.get(position).getStudy_num())>4) + { + holder.tv_j.setVisibility(View.VISIBLE); + } + else + { + holder.tv_j.setVisibility(View.GONE); + } + holder.tv_j.setText(datas.get(position).getStudy_num()+"人学"); + holder.tv_n.setText(Html.fromHtml(datas.get(position).getTitle())); + holder.l_tag.removeAllViews(); + if(!StringUtil.isEmpty(datas.get(position).getTags())) + { + String[]tags=datas.get(position).getTags().split(","); + for(String tag:tags) + { +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( +// LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); +// params.setMargins(0, 0, 20, 0); + TextView textView=new TextView(context); + textView.setText(tag); + textView.setTextColor(Color.parseColor("#666666")); + textView.setTextSize(11); + textView.setGravity(Gravity.CENTER); + textView.setPadding(8,1,8,1); + textView.setBackground(context.getResources().getDrawable(R.drawable.tag_bg)); +// textView.setLayoutParams(params); +// LinearLayout ll = new LinearLayout(context); // + 增加行 +// ll.setOrientation(LinearLayout.VERTICAL); // + 增加行 +// ll.addView(textView); + holder.l_tag.addView(textView); + + } + } + + +// switch (datas.get(position).getSpecial_type_name()+"") { +// +// case "福利课堂": +// holder.tv_yh.setText("奖励"+datas.get(position).getFuli_bon()+"积分"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_pr.setVisibility(View.GONE); +// holder.tv_pr0.setVisibility(View.VISIBLE); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) +// { +// holder.tv_pr0.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// } +// else +// holder.tv_pr0.setText("免费"); +// +// break; +// case "学完返现": +// if(StringUtil.isEmpty(datas.get(position).getBack_bon())|| +// Integer.valueOf(datas.get(position).getBack_bon())<0.1) +// { +// holder.tv_yh.setVisibility(View.GONE); +// } +// else +// { +// holder.tv_yh.setVisibility(View.VISIBLE); +// } +// holder.tv_yh.setText("返"+datas.get(position).getBack_bon()+"积分"); +//// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_pr.setVisibility(View.GONE); +// holder.tv_pr0.setVisibility(View.VISIBLE); +// holder.tv_pr0.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// break; +// default: +//// case "为您推荐": +//// case "精品小课": +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) +// { +// holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// break; +// } +// } +// +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// } +// else +// { +// holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// } +// break; +// } + switch (datas.get(position).getSpecial_type_name()+"") { + + case "福利课堂": + holder.tv_b.setText("奖励"+datas.get(position).getFuli_bon()+"积分"); + holder.tv_b.setVisibility(View.VISIBLE); + holder.tv_ppr.setVisibility(View.GONE); + holder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); + + } + + + + break; + case "学完返现": + if(StringUtil.isEmpty(datas.get(position).getBack_bon())|| + Integer.valueOf(datas.get(position).getBack_bon())<0.1) + { + holder.tv_b.setVisibility(View.GONE); + } + else + { + holder.tv_b.setVisibility(View.VISIBLE); + } + holder.tv_b.setText("返"+datas.get(position).getBack_bon()+"积分"); + holder.tv_ppr.setVisibility(View.GONE); + holder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); + + } + break; + default: + holder.tv_b.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) + { + switch (datas.get(position).getDiscount_type()) + { + case "0": + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + break; + case "1": + holder.tv_yh.setText("永久优惠"); + holder.tv_yh.setVisibility(View.VISIBLE); + holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_ppr.setVisibility(View.VISIBLE); + holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + + break; + case "2": + holder.tv_yh.setText("限时优惠"); + holder.tv_yh.setVisibility(View.VISIBLE); + holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_ppr.setVisibility(View.VISIBLE); + holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + break; + } + } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + + } + break; + } + holder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition()); + } + } + }); + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + CircularRectangle im_j; + TextView tv_j; + TextView tv_n; + WordWrapView l_tag; + RelativeLayout l_c; + TextView tv_yh; + TextView tv_pr,tv_pr0; + TextView tv_ppr; + TextView tv_b; + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter1.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter1.java new file mode 100644 index 0000000..a57436b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/CourseTuiAdapter1.java @@ -0,0 +1,343 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Paint; +import android.text.Html; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.WordWrapView; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat1; + + +public class CourseTuiAdapter1 extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public CourseTuiAdapter1(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.course_jing_item3, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_j = view.findViewById(R.id.im_j); + viewHolder.tv_j = view.findViewById(R.id.tv_j); + viewHolder.tv_n=view.findViewById(R.id.tv_n); + viewHolder.l_tag=view.findViewById(R.id.l_tag); + viewHolder.tv_yh=view.findViewById(R.id.tv_yh); + viewHolder.tv_pr=view.findViewById(R.id.tv_pr); + viewHolder.tv_ppr=view.findViewById(R.id.tv_ppr); + viewHolder.tv_b=view.findViewById(R.id.tv_b); + viewHolder.l_c=view.findViewById(R.id.l_c); + viewHolder.tv_pr0=view.findViewById(R.id.tv_pr0); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_j); + ImageLoader.getInstance().displayImage( + datas.get(position).getIndex_img(), + holder.im_j, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + if(!StringUtil.isEmpty(datas.get(position).getStudy_num())&&Integer.valueOf(datas.get(position).getStudy_num())>4) + { + holder.tv_j.setVisibility(View.VISIBLE); + } + else + { + holder.tv_j.setVisibility(View.GONE); + } + holder.tv_j.setText(datas.get(position).getStudy_num()+"人学"); + holder.tv_n.setText(Html.fromHtml(datas.get(position).getTitle())); + holder.l_tag.removeAllViews(); + if(!StringUtil.isEmpty(datas.get(position).getTags())) + { + String[]tags=datas.get(position).getTags().split(","); + for(String tag:tags) + { +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( +// LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); +// params.setMargins(0, 0, 20, 0); + TextView textView=new TextView(context); + textView.setText(tag); + textView.setTextColor(Color.parseColor("#666666")); + textView.setTextSize(11); + textView.setGravity(Gravity.CENTER); + textView.setPadding(8,1,8,1); + textView.setBackground(context.getResources().getDrawable(R.drawable.tag_bg)); +// textView.setLayoutParams(params); + holder.l_tag.addView(textView); + } + } + + +// switch (datas.get(position).getSpecial_type_name()+"") { +// +// case "福利课堂": +// holder.tv_yh.setText("奖励"+datas.get(position).getFuli_bon()+"积分"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_pr.setVisibility(View.GONE); +// holder.tv_pr0.setVisibility(View.VISIBLE); +// holder.tv_pr0.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// +// +// break; +// case "学完返现": +// if(StringUtil.isEmpty(datas.get(position).getBack_bon())|| +// Integer.valueOf(datas.get(position).getBack_bon())<0.1) +// { +// holder.tv_yh.setVisibility(View.GONE); +// } +// else +// { +// holder.tv_yh.setVisibility(View.VISIBLE); +// } +// holder.tv_yh.setText("返"+datas.get(position).getBack_bon()+"积分"); +//// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_pr.setVisibility(View.GONE); +// holder.tv_pr0.setVisibility(View.VISIBLE); +// holder.tv_pr0.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// break; +// default: +//// case "为您推荐": +//// case "精品小课": +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) +// { +// holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat(datas.get(position).getAccount())); +// +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// break; +// } +// } +// +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// } +// else +// { +// holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// } +// break; +// } + switch (datas.get(position).getSpecial_type_name()+"") { + + case "福利课堂": + holder.tv_b.setText("奖励"+datas.get(position).getFuli_bon()+"积分"); + holder.tv_b.setVisibility(View.VISIBLE); + holder.tv_ppr.setVisibility(View.GONE); + holder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); + + } + + + + break; + case "学完返现": + if(StringUtil.isEmpty(datas.get(position).getBack_bon())|| + Integer.valueOf(datas.get(position).getBack_bon())<0.1) + { + holder.tv_b.setVisibility(View.GONE); + } + else + { + holder.tv_b.setVisibility(View.VISIBLE); + } + holder.tv_b.setText("返"+datas.get(position).getBack_bon()+"积分"); + holder.tv_ppr.setVisibility(View.GONE); + holder.tv_yh.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); +// if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) +// { +// switch (datas.get(position).getDiscount_type()) +// { +// case "0": +// holder.tv_yh.setVisibility(View.GONE); +// holder.tv_ppr.setVisibility(View.GONE); +// break; +// case "1": +// holder.tv_yh.setText("永久优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// +// break; +// case "2": +// holder.tv_yh.setText("限时优惠"); +// holder.tv_yh.setVisibility(View.VISIBLE); +// holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); +// holder.tv_ppr.setVisibility(View.VISIBLE); +// holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); +// break; +// } +// } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + + } + break; + default: + holder.tv_b.setVisibility(View.GONE); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_price())) + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getDiscount_price())); + if(!StringUtil.isEmpty(datas.get(position).getDiscount_type())) + { + switch (datas.get(position).getDiscount_type()) + { + case "0": + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + break; + case "1": + holder.tv_yh.setText("永久优惠"); + holder.tv_yh.setVisibility(View.VISIBLE); + holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_ppr.setVisibility(View.VISIBLE); + holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + + break; + case "2": + holder.tv_yh.setText("限时优惠"); + holder.tv_yh.setVisibility(View.VISIBLE); + holder.tv_ppr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_ppr.setVisibility(View.VISIBLE); + holder.tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + break; + } + } + + + } + else + { + holder.tv_pr.setText(fenGetYuanFormat1(datas.get(position).getAccount())); + holder.tv_yh.setVisibility(View.GONE); + holder.tv_ppr.setVisibility(View.GONE); + + } + break; + } + holder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition()); + } + } + }); + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + CircularRectangle im_j; + TextView tv_j; + TextView tv_n; + WordWrapView l_tag; + RelativeLayout l_c; + TextView tv_yh; + TextView tv_pr,tv_pr0; + TextView tv_ppr; + TextView tv_b; + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/DetailCommentAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/DetailCommentAdapter.java new file mode 100644 index 0000000..c0ad801 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/DetailCommentAdapter.java @@ -0,0 +1,224 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.DialogInterface; +import android.content.Intent; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.activity.SettingFeedbackActivity; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyTextView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +public class DetailCommentAdapter extends BaseAdapter { + List datas; + CaseCussionDetailActivity mActivity; + String uuid; + ForegroundColorSpan redSpan, greySpan; + + public DetailCommentAdapter(CaseCussionDetailActivity mActivity, String uuid) { + this.uuid = uuid; + this.datas = datas; + this.mActivity = mActivity; + redSpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.top_title)); + greySpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.darkGrey)); + // redSpan2 = new ForegroundColorSpan(mActivity.getResources().getColor( + // R.color.red)); + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (datas == null) { + return 0; + } + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_comment); + vh = new ViewHolder(); + vh.mIv_delete = (ImageView) convertView + .findViewById(R.id.iv_item_comment_delete); + vh.mIv_tou = (ImageView) convertView + .findViewById(R.id.iv_patient_touxiang); + vh.mTv_content = (MyTextView) convertView + .findViewById(R.id.item_comment_content); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.item_comment_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.item_comment_time); + vh.mTv_hf = (TextView) convertView + .findViewById(R.id.item_comment_hf); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (!TextUtils.isEmpty(datas.get(position).getPhoto()) + && !"null".equals(datas.get(position).getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datas.get(position).getPhoto(), + vh.mIv_tou, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + vh.mIv_tou.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + + String content = datas.get(position).getComment().replaceAll(":", ":").replaceAll(" ", "") + .replaceAll(" ", " "); + if (content.contains("||")) { +// SpannableStringBuilder builder = new SpannableStringBuilder(content); +// builder.setSpan(greySpan, content.indexOf("||"), content.length(), +// Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// // vh.mTv_content.setText(builder); +// // builder.setSpan(redSpan2, content.indexOf("||"), +// // content.indexOf("||") + 2, +// // Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); +// vh.mTv_content.setSpecifiedTextsColor(content, "||", +// Color.parseColor("#FF0000"), builder); + vh.mTv_content.setTextColor(mActivity.getResources().getColor(R.color.top_title)); + int i=content.indexOf("||"); + String sss=content.replaceAll("\\|\\|", "\n\n"); + SpannableStringBuilder builder = new SpannableStringBuilder(sss); + builder.setSpan(greySpan, i, sss.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + + } else if (content.contains("回复") && content.contains(":")) { + vh.mTv_content.setTextColor(mActivity.getResources().getColor(R.color.darkGrey)); + if (content.indexOf(":") - content.indexOf("回复") > 0) { + SpannableStringBuilder builder = new SpannableStringBuilder( + content); + builder.setSpan(redSpan, 3, content.indexOf(":"), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + } else { + vh.mTv_content.setText(content); + } + } else { + vh.mTv_content.setTextColor(mActivity.getResources().getColor(R.color.darkGrey)); + vh.mTv_content.setText(content); + } + + if (datas.get(position).getCreate_date().length() > 16) { + vh.mTv_time.setText(datas.get(position).getCreate_date() + .substring(5, 16)); + } else { + vh.mTv_time.setText(datas.get(position).getCreate_date()); + } + + vh.mTv_name.setText(datas.get(position).getRealname()); + if (uuid.equals(datas.get(position).getExpert_uuid())) { + vh.mIv_delete.setVisibility(View.VISIBLE); + vh.mTv_hf.setVisibility(View.GONE); + } else { + vh.mIv_delete.setVisibility(View.GONE); + vh.mTv_hf.setVisibility(View.VISIBLE); + } + vh.mIv_delete.setTag(position); + vh.mIv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + delVisit((Integer) v.getTag()); + + } + }); + vh.mTv_hf.setTag(position); + vh.mTv_hf.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + SettingFeedbackActivity.class); + intent.setType("commentY"); + intent.putExtra("name", datas.get((Integer) v.getTag()) + .getRealname()); + intent.putExtra("uuid", datas.get((Integer) v.getTag()) + .getExpert_uuid()); + intent.putExtra("content", datas.get((Integer) v.getTag()) + .getComment()); + mActivity.startActivityForResult(intent, + mActivity.GET_HF_COMMENT_RESULT); + } + }); + + return convertView; + } + + class ViewHolder { + ImageView mIv_tou, mIv_delete; + TextView mTv_name, mTv_time, mTv_hf; + MyTextView mTv_content; + } + + ECAlertDialog buildAlert; + + public void delVisit(final int positions) { + buildAlert = ECAlertDialog.buildAlert(mActivity, "删除此评论?", "取消", "确认", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + + //mActivity.getDeleteComment(positions); + buildAlert.dismiss(); + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/DownloadCollectAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/DownloadCollectAdapter.java new file mode 100644 index 0000000..bffaf23 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/DownloadCollectAdapter.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +/** + * LibraryListAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆(下载和收藏页面)适配器 + */ +public class DownloadCollectAdapter extends BaseAdapter { + private Context mContext; + private List mList; + + public DownloadCollectAdapter(Context context, List list) { + this.mContext = context; + this.mList = list; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, R.layout.fragment_library_list_item, null); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + holder.name = (TextView) convertView.findViewById(R.id.item_name); + + final LibraryData data = mList.get(position); + holder.name.setText(data.name); + + return convertView; + } + + class Holder { + TextView name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ENDownloadAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ENDownloadAdapter.java new file mode 100644 index 0000000..5fa4cde --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ENDownloadAdapter.java @@ -0,0 +1,179 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +/** + * LibraryListAdapter.java + * + * 功能说明:英文杂志下载适配器 + */ +@SuppressLint("ResourceAsColor") +public class ENDownloadAdapter extends BaseAdapter { + private Context mContext; + private List mList; + private int[] progress; + public ENDownloadAdapter(Context context, ArrayList list) { + this.mContext = context; + this.mList = list; + this.progress = new int[mList.size()]; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final Holder holder; + if (convertView == null) { + holder = new Holder(); + if(CommonUtil.BigModule()) + { + convertView = View.inflate(mContext, R.layout.activity_endownload_list_item_big, null); + } + else + { + convertView = View.inflate(mContext, R.layout.activity_endownload_list_item, null); + } + holder.name = (TextView) convertView.findViewById(R.id.item_en_name); + holder.date = (TextView) convertView.findViewById(R.id.item_en_date); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + final DownloadModel data = mList.get(position); + holder.name.setText(data.getTitle()); + holder.date.setText(data.getTime()); + return convertView; + } + + class Holder { + public TextView date; + public TextView name; + } + + /** + * 下载文件 + * downloadPdf + * @param position + * @param holder + * + * @param path + * void + * @param title + *//* + private String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + + "/gdxzExpert/download/治疗指南/"; + private HttpHandler hand; + private int[] progress; + private ArrayList currentprogress = new ArrayList(); + + + protected void downloadPdf(String url, final String name, final int position, final Holder holder) { + // TODO Auto-generated method stub + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + final String path = filePath + name + ".pdf"; + //下载的路径,及app安装包的命名 + //*************************************************** + hand = http.download(url, path, + false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + @Override + public void onStart() { + ToastUtil.showToast("开始下载"+name); + } + + @Override + public void onLoading(long total, long current, + boolean isUploading) { + // progress[position] = (int) (current * 100 / total); + // currentprogress.add(position, progress[position]+""); + // LogUtil.i(name+"下载进度:"+progress[position]); + + //插入 + // DownloadModel downloadModel = new DownloadModel(mList.get(position).uuid); + // downloadModel.setTitle(mList.get(position).title); + // downloadModel.setTime(mList.get(position).updateTime); + // downloadModel.setPath(mList.get(position).path); + // downloadModel.setFilePath(path); + // downloadModel.setFilePath(path); + // downloadModel.setFileFormat(".pdf"); + // downloadModel.setState(1);// 0未下载,1下载中,2已下载 + // BookDownloadSqlManager.insertDownload(downloadModel); + + if ((int) holder.iv_down.getTag() == position) { + //异步显示 + holder.iv_down.setVisibility(View.GONE); + // holder.tv_down.setText(progress[position]+"%"); + holder.tv_down.setText("下载中"); + holder.tv_down.setVisibility(View.VISIBLE); + } + } + + @Override + public void onSuccess(ResponseInfo responseInfo) { + ToastUtil.showToast(name+"下载完成!"); + //插入 + DownloadModel downloadModel = new DownloadModel(mList.get(position).getUuid()); + downloadModel.setFilePath(path); + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager.insertDownload(downloadModel); + if ((int) holder.iv_down.getTag() == position) { + //异步显示 + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("查看"); + holder.tv_down.setVisibility(View.VISIBLE); + } + //打开文件 + // openFile(path); + } + + + @Override + public void onFailure(HttpException error, String msg) { + ToastUtil.showToast(name+"下载失败!"); + if ((int) holder.iv_down.getTag() == position) { + //异步显示 + holder.iv_down.setVisibility(View.VISIBLE); + holder.tv_down.setVisibility(View.GONE); + } + //maybe the file has downloaded completely + // if (msg.contains("maybe the file has downloaded completely")) { + // + // } + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + }*/ +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/EnglishCollectAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/EnglishCollectAdapter.java new file mode 100644 index 0000000..c5395e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/EnglishCollectAdapter.java @@ -0,0 +1,96 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.CollectListBean.CollectList; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + + +public class EnglishCollectAdapter extends BaseAdapter { + List mList; + + Context con; + + public EnglishCollectAdapter(List mList,Context con) { + this.mList = mList; + this.con = con; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + //找到自定义item布局 并赋值给 convertView + if(CommonUtil.BigModule()) + { + convertView = View.inflate(con, R.layout.activity_endownload_list_item_big, null); + holder.name = (TextView) convertView.findViewById(R.id.item_en_name); + holder.date = (TextView) convertView.findViewById(R.id.item_en_date); + } + else + { + convertView = View.inflate(con, R.layout.activity_bookshelf_list_item, null); + holder.iv_down = convertView + .findViewById(R.id.item_iv_down); + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.date = (TextView) convertView.findViewById(R.id.item_date); + holder.tv_down = (TextView) convertView.findViewById(R.id.item_tv_down); + holder.iv_right = (ImageView) convertView.findViewById(R.id.item_iv_right); + + //收藏 + holder.iv_right.setVisibility(View.VISIBLE); + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.GONE); + } + + + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + final CollectList data = mList.get(position); + holder.name.setText(data.title); + if (!TextUtils.isEmpty(data.secondTitle)) { + holder.date.setText(data.secondTitle); + }else{ + holder.date.setText(""); + } + return convertView; + } + + public class Holder { + public ImageView iv_right; + public TextView tv_down; + public View iv_down; + public TextView date; + public TextView name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GDLiveBroadcastAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GDLiveBroadcastAdapter.java new file mode 100644 index 0000000..29cd6cc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GDLiveBroadcastAdapter.java @@ -0,0 +1,162 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.GDLiveBroadcastBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import com.nostra13.universalimageloader.core.ImageLoader; +import android.app.Activity; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class GDLiveBroadcastAdapter extends BaseAdapter { + + public List datas; + public Activity mActivity; + + public GDLiveBroadcastAdapter( + List datas, + Activity mActivity) { + + this.datas = datas; + this.mActivity = mActivity; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_gd_live); + vh = new ViewHolder(); + vh.mTitle = (TextView) convertView.findViewById(R.id.tv_title); + vh.mTime = (TextView) convertView.findViewById(R.id.tv_time); + vh.mName = (TextView) convertView.findViewById(R.id.tv_name); + vh.mType = (TextView) convertView.findViewById(R.id.tv_type); + vh.mImage = (ImageView) convertView.findViewById(R.id.iv_img); + vh.mReview = (TextView) convertView.findViewById(R.id.tv_review); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTitle.setText(datas.get(position).getTitle());// 标题 + // if (datas.get(position).getEnd_date().length() >= 11) { + // String date = datas.get(position).getBegin_date().substring(0, 16) + // + "-" + datas.get(position).getEnd_date().substring(11, 16); + vh.mTime.setText("时间:" + + GetDate(datas.get(position).getBegin_date(), + datas.get(position).getEnd_date()));// 时间 + // } + + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getLiveimg().toString(), + vh.mImage, + ImageOptions.getImageOptions(R.drawable.home_scroll_default));// 圖片 + vh.mName.setText(datas.get(position).keywords);// 关键字 + // 预告 直播 结束 + if (datas.get(position).getStatus() == 1) { + vh.mType.setText("预 告"); + vh.mType.setBackgroundDrawable(UIUtils + .getDrawable(R.drawable.bg_blue)); + vh.mReview.setVisibility(View.GONE); + + } else if (datas.get(position).getStatus() == 2) { + vh.mType.setText("直播中"); + // vh.mType.setBackground(UIUtils.getDrawable(R.drawable.bg_red)); + vh.mType.setBackgroundDrawable(UIUtils + .getDrawable(R.drawable.bg_red)); + vh.mReview.setVisibility(View.GONE); + } else if (datas.get(position).getStatus() == 3) { + if (position == 0) { + vh.mReview.setVisibility(View.VISIBLE); + } else if (datas.get(position - 1).getStatus() != 3) { + vh.mReview.setVisibility(View.VISIBLE); + } else { + vh.mReview.setVisibility(View.GONE); + } + vh.mType.setText("已结束"); + vh.mType.setBackgroundDrawable(UIUtils + .getDrawable(R.drawable.bg_grays)); + } + + // if (!TextUtils.isEmpty(datas.get(position).getImgpath()) + // && !"null".equals(datas.get(position).getImgpath())) { + // ImageLoader.getInstance().displayImage( + // Url.imgUrl + datas.get(position).getImgpath(), + // vh.mImage, + // ImageOptions + // .getImageOptions(R.drawable.home_scroll_default)); + // } else { + // vh.mImage.setImageResource(R.drawable.home_scroll_default); + // } + return convertView; + } + + class ViewHolder { + TextView mTitle, mTime, mName, mType, mReview; + ImageView mImage; + + } + + public String GetDate(String startTime, String endTime) { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat newsdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); + SimpleDateFormat datedf = new SimpleDateFormat("yyyy年MM月dd日"); + SimpleDateFormat datesdf = new SimpleDateFormat("MM月dd日"); + SimpleDateFormat hoursdf = new SimpleDateFormat("HH:mm"); + Calendar startcalendar = Calendar.getInstance(); + Calendar endcalendar = Calendar.getInstance(); + try { + Date startdate = sdf.parse(startTime); + startcalendar.setTime(startdate); + Date enddate = sdf.parse(endTime); + endcalendar.setTime(enddate); + if (startcalendar.get(Calendar.YEAR) != endcalendar.get(Calendar.YEAR)) { + return datedf.format(startdate) + "-" + datedf.format(enddate); + } else if (startcalendar.get(Calendar.MONTH) != endcalendar.get(Calendar.MONTH)) { + return datedf.format(startdate) + "-" + datesdf.format(enddate); + } else if (startcalendar.get(Calendar.DAY_OF_MONTH) != endcalendar.get(Calendar.DAY_OF_MONTH)) { + + return datedf.format(startdate) + "-" + datesdf.format(enddate); + } + return newsdf.format(startdate) + "-" + hoursdf.format(enddate); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return ""; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanAdapter.java new file mode 100644 index 0000000..464f36c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanAdapter.java @@ -0,0 +1,105 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.EventListBean.EventBase; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import android.app.Activity; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class GanDanAdapter extends BaseAdapter { + + public List datas; + public Activity mActivity; + + public GanDanAdapter(List datas, Activity mActivity) { + + this.datas = datas; + this.mActivity = mActivity; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_gd_event); + vh = new ViewHolder(); + vh.mTitle = (TextView) convertView + .findViewById(R.id.tv_item_gdtitle); + vh.mTime = (TextView) convertView.findViewById(R.id.tv_item_gdtime); + vh.mUp = (TextView) convertView.findViewById(R.id.tv_item_gdup); + vh.mOverTime = (TextView) convertView + .findViewById(R.id.tv_item_gdisover); + vh.mImage = (ImageView) convertView + .findViewById(R.id.iv_item_gdimage); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTitle.setText(datas.get(position).getTitle()); + vh.mTime.setText("活动截至:" + + datas.get(position).getEnd_date().substring(0, 10)); + if ("0".equals(datas.get(position).getSort())) { + vh.mUp.setVisibility(View.VISIBLE); + } else { + vh.mUp.setVisibility(View.GONE); + } + if ("0".equals(datas.get(position).getStatus())) { + vh.mOverTime.setVisibility(View.VISIBLE); + vh.mTitle.setTextColor(mActivity.getResources().getColor( + R.color.hint_text_color)); + } else { + vh.mOverTime.setVisibility(View.GONE); + vh.mTitle.setTextColor(mActivity.getResources().getColor( + R.color.black)); + } + if (!TextUtils.isEmpty(datas.get(position).getImgpath()) + && !"null".equals(datas.get(position).getImgpath())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getImgpath(), + vh.mImage, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default1)); + } else { + vh.mImage.setImageResource(R.drawable.home_scroll_default1); + } + return convertView; + } + + class ViewHolder { + TextView mTitle, mTime, mUp, mOverTime; + ImageView mImage; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanDoctorAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanDoctorAdapter.java new file mode 100644 index 0000000..df2e481 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanDoctorAdapter.java @@ -0,0 +1,202 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.GandanDoctorListBean; +import cn.shangyu.gdxzExpert.bean.GandanDoctorListBean.DataBean.ListBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +public class GanDanDoctorAdapter extends BaseAdapter{ + + + private List gandanDoctorList; + private Context context; + public static final int TYPE1 = 0; //两种类型 + public static final int TYPE2 = 1; + public GanDanDoctorAdapter(List gandanDoctorList, + Context context, boolean b) { + // TODO Auto-generated constructor stub + this.gandanDoctorList = gandanDoctorList; + this.context = context; + } + + + public void getDatas(List gandanDoctorList) { + // TODO Auto-generated method stub + this.gandanDoctorList = gandanDoctorList; + } + + @Override + public int getViewTypeCount() { + // TODO Auto-generated method stub + return 2; + } + + @Override + public int getItemViewType(int position) { + // TODO Auto-generated method stub + if (gandanDoctorList.get(position).getName().length()>5){ + return TYPE1; + }else { + return TYPE2; + } + } + @Override + public int getCount() { + // TODO Auto-generated method stub + return gandanDoctorList!=null&&gandanDoctorList.size()>0?gandanDoctorList.size():0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return gandanDoctorList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + Holder holder; + Holder2 holder2 ; + switch (getItemViewType(position)){ + case TYPE1: + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_gandan_doc2,null); + holder = new Holder(); + holder.rl_doc_bg = (RelativeLayout) convertView.findViewById(R.id.rl_doc_bg); + holder.tv_hospital_name = (TextView) convertView.findViewById(R.id.tv_hospital_name); + holder.tv_keshi_name = (TextView) convertView.findViewById(R.id.tv_keshi_name); + holder.tv_patientnum = (TextView) convertView.findViewById(R.id.tv_patientnum); + holder.tv_consulnum = (TextView) convertView.findViewById(R.id.tv_consulnum); + holder.tv_doc_name = (TextView) convertView.findViewById(R.id.tv_doc_name); + holder.tv_zhicheng = (TextView) convertView.findViewById(R.id.tv_zhicheng); + holder.iv_doc_headimg = (ImageView) convertView.findViewById(R.id.iv_doc_headimg); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + holder.tv_hospital_name.setText(gandanDoctorList.get(position).getHospital_name()); + holder.tv_keshi_name.setText(gandanDoctorList.get(position).getOffice_name()); + holder.tv_consulnum.setText(":"+gandanDoctorList.get(position).getConsult_num()); + holder.tv_patientnum.setText(":"+gandanDoctorList.get(position).getApply_num()); + holder.tv_doc_name.setText(gandanDoctorList.get(position).getName()); + holder.tv_zhicheng.setText(gandanDoctorList.get(position).getPosition_name()); + ImageLoader.getInstance().displayImage(Url.urlHtml + gandanDoctorList.get(position).getImg(), + holder.iv_doc_headimg, + ImageOptions.getImageOptions(R.drawable.img_news_empty)); + + switch (position%5) { + case 0: + holder.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_1); + break; + case 1: + holder.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_2); + break; + case 2: + holder.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_3); + break; + case 3: + holder.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_4); + break; + case 4: + holder.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_5); + break; + } + break; + case TYPE2: + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_gandan_doc1,null); + holder2 = new Holder2(); + holder2.rl_doc_bg = (RelativeLayout) convertView.findViewById(R.id.rl_doc_bg); + holder2.tv_hospital_name = (TextView) convertView.findViewById(R.id.tv_hospital_name); + holder2.tv_keshi_name = (TextView) convertView.findViewById(R.id.tv_keshi_name); + holder2.tv_tag_01 = (TextView) convertView.findViewById(R.id.tv_tag_01); + holder2.tv_patientnum = (TextView) convertView.findViewById(R.id.tv_patientnum); + holder2.tv_consulnum = (TextView) convertView.findViewById(R.id.tv_consulnum); + holder2.tv_doc_name = (TextView) convertView.findViewById(R.id.tv_doc_name); + holder2.tv_zhicheng = (TextView) convertView.findViewById(R.id.tv_zhicheng); + holder2.iv_doc_headimg = (ImageView) convertView.findViewById(R.id.iv_doc_headimg); + convertView.setTag(holder2); + } else { + holder2 = (Holder2) convertView.getTag(); + } + + int is_star = gandanDoctorList.get(position).getIs_star(); + if (holder2.tv_tag_01!=null) { + if (is_star==0) { + holder2.tv_tag_01.setVisibility(View.INVISIBLE); + }else { + holder2.tv_tag_01.setVisibility(View.VISIBLE); + } + } + holder2.tv_hospital_name.setText(gandanDoctorList.get(position).getHospital_name()); + holder2.tv_keshi_name.setText(gandanDoctorList.get(position).getOffice_name()); + holder2.tv_consulnum.setText(":"+gandanDoctorList.get(position).getConsult_num()); + holder2.tv_patientnum.setText(":"+gandanDoctorList.get(position).getApply_num()); + holder2.tv_doc_name.setText(gandanDoctorList.get(position).getName()); + holder2.tv_zhicheng.setText(gandanDoctorList.get(position).getPosition_name()); + ImageLoader.getInstance().displayImage(Url.urlHtml + gandanDoctorList.get(position).getImg(), + holder2.iv_doc_headimg, + ImageOptions.getImageOptions(R.drawable.img_news_empty)); + + switch (position%5) { + case 0: + holder2.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_1); + break; + case 1: + holder2.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_2); + break; + case 2: + holder2.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_3); + break; + case 3: + holder2.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_4); + break; + case 4: + holder2.rl_doc_bg.setBackgroundResource(R.drawable.bg_doc_5); + break; + } + break; + + } + + + + return convertView; + } + class Holder { + // RoundImageView img; + RelativeLayout rl_doc_bg; + ImageView iv_doc_headimg; + TextView tv_hospital_name,tv_keshi_name,tv_tag_01,tv_patientnum,tv_consulnum,tv_doc_name,tv_zhicheng; + } + class Holder2{ + // RoundImageView img; + RelativeLayout rl_doc_bg; + ImageView iv_doc_headimg; + TextView tv_hospital_name,tv_keshi_name,tv_tag_01,tv_patientnum,tv_consulnum,tv_doc_name,tv_zhicheng; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHospitalAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHospitalAdapter.java new file mode 100644 index 0000000..fa132f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHospitalAdapter.java @@ -0,0 +1,136 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.GanDanHospitalBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.TwoRoundImageView; + +import android.content.Context; + +import android.text.TextUtils; + +import android.view.View; +import android.view.ViewGroup; + +import android.widget.BaseAdapter; +import android.widget.LinearLayout; + +import android.widget.TextView; + +public class GanDanHospitalAdapter extends BaseAdapter { + + private List datas; + private Context context; + private boolean isHos; + + public GanDanHospitalAdapter( + List datas, Context context, + boolean isHos) { + this.datas = datas; + this.context = context; + this.isHos = isHos; + } + + public GanDanHospitalAdapter(Context context, boolean isHos) { + this.context = context; + this.isHos = isHos; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas == null ? 0 : datas.size(); + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_gandan_hospital); + vh = new ViewHolder(); + vh.iv_hospital = (TwoRoundImageView) convertView + .findViewById(R.id.iv_hospital); + + vh.tv_hospital_name = (TextView) convertView + .findViewById(R.id.tv_hospital_name); + vh.tv_hospital_score = (TextView) convertView + .findViewById(R.id.tv_hospital_score); + vh.tv_hospital_follow = (TextView) convertView + .findViewById(R.id.tv_hospital_follow); + vh.tv_hospital_type = (TextView) convertView + .findViewById(R.id.tv_hospital_type); + vh.ll_name = (LinearLayout) convertView.findViewById(R.id.ll_name); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (!TextUtils.isEmpty(datas.get(position).getImg())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getImg(), vh.iv_hospital, + ImageOptions.getImageOptions(R.drawable.home_scroll_default1)); + + } else { + vh.iv_hospital.setImageResource(R.drawable.home_scroll_default1); + } + vh.tv_hospital_name.setText(datas.get(position).getName()); + vh.tv_hospital_score.setText(Math.round(Double.parseDouble(datas.get( + position).getScoretotal()) * 10) + / 10.0 + "分"); + vh.tv_hospital_follow.setText(String.valueOf(datas.get(position) + .getFcousnum())); + if (isHos) { + vh.tv_hospital_type.setVisibility(View.VISIBLE); + } else { + vh.tv_hospital_type.setVisibility(View.GONE); + } + if (datas.get(position).getLevel() == 1) { + vh.tv_hospital_type.setText("三级甲等"); + } else if (datas.get(position).getLevel() == 2) { + vh.tv_hospital_type.setText("三级医院"); + } else if (datas.get(position).getLevel() == 3) { + vh.tv_hospital_type.setText("二级医院"); + } else { + vh.tv_hospital_type.setText("其他等级"); + } + return convertView; + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + public static class ViewHolder { + public TwoRoundImageView iv_hospital;// 医院照片 + public TextView tv_hospital_name, tv_hospital_follow, + tv_hospital_score, tv_hospital_type;// 医院名称,评分,关注数量 + public LinearLayout ll_name; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHouseAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHouseAdapter.java new file mode 100644 index 0000000..cd4cdae --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GanDanHouseAdapter.java @@ -0,0 +1,315 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.TopicAcitivty; +import cn.shangyu.gdxzExpert.bean.HouseBean.HouseList; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +//import com.baidu.location.LLSInterface; + +public class GanDanHouseAdapter extends BaseAdapter { + + private List datas; + private Context context; + private ArrayList imageSource; + private String tag1, tag2, tag3; + + public GanDanHouseAdapter(List datas, Context context) { + this.datas = datas; + this.context = context; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_house_list); + vh = new ViewHolder(); + vh.im_pic = convertView.findViewById(R.id.im_pic); + + vh.tv_case_name = (TextView) convertView + .findViewById(R.id.tv_case_name); + vh.tv_gandan_comments = (TextView) convertView + .findViewById(R.id.tv_gandan_comments); + vh.tv_comment = (TextView) convertView + .findViewById(R.id.tv_gandan_comment); + vh.tv_tag_2 = (TextView) convertView.findViewById(R.id.tv_tag_02); + vh.tv_tag_1 = (TextView) convertView.findViewById(R.id.tv_tag_01); + + vh.tv_tag_3 = (TextView) convertView.findViewById(R.id.tv_tag_03); + vh.tv_case_date = (TextView) convertView + .findViewById(R.id.tv_case_date); + vh.dis_img_01 = (ImageView) convertView + .findViewById(R.id.dis_img_01); + vh.dis_img_02 = (ImageView) convertView + .findViewById(R.id.dis_img_02); + vh.dis_img_03 = (ImageView) convertView + .findViewById(R.id.dis_img_03); + vh.ll_imgs = (LinearLayout) convertView.findViewById(R.id.ll_imgs); + vh.ll_tags = (LinearLayout) convertView.findViewById(R.id.ll_tags); + vh.im_pic = convertView.findViewById(R.id.im_pic); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + // 加载头像 + if (!TextUtils.isEmpty(datas.get(position).getExpert_photo())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datas.get(position).getExpert_photo(), + vh.im_pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + vh.im_pic.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + + // 评论的内容 + vh.tv_gandan_comments.setText(datas.get(position).getContent()); + // 评论数量 + if (datas.get(position).getCommentnum() == null) { + vh.tv_comment.setText("0"); + } else { + vh.tv_comment.setText(String.valueOf(datas.get(position) + .getCommentnum())); + } + String[] stringArr = null; + // 标签 + if (!TextUtils.isEmpty(datas.get(position).getTags())) { + + stringArr = datas.get(position).getTags().split(","); + + if (stringArr.length == 1) { + vh.tv_tag_1.setVisibility(View.VISIBLE); + vh.tv_tag_1.setText(stringArr[0]); + + // tag1 = vh.tv_tag_1.getText().toString(); + + vh.tv_tag_2.setVisibility(View.GONE); + vh.tv_tag_3.setVisibility(View.GONE); + } else if (stringArr.length == 2) { + vh.tv_tag_1.setVisibility(View.VISIBLE); + vh.tv_tag_1.setText(stringArr[0]); + vh.tv_tag_2.setVisibility(View.VISIBLE); + vh.tv_tag_2.setText(stringArr[1]); + vh.tv_tag_3.setVisibility(View.GONE); + // tag1 = vh.tv_tag_1.getText().toString(); + // tag2 = vh.tv_tag_2.getText().toString(); + + } else if (stringArr.length == 3) { + vh.tv_tag_1.setVisibility(View.VISIBLE); + vh.tv_tag_1.setText(stringArr[0]); + vh.tv_tag_2.setVisibility(View.VISIBLE); + vh.tv_tag_2.setText(stringArr[1]); + vh.tv_tag_3.setVisibility(View.VISIBLE); + vh.tv_tag_3.setText(stringArr[2]); + // tag1 = vh.tv_tag_1.getText().toString(); + // tag2 = vh.tv_tag_2.getText().toString(); + // tag3 = vh.tv_tag_3.getText().toString(); + } + } else { + vh.tv_tag_1.setVisibility(View.GONE); + vh.tv_tag_2.setVisibility(View.GONE); + vh.tv_tag_3.setVisibility(View.GONE); + } + vh.tv_tag_1.setTag(datas.get(position).getTags().split(",")); + vh.tv_tag_2.setTag(datas.get(position).getTags().split(",")); + vh.tv_tag_3.setTag(datas.get(position).getTags().split(",")); + + vh.tv_tag_1.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + String[] stringArr = (String[]) v.getTag(); + Intent in = new Intent(context, TopicAcitivty.class); + in.putExtra("topic", stringArr[0]); + StringUtil.TOPIC = tag1; + ToastUtil.showMessage(tag1); + context.startActivity(in); + } + }); + vh.tv_tag_2.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + String[] stringArr = (String[]) v.getTag(); + // TODO Auto-generated method stub + Intent in = new Intent(context, TopicAcitivty.class); + in.putExtra("topic", stringArr[1]); + StringUtil.TOPIC = stringArr[1]; + context.startActivity(in); + } + }); + vh.tv_tag_3.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + String[] stringArr = (String[]) v.getTag(); + // TODO Auto-generated method stub + Intent in = new Intent(context, TopicAcitivty.class); + in.putExtra("topic", stringArr[2]); + StringUtil.TOPIC = stringArr[2]; + context.startActivity(in); + } + }); + + if (datas.get(position).getPhoto().size() == 0) { + vh.ll_imgs.setVisibility(View.GONE); + vh.dis_img_01.setVisibility(View.INVISIBLE); + vh.dis_img_02.setVisibility(View.INVISIBLE); + vh.dis_img_03.setVisibility(View.INVISIBLE); + } else { + + ArrayList imageSource = new ArrayList<>(); + vh.ll_imgs.setVisibility(View.VISIBLE); + if (datas.get(position).getPhoto().size() == 1) { + vh.dis_img_01.setVisibility(View.VISIBLE); + vh.dis_img_02.setVisibility(View.INVISIBLE); + vh.dis_img_03.setVisibility(View.INVISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getPhoto().get(0), + vh.dis_img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } else if (datas.get(position).getPhoto().size() == 2) { + vh.dis_img_01.setVisibility(View.VISIBLE); + vh.dis_img_02.setVisibility(View.VISIBLE); + vh.dis_img_03.setVisibility(View.INVISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getPhoto().get(0), + vh.dis_img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getPhoto().get(1), + vh.dis_img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } else if (datas.get(position).getPhoto().size() == 3) { + vh.dis_img_01.setVisibility(View.VISIBLE); + vh.dis_img_02.setVisibility(View.VISIBLE); + vh.dis_img_03.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getPhoto().get(0), + vh.dis_img_01, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getPhoto().get(1), + vh.dis_img_02, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getPhoto().get(2), + vh.dis_img_03, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + } + + imageSource.add(vh.dis_img_01); + imageSource.add(vh.dis_img_02); + imageSource.add(vh.dis_img_03); + + for (int i = 0; i < imageSource.size(); i++) { + imageSource.get(i).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (datas.get(position).getPhoto().size() > 0) { + ArrayList urls = new ArrayList(); + for (int i = 0; i < datas.get(position).getPhoto() + .size(); i++) { + urls.add(new ViewImageInfo(i, + Url.urlHtml + + datas.get(position) + .getPhoto().get(i), + Url.urlHtml + + datas.get(position) + .getPhoto().get(i))); + } + + CCPAppManager.startChattingImageViewAction(context, + 0, urls); + // DiscussionFragment.isLookingImg = 1; + } + + } + + }); + } + + } + + // 名称 + vh.tv_case_name.setText(datas.get(position).getExpert_name()); + // 日期 + if("0".equals(datas.get(position).getExamine_status())) + { + vh.tv_case_date.setText("待审核"); + + } + else + { + vh.tv_case_date.setText(datas.get(position).getTime() + ""); + } + + return convertView; + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + public static class ViewHolder { + public ImageView im_pic; + public TextView tv_case_name, tv_case_hos, tv_case_date, tv_comment, + tv_gandan_comments, tv_tag_1, tv_tag_2, tv_tag_3; + public LinearLayout ll_imgs, ll_tags; + public ImageView dis_img_01, dis_img_02, dis_img_03; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GroupingAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GroupingAdapter.java new file mode 100644 index 0000000..df4e469 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/GroupingAdapter.java @@ -0,0 +1,300 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AddGroupActivity; +import cn.shangyu.gdxzExpert.activity.GroupingActivity; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.Group; +import cn.shangyu.gdxzExpert.bean.GroupPatientList.PatientData; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class GroupingAdapter extends BaseExpandableListAdapter { + Activity mActivity; + List group; + + public GroupingAdapter(Activity mActivity, List group) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + this.group = group; + + } + + @Override + public int getGroupCount() { + // TODO Auto-generated method stub + for (int i = group.size()-1;i>=0;i--){ + if (group.get(i)==null){ + group.remove(i); + } + } + return group.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + // TODO Auto-generated method stub + for (int i = group.get(groupPosition).patientList.size()-1;i>=0;i--){ + if (group.get(groupPosition).patientList.get(i)==null){ + group.get(groupPosition).patientList.remove(i); + } + } + return group.get(groupPosition).patientList.size(); + } + + @Override + public Object getGroup(int groupPosition) { + // TODO Auto-generated method stub + return group.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + // TODO Auto-generated method stub + return group.get(groupPosition).patientList.get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + // TODO Auto-generated method stub + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + // TODO Auto-generated method stub + return childPosition; + } + + @Override + public boolean hasStableIds() { + // TODO Auto-generated method stub + return false; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, + View convertView, ViewGroup parent) { + GroupViewHolder gvh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_group_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_group); + } + gvh = new GroupViewHolder(); + gvh.mGroupName = (TextView) convertView + .findViewById(R.id.tv_item_group_name); + gvh.mGroupCount = (TextView) convertView + .findViewById(R.id.tv_item_group_num); + gvh.mGroupChenge = (TextView) convertView + .findViewById(R.id.tv_item_group_chenge); + gvh.mGroupJianTou = (ImageView) convertView + .findViewById(R.id.iv_group_jiantou); + convertView.setTag(gvh); + } else { + gvh = (GroupViewHolder) convertView.getTag(); + } + gvh.mGroupName.setText(group.get(groupPosition).name); + gvh.mGroupCount.setText(group.get(groupPosition).patientNum); + + if (isExpanded) { + + if(CommonUtil.BigModule()) + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupup_big); + } + else + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupup); + } + } else { + if(CommonUtil.BigModule()) + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupright_big); + } + else + { + gvh.mGroupJianTou.setImageResource(R.drawable.groupright); + } + } + gvh.mGroupChenge.setTag(groupPosition); + gvh.mGroupChenge.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, AddGroupActivity.class); + intent.putExtra("uuid", group.get((Integer) v.getTag()).uuid); + intent.putExtra("groupname",group.get((Integer) v.getTag()).name); +// intent.putExtra("type",group.get((Integer) v.getTag()).type); + mActivity.startActivityForResult(intent, + GroupingActivity.GET_GROUP_RESULt); + } + }); + + + if (group.get(groupPosition).type==1||"0".equals(group.get(groupPosition).uuid)){//系统建的分组和uuid="0"不显示编辑 + gvh.mGroupChenge.setVisibility(View.GONE); + + }else { + gvh.mGroupChenge.setVisibility(View.VISIBLE); + } + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, + boolean isLastChild, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ChildViewHolder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_patient_list_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_patient_list); + } + + mHolder = new ChildViewHolder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_touxiang); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name); + mHolder.tvnickname = (TextView) convertView + .findViewById(R.id.tv_nick_name); + mHolder.tv_followtime=convertView.findViewById(R.id.tv_followtime); + mHolder.iv_editpatient=convertView.findViewById(R.id.iv_editpatient); + if(CommonUtil.BigModule()) + { + mHolder.v0=convertView.findViewById(R.id.v0); + mHolder.v1=convertView.findViewById(R.id.v1); + } + convertView.setTag(mHolder); + } else { + mHolder = (ChildViewHolder) convertView.getTag(); + } + // 给控件赋值. + PatientData p = group.get(groupPosition).patientList.get(childPosition); + // 1.随访关系 2.包月服务关系 (type==2即为VIP)3.既是随访又是vip + Drawable rightDrawable; + if (p!=null){ + if (2 == p.type || 3 == p.type) { + rightDrawable = mActivity.getResources() + .getDrawable(R.drawable.vip); + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + } else { + rightDrawable = null; + } + mHolder.tvTitle.setCompoundDrawables(null, null, rightDrawable, null); + // 姓名 + if (StringUtil.isEmpty(p.nickname)){ + mHolder.tvTitle.setText(p.realName); + }else { + mHolder.tvTitle.setText(p.nickname); + } + if(CommonUtil.BigModule()) + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + else + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + + } + mHolder.tv_followtime.setVisibility(View.VISIBLE); + if (!StringUtil.isEmpty(p.join_date)){ + mHolder.iv_editpatient.setVisibility(View.INVISIBLE); + mHolder.tv_followtime.setText("随访于"+p.join_date.split(" ")[0]); + }else { + mHolder.tv_followtime.setVisibility(View.GONE); + } + if(CommonUtil.BigModule()) + { + if(isLastChild) + { + mHolder.v0.setVisibility(View.GONE); + mHolder.v1.setVisibility(View.VISIBLE); + } + else + { + mHolder.v0.setVisibility(View.VISIBLE); + mHolder.v1.setVisibility(View.GONE); + } + } + + return convertView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + // TODO Auto-generated method stub + return true; + } + + private class GroupViewHolder { + TextView mGroupName; + TextView mGroupCount; + TextView mGroupChenge; + ImageView mGroupJianTou; + } + + private class ChildViewHolder { + public TextView tvnickname; + public ImageView ivImage; + public TextView tvTitle,tv_followtime; + public ImageView iv_editpatient; + public View v0,v1; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HbsagAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HbsagAdapter.java new file mode 100644 index 0000000..e9983d2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HbsagAdapter.java @@ -0,0 +1,112 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PatientCaseBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class HbsagAdapter extends BaseAdapter { + Context context; + List list; + public HbsagAdapter(Context context,List list) { + this.context=context; + this.list=list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return i; + } + + @Override + public long getItemId(int i) { + return 0; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder holder=null; + if(view==null) + { + view= UIUtils.inflate(R.layout.hbsa_item); + holder=new ViewHolder(); + holder.title=view.findViewById(R.id.title); + holder.num1=view.findViewById(R.id.num1); + holder.num2=view.findViewById(R.id.num2); + holder.num3=view.findViewById(R.id.num3); + holder.num4=view.findViewById(R.id.num4); + holder.status1=view.findViewById(R.id.status1); + holder.status2=view.findViewById(R.id.status2); + view.setTag(holder); + } + else + { + holder= (ViewHolder) view.getTag(); + } + if(list.get(i).getGroupNo()!=null&&list.get(i).getGroupNo().length()>3) + { + holder.title.setText("病例入组编号:"+list.get(i).getGroupNo().substring(3)); + } + + holder.num1.setText("患者编号:"+list.get(i).getPatientNo()); + holder.num2.setText("研究中心:"+list.get(i).getDepartmentName()); + holder.num3.setText("创建医生:"+list.get(i).getEmployeeName()); + holder.num4.setText("修改时间:"+list.get(i).getUpdateTime()); + if("0".equals(list.get(i).getFreezeFlag())) + { + holder.status1.setBackground(context.getDrawable(R.drawable.status2_bg)); + holder.status1.setText("冻结"); + holder.status1.setTextColor( Color.parseColor("#999999")); + + } + else + { + holder.status1.setBackground(context.getDrawable(R.drawable.status1_bg)); + holder.status1.setText("正常"); + holder.status1.setTextColor( Color.parseColor("#498DE1")); + + } + if("0".equals(list.get(i).getSdvStatus())) + { + holder.status2.setBackground(context.getDrawable(R.drawable.status3_bg)); + holder.status2.setText("未SDV"); + holder.status2.setTextColor( Color.parseColor("#ffff4d4f")); + + } + else if("1".equals(list.get(i).getSdvStatus())) + { + holder.status2.setBackground(context.getDrawable(R.drawable.status4_bg)); + holder.status2.setText("部分SDV"); + holder.status2.setTextColor( Color.parseColor("#ff52c41a")); + + } + else + { + holder.status2.setBackground(context.getDrawable(R.drawable.status5_bg)); + holder.status2.setText("已SDV"); + holder.status2.setTextColor( Color.parseColor("#ff3cc7c0")); + + } + + + + return view; + } + public class ViewHolder + { + TextView title,num1,num2,num3,num4,status1,status2; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryAdapter.java new file mode 100644 index 0000000..ff8ea23 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryAdapter.java @@ -0,0 +1,171 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MeetingBean.MeatingList; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class HistoryAdapter extends BaseAdapter { + Activity mActivity; + List mList; + + // public List Positions; + + public HistoryAdapter(Activity mActivity, List mList) { + + this.mActivity = mActivity; + this.mList = mList; + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_meeting); + vh = new ViewHolder(); + vh.mDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_date); + vh.mTitle = (TextView) convertView + .findViewById(R.id.tv_item_meeting_title); + vh.mTTime = (TextView) convertView + .findViewById(R.id.tv_item_meeting_ttime); + vh.mLocation = (TextView) convertView + .findViewById(R.id.tv_item_meeting_location); + vh.mTDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_tdate); + vh.mImage = (ImageView) convertView + .findViewById(R.id.iv_item_meeting_image); + vh.mV_color = convertView.findViewById(R.id.item_color); + vh.mRl = (RelativeLayout) convertView + .findViewById(R.id.rl_item_meeting); + vh.mFl = (FrameLayout) convertView.findViewById(R.id.fl_meeting); + vh.mZhiBo = (TextView) convertView.findViewById(R.id.tv_meeting); + vh.mIv_bofang = (ImageView) convertView + .findViewById(R.id.iv_meeting_bofang); + // vh.mSpareZhiBo = (TextView) convertView + // .findViewById(R.id.tv_meeting_bei); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (mList.get(position).getCount() == 0) { + vh.mTDate.setVisibility(View.VISIBLE); + vh.mTDate.setText(mList.get(position).getBegin_date() + .substring(0, 4) + + "年" + + mList.get(position).getBegin_date().substring(5, 7) + + "月"); + } else { + vh.mTDate.setVisibility(View.GONE); + } + + vh.mTTime.setText(mList.get(position).getBegin_date().substring(8)); + vh.mDate.setText(getTime(mList.get(position).getBegin_date(), mList + .get(position).getEnd_date())); + vh.mTitle.setText(mList.get(position).getTitle()); + vh.mLocation.setText(mList.get(position).getLocation()); + + if (mList.get(position).getCount() % 4 == 0) { + vh.mV_color.setBackgroundResource(R.drawable.radiu1); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu1)); + } else if (mList.get(position).getCount() % 4 == 1) { + vh.mV_color.setBackgroundResource(R.drawable.radius2); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu2)); + } else if (mList.get(position).getCount() % 4 == 2) { + vh.mV_color.setBackgroundResource(R.drawable.radius3); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu3)); + } else { + vh.mV_color.setBackgroundResource(R.drawable.radiu4); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu4)); + } + vh.mZhiBo.setVisibility(View.GONE); + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.VISIBLE); + + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + + vh.mFl.setTag(position); + if (!TextUtils.isEmpty(mList.get(position).getLiveimg()) + && !"null".equals(mList.get(position).getLiveimg())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + mList.get(position).getLiveimg(), + vh.mImage, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default1)); + } else { + vh.mImage.setImageResource(R.drawable.home_scroll_default1); + } + return convertView; + } + + class ViewHolder { + TextView mTitle, mTTime, mDate, mLocation, mTDate, mZhiBo; + // mSpareZhiBo; + View mV_color; + ImageView mImage, mIv_bofang; + RelativeLayout mRl; + FrameLayout mFl; + } + + public String getTime(String str1, String str2) { + if (str1.subSequence(0, 10).equals(str2.subSequence(0, 10))) { + return str1.replaceAll("-", ".").subSequence(0, 10).toString(); + } + StringBuilder sb = new StringBuilder(); + sb.append(str1.replaceAll("-", ".").subSequence(0, 10)); + sb.append("-"); + sb.append(str2.replaceAll("-", ".").subSequence(0, 10)); + return sb.toString(); + + } + + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryMeetingAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryMeetingAdapter.java new file mode 100644 index 0000000..b4a23f6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HistoryMeetingAdapter.java @@ -0,0 +1,225 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ZhiBoActivity; +import cn.shangyu.gdxzExpert.bean.MeetingBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class HistoryMeetingAdapter extends BaseAdapter { + Activity mActivity; + List mList; + + // public List Positions; + + public HistoryMeetingAdapter(Activity mActivity, List mList) { + + this.mActivity = mActivity; + this.mList = mList; + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_meeting_his); + vh = new ViewHolder(); + vh.mDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_date); + vh.mTitle = (TextView) convertView + .findViewById(R.id.tv_item_meeting_title); + vh.mTTime = (TextView) convertView + .findViewById(R.id.tv_item_meeting_ttime); + vh.mLocation = (TextView) convertView + .findViewById(R.id.tv_item_meeting_location); + vh.mTDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_tdate); + vh.mImage = (ImageView) convertView + .findViewById(R.id.iv_item_meeting_image); + vh.mV_color = convertView.findViewById(R.id.item_color); + vh.mRl = (RelativeLayout) convertView + .findViewById(R.id.rl_item_meeting); + vh.mFl = (FrameLayout) convertView.findViewById(R.id.fl_meeting); + vh.mZhiBo = (TextView) convertView.findViewById(R.id.tv_meeting); + vh.mIv_bofang = (ImageView) convertView + .findViewById(R.id.iv_meeting_bofang); + // vh.mSpareZhiBo = (TextView) convertView + // .findViewById(R.id.tv_meeting_bei); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } +// if (mList.get(position).getCount() == 0) { +// vh.mTDate.setVisibility(View.VISIBLE); +// vh.mTDate.setText(mList.get(position).getBegin_date() +// .substring(0, 4) +// + "年" +// + mList.get(position).getBegin_date().substring(5, 7) +// + "月"); +// } else { +// vh.mTDate.setVisibility(View.GONE); +// } + + vh.mTTime.setText(mList.get(position).getBegin_date().substring(8)); + vh.mDate.setText(getTime(mList.get(position).getBegin_date(), mList + .get(position).getEnd_date())); + vh.mTitle.setText(mList.get(position).getTitle()); + vh.mLocation.setText(mList.get(position).getLocation()); + + if (mList.get(position).getCount() % 4 == 0) { + vh.mV_color.setBackgroundResource(R.drawable.radiu1); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu1)); + } else if (mList.get(position).getCount() % 4 == 1) { + vh.mV_color.setBackgroundResource(R.drawable.radius2); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu2)); + } else if (mList.get(position).getCount() % 4 == 2) { + vh.mV_color.setBackgroundResource(R.drawable.radius3); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu3)); + } else { + vh.mV_color.setBackgroundResource(R.drawable.radiu4); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu4)); + } + if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("1")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.VISIBLE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("预告"); + } else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("2")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.VISIBLE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("直播中"); + } else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("3")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.GONE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.GONE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("已结束"); + } else { + vh.mIv_bofang.setVisibility(View.GONE); + vh.mZhiBo.setVisibility(View.GONE); + // vh.mSpareZhiBo.setVisibility(View.GONE); + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + pp.height = dip2px(mActivity, 75); + vh.mFl.setVisibility(View.GONE); + vh.mRl.setLayoutParams(pp); + } + vh.mFl.setTag(position); + vh.mFl.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mList.get((Integer) v.getTag()).getStatus().equals("3")) { + return; + } + Intent intent = new Intent(mActivity, ZhiBoActivity.class); + intent.putExtra("newsTitle", mList.get((Integer) v.getTag()) + .getTitle()); + intent.putExtra("url", mList.get((Integer) v.getTag()) + .getLiveurl()); + intent.putExtra("summary", mList.get((Integer) v.getTag()) + .getLiveimg()); + intent.setType("zhibo"); + mActivity.startActivity(intent); + } + }); + if (!TextUtils.isEmpty(mList.get(position).getLiveimg()) + && !"null".equals(mList.get(position).getLiveimg())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + mList.get(position).getLiveimg(), + vh.mImage, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default1)); + } else { + vh.mImage.setImageResource(R.drawable.home_scroll_default1); + } + return convertView; + } + + class ViewHolder { + TextView mTitle, mTTime, mDate, mLocation, mTDate, mZhiBo; + // mSpareZhiBo; + View mV_color; + ImageView mImage, mIv_bofang; + RelativeLayout mRl; + FrameLayout mFl; + } + + public String getTime(String str1, String str2) { + if (str1.subSequence(0, 10).equals(str2.subSequence(0, 10))) { + return str1.replaceAll("-", ".").subSequence(0, 10).toString(); + } + StringBuilder sb = new StringBuilder(); + sb.append(str1.replaceAll("-", ".").subSequence(0, 10)); + sb.append("-"); + sb.append(str2.replaceAll("-", ".").subSequence(0, 10)); + return sb.toString(); + + } + + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HonorAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HonorAdapter.java new file mode 100644 index 0000000..2abc96e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HonorAdapter.java @@ -0,0 +1,116 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MyNewBean; + +public class HonorAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + int ranking; + + + public HonorAdapter(Context context, List datas,int ranking) { + this.context=context; + this.datas=datas; + this.ranking=ranking; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.honor_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.tv_h = view.findViewById(R.id.tv_h); + viewHolder.im_yx = view.findViewById(R.id.im_yx); + + viewHolder.tv_h.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + + if(ranking>0&&position==0) + { + holder.tv_h.setText("随访达人 | "+"排名"+ranking); + Glide.with(context).asBitmap().load(R.drawable.suifang) + .into(holder.im_yx); + } + else + { + if(ranking>0) + { + holder.tv_h.setText(datas.get(position-1).getNick_name()); + Glide.with(context).asBitmap().load(R.drawable.yxb) + .into(holder.im_yx); + } + else + { + holder.tv_h.setText(datas.get(position).getNick_name()); + Glide.with(context).asBitmap().load(R.drawable.yxb) + .into(holder.im_yx); + } + + } + + + + + } + + @Override + public int getItemCount() { + if(ranking>0) + { + return datas.size()+1; + } + else + { + return datas.size(); + } + + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + private TextView tv_h; + private ImageView im_yx; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + + } + + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HospitalAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HospitalAdapter.java new file mode 100644 index 0000000..1752be7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HospitalAdapter.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class HospitalAdapter extends BaseAdapter { + String[] strTools; + int[] strStatus; + Context context; + public HospitalAdapter(Context context, String[] strTools, int[] strStatus) { + this.strTools=strTools; + this.strStatus=strStatus; + this.context=context; + } + + @Override + public int getCount() { + return strTools.length; + } + + @Override + public Object getItem(int i) { + return i; + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder holder; + if(view==null){ + if(BigModule()) + { + view = UIUtils.inflate(R.layout.item_list_points_big); + } + else + { + view = UIUtils.inflate(R.layout.item_list_points); + } + + holder = new ViewHolder(); + + holder.item_name=view.findViewById(R.id.item_name); + + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + holder.item_name.setText(strTools[i]); + if(strStatus[i]==1) + { + holder.item_name.setTextColor(context.getResources().getColor(R.color.tab_text_sel)); + } + else + { + if(BigModule()) + { + holder.item_name.setTextColor(context.getResources().getColor(com.netease.nim.uikit.R.color.color_333333)); + } + else + { + holder.item_name.setTextColor(context.getResources().getColor(R.color.tab_text_nor)); + } + + } + return view; + } + public class ViewHolder + { + + TextView item_name; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HuiAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HuiAdapter.java new file mode 100644 index 0000000..66c26d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/HuiAdapter.java @@ -0,0 +1,103 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.forward.androids.views.ShapeImageView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; + +public class HuiAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public HuiAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.hui_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_c = view.findViewById(R.id.im_c); + viewHolder.r_c=view.findViewById(R.id.r_c); + RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels- CommonUtil.dip2px(context, 30) ) / 2f), + ViewGroup.LayoutParams.MATCH_PARENT); + viewHolder.r_c.setLayoutParams(params); +// viewHolder.l_c=view.findViewById(R.id.l_c); + +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels - CommonUtil.dip2px(context, 5)) / 4.5f), +// ViewGroup.LayoutParams.MATCH_PARENT);平分屏幕宽度,显示4个半 +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels- CommonUtil.dip2px(context, 10) ) / 1.8f), +// ViewGroup.LayoutParams.MATCH_PARENT); +// viewHolder.l_c.setLayoutParams(params); +// viewHolder.l_c.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); +// } +// } +// }); + viewHolder.im_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); + ImageLoader.getInstance().displayImage( + datas.get(position), + holder.im_c, + ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + ShapeImageView im_c; + RelativeLayout r_c; +// LinearLayout l_c; + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ImageIllnessAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ImageIllnessAdapter.java new file mode 100644 index 0000000..2d7bafd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ImageIllnessAdapter.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + + +/** + * Created by wangchengxin on 2019/7/25. + */ + +public class ImageIllnessAdapter extends BaseAdapter { + + private Context context; + private String[] split; + public ImageIllnessAdapter(Context context, String imgs) { + this.context = context; + split = imgs.split(","); + } + + @Override + public int getCount() { + return split.length; + } + + @Override + public Object getItem(int position) { + return split[position]; + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + if (convertView == null) { + holder = new ViewHolder(); + convertView = UIUtils.inflate(R.layout.item_imgillness); + holder.iv = convertView.findViewById(R.id.iv_imgillness); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } +// ImageLoader.getInstance().displayImage(Url.urlHtml+ split[position],holder.iv); + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.img_gandan_house); + requestOptions.error(R.drawable.img_gandan_house); + Glide.with(context) + .load(Url.urlHtml+ split[position]) + .apply(requestOptions) + .into(holder.iv); + return convertView; + } + class ViewHolder { + ImageView iv; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/IncomeDetailsAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/IncomeDetailsAdapter.java new file mode 100644 index 0000000..97f24a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/IncomeDetailsAdapter.java @@ -0,0 +1,121 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.OrderBean.OrderData; + +/** + * LibraryListAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:收支明细适配器 + */ +public class IncomeDetailsAdapter extends BaseAdapter { + private Context mContext; + private List mList; + + public IncomeDetailsAdapter(Context context, List list) { + this.mContext = context; + this.mList = list; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, R.layout.item_income_details, null); + + holder.order = (TextView) convertView.findViewById(R.id.item_order); + holder.time = (TextView) convertView.findViewById(R.id.item_time); + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.type = (TextView) convertView.findViewById(R.id.item_type); + holder.price = (TextView) convertView.findViewById(R.id.item_price); + holder.status = (TextView) convertView.findViewById(R.id.item_status); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + final OrderData data = mList.get(position); + holder.order.setText("订单编号:" + data.getOrderNum()); + + if (!TextUtils.isEmpty(data.getOrderDate()) && data.getOrderDate().length() >= 10) { + holder.time.setText(data.getOrderDate().substring(0, 10)); + }else if(!TextUtils.isEmpty(data.getOrderDate())){ + holder.time.setText(data.getOrderDate()); + } + holder.name.setText(data.getRealName()); + + String strType = ""; + int type = Integer.parseInt(data.getOrderType()); + if (type == 1) { + strType = "电话咨询"; + } else if (type == 2) { + strType = "门诊预约"; + } else if (type == 3) { + strType = "按月定制"; + } else if (type == 4) { + strType = "鲜花"; + } + holder.type.setText(strType); + if ("1".equals(data.getIsMonth())) {//是不是包月 1是 0 不是 + holder.price.setText("包月免费"); + }else{ + holder.price.setText("¥" + data.getPrice()); + } + String strStatus = ""; + int status = Integer.parseInt(data.getOrderStatus()); + if (status == 1) { + strStatus = "待审核"; + } else if (status == 2) { + strStatus = "已审核"; + } else if (status == 3) { + strStatus = "未通过审核"; + } else if (status == 4) { + strStatus = "订单已失效"; + } else if (status == 5) { + strStatus = "患者取消订单"; + } else if (status == 6) { + strStatus = "患者取消订单"; + } else if (status == 7) { + strStatus = "医生取消订单"; + } else if (status == 8) { + strStatus = "已完成"; + } else if (status == 9) { + strStatus = "已结算"; + } + holder.status.setText(strStatus); + return convertView; + } + + class Holder { + TextView order, time, name, type, price, status; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/JingAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/JingAdapter.java new file mode 100644 index 0000000..c68b92f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/JingAdapter.java @@ -0,0 +1,123 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; +import cn.forward.androids.views.ShapeImageView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; + +public class JingAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public JingAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view; + if(datas.size()==1) + { + view = LayoutInflater.from(context).inflate(R.layout.jing_item1, + parent, false); + } + else + { + view = LayoutInflater.from(context).inflate(R.layout.jing_item, + parent, false); + } + + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_c = view.findViewById(R.id.im_c); + viewHolder.tv_n=view.findViewById(R.id.tv_n); + viewHolder.tv_update=view.findViewById(R.id.tv_update); + +// viewHolder.l_c=view.findViewById(R.id.l_c); + +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels - CommonUtil.dip2px(context, 5)) / 4.5f), +// ViewGroup.LayoutParams.MATCH_PARENT);平分屏幕宽度,显示4个半 +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels- CommonUtil.dip2px(context, 10) ) / 1.8f), +// ViewGroup.LayoutParams.MATCH_PARENT); +// viewHolder.l_c.setLayoutParams(params); +// viewHolder.l_c.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); +// } +// } +// }); + viewHolder.im_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); + + ImageLoader.getInstance().displayImage( + datas.get(position).getIndex_img(), + holder.im_c, + ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + holder.tv_n.setText(datas.get(position).getTitle()); + if(datas.get(position).getUpload_num().equals(datas.get(position).getVideo_num())) + { + holder.tv_update.setText("已完结"); + } + else + { + holder.tv_update.setText("已更新"+datas.get(position).getUpload_num()+"课时"); + } + + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + ShapeImageView im_c; + TextView tv_n,tv_update; +// LinearLayout l_c; + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/KejianAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/KejianAdapter.java new file mode 100644 index 0000000..49e1178 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/KejianAdapter.java @@ -0,0 +1,591 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_COURSEWARE_CHECK; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_GUIDE_CHECK; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_GUIDE_DOWNLOAD; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.umeng.analytics.MobclickAgent; + +import java.io.File; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CourseUrlDetailActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.PdfViewActivity; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +public class KejianAdapter extends RecyclerView.Adapter{ + private Context context; + private List datas; + private Boolean guide; + + public KejianAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + + + } + + public void setGuide(Boolean guide) { + this.guide = guide; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.kejian_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.tv_open = view.findViewById(R.id.tv_open); + viewHolder.tv_n=view.findViewById(R.id.tv_n); + viewHolder.r_kj=view.findViewById(R.id.r_kj); + viewHolder.item_iv_down=view.findViewById(R.id.item_iv_down); + + +// viewHolder.tv_open.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); +// } +// } +// }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + + holder.tv_n.setText(datas.get(position).getTitle()); + if(2==getDownloadS(datas.get(position).getArticle_uuid())||4==getDownloadS(datas.get(position).getArticle_uuid())) + { + holder.tv_open.setText("查看"); + holder.tv_open.setVisibility(View.VISIBLE); + holder.item_iv_down.setVisibility(View.GONE); + } + else if(1==getDownloadS(datas.get(position).getArticle_uuid())||5==getDownloadS(datas.get(position).getArticle_uuid())) + { + holder.tv_open.setText("下载中"); + holder.tv_open.setVisibility(View.VISIBLE); + holder.item_iv_down.setVisibility(View.GONE); + } + else + { + holder.tv_open.setText("未下载"); + holder.tv_open.setVisibility(View.GONE); + holder.item_iv_down.setVisibility(View.VISIBLE); + + } + holder.r_kj.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(guide) + { + if(2==getDownloadS(datas.get(position).getArticle_uuid())) + + { + String downloadFilePath = BookDownloadSqlManager + .getDownloadFilePath(datas.get(position).getArticle_uuid()); + if(downloadFilePath.contains(Constant.OldfilePath)) + { + // 路径为空,则删除不存在文件的记录 + +// DownloadModel downloadModel = new DownloadModel(datas +// .get(position).getArticle_uuid()); +// downloadModel.setState(4);// 0未下载,1下载中,2已下载,4曾经下载过但是路径换了 +// BookDownloadSqlManager +// .updateDownloadState(downloadModel); +// BookDownloadSqlManager.delDownladInfo(datas.get(position).getArticle_uuid()); +// notifyDataSetChanged(); +// ToastUtil.showToast("文件不存在,请重新下载"); + showDialog(Url.urlHtml +datas.get(position).getPath(), datas.get(position).getTitle(),position); + return; + } + if (!TextUtils.isEmpty(downloadFilePath)) { + MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_CHECK); + // 路径不为空,打开该指南 + libraryUuid=datas.get(position).getArticle_uuid(); + if(context instanceof MainActivity) + { + ( (MainActivity)context).needreportDetail("诊疗指南", datas.get(position).getTags(),datas.get(position).getTitle()); + } + openFile(downloadFilePath); + } else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(datas.get(position).getArticle_uuid()); + notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + + + + } + else + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadPdfen( + Url.urlHtml +datas.get(position).getPath(), + datas.get(position).getTitle(), position, + holder); + } else { + EasyWindow.with((Activity) context).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission((Activity)context, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + downloadPdfen( + Url.urlHtml +datas.get(position).getPath(), + datas.get(position).getTitle(), position, + holder); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + + // 下载 + downloadPdfen( + Url.urlHtml +datas.get(position).getPath(), + datas.get(position).getTitle(), position, + holder); + } + } + + } + else + { + MobclickAgent.onEvent(context,EXPERT_HOME_COURSEWARE_CHECK); + Intent intent = new Intent(context, CourseUrlDetailActivity.class); + intent.putExtra("url", datas.get(position).getPath()); + intent.putExtra("title", datas.get(position).getTitle()); + intent.putExtra("uuid", datas.get(position).getArticle_uuid()); + context.startActivity(intent); + } + } + }); + +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); +// ImageLoader.getInstance().displayImage( +// datas.get(position), +// holder.im_c, +// ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + + + } + + /** + * 数据库查询下载状态 0未下载,1下载中,2已下载 + * @param uuid + * @return + */ + private int getDownloadS(String uuid) { + // TODO Auto-generated method stub + int downloadState; + if(guide) + { + downloadState = BookDownloadSqlManager.getDownloadState(uuid); + } + else + { + downloadState = CoursewareBookDownloadSqlManager.getDownloadState(uuid); + Log.d("aaaaaa","downloadState"+downloadState+uuid); + } + + + return downloadState; + } + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + TextView tv_open,tv_n; + RelativeLayout r_kj; + ImageView item_iv_down; + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } + String libraryUuid=""; + public void openFile(final String path) { + File file = new File(path); + + + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(context, PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + context.startActivity(intent1); + }else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + context.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } + + } + else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(libraryUuid); + notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + } +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/治疗指南/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/治疗指南/"; + private HttpHandler hand; + /** + * @param + * + * + */ + protected void downloadPdfen(String url, final String name, + final int position, final ViewHolder holder) { + MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_DOWNLOAD); + // TODO Auto-generated method stub + if(StringUtil.isEmpty(url)) + { + ToastUtil.showToast("下载地址有误"+url); + return; + } + if(context instanceof MainActivity) + { + ( (MainActivity)context).needreportDown(name,datas.get(position).getTags(),datas.get(position).getGuide_type(),1+"","诊疗指南"); + } + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + downloadModel.setTitle(datas.get(position).getTitle());// 设置标题 +// downloadModel.setTime(datas.get(position).getTitle());// 设置标题 + if(!StringUtil.isEmpty(datas.get(position).getCreate_date())) { + downloadModel.setTime(datas.get(position).getCreate_date()); + } else { + downloadModel.setTime(DateUtil + .getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + downloadModel.setPath(datas.get(position).getPath());// 设置url路劲 + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .insertDownload(downloadModel); + notifyDataSetChanged(); + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .insertDownload(downloadModel); + notifyDataSetChanged(); +// if ((int) holder.bt_down_load.getTag() == position) { +// // 异步显示 +// // holder.bt_down_load.setText("查看全文"); +// holder.bt_down_load.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.lookmess)); +// holder.tv_down.setVisibility(View.GONE); +// } +// if (BookshelfListActivity.getInstance() != null) { +// BookshelfListActivity.getInstance() +// .notifyAdapter(); +// } +// if (MyDownloadActivity.getInstance() != null) { +// MyDownloadActivity.getInstance() +// .notifyAdapter(); +// } + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + notifyDataSetChanged(); +// if ((int) holder.bt_down_load.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("下载全文"); +// holder.bt_down_load +// .setBackgroundDrawable(mContext +// .getResources() +// .getDrawable( +// R.drawable.download)); +// holder.tv_down.setVisibility(View.GONE); +// } +// if (BookshelfListActivity.getInstance() != null) { +// BookshelfListActivity.getInstance() +// .notifyAdapter(); +// } + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + public void showDialog(String url, final String name, + final int position) + { + LayoutInflater inflater = LayoutInflater.from(context); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(context).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(context.getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + downloadPdfennew(url,name,position); + dialog4.dismiss(); + + } + }); + } + protected void downloadPdfennew(String url, final String name, + final int position) { + MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_DOWNLOAD); + // TODO Auto-generated method stub + if(StringUtil.isEmpty(url)) + { + ToastUtil.showToast("下载地址有误"+url); + return; + } + if(context instanceof MainActivity) + { + ( (MainActivity)context).needreportDown(name,datas.get(position).getTags(),datas.get(position).getGuide_type(),1+"","诊疗指南"); + } + + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); +// downloadModel.setTitle(datas.get(position).getTitle());// 设置标题 +// if(!StringUtil.isEmpty(datas.get(position).getCreate_date())) { +// downloadModel.setTime(datas.get(position).getCreate_date()); +// } else { +// downloadModel.setTime(DateUtil +// .getCurDateStr("yyyy-MM-dd HH:mm:ss")); +// } + downloadModel.setPath(datas.get(position).getPath());// 设置url路劲 + downloadModel.setFilePath(path);// 设置文件下载路径 +// downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(5);// 0未下载,1下载中,2已下载,4更改路径重新下载,但未下载,5,下载中 + BookDownloadSqlManager + .updateDownloadState(downloadModel); +// BookDownloadSqlManager +// .insertDownload(downloadModel); + notifyDataSetChanged(); + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 +// BookDownloadSqlManager +// .insertDownload(downloadModel); + BookDownloadSqlManager + .updateDownloadFilePath(downloadModel); + BookDownloadSqlManager + .updateDownloadState(downloadModel); + notifyDataSetChanged(); + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + notifyDataSetChanged(); + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryBookshelfAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryBookshelfAdapter.java new file mode 100644 index 0000000..a6e3d10 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryBookshelfAdapter.java @@ -0,0 +1,128 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * LibraryBookshelfAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆书架适配器 + */ +public class LibraryBookshelfAdapter extends BaseAdapter { + private Context mContext; + private List mList; + private int type; + + public LibraryBookshelfAdapter(Context context, List list, + int type) { + this.mContext = context; + this.mList = list; + this.type = type; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + if(CommonUtil.BigModule()) + { + convertView = View.inflate(mContext, + R.layout.fragment_bookshelf_item_big, null); + } + else + { + convertView = View.inflate(mContext, + R.layout.fragment_bookshelf_item, null); + } + + + holder.name = (TextView) convertView.findViewById(R.id.item_name);// 标题名字 + holder.img = (ImageView) convertView.findViewById(R.id.item_img); + holder.tv_num = (TextView) convertView.findViewById(R.id.tv_num); + holder.item = convertView.findViewById(R.id.item_view); + + // 计算GridView的列宽 +// int width = mContext.getResources().getDisplayMetrics().widthPixels; +// int w = width - CommonUtil.dip2px(mContext, 40); +// double h = (w / 3) * 1.415; +// LayoutParams i = holder.img.getLayoutParams(); +// i.width = LayoutParams.WRAP_CONTENT; +// i.height = (int) h; +// holder.img.setLayoutParams(i); +// LogUtil.i("width=" + width + "w=" + w + "h=" + h); + + if (type == 1) { + holder.name.setVisibility(View.INVISIBLE); + holder.tv_num.setVisibility(View.INVISIBLE); + } else { + holder.name.setVisibility(View.VISIBLE); + holder.tv_num.setVisibility(View.VISIBLE); + } + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + if (position>=0){ + final LibraryData data = mList.get(position); + if (type == 1) { + holder.name.setText(" "); + } else { + holder.name.setText(data.name); + holder.tv_num.setText("(共"+data.total+"份)"); + } + + if (!TextUtils.isEmpty(data.imgs)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + data.imgs, + holder.img, + ImageOptions.getImageOptions(R.drawable.book_default)); + + } else { + holder.img.setImageResource(R.drawable.book_default); + } + } + + return convertView; + } + + public class Holder { + public ImageView img; + public TextView name; + public TextView tv_num; + View item; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryListAdapter.java new file mode 100644 index 0000000..a5b1ac5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LibraryListAdapter.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +/** + * LibraryListAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆(权威速递、常用工具)适配器 + */ +public class LibraryListAdapter extends BaseAdapter { + private Context mContext; + private List mList; + + public LibraryListAdapter(Context context, List list) { + this.mContext = context; + this.mList = list; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, R.layout.fragment_library_list_item, null); + + holder.name = (TextView) convertView.findViewById(R.id.item_name); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + final LibraryData data = mList.get(position); + holder.name.setText(data.name); + + return convertView; + } + + class Holder { + TextView name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LinChuangAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LinChuangAdapter.java new file mode 100644 index 0000000..1054eab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LinChuangAdapter.java @@ -0,0 +1,105 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.EventListBean.EventBase; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import android.app.Activity; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class LinChuangAdapter extends BaseAdapter { + + public List datas; + public Activity mActivity; + + public LinChuangAdapter(List datas, Activity mActivity) { + + this.datas = datas; + this.mActivity = mActivity; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_gd_event); + vh = new ViewHolder(); + vh.mTitle = (TextView) convertView + .findViewById(R.id.tv_item_gdtitle); + vh.mTime = (TextView) convertView.findViewById(R.id.tv_item_gdtime); + vh.mUp = (TextView) convertView.findViewById(R.id.tv_item_gdup); + vh.mOverTime = (TextView) convertView + .findViewById(R.id.tv_item_gdisover); + vh.mImage = (ImageView) convertView + .findViewById(R.id.iv_item_gdimage); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTitle.setText(datas.get(position).getTitle()); + vh.mTime.setText("招募截至:" + + datas.get(position).getEnd_date().substring(0, 10)); + if ("0".equals(datas.get(position).getSort())) { + vh.mUp.setVisibility(View.VISIBLE); + } else { + vh.mUp.setVisibility(View.GONE); + } + if ("0".equals(datas.get(position).getStatus())) { + vh.mOverTime.setVisibility(View.VISIBLE); + vh.mTitle.setTextColor(mActivity.getResources().getColor( + R.color.hint_text_color)); + } else { + vh.mOverTime.setVisibility(View.GONE); + vh.mTitle.setTextColor(mActivity.getResources().getColor( + R.color.black)); + } + if (!TextUtils.isEmpty(datas.get(position).getImgpath()) + && !"null".equals(datas.get(position).getImgpath())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + datas.get(position).getImgpath(), + vh.mImage, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default1)); + } else { + vh.mImage.setImageResource(R.drawable.home_scroll_default1); + } + return convertView; + } + + class ViewHolder { + TextView mTitle, mTime, mUp, mOverTime; + ImageView mImage; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LogistAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LogistAdapter.java new file mode 100644 index 0000000..f716a82 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LogistAdapter.java @@ -0,0 +1,81 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static com.netease.nim.uikit.common.util.sys.TimeUtil.isSameYear; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LogisticsBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class LogistAdapter extends BaseAdapter { + List beanList; + + public LogistAdapter(List beanList) { + this.beanList = beanList; + } + + @Override + public int getCount() { + return beanList.size(); + } + + @Override + public Object getItem(int i) { + return beanList.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View convertView, ViewGroup viewGroup) { + viewHolder viewHolder=null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.logist_item); + viewHolder=new viewHolder(); + viewHolder.time1=convertView.findViewById(R.id.time1); + viewHolder.time2=convertView.findViewById(R.id.time2); + viewHolder.tv_content=convertView.findViewById(R.id.tv_content); + viewHolder.imview=convertView.findViewById(R.id.imview); + convertView.setTag(viewHolder); + } + else + { + viewHolder= (viewHolder) convertView.getTag(); + } + if(isSameYear(beanList.get(i).getFtime().substring(0, 4))) + { + viewHolder.time1.setText(beanList.get(i).getFtime().substring(5, 10)); + } + else + { + viewHolder.time1.setText(beanList.get(i).getFtime().substring(0, 10)); + + } + viewHolder.time2.setText(beanList.get(i).getFtime().substring(11, 16)); + if(beanList.get(i).getStatusCode().contains("3")) + { + viewHolder.imview.setImageResource(R.drawable.log_checked); + } + else + { + viewHolder.imview.setImageResource(R.drawable.log_check); + } + viewHolder.tv_content.setText(beanList.get(i).getContext()); + return convertView; + } + public class viewHolder + { + TextView time1,time2,tv_content; + ImageView imview; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LoveListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LoveListAdapter.java new file mode 100644 index 0000000..64edff8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/LoveListAdapter.java @@ -0,0 +1,113 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LoveListBean.LoveData; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * ScienceListAdapter.java + * + * @author liufang + * @date 2015-11-6 上午9:48:06 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:爱心捐助列表的适配器 + */ +public class LoveListAdapter extends BaseAdapter { + private Context mContext; + private List mData; + + public LoveListAdapter(Context context, List mList) { + this.mContext = context; + this.mData = mList; + } + + @Override + public int getCount() { + return mData.size(); + } + + @Override + public Object getItem(int position) { + return mData.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = UIUtils.inflate(R.layout.love_list_item); + holder.img =convertView + .findViewById(R.id.item_img); + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.time = (TextView) convertView.findViewById(R.id.item_time); + holder.subtitle = (TextView) convertView + .findViewById(R.id.item_subtitle); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + LoveData love = mData.get(position); + + String img = love.photo; + if (StringUtil.notEmpty(img)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + img, + holder.img, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + holder.img.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + String name = love.name; + if (StringUtil.notEmpty(name)) { + holder.name.setText(name); + } else { + holder.name.setText("为空"); + } + String strTime = love.createDate; + if (!TextUtils.isEmpty(love.createDate) + && love.createDate.length() > 10) { + strTime = love.createDate.substring(0, 10); + } + // if (StringUtil.notEmpty(strTime)) { + // if (strTime.length() > 10) { + // strTime = strTime.substring(0, 10); + // } + // } else { + // strTime = ""; + // } + holder.time.setText(strTime); + holder.subtitle.setText(love.content); + + return convertView; + } + + class Holder { + ImageView img; + TextView name, time, subtitle; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingAdapter.java new file mode 100644 index 0000000..e4cc0ff --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingAdapter.java @@ -0,0 +1,241 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ZhiBoActivity; +import cn.shangyu.gdxzExpert.bean.MeetingBean.MeatingList; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class MeetingAdapter extends BaseAdapter { + Activity mActivity; + List mList; + + // public List Positions; + + public MeetingAdapter(Activity mActivity, List mList) { + + this.mActivity = mActivity; + this.mList = mList; + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_meeting); + vh = new ViewHolder(); + vh.mDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_date); + vh.mTitle = (TextView) convertView + .findViewById(R.id.tv_item_meeting_title); + vh.mTTime = (TextView) convertView + .findViewById(R.id.tv_item_meeting_ttime); + vh.mLocation = (TextView) convertView + .findViewById(R.id.tv_item_meeting_location); + vh.mTDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_tdate); + vh.mImage = (ImageView) convertView + .findViewById(R.id.iv_item_meeting_image); + vh.mV_color = convertView.findViewById(R.id.item_color); + vh.mRl = (RelativeLayout) convertView + .findViewById(R.id.rl_item_meeting); + vh.mFl = (FrameLayout) convertView.findViewById(R.id.fl_meeting); + vh.mZhiBo = (TextView) convertView.findViewById(R.id.tv_meeting); + vh.mIv_bofang = (ImageView) convertView + .findViewById(R.id.iv_meeting_bofang); + // vh.mSpareZhiBo = (TextView) convertView + // .findViewById(R.id.tv_meeting_bei); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (mList.get(position).getCount() == 0) { + vh.mTDate.setVisibility(View.VISIBLE); + vh.mTDate.setText(mList.get(position).getBegin_date() + .substring(0, 4) + + "年" + + mList.get(position).getBegin_date().substring(5, 7) + + "月"); + } else { + vh.mTDate.setVisibility(View.GONE); + } + + vh.mTTime.setText(mList.get(position).getBegin_date().substring(8)); + vh.mDate.setText(getTime(mList.get(position).getBegin_date(), mList + .get(position).getEnd_date())); + vh.mTitle.setText(mList.get(position).getTitle()); + vh.mLocation.setText(mList.get(position).getLocation()); + + if (mList.get(position).getCount() % 4 == 0) { + vh.mV_color.setBackgroundResource(R.drawable.radiu1); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu1)); + } else if (mList.get(position).getCount() % 4 == 1) { + vh.mV_color.setBackgroundResource(R.drawable.radius2); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu2)); + } else if (mList.get(position).getCount() % 4 == 2) { + vh.mV_color.setBackgroundResource(R.drawable.radius3); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu3)); + } else { + vh.mV_color.setBackgroundResource(R.drawable.radiu4); + vh.mTTime.setTextColor(mActivity.getResources().getColor( + R.color.radiu4)); + } + if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("1")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.VISIBLE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("预告"); + } else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("2")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.VISIBLE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("直播中"); + } else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("3")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.GONE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.GONE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("已结束"); + }else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("4")) { + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + vh.mIv_bofang.setVisibility(View.GONE); + vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.GONE); + pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); + vh.mRl.setLayoutParams(pp); + vh.mZhiBo.setText("回放中"); + } else { + vh.mIv_bofang.setVisibility(View.GONE); + vh.mZhiBo.setVisibility(View.GONE); + // vh.mSpareZhiBo.setVisibility(View.GONE); + ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); + vh.mRl.getLayoutParams(); + pp.height = dip2px(mActivity, 75); + vh.mFl.setVisibility(View.GONE); + vh.mRl.setLayoutParams(pp); + } + vh.mFl.setTag(position); + vh.mFl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mList.get((Integer) v.getTag()).getStatus().equals("3")) { + return; + } +// if(mActivity instanceof MainActivity) { +// ((MainActivity)mActivity).needreportSome("watch_live", mList.get((Integer) v.getTag()) +// .getTitle(),mList.get((Integer) v.getTag()).getTags()); +// } + Intent intent = new Intent(mActivity, ZhiBoActivity.class); + intent.putExtra("newsTitle", mList.get((Integer) v.getTag()) + .getTitle()); + intent.putExtra("url", mList.get((Integer) v.getTag()) + .getLiveurl()); + intent.putExtra("summary", mList.get((Integer) v.getTag()) + .getLiveimg()); + intent.setType("zhibo"); + mActivity.startActivity(intent); + } + }); + if (!TextUtils.isEmpty(mList.get(position).getLiveimg()) + && !"null".equals(mList.get(position).getLiveimg())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + mList.get(position).getLiveimg(), + vh.mImage, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default1)); + } else { + vh.mImage.setImageResource(R.drawable.home_scroll_default1); + } + return convertView; + } + + class ViewHolder { + TextView mTitle, mTTime, mDate, mLocation, mTDate, mZhiBo; + // mSpareZhiBo; + View mV_color; + ImageView mImage, mIv_bofang; + RelativeLayout mRl; + FrameLayout mFl; + } + + public String getTime(String str1, String str2) { + if (str1.subSequence(0, 10).equals(str2.subSequence(0, 10))) { + return str1.replaceAll("-", ".").subSequence(0, 10).toString(); + } + StringBuilder sb = new StringBuilder(); + sb.append(str1.replaceAll("-", ".").subSequence(0, 10)); + sb.append("-"); + sb.append(str2.replaceAll("-", ".").subSequence(0, 10)); + return sb.toString(); + + } + + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingTimeAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingTimeAdapter.java new file mode 100644 index 0000000..c15925e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MeetingTimeAdapter.java @@ -0,0 +1,78 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +// 显示时间的adapter类 +public class MeetingTimeAdapter extends BaseAdapter { + private ArrayList list; + private int position; + + public MeetingTimeAdapter(ArrayList list) { + this.list = list; + } + + public void setPosition(int position) { + this.position = position; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder viewHolder; + if (arg1 == null) { + viewHolder = new ViewHolder(); + arg1 = UIUtils.inflate(R.layout.item_meeting_time); + viewHolder.tv_time = (TextView) arg1.findViewById(R.id.tv_time); + viewHolder. v_line = (View) arg1.findViewById(R.id.v_line); + viewHolder. iv_time = (ImageView) arg1.findViewById(R.id.iv_time); + arg1.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) arg1.getTag(); + } + + viewHolder.tv_time.setText(list.get(arg0).toString()); + if (position==arg0) { + viewHolder.iv_time.setVisibility(View.VISIBLE); + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.top_title)); + viewHolder.tv_time.setTextColor(UIUtils.getColor(R.color.top_title)); + }else{ + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.devider_line)); + viewHolder.tv_time.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + viewHolder.iv_time.setVisibility(View.GONE); + } + return arg1; + } + + class ViewHolder{ + TextView tv_time; + View v_line; + ImageView iv_time; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MessageAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MessageAdapter.java new file mode 100644 index 0000000..f0462e9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MessageAdapter.java @@ -0,0 +1,77 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.graphics.Color; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class MessageAdapter extends BaseAdapter +{ + private List list; + public MessageAdapter(List messageBeans) { + list=messageBeans; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return list.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder viewHolder; + if (view == null) { + viewHolder = new ViewHolder(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.message_item_big); + } + else + { + view = UIUtils.inflate(R.layout.message_item); + } + + viewHolder.tv_time = view.findViewById(R.id.tv_time); + viewHolder. tv_title = view.findViewById(R.id.tv_title); + viewHolder. tv_content = view.findViewById(R.id.tv_content); + + view.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) view.getTag(); + } + viewHolder.tv_time.setText(list.get(i).getCreate_date()); + viewHolder. tv_title.setText(list.get(i).getTitle()); + if("1".equals(list.get(i).getIs_read())) + { + viewHolder. tv_title.setTextColor(Color.parseColor("#333333")); + } + else + { + viewHolder. tv_title.setTextColor(Color.parseColor("#EB322D")); + } + viewHolder. tv_content.setText(list.get(i).getContent()); + return view; + } + public class ViewHolder{ + TextView tv_time,tv_title,tv_content; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MindAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MindAdapter.java new file mode 100644 index 0000000..2d0a8c7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MindAdapter.java @@ -0,0 +1,100 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ExpertMindList.mindList.expertMind; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class MindAdapter extends BaseAdapter { + private List beanlists; + + public MindAdapter(List beanlists) { + this.beanlists = beanlists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_get_mind_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_get_mind); + } + vh = new ViewHolder(); + vh.mIv_pic = convertView + .findViewById(R.id.iv_patient_touxiang); + vh.mTv_content = (TextView) convertView + .findViewById(R.id.item_mind_comtent); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.item_mind_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.item_mind_time); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (!TextUtils.isEmpty(beanlists.get(position).getUser_photo()) + && !"null".equals(beanlists.get(position).getUser_photo())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + beanlists.get(position).getUser_photo(), + vh.mIv_pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + vh.mIv_pic.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + vh.mTv_content.setText(beanlists.get(position).getMessage()); + vh.mTv_name.setText(beanlists.get(position).getUser_name()); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); +// +// String sd = sdf.format(new Date(Long.parseLong(beanlists.get(position) +// .getCreate_date()) * 1000)); +// vh.mTv_time.setText(sd); + vh.mTv_time.setText(beanlists.get(position).getCreate_date().substring(0, 10)); + return convertView; + } + + class ViewHolder { + public ImageView mIv_pic; + public TextView mTv_time, mTv_name, mTv_content; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MoreNoticeAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MoreNoticeAdapter.java new file mode 100644 index 0000000..1d0bad4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MoreNoticeAdapter.java @@ -0,0 +1,77 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class MoreNoticeAdapter extends BaseAdapter { + + private Context mContent; + private List list1; + + public MoreNoticeAdapter(Context mContent, List list1) { + super(); + this.mContent = mContent; + this.list1 = list1; + } + + public MoreNoticeAdapter() { + super(); + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list1.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return list1.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + Holder holder; + + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContent, R.layout.item_more_notice, + null); + holder.tv_more_notice = (TextView) convertView + .findViewById(R.id.tv_more_notice); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + holder.tv_more_notice.setText(list1.get(position)); + + return convertView; + } + + class Holder { + // RoundImageView img; + TextView tv_more_notice; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyCollectAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyCollectAdapter.java new file mode 100644 index 0000000..71fd6f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyCollectAdapter.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +/** + * LibraryListAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆(权威速递、常用工具)适配器 + */ +public class MyCollectAdapter extends BaseAdapter { + private Context mContext; + private List mList; + + public MyCollectAdapter(Context context, List list) { + this.mContext = context; + this.mList = list; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, R.layout.activity_my_collect_item, null); + holder.img = (ImageView) convertView.findViewById(R.id.item_img); + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.summary = (TextView) convertView.findViewById(R.id.item_summary); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + + final LibraryData data = mList.get(position); + holder.name.setText(data.title); + + return convertView; + } + + class Holder { + ImageView img; + TextView name, summary; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyDownloadAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyDownloadAdapter.java new file mode 100644 index 0000000..771c6c3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyDownloadAdapter.java @@ -0,0 +1,365 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Environment; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +/** + * LibraryListAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆(权威速递、常用工具)适配器 + */ +@SuppressLint("ResourceAsColor") +public class MyDownloadAdapter extends BaseAdapter { + private Context mContext; + private List mList; + public MyDownloadAdapter(Context context, ArrayList list) { + this.mContext = context; + this.mList = list; + this.progress = new int[mList.size()]; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + final Holder holder; + if (convertView == null) { + holder = new Holder(); + if(CommonUtil.BigModule()) + { + convertView = View.inflate(mContext, R.layout.activity_bookshelf_list_item_big, null); + holder.iv_down = convertView + .findViewById(R.id.item_tv_down1); + } + else + { + convertView = View.inflate(mContext, R.layout.activity_bookshelf_list_item, null); + holder.iv_down = (ImageView) convertView.findViewById(R.id.item_iv_down); + } + + + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.date = (TextView) convertView.findViewById(R.id.item_date); + holder.tv_down = (TextView) convertView.findViewById(R.id.item_tv_down); + + holder.iv_right = (ImageView) convertView.findViewById(R.id.item_iv_right); + holder.iv_right.setVisibility(View.GONE); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + final DownloadModel data = mList.get(position); + if(data.getFilePath()!=null&&data.getFilePath().contains(Constant.OldfilePath) + &&(data.getState() == 2||data.getState() == 4)) + { + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.VISIBLE); + holder.tv_down.setText("未下载"); + } + else if (BookDownloadSqlManager.getDownloadState(data.getUuid())== 1||BookDownloadSqlManager.getDownloadState(data.getUuid()) == 5) {//0未下载,1下载中,2已下载 + holder.tv_down.setVisibility(View.VISIBLE); + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("下载中"); + }else if(BookDownloadSqlManager.getDownloadState(data.getUuid()) == 2){ + holder.tv_down.setVisibility(View.VISIBLE); + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("查看"); + }else{ + holder.tv_down.setVisibility(View.GONE); + holder.iv_down.setVisibility(View.VISIBLE); + holder.tv_down.setText("未下载"); + } + holder.name.setText(data.getTitle()); +// if(data.getTime() != null){ +// if(data.getTime().length() > 10){ +// String tim = data.getTime().substring(0,10); +// holder.date.setText(tim); +// }else{ +// holder.date.setText(data.getTime()); +// } +// } + if (!TextUtils.isEmpty(data.getTime()) && data.getTime().length() > 10) { + holder.date.setText(data.getTime().substring(0,10)); + }else if(!TextUtils.isEmpty(data.getTime())){ + holder.date.setText(data.getTime()); + } + + holder.iv_down.setTag(position); + holder.tv_down.setTag(position); +// holder.iv_down.setOnClickListener(new OnClickListener() { +// +// @Override +// public void onClick(View v) { +// // TODO Auto-generated method stub +// // ToastUtil.showMessage("下载已完成"); +// if (TextUtils.isEmpty(data.getPath())) { +// ToastUtil.showToast("不存在此指南,无法下载。"); +// return; +// } +// if(data.getState()==5) +// { +// ToastUtil.showToast("下载中..."); +// return; +// } +// downloadPdfen(Url.urlHtml+data.getPath(), data.getTitle(), position); +// } +// +// }); + + return convertView; + } + + class Holder { + public ImageView iv_right; + public View iv_down; + public TextView tv_down; + public TextView date; + ImageView img; + TextView name, size, time, state; + } + + /** + * 下载文件 + * downloadPdf + * @param position + * @param holder + * + * @param path + * void + * @param title + */ +// private String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() +// + "/gdxzExpert/download/治疗指南/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/治疗指南/"; + private HttpHandler hand; + private int[] progress; + private ArrayList currentprogress = new ArrayList(); + + + protected void downloadPdf(final String url, final String name, final int position, final Holder holder) { + // TODO Auto-generated method stub + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + final String path = filePath + name + ".pdf"; + //下载的路径,及app安装包的命名 + //*************************************************** + + hand = http.download(url, path, + false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + @Override + public void onStart() { + + ToastUtil.showToast("开始下载"+name); + } + + @Override + public void onLoading(long total, long current, + boolean isUploading) { + // progress[position] = (int) (current * 100 / total); + // currentprogress.add(position, progress[position]+""); + // LogUtil.i(name+"下载进度:"+progress[position]); + + //插入 + // DownloadModel downloadModel = new DownloadModel(mList.get(position).uuid); + // downloadModel.setTitle(mList.get(position).title); + // downloadModel.setTime(mList.get(position).updateTime); + // downloadModel.setPath(mList.get(position).path); + // downloadModel.setFilePath(path); + // downloadModel.setFilePath(path); + // downloadModel.setFileFormat(".pdf"); + // downloadModel.setState(1);// 0未下载,1下载中,2已下载 + // BookDownloadSqlManager.insertDownload(downloadModel); + + if ((int) holder.iv_down.getTag() == position) { + //异步显示 + holder.iv_down.setVisibility(View.GONE); + // holder.tv_down.setText(progress[position]+"%"); + holder.tv_down.setText("下载中"); + holder.tv_down.setVisibility(View.VISIBLE); + } + } + + @Override + public void onSuccess(ResponseInfo responseInfo) { + ToastUtil.showToast(name+"下载完成!"); + //插入 + DownloadModel downloadModel = new DownloadModel(mList.get(position).getUuid()); + downloadModel.setFilePath(path); + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager.insertDownload(downloadModel); + if ((int) holder.iv_down.getTag() == position) { + //异步显示 + holder.iv_down.setVisibility(View.GONE); + holder.tv_down.setText("查看"); + holder.tv_down.setVisibility(View.VISIBLE); + } + //打开文件 + // openFile(path); + } + + + @Override + public void onFailure(HttpException error, String msg) { + ToastUtil.showToast(name+"下载失败!"); + LogUtil.i("下载失败msg = "+msg+",error = "+error.getExceptionCode()+","+error.getMessage()); + if ((int) holder.iv_down.getTag() == position) { + //异步显示 + holder.iv_down.setVisibility(View.VISIBLE); + holder.tv_down.setVisibility(View.GONE); + } + //maybe the file has downloaded completely + // if (msg.contains("maybe the file has downloaded completely")) { + // + // } + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + private String filePathnew =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/治疗指南/"; + protected void downloadPdfen(String url, final String name,final int position) { +// MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_DOWNLOAD); + // TODO Auto-generated method stub + if(StringUtil.isEmpty(url)) + { + ToastUtil.showToast("下载地址有误"+url); + return; + } + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePathnew + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(mList + .get(position).getUuid()); + downloadModel.setFilePath(path); + downloadModel.setState(5);// 0未下载,1下载中,2已下载 + mList.get(position).setState(5); + BookDownloadSqlManager + .updateDownloadState(downloadModel); + notifyDataSetChanged(); + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + mList.get(position).setFilePath(path); + + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).getUuid()); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + mList.get(position).setState(2); + BookDownloadSqlManager + .updateDownloadState(downloadModel); + BookDownloadSqlManager.updateDownloadFilePath(downloadModel); + mList.get(position).setFilePath(path); + notifyDataSetChanged(); + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 +// openFile(path,"",position,"",""); + + + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(mList + .get(position).getUuid()); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + notifyDataSetChanged(); + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyMindAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyMindAdapter.java new file mode 100644 index 0000000..e21b49b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyMindAdapter.java @@ -0,0 +1,80 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.sql.Date; +import java.text.SimpleDateFormat; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ExpertMindList.mindList.expertMind; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +public class MyMindAdapter extends BaseAdapter { + private List beanlists; + + public MyMindAdapter(List beanlists) { + this.beanlists = beanlists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_my_mind); + vh = new ViewHolder(); + vh.mTv_jine = (TextView) convertView + .findViewById(R.id.tv_my_mind_jine); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_my_mind_time); + vh.mTv_type = (TextView) convertView + .findViewById(R.id.tv_my_mind_type); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + String sd = sdf.format(new Date(Long.parseLong(beanlists.get(position) + .getCreate_date())*1000)); + vh.mTv_time.setText(sd); + + vh.mTv_jine.setText(String.format("%.2f", beanlists.get(position) + .getXinyi() / 100)); + if (beanlists.get(position).getOrder_status().equals("canceled")) { + vh.mTv_type.setText("已取消"); + } else if (beanlists.get(position).getOrder_status().equals("paid")) { + vh.mTv_type.setText("已支付"); + } else { + vh.mTv_type.setText("待支付"); + } + + return convertView; + } + + class ViewHolder { + TextView mTv_time, mTv_jine, mTv_type; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyPagerAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyPagerAdapter.java new file mode 100644 index 0000000..f567c6d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyPagerAdapter.java @@ -0,0 +1,69 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; + +import java.util.ArrayList; +import java.util.List; + +import androidx.viewpager.widget.PagerAdapter; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.utils.Url; + +public class MyPagerAdapter extends PagerAdapter { + public Context ct; + public ArrayList imageSource; + public List paths; + + public MyPagerAdapter(Context ct, ArrayList imageSource) { + this.ct = ct; + this.imageSource = imageSource; + + } + + public void getPath(List paths) { + this.paths = paths; + } + + @Override + public int getCount() { + return imageSource.size(); + } + + @Override + public boolean isViewFromObject(View arg0, Object arg1) { + return arg0 == arg1; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + // 销毁该图片 + container.removeView(imageSource.get(position)); + } + + @Override + public Object instantiateItem(ViewGroup container, final int position) { + container.addView(imageSource.get(position)); + imageSource.get(position).setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (imageSource.size() > 0) { + ArrayList urls = new ArrayList(); + for (int i = 0; i < imageSource.size(); i++) { + urls.add(new ViewImageInfo(i, Url.urlHtml + + paths.get(i), Url.urlHtml + + paths.get(i))); + } + CCPAppManager.startChattingImageViewAction(ct, position,urls); + } + } + }); + return imageSource.get(position); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyProjectAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyProjectAdapter.java new file mode 100644 index 0000000..cd3e4f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyProjectAdapter.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.proMyListBean; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class MyProjectAdapter extends BaseAdapter { + List list; + public MyProjectAdapter(List list) { + this.list=list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return i; + } + + @Override + public long getItemId(int i) { + return 0; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder holder=null; + if(view==null) + { + view= UIUtils.inflate(R.layout.my_project_item); + holder=new ViewHolder(); + holder.title=view.findViewById(R.id.title); + holder.num1=view.findViewById(R.id.num1); + holder.num2=view.findViewById(R.id.num2); + holder.num3=view.findViewById(R.id.num3); + view.setTag(holder); + } + else + { + holder= (ViewHolder) view.getTag(); + } + holder.title.setText(list.get(i).getName()); + holder.num1.setText(list.get(i).getCentreNum()); + holder.num2.setText(list.get(i).getUserNum()); + if(StringUtil.isEmpty(list.get(i).getPlannedNum())) + { + if(StringUtil.isEmpty(list.get(i).getCaseNum())) + { + holder.num3.setText("-/-"); + } + else + { + holder.num3.setText(list.get(i).getCaseNum()+"/-"); + } + } + else + { + + if(StringUtil.isEmpty(list.get(i).getCaseNum())) + { + holder.num3.setText("-/"+list.get(i).getPlannedNum()); + + } + else + { + holder.num3.setText(list.get(i).getCaseNum()+"/"+list.get(i).getPlannedNum()); + } + } + + return view; + } + public class ViewHolder + { + TextView title,num1,num2,num3; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyUserIconAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyUserIconAdapter.java new file mode 100644 index 0000000..9ec8c34 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/MyUserIconAdapter.java @@ -0,0 +1,158 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import androidx.recyclerview.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.Collections; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.GetUserIconBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ItemDragHelperCallback; +import cn.shangyu.gdxzExpert.utils.Url; + + +/** + * Created by WANGChengXin on 2020/3/9. + */ + +public class MyUserIconAdapter extends RecyclerView.Adapter implements ItemDragHelperCallback.OnItemMoveListener { + private final Context context; + private final LayoutInflater inflater; + private List mTables; + private ItemDragHelperCallback mItemDragHelperCallback; + private OnItemClickListener mOnItemClickListener; + private int flag; + + public MyUserIconAdapter(Context context, List tables) { + this.context = context; + this.mTables = tables; + this.inflater = LayoutInflater.from(context); + } + + public void setItemDragHelperCallback(ItemDragHelperCallback itemDragHelperCallback) { + mItemDragHelperCallback = itemDragHelperCallback; + } + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + mOnItemClickListener = onItemClickListener; + } + + @Override + public ChannelViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new ChannelViewHolder(inflater.inflate(R.layout.item_usericon_card, parent, false)); + } + + @Override + public void onBindViewHolder(ChannelViewHolder holder, int position) { + GetUserIconBean.DataBean table = mTables.get(position); + holder.mTextView.setText(table.getName()); + ImageLoader.getInstance().displayImage( + Url.urlHtml + table.getImg(), + holder.mImageView, ImageOptions.getImageOptions() + ); + if (flag==2){ + holder.iv_add.setImageResource(R.drawable.myicon_add); + holder.iv_add.setVisibility(View.VISIBLE); + }else if (flag==1){ + holder.iv_add.setImageResource(R.drawable.myicon_delete); + holder.iv_add.setVisibility(View.VISIBLE); + }else if (flag==3){ + holder.iv_add.setVisibility(View.GONE); + } + handleLongPress(holder, table); + handleOnClick(holder, table); + } + + + public void showChoose(int flag){ + this.flag = flag; + + } + //处理点击事件 + private void handleOnClick(final ChannelViewHolder holder, final GetUserIconBean.DataBean table) { + if (mOnItemClickListener != null) { + holder.mLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + +// if (!table.getNewsChannelFixed()) { + //对项目点击后增删操作的监听 + mOnItemClickListener.onItemClick(view, holder.getLayoutPosition()); +// } + } + }); + } + } + + //处理长按事件 开启ItemDragHelperCallBack拖拽 + private void handleLongPress(ChannelViewHolder holder, final GetUserIconBean.DataBean table) { + if (mItemDragHelperCallback != null) { + holder.mLayout.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { +// mItemDragHelperCallback.setLongPressEnabled(table.getNewsChannelIndex() == 0 ? false : true); + return false; + } + }); + } + } + + @Override + public int getItemCount() { + return mTables.size(); + } + + @Override + public boolean onItemMove(int fromPosition, int toPosition) { + if (isChannelFixed(fromPosition, toPosition)) { + return false; + } + //在我的频道子频道的移动 + Collections.swap(getAdapterData(), fromPosition, toPosition); + notifyItemMoved(fromPosition, toPosition); + //通知顺序变换,存储,设置频道顺序,以及显示的顺序 + System.out.println("发送移动的消息"); +// EventBus.getDefault().post(new ChannelBean(getAdapterData())); + return true; + } + + //不能移动头条 + private boolean isChannelFixed(int fromPosition, int toPosition) { + return fromPosition == 0 || toPosition == 0; + } + + public class ChannelViewHolder extends RecyclerView.ViewHolder { + private ImageView iv_add; + private TextView mTextView; + private ImageView mImageView; + private RelativeLayout mLayout; + + public ChannelViewHolder(View itemView) { + super(itemView); + mImageView = (ImageView) itemView.findViewById(R.id.iv_my_library); + mTextView = (TextView) itemView.findViewById(R.id.tv_tushuguan); + mLayout = (RelativeLayout) itemView.findViewById(R.id.rl_my_library); + iv_add = (ImageView) itemView.findViewById(R.id.iv_add); + } + } + + public List getAdapterData() { + return mTables; + } + + //Item点击事件的监听接口 + public interface OnItemClickListener { + void onItemClick(View view, int position); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewPatientAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewPatientAdapter.java new file mode 100644 index 0000000..4196210 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewPatientAdapter.java @@ -0,0 +1,155 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * 弃用 + * + * 类名称:NewPatientAdapter + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-9-23 下午2:55:39 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class NewPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + private String applyListOperate = Url.getapplyListOperate; + private String uuid; + private Holder mHolder = null; + public NewPatientAdapter(Context context, ArrayList patientList) { + this.context = context; + this.PatientList = patientList; + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_new_patient_list, + null); + mHolder = new Holder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_patient_image); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_patient_date); + mHolder.tvInfo = (TextView) convertView + .findViewById(R.id.tv_patient_info); + mHolder.tvResult = (TextView) convertView + .findViewById(R.id.tv_ok_cancle); + mHolder.btOk = (Button) convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_new_patient_cancle); + convertView.setTag(mHolder); + } else { + mHolder = (Holder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + uuid = p.uuid; + mHolder.tvInfo.setText("我是"+p.realName+","+p.content); + mHolder.tvDate.setText(p.createDate); + if (!TextUtils.isEmpty(p.photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml+p.photo,mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + }else{ + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + + mHolder.btOk.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("ok-position=="+position); + getNewPatientList(applyListOperate, "2"); + } + }); + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("cancle-position=="+position); + getNewPatientList(applyListOperate, "3"); + } + }); + return convertView; + } + + private void getNewPatientList(final String loadUrl, String status) { + RequestParams params = new RequestParams(); + params.addBodyParameter("uuid", uuid);//申请记录uuid + params.addBodyParameter("status", status);//状态(2.同意 3.拒绝) + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + mHolder.tvResult.setText("您已经同意了"); + mHolder.btOk.setVisibility(View.GONE); + mHolder.btCancle.setVisibility(View.GONE); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class Holder { + + public TextView tvResult; + public Button btCancle; + public Button btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewsAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewsAdapter.java new file mode 100644 index 0000000..9be202f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/NewsAdapter.java @@ -0,0 +1,198 @@ +package cn.shangyu.gdxzExpert.adapter; + +import static com.netease.nim.uikit.common.util.sys.TimeUtil.isSameYear; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.NewListBean.NewsList; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * 新闻适配器 + * + * 类名称:NewsAdapter 类描述:TODO 创建人:苏三元 时间:2015-9-24 下午3:12:40 版权:河南商宇科技有限公司--版权所有 + * (c) 2015 + * + */ +public class NewsAdapter extends BaseAdapter { + + private Context context; + private List newsList; + + public NewsAdapter(Context context) { + this.context = context; + // this.newsList = newsList; + } + + @Override + public int getCount() { + return newsList.size(); + } + + public void getDatas(ArrayList newsList) { + this.newsList = newsList; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + NewsViewHolder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, R.layout.item_news_big, null); + } + else + { + convertView = View.inflate(context, R.layout.item_news, null); + } + + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_news_image); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_news_title); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_news_date); + mHolder.tv_Now = (TextView) convertView + .findViewById(R.id.tv_news_now); + mHolder.tvSummary = (TextView) convertView + .findViewById(R.id.tv_news_summary); + // 点赞阅读 + mHolder.tvdianzannum = (TextView) convertView + .findViewById(R.id.tv_dianzan_count); + mHolder.tvreadnum = (TextView) convertView + .findViewById(R.id.tv_read_count); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + NewsList news = newsList.get(position); + mHolder.tvTitle.setText(news.title); + + if (!TextUtils.isEmpty(news.createDate) + && news.createDate.length() > 10) { + if(inNow(news.createDate.substring(0, 10))){ + mHolder.tvDate.setVisibility(View.GONE); + mHolder.tv_Now.setVisibility(View.VISIBLE); + }else{ + mHolder.tv_Now.setVisibility(View.GONE); + mHolder.tvDate.setVisibility(View.VISIBLE); + if(isSameYear(news.createDate.substring(0, 4))) + { + mHolder.tvDate.setText(news.createDate.substring(5, 10)); + } + else + { + mHolder.tvDate.setText(news.createDate.substring(0, 10)); + } + + } + + } else if (!TextUtils.isEmpty(news.createDate)) { + mHolder.tvDate.setText(news.createDate); + } + if (!TextUtils.isEmpty(news.headImg)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + news.headImg, + mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } else { + mHolder.ivImage.setImageResource(R.drawable.default_news_iv); + } + if (!StringUtil.isEmpty(news.summary)) { + mHolder.tvSummary.setText(news.summary); + } else { + mHolder.tvSummary.setText(""); + } + + // 点赞和阅读量 + if (!TextUtils.isEmpty(news.agreenum)) { + Double agree = Double.parseDouble(news.agreenum); + if (agree > 10000) { + double agreeNum = (double) (Math.round((double) agree / 1000) / 10.0); + mHolder.tvdianzannum.setText(agreeNum + "万"); + } else { + mHolder.tvdianzannum.setText(news.agreenum); + } + } else { + mHolder.tvdianzannum.setText(""); + } + if (!TextUtils.isEmpty(news.readnum)) { + Double read = Double.parseDouble(news.readnum); + if (read > 10000) { + double readNum = (double) (Math.round((double) read / 1000) / 10.0); + mHolder.tvreadnum.setText(readNum + "万"); + if(CommonUtil.BigModule()) + { + mHolder.tvreadnum.setText(readNum + "万人观看"); + } + } else { + mHolder.tvreadnum.setText(news.readnum); + if(CommonUtil.BigModule()) + { + mHolder.tvreadnum.setText(news.readnum + "人观看"); + } + } + } else { + mHolder.tvreadnum.setText(""); + } + if(CommonUtil.BigModule()) + { + mHolder.tvSummary.setVisibility(View.GONE); +// mHolder.tv_Now.setVisibility(View.GONE); + } + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class NewsViewHolder { + + public TextView tvreadnum; + public TextView tvdianzannum; + public TextView tvSummary; + public ImageView ivImage; + public TextView tvTitle; + public TextView tvDate; + public TextView tv_Now; + } + + public boolean inNow(String date) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + + String ds1 = formatter.format(new Date()); + if (date.equals(ds1)) { + return true; + } + return false; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/OnRecyclerViewItemClickListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/OnRecyclerViewItemClickListener.java new file mode 100644 index 0000000..49400fc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/OnRecyclerViewItemClickListener.java @@ -0,0 +1,7 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; + +public interface OnRecyclerViewItemClickListener { + void onItemClick(View view, int position); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/OrderAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/OrderAdapter.java new file mode 100644 index 0000000..ac73bb7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/OrderAdapter.java @@ -0,0 +1,252 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.os.CountDownTimer; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.MyOrderBean; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ClipboardUtils; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat1; +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getString; + +public class OrderAdapter extends BaseAdapter { + List data; + private ViewHolder holder; + Context context; + public OrderAdapter(Context context,List data) + { + this.data=data; + this.context=context; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View view, ViewGroup parent) { + holder=null; + if(view==null) + { + view = UIUtils.inflate(R.layout.order_item); + holder =new ViewHolder(); + + holder.tv_num = view.findViewById(R.id.tv_num); + holder.tv_copy=view.findViewById(R.id.tv_copy); + holder.tv_n=view.findViewById(R.id.tv_n); + holder.tv_time=view.findViewById(R.id.tv_time); + holder.tv_rpr=view.findViewById(R.id.tv_rpr); + holder.tv_jifen=view.findViewById(R.id.tv_jifen); + holder.tv_yue=view.findViewById(R.id.tv_yue); + holder.tv_shifu=view.findViewById(R.id.tv_shifu); + holder.tv_l=view.findViewById(R.id.tv_l); + holder.tv_p=view.findViewById(R.id.tv_p); + holder.tv_dtime=view.findViewById(R.id.tv_dtime); + holder.r_y=view.findViewById(R.id.r_y); + holder.r_j=view.findViewById(R.id.r_j); + holder.r_t=view.findViewById(R.id.r_t); + view.setTag(holder); + } + else { + holder = (ViewHolder) view.getTag(); + } + holder.tv_num.setText(data.get(position).getUuid()); + holder.tv_n.setText(data.get(position).getExcellencourse_title()); + long t=Long.valueOf(data.get(position).getCreate_date()+"000"); + Date date = new Date(t); + holder.tv_time.setText(simpleDateFormat1.format(date)); + holder.tv_rpr.setText(fenGetYuanFormat(data.get(position).getAccount())); + holder.r_y.setVisibility(View.GONE); + holder.r_j.setVisibility(View.GONE); + holder.r_t.setVisibility(View.GONE); + holder.tv_p.setVisibility(View.VISIBLE); + if(data.get(position).getChildOrder()!=null&&data.get(position).getChildOrder().size()>0) + { + if("refund".equals(data.get(position).getOrder_status())) + { + for (MyOrderBean.ChilderBean childerBean:data.get(position).getChildOrder()) + { + if("1".equals(childerBean.getOrder_pay_type())) + { + holder.r_y.setVisibility(View.VISIBLE); + holder.tv_yue.setText + ("-"+fenGetYuanFormat(data.get(position).getChildOrder().get(0).getAccount())+"(已退还)"); + break; + } + else if("2".equals(childerBean.getOrder_pay_type())) + { + holder.r_j.setVisibility(View.VISIBLE); + holder.tv_jifen.setText + ("-"+data.get(position).getChildOrder().get(0).getBonuspoints()+"积分"+"(已退还)"); + break; + } + } + } + else + { + for (MyOrderBean.ChilderBean childerBean:data.get(position).getChildOrder()) + { + if("1".equals(childerBean.getOrder_pay_type())) + { + holder.r_y.setVisibility(View.VISIBLE); + holder.tv_yue.setText + ("-"+fenGetYuanFormat(data.get(position).getChildOrder().get(0).getAccount())); + break; + } + else if("2".equals(childerBean.getOrder_pay_type())) + { + holder.r_j.setVisibility(View.VISIBLE); + holder.tv_jifen.setText + ("-"+data.get(position).getChildOrder().get(0).getBonuspoints()+"积分"); + break; + } + } + + } + + } + switch (data.get(position).getOrder_status()) + { + case "paid": + holder.tv_l.setText("查看课程"); + holder.tv_p.setVisibility(View.GONE); + break; + case "created": + holder.r_t.setVisibility(View.VISIBLE); + + new CCountDownTimer(Long.valueOf(data.get(position).getExpire_time())*1000-System.currentTimeMillis(),1000,holder.tv_dtime).start(); + holder.tv_l.setText("继续支付"); + holder.tv_p.setText("取消订单"); + holder.r_t.setVisibility(View.VISIBLE); + break; + case "canceled": + holder.tv_l.setText("查看课程"); + holder.tv_p.setText("已取消"); + break; + case "overtime": + holder.tv_l.setText("查看课程"); + holder.tv_p.setText("支付超时"); + case "refund": + holder.tv_l.setText("查看课程"); + holder.tv_p.setText("支付失败"); + break; + + + } + holder.tv_shifu.setText(fenGetYuanFormat(data.get(position).getPay_account())); + holder.tv_copy.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ClipboardUtils.copyFromEdit(context, + getString(R.string.app_pic), holder.tv_num.getText().toString()); + ToastUtil.showMessage(cn.shangyu.gdxzExpert.R.string.app_copy_ok); + } + }); + return view; + } + public class ViewHolder + { + + TextView tv_num; + TextView tv_copy; + TextView tv_n; + + TextView tv_time,tv_rpr; + TextView tv_jifen; + TextView tv_yue,tv_shifu,tv_l,tv_p,tv_dtime; + RelativeLayout r_y,r_j,r_t; + } + + public class CCountDownTimer extends CountDownTimer + { + + /** + * @param millisInFuture The number of millis in the future from the call + * to {@link #start()} until the countdown is done and {@link #onFinish()} + * is called. + * @param countDownInterval The interval along the way to receive + * {@link #onTick(long)} callbacks. + */ + private TextView textView; + public CCountDownTimer(long millisInFuture, long countDownInterval,TextView textView) { + super(millisInFuture, countDownInterval); + this.textView=textView; + } + + @Override + public void onTick(long millisUntilFinished) { + textView.setText(formatTime(millisUntilFinished)); + } + + @Override + public void onFinish() { + textView.setText("00:00"); + } + /** + * 将毫秒转化为 分钟:秒 的格式 + * + * @param millisecond 毫秒 + * @return + */ + public String formatTime(long millisecond) { + int minute;//分钟 + int second;//秒数 + minute = (int) ((millisecond / 1000) / 60); + second = (int) ((millisecond / 1000) % 60); + if (minute < 10) { + if (second < 10) { + return "0" + minute + ":" + "0" + second; + } else { + return "0" + minute + ":" + second; + } + }else { + if (second < 10) { + return minute + ":" + "0" + second; + } else { + return minute + ":" + second; + } + } + } + +// /** +// * 取消倒计时 +// */ +// public void timerCancel() { +// timer.cancel(); +// } + +// /** +// * 开始倒计时 +// */ +// public void timerStart() { +// timer.start(); +// } + } + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PaperAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PaperAdapter.java new file mode 100644 index 0000000..40648b3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PaperAdapter.java @@ -0,0 +1,246 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.graphics.Color; +import android.os.IBinder; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PaperBean; + +public class PaperAdapter extends BaseAdapter{ + Context context; + Listlist; +// private int selectedEditTextPosition = -1; + public PaperAdapter(Context context, List list) { + this.context = context; + this.list = list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return list.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View convertView, ViewGroup viewGroup) { + final Holder mHolder ; + if (convertView == null) { + + convertView = View.inflate(context, R.layout.item_search, + null); + mHolder = new Holder(); + mHolder.tv1 = convertView + .findViewById(R.id.tv1); + mHolder.im_1 = convertView + .findViewById(R.id.im_1); + mHolder.literature_name1 = convertView + .findViewById(R.id.literature_name1); + mHolder.literature_name2 = convertView + .findViewById(R.id.literature_name2); + mHolder.literature_name3 = convertView + .findViewById(R.id.literature_name3); + mHolder.tv_add=convertView.findViewById(R.id.tv_add); + mHolder.rr=convertView.findViewById(R.id.rr); + mHolder.tv_sheng=convertView.findViewById(R.id.tv_sheng); + convertView.setTag(mHolder); + } else { + mHolder = (Holder) convertView.getTag(); + } + mHolder.position = i; + mHolder.tv1.setText("文献"+(i+1)); + if(list.size()>1) + { + mHolder.im_1.setVisibility(View.VISIBLE); + } + else + { + mHolder.im_1.setVisibility(View.GONE); + } + if(list.size()<5&&(i== (list.size()-1))) + { + mHolder.rr.setVisibility(View.VISIBLE); + mHolder.tv_sheng.setText("还可添加"+(4-i)+"篇"); + } + else + { + mHolder.rr.setVisibility(View.GONE); + mHolder.tv_sheng.setText(""); + } + mHolder.literature_name1.setText(list.get(i).getTitle()); + mHolder.literature_name2.setText(list.get(i).getAuthor()); + mHolder.literature_name3.setText(list.get(i).getName()); + mHolder.im_1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + submitPaper("您是否确定删除该代查项?","确认删除",i); + + } + }); + mHolder.tv_add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + hideSoftKeyboard(); + list.add(new PaperBean()); + notifyDataSetChanged(); + } + }); + mHolder.literature_name1.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void afterTextChanged(Editable s) { + list.get(mHolder.position).setTitle(s.toString()); + } + }); + + mHolder.literature_name2.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void afterTextChanged(Editable s) { + list.get(mHolder.position).setAuthor(s.toString()); + } + }); + mHolder.literature_name3.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void afterTextChanged(Editable s) { + list.get(mHolder.position).setName(s.toString()); + } + }); + + + return convertView; + } +// private TextWatcher mTextWatcher = new MyTextWatcher() { +// @Override +// public void onTextChanged(CharSequence s, int start, int before, int count) { +// if (selectedEditTextPosition != -1) { +//// Log.w("MyEditAdapter", "onTextPosiotion " + selectedEditTextPosition); +// PaperBean itemTest = (PaperBean) getItem(selectedEditTextPosition); +// itemTest.setString1(s.toString()); +// } +// } +// }; + + private void submitPaper(String tishi,String infotitle,int i) + { + + LayoutInflater inflater = LayoutInflater.from(context); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new, null); + AlertDialog dialog3 = new AlertDialog.Builder( + context,AlertDialog.THEME_HOLO_LIGHT).create(); + + Button btn_sure = layout.findViewById(R.id.btn_sure); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + TextView tv_infotitle=layout.findViewById(R.id.tv_infotitle); + btn_sure.setText("确定"); + btn_sure.setTextColor(Color.parseColor("#333333")); + btn_sure.setBackground(null); + btn_cancel.setText("取消"); + btn_cancel.setBackground(null); + tv_tishi.setText(tishi); + tv_infotitle.setText(infotitle); + tv_infotitle.setTextSize(19); + dialog3.show(); + Window window =dialog3.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog3.dismiss(); + list.remove(i); + notifyDataSetChanged(); + } + }); + + } + private class Holder { + int position; + public TextView tv1,tv_add,tv_sheng; + RelativeLayout rr; + public ImageView im_1; + EditText literature_name1,literature_name2,literature_name3; + } +// public class MyTextWatcher implements TextWatcher { +// @Override +// public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { +// +// } +// +// @Override +// public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { +// +// } +// +// @Override +// public void afterTextChanged(Editable editable) { +// +// } +// } +public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager)context + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = ((Activity) context).getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } +} + public abstract class SimpleTextWatcher implements TextWatcher { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter.java new file mode 100644 index 0000000..4189bb4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter.java @@ -0,0 +1,243 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.SectionIndexer; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PatientEditActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +public class PatientAdapter extends BaseAdapter implements SectionIndexer { + + private Context context; + private List PatientList; + + public PatientAdapter(Context context, ArrayList patientList) { + this.context = context; + this.PatientList = patientList; + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, R.layout.item_patient_list_big, + null); + } + else + { + convertView = View.inflate(context, R.layout.item_patient_list, + null); + } + + mHolder = new Holder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_touxiang); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name); + mHolder.tvnickname = (TextView) convertView + .findViewById(R.id.tv_nick_name); + mHolder.tvLetter = (TextView) convertView + .findViewById(R.id.catalog); + mHolder.tv_dieasename = (TextView) convertView + .findViewById(R.id.tv_dieasename); + mHolder.tv_followtime = (TextView) convertView + .findViewById(R.id.tv_followtime); + mHolder.iv_editpatient = (ImageView) convertView + .findViewById(R.id.iv_editpatient); + convertView.setTag(mHolder); + } else { + mHolder = (Holder) convertView.getTag(); + } + + // 给控件赋值. + final PatientData p = PatientList.get(position); + // 1.随访关系 2.包月服务关系 (type==2即为VIP)3.既是随访又是vip + // 根据position获取分类的首字母的Char ascii值 + int section = getSectionForPosition(position); + + // 如果当前位置等于该分类首字母的Char的位置 ,则认为是第一次出现 + if (position == getPositionForSection(section)) { + mHolder.tvLetter.setVisibility(View.VISIBLE); + mHolder.tvLetter.setText(p.getSortLetters()); + } else { + mHolder.tvLetter.setVisibility(View.GONE); + } + + Drawable rightDrawable; + if (2 == p.type || 3 == p.type) { + rightDrawable = context.getResources().getDrawable(R.drawable.vip); + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + } else { + rightDrawable = null; + } + mHolder.tvTitle.setCompoundDrawables(null, null, rightDrawable, null); + // 姓名 + if (StringUtil.isEmpty(p.nickname)){ + mHolder.tvTitle.setText(p.realName); + }else { + mHolder.tvTitle.setText(p.nickname); + } + //患病类型 + String diagnosis = p.diagnosis; + if (!StringUtil.isEmpty(diagnosis)){ + if (diagnosis.contains("甲、乙、丙、丁")){ + mHolder.tv_dieasename.setText("肝炎"); + }else { + mHolder.tv_dieasename.setText(diagnosis); + } + mHolder.tv_dieasename.setVisibility(View.VISIBLE); + + }else { + mHolder.tv_dieasename.setVisibility(View.GONE); + } + + //随访时间 + mHolder.tv_followtime.setVisibility(View.VISIBLE); + mHolder.iv_editpatient.setVisibility(View.VISIBLE); + if (!StringUtil.isEmpty(p.join_date)){ + mHolder.tv_followtime.setText("随访于"+p.join_date.split(" ")[0]); + }else { + mHolder.tv_followtime.setVisibility(View.GONE); + } + + mHolder.iv_editpatient.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(context, PatientEditActivity.class); + intent.putExtra("patientUuid",p.uuid); + context.startActivity(intent); + } + }); + if(CommonUtil.BigModule()) + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + else + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + + if(CommonUtil.BigModule()) + { + mHolder.tv_dieasename.setVisibility(View.GONE); + mHolder.iv_editpatient.setVisibility(View.GONE); + } + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class Holder { + public TextView tvnickname; + public ImageView ivImage; + public TextView tvTitle; + public TextView tvLetter; + public TextView tv_dieasename; + public TextView tv_followtime; + public ImageView iv_editpatient; + } + + @Override + public Object[] getSections() { + // TODO Auto-generated method stub + return null; + } + + @Override + public int getPositionForSection(int sectionIndex) { + // TODO Auto-generated method stub + for (int i = 0; i < getCount(); i++) { + String sortStr = PatientList.get(i).getSortLetters(); + char firstChar = sortStr.toUpperCase().charAt(0); + if (firstChar == sectionIndex) { + return i; + } + } + + return -1; + } + + /** + * 提取英文的首字母,非英文字母用#代替。 + * + * @param str + * @return + */ + private String getAlpha(String str) { + String sortStr = str.trim().substring(0, 1).toUpperCase(); + // 正则表达式,判断首字母是否是英文字母 + if (sortStr.matches("[A-Z]")) { + return sortStr; + } else { + return "#"; + } + } + + @Override + public int getSectionForPosition(int position) { + // TODO Auto-generated method stub + return PatientList.get(position).getSortLetters().charAt(0); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter2.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter2.java new file mode 100644 index 0000000..af2340c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientAdapter2.java @@ -0,0 +1,138 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +public class PatientAdapter2 extends BaseAdapter { + + private Context context; + private List PatientList; + + public PatientAdapter2(Context context, ArrayList patientList) { + this.context = context; + this.PatientList = patientList; + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder mHolder = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(context, + R.layout.item_patient_list_big1, null); + } + else + { + convertView = View.inflate(context, + R.layout.item_patient_list, null); + } + + mHolder = new Holder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_touxiang); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_patient_name); + mHolder.tvnickname = (TextView) convertView + .findViewById(R.id.tv_nick_name); + convertView.setTag(mHolder); + } else { + mHolder = (Holder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + //1.随访关系 2.包月服务关系 (type==2即为VIP)3.既是随访又是vip + Drawable rightDrawable; + if (2 == p.type || 3 == p.type) { + rightDrawable = context.getResources().getDrawable(R.drawable.vip); + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), rightDrawable.getMinimumHeight()); + }else{ + rightDrawable = null; + } + mHolder.tvTitle.setCompoundDrawables(null, null, rightDrawable, null); + // 姓名 + if (StringUtil.isEmpty(p.nickname)){ + mHolder.tvTitle.setText(p.realName); + }else { + mHolder.tvTitle.setText(p.nickname); + } + if(CommonUtil.BigModule()) + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + else + { + // 头像 + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + mHolder.ivImage + .setImageResource(R.drawable.icon_touxiang_persion_gray_big); + + } + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + private class Holder { + public TextView tvnickname; + public ImageView ivImage; + public TextView tvTitle; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientTeachAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientTeachAdapter.java new file mode 100644 index 0000000..728c6fa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PatientTeachAdapter.java @@ -0,0 +1,185 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean.PatientTBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class PatientTeachAdapter extends BaseAdapter { + private List data; + + public PatientTeachAdapter(List data) { + + this.data = data; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (data == null) { + return 0; + } + return data.size(); + } + + public void getDatas(List data) { + this.data = data; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + NewsViewHolder mHolder = null; + if (convertView == null) { +// convertView = UIUtils.inflate(R.layout.item_news); + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_news_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_news); + } + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_news_image); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_news_title); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_news_date); + mHolder.tv_Now = (TextView) convertView + .findViewById(R.id.tv_news_now); + mHolder.tvSummary = (TextView) convertView + .findViewById(R.id.tv_news_summary); + // 点赞阅读 + mHolder.tvdianzannum = (TextView) convertView + .findViewById(R.id.tv_dianzan_count); + mHolder.tvreadnum = (TextView) convertView + .findViewById(R.id.tv_read_count); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientTBean news = data.get(position); + mHolder.tvTitle.setText(news.getTopic()); + + // mHolder.tvDate.setText(news.getModifyDate().substring(5, 10)); + if (!TextUtils.isEmpty(news.getModifyDate()) + && news.getModifyDate().length() > 10) { + if (inNow(news.getModifyDate().substring(0, 10))) { + mHolder.tvDate.setVisibility(View.GONE); + mHolder.tv_Now.setVisibility(View.VISIBLE); + } else { + mHolder.tv_Now.setVisibility(View.GONE); + mHolder.tvDate.setVisibility(View.VISIBLE); + mHolder.tvDate.setText(news.getModifyDate().substring(5, 10)); + } + + } else if (!TextUtils.isEmpty(news.getModifyDate())) { + mHolder.tvDate.setText(news.getModifyDate()); + } + if (!TextUtils.isEmpty(news.getImgPath())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + news.getImgPath(), mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } else { + mHolder.ivImage.setImageResource(R.drawable.default_news_iv); + } + if (!StringUtil.isEmpty(news.getSummary())) { + mHolder.tvSummary.setText(news.getSummary()); + } else { + mHolder.tvSummary.setText(""); + } + + // 点赞和阅读量 + if (!TextUtils.isEmpty(news.getAgreenum())) { + Double agree = Double.parseDouble(news.getAgreenum()); + if (agree > 10000) { + double agreeNum = (double) (Math.round((double) agree / 1000) / 10.0); + mHolder.tvdianzannum.setText(agreeNum + "万"); + } else { + mHolder.tvdianzannum.setText(news.getAgreenum()); + } + } else { + mHolder.tvdianzannum.setText(""); + } + if (!TextUtils.isEmpty(news.getReadnum())) { + Double read = Double.parseDouble(news.getReadnum()); + if (read > 10000) { + double readNum = (double) (Math.round((double) read / 1000) / 10.0); + mHolder.tvreadnum.setText(readNum + "万"); + if(CommonUtil.BigModule()) + { + mHolder.tvreadnum.setText(readNum + "万人观看"); + } + } else { + mHolder.tvreadnum.setText(news.getReadnum()); + if(CommonUtil.BigModule()) + { + mHolder.tvreadnum.setText(news.getReadnum()+"人观看"); + } + } + } else { + mHolder.tvreadnum.setText(""); + } + if(CommonUtil.BigModule()) + { + mHolder.tvSummary.setVisibility(View.GONE); + mHolder.tv_Now.setVisibility(View.GONE); + } + return convertView; + } + + private class NewsViewHolder { + + public TextView tvreadnum; + public TextView tvdianzannum; + public TextView tvSummary; + public ImageView ivImage; + public TextView tvTitle; + public TextView tvDate; + public TextView tv_Now; + } + + public boolean inNow(String date) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + + String ds1 = formatter.format(new Date()); + if (date.equals(ds1)) { + return true; + } + return false; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdappter2.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdappter2.java new file mode 100644 index 0000000..6271ed9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdappter2.java @@ -0,0 +1,123 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.net.Uri; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import com.bumptech.glide.Glide; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PhotoAibum; +import cn.shangyu.gdxzExpert.bean.PhotoItem; + +; + +public class PhotoAdappter2 extends BaseAdapter { + private Context context; + private PhotoAibum aibum; + private ArrayList positions; + private List bitList; + + public PhotoAdappter2(Context context, PhotoAibum aibum) { + this.context = context; + this.aibum = aibum; + List bitList1 = aibum.getBitList(); + Collections.reverse(bitList1); + this.bitList = bitList1; + + } + + @Override + public int getCount() { + + return bitList.size(); + + } + + public void getPosition(ArrayList positions) { + + this.positions = positions; + + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + convertView = View.inflate(context, + R.layout.photoalbum_gridview_item, null); + vh = new ViewHolder(); + vh.iv_image = (ImageView) convertView + .findViewById(R.id.photo_img_view); + vh.iv_select = (ImageView) convertView + .findViewById(R.id.photo_select); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + // Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail( + // context.getContentResolver(), aibum.getBitList().get(position) + // .getPhotoID(), Thumbnails.MICRO_KIND, null); + // vh.iv_image.setImageBitmap(bitmap); + + Uri uri = Uri.fromFile(new File( bitList.get(position).getPath())); + Glide.with(context).load(uri).into(vh.iv_image); + +// List bitList = aibum.getBitList(); +// ImageLoader.getInstance().displayImage("file://" + bitList.get(position).getPath(),vh.iv_image); + if (positions != null) { + if (positions.contains(position + "")) { + vh.iv_select.setImageDrawable(context.getResources() + .getDrawable(R.drawable.cb_on)); + } else { + vh.iv_select.setImageDrawable(context.getResources() + .getDrawable(R.drawable.cb_normal)); + } + } else { + vh.iv_select.setImageDrawable(context.getResources().getDrawable( + R.drawable.cb_normal)); + } + vh.iv_select.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(position); + } + } + }); + return convertView; + + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + class ViewHolder { + ImageView iv_image, iv_select; + } + private ViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(ViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } + public interface ViewItemClickListener { + void onItemClick( int position); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdapter.java new file mode 100644 index 0000000..5a819ff --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAdapter.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class PhotoAdapter extends BaseAdapter { + private List photos; + + public PhotoAdapter(List photos) { + this.photos = photos; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (photos == null) { + return 0; + } + return photos.size(); + } + + public void getDatas(List photos) { + this.photos = photos; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return photos.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + viewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_gv_photo_item); + vh = new viewHolder(); + vh.mIv_photo = (RoundImageView) convertView + .findViewById(R.id.item_iv_select); + + convertView.setTag(vh); + } else { + vh = (viewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage(Url.urlHtml + photos.get(position), vh.mIv_photo, + ImageOptions.getImageOptions(R.drawable.default_video)); + + return convertView; + } + + class viewHolder { + RoundImageView mIv_photo; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAibumAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAibumAdapter.java new file mode 100644 index 0000000..8aff29b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PhotoAibumAdapter.java @@ -0,0 +1,136 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.ContentResolver; +import android.content.Context; +import android.net.Uri; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; + +import java.io.File; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PhotoAibum; +import cn.shangyu.gdxzExpert.bean.PhotoItem; + +public class PhotoAibumAdapter extends BaseAdapter { + private List aibumList; + private Context context; + private ViewHolder holder; + // BitmapCache cache; + ContentResolver cr; + + public PhotoAibumAdapter(List list, Context context) { + // cache = new BitmapCache(); + this.aibumList = list; + this.context = context; + cr = context.getContentResolver(); + } + + // ImageCallback callback = new ImageCallback() { + // @Override + // public void imageLoad(ImageView imageView, Bitmap bitmap, + // Object... params) { + // if (imageView != null && bitmap != null) { + // String url = (String) params[0]; + // if (url != null && url.equals((String) imageView.getTag())) { + // ((ImageView) imageView).setImageBitmap(bitmap); + // } else { + // Log.e("photo", "callback, bmp not match"); + // } + // } else { + // Log.e("photo", "callback, bmp null"); + // } + // } + // }; + + @Override + public int getCount() { + return aibumList.size(); + } + + @Override + public Object getItem(int position) { + return aibumList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = (LinearLayout) LayoutInflater.from(context).inflate( + R.layout.photoalbum_item, null); + holder = new ViewHolder(); + holder.iv = (ImageView) convertView + .findViewById(R.id.photoalbum_item_image); + holder.tv = (TextView) convertView + .findViewById(R.id.photoalbum_item_name); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + /** 通过ID 获取缩略图 */ + // Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(context + // .getContentResolver(), aibumList.get(position).getBitmap(), + // Thumbnails.MICRO_KIND, null); + // holder.iv.setImageBitmap(bitmap); + List bitList = aibumList.get(position).getBitList(); + Uri uri = Uri.fromFile(new File(aibumList.get(position).getBitList().get(bitList.size()-1).getPath())); + Glide.with(context).load(uri).into(holder.iv); +// Log.e("info","BitmapPath = "+ aibumList.get(position).getBitmapPath()); + +// ImageLoader.getInstance().displayImage("file://" + aibumList.get(position).getBitList().get(bitList.size()-1).getPath(),holder.iv); + holder.tv.setText(aibumList.get(position).getName() + " ( "+ aibumList.get(position).getCount() + " )"); + return convertView; + } + + static class ViewHolder { + ImageView iv; + TextView tv; + } + + // public static Bitmap getBitmap(ContentResolver cr, String fileName) { + // Bitmap bitmap = null; + // BitmapFactory.Options options = new BitmapFactory.Options(); + // options.inDither = false; + // options.inPreferredConfig = Bitmap.Config.ARGB_8888; + // // select condition. + // String whereClause = MediaStore.Images.Media.DATA + " = '" + fileName + // + "'"; + // + // // colection of results. + // Cursor cursor = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + // new String[] { MediaStore.Images.Media._ID }, whereClause, + // null, null); + // if (cursor == null || cursor.getCount() == 0) { + // if (cursor != null) + // cursor.close(); + // return null; + // } + // cursor.moveToFirst(); + // // image id in image table. + // String videoId = cursor.getString(cursor + // .getColumnIndex(MediaStore.Images.Media._ID)); + // cursor.close(); + // if (videoId == null) { + // return null; + // } + // long videoIdLong = Long.parseLong(videoId); + // // via imageid get the bimap type thumbnail in thumbnail table. + // bitmap = MediaStore.Images.Thumbnails.getThumbnail(cr, videoIdLong, + // Images.Thumbnails.MINI_KIND, options); + // return bitmap; + // } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PointListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PointListAdapter.java new file mode 100644 index 0000000..48d7e7c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PointListAdapter.java @@ -0,0 +1,89 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.BonusPointsListBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * @author 作者 wcx + * @version 创建时间:2018-7-13 上午10:12:13 + * 类说明 + */ +public class PointListAdapter extends BaseAdapter{ + + private List beans; + private Context context; + public PointListAdapter(List beans, Context context) { + // TODO Auto-generated constructor stub + this.beans = beans; + this.context = context; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beans.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beans.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_pointlist_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_pointlist); + } + vh = new ViewHolder(); + vh.tv_score_type_name = (TextView) convertView.findViewById(R.id.tv_score_type_name); + vh.create_date = (TextView) convertView.findViewById(R.id.create_date); + vh.tv_score = (TextView) convertView.findViewById(R.id.tv_score); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.tv_score_type_name.setText(beans.get(position).getScore_type_name()); + vh.create_date.setText(beans.get(position).getCreate_date().subSequence(0, beans.get(position).getCreate_date().length()-3)); + String score = beans.get(position).getScore(); +// String score1 = score+""; + if (score.contains("-")) { + vh.tv_score.setText(score); + }else { + vh.tv_score.setText("+"+beans.get(position).getScore()); + } + + return convertView; + } + public static class ViewHolder { + + public TextView tv_score_type_name, create_date, tv_score; + + + } +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProjectAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProjectAdapter.java new file mode 100644 index 0000000..01097ee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProjectAdapter.java @@ -0,0 +1,73 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.graphics.Color; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.SuggestBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class ProjectAdapter extends BaseAdapter { + private List list; + + public ProjectAdapter(List list) { + this.list = list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return i; + } + + @Override + public long getItemId(int i) { + return 0; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder holder=null; + if(view==null) + { + view= UIUtils.inflate(R.layout.project_item); + holder=new ViewHolder(); + holder.title=view.findViewById(R.id.title); + holder.hosname=view.findViewById(R.id.hosname); + holder.name=view.findViewById(R.id.name); + holder.status=view.findViewById(R.id.status); + view.setTag(holder); + } + else + { + holder= (ViewHolder) view.getTag(); + } + holder.title.setText(list.get(i).getName()); + holder.hosname.setText(list.get(i).getExecutor()); + holder.name.setText(list.get(i).getLeader()); + if("1".equals(list.get(i).getStatus())) + { + holder.status.setTextColor(Color.parseColor("#ffe34d59")); + holder.status.setText("进行中"); + } + else + { + holder.status.setTextColor(Color.parseColor("#ff666666")); + holder.status.setText("已结束"); + } + return view; + } + public class ViewHolder + { + TextView title,hosname,name,status; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProxyAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProxyAdapter.java new file mode 100644 index 0000000..6c152b2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ProxyAdapter.java @@ -0,0 +1,205 @@ +package cn.shangyu.gdxzExpert.adapter; + + +import android.view.View; +import android.view.ViewGroup; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.List; + +import androidx.annotation.IntDef; +import androidx.annotation.IntRange; +import androidx.recyclerview.widget.RecyclerView; + +/** + * @author cncoderx + */ +public class ProxyAdapter extends RecyclerView.Adapter { + List mHeaderViews = new ArrayList<>(); + List mFooterViews = new ArrayList<>(); + + final RecyclerView.Adapter mAdapter; + + public ProxyAdapter(RecyclerView.Adapter adapter) { + if (adapter == null) { + throw new IllegalArgumentException(); + } + mAdapter = adapter; + setHasStableIds(adapter.hasStableIds()); + } + + @Override + public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + RecyclerView.ViewHolder viewHolder; + final int type = ViewTypeSpec.getType(viewType); + final int value = ViewTypeSpec.getValue(viewType); + + if (type == ViewTypeSpec.HEADER) { + viewHolder = new FixedViewHolder(mHeaderViews.get(value)); + } else if (type == ViewTypeSpec.FOOTER) { + viewHolder = new FixedViewHolder(mFooterViews.get(value)); + } else { + viewHolder = mAdapter.onCreateViewHolder(parent, viewType); + } + return viewHolder; + } + + @Override + public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { + if (holder instanceof FixedViewHolder) { + ((FixedViewHolder) holder).onBind(); + } else { + int adjPosition = position - mHeaderViews.size(); + mAdapter.onBindViewHolder(holder, adjPosition); + } + } + + @Override + public int getItemCount() { + return mHeaderViews.size() + mFooterViews.size() + mAdapter.getItemCount(); + } + + @Override + public int getItemViewType(int position) { + final int numHeaderView = mHeaderViews.size(); +// final int numFooterView = mFooterViewInfos.size(); + + if (position < numHeaderView) + return ViewTypeSpec.makeItemViewTypeSpec(position, ViewTypeSpec.HEADER); + + final int adjPosition = position - numHeaderView; + final int itemCount = mAdapter.getItemCount(); + if (adjPosition >= itemCount) + return ViewTypeSpec.makeItemViewTypeSpec(adjPosition - itemCount, ViewTypeSpec.FOOTER); + + int itemViewType = mAdapter.getItemViewType(adjPosition); + if (itemViewType < 0 || itemViewType > (1 << ViewTypeSpec.TYPE_SHIFT) - 1) { + throw new IllegalArgumentException("Invalid item view type: RecyclerView.Adapter.getItemViewType return " + itemViewType); + } + return itemViewType; + } + + @Override + public void onDetachedFromRecyclerView(RecyclerView recyclerView) { + mAdapter.onDetachedFromRecyclerView(recyclerView); + } + + @Override + public void onAttachedToRecyclerView(RecyclerView recyclerView) { + mAdapter.onAttachedToRecyclerView(recyclerView); + } + + @Override + public void unregisterAdapterDataObserver(RecyclerView.AdapterDataObserver observer) { + mAdapter.unregisterAdapterDataObserver(observer); + } + + @Override + public void registerAdapterDataObserver(RecyclerView.AdapterDataObserver observer) { + mAdapter.registerAdapterDataObserver(observer); + } + + @Override + public void onViewDetachedFromWindow(RecyclerView.ViewHolder holder) { + if (holder instanceof FixedViewHolder) return; + mAdapter.onViewDetachedFromWindow(holder); + } + + @Override + public void onViewAttachedToWindow(RecyclerView.ViewHolder holder) { + if (holder instanceof FixedViewHolder) return; + mAdapter.onViewAttachedToWindow(holder); + } + + @Override + public boolean onFailedToRecycleView(RecyclerView.ViewHolder holder) { + if (holder instanceof FixedViewHolder) return false; + return mAdapter.onFailedToRecycleView(holder); + } + + @Override + public void onViewRecycled(RecyclerView.ViewHolder holder) { + if (holder instanceof FixedViewHolder) return; + mAdapter.onViewRecycled(holder); + } + + @Override + public long getItemId(int position) { + int adjPosition = position - mHeaderViews.size(); + if (adjPosition >= 0 && adjPosition < mAdapter.getItemCount()) + return mAdapter.getItemId(adjPosition); + + return RecyclerView.NO_ID; + } + + private boolean isFixedViewType(int viewType) { + final int type = ViewTypeSpec.getType(viewType); + return type == ViewTypeSpec.HEADER || type == ViewTypeSpec.FOOTER; + } + + public void addHeaderView(View view) { + if (mHeaderViews.add(view)) { + mAdapter.notifyDataSetChanged(); + } + } + + public void removeHeaderView(View view) { + if (mHeaderViews.remove(view)) { + mAdapter.notifyDataSetChanged(); + } + } + + public void addFooterView(View view) { + if (mFooterViews.add(view)) { + mAdapter.notifyDataSetChanged(); + } + } + + public void removeFooterView(View view) { + if (mFooterViews.remove(view)) { + mAdapter.notifyDataSetChanged(); + } + } + + static class ViewTypeSpec { + static final int TYPE_SHIFT = 30; + static final int TYPE_MASK = 0x3 << TYPE_SHIFT; + + public static final int UNSPECIFIED = 0 << TYPE_SHIFT; + public static final int HEADER = 1 << TYPE_SHIFT; + public static final int FOOTER = 2 << TYPE_SHIFT; + + @IntDef({UNSPECIFIED, HEADER, FOOTER}) + @Retention(RetentionPolicy.SOURCE) + public @interface ViewTypeSpecMode {} + + public static int makeItemViewTypeSpec(@IntRange(from = 0, to = (1 << TYPE_SHIFT) - 1) int value, + @ViewTypeSpecMode int type) { + return (value & ~TYPE_MASK) | (type & TYPE_MASK); + } + + @ViewTypeSpecMode + public static int getType(int viewType) { + //noinspection ResourceType + return (viewType & TYPE_MASK); + } + + public static int getValue(int viewType) { + return (viewType & ~TYPE_MASK); + } + } + + public static class FixedViewHolder extends RecyclerView.ViewHolder { + + public FixedViewHolder(View itemView) { + super(itemView); + setIsRecyclable(false); + } + + public void onBind() { + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PublishingAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PublishingAdapter.java new file mode 100644 index 0000000..2ac55c0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/PublishingAdapter.java @@ -0,0 +1,66 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ScienceListBean.ScienceData; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +public class PublishingAdapter extends BaseAdapter { + private Context mContext; + private List mData; + + public PublishingAdapter(Context context, List mList) { + this.mContext = context; + this.mData = mList; + } + + @Override + public int getCount() { + return mData.size(); + } + + @Override + public Object getItem(int position) { + return mData.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_publishing); + vh = new ViewHolder(); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.tv_publishing_title); + vh.mVline = convertView.findViewById(R.id.v_item_line); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_title.setText(mData.get(position).topic); + if (position == (mData.size() - 1)) { + vh.mVline.setVisibility(View.VISIBLE); + } else { + vh.mVline.setVisibility(View.INVISIBLE); + } + return convertView; + } + + class ViewHolder { + TextView mTv_title; + View mVline; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/QuestionAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/QuestionAdapter.java new file mode 100644 index 0000000..6c8d5e4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/QuestionAdapter.java @@ -0,0 +1,66 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.QuestionBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +// 显示时间的adapter类 +public class QuestionAdapter extends BaseAdapter { + private List list; + + + public QuestionAdapter(List list) { + this.list = list; + } + + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder viewHolder; + if (arg1 == null) { + viewHolder = new ViewHolder(); + arg1 = UIUtils.inflate(R.layout.question_item); + viewHolder.tv_n = (TextView) arg1.findViewById(R.id.tv_n); + arg1.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) arg1.getTag(); + } + + viewHolder.tv_n.setText(list.get(arg0).getTitle()); + + + return arg1; + } + + class ViewHolder{ + TextView tv_n; + + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/RollAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/RollAdapter.java new file mode 100644 index 0000000..5cd6653 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/RollAdapter.java @@ -0,0 +1,52 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.zaaach.transformerslayout.holder.Holder; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.IconBean; + +public class RollAdapter extends Holder { + private ImageView icon; + private TextView text; + private ImageView iv_red; + public RollAdapter(@NonNull View itemView) { + super(itemView); + } + + @Override + protected void initView(View itemView) { + icon = itemView.findViewById(R.id.iv_menu_icon); + text = itemView.findViewById(R.id.tv_menu_text); + iv_red=itemView.findViewById(R.id.iv_red); + } + + @Override + public void onBind(Context context, List list, @Nullable IconBean data, int position) { + if (data == null) return; + if(data.getRed()==null||!data.getRed()) + { + iv_red.setVisibility(View.GONE); + } + else + { + iv_red.setVisibility(View.VISIBLE); + } + text.setText(data.getName()); +// icon.setImageResource(data.getIcon()); + Glide.with(context) + .asBitmap() +// .placeholder(R.drawable.default_place_holder) + .load(data.getImg()) + .into(icon); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ScienceListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ScienceListAdapter.java new file mode 100644 index 0000000..71c99e1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/ScienceListAdapter.java @@ -0,0 +1,159 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import android.content.Context; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ScienceListBean.ScienceData; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * ScienceListAdapter.java + * + * @author liufang + * @date 2015-11-6 上午9:48:06 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我讲科普列表的适配器 + */ +public class ScienceListAdapter extends BaseAdapter { + private Context mContext; + private List mData; + + public ScienceListAdapter(Context context, List mList) { + this.mContext = context; + this.mData = mList; + } + + @Override + public int getCount() { + return mData.size(); + } + + @Override + public Object getItem(int position) { + return mData.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + // convertView = View.inflate(mContext, R.layout.science_list_item, + // null); + convertView = View.inflate(mContext, R.layout.item_news, null); + // holder.name = (TextView) + // convertView.findViewById(R.id.item_name); + // holder.title = (TextView) + // convertView.findViewById(R.id.item_title); + // holder.time = (TextView) + // convertView.findViewById(R.id.item_time); + + holder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_news_image); + holder.title = (TextView) convertView + .findViewById(R.id.tv_news_title); + holder.time = (TextView) convertView + .findViewById(R.id.tv_news_date); + holder.tvreadnum = (TextView) convertView + .findViewById(R.id.tv_read_count); + holder.tvdianzannum = (TextView) convertView + .findViewById(R.id.tv_dianzan_count); + holder.tvSummary = (TextView) convertView + .findViewById(R.id.tv_news_summary); + holder.tv_Now = (TextView) convertView + .findViewById(R.id.tv_news_now); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + ScienceData science = mData.get(position); + // String name = science.expertName; + // if (StringUtil.notEmpty(name)) { + // holder.name.setText(name); + // } else { + // holder.name.setText(""); + // } + holder.title.setText(science.topic); + holder.tvSummary.setText(science.summary); + if (!TextUtils.isEmpty(science.submitDate)) { + if (science.submitDate.length() >= 10) { + holder.time.setText(science.submitDate.substring(5, 10)); + if (inNow(science.submitDate.substring(0, 10))) { + holder.time.setVisibility(View.GONE); + holder.tv_Now.setVisibility(View.VISIBLE); + } else { + holder.tv_Now.setVisibility(View.GONE); + holder.time.setVisibility(View.VISIBLE); + holder.time.setText(science.submitDate.substring(5, 10)); + } + } else { + holder.time.setText(science.submitDate); + } + } else { + if (!TextUtils.isEmpty(science.modifyDate)) { + holder.time.setText(science.modifyDate); + } + } + if (!TextUtils.isEmpty(science.imgPath)) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + science.imgPath, holder.ivImage, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } else { + holder.ivImage.setImageResource(R.drawable.default_news_iv); + } + // 点赞和阅读量 + Double agree = Double.parseDouble(science.agreenum); + if (agree > 10000) { + double agreeNum = (double) (Math.round((double) agree / 1000) / 10.0); + holder.tvdianzannum.setText(agreeNum + "万赞"); + } else { + holder.tvdianzannum.setText(science.agreenum); + } + Double read = Double.parseDouble(science.readnum); + if (read > 10000) { + double readNum = (double) (Math.round((double) read / 1000) / 10.0); + holder.tvreadnum.setText(readNum + "万读"); + } else { + holder.tvreadnum.setText(science.readnum); + } + + return convertView; + } + + class Holder { + public TextView tvSummary; + public ImageView ivImage; + public TextView name, title, time, tvdianzannum, tvreadnum; + public TextView tv_Now; + } + + public boolean inNow(String date) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + + String ds1 = formatter.format(new Date()); + if (date.equals(ds1)) { + return true; + } + return false; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectBankCardAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectBankCardAdapter.java new file mode 100644 index 0000000..628f336 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectBankCardAdapter.java @@ -0,0 +1,177 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.BankCardBean.Card; +import cn.shangyu.gdxzExpert.bean.MyBankCardBean.MyBankListData; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +/** + * SelectBankCardAdapter.java + * + * @author liufang + * @date 2015-11-10 15:03:06 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:选择银行卡列表的适配器 + */ +public class SelectBankCardAdapter extends BaseAdapter { + private Context mContext; + private List mData; + private String CardUuid = null; + + public SelectBankCardAdapter(Context context, List mList) { + this.mContext = context; + this.mData = mList; + } + + public void getChange(String CheckNum) { + this.CardUuid = CheckNum; + } + + @Override + public int getCount() { + return mData.size(); + } + + @Override + public Object getItem(int position) { + return mData.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, + R.layout.item_select_bank_card, null); + holder.img = (ImageView) convertView + .findViewById(R.id.item_bank_img); + holder.name = (TextView) convertView.findViewById(R.id.item_name); + holder.card = (TextView) convertView.findViewById(R.id.item_card); + holder.realName = (ImageView) convertView + .findViewById(R.id.item_real_name); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + Card data = (Card) getItem(position); + + // String strImg = data.bankImg; + // if (StringUtil.notEmpty(strImg)) { + // ImageLoader + // .getInstance() + // .displayImage( + // Url.urlHtml + strImg, + // holder.img, + // ImageOptions + // .getImageOptions(R.drawable.icon_touxiang_persion_gray)); + // } + String name = data.getOpen_bank(); + if (StringUtil.notEmpty(name)) { + holder.name.setText(name); + } else { + holder.name.setText("为空"); + } + String num = data.getCard_number(); + if (StringUtil.notEmpty(num)) { + holder.card.setText("尾号为" + num + "储蓄卡"); + } else { + holder.card.setText(""); + } + if (mData.get(position).getUuid().equals(CardUuid)) { + holder.realName.setVisibility(View.VISIBLE); + } else { + holder.realName.setVisibility(View.GONE); + } + seletBankIcon(mData.get(position).getOpen_bank_code(), holder); + return convertView; + } + + private void seletBankIcon(String name, Holder holder) { + switch (name) { + case "0102": + holder.img.setImageResource(R.drawable.icon_bankcard_gongshang); + break; + case "0105": + holder.img.setImageResource(R.drawable.icon_bankcard_jianseyinhang); + break; + case "0104": + holder.img.setImageResource(R.drawable.icon_bankcard_zhongguo); + break; + case "0103": + holder.img.setImageResource(R.drawable.icon_bankcard_nongyeyinhang); + break; + case "0308": + holder.img + .setImageResource(R.drawable.icon_bankcard_zhaoshangyinhang); + break; + case "0100": + holder.img.setImageResource(R.drawable.icon_bankcard_youzheng); + break; + case "0301": + holder.img.setImageResource(R.drawable.icon_bankcard_jiatong); + break; + case "0403": + holder.img + .setImageResource(R.drawable.icon_bankcard_beijingyinhang); + break; + case "0303": + holder.img.setImageResource(R.drawable.icon_bankcard_guangda); + break; + case "0318": + holder.img.setImageResource(R.drawable.icon_bankcard_pingan); + break; + case "0401": + holder.img.setImageResource(R.drawable.icon_bankcard_shanghai); + break; + case "0306": + holder.img.setImageResource(R.drawable.icon_bankcard_guangfa); + break; + case "0309": + holder.img.setImageResource(R.drawable.icon_bankcard_xingye); + break; + case "0304": + holder.img.setImageResource(R.drawable.icon_bankcard_huaxiayinhnag); + break; + case "0302": + holder.img.setImageResource(R.drawable.icon_bankcard_zhongxinshiye); + break; + case "0305": + holder.img.setImageResource(R.drawable.icon_bankcard_minshneg); + break; + case "上海浦东发展银行": + holder.img + .setImageResource(R.drawable.icon_bankcard_shanghaipudongfazhanyinhang); + break; + + default: + holder.img.setImageResource(R.drawable.bank_card_mr); + break; + } + } + + class Holder { + ImageView img, realName; + TextView name, card; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectCourseAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectCourseAdapter.java new file mode 100644 index 0000000..559248b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SelectCourseAdapter.java @@ -0,0 +1,77 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +// 显示时间的adapter类 +public class SelectCourseAdapter extends BaseAdapter { + private List list; + private int position=-1; + + public SelectCourseAdapter(List list) { + this.list = list; + } + + public void setPosition(int position) { + this.position = position; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder viewHolder; + if (arg1 == null) { + viewHolder = new ViewHolder(); + arg1 = UIUtils.inflate(R.layout.select_item); + viewHolder.tv_n = (TextView) arg1.findViewById(R.id.tv_n); + viewHolder. v_line = (View) arg1.findViewById(R.id.v_line); + + arg1.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) arg1.getTag(); + } + + viewHolder.tv_n.setText(list.get(arg0).toString()); + if (position==arg0) { + + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.top_title)); + viewHolder.tv_n.setTextColor(UIUtils.getColor(R.color.top_title)); + }else{ + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.devider_line)); + viewHolder.tv_n.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + + } + return arg1; + } + + class ViewHolder{ + TextView tv_n; + View v_line; + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SuifangAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SuifangAdapter.java new file mode 100644 index 0000000..8b87e6e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/SuifangAdapter.java @@ -0,0 +1,129 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ChildTree; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +public class SuifangAdapter extends RecyclerView.Adapter { + private Context context; + List list; + public SuifangAdapter(Context context,List list) { + this.context = context; + this.list= (List) list; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.sui_item, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + viewHolder.name=view.findViewById(R.id.name); + viewHolder.date=view.findViewById(R.id.date); + viewHolder.status=view.findViewById(R.id.status); + viewHolder.l_c=view.findViewById(R.id.l_c); + return viewHolder; + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + holder.name.setText(list.get(position).getTitle()); + if(!StringUtil.isEmpty(list.get(position).getDate())) + { + holder.date.setVisibility(View.VISIBLE); + holder.date.setText(list.get(position).getDate()); + } + else + { + holder.date.setVisibility(View.GONE); + } + + String datastatus="",sdvstatus=""; + if(StringUtil.isEmpty(list.get(position).getDataStatus())) + { + + } + else if("0".equals(list.get(position).getDataStatus())) + { + datastatus="未录入"; + } + else if("1".equals(list.get(position).getDataStatus())) + { + datastatus="部分录入"; + } + else + { + datastatus="已录入"; + } + if(StringUtil.isEmpty(list.get(position).getSdvStatus())) + { + + } + else if("0".equals(list.get(position).getSdvStatus())) + { + sdvstatus="未SDV"; + } + else if("1".equals(list.get(position).getSdvStatus())) + { + sdvstatus="部分SDV"; + } + else + { + sdvstatus="已SDV"; + } + if(StringUtil.isEmpty(datastatus)&&StringUtil.isEmpty(sdvstatus)) + { + holder.status.setText(""); + } + else + { + holder.status.setText(datastatus+"/"+sdvstatus); + } + + holder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition()); + } + } + }); + + } + + @Override + public int getItemCount() { + return list.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + + TextView name,date,status; + RelativeLayout l_c; + + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapter.java new file mode 100644 index 0000000..ab08e0e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapter.java @@ -0,0 +1,132 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Context; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.hjq.window.EasyWindow; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.TerminationActivity; +import cn.shangyu.gdxzExpert.bean.endpoing; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class TermAdapter extends BaseAdapter { + Context context; + private List data; + public TermAdapter(Context context, Listdata) { + this.context = context; + this.data=data; + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int i) { + return i; + } + + @Override + public long getItemId(int i) { + return 0; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder holder=null; + if(view==null) + { + view= UIUtils.inflate(R.layout.term_irem); + holder=new ViewHolder(); + holder.title=view.findViewById(R.id.title); + holder.time=view.findViewById(R.id.time); +// holder.tv_edit=view.findViewById(R.id.tv_edit); + holder.tv_delect=view.findViewById(R.id.tv_delect); + holder.note_l=view.findViewById(R.id.note_l); + holder.note=view.findViewById(R.id.note); + view.setTag(holder); + } + else + { + holder= (ViewHolder) view.getTag(); + } + holder.title.setText(data.get(i).getEventType()); + if("其他恶性肿瘤".equals(data.get(i).getEventType())) + { + holder.note_l.setVisibility(View.VISIBLE); + } + else + { + holder.note_l.setVisibility(View.GONE); + } + holder.note.setText(data.get(i).getEndpointId()+""); + + +// holder.time.setText(data.get(i).getReportDate() +"("+ DateUtil.gettimeBydate(data.get(i).getReportDate())+"年"+")"); +// holder.tv_edit.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// Intent intent=new Intent(context, TerminationDetailActivity.class); +// if(i==0) +// { +// intent.putExtra("name","其他恶性肿瘤"); +// } +// else +// { +// intent.putExtra("name","表面抗原转阴"); +// } +// context.startActivity(intent); +// } +// }); + holder.tv_delect.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showyiwen("温馨提示","确定要删除该终点事件吗?",data.get(i).getEndpointId()); + } + }); + + return view; + } + public class ViewHolder + { + TextView title,time,tv_delect,note; + LinearLayout note_l; + } + public void showyiwen(String title,String content,String id) + { + EasyWindow.with((Activity) context).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setVisibility(R.id.r_b,View.VISIBLE) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + ((TerminationActivity)context).endpoingetdelete(id); + } + }) + .setOnClickListener(R.id.btn_cancel, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + + } + }).show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapterNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapterNew.java new file mode 100644 index 0000000..2cf5875 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/TermAdapterNew.java @@ -0,0 +1,152 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.content.Context; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.hjq.window.EasyWindow; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.TerminationActivity; +import cn.shangyu.gdxzExpert.bean.endpoing; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +public class TermAdapterNew extends RecyclerView.Adapter { + Context context; + private List data; + public TermAdapterNew(Context context, Listdata) { + this.context = context; + this.data=data; + } + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.term_irem, + parent, false); + + ViewHolder holder = new ViewHolder(view); + holder.title=view.findViewById(R.id.title); + holder.time=view.findViewById(R.id.time); + holder.notsname=view.findViewById(R.id.notsname); + holder.tv_delect=view.findViewById(R.id.tv_delect); + holder.note_l=view.findViewById(R.id.note_l); + holder.note=view.findViewById(R.id.note); + holder.l_c=view.findViewById(R.id.l_c); + return holder; + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + holder.title.setText(data.get(position).getEventType()); + holder.time.setText(data.get(position).getReportDate() +"("+ DateUtil.gettimeBydate(data.get(position).getReportDate(), ((TerminationActivity)context).birthdayPost1)+"年"+")"); + if("其他恶性肿瘤".equals(data.get(position).getEventType()) + ||"戒酒".equals(data.get(position).getEventType())||"戒酒后复饮".equals(data.get(position).getEventType())) + { + holder.note_l.setVisibility(View.VISIBLE); + if("其他恶性肿瘤".equals(data.get(position).getEventType())) + { + holder.notsname.setText("肿瘤名称:"); + } + else + { + holder.time.setText(data.get(position).getReportDate()); + if(StringUtil.isEmpty(data.get(position).getNotes())) + { + holder.note_l.setVisibility(View.GONE); + } + if("戒酒".equals(data.get(position).getEventType())) + { + holder.notsname.setText("已戒酒时间:"); + } + else + { + holder.notsname.setText("已复饮时间:"); + } + } + } + else + { + holder.note_l.setVisibility(View.GONE); + } + holder.note.setText(data.get(position).getNotes()+""); + + + + + holder.tv_delect.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showyiwen("温馨提示","确定要删除该终点事件吗?",data.get(position).getEndpointId()); + } + }); + holder.l_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(holder.itemView, holder.getAdapterPosition()); + } + } + }); + } + + @Override + public int getItemCount() { + return data.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + + TextView title,time,tv_delect,note,notsname; + LinearLayout note_l,l_c; + + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } + public void showyiwen(String title,String content,String id) + { + EasyWindow.with((Activity) context).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setVisibility(R.id.r_b,View.VISIBLE) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + ((TerminationActivity)context).endpoingetdelete(id); + } + }) + .setOnClickListener(R.id.btn_cancel, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + + } + }).show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoAdapter.java new file mode 100644 index 0000000..bb47272 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoAdapter.java @@ -0,0 +1,143 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.activity.VideoDetilActivity; +import cn.shangyu.gdxzExpert.activity.VideoMoreActivity; +import cn.shangyu.gdxzExpert.bean.VideoBean.VideoData; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.MyGridView; +import android.app.Activity; +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.TextView; + +public class VideoAdapter extends BaseAdapter { + private VideoActivity mActivity; + private List datas; + + public VideoAdapter(VideoActivity mActivity, List datas) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + this.datas = datas; + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder holder; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video); + holder = new ViewHolder(); + holder.mGv = (MyGridView) convertView.findViewById(R.id.mgv_video); + holder.mTv_Title = (TextView) convertView.findViewById(R.id.tv_video_title); + holder.mTv_more = (TextView) convertView.findViewById(R.id.tv_video_more); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.mTv_Title.setText(datas.get(position).getName()); + holder.mTv_more.setTag(position); + holder.mTv_more.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, VideoMoreActivity.class); + intent.putExtra("uuid", datas.get((int) v.getTag()).getUuid()); + intent.putExtra("title", datas.get((int) v.getTag()).getName()); + intent.setType("video1"); + mActivity.startActivityForResult(intent,mActivity.GET_MORE_NUM_RESULT); + } + }); +// holder.mAdapter.getList(datas.get(position).video); + if(holder.mGv!=null){ + VideoGVAdapter mAdapter = new VideoGVAdapter(mActivity,datas.get(position).video); + holder.mGv.setAdapter(mAdapter); + } + holder.mGv.setTag(position); + holder.mGv.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int Num = (int) parent.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", datas.get(Num).video.get(position) + .getPath()); + intent.putExtra("uuid", datas.get(Num).video.get(position) + .getUuid()); + intent.putExtra("note", datas.get(Num).video.get(position) + .getNote()); + intent.putExtra("title", datas.get(Num).video.get(position) + .getName()); + intent.putExtra("readnum", datas.get(Num).video.get(position) + .getReadnum()); + intent.putExtra("imgpath", datas.get(Num).video.get(position) + .getImgpath()); + intent.putExtra("public_name", + datas.get(Num).video.get(position).getPublic_name()); +// intent.putExtra("content", +// datas.get(Num).video.get(position).getContent()); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT); + } + }); + +// holder.mAdapter.notifyDataSetChanged(); + + return convertView; + } + + class ViewHolder { + TextView mTv_Title, mTv_more; + MyGridView mGv; + VideoGVAdapter mAdapter; + +// public ViewHolder(View view) { +// // TODO Auto-generated constructor stub +// mGv = (MyGridView) view.findViewById(R.id.mgv_video); +// mTv_Title = (TextView) view.findViewById(R.id.tv_video_title); +// mTv_more = (TextView) view.findViewById(R.id.tv_video_more); +// mAdapter = new VideoGVAdapter(mActivity); +// mGv.setAdapter(mAdapter); +// view.setTag(this); +// } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentAdapter.java new file mode 100644 index 0000000..9b58428 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentAdapter.java @@ -0,0 +1,223 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.DialogInterface; +import android.content.Intent; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.SettingFeedbackActivity; +import cn.shangyu.gdxzExpert.activity.VideoDetilActivity; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyTextView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +public class VideoCommentAdapter extends BaseAdapter { + List datas; + VideoDetilActivity mActivity; + String uuid; + ForegroundColorSpan redSpan, greySpan; + + public VideoCommentAdapter(VideoDetilActivity mActivity, String uuid) { + this.uuid = uuid; + this.datas = datas; + this.mActivity = mActivity; + redSpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.top_title)); + greySpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.darkGrey)); + } + + public void getDatas(List datas) { + + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (datas == null) { + return 0; + } + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_comment); + vh = new ViewHolder(); + vh.mIv_delete = (ImageView) convertView + .findViewById(R.id.iv_item_comment_delete); + vh.mIv_tou = (ImageView) convertView + .findViewById(R.id.iv_patient_touxiang); + vh.mTv_content = (MyTextView) convertView + .findViewById(R.id.item_comment_content); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.item_comment_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.item_comment_time); + vh.mTv_hf = (TextView) convertView + .findViewById(R.id.item_comment_hf); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (!TextUtils.isEmpty(datas.get(position).getPhoto()) + && !"null".equals(datas.get(position).getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datas.get(position).getPhoto(), + vh.mIv_tou, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + vh.mIv_tou.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + String content = datas.get(position).getComment().replaceAll(":", ":") + .replaceAll(" ", "").replaceAll(" ", " "); + if (content.contains("||")) { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + int i = content.indexOf("||"); + String sss = content.replaceAll("\\|\\|", "\n\n"); + SpannableStringBuilder builder = new SpannableStringBuilder(sss); + builder.setSpan(greySpan, i, sss.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + // SpannableStringBuilder builder = new + // SpannableStringBuilder(content); + // builder.setSpan(greySpan, content.indexOf("||"), + // content.length(), + // Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + // + // vh.mTv_content.setSpecifiedTextsColor(content, "||", + // Color.parseColor("#FF0000"), builder); + } else if (content.contains("回复") && content.contains(":")) { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.darkGrey)); + if (content.indexOf(":") - content.indexOf("回复") > 0) { + SpannableStringBuilder builder = new SpannableStringBuilder( + content); + builder.setSpan(redSpan, 3, content.indexOf(":"), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + + } else { + vh.mTv_content.setText(content); + } + + } else { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.darkGrey)); + vh.mTv_content.setText(content); + } + + if (datas.get(position).getCreate_date().length() > 16) { + vh.mTv_time.setText(datas.get(position).getCreate_date() + .substring(5, 16)); + } else { + vh.mTv_time.setText(datas.get(position).getCreate_date()); + } + + vh.mTv_name.setText(datas.get(position).getRealname()); + if (uuid.equals(datas.get(position).getExpert_uuid())) { + vh.mIv_delete.setVisibility(View.VISIBLE); + vh.mTv_hf.setVisibility(View.GONE); + } else { + vh.mIv_delete.setVisibility(View.GONE); + vh.mTv_hf.setVisibility(View.VISIBLE); + } + vh.mIv_delete.setTag(position); + vh.mIv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + delVisit((Integer) v.getTag()); + + } + }); + vh.mTv_hf.setTag(position); + vh.mTv_hf.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + SettingFeedbackActivity.class); + intent.setType("comment"); + intent.putExtra("name", datas.get((Integer) v.getTag()) + .getRealname()); + intent.putExtra("content", datas.get((Integer) v.getTag()) + .getComment()); + mActivity.startActivityForResult(intent, + mActivity.GET_HF_COMMENT_RESULT); + } + }); + + return convertView; + } + + class ViewHolder { + ImageView mIv_tou, mIv_delete; + TextView mTv_name, mTv_time, mTv_hf; + MyTextView mTv_content; + } + + ECAlertDialog buildAlert; + + public void delVisit(final int positions) { + buildAlert = ECAlertDialog.buildAlert(mActivity, "删除此评论?", "取消", "确认", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + + mActivity.getDeleteComment(positions); + buildAlert.dismiss(); + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentPolyVplayerAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentPolyVplayerAdapter.java new file mode 100644 index 0000000..f2f9ee5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoCommentPolyVplayerAdapter.java @@ -0,0 +1,273 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.DialogInterface; +import android.content.Intent; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.text.style.ForegroundColorSpan; +import android.view.Gravity; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.SettingFeedbackActivity; +import cn.shangyu.gdxzExpert.bean.CommentBean.CommentData; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.MyTextView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +public class VideoCommentPolyVplayerAdapter extends BaseAdapter { + List datas; + VideoDetailPolyvPlayerActivity mActivity; + String uuid; + ForegroundColorSpan redSpan, greySpan; + + public VideoCommentPolyVplayerAdapter(VideoDetailPolyvPlayerActivity mActivity, String uuid, List datas) { + this.uuid = uuid; + this.datas = datas; + this.mActivity = mActivity; + if(CommonUtil.BigModule()) + { + redSpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.c333333)); + } + else + { + redSpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.top_title)); + } + greySpan = new ForegroundColorSpan(mActivity.getResources().getColor( + R.color.darkGrey)); + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (datas == null) { + return 0; + } + return datas.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_comment_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_comment); + } + vh = new ViewHolder(); + vh.mIv_delete = (ImageView) convertView + .findViewById(R.id.iv_item_comment_delete); + vh.mIv_tou = (ImageView) convertView + .findViewById(R.id.iv_patient_touxiang); + vh.mTv_content = (MyTextView) convertView + .findViewById(R.id.item_comment_content); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.item_comment_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.item_comment_time); + vh.mTv_hf = (TextView) convertView + .findViewById(R.id.item_comment_hf); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if (!TextUtils.isEmpty(datas.get(position).getPhoto()) + && !"null".equals(datas.get(position).getPhoto())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + datas.get(position).getPhoto(), + vh.mIv_tou, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } else { + vh.mIv_tou.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + String content = datas.get(position).getComment().replaceAll(":", ":") + .replaceAll(" ", "").replaceAll(" ", " "); + if (content.contains("||")) { + if(CommonUtil.BigModule()) + { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.c333333)); + int i = content.indexOf("||"); + String sss = content.replaceAll("\\|\\|", "\n"); + SpannableStringBuilder builder = new SpannableStringBuilder(sss); + builder.setSpan(greySpan, i, sss.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + } + else + { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + int i = content.indexOf("||"); + String sss = content.replaceAll("\\|\\|", "\n\n"); + SpannableStringBuilder builder = new SpannableStringBuilder(sss); + builder.setSpan(greySpan, i, sss.length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + } + + + // SpannableStringBuilder builder = new + // SpannableStringBuilder(content); + // builder.setSpan(greySpan, content.indexOf("||"), + // content.length(), + // Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + // + // vh.mTv_content.setSpecifiedTextsColor(content, "||", + // Color.parseColor("#FF0000"), builder); + } else if (content.contains("回复") && content.contains(":")) { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.darkGrey)); + if (content.indexOf(":") - content.indexOf("回复") > 0) { + SpannableStringBuilder builder = new SpannableStringBuilder( + content); + builder.setSpan(redSpan, 3, content.indexOf(":"), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + vh.mTv_content.setText(builder); + + } else { + vh.mTv_content.setText(content); + } + + } else { + vh.mTv_content.setTextColor(mActivity.getResources().getColor( + R.color.darkGrey)); + vh.mTv_content.setText(content); + } + + if (datas.get(position).getCreate_date().length() > 16) { + vh.mTv_time.setText(datas.get(position).getCreate_date() + .substring(5, 16)); + } else { + vh.mTv_time.setText(datas.get(position).getCreate_date()); + } + if("0".equals(datas.get(position).getUser_status())) + { + vh.mTv_name.setText(mActivity.getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + vh.mTv_name.setText(datas.get(position).getRealname()); + } + + if(CommonUtil.BigModule()) + { + vh.mTv_name.setGravity(Gravity.CENTER_VERTICAL); + } + if (uuid.equals(datas.get(position).getExpert_uuid())) { + vh.mIv_delete.setVisibility(View.VISIBLE); + vh.mTv_hf.setVisibility(View.GONE); + } else { + vh.mIv_delete.setVisibility(View.GONE); + vh.mTv_hf.setVisibility(View.VISIBLE); + } + vh.mIv_delete.setTag(position); + vh.mIv_delete.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + delVisit((Integer) v.getTag()); + + } + }); + vh.mTv_hf.setTag(position); + vh.mTv_hf.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if("0".equals(datas.get((Integer) v.getTag()).getUser_status())) + { + ToastUtil.showMessage("该评论无法回复"); + return; + } + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + SettingFeedbackActivity.class); + intent.setType("comment"); + intent.putExtra("name", datas.get((Integer) v.getTag()) + .getRealname()); + intent.putExtra("content", datas.get((Integer) v.getTag()) + .getComment()); + + mActivity.startActivityForResult(intent, + mActivity.GET_HF_COMMENT_RESULT); + } + }); + + return convertView; + } + + class ViewHolder { + ImageView mIv_tou, mIv_delete; + TextView mTv_name, mTv_time, mTv_hf; + MyTextView mTv_content; + } + + ECAlertDialog buildAlert; + + public void delVisit(final int positions) { + buildAlert = ECAlertDialog.buildAlert(mActivity, "删除此评论?", "取消", "确认", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + // TODO Auto-generated method stub + +// mActivity.getDeleteComment(positions); + buildAlert.dismiss(); + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(mActivity.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoGVAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoGVAdapter.java new file mode 100644 index 0000000..a2dbc01 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoGVAdapter.java @@ -0,0 +1,85 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.VideoBean.VideoB; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class VideoGVAdapter extends BaseAdapter { + Activity mContext; + private List< VideoB> video; + public VideoGVAdapter(Activity mContext,List< VideoB> video) { + // TODO Auto-generated constructor stub + this.mContext = mContext; + this.video=video; + } + public void getList(List< VideoB> video){ + this.video=video; + } + @Override + public int getCount() { + // TODO Auto-generated method stub + if(video!=null){ + return video.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return video.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_gv); + vh = new ViewHolder(); + vh.mIv_Video = (RoundImageView) convertView + .findViewById(R.id.iv_video_gv); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.tv_video_content); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.tv_video_name); + vh.mTv_lookNum = (TextView) convertView + .findViewById(R.id.tv_video_num); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage(Url.urlHtml+video.get(position).getImgpath(), + vh.mIv_Video, + ImageOptions.getImageOptions(R.drawable.default_video)); + vh.mTv_title.setText(video.get(position).getName()); + vh.mTv_name.setText(video.get(position).getPublic_name()); + vh.mTv_lookNum.setText(video.get(position).getReadnum()); + return convertView; + } + + class ViewHolder { + RoundImageView mIv_Video; + TextView mTv_title, mTv_name, mTv_lookNum; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoMoreAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoMoreAdapter.java new file mode 100644 index 0000000..6d1dce6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoMoreAdapter.java @@ -0,0 +1,86 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoGVAdapter.ViewHolder; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +public class VideoMoreAdapter extends BaseAdapter { + List lists; + Activity mActivity; + + public VideoMoreAdapter(List lists, Activity mActivity) { + this.lists = lists; + this.mActivity = mActivity; + } + + public void getData(List lists) { + this.lists = lists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return lists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return lists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_gv); + vh = new ViewHolder(); + vh.mIv_Video = (RoundImageView) convertView + .findViewById(R.id.iv_video_gv); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.tv_video_content); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.tv_video_name); + vh.mTv_lookNum = (TextView) convertView + .findViewById(R.id.tv_video_num); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml + lists.get(position).getImgpath(), vh.mIv_Video, + ImageOptions.getImageOptions(R.drawable.default_video)); + vh.mTv_title.setText(lists.get(position).getName()); + vh.mTv_name.setText(lists.get(position).getPublic_name()); + vh.mTv_lookNum.setText(lists.get(position).getReadnum()); + return convertView; + } + + class ViewHolder { + RoundImageView mIv_Video; + TextView mTv_title, mTv_name, mTv_lookNum; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoSAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoSAdapter.java new file mode 100644 index 0000000..c439b81 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoSAdapter.java @@ -0,0 +1,171 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +public class VideoSAdapter extends BaseAdapter { + private List lists; + private VideoActivity mActivity; + + public VideoSAdapter(List lists, VideoActivity mActivity) { + this.lists = lists; + this.mActivity = mActivity; + } + + public void getDatas(List lists) { + this.lists = lists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (lists.size() % 2 == 1) { + return lists.size() / 2 + 1; + } + return lists.size() / 2; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_list); + vh = new ViewHolder(); + vh.mIv_Video1 = (RoundImageView) convertView + .findViewById(R.id.iv_video_gv1); + vh.mTv_title1 = (TextView) convertView + .findViewById(R.id.tv_video_content1); + vh.mTv_name1 = (TextView) convertView + .findViewById(R.id.tv_video_name1); + vh.mTv_lookNum1 = (TextView) convertView + .findViewById(R.id.tv_video_num1); + vh.mIv_Video2 = (RoundImageView) convertView + .findViewById(R.id.iv_video_gv2); + vh.mTv_title2 = (TextView) convertView + .findViewById(R.id.tv_video_content2); + vh.mTv_name2 = (TextView) convertView + .findViewById(R.id.tv_video_name2); + vh.mTv_lookNum2 = (TextView) convertView + .findViewById(R.id.tv_video_num2); + vh.mRl_second = (RelativeLayout) convertView + .findViewById(R.id.rl_second_view); + vh.mRl_first = (RelativeLayout) convertView + .findViewById(R.id.rl_first_view); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml + lists.get(position * 2).getImgpath(), + vh.mIv_Video1, + ImageOptions.getImageOptions(R.drawable.default_video)); + vh.mTv_title1.setText(lists.get(position * 2).getName()); + vh.mTv_name1.setText(lists.get(position * 2).getPublic_name()); + vh.mTv_lookNum1.setText(lists.get(position * 2).getReadnum()); + if (lists.size() / 2 == position && lists.size() % 2 == 1) { + vh.mRl_second.setVisibility(View.INVISIBLE); + } else { + vh.mRl_second.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage( + Url.urlHtml + lists.get(position * 2 + 1).getImgpath(), + vh.mIv_Video2, + ImageOptions.getImageOptions(R.drawable.default_video)); + vh.mTv_title2.setText(lists.get(position * 2 + 1).getName()); + vh.mTv_name2.setText(lists.get(position * 2 + 1).getPublic_name()); + vh.mTv_lookNum2.setText(lists.get(position * 2 + 1).getReadnum()); + } + vh.mRl_first.setTag(position); + vh.mRl_first.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + int Num = (int) v.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", lists.get(Num * 2).getPath()); + intent.putExtra("uuid", lists.get(Num * 2).getUuid()); + intent.putExtra("note", lists.get(Num * 2).getNote()); + intent.putExtra("title", lists.get(Num * 2).getName()); + intent.putExtra("readnum", lists.get(Num * 2).getReadnum()); + intent.putExtra("imgpath", lists.get(Num * 2).getImgpath()); + intent.putExtra("getTags", lists.get(Num * 2 ).getTags()); + intent.putExtra("public_name", lists.get(Num * 2) + .getPublic_name()); + intent.putExtra("pagetype","肝胆视频"); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT2); +// mActivity.needreportDetail("肝胆视频",lists.get(Num * 2).getTags(),lists.get(Num * 2).getName()); + } + }); + vh.mRl_second.setTag(position); + vh.mRl_second.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + int Num = (int) v.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", lists.get(Num * 2 + 1).getPath()); + intent.putExtra("uuid", lists.get(Num * 2 + 1).getUuid()); + intent.putExtra("note", lists.get(Num * 2 + 1).getNote()); + intent.putExtra("title", lists.get(Num * 2 + 1).getName()); + intent.putExtra("readnum", lists.get(Num * 2 + 1).getReadnum()); + intent.putExtra("imgpath", lists.get(Num * 2 + 1).getImgpath()); + intent.putExtra("public_name", lists.get(Num * 2 + 1) + .getPublic_name()); + intent.putExtra("getTags", lists.get(Num * 2 + 1).getTags()); + intent.putExtra("pagetype","肝胆视频"); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT2); +// mActivity.needreportDetail("肝胆视频",lists.get(Num * 2+1).getTags(),lists.get(Num * 2 + 1).getName()); + } + }); + return convertView; + } + + class ViewHolder { + RoundImageView mIv_Video1, mIv_Video2; + RelativeLayout mRl_second, mRl_first; + TextView mTv_title1, mTv_name1, mTv_lookNum1, mTv_title2, mTv_name2, + mTv_lookNum2; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoTeachAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoTeachAdapter.java new file mode 100644 index 0000000..cd62aef --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VideoTeachAdapter.java @@ -0,0 +1,149 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +/** + * Created by WANGChengXin on 2019/10/25. + */ + +public class VideoTeachAdapter extends BaseAdapter { + private List data; + + + public VideoTeachAdapter(List data) { + this.data = data; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (data == null) { + return 0; + } + return data.size(); + } + + public void getDatas(List data) { + this.data = data; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_videoteach); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (RoundImageView) convertView + .findViewById(R.id.iv_news_image); + mHolder.im_read_count = (ImageView) convertView + .findViewById(R.id.im_read_count); + mHolder.im_argee = (ImageView) convertView + .findViewById(R.id.im_argee); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_news_title); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_news_date); + mHolder.tv_Now = (TextView) convertView + .findViewById(R.id.tv_news_now); + mHolder.tvSummary = (TextView) convertView + .findViewById(R.id.tv_news_summary); + // 点赞阅读 + mHolder.tvdianzannum = (TextView) convertView + .findViewById(R.id.tv_dianzan_count); + mHolder.tvreadnum = (TextView) convertView + .findViewById(R.id.tv_read_count); + mHolder.im_argee2 = (ImageView) convertView + .findViewById(R.id.im_argee2); + convertView.setTag(mHolder); + mHolder.tv_dianzan_count2 = (TextView) convertView + .findViewById(R.id.tv_dianzan_count2); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + VideoMoreBean.VideoMore videoMore = data.get(position); + mHolder.tvTitle.setText(videoMore.getName()); + mHolder.im_read_count.setVisibility(View.INVISIBLE); + mHolder.tvreadnum.setVisibility(View.INVISIBLE); + mHolder.tvSummary.setVisibility(View.VISIBLE); + mHolder.im_argee.setVisibility(View.GONE); + mHolder.tvdianzannum.setVisibility(View.GONE); + mHolder.im_argee2.setVisibility(View.VISIBLE); + mHolder.tv_dianzan_count2.setVisibility(View.VISIBLE); + if (!TextUtils.isEmpty(data.get(position).getImgpath())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + data.get(position).getImgpath(), mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } else { + mHolder.ivImage.setImageResource(R.drawable.default_news_iv); + } + mHolder.tvSummary.setText(data.get(position).getPublic_name()); + mHolder.tvDate.setText(data.get(position).getCreate_date().split(" ")[0]); + mHolder.tv_dianzan_count2.setText(""+data.get(position).getReadnum()); + + + return convertView; + } + + private class NewsViewHolder { + + public TextView tvreadnum; + public TextView tvdianzannum; + public TextView tvSummary; + public RoundImageView ivImage; + public ImageView im_read_count; + public TextView tvTitle; + public TextView tvDate; + public TextView tv_Now; + public ImageView im_argee2; + public ImageView im_argee; + public TextView tv_dianzan_count2; + } + + public boolean inNow(String date) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + + String ds1 = formatter.format(new Date()); + if (date.equals(ds1)) { + return true; + } + return false; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VisitPlanAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VisitPlanAdapter.java new file mode 100644 index 0000000..77a754d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/VisitPlanAdapter.java @@ -0,0 +1,139 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.VisitPlanListBean.Datas; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +public class VisitPlanAdapter extends BaseAdapter { + private Activity mActivity; + private ArrayList mList; + public List DatasList; + public List Positions; + + public VisitPlanAdapter(Activity mActivity, ArrayList mList) { + DatasList = new ArrayList(); + + this.mActivity = mActivity; + this.mList = mList; + getPosition(); + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + public void getPosition() { + Positions = new ArrayList(); + for (int i = 0; i < mList.size(); i++) { + if (!DatasList.contains(mList.get(i).getDatetime().substring(0, 7))) { + DatasList.add(mList.get(i).getDatetime().substring(0, 7)); + Positions.add(i + ""); + } + } + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + viewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = View.inflate(mActivity, R.layout.item_visit_plan_big, + null); + } + else + { + convertView = View.inflate(mActivity, R.layout.item_visit_plan, + null); + } + + vh = new viewHolder(); + if(CommonUtil.BigModule()) + { + vh.r_date=convertView.findViewById(R.id.r_date); + vh.im_v1=convertView.findViewById(R.id.im_v1); + } + vh.mTv_context = (TextView) convertView + .findViewById(R.id.item_visit_content); + vh.mTv_date = (TextView) convertView + .findViewById(R.id.item_visit_date); + vh.mTv_name = (TextView) convertView + .findViewById(R.id.item_visit_name); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.item_visit_time); + convertView.setTag(vh); + } else { + vh = (viewHolder) convertView.getTag(); + } + + vh.mTv_context.setText(mList.get(position).getNote()); + vh.mTv_time.setText(mList.get(position).getDatetime().substring(8) + + "日"); + if (Positions.contains(position + "")) { + vh.mTv_date.setVisibility(View.VISIBLE); + vh.mTv_date.setText(mList.get(position).getDatetime() + .substring(0, 4) + + "年" + + mList.get(position).getDatetime().substring(5, 7) + + "月"); + if(CommonUtil.BigModule()) + { + vh.r_date.setVisibility(View.VISIBLE); + vh.im_v1.setVisibility(View.VISIBLE); + } + } else { + vh.mTv_date.setVisibility(View.GONE); + if(CommonUtil.BigModule()) + { + vh.r_date.setVisibility(View.GONE); + vh.im_v1.setVisibility(View.GONE); + } + } + if(CommonUtil.BigModule()) + { + if(position==0) + { + vh.im_v1.setVisibility(View.GONE); + } + else + { + vh.im_v1.setVisibility(View.VISIBLE); + } + } + vh.mTv_name.setText(mList.get(position).getPatientname()); + return convertView; + } + + class viewHolder { + TextView mTv_date, mTv_time, mTv_context, mTv_name; + RelativeLayout r_date; + ImageView im_v1; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter.java new file mode 100644 index 0000000..7c88072 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter.java @@ -0,0 +1,131 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.sql.Date; +import java.text.SimpleDateFormat; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.WFYKArticleListBean.WFYKBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + + +public class WFArticleAdapter extends BaseAdapter { + private Activity mActivity; + private List beanlists; + private String title; + + public WFArticleAdapter(Activity mActivity, List beanlists, + String title) { + this.mActivity = mActivity; + this.beanlists = beanlists; + this.title = title; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_wf_article_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_wf_article); + } + + vh = new ViewHolder(); + vh.mTv_context = (TextView) convertView + .findViewById(R.id.tv_itemwf_context); + vh.mTv_title_time = (TextView) convertView + .findViewById(R.id.tv_itemwf_title_time); + vh.mTv_Creator = (TextView) convertView + .findViewById(R.id.tv_itemwf_creator); + vh.mTv_KeyWords = (TextView) convertView + .findViewById(R.id.tv_itemwf_keywords); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_context.setText(beanlists.get(position).getTitle()); + StringBuffer author = new StringBuffer(); + if (beanlists.get(position).getAuthorList()!=null&&beanlists.get(position).getAuthorList().length > 0) { + for (int i = 0; i < beanlists.get(position).getAuthorList().length; i++) { + if (i == beanlists.get(position).getAuthorList().length - 1) { + author.append(beanlists.get(position).getAuthorList()[i]); + } else { + author.append(beanlists.get(position).getAuthorList()[i] + + ","); + } + + } + vh.mTv_Creator.setText("作者:" + author.toString()); + } else { + vh.mTv_Creator.setText("作者:"); + } + StringBuffer Keyword = new StringBuffer(); + if (beanlists.get(position).getKeywordList()!=null&&beanlists.get(position).getKeywordList().length > 0) { + for (int i = 0; i < beanlists.get(position).getKeywordList().length; i++) { + if (i == beanlists.get(position).getKeywordList().length - 1) { + Keyword.append(beanlists.get(position).getKeywordList()[i]); + } else { + Keyword.append(beanlists.get(position).getKeywordList()[i] + + ","); + } + + } + vh.mTv_KeyWords.setText("关键词:" + Keyword.toString()); + } else { + vh.mTv_KeyWords.setText("关键词:"); + } + if(StringUtil.isEmpty(beanlists.get(position).getIssue())){ + vh.mTv_title_time.setText(beanlists.get(position).getJournal() + "." + + getStrTime(beanlists.get(position).getPubDate())); + }else{ + vh.mTv_title_time.setText(beanlists.get(position).getJournal() + "." + + getStrTime(beanlists.get(position).getPubDate()) + ".第" + + beanlists.get(position).getIssue() + "期"); + } + + + return convertView; + } + + class ViewHolder { + TextView mTv_title_time, mTv_context, mTv_Creator, mTv_KeyWords; + } + + public static String getStrTime(long cc_time) { + String re_StrTime = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + re_StrTime = sdf.format(new Date(cc_time)); + return re_StrTime; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter1.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter1.java new file mode 100644 index 0000000..1e216fc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleAdapter1.java @@ -0,0 +1,115 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.sql.Date; +import java.text.SimpleDateFormat; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.WFSearchListBean.RecordsBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class WFArticleAdapter1 extends BaseAdapter{ + private Context mActivity; + private List beanlists; + public WFArticleAdapter1(Context context, List beanlists1) { + // TODO Auto-generated constructor stub + this.mActivity = context; + this.beanlists = beanlists1; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_wf_article_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_wf_article); + } + + vh = new ViewHolder(); + vh.mTv_context = (TextView) convertView + .findViewById(R.id.tv_itemwf_context); + vh.mTv_title_time = (TextView) convertView + .findViewById(R.id.tv_itemwf_title_time); + vh.mTv_Creator = (TextView) convertView + .findViewById(R.id.tv_itemwf_creator); + vh.mTv_KeyWords = (TextView) convertView + .findViewById(R.id.tv_itemwf_keywords); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + /** + * ArticleID : zgzl201201001 + * Title : 中国肿瘤登记地区2008年恶性肿瘤发病和死亡分析 + * Creator : |$郑荣寿;|$张思维;A002963611|$吴良有;A000451886|$李光琳;|$赵平;|$赫捷;|$陈万青 + * Source : 中国肿瘤 + * Year : 2012 + * KeyWords : 肿瘤登记;发病率;死亡率;流行病学;中国 + * DBID : WF_QK + * HasOriginalDoc : 0 + */ + vh.mTv_context.setText(beanlists.get(position).getTitle()); + if (!StringUtil.isEmpty(beanlists.get(position).getCreator())) { + vh.mTv_Creator.setText("作者:" + beanlists.get(position).getCreator().toString()); + } else { + vh.mTv_Creator.setText("作者:"); + } + if (!StringUtil.isEmpty(beanlists.get(position).getKeyWords())) { + vh.mTv_KeyWords.setText("关键词:" + beanlists.get(position).getKeyWords().toString()); + } else { + vh.mTv_KeyWords.setText("关键词:"); + } + + vh.mTv_title_time.setText(beanlists.get(position).getSource() + "|" + + beanlists.get(position).getYear()); + + + + return convertView; + } + + class ViewHolder { + TextView mTv_title_time, mTv_context, mTv_Creator, mTv_KeyWords; + } + + public static String getStrTime(long cc_time) { + String re_StrTime = null; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); + re_StrTime = sdf.format(new Date(cc_time)); + return re_StrTime; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleDownloadAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleDownloadAdapter.java new file mode 100644 index 0000000..53df981 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFArticleDownloadAdapter.java @@ -0,0 +1,94 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class WFArticleDownloadAdapter extends BaseAdapter { + private Activity mActivity; + private List beanlists; + + public WFArticleDownloadAdapter(List beanlists) { + + this.beanlists = beanlists; + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_wf_article_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_wf_article); + } + vh = new ViewHolder(); + vh.mTv_context = (TextView) convertView + .findViewById(R.id.tv_itemwf_context); + vh.mTv_title_time = (TextView) convertView + .findViewById(R.id.tv_itemwf_title_time); + vh.mTv_Creator = (TextView) convertView + .findViewById(R.id.tv_itemwf_creator); + vh.mTv_KeyWords = (TextView) convertView + .findViewById(R.id.tv_itemwf_keywords); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_context.setText(beanlists.get(position).getTitle()); + String ssss = beanlists.get(position).getCurrentProgress(); + if (beanlists.get(position).getCurrentProgress().contains("0.0")) { + vh.mTv_Creator.setText("作者:"+ ssss.substring(0, ssss.indexOf("0.0"))); + vh.mTv_KeyWords.setText("关键词:"+ ssss.substring(ssss.indexOf("0.0") + 3)); + } else { + vh.mTv_Creator.setText("作者:"); + + vh.mTv_KeyWords.setText("关键词:"); + } + + vh.mTv_title_time.setText(beanlists.get(position).getPath() + "." + + beanlists.get(position).getTime()); + if(CommonUtil.BigModule()) + { + vh.mTv_title_time.setText(beanlists.get(position).getPath() + "|" + + beanlists.get(position).getTime()); + } + return convertView; + } + + class ViewHolder { + TextView mTv_title_time, mTv_context, mTv_Creator, mTv_KeyWords; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFCollectAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFCollectAdapter.java new file mode 100644 index 0000000..574eb0e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/WFCollectAdapter.java @@ -0,0 +1,80 @@ +package cn.shangyu.gdxzExpert.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.WFCollectBean.WFBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class WFCollectAdapter extends BaseAdapter { + List mList; + + public WFCollectAdapter(List mList) { + this.mList = mList; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_wf_article_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_wf_article); + } + vh = new ViewHolder(); + vh.mTv_context = (TextView) convertView + .findViewById(R.id.tv_itemwf_context); + vh.mTv_title_time = (TextView) convertView + .findViewById(R.id.tv_itemwf_title_time); + vh.mTv_Creator = (TextView) convertView + .findViewById(R.id.tv_itemwf_creator); + vh.mTv_KeyWords = (TextView) convertView + .findViewById(R.id.tv_itemwf_keywords); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_context.setText(mList.get(position).getTitle()); + + vh.mTv_Creator.setText("作者:" + mList.get(position).getCreator()); + + vh.mTv_KeyWords.setText("关键词:" + mList.get(position).getKeyWords()); + + vh.mTv_title_time.setText(mList.get(position).getSource() + "|" + + mList.get(position).getYear()); + return convertView; + } + + class ViewHolder { + TextView mTv_title_time, mTv_context, mTv_Creator, mTv_KeyWords; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/adapter/endpointImgBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/endpointImgBean.java new file mode 100644 index 0000000..0e98913 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/adapter/endpointImgBean.java @@ -0,0 +1,71 @@ +package cn.shangyu.gdxzExpert.adapter; + +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.imBean; + +public class endpointImgBean { + private String endpointImgId;// 主键 integer + private String patientcaseId;// 病例id integer + private List imgPath;// + private String dataStatus;// 数据录入状态 0未录入 1部分录入 2已录入 integer + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer + private String updateTime;// 修改时间 string + private String createTime;// + + public String getEndpointImgId() { + return endpointImgId; + } + + public void setEndpointImgId(String endpointImgId) { + this.endpointImgId = endpointImgId; + } + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/application/BaseApplication.java b/app/src/main/java/cn/shangyu/gdxzExpert/application/BaseApplication.java new file mode 100644 index 0000000..eb0b4dc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/application/BaseApplication.java @@ -0,0 +1,748 @@ +package cn.shangyu.gdxzExpert.application; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor.IMESSAGE_IMAGE; +import static cn.shangyu.gdxzExpert.utils.Constant.uniapp_mp_appid; + +import android.app.Activity; +import android.app.Application; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Build; +import android.os.Handler; +import android.os.Process; +import android.os.StrictMode; +import android.text.TextUtils; +import android.webkit.WebView; + +import androidx.multidex.MultiDex; + +import com.apowersoft.dlnasender.api.listener.WxDlnaSenderInitCallback; +import com.easefun.polyvsdk.PolyvDevMountInfo; +import com.easefun.polyvsdk.PolyvDownloaderManager; +import com.easefun.polyvsdk.PolyvSDKClient; +import com.heytap.msp.push.HeytapPushManager; +import com.huawei.hms.support.common.ActivityMgr; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.UIKitOptions; +import com.netease.nim.uikit.business.contact.core.query.PinYin; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.SDKOptions; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.AuthServiceObserver; +import com.netease.nimlib.sdk.auth.LoginInfo; +import com.netease.nimlib.sdk.mixpush.NIMPushClient; +import com.netease.nimlib.sdk.util.NIMUtil; +import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; +import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; +import com.nostra13.universalimageloader.core.assist.QueueProcessingType; +import com.nostra13.universalimageloader.utils.StorageUtils; +import com.umeng.analytics.MobclickAgent; +import com.umeng.commonsdk.UMConfigure; +import com.umeng.socialize.PlatformConfig; +import com.zhy.http.okhttp.OkHttpUtils; + +import java.io.File; +import java.io.InvalidClassException; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import io.dcloud.feature.sdk.Interface.IUniMP; + +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.cast.PolyvScreencastManager; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.NIMInitManager; +import cn.shangyu.gdxzExpert.netease.NimSDKOptionConfig; +import cn.shangyu.gdxzExpert.netease.chatroom.ChatRoomSessionHelper; +import cn.shangyu.gdxzExpert.netease.config.DefaultContactProvider; +import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; +import cn.shangyu.gdxzExpert.netease.contact.ContactHelper; +import cn.shangyu.gdxzExpert.netease.event.DemoOnlineStateContentProvider; +import cn.shangyu.gdxzExpert.netease.mixpush.DemoMixPushMessageHandler; +import cn.shangyu.gdxzExpert.netease.mixpush.DemoPushContentProvider; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvStorageUtils; +import cn.shangyu.gdxzExpert.umeng.PushHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import me.jessyan.autosize.AutoSize; +import me.jessyan.autosize.AutoSizeConfig; +import me.jessyan.autosize.onAdaptListener; +import okhttp3.OkHttpClient; + + +//import com.huawei.android.hms.agent.HMSAgent; + + +/** + * + * BaseApplication.java + * + * @author gaofei + * @date 2015-8-31 上午9:54:20 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:application + */ + +public class BaseApplication extends Application { + private static Context context;// 上下文 + private static int mainThreadId; + private static Thread mainThread; + private static Handler handler; + private static SharedPreferences preferences;// sp + public Object cache;// 全局临时对象存储 + private static BaseApplication instance; + public static Map timemap; + public static Map lookNum; + public static boolean refreshExpertDetial = false;// 刷新专家详情的鲜花数量 + public static final String APP_ID = "2882303761517470793"; + public static final String APP_KEY = "5431747048793"; + // 全局 UniMP 缓存,全页面共享 + private static HashMap mUniMPCaches = new HashMap<>(); + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + MultiDex.install(this); + } + /** + * 单例,返回一个实例 + * + * @return + */ + public static BaseApplication getInstance() { + if (instance == null) { + LogUtil.w("[ECApplication] instance is null."); + } + return instance; + } + + public static void addNum(String uuid, int i) { + int newnum = i; + if (lookNum == null) { + lookNum = new HashMap(); + } + for (Map.Entry entry : lookNum.entrySet()) { + if (entry.getKey().equals(uuid)) { + newnum = entry.getValue() + i; + } + } + lookNum.put(uuid, newnum); + } + + public static Map getNumMap() { + return lookNum; + + } + + public static void clearMap() { + lookNum.clear(); + } + + /** + * 获取全局 UniMP 缓存 + * @return UniMP 缓存 HashMap + */ + public static HashMap getUniMPCaches() { + return mUniMPCaches; + } + + private static List tagList = new ArrayList<>(); + + public static List getTagList() { + return tagList; + } + + public static void setTagList(List tagList) { + BaseApplication.tagList = tagList; + } + + private static Boolean notify = false; + + public static Boolean getNotify() { + return notify; + } + + public static void setNotify(Boolean notify) { + BaseApplication.notify = notify; + } + + private static Boolean notifyexit = false; + + public static Boolean getNotifyexit() { + return notifyexit; + } + + public static void setNotifyexit(Boolean notifyexit) { + BaseApplication.notifyexit = notifyexit; + } + + private static Boolean iscollent = false; + + public static Boolean getIscollent() { + return iscollent; + } + + public static void setIscollent(Boolean iscollent) { + BaseApplication.iscollent = iscollent; + } + + // UIKit初始化标志,防止重复初始化 + private static boolean isUIKitInitialized = false; + { + + PlatformConfig.setWeixin("wxbf3658f5e674667c", + "c4505a04a9910c65efea8e11ffc93f92"); + + PlatformConfig + .setSinaWeibo("2071931330", "a7f66853db58d51374571691e5cf36a9", + "http://sns.whalecloud.com"); + } + @Override + public void onCreate() { + super.onCreate(); + + AutoSize.initCompatMultiProcess(this); + //如果在某些特殊情况下出现 InitProvider 未能正常实例化, 导致 AndroidAutoSize 未能完成初始化 + //可以主动调用 AutoSize.checkAndInit(this) 方法, 完成 AndroidAutoSize 的初始化后即可正常使用 +// AutoSize.checkAndInit(this); + +// 如何控制 AndroidAutoSize 的初始化,让 AndroidAutoSize 在某些设备上不自动启动?https://github.com/JessYanCoding/AndroidAutoSize/issues/249 + + + AutoSizeConfig.getInstance() + .setCustomFragment(true) + .setExcludeFontScale(true) + //区别于系统字体大小的放大比例, AndroidAutoSize 允许 APP 内部可以独立于系统字体大小之外,独自拥有全局调节 APP 字体大小的能力 + //当然, 在 APP 内您必须使用 sp 来作为字体的单位, 否则此功能无效, 不设置或将此值设为 0 则取消此功能 +// .setPrivateFontScale(0.8f) + //屏幕适配监听器 + .setOnAdaptListener(new onAdaptListener() { + @Override + public void onAdaptBefore(Object target, Activity activity) { + //使用以下代码, 可以解决横竖屏切换时的屏幕适配问题 + //使用以下代码, 可支持 Android 的分屏或缩放模式, 但前提是在分屏或缩放模式下当用户改变您 App 的窗口大小时 + //系统会重绘当前的页面, 经测试在某些机型, 某些情况下系统不会重绘当前页面, ScreenUtils.getScreenSize(activity) 的参数一定要不要传 Application!!! +// AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(activity)[0]); +// AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(activity)[1]); +// AutoSizeLog.d(String.format(Locale.ENGLISH, "%s onAdaptBefore!", target.getClass().getName())); + } + + @Override + public void onAdaptAfter(Object target, Activity activity) { +// AutoSizeLog.d(String.format(Locale.ENGLISH, "%s onAdaptAfter!", target.getClass().getName())); + } + }); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + WebView.setDataDirectorySuffix(Process.myPid() + ""); + } + context = getApplicationContext(); + // mainThreadId + mainThreadId = android.os.Process.myTid(); + // Thread-->object + mainThread = Thread.currentThread(); + // Handler + handler = new Handler();//wcx以前 + + // SharedPreferences + preferences = getSharedPreferences(Constant.SP_NAME, 0); + + // 容联 + instance = this; + +// + // 崩溃处理测试环境打卡 +// if (CrashHandler.getInstance() != null) { +// CrashHandler.getInstance().init(getApplicationContext()); +// } + + + boolean isFirstRun=this.getSharedPreferences("share",MODE_PRIVATE).getBoolean("isFirstRun", true); + if(!isFirstRun)//隐私权限 + { + initYinsi(); + } + } + public void initYinsi() + { + OkHttpClient okHttpClient = new OkHttpClient.Builder() + .connectTimeout(10000L, TimeUnit.MILLISECONDS) + .readTimeout(10000L, TimeUnit.MILLISECONDS) + //其他配置 + .build(); + + OkHttpUtils.initClient(okHttpClient); + CCPAppManager.setContext(instance); + FileAccessor.initFileAccess(); + setChattingContactId(); + hookWebView(); + + YunXininit(); + //日志开关 + UMConfigure.setLogEnabled(false); + //预初始化 + PushHelper.preInit(this); + initImageLoader(); + // 创建默认的ImageLoader配置参数 +// ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this); +// ImageLoader.getInstance().init(configuration); + + StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder(); + StrictMode.setVmPolicy(builder.build()); + + builder.detectFileUriExposure(); + //初始化组件化基础库, 统计SDK/推送SDK/分享SDK都必须调用此初始化接口 + UMConfigure.init(context, "56caa908e0f55aeff4001cd0", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, + "38088a7ef3b841e2db034b2f212a4a68"); + //统计SDK是否支持采集在子进程中打点的自定义事件,默认不支持 + UMConfigure.setProcessEvent(true);//支持多进程打点 + MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); + initPolyvCilent(); + if (NIMUtil.isMainProcess(this)) { + //启动优化:建议在子线程中执行初始化 + new Thread(new Runnable() { + @Override + public void run() { + PushHelper.init(getApplicationContext()); + } + }).start(); + } else { + //若不是主进程(":channel"结尾的进程),直接初始化sdk,不可在子线程中执行 + PushHelper.init(getApplicationContext()); + } +// // 微信设置 +// PlatformConfig.setWeixin("wxbf3658f5e674667c","c4505a04a9910c65efea8e11ffc93f92"); +// PlatformConfig.setWXFileProvider("cn.shangyu.gdxzExpert.fileprovider"); +// // QQ设置 +// PlatformConfig.setQQZone("101830139","5d63ae8858f1caab67715ccd6c18d7a5"); +// PlatformConfig.setQQFileProvider("cn.shangyu.gdxzExpert.fileprovider"); +// // 新浪微博设置 +// PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com"); +// PlatformConfig.setSinaFileProvider("cn.shangyu.gdxzExpert.fileprovider"); +// SpeechUtility.createUtility(context, SpeechConstant.APPID +"=5975b26b"); + initScreencast(); + } + + public void initScreencast() { + // TODO appId和appSecret需与包名绑定,获取方式请咨询Polyv技术支持 + PolyvScreencastManager.init(this, "kZF19ndHgR63a2b0efd7b82707734951", "2AA1A-6648B-8F35D-7FB52", new WxDlnaSenderInitCallback() { + @Override + public void onSuccess() { + // 初始化单例 + PolyvScreencastManager.getInstance(BaseApplication.this); + } + + @Override + public void onFail(int code, String msg) { + + } + }); + + } + + /** 加密秘钥 */ + private String aeskey = "VXtlHmwfS2oYm0CZ"; + /** 加密向量 */ + private String iv = "2u9gDPKdX6GyQJKU"; + + public void initPolyvCilent() { + //网络方式取得SDK加密串,(推荐) + //网络获取到的SDK加密串可以保存在本地SharedPreference中,下次先从本地获取 +// new LoadConfigTask().execute(); + PolyvSDKClient client = PolyvSDKClient.getInstance(); + //使用SDK加密串来配置 + client.setConfig("LysMwMlSFaiHu/03UrkCrxekGbFAZSXnnNkCi9QMdJPX2J5nTOHbwB626iIKXC6YvF+KYXGL3HStxEzHThvT61d9SNXpfKBF7i6NKd1VtFVAoOs+hg4FL2m7NoRsAO05j02uGzd/d9imbZvBchKP8w==", aeskey, iv, getApplicationContext()); + //初始化SDK设置 + client.initSetting(getApplicationContext()); + //启动Bugly +// client.initCrashReport(getApplicationContext()); + //启动Bugly后,在学员登录时设置学员id +// client.crashReportSetUserId(userId); + setDownloadDir(); + // 设置下载队列总数,多少个视频能同时下载。(默认是1,设置负数和0是没有限制) + PolyvDownloaderManager.setDownloadQueueCount(1); + } + + /** + * 设置下载视频目录 + */ + private void setDownloadDir() { + String rootDownloadDirName = "polyvdownload"; + ArrayList externalFilesDirs = PolyvStorageUtils.getExternalFilesDirs(getApplicationContext()); + if (externalFilesDirs.size() == 0) { + // TODO 没有可用的存储设备,后续不能使用视频缓存功能 + return; + } + + //SD卡会有SD卡接触不良,SD卡坏了,SD卡的状态错误的问题。 + //我们在开发中也遇到了SD卡没有权限写入的问题,但是我们确定APP是有赋予android.permission.WRITE_EXTERNAL_STORAGE权限的。 + //有些是系统问题,有些是SD卡本身的问题,这些问题需要通过重新拔插SD卡或者更新SD卡来解决。所以如果想要保存下载视频至SD卡请了解这些情况。 + File downloadDir = new File(externalFilesDirs.get(0), rootDownloadDirName); + PolyvSDKClient.getInstance().setDownloadDir(downloadDir); + + //兼容旧下载视频目录,如果新接入SDK,无需使用以下代码 + //获取SD卡信息 + PolyvDevMountInfo.getInstance().init(this, new PolyvDevMountInfo.OnLoadCallback() { + + @Override + public void callback() { + //是否有可移除的存储介质(例如 SD 卡)或内部(不可移除)存储可供使用。 + if (!PolyvDevMountInfo.getInstance().isSDCardAvaiable()) { + return; + } + + //可移除的存储介质(例如 SD 卡),需要写入特定目录/storage/sdcard1/Android/data/包名/。 + //现在PolyvDevMountInfo.getInstance().getExternalSDCardPath()默认返回的目录路径就是/storage/sdcard1/Android/data/包名/。 + //跟PolyvDevMountInfo.getInstance().init(Context context, final OnLoadCallback callback)接口有区别,请保持同步修改。 + ArrayList subDirList = new ArrayList<>(); + String externalSDCardPath = PolyvDevMountInfo.getInstance().getExternalSDCardPath(); + if (!TextUtils.isEmpty(externalSDCardPath)) { + StringBuilder dirPath = new StringBuilder(); + dirPath.append(externalSDCardPath).append(File.separator).append("polyvdownload"); + File saveDir = new File(dirPath.toString()); + if (!saveDir.exists()) { + saveDir.mkdirs();//创建下载目录 + } + + //设置下载存储目录 +// PolyvSDKClient.getInstance().setDownloadDir(saveDir); +// return; + subDirList.add(saveDir); + } + + //如果没有可移除的存储介质(例如 SD 卡),那么一定有内部(不可移除)存储介质可用,都不可用的情况在前面判断过了。 + File saveDir = new File(PolyvDevMountInfo.getInstance().getInternalSDCardPath() + File.separator + "polyvdownload"); + if (!saveDir.exists()) { + saveDir.mkdirs();//创建下载目录 + } + + //设置下载存储目录 +// PolyvSDKClient.getInstance().setDownloadDir(saveDir); + subDirList.add(saveDir); + PolyvSDKClient.getInstance().setSubDirList(subDirList); + } + }, true); + } + public static Context getContext() { + return context; + } + + public static int getMainThreadId() { + return mainThreadId; + } + + public static Thread getMainThread() { + return mainThread; + } + + public static Handler getHandler() { + return handler; + } + + public static SharedPreferences getSharedPreferences() { + return preferences; + } + + + + + /** + * 保存当前的聊天界面所对应的联系人、方便来消息屏蔽通知 + */ + private void setChattingContactId() { + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTING_CHATTING_CONTACTID, "", true); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + private void initImageLoader() { +// File cacheDir = StorageUtils.getOwnCacheDirectory( +// getApplicationContext(), "gdxzExpert/image11"); + File cacheDir = StorageUtils.getOwnCacheDirectory( + getApplicationContext(), IMESSAGE_IMAGE); + ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( + this).threadPoolSize(1) + // 线程池内加载的数量 + .threadPriority(Thread.NORM_PRIORITY - 2) + .memoryCache(new WeakMemoryCache()) + // .denyCacheImageMultipleSizesInMemory() + .diskCacheFileNameGenerator(CCPAppManager.md5FileNameGenerator) + // 将保存的时候的URI名称用MD5 加密 + .tasksProcessingOrder(QueueProcessingType.LIFO) + .diskCache( + new UnlimitedDiskCache(cacheDir, null, + CCPAppManager.md5FileNameGenerator))// 自定义缓存路径 + // .diskCache(new UnlimitedDiskCache(cacheDir))//自定义缓存路径 + .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) + // .writeDebugLogs() // Remove for release app + .build();// 开始构建 + ImageLoader.getInstance().init(config); + } + + + + @Override + public void onLowMemory() { + super.onLowMemory(); + } + + public static List addCards; + + public static void addActivity(Activity ma) { + if (addCards == null) { + addCards = new ArrayList(); + } + addCards.add(ma); + } + + public static void finishActivity() { + if (addCards != null) { + for (int i = 0; i < addCards.size(); i++) { + addCards.get(i).finish(); + } + } + + } + +// private void initX5WebView() { +// +// //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。 +// QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() { +// @Override +// public void onViewInitFinished(boolean arg0) { +// //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。 +// Log.d("app", " onViewInitFinished is " + arg0); +// +// } +// +// @Override +// public void onCoreInitFinished() { +// } +// }; +// //x5内核初始化接口 +// QbSdk.initX5Environment(getApplicationContext(), cb); +// +// } + + public static void hookWebView() { + int sdkInt = Build.VERSION.SDK_INT; + try { + Class factoryClass = Class.forName("android.webkit.WebViewFactory"); + Field field = factoryClass.getDeclaredField("sProviderInstance"); + field.setAccessible(true); + Object sProviderInstance = field.get(null); + if (sProviderInstance != null) { + LogUtil.i("sProviderInstance isn't null"); + return; + } + Method getProviderClassMethod; + if (sdkInt > 22) { + getProviderClassMethod = factoryClass.getDeclaredMethod("getProviderClass"); + } else if (sdkInt == 22) { + getProviderClassMethod = factoryClass.getDeclaredMethod("getFactoryClass"); + } else { + LogUtil.i("Don't need to Hook WebView"); + return; + } + getProviderClassMethod.setAccessible(true); + Class providerClass = (Class) getProviderClassMethod.invoke(factoryClass); + Class delegateClass = Class.forName("android.webkit.WebViewDelegate"); + Constructor providerConstructor = providerClass.getConstructor(delegateClass); + if (providerConstructor != null) { + providerConstructor.setAccessible(true); + Constructor declaredConstructor = delegateClass.getDeclaredConstructor(); + declaredConstructor.setAccessible(true); + sProviderInstance = providerConstructor.newInstance(declaredConstructor.newInstance()); + LogUtil.i("sProviderInstance:{}", sProviderInstance+""); + field.set("sProviderInstance", sProviderInstance); + } + LogUtil.i("Hook done!"); + } catch (Throwable e) { + LogUtil.i(e.getMessage()); + } + } + + /** + * 云信初始化 + */ + public void YunXininit() + { + DemoCache.setContext(this); + + // 4.6.0 开始,第三方推送配置入口改为 SDKOption#mixPushConfig,旧版配置方式依旧支持。 + + SDKOptions sdkOptions = NimSDKOptionConfig.getSDKOptions(this); + sdkOptions.disableAwake=true; + NIMClient.init(this, getLoginInfo(), sdkOptions); + // crash handler +// AppCrashHandler.getInstance(this); + + // 以下逻辑只在主进程初始化时执行 + if (NIMUtil.isMainProcess(this)) { +// 华为推送 + ActivityMgr.INST.init(this); +// // 初始化OPPO PUSH服务,创建默认通道 + HeytapPushManager.init(this, false); + + + // 注册自定义推送消息处理,这个是可选项 + NIMPushClient.registerMixPushMessageHandler(new DemoMixPushMessageHandler()); + + // 初始化红包模块,在初始化UIKit模块之前执行 +// NIMRedPacketClient.init(this); + // init pinyin + PinYin.init(this); + PinYin.validate(); + // 初始化UIKit模块 + initUIKit(); + // 初始化消息提醒 + NIMClient.toggleNotification(UserPreferences.getNotificationToggle()); + //关闭撤回消息提醒 +// NIMClient.toggleRevokeMessageNotification(false); + // 云信sdk相关业务初始化 + NIMInitManager.getInstance().init(true); + NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, true); + // 初始化音视频模块 +// initAVChatKit(); +// // 初始化rts模块 +// initRTSKit(); + + } + //初始化融合 SDK 中的七鱼业务关业务 +// initMixSdk(); + + + + } + /** + * 用户状态变化 + */ + Observer userStatusObserver = new Observer() { + + @Override + public void onEvent(StatusCode code) { + if (code.wontAutoLogin()) { + + if(code!=StatusCode.PWD_ERROR) + { + + IUniMP uniapp_MP = BaseApplication.getUniMPCaches().get(uniapp_mp_appid); + if(uniapp_MP != null && uniapp_MP.isRunning()){ + uniapp_MP.closeUniMP(); + } + + LogoutHelper.logout(); + showlogout(); + + } + + } + } + }; + private void showlogout() + { + + + + String phone="ios"; + switch(NIMClient.getService(AuthService.class).getKickedClientType()) + { + case 1: + phone="android"; + break; + case 2: + phone="ios"; + break; + case 16: + phone="web"; + break; + default: + phone=""; + break; + + } + if(!StringUtil.isEmpty(phone)) + { + + Intent intent = new Intent(getApplicationContext(), LoginNewActivity.class); + intent.putExtra("kick_out",phone); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(intent); + } + + } + + private LoginInfo getLoginInfo() { + String account = Preferences.getUserAccount(); + String token = Preferences.getUserToken(); + + if (!TextUtils.isEmpty(account) && !TextUtils.isEmpty(token)) { + DemoCache.setAccount(account.toLowerCase()); + return new LoginInfo(account, token); + } else { + return null; + } + } + private void initUIKit() { + // 防止重复初始化 + if (isUIKitInitialized) { + return; + } + + try { + // 初始化 +// NimUIKit.init(this, buildUIKitOptions()); + NimUIKit.init(this, buildUIKitOptions(),null,new DefaultContactProvider()); + // 设置地理位置提供者。如果需要发送地理位置消息,该参数必须提供。如果不需要,可以忽略。 +// NimUIKit.setLocationProvider(new NimDemoLocationProvider()); + + // IM 会话窗口的定制初始化。 + SessionHelper.init(); + + // 聊天室聊天窗口的定制初始化。 + ChatRoomSessionHelper.init(); + + // 通讯录列表定制初始化 + ContactHelper.init(); + + // 添加自定义推送文案以及选项,请开发者在各端(Android、IOS、PC、Web)消息发送时保持一致,以免出现通知不一致的情况 + NimUIKit.setCustomPushContentProvider(new DemoPushContentProvider()); + + NimUIKit.setOnlineStateContentProvider(new DemoOnlineStateContentProvider()); + + isUIKitInitialized = true; + LogUtil.i("UIKit初始化成功"); + } catch (Exception e) { + LogUtil.e("UIKit初始化失败: " + e.getMessage()); + e.printStackTrace(); + } + } + private UIKitOptions buildUIKitOptions() { + UIKitOptions options = new UIKitOptions(); + // 设置app图片/音频/日志等缓存目录 + options.appCacheDir = NimSDKOptionConfig.getAppCacheDir(this) + "/app"; + return options; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/base/AppManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/base/AppManager.java new file mode 100644 index 0000000..80c26f8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/base/AppManager.java @@ -0,0 +1,154 @@ +package cn.shangyu.gdxzExpert.base; + + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; + +import java.util.Stack; + +public class AppManager { + + private static Stack activityStack; + private static AppManager instance; + private static Stack activityStack1; + private static Stack activityStack2; + + private AppManager(){} + /** + * 单一实例 + */ + public static AppManager getAppManager(){ + if(instance==null){ + instance=new AppManager(); + } + return instance; + } + /** + * 添加Activity到堆 + */ + public void addActivity(Activity activity){ + if(activityStack==null){ + activityStack=new Stack(); + } + activityStack.add(activity); + } + + /** + * 添加积分Activity到堆 + */ + public void addActivity1(Activity activity){ + if(activityStack1==null){ + activityStack1=new Stack(); + } + activityStack1.add(activity); + } + /** + * 添加一问多答Activity到堆 + */ + public void addActivity2(Activity activity){ + if(activityStack2==null){ + activityStack2=new Stack(); + } + activityStack2.add(activity); + } + + /** + * 结束所有积分Activity + */ + public void finishAllActivity1(){ + if (activityStack1!=null) { + for (int i = 0, size = activityStack1.size(); i < size; i++){ + if (null != activityStack1.get(i)){ + activityStack1.get(i).finish(); + } + } + activityStack1.clear(); + } +// android.os.Process.killProcess(android.os.Process.myPid()); + } + /** + * 结束所有一问多答Activity + */ + public void finishAllActivity2(){ + if (activityStack2!=null) { + for (int i = 0, size = activityStack2.size(); i < size; i++){ + if (null != activityStack2.get(i)){ + activityStack2.get(i).finish(); + } + } + activityStack2.clear(); + } + } + + /** + * 获取当前Activity(堆栈中最后压入的) + */ + public Activity currentActivity(){ + Activity activity=activityStack.lastElement(); + return activity; + } + /** + * 结束当前Activity(堆栈中最后压入的) + */ + public void finishActivity(){ + Activity activity=activityStack.lastElement(); + finishActivity(activity); + } + /** + * 结束指定的Activity + */ + public void finishActivity(Activity activity){ + if(activity!=null&&activityStack!=null){ + activityStack.remove(activity); + activity.finish(); + activity=null; + } + } + /** + * 结束指定的Activity + */ + public void finishActivity2(Activity activity){ + if(activity!=null){ + activityStack2.remove(activity); + activity.finish(); + activity=null; + } + } + /** + * 结束指定类名的Activity + */ + public void finishActivity(Class cls){ + for (Activity activity : activityStack) { + if(activity.getClass().equals(cls) ){ + finishActivity(activity); + } + } + } + + /** + * 结束所有Activity + */ + public void finishAllActivity(){ + for (int i = 0, size = activityStack.size(); i < size; i++){ + if (null != activityStack.get(i)){ + activityStack.get(i).finish(); + } + } + activityStack.clear(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + /** + * 退出应用程序 + */ + public void AppExit(Context context) { + try { + finishAllActivity(); + ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); +// activityMgr.restartPackage(context.getPackageName()); + activityMgr.killBackgroundProcesses(context.getPackageName()); + System.exit(0); + android.os.Process.killProcess(android.os.Process.myPid()); + } catch (Exception e) { } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java new file mode 100644 index 0000000..94f0329 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseActivity.java @@ -0,0 +1,1435 @@ +package cn.shangyu.gdxzExpert.base; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Bitmap; +import android.graphics.drawable.AnimationDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; + +import org.apache.http.message.BasicNameValuePair; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.RSAUtils2; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import io.dcloud.feature.sdk.DCSDKInitConfig; +import io.dcloud.feature.sdk.DCUniMPSDK; +import io.dcloud.feature.sdk.Interface.IUniMP; +import io.dcloud.feature.sdk.MenuActionSheetItem; + +/** + * BaseActivity.java + * + * @author ssy + * @date 2015-8-31 上午10:40:13 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:activity的父类,集中处理一些activity的事务 + */ +public abstract class BaseActivity extends AppCompatActivity implements + OnClickListener { + public String TAG = this.getClass().getSimpleName(); + protected LoadingPage loadingPage; + public FrameLayout layout_top;// 顶部布局 + public RelativeLayout top_back_layout;// 返回的布局 + public TextView top_title;// 标题文字 + public ImageButton top_right,top_right1;// 标题右边的 + public ImageButton top_right_system_msg;// 右边系统消息图标 + public TextView top_right_text;// 右边的文字 + public TextView top_back_text;// 返回键文字 + public LinearLayout top_sao;//切换成大字版 + public ImageView inside_share;//内部聊天分享 + public ImageView itop_search; + public LinearLayout top_search;// 标题的搜索 + public ImageView top_back,top_sgin; + public ImageView iv_yindao1;//引导 + public FrameLayout layout; + public ViewGroup.LayoutParams titleBarParams; + public BaseActivity ct; + public View loadingView; + public LinearLayout loadfailView; + public View ll_loading; + public LinearLayout ll_load_progress; + public TextView tv_load_fail; + public CustomProgressDialog dialog; + public ImageButton top_right_search; + /** + * 初始化广播接收器 + */ + private InternalReceiver internalReceiver; + private ECAlertDialog buildAlert; + public ImageView top_right_bookCollect; + public RelativeLayout top_right_rl_bookCollect; + private ImageView iv_loading; + private AnimationDrawable anim; + public Toolbar mToolbar; +// public View top_view1; + public IWXAPI api; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + api = WXAPIFactory.createWXAPI(this, Constant.WeId,false); + // this.requestWindowFeature(Window.FEATURE_NO_TITLE); + setContentView(R.layout.activity_base); + mToolbar=findViewById(R.id.toolbar); + +// top_view1=findViewById(R.id.top_view1); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + AppManager.getAppManager().addActivity(this); + ct = this; + layout_top = findViewById(R.id.layout_top); + top_back_layout = (RelativeLayout) findViewById(R.id.top_back_layout); + top_title = (TextView) findViewById(R.id.top_title); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + top_sao=findViewById(R.id.top_sao); + inside_share=findViewById(R.id.inside_share); + itop_search=findViewById(R.id.itop_search); + top_right = (ImageButton) findViewById(R.id.top_right); + top_right1 = (ImageButton) findViewById(R.id.top_right1); + top_right_system_msg = (ImageButton) findViewById(R.id.top_right_system_msg); + top_back = (ImageView) findViewById(R.id.top_back); + iv_yindao1 = (ImageView) findViewById(R.id.iv_yindao1); + top_sgin = (ImageView) findViewById(R.id.top_sgin); + top_right_search = (ImageButton) findViewById(R.id.top_right_search); + top_right_text = (TextView) findViewById(R.id.top_right_text); + top_back_text = (TextView) findViewById(R.id.top_back_text); + top_search = (LinearLayout) findViewById(R.id.search); + top_right_rl_bookCollect = (RelativeLayout) findViewById(R.id.top_right_rl_bookCollect); + top_right_bookCollect = (ImageView) findViewById(R.id.top_right_bookCollect); + top_back_layout.setOnClickListener(this); + top_right_text.setOnClickListener(this); + top_right_search.setOnClickListener(this); + top_right.setOnClickListener(this); + top_right_system_msg.setOnClickListener(this); + + View view = UIUtils.inflate(R.layout.layout_loading); + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + // iv_loading = (ImageView) view.findViewById(R.id.iv_loading_mess); + // anim = (AnimationDrawable) iv_loading.getDrawable(); + // iv_loading.post(new Runnable() { + // @Override + // public void run() { + // anim.start(); + // } + // }); + + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + loadingView = findViewById(R.id.loading_view); + loadfailView = (LinearLayout) findViewById(R.id.ll_load_fail); + + layout = (FrameLayout) findViewById(R.id.framelayout); + titleBarParams = mToolbar.getLayoutParams(); + ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) layout.getLayoutParams(); + p.setMargins(0, titleBarParams.height, 0, 0); + layout.requestLayout(); + layout.removeAllViews(); + this.setTitle(); + mToolbar.getBackground().setAlpha(255); + // initView(); + /** + * 友盟统计应用启动数据 + */ +// PushAgent.getInstance(ct).onAppStart(); + loadView(); + +// abstracrRegist(); + + + + //uniapp + DCSDKInitConfig config = new DCSDKInitConfig.Builder() + .setCapsule(false) + .setMenuDefFontSize("16px") + .setMenuDefFontColor("#ff00ff") + .setMenuDefFontWeight("normal") + .setEnableBackground(true) + .build(); + DCUniMPSDK.getInstance().initialize(this, config); + } + + /** + * @author zhaodewei + * + * 以下是 封装各个activity 中的上传参数 并且利用OnCallBackFromNet将结果回调到各个的activity + */ + OnCallBackFromNet callBack; + + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + OnCallBackFromNet callBack = (OnCallBackFromNet) msg.getData().getSerializable("callback"); + int i = msg.what; + if (callBack == null) { + return; + } + callBack.onCallbackFromThread(resultData); + callBack.onCallBackFromThread(resultData, i); + + } + + }; + }; + + /** + * @author zhaodewei + */ + // CustomProgressDialog mShowDialog; + private final ReentrantLock lock = new ReentrantLock(); + List getParamsMap = new ArrayList(); + + public void sendParamtoNet(final String Url, + final Map putParamsMap, final int callType, + final OnCallBackFromNet callBack, boolean showDialog) { + + final String getResult = null; + new Thread() { + public void run() { + lock.lock(); + try { + if (putParamsMap != null) { + for (String getKey : putParamsMap.keySet()) { + getParamsMap.add(new BasicNameValuePair(getKey, + putParamsMap.get(getKey))); + } + } + HttpResult httpResult = null; + if (callType > 1000) { +// String token = SharePrefUtil.getString(ct, +// Constant.YKToken, ""); + // if (!StringUtil.isEmpty(token)) { + httpResult = HttpHelper.get(Url);// 请求网络,添加病例 + // } else { + // httpResult = HttpHelper.post(Url, getParamsMap);// + // 请求网络,添加病例 + // } + + } else { + httpResult = HttpHelper.post(Url, getParamsMap);// 请求网络,添加病例 + } + + String result = httpResult.getString();// str为服务器返回的json串 + int code = httpResult.getCode(); + getParamsMap = new ArrayList(); + Message msg = Message.obtain(); + msg.obj = result; + msg.what = callType; + msg.getData().putSerializable("callback", callBack); + mHandler.sendMessage(msg); + + } catch (Exception e) { + + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + closeProgressDialog(); + ToastUtil.showMessage("提交失败,请重试"); + } finally { + /** + * 2018.12.12 + * android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. + * */ +// if (!top_right_text.isClickable()) { +// top_right_text.setClickable(true); +// } + + lock.unlock(); + + } + } + }.start(); + + } + + + /** + * 2018.6.14加密请求 + */ + /*public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType,final OnCallBackFromNet callBack) { +// new Thread(new Runnable() { +// private HttpResult httpResult; +// private String result1; +// +// @Override +// public void run() { +// // TODO Auto-generated method stub +// lock.lock(); +// try { +// httpResult = HttpHelper.post(Url.getTimestamp, null); +// if (httpResult != null) { +// result1 = httpResult.getString(); +// // LogUtils.e(result); +// TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); +// param.put("timestamp", bean.getTimestamp()); +// String encoding = "UTF-8"; +// Gson gson = new Gson(); +// String params = gson.toJson(param); +// byte[] data; +// String sign = SignUtil.getSign(param); +// data = params.getBytes(encoding); +// URL url = new URL(postUrl); +// HttpURLConnection conn = (HttpURLConnection) url.openConnection(); +// conn.setRequestMethod("POST"); +// conn.setDoOutput(true); +// conn.setRequestProperty("Content-Type","application/json"); +// conn.setRequestProperty("sign",sign); +// conn.setRequestProperty("Content-Length",String.valueOf(data.length)); +// conn.setConnectTimeout(5 * 1000); +// OutputStream outStream = conn.getOutputStream(); +// outStream.write(data); +// outStream.flush(); +// outStream.close(); +// int ssss=conn.getResponseCode() ; +// if (conn.getResponseCode() == 200) { +// InputStream inStream = conn.getInputStream(); +// String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); +// Message message = new Message(); +// message.what = callType; +// message.obj = new String(result); +// message.getData().putSerializable("callback", callBack); +// mHandler.sendMessage(message); +// } else { +// mHandler.sendEmptyMessage(010); +// } +// } +// } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } finally { +// lock.unlock(); +// } +// +// } +// }).start(); + + HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(mActivity, + // info.result); + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + lock.lock(); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + + } catch (Exception e) { + ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + // closeProgressDialog(); + } finally { + if (!top_right_text.isClickable()) { + top_right_text.setClickable(true); + } + lock.unlock(); + + } + } + }.start(); + + + + Log.i("TAG", "result = "+info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + + + }*/ + + + /** + * 2018.6.14加密请求(患者端) + */ + public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType,final OnCallBackFromNet callBack) { + if(CommonUtil.BigModule()) + { + param.put("app_type", "1"); + } + param.put("user_uuid", SharePrefUtil.getString(BaseActivity.this, "uuid", "")); + param.put("client_type", "A"); + param.put("version",UpdateVersionUtils.getVersionName() ); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + SharePrefUtil.saveString(UIUtils.getContext(), "gdxz_timestamp", bean.getTimestamp()); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + /** + * Object的请求 + * */ + public void sendJsonPostParamtoNetSignMD5Object(final String postUrl, + final Map param, final ArrayList mBitmaps, final int callType, final OnCallBackFromNet callBack) { + param.put("user_uuid", SharePrefUtil.getString(BaseActivity.this, "uuid", "")); + param.put("client_type", "A"); + param.put("version",UpdateVersionUtils.getVersionName() ); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + List parameters = new ArrayList(); + for (int i = 0; i < mBitmaps.size(); i++) { + int num = i + 1; + if (!mBitmaps.get(i).isAdd()) { + Bitmap bitmap = mBitmaps.get(i).getBitmap(); + if ( bitmap!=null){ + BasicNameValuePair value = new BasicNameValuePair("img"+ num, Base64Util.BitmaptoBase64(mBitmaps.get(i).getBitmap()));//图片空白报空 + parameters.add(value); + } + + } + } + Map map1=new HashMap(); + for (int i=0;i param, final int callType,final OnCallBackFromNet callBack) { + param.put("user_uuid", SharePrefUtil.getString(BaseActivity.this, "uuid", "")); + param.put("client_type", "A"); + param.put("version",UpdateVersionUtils.getVersionName() ); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + String sign = SignUtil.getSignObject(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { + ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + + /** + * 带RSA加密的请求 + * */ + public void sendJsonPostParamtoNetSignMD5RSA(final String postUrl, + final Map param, final int callType,final OnCallBackFromNet callBack) { + param.put("user_uuid", SharePrefUtil.getString(BaseActivity.this, "uuid", "")); + param.put("client_type", "A"); + param.put("version",UpdateVersionUtils.getVersionName() ); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + +// String token = "user_uuid="+SharePrefUtil.getString(BaseActivity.this, "uuid", "")+"&version="+UpdateVersionUtils.getVersionName()+"&client_type=A×tamp="+bean.getTimestamp()+"&hospital_uuid="+param.get("hospital_uuid")+"&office_name="+param.get("office_name")+"&type="+param.get("type")+"&location="+param.get("location"); +// String token = "user_uuid="+SharePrefUtil.getString(BaseActivity.this, "uuid", "")+"&version="+UpdateVersionUtils.getVersionName()+"&client_type=A×tamp="+bean.getTimestamp()+"&hospital_uuid="+""+"&office_name="+""+"&type=1"+""+"&location="+""; +// LogUtil.i("token = "+token); + param.put("timestamp", bean.getTimestamp()); + String token = SignUtil.getSignObject1(param); + token = token.substring(0,token.length()-1); + Map param2 = new HashMap<>(); + String tokenString = RSAUtils2.publicEncrypt(token); + param2.put("token", tokenString); + if (param2 != null) { + for (String getKey : param2.keySet()) { + getParamsMap.add(new BasicNameValuePair(getKey,param2.get(getKey))); + } + } + httpResult = HttpHelper.post(postUrl, getParamsMap);// 请求网络,添加病例 + String result = httpResult.getString();// str为服务器返回的json串 + getParamsMap = new ArrayList(); + Message msg = Message.obtain(); + msg.obj = result; + msg.what = callType; + msg.getData().putSerializable("callback", callBack); + mHandler.sendMessage(msg); + + +// String encoding = "UTF-8"; +// Gson gson = new Gson(); +// String params = gson.toJson(param2); +// LogUtil.i("params = "+params.toString()); +// byte[] data; +// String sign = SignUtil.getSign(param2); +// LogUtil.i("sign = "+sign); +// data = params.getBytes(encoding); +// URL url = new URL(postUrl); +// HttpURLConnection conn = (HttpURLConnection) url.openConnection(); +// conn.setRequestMethod("POST"); +// conn.setDoOutput(true); +// conn.setRequestProperty("Content-Type","application/json"); +// conn.setRequestProperty("sign",sign); +// conn.setRequestProperty("Content-Length",String.valueOf(data.length)); +// conn.setConnectTimeout(5 * 1000); +// OutputStream outStream = conn.getOutputStream(); +// outStream.write(data); +// outStream.flush(); +// outStream.close(); +// int ssss=conn.getResponseCode() ; +// if (conn.getResponseCode() == 200) { +// InputStream inStream = conn.getInputStream(); +// String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); +// Message message = new Message(); +// message.what = callType; +// message.obj = new String(result); +// message.getData().putSerializable("callback", callBack); +// mHandler.sendMessage(message); +// } else { +// mHandler.sendEmptyMessage(010); +// } + } + } catch (Exception e) { + ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + + public void sendJsonPostParamtoNet(final String Url, + final Map putParamsMap, final int callType, + final OnCallBackFromNet callBack) { + final String getResult = null; + new Thread() { + public void run() { + lock.lock(); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(putParamsMap); + byte[] data; + try { + data = params.getBytes(encoding); + URL url = new URL(Url); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", + "application/json; charset=" + encoding); + conn.setRequestProperty("Content-Length", + String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + getParamsMap = new ArrayList(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + + } catch (Exception e) { + + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + closeProgressDialog(); + ToastUtil.showMessage("提交失败,请重试"); + } finally { + if (!top_right_text.isClickable()) { + top_right_text.setClickable(true); + } + + lock.unlock(); + + } + } + }.start(); + + } + + /** + * 防止app字体跟随系统设置字体发生变化 + * + * @author getResources + */ + +// public Resources getResources() { +// Resources res = super.getResources(); +// Configuration config = new Configuration(); +// config.setToDefaults(); +// res.updateConfiguration(config, res.getDisplayMetrics()); +// return res; +// } + + /** + * 功能说明:在子Activity中设置标题以及标题头上显示的控件的显示与隐藏 + * + */ + public abstract void setTitle(); + + /** + * 功能说明:加载view布局 + * + */ + private void loadView() { + // TODO Auto-generated method stub + loadingPage = new LoadingPage(UIUtils.getContext()) { + @Override + public ResultState onLoad() { + return BaseActivity.this.onLoad(); + } + + @Override + public View onCreateSuccessedView() { + return BaseActivity.this.onCreateSuccessedView(); + } + }; + show(); + } + + private void show() { + // TODO Auto-generated method stub + layout.removeAllViews(); + layout.addView(loadingPage); + // 手动促发show方法的调用 + if (loadingPage != null) { + loadingPage.show(); + } + } + + /** + * + * @author gaofei + * @date 2015-8-31 下午3:32:20 + * + * 功能说明:根据从网络上获取的内容判断显示什么布局 + * + * method @param object method @return + */ + public ResultState check(Object object) { + if (object instanceof List) { + if (((List) object).size() > 0) { + return ResultState.STATE_SUCCESSED; + } else if (((List) object).size() == 0) { + return ResultState.STATE_EMPTY; + } + } else { + return ResultState.STATE_ERROR; + } + return ResultState.STATE_ERROR; + } + + // 对于当前的BaseFragment来说,所有的子界面展示效果都不一样,所以当期方法不知道如何实现,所以抽象 + public abstract View onCreateSuccessedView(); + + public abstract ResultState onLoad(); + + // protected abstract void initView(); + + /** + * processClick onClick点击事件 + * + * @param v + * void + */ + protected abstract void processClick(View v); + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (v.getId() == R.id.top_back_layout) { + this.finish(); + hideSoftKeyboard(); + } + processClick(v); + + } + + /** + * 显示布局里的正在加载进度框 showLoadingProgress + * + * void + */ + public void showLoadingProgress() { + // if (ll_loading != null) { + // ll_loading.setVisibility(View.VISIBLE); + // } + showProgressDialog("正在加载"); + } + + /** + * 隐藏正在加载进度框 dismissLoadingProgress + * + * void + */ + public void dismissLoadingProgress() { + if (ll_loading != null) { + ll_loading.setVisibility(View.GONE); + } + closeProgressDialog(); + } + + /** + * 显示加载失败 failLoadingView + * + * void + */ + public void failLoadingView() { + if (ll_loading != null && ll_load_progress != null + && tv_load_fail != null) { + ll_loading.setVisibility(View.VISIBLE); + ll_load_progress.setVisibility(View.GONE); + tv_load_fail.setVisibility(View.VISIBLE); + } + } + + /** + * + * showProgressDialog 显示正在加载中。。。 + * + * @param content + * void + */ + public void showProgressDialog(String content) { + + if (dialog == null && ct != null) { + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(ct, + content, ProgressDialog.THEME_HOLO_LIGHT); + } else { + dialog.setContent(content); + } + if(!((BaseActivity) ct).isFinishing()&&!((BaseActivity) ct).isDestroyed()) + { + dialog.show(); + } + + } + + public Context getCt() { + return ct; + } + + /** + * + * closeProgressDialog 关闭加载框 void + */ + public void closeProgressDialog() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + /** + * + * showLoadingView 加载网页时候显示加载中view void + */ + public void showLoadingView() { + if (loadingView != null) { + loadingView.setVisibility(View.VISIBLE); + } + } + + /** + * 隐藏加载网页时候显示加载中view dismissLoadingView + * + * void + */ + public void dismissLoadingView() { + if (loadingView != null) { + loadingView.setVisibility(View.GONE); + } + } + + /** + * 显示加载网页失败 showLoadFailView + * + * void + */ + public void showLoadFailView() { + if (loadingView != null) { + loadingView.setVisibility(View.VISIBLE); + loadfailView.setVisibility(View.VISIBLE); + } + + } + + /** + * 隐藏加载网页失败 dismissLoadFailView + * + * void + */ + public void dismissLoadFailView() { + if (loadingView != null) + loadfailView.setVisibility(View.GONE); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (dialog!=null){ + dialog.dismiss(); + } + // 结束当前act + AppManager.getAppManager().finishActivity(this); + try { + if(internalReceiver!=null) + unregisterReceiver(internalReceiver); + } catch (Exception e) { + } + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * hide inputMethod + */ + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) ct + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = ((Activity) ct).getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + +// public void abstracrRegist() { +// registerReceiver(new String[] { SDKCoreHelper.ACTION_KICK_OFF }); +// } + + protected void registerReceiver(String[] actionArray) { + if (actionArray == null) { + return; + } + IntentFilter intentfilter = new IntentFilter(); +// intentfilter.addAction(SDKCoreHelper.ACTION_KICK_OFF); + for (String action : actionArray) { + intentfilter.addAction(action); + } + if (internalReceiver == null) { + internalReceiver = new InternalReceiver(); + } + registerReceiver(internalReceiver, intentfilter); + } + + + + // Internal calss. + private class InternalReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + + if (intent == null || intent.getAction() == null) { + return; + } + handleReceiver(context, intent); + } + } + + /** + * 如果子界面需要拦截处理注册的广播 需要实现该方法 + * + * @param context + * @param intent + */ + protected void handleReceiver(Context context, Intent intent) { + // 广播处理 + if (intent == null) { + return; + } +// if (SDKCoreHelper.ACTION_KICK_OFF.equals(intent.getAction())) { +// String kickoffText = intent.getStringExtra("kickoffText"); +// handlerKickOff(kickoffText); +// } + } + + public void handlerKickOff(String kickoffText) { + if (isFinishing()) { + return; + } + buildAlert = ECAlertDialog.buildAlert(this, kickoffText, + getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { +// ECNotificationManager.getInstance() +// .forceCancelNotification(); + + restartAPP(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + + public void restartAPP() { + if (buildAlert.isShowing()) { + buildAlert.dismiss(); + } +// ECDevice.unInitial(); + // 注销账号,清除该账号的所有文件, + DataCleanManager.cleanApplicationData(ct); + // 把IS_OPEN_MAIN_PAGER键, 在缓存中存储一个true.保存后不需要进入引导页 + // SharePrefUtil.saveIsFirstBoolean(this, Constant.SP_IS_FIRST_NAME, + // true); +// ECNotificationManager.getInstance().forceCancelNotification(); + Intent intent = new Intent(this, LoginNewActivity.class); + + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + AppManager.getAppManager().finishAllActivity(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param loadUrl + * void + */ + public static void getPatientList(final Context context, + final String loadUrl, String expertUuid) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("expertUuid", expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(context, loadUrl, info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private static void processData(String result) { + final PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { + + } else { + // 插入患者等一些联系人到数据库 + // 这个应该在登入APP时候就应该进行获取列表,然后插入到数据库。 + new Thread(){ + @Override + public void run() { + super.run(); + PatientSqlManager.insertPatientList(bean.data, "Patient"); + } + }.start(); + } + } + + /** + * 登录登出 前后台切换 !!!!必须调用!!!!!! 每次登陆退出手机软件在前后台切换 例如Home键软件进入后台 + * + * foreBack + * + * @param context + * @param type 操作类型 整型数据 ---1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 void + */ + public static void foreBack(Context context, int type) { + if (type==2){ + type =4; + } + String uuid = SharePrefUtil.getString(context, Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("type", String.valueOf(type)); + HttpHelper.loadData(HttpMethod.POST, Url.getforeBack, params,new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("foreBack数据请求失败了: " + arg1); + } + }); + } + public void needreportPage(String page) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("list_page"); + rbens.setPage_type(page); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportOb(String name,String id) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setDeal_object(id); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportDown(String page,String tags,String bl,String nm,String pagetype) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("magazine_donwload"); + rbens.setBelong(bl); + rbens.setNumber(nm); + rbens.setResource_name(page); + rbens.setResource_option(tags+""); + rbens.setPage_type(pagetype); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportDetail(String page,String tags,String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("detail_page"); + rbens.setPage_type(page); + rbens.setResource_name(name); + rbens.setPage_type(page); + rbens.setResource_option(tags+""); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportSome(String name,String page,String tags,String typepage) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setResource_name(page); + rbens.setPage_type(typepage); + rbens.setResource_option(tags+""); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportSimple(String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(BaseActivity.this, ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + startService(intent); + } + public void needreportPays(String name, String ev,String ui,String num,String rs,String op,String page) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setEvent_val(ev); + rbens.setEvent_unit(ui); + rbens.setNumber(num); + rbens.setResource_name(rs); + rbens.setPage_type(page); + rbens.setResource_option(op); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportPay(String name, String ev,String ui,String num,String rs,String op,String bl,String pt) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setEvent_val(ev); + rbens.setEvent_unit(ui); + rbens.setNumber(num); + rbens.setResource_name(rs); + rbens.setResource_option(op); + rbens.setBelong(bl); + rbens.setPage_type(pt); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java new file mode 100644 index 0000000..b770862 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/base/BaseFragment.java @@ -0,0 +1,637 @@ +package cn.shangyu.gdxzExpert.base; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Intent; +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.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import com.google.gson.Gson; + +import org.apache.http.message.BasicNameValuePair; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * BaseFragment.java + * + * @author ssy + * @date 2015-8-31 上午10:28:29 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:fragment的父类,集中处理一些fragment的事务 + */ +public abstract class BaseFragment extends Fragment { + public String TAG = this.getClass().getSimpleName(); + protected LoadingPage loadingPage; + public static Activity mActivity; + public View ll_loading; + public View ll_load_progress; + public View tv_load_fail; + public TextView tv_empty_msg; + public View ll_empty; + + @Override + public void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + mActivity = getActivity(); + + } + + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // 加载中布局 + View view = UIUtils.inflate(R.layout.layout_loading); + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 返回当前界面效果的view对象,(正在加载,加载错误,数据为空,加载成功的) + loadingPage = new LoadingPage(UIUtils.getContext()) { + // 成功展示的界面 + @Override + public View onCreateSuccessedView() { + // 此方法一定在此处要去调用,返回界面成功的展示效果 + return BaseFragment.this.onCreateSuccessedView(); + } + + // (请求网络的返回结果,需要告知LoadingPager界面) + @Override + public ResultState onLoad() { + return BaseFragment.this.onLoad(); + } + + }; + // 根据网络状态重新加载view + show(); + return loadingPage; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); +// if(mActivity==null){ +// mActivity=getActivity(); +// } + } + + // 对于当前的BaseFragment来说,所有的子界面展示效果都不一样,所以当期方法不知道如何实现,所以抽象 + public abstract View onCreateSuccessedView(); + + public abstract ResultState onLoad(); + + public void show() { + // 请求网络 + if (loadingPage != null) { + loadingPage.show(); + } + } + + public ResultState check(Object object) { + + if (object != null) { + return ResultState.STATE_SUCCESSED; + } else { + return ResultState.STATE_EMPTY; + } + } + + public static Activity getFrameActivity() { + return mActivity; + } + + /** + * 显示布局里的正在加载进度框 showLoadingProgress + * + * void + */ + public void showLoadingProgress() { + if (ll_loading != null) { + ll_loading.setVisibility(View.VISIBLE); + ll_load_progress.setVisibility(View.VISIBLE); + tv_load_fail.setVisibility(View.GONE); + } + } + + /** + * 隐藏正在加载进度框 dismissLoadingProgress + * + * void + */ + public void dismissLoadingProgress() { + if (ll_loading != null) { + ll_loading.setVisibility(View.GONE); + } + } + + /** + * 显示加载失败 failLoadingView + * + * void + */ + public void failLoadingView() { + if (ll_loading != null && ll_load_progress != null + && tv_load_fail != null) { + ll_loading.setVisibility(View.VISIBLE); + ll_load_progress.setVisibility(View.GONE); + tv_load_fail.setVisibility(View.VISIBLE); + } + } + + protected CustomProgressDialog dialog; + + /** + * showProgressDialog 显示正在加载中。。。 + * + * @param content + * void + */ + protected void showProgressDialog(String content) { + + if (dialog == null && mActivity != null&&!mActivity.isFinishing() && !mActivity.isDestroyed()) { + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog( + mActivity, content, ProgressDialog.THEME_HOLO_LIGHT); + } + + if (mActivity != null&&!mActivity.isFinishing() && !mActivity.isDestroyed()) { + dialog.show(); + } + + +// dialog.show(); + +// if (dialog!=null) { +// dialog.setOnKeyListener(new OnKeyListener() { +// +// @Override +// public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { +// // TODO Auto-generated method stub +// dialog.dismiss(); +// return false; +// } +// }); +// } + } + + /** + * closeProgressDialog 关闭加载框 void + */ + protected void closeProgressDialog() { + if (mActivity != null&&!mActivity.isFinishing()) { + + if (dialog != null &&dialog.isShowing()) + dialog.dismiss(); + + } +// if (dialog != null && dialog.isShowing()) +// dialog.dismiss(); + } + + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + + } + OnCallBackFromNet callBack; + + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + OnCallBackFromNet callBack = (OnCallBackFromNet) msg.getData().getSerializable("callback"); + int i = msg.what; + if (callBack == null) { + return; + } + callBack.onCallbackFromThread(resultData); + callBack.onCallBackFromThread(resultData, i); + + } + }; + }; + + + /** + * 2018.6.14加密请求 + */ + /*public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType,final OnCallBackFromNet callBack) { + + HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(mActivity, + // Url.getExpertroll, + // info.result); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + param.put("timestamp", bean.getTimestamp()); + LogUtil.e("MD5","timestamp = "+bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + lock.lock(); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.e("MD5","患教学堂加密sign="+sign); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + + } catch (Exception e) { + ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + // closeProgressDialog(); + } finally { +// if (!top_right_text.isClickable()) { +// top_right_text.setClickable(true); +// } + lock.unlock(); + + } + } + }.start(); + + + +// Log.i("TAG", "result = "+info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + + + + }*/ + + + /** + * 2018.6.14加密请求(患者端) + */ + public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType,final OnCallBackFromNet callBack) { + if(CommonUtil.BigModule()) + { + param.put("app_type", "1"); + } + param.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + param.put("client_type", "A"); + param.put("version",UpdateVersionUtils.getVersionName() ); +// LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(getActivity(), "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("数据异常,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + + + } + public void sendJsonPostParamtoNetSignMD5Array(final String postUrl, + final Map param, final int callType,final OnCallBackFromNet callBack) { + if(CommonUtil.BigModule()) + { + param.put("app_type", "1"); + } + param.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + param.put("client_type", "A"); + param.put("version",UpdateVersionUtils.getVersionName() ); +// LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(getActivity(), "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + String sign = SignUtil.getSignObject(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("数据异常,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + + + } + private final ReentrantLock lock = new ReentrantLock(); + List getParamsMap = new ArrayList(); + public void sendJsonPostParamtoNet(final String Url, + final Map putParamsMap, final int callType, + final OnCallBackFromNet callBack) { + final String getResult = null; + new Thread() { + public void run() { + lock.lock(); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(putParamsMap); + byte[] data; + try { + data = params.getBytes(encoding); + URL url = new URL(Url); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", + "application/json; charset=" + encoding); + conn.setRequestProperty("Content-Length", + String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + getParamsMap = new ArrayList(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + message.getData().putSerializable("callback", callBack); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + + } catch (Exception e) { + + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + closeProgressDialog(); + ToastUtil.showMessage("提交失败,请重试"); + } finally { + + lock.unlock(); + + } + } + }.start(); + + } + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + + } + public void needreportPage(String page) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("list_page"); + rbens.setPage_type(page); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportHome(String page,String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("index_roll"); + rbens.setPage_type(page); + rbens.setResource_name(name); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportDetail(String page,String tags,String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("detail_page"); + rbens.setPage_type(page); + rbens.setResource_name(name); + rbens.setResource_option(tags+""); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(getActivity(), ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + getActivity().startService(intent); + } + public void needreportSimple(String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/base/yongyaoTotalBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/base/yongyaoTotalBean.java new file mode 100644 index 0000000..5b659cd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/base/yongyaoTotalBean.java @@ -0,0 +1,16 @@ +package cn.shangyu.gdxzExpert.base; + +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.yongyaoBean; + +public class yongyaoTotalBean extends BaseBeanNew { + private yongyaoBean data; + + public yongyaoBean getData() { + return data; + } + + public void setData(yongyaoBean data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBitmaps.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBitmaps.java new file mode 100644 index 0000000..1cdd070 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBitmaps.java @@ -0,0 +1,43 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; + +import android.graphics.Bitmap; + +public class AddBitmaps implements Serializable { + private static final long serialVersionUID = 8682674788506891598L; + private boolean isAdd; + private Bitmap bitmap; + private String path; + + public AddBitmaps(boolean isAdd, Bitmap bitmap, String path) { + this.isAdd = isAdd; + this.bitmap = bitmap; + this.path = path; + } + + public boolean isAdd() { + return isAdd; + } + + public void setAdd(boolean isAdd) { + this.isAdd = isAdd; + } + + public Bitmap getBitmap() { + return bitmap; + } + + public void setBitmap(Bitmap bitmap) { + this.bitmap = bitmap; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBonusPointsSuccessBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBonusPointsSuccessBean.java new file mode 100644 index 0000000..ac8cd6d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddBonusPointsSuccessBean.java @@ -0,0 +1,148 @@ +package cn.shangyu.gdxzExpert.bean; +/** + * @author 作者 wcx + * @version 创建时间:2018-7-12 上午10:55:32 + * 类说明 + */ +public class AddBonusPointsSuccessBean { + /** + * debug : true + * code : 201 + * questionAndAnswer : {"contentText":"无论是多少样,肝硬化患者,无论什么时候开始抗病毒治疗都不算早......","tagname":"甲型肝炎","title":"测试分享","readnum":6,"path":"html/questionandanswer/a5543896f28b4476a2c4c06165c0e451.html"} + * gdxzday : 874 + * continuous_day : 1 + * message : 重复签到 + * totalDay : 1 + */ + + private boolean debug; + private String code; + private News news; + private int gdxzday; + private int continuous_day; + private String message; + private int totalDay; + + public boolean isDebug() { + return debug; + } + + public void setDebug(boolean debug) { + this.debug = debug; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public News getQuestionAndAnswer() { + return news; + } + + public void setQuestionAndAnswer(News questionAndAnswer) { + this.news = questionAndAnswer; + } + + public int getGdxzday() { + return gdxzday; + } + + public void setGdxzday(int gdxzday) { + this.gdxzday = gdxzday; + } + + public int getContinuous_day() { + return continuous_day; + } + + public void setContinuous_day(int continuous_day) { + this.continuous_day = continuous_day; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getTotalDay() { + return totalDay; + } + + public void setTotalDay(int totalDay) { + this.totalDay = totalDay; + } + + public static class News { + + /* "editType": 1, + "summary": "WE", + "createDate": "2018-05-23 08:48:12", + "uuid": "98e9cfb96ff84284a1211b18040ed4d6", + "title": "QQ", + "headImg": null, + "agreenum": 0, + "readnum": 27, + "path": "html/news/98e9cfb96ff84284a1211b18040ed4d6.html"*/ + private String editType; + private String summary; + private String createDate; + private String title; + + private String agreenum; + private String readnum; + private String path; + public String getEditType() { + return editType; + } + public void setEditType(String editType) { + this.editType = editType; + } + public String getSummary() { + return summary; + } + public void setSummary(String summary) { + this.summary = summary; + } + public String getCreateDate() { + return createDate; + } + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + + public String getAgreenum() { + return agreenum; + } + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + public String getReadnum() { + return readnum; + } + public void setReadnum(String readnum) { + this.readnum = readnum; + } + public String getPath() { + return path; + } + public void setPath(String path) { + this.path = path; + } + + + } +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddCaseNewRecordAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddCaseNewRecordAdapter.java new file mode 100644 index 0000000..895c243 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddCaseNewRecordAdapter.java @@ -0,0 +1,159 @@ +package cn.shangyu.gdxzExpert.bean; + +import android.app.Activity; +import android.graphics.Bitmap; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BiochemistryActivity; +import cn.shangyu.gdxzExpert.activity.CtActivity; +import cn.shangyu.gdxzExpert.activity.FibroActivity; +import cn.shangyu.gdxzExpert.activity.HbvdnaActivity; +import cn.shangyu.gdxzExpert.activity.InfomationActivity; +import cn.shangyu.gdxzExpert.activity.PastHistoryActivity; +import cn.shangyu.gdxzExpert.activity.TerminationActivity; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class AddCaseNewRecordAdapter extends BaseAdapter { + private Activity mActivity; + private List mBitmaps; + private AddBitmaps mAddBitmaps; + + public AddCaseNewRecordAdapter(Activity mActivity, List mBitmaps, + AddBitmaps mAddBitmaps) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + this.mBitmaps = mBitmaps; + this.mAddBitmaps = mAddBitmaps; + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mBitmaps.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mBitmaps.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.item_gv_case_record); + ImageView iv_photo = (ImageView) view + .findViewById(R.id.iv_item_gv_case_photo); + ImageView iv_delete = (ImageView) view + .findViewById(R.id.iv_item_gv_case_delete); + if (mBitmaps.get(position).isAdd()) { + iv_delete.setVisibility(View.GONE); + } + + if (mBitmaps.get(position).getBitmap() != null) { + iv_photo.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + if (mBitmaps.get(position).getPath() != null) { + ImageLoader.getInstance().displayImage( + mBitmaps.get(position).getPath(), iv_photo, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + iv_delete.setVisibility(View.VISIBLE); + ImageLoader.getInstance().loadImage( + mBitmaps.get(position).getPath(), + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, + View view, Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + mBitmaps.get(position).setBitmap(loadedImage); + } + }); + } + iv_delete.setTag(position); + iv_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if ((Integer) v.getTag() < mBitmaps.size()) { + mBitmaps.remove(mBitmaps.get((Integer) v.getTag())); + } + + int a=(Integer) v.getTag(); + if(mActivity instanceof InfomationActivity) + { + if(((InfomationActivity)mActivity).imgs.size()>(Integer) v.getTag() ) + { + ((InfomationActivity)mActivity).imgs.remove(a); + } + } + else if(mActivity instanceof PastHistoryActivity) + { + if(((PastHistoryActivity)mActivity).yiganFragment.imgs.size()>(Integer) v.getTag() ) + { + ((PastHistoryActivity)mActivity).yiganFragment.imgs.remove(a); + } + } + + else if(mActivity instanceof HbvdnaActivity) + { + if(((HbvdnaActivity)mActivity).imgs.size()>(Integer) v.getTag() ) + { + ((HbvdnaActivity)mActivity).imgs.remove(a); + } + } + else if(mActivity instanceof BiochemistryActivity) + { + if(((BiochemistryActivity)mActivity).imgs.size()>(Integer) v.getTag() ) + { + ((BiochemistryActivity)mActivity).imgs.remove(a); + } + } + else if(mActivity instanceof CtActivity) + { + if(((CtActivity)mActivity).imgs.size()>(Integer) v.getTag() ) + { + ((CtActivity)mActivity).imgs.remove(a); + } + } + else if(mActivity instanceof FibroActivity) + { + if(((FibroActivity)mActivity).imgs.size()>(Integer) v.getTag() ) + { + ((FibroActivity)mActivity).imgs.remove(a); + } + } + else if(mActivity instanceof TerminationActivity) + { + if(((TerminationActivity)mActivity).imgs.size()>(Integer) v.getTag() ) + { + ((TerminationActivity)mActivity).imgs.remove(a); + } + } + if (!mBitmaps.contains(mAddBitmaps)) { + mBitmaps.add(mAddBitmaps); + } + notifyDataSetChanged(); + } + }); + return view; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddPatientBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddPatientBean.java new file mode 100644 index 0000000..423a063 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AddPatientBean.java @@ -0,0 +1,341 @@ +package cn.shangyu.gdxzExpert.bean; + +public class AddPatientBean extends BaseBeanNew{ + private AddBean data; + + public AddBean getData() { + return data; + } + + public void setData(AddBean data) { + this.data = data; + } + + public class AddBean + { + private String patientcaseId;// integer(int64) + private String projectId;// integer(int32) + private String departmentId;// integer(int64) + private String employeeId;// integer(int64) + private String name;// string + private String groupNo;// string + private String patientNo;// string + private String dataStatus;// integer(int32) + private String sdvStatus;// integer(int32) + private String sex;// integer(int32) + private String birthday;// string(date) + private String mobile;// string + private String hbvYear;// integer(int32) + private String hbvMonth;// integer(int32) + private String alcoholFlag;// integer(int32) + private String freezeFlag;// integer(int32) + private String nonAlcoholFlag;// integer(int32) + private String drinkFlag;// integer(int32) + private String deletedFlag;// integer(int32) + private String groupFlag;// integer(int32) + private String diagnosisAlcoholFlag;// integer(int32) + private String drinkStopFlag;// integer(int32) + private String drinkStopYear;// integer(int32) + private String drinkStopMonth;// integer(int32) + private String hbvFamilyFlag;// integer(int32) + private String hccFamilyFlag;// integer(int32) + private String htnMixFlag;// integer(int32) + private String dmMixFlag;// integer(int32) + private String chdMixFlag;// integer(int32) + private String ciMixFlag;// integer(int32) + private String ichMixFlag;// integer(int32) + private String otherMix;// string + private String imgPath;// string + private String hbvTreatYongyaoId;// integer(int64) + private String createTime;// string(date-time) + private String updateTime;// + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(String employeeId) { + this.employeeId = employeeId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getGroupNo() { + return groupNo; + } + + public void setGroupNo(String groupNo) { + this.groupNo = groupNo; + } + + public String getPatientNo() { + return patientNo; + } + + public void setPatientNo(String patientNo) { + this.patientNo = patientNo; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getHbvYear() { + return hbvYear; + } + + public void setHbvYear(String hbvYear) { + this.hbvYear = hbvYear; + } + + public String getHbvMonth() { + return hbvMonth; + } + + public void setHbvMonth(String hbvMonth) { + this.hbvMonth = hbvMonth; + } + + public String getAlcoholFlag() { + return alcoholFlag; + } + + public void setAlcoholFlag(String alcoholFlag) { + this.alcoholFlag = alcoholFlag; + } + + public String getFreezeFlag() { + return freezeFlag; + } + + public void setFreezeFlag(String freezeFlag) { + this.freezeFlag = freezeFlag; + } + + public String getNonAlcoholFlag() { + return nonAlcoholFlag; + } + + public void setNonAlcoholFlag(String nonAlcoholFlag) { + this.nonAlcoholFlag = nonAlcoholFlag; + } + + public String getDrinkFlag() { + return drinkFlag; + } + + public void setDrinkFlag(String drinkFlag) { + this.drinkFlag = drinkFlag; + } + + public String getDeletedFlag() { + return deletedFlag; + } + + public void setDeletedFlag(String deletedFlag) { + this.deletedFlag = deletedFlag; + } + + public String getGroupFlag() { + return groupFlag; + } + + public void setGroupFlag(String groupFlag) { + this.groupFlag = groupFlag; + } + + public String getDiagnosisAlcoholFlag() { + return diagnosisAlcoholFlag; + } + + public void setDiagnosisAlcoholFlag(String diagnosisAlcoholFlag) { + this.diagnosisAlcoholFlag = diagnosisAlcoholFlag; + } + + public String getDrinkStopFlag() { + return drinkStopFlag; + } + + public void setDrinkStopFlag(String drinkStopFlag) { + this.drinkStopFlag = drinkStopFlag; + } + + public String getDrinkStopYear() { + return drinkStopYear; + } + + public void setDrinkStopYear(String drinkStopYear) { + this.drinkStopYear = drinkStopYear; + } + + public String getDrinkStopMonth() { + return drinkStopMonth; + } + + public void setDrinkStopMonth(String drinkStopMonth) { + this.drinkStopMonth = drinkStopMonth; + } + + public String getHbvFamilyFlag() { + return hbvFamilyFlag; + } + + public void setHbvFamilyFlag(String hbvFamilyFlag) { + this.hbvFamilyFlag = hbvFamilyFlag; + } + + public String getHccFamilyFlag() { + return hccFamilyFlag; + } + + public void setHccFamilyFlag(String hccFamilyFlag) { + this.hccFamilyFlag = hccFamilyFlag; + } + + public String getHtnMixFlag() { + return htnMixFlag; + } + + public void setHtnMixFlag(String htnMixFlag) { + this.htnMixFlag = htnMixFlag; + } + + public String getDmMixFlag() { + return dmMixFlag; + } + + public void setDmMixFlag(String dmMixFlag) { + this.dmMixFlag = dmMixFlag; + } + + public String getChdMixFlag() { + return chdMixFlag; + } + + public void setChdMixFlag(String chdMixFlag) { + this.chdMixFlag = chdMixFlag; + } + + public String getCiMixFlag() { + return ciMixFlag; + } + + public void setCiMixFlag(String ciMixFlag) { + this.ciMixFlag = ciMixFlag; + } + + public String getIchMixFlag() { + return ichMixFlag; + } + + public void setIchMixFlag(String ichMixFlag) { + this.ichMixFlag = ichMixFlag; + } + + public String getOtherMix() { + return otherMix; + } + + public void setOtherMix(String otherMix) { + this.otherMix = otherMix; + } + + public String getImgPath() { + return imgPath; + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath; + } + + public String getHbvTreatYongyaoId() { + return hbvTreatYongyaoId; + } + + public void setHbvTreatYongyaoId(String hbvTreatYongyaoId) { + this.hbvTreatYongyaoId = hbvTreatYongyaoId; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/AreaBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AreaBean.java new file mode 100644 index 0000000..9977ffb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/AreaBean.java @@ -0,0 +1,54 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class AreaBean extends BaseBean{ + List data; + public class arbean + { + private String name; + private String fullName; + private int parent; + private int id; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + public int getParent() { + return parent; + } + + public void setParent(int parent) { + this.parent = parent; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/Bank.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/Bank.java new file mode 100644 index 0000000..394a634 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/Bank.java @@ -0,0 +1,7 @@ +package cn.shangyu.gdxzExpert.bean; + +public class Bank extends BaseBean{ + public int bankIcon; + public String bankName; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BankCardBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BankCardBean.java new file mode 100644 index 0000000..c989577 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BankCardBean.java @@ -0,0 +1,88 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class BankCardBean extends BaseBean { + public List bankList; + public double LessWithdrawalBalance;// 可提现最低金额 (分) + + public int WithdrawalBalanceFee;// 用户提现手续费(分) + public double WithdrawalBalanceMaxOnce;// 单笔最高提现金额 + + public class Card { + private String card_number; + private String id_name; + private String id_number; + private String mobile; + private String open_bank_code; + private String open_bank; + private String user_uuid; + private String uuid; + + public String getOpen_bank() { + return open_bank; + } + + public void setOpen_bank(String open_bank) { + this.open_bank = open_bank; + } + + public String getCard_number() { + return card_number; + } + + public void setCard_number(String card_number) { + this.card_number = card_number; + } + + public String getId_name() { + return id_name; + } + + public void setId_name(String id_name) { + this.id_name = id_name; + } + + public String getId_number() { + return id_number; + } + + public void setId_number(String id_number) { + this.id_number = id_number; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getOpen_bank_code() { + return open_bank_code; + } + + public void setOpen_bank_code(String open_bank_code) { + this.open_bank_code = open_bank_code; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBean.java new file mode 100644 index 0000000..24f9d9b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBean.java @@ -0,0 +1,26 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * 基础bean + * + * 类名称:BaseBean + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-9-23 下午2:01:59 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class BaseBean { + /** + * 状态码,例如:(1.操作成功 2.操作失败) + */ + public String code; + /** + * 状态对应的信息,如:"查询成功" + */ + public String message; + /** + * 总页数,对有加载更多的 + */ + public int totalPage; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanList.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanList.java new file mode 100644 index 0000000..041cc1d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanList.java @@ -0,0 +1,40 @@ +package cn.shangyu.gdxzExpert.bean; + +public class BaseBeanList { + private int pageNum ; + private int pageSize; + private int total; + private int pages; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanNew.java new file mode 100644 index 0000000..4c01a23 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseBeanNew.java @@ -0,0 +1,22 @@ +package cn.shangyu.gdxzExpert.bean; + +public class BaseBeanNew { + public String code; + public String msg; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseInfoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseInfoBean.java new file mode 100644 index 0000000..11fd52c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BaseInfoBean.java @@ -0,0 +1,290 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class BaseInfoBean extends BaseBeanNew{ + private baseBean data; + + public baseBean getData() { + return data; + } + + public void setData(baseBean data) { + this.data = data; + } + + public class baseBean + { + private String patientcaseId;// 病例id integer(int64) + private String name;// 姓名缩写 string + private String groupNo;// 入组编号 string + private String patientNo;// 患者编号(门诊、住院编号) string + private String sex;// 性别 1男 2女 integer(int32) + private String birthday;// 出生日期 string(date) + private String mobile;// 联系电话 string + private String hbvYear;// 乙肝病史 年 integer(int32) + private String hbvMonth;// 乙肝病史 月 integer(int32) + private String alcoholFlag;// 酒精性脂肪肝 0否 1是 integer(int32) + private String freezeFlag;// 冻结 01 integer(int32) + private String nonAlcoholFlag;// 非酒精性脂肪肝 01 integer(int32) + private String drinkFlag;// 是否饮酒 01 integer(int32) + private String diagnosisAlcoholFlag;// 是否符合诊断酒精性肝病 01 integer(int32) + private String drinkStopFlag;// 是否戒酒 01 integer(int32) + private String drinkStopYear;// 戒酒 年 integer(int32) + private String drinkStopMonth;// 戒酒 月 integer(int32) + private String hbvFamilyFlag;// 家族中有无其他HBV感染者 01 integer(int32) + private String hccFamilyFlag;// 家族中有无肝细胞癌患者 01 integer(int32) + private String htnMixFlag;// 混合 高血压 01 integer(int32) + private String dmMixFlag;// 混合 糖尿病 01 integer(int32) + private String chdMixFlag;// 混合 冠心病 01 integer(int32) + private String ciMixFlag;// 混合 脑梗死 01 integer(int32) + private String ichMixFlag;// 混合 脑出血 01 integer(int32) + private String otherMix;// 混合 其他 string + private List imgPath;// 相关图片 string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String createTime;// 创建时间 string(date-time) + private String updateTime;// + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getGroupNo() { + return groupNo; + } + + public void setGroupNo(String groupNo) { + this.groupNo = groupNo; + } + + public String getPatientNo() { + return patientNo; + } + + public void setPatientNo(String patientNo) { + this.patientNo = patientNo; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getHbvYear() { + return hbvYear; + } + + public void setHbvYear(String hbvYear) { + this.hbvYear = hbvYear; + } + + public String getHbvMonth() { + return hbvMonth; + } + + public void setHbvMonth(String hbvMonth) { + this.hbvMonth = hbvMonth; + } + + public String getAlcoholFlag() { + return alcoholFlag; + } + + public void setAlcoholFlag(String alcoholFlag) { + this.alcoholFlag = alcoholFlag; + } + + public String getFreezeFlag() { + return freezeFlag; + } + + public void setFreezeFlag(String freezeFlag) { + this.freezeFlag = freezeFlag; + } + + public String getNonAlcoholFlag() { + return nonAlcoholFlag; + } + + public void setNonAlcoholFlag(String nonAlcoholFlag) { + this.nonAlcoholFlag = nonAlcoholFlag; + } + + public String getDrinkFlag() { + return drinkFlag; + } + + public void setDrinkFlag(String drinkFlag) { + this.drinkFlag = drinkFlag; + } + + public String getDiagnosisAlcoholFlag() { + return diagnosisAlcoholFlag; + } + + public void setDiagnosisAlcoholFlag(String diagnosisAlcoholFlag) { + this.diagnosisAlcoholFlag = diagnosisAlcoholFlag; + } + + public String getDrinkStopFlag() { + return drinkStopFlag; + } + + public void setDrinkStopFlag(String drinkStopFlag) { + this.drinkStopFlag = drinkStopFlag; + } + + public String getDrinkStopYear() { + return drinkStopYear; + } + + public void setDrinkStopYear(String drinkStopYear) { + this.drinkStopYear = drinkStopYear; + } + + public String getDrinkStopMonth() { + return drinkStopMonth; + } + + public void setDrinkStopMonth(String drinkStopMonth) { + this.drinkStopMonth = drinkStopMonth; + } + + public String getHbvFamilyFlag() { + return hbvFamilyFlag; + } + + public void setHbvFamilyFlag(String hbvFamilyFlag) { + this.hbvFamilyFlag = hbvFamilyFlag; + } + + public String getHccFamilyFlag() { + return hccFamilyFlag; + } + + public void setHccFamilyFlag(String hccFamilyFlag) { + this.hccFamilyFlag = hccFamilyFlag; + } + + public String getHtnMixFlag() { + return htnMixFlag; + } + + public void setHtnMixFlag(String htnMixFlag) { + this.htnMixFlag = htnMixFlag; + } + + public String getDmMixFlag() { + return dmMixFlag; + } + + public void setDmMixFlag(String dmMixFlag) { + this.dmMixFlag = dmMixFlag; + } + + public String getChdMixFlag() { + return chdMixFlag; + } + + public void setChdMixFlag(String chdMixFlag) { + this.chdMixFlag = chdMixFlag; + } + + public String getCiMixFlag() { + return ciMixFlag; + } + + public void setCiMixFlag(String ciMixFlag) { + this.ciMixFlag = ciMixFlag; + } + + public String getIchMixFlag() { + return ichMixFlag; + } + + public void setIchMixFlag(String ichMixFlag) { + this.ichMixFlag = ichMixFlag; + } + + public String getOtherMix() { + return otherMix; + } + + public void setOtherMix(String otherMix) { + this.otherMix = otherMix; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BillBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BillBean.java new file mode 100644 index 0000000..664280d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BillBean.java @@ -0,0 +1,22 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class BillBean extends BaseBean { + + + public List data; + public class transactionRecordsData { + public String uuid ; + public String expertUuid;//专家uuid + public String expertName;//专家uuid + public String orderNum ;// 订单号 + public String price ;// 价格 + public int orderType;// 服务类型 + public String realName;//姓名 + public String patientName;//送花者 患者姓名 + public String orderDate;//订单日期 + public String isMonth;//是不是包月 1是 0 不是 + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BillListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BillListBean.java new file mode 100644 index 0000000..2db7beb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BillListBean.java @@ -0,0 +1,169 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class BillListBean extends BaseBean { + // pagePingOrderList": { + // "pageNumber": 1, + // "pageSize": 10, + // "totalPage": 16, + // "totalRow": 158 + // "list": [ + // { + // "order_uuid": "2011703110000032251", + // "account": 100, + // "order_type": 2, + // "pay_channel": null, + // "pay_time": null, + // "create_time": 1489197480, + // "order_desc": "专家给平台送心意", + // "order_note": null, + // "order_status": "created", + // "uuid": "7ab213fc09d14d97856510182e3f5e64", + // "user_uuid": "LU8DI8V4NqlnFW6T3OG" + // "accountstr": "-1", + // "order_type_name": "送心意", + // "user_name": "肝胆相照", + // }, + public PingOrder data; + + public class PingOrder { + public int pageNumber; + public int pageSize; + public int pages; + public int totalRow; + public List list; + + public class PingOrderBean { + private String trade_no; + private String account; + // 11爱心 12提现 + + private String order_type; + private String pay_channel; + private String create_time; + private String pay_time; + private String order_desc; + private String order_note; + private String order_status; + private String uuid; + private String user_uuid; + private String accountstr; + private String type_name; + private String user_name; + + public String getAccountstr() { + return accountstr; + } + + public void setAccountstr(String accountstr) { + this.accountstr = accountstr; + } + + public String getType_name() { + return type_name; + } + + public void setType_name(String type_name) { + this.type_name = type_name; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getTrade_no() { + return trade_no; + } + + public void setTrade_no(String trade_no) { + this.trade_no = trade_no; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getOrder_type() { + return order_type; + } + + public void setOrder_type(String order_type) { + this.order_type = order_type; + } + + public String getPay_channel() { + return pay_channel; + } + + public void setPay_channel(String pay_channel) { + this.pay_channel = pay_channel; + } + + public String getCreate_time() { + return create_time; + } + + public void setCreate_time(String create_time) { + this.create_time = create_time; + } + + public String getPay_time() { + return pay_time; + } + + public void setPay_time(String pay_time) { + this.pay_time = pay_time; + } + + public String getOrder_desc() { + return order_desc; + } + + public void setOrder_desc(String order_desc) { + this.order_desc = order_desc; + } + + public String getOrder_note() { + return order_note; + } + + public void setOrder_note(String order_note) { + this.order_note = order_note; + } + + public String getOrder_status() { + return order_status; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BonusPointsListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BonusPointsListBean.java new file mode 100644 index 0000000..78afab3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BonusPointsListBean.java @@ -0,0 +1,137 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * @author 作者 wcx + * @version 创建时间:2018-7-12 上午10:07:48 + * 类说明 + */ +public class BonusPointsListBean { + /** + * code : 1 + * data : {"pageNumber":1,"pageSize":10,"list":[{"score":3,"create_date":"2018-07-06 16:17:27","score_type_name":"肝胆家园发帖"},{"score":3,"create_date":"2018-07-06 16:17:26","score_type_name":"肝胆家园发帖"},{"score":2,"create_date":"2018-07-06 16:04:54","score_type_name":"签到"}],"totalPage":1,"totalRow":3} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNumber : 1 + * pageSize : 10 + * list : [{"score":3,"create_date":"2018-07-06 16:17:27","score_type_name":"肝胆家园发帖"},{"score":3,"create_date":"2018-07-06 16:17:26","score_type_name":"肝胆家园发帖"},{"score":2,"create_date":"2018-07-06 16:04:54","score_type_name":"签到"}] + * totalPage : 1 + * totalRow : 3 + */ + + private int pageNumber; + private int pageSize; + private int totalPage; + private int totalRow; + private List list; + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * score : 3 + * create_date : 2018-07-06 16:17:27 + * score_type_name : 肝胆家园发帖 + */ + + private String score; + private String create_date; + private String score_type_name; + + public String getScore() { + return score; + } + + public void setScore(String score) { + this.score = score; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getScore_type_name() { + return score_type_name; + } + + public void setScore_type_name(String score_type_name) { + this.score_type_name = score_type_name; + } + } + } +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/BookDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BookDetailBean.java new file mode 100644 index 0000000..484df4f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/BookDetailBean.java @@ -0,0 +1,134 @@ +package cn.shangyu.gdxzExpert.bean; + +public class BookDetailBean { + // 卷 + private String Volum; + // 期 + private String Issue; + // 页码 + private String Page; + // 摘要 + private String Abstract; + // 是否有全文(1有全文,0无全文) + private int HasOriginalDoc; + // 机构 + private String Organization; + // 论文id + private String ArticleID; + // 论文标题 + private String Title; + // 作者 + private String Creator; + // 来源 + private String Source; + // 关键词 + private String KeyWords; + // 日期 + private int Year; + private String DBID; + + public String getVolum() { + return Volum; + } + + public void setVolum(String volum) { + Volum = volum; + } + + public String getIssue() { + return Issue; + } + + public void setIssue(String issue) { + Issue = issue; + } + + public String getPage() { + return Page; + } + + public void setPage(String page) { + Page = page; + } + + public String getAbstract() { + return Abstract; + } + + public void setAbstract(String abstract1) { + Abstract = abstract1; + } + + public int getHasOriginalDoc() { + return HasOriginalDoc; + } + + public void setHasOriginalDoc(int hasOriginalDoc) { + HasOriginalDoc = hasOriginalDoc; + } + + public String getOrganization() { + return Organization; + } + + public void setOrganization(String organization) { + Organization = organization; + } + + public String getArticleID() { + return ArticleID; + } + + public void setArticleID(String articleID) { + ArticleID = articleID; + } + + public String getTitle() { + return Title; + } + + public void setTitle(String title) { + Title = title; + } + + public String getCreator() { + return Creator; + } + + public void setCreator(String creator) { + Creator = creator; + } + + public String getSource() { + return Source; + } + + public void setSource(String source) { + Source = source; + } + + public String getKeyWords() { + return KeyWords; + } + + public void setKeyWords(String keyWords) { + KeyWords = keyWords; + } + + public int getYear() { + return Year; + } + + public void setYear(int year) { + Year = year; + } + + public String getDBID() { + return DBID; + } + + public void setDBID(String dBID) { + DBID = dBID; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseAssembleListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseAssembleListBean.java new file mode 100644 index 0000000..3c9d792 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseAssembleListBean.java @@ -0,0 +1,196 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/12/30. + */ + +public class CaseAssembleListBean { + + /** + * code : 1 + * data : {"pageNum":1,"pages":1,"isFirstPage":true,"isLastPage":true,"pageSize":10,"list":[{"path":"html/bgtynews/b2ea4615ccaf49a8b68234fd728530b0.html","agreenum":0,"headImg":"book/pdf/2019/20191228163618.png","readnum":0,"title":"sdd","create_date":"2019-12-28 16:36:19","uuid":"b2ea4615ccaf49a8b68234fd728530b0"},{"path":"html/bgtynews/9b48b3c6611c419999dce19dd929f07a.html","agreenum":0,"headImg":"book/pdf/2019/20191228162456.png","readnum":0,"title":"BingGanTuoYe","create_date":"2019-12-28 16:24:57","uuid":"9b48b3c6611c419999dce19dd929f07a"}],"total":2} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNum : 1 + * pages : 1 + * isFirstPage : true + * isLastPage : true + * pageSize : 10 + * list : [{"path":"html/bgtynews/b2ea4615ccaf49a8b68234fd728530b0.html","agreenum":0,"headImg":"book/pdf/2019/20191228163618.png","readnum":0,"title":"sdd","create_date":"2019-12-28 16:36:19","uuid":"b2ea4615ccaf49a8b68234fd728530b0"},{"path":"html/bgtynews/9b48b3c6611c419999dce19dd929f07a.html","agreenum":0,"headImg":"book/pdf/2019/20191228162456.png","readnum":0,"title":"BingGanTuoYe","create_date":"2019-12-28 16:24:57","uuid":"9b48b3c6611c419999dce19dd929f07a"}] + * total : 2 + */ + + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int pageSize; + private int total; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * path : html/bgtynews/b2ea4615ccaf49a8b68234fd728530b0.html + * agreenum : 0 + * headImg : book/pdf/2019/20191228163618.png + * readnum : 0 + * title : sdd + * create_date : 2019-12-28 16:36:19 + * uuid : b2ea4615ccaf49a8b68234fd728530b0 + */ + + private String path; + private int agreenum; + private String headImg; + private int readnum; + private String title; + private String create_date; + private String uuid; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public int getAgreenum() { + return agreenum; + } + + public void setAgreenum(int agreenum) { + this.agreenum = agreenum; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseDetailBean.java new file mode 100644 index 0000000..0c203b9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseDetailBean.java @@ -0,0 +1,30 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CaseDetailBean extends BaseBean { + public CaseDetailData data; + + public List img; + + public class CaseDetailData { + public String uuid; + public String patientUuid; + public String createDate; + public String title; + public String modifyDate; + public String des; + public String diseaseName; + public String diseaseUuid; + public String state; + } + public class CaseDetailImg { + public String uuid; + public String path; + public String createDate; + public String caseUuid; + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseRecordBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseRecordBean.java new file mode 100644 index 0000000..38ad0bb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CaseRecordBean.java @@ -0,0 +1,75 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +public class CaseRecordBean extends BaseBean { + public CaseRecordData data; + + public class CaseRecordData { + public Collection list; + public int pageNumber; + public int pageSize; + public int totalPage; + public int totalRow; + } + + public class DatasCase implements Serializable{ + private String des; + private String create_date; + private String patient_uuid; + private String uuid; + private String expert_uuid; + private List photo; + + public String getDes() { + return des; + } + + public void setDes(String des) { + this.des = des; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getPatient_uuid() { + return patient_uuid; + } + + public void setPatient_uuid(String patient_uuid) { + this.patient_uuid = patient_uuid; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public List getPhoto() { + return photo; + } + + public void setPhoto(List photo) { + this.photo = photo; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionBean.java new file mode 100644 index 0000000..392b53f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionBean.java @@ -0,0 +1,204 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * 病例讨论列表Bean + */ +public class CasediscussionBean { + private String code; + private DataBean data; + private int totalPage; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + private int pageNumber; + private int pageSize; + private int totalRow; + private int totalPage; + private List list; + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class Casediscussion { + + private String create_date; + private String expert_uuid; + private String expert_photo; + private String expert_name; + private String expert_hospital_name; + private String tag1; + private String tag2; + private String tag3; + private String des; + private String uuid; + private List photo; + private String commentNum; + public String getCommentNum() { + return commentNum; + } + + public void setCommentNum(String commentNum) { + this.commentNum = commentNum; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getExpert_photo() { + return expert_photo; + } + + public void setExpert_photo(String expert_photo) { + this.expert_photo = expert_photo; + } + + public String getExpert_name() { + return expert_name; + } + + public void setExpert_name(String expert_name) { + this.expert_name = expert_name; + } + + public String getExpert_hospital_name() { + return expert_hospital_name; + } + + public void setExpert_hospital_name(String expert_hospital_name) { + this.expert_hospital_name = expert_hospital_name; + } + + public String getTag1() { + return tag1; + } + + public void setTag1(String tag1) { + this.tag1 = tag1; + } + + public String getTag2() { + return tag2; + } + + public void setTag2(String tag2) { + this.tag2 = tag2; + } + + public String getTag3() { + return tag3; + } + + public void setTag3(String tag3) { + this.tag3 = tag3; + } + + public String getDes() { + return des; + } + + public void setDes(String des) { + this.des = des; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public List getPhoto() { + return photo; + } + + public void setPhoto(List photo) { + this.photo = photo; + } + } + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionCollentBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionCollentBean.java new file mode 100644 index 0000000..1997df3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasediscussionCollentBean.java @@ -0,0 +1,49 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * 病例讨论收藏列表Bean + */ +public class CasediscussionCollentBean extends BaseBean { + public List data; + public static class CasediscussionCollent{ + public List photo; + public String uuid; + public String expert_uuid; + public String des; + public String expert_photo; + public String expert_name; + public String expert_hospital_name; + public String tag1; + public String tag2; + public String tag3; + public String create_date; + } +} +/*public class CasediscussionCollentBean extends BaseBean { + public DataBean datas; + public int totalPage; + public static class DataBean { + private int pageNumber; + private int pageSize; + private int totalRow; + private int totalPage; +// private List list; + public List data; + public static class CasediscussionCollent { + public List photo; + public String create_date; + public String expert_uuid; + public String expert_photo; + public String expert_name; + public String expert_hospital_name; + public String tag1; + public String tag2; + public String tag3; + public String des; + public String uuid; + } + } +} +*/ \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasesuiondelBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasesuiondelBean.java new file mode 100644 index 0000000..fd887e6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CasesuiondelBean.java @@ -0,0 +1,80 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CasesuiondelBean extends BaseBean { + public DataBean data; + public class CasesuiondelData { +// public Collection list; + + public String des; + public String create_date; + public String expert_hospital_name; + public String expert_name; + public String expert_photo; + public String expert_uuid; + public String tag1; + public String tag2; + public String tag3; + public List photo; + } + public class DataBean + { + public CasesuiondelData data; + public String isCollection; + } + + public class datase {/* + private String des; + private String create_date; + private String expert_hospital_name; + private String expert_name; + private String expert_photo; + private String expert_uuid; + private String tag1; + private String tag2; + private String tag3; + private List photo; + + public String getDes() { + return des; + } + + public String getCreate_date() { + return create_date; + } + + public String getExpert_hospital_name() { + return expert_hospital_name; + } + + public String getExpert_name() { + return expert_name; + } + + public String getExpert_photo() { + return expert_photo; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public String getTag1() { + return tag1; + } + + public String getTag2() { + return tag2; + } + + public String getTag3() { + return tag3; + } + + public List getPhoto() { + return photo; + } + + */} +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ChangeMyInfoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ChangeMyInfoBean.java new file mode 100644 index 0000000..a5065b1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ChangeMyInfoBean.java @@ -0,0 +1,64 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +//获取医院,科室,职称,等列表 +public class ChangeMyInfoBean extends BaseBean { + + public InfoData expert; + public List specialy; + + public class InfoData { + + public String uuid;//唯一标识 + public String mobile;//手机号 + public String userName;//手机号 + public String realName;//真实姓名 + public String photo;//头像路径 + public int sex;// 性别(0.男 1.女) + public String email;//邮箱 + public int provId;//省id + public int cityId;//市id + public int countyId;//区县id + public String birthDate;//出生日期 + public String hospitalUuid;//坐诊医院uuid + public String hospitalName;//坐诊医院名称 + public String officeUuid;//科室uuid + public String officeName;//科室名称 + public String officePhone;//科室电话 + public String positionName;//职称姓名 + public String positionUuid;//职称uuid + public String intro;//简介 + public String certificate;//执业资格证 + public String certificateImg;//执业资格证图片 + public String qrcode;//二维码 + public String isStar;//是否是肝胆名医 0否 1是 + public int state; + @Override + public String toString() { + return "InfoData [uuid=" + uuid + ", mobile=" + mobile + + ", realName=" + realName + ", photo=" + photo + ", sex=" + + sex + ", email=" + email + ", provId=" + provId + + ", cityId=" + cityId + ", countyId=" + countyId + + ", birthDate=" + birthDate + ", hospitalUuid=" + + hospitalUuid + ", hospitalName=" + hospitalName + + ", officeUuid=" + officeUuid + ", officeName=" + + officeName + ", officePhone=" + officePhone + + ", positionName=" + positionName + ", positionUuid=" + + positionUuid + ", intro=" + intro + ", certificate=" + + certificate + ", certificateImg=" + certificateImg + + ", qrcode=" + qrcode + ", isStar=" + isStar + "]"; + } + } + public class SpecialData { + public String diseaseUuid;//专长 + public String diseaseName;//专长名称 + @Override + public String toString() { + return "SpecialData [diseaseUuid=" + diseaseUuid + + ", diseaseName=" + diseaseName + "]"; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/Child.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/Child.java new file mode 100644 index 0000000..f00c1cb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/Child.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.bean; + +public class Child{ + private String comment_uuid; + private String photo; + private String user_uuid; + private String create_date; + private String parent_id; + private String name; + private String id; + private String content; + private String user_status; + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getComment_uuid() { + return comment_uuid; + } + + public void setComment_uuid(String comment_uuid) { + this.comment_uuid = comment_uuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getParent_id() { + return parent_id; + } + + public void setParent_id(String parent_id) { + this.parent_id = parent_id; + } + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ChildTree.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ChildTree.java new file mode 100644 index 0000000..7739848 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ChildTree.java @@ -0,0 +1,79 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; + +public class ChildTree implements Serializable +{ + private String title;// 标题 string + private String key;// 唯一标识 string + private String formRefKey;// 表单key string + private String date;// 日期 string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已录入 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String apiId;// + private String suifangDate; + + public String getSuifangDate() { + return suifangDate; + } + + public void setSuifangDate(String suifangDate) { + this.suifangDate = suifangDate; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getFormRefKey() { + return formRefKey; + } + + public void setFormRefKey(String formRefKey) { + this.formRefKey = formRefKey; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getApiId() { + return apiId; + } + + public void setApiId(String apiId) { + this.apiId = apiId; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleBean.java new file mode 100644 index 0000000..9794bfd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleBean.java @@ -0,0 +1,43 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * 经典病例bean CircleBean + */ +public class CircleBean extends BaseBean { + public List data; + public class CircleData { + public String title;//项目名称 + public String head_img;// + public String create_date;// + public String uuid;// + public String agreenum;// + public String readnum;// + public String type;// + public String path;//路径 + + public String getUuid() { + return uuid; + } + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleCollectBIngliBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleCollectBIngliBean.java new file mode 100644 index 0000000..32d73bd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CircleCollectBIngliBean.java @@ -0,0 +1,20 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + *@author JIXiao + *@author 经典病例收藏Bean CircleCollectBIngliBean + */ +public class CircleCollectBIngliBean extends BaseBean { + public List data; + public class Collection { + public String title;//项目名称 + public String other_uuid;// + public String agreenum;// + public String readnum;// + public String type;// + public String path;//路径 + public String user_uuid;//路径 + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/City.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/City.java new file mode 100644 index 0000000..8e99f76 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/City.java @@ -0,0 +1,64 @@ +package cn.shangyu.gdxzExpert.bean; + + + +/** + * City.java + * @author 高财顺 + * @date 2015-9-24 下午3:26:34 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明: 存储省市区 + */ +public class City { + + private int id; + private String _id;//主键 id + private String name;//城市名称 + private String fullName;//省市县 全称 + private String parent;//父级id + private String treePath;//省市县结构层次标识,逗号之间为父级id + public int getId() { + return id; + } + public void setId(int id) { + this.id = id; + } + public String get_id() { + return _id; + } + public void set_id(String _id) { + this._id = _id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getFullName() { + return fullName; + } + public void setFullName(String fullName) { + this.fullName = fullName; + } + public String getParent() { + return parent; + } + public void setParent(String parent) { + this.parent = parent; + } + public String getTreePath() { + return treePath; + } + public void setTreePath(String treePath) { + this.treePath = treePath; + } + @Override + public String toString() { + return name; + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ClassDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ClassDetailBean.java new file mode 100644 index 0000000..7ebe260 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ClassDetailBean.java @@ -0,0 +1,404 @@ +package cn.shangyu.gdxzExpert.bean; + + +import java.io.Serializable; +import java.util.List; + +public class ClassDetailBean { + private String message; + private CourseBean data; + private String msg; + private String code; + public class CourseBean + { + private String id; + private String title; + private String status; + private String comment_num; + private List excellentcourse_first_title_list; + private String discount_price; + private String discount_begin_date; + private String discount_end_date; + private String account; + private String discount_type; + private String index_img; + private String study_num; + private String descs; + private String video_num; + private String upload_num; + private String back_bon; + private String fuli_num; + private String study_status; + private String fuli_bon; + private String is_buy; + private String special_type_name; + private String state; + private String tags; + private String is_commented; + private String comment_star; + private String fuli_remaining; + private String is_granted; + + public String getIs_granted() { + return is_granted; + } + + public void setIs_granted(String is_granted) { + this.is_granted = is_granted; + } + + public String getFuli_remaining() { + return fuli_remaining; + } + + public void setFuli_remaining(String fuli_remaining) { + this.fuli_remaining = fuli_remaining; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getFuli_num() { + return fuli_num; + } + + public void setFuli_num(String fuli_num) { + this.fuli_num = fuli_num; + } + + public String getStudy_status() { + return study_status; + } + + public void setStudy_status(String study_status) { + this.study_status = study_status; + } + + public String getComment_star() { + return comment_star; + } + + public void setComment_star(String comment_star) { + this.comment_star = comment_star; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getComment_num() { + return comment_num; + } + + public void setComment_num(String comment_num) { + this.comment_num = comment_num; + } + + public List getExcellentcourse_first_title_list() { + return excellentcourse_first_title_list; + } + + public void setExcellentcourse_first_title_list(List excellentcourse_first_title_list) { + this.excellentcourse_first_title_list = excellentcourse_first_title_list; + } + + public String getDiscount_price() { + return discount_price; + } + + public void setDiscount_price(String discount_price) { + this.discount_price = discount_price; + } + + public String getDiscount_begin_date() { + return discount_begin_date; + } + + public void setDiscount_begin_date(String discount_begin_date) { + this.discount_begin_date = discount_begin_date; + } + + public String getDiscount_end_date() { + return discount_end_date; + } + + public void setDiscount_end_date(String discount_end_date) { + this.discount_end_date = discount_end_date; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDiscount_type() { + return discount_type; + } + + public void setDiscount_type(String discount_type) { + this.discount_type = discount_type; + } + + public String getIndex_img() { + return index_img; + } + + public void setIndex_img(String index_img) { + this.index_img = index_img; + } + + public String getStudy_num() { + return study_num; + } + + public void setStudy_num(String study_num) { + this.study_num = study_num; + } + + public String getDescs() { + return descs; + } + + public void setDescs(String descs) { + this.descs = descs; + } + + public String getVideo_num() { + return video_num; + } + + public void setVideo_num(String video_num) { + this.video_num = video_num; + } + + public String getUpload_num() { + return upload_num; + } + + public void setUpload_num(String upload_num) { + this.upload_num = upload_num; + } + + public String getBack_bon() { + return back_bon; + } + + public void setBack_bon(String back_bon) { + this.back_bon = back_bon; + } + + public String getFuli_bon() { + return fuli_bon; + } + + public void setFuli_bon(String fuli_bon) { + this.fuli_bon = fuli_bon; + } + + public String getIs_buy() { + return is_buy; + } + + public void setIs_buy(String is_buy) { + this.is_buy = is_buy; + } + + public String getSpecial_type_name() { + return special_type_name; + } + + public void setSpecial_type_name(String special_type_name) { + this.special_type_name = special_type_name; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getIs_commented() { + return is_commented; + } + + public void setIs_commented(String is_commented) { + this.is_commented = is_commented; + } + } + public class FirstBean implements Serializable + { + private String id; + private String title; + private List excellentcourse_second_title_list; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getExcellentcourse_second_title_list() { + return excellentcourse_second_title_list; + } + + public void setExcellentcourse_second_title_list(List excellentcourse_second_title_list) { + this.excellentcourse_second_title_list = excellentcourse_second_title_list; + } + } + public class SecondBean implements Serializable + { + private String id; + private String type; + private String time; + private String title; + private String excellentcourse_first_title_id; + private String vid; + private String status; + private String duration; + private Boolean is_new; + + public Boolean getIs_new() { + return is_new; + } + + public void setIs_new(Boolean is_new) { + this.is_new = is_new; + } + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getExcellentcourse_first_title_id() { + return excellentcourse_first_title_id; + } + + public void setExcellentcourse_first_title_id(String excellentcourse_first_title_id) { + this.excellentcourse_first_title_id = excellentcourse_first_title_id; + } + + public String getVid() { + return vid; + } + + public void setVid(String vid) { + this.vid = vid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public CourseBean getData() { + return data; + } + + public void setData(CourseBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectListBean.java new file mode 100644 index 0000000..93257d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectListBean.java @@ -0,0 +1,32 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CollectListBean extends BaseBean { + + + public CollectListData data; + public class CollectListData { + public List list; + public int pageNumber ; + public int pageSize ; + public int totalPage ; + public int totalRow ; + } + + public class CollectList { + + public String uuid; + public String title;//标题; + public String createDate;//创建时间 + public String releaseTime; //发布时间 ” authorName”; + public String authorName;//作者名 只有<期刊杂志>有此字段 未标注的三个分类都具有 + public String des;//描述 只有<期刊杂志>有此字段 + public String summary;//摘要 + public String isCollect;// + public String libraryUuid;// + public String secondTitle;//副标题 + public String path;//静态路径 + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectNewsBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectNewsBean.java new file mode 100644 index 0000000..66eeb3c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectNewsBean.java @@ -0,0 +1,150 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/2/25. + */ + +public class CollectNewsBean { + + /** + * code : 1 + * data : [{"other_uuid":"2567e4646d3940eb9bda2edd79f02b41","title":"关键字 列表测试","user_uuid":"74BXtpwcy6h0zHNvNtJ","imgpath":"http://tdoc.igandan.org/app/book/pdf/2017/20170217165910.jpg","agreenum":0,"readnum":40,"public_name":"","type":1,"path":"html/news/2567e4646d3940eb9bda2edd79f02b41.html"}] + * totalPage : 1 + * message : 查询成功 + */ + + private String code; + private int totalPage; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * other_uuid : 2567e4646d3940eb9bda2edd79f02b41 + * title : 关键字 列表测试 + * user_uuid : 74BXtpwcy6h0zHNvNtJ + * imgpath : http://tdoc.igandan.org/app/book/pdf/2017/20170217165910.jpg + * agreenum : 0 + * readnum : 40 + * public_name : + * type : 1 + * path : html/news/2567e4646d3940eb9bda2edd79f02b41.html + */ + + private String other_uuid; + private String title; + private String user_uuid; + private String imgpath; + private int agreenum; + private int readnum; + private String public_name; + private int type; + private String path; + + public String getOther_uuid() { + return other_uuid; + } + + public void setOther_uuid(String other_uuid) { + this.other_uuid = other_uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public int getAgreenum() { + return agreenum; + } + + public void setAgreenum(int agreenum) { + this.agreenum = agreenum; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectVideoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectVideoBean.java new file mode 100644 index 0000000..e0b5529 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CollectVideoBean.java @@ -0,0 +1,113 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CollectVideoBean extends BaseBean { + // "data": [ + // { + // "title": "大是大非", + // "imgpath": "book/pdf/2016/20161115102349.jpg", + // "public_name": "dasd", + // "user_uuid": "b7eJggp1OYSyba2RgEw", + // "other_uuid": "ddaf278061494883b92c16cf21469135", + // "agreenum": 0, + // "readnum": null, + // "type": 5, + // "path": "html/video/ddaf278061494883b92c16cf21469135.html" + // }, + public List data; + + public class CollectVideo { + private String title; + private String imgpath; + private String public_name; + private String user_uuid; + private String other_uuid; + private String agreenum; + private String readnum; + private String type; + private String path; + private String video_type;//(1肝胆视频 2患教视频) + + public String getVideo_type() { + return video_type; + } + + public void setVideo_type(String video_type) { + this.video_type = video_type; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getOther_uuid() { + return other_uuid; + } + + public void setOther_uuid(String other_uuid) { + this.other_uuid = other_uuid; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CommentBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CommentBean.java new file mode 100644 index 0000000..994a521 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CommentBean.java @@ -0,0 +1,106 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CommentBean extends BaseBean { + // "data": [ + // { + // "comment_uuid": "8i7LZvMXiqQErP2te9e", + // "expert_uuid": "rwF4n9leLEF8RuT16Um", + // "photo": "expert/2016-06-29/e641e9927b7647a596ea12054ed8f982.jpg", + // "comment": "阿狸logo呵呵啦log里了", + // "create_date": "2016-08-10 14:53:30", + // "realname": "测试" + // }, + public ComBean data; + + public class ComBean + { + public List list; + public int total; + } + public class CommentData { + private String user_uuid; + private String comment_uuid; + private String expert_uuid; + private String photo; + private String comment; + private String create_date; + private String realname; + private String user_status; + private String examine_status; + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getComment_uuid() { + return comment_uuid; + } + + public void setComment_uuid(String comment_uuid) { + this.comment_uuid = comment_uuid; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBean.java new file mode 100644 index 0000000..9aa81c3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBean.java @@ -0,0 +1,227 @@ +package cn.shangyu.gdxzExpert.bean; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.List; + +/** + * + * 功能说明:公益咨询bean + */ +public class ConsultListBean extends BaseBean { + public ConsultBeans data; + + public class ConsultBeans + { + public int yetDayTotalNum; + //回答总条数 + public int yetDayTotalnumEPNum; + public ListBean consult_list; + } + + public class ListBean + { + public List list; + //总条数 + + + } + public class DataList implements Parcelable { + private String uuid;// 唯一标示 + private String patientUuid;// 患者uuid + private String expertUuid;// 专家uuid + private String title;// "脂肪肝",标题 + private String createDate;// 发起时间 + private String content;// "脂肪肝如何治疗",内容 + private String diseaseUuid;// 肝胆病标签uuid + private int state;// 咨询状态(1.未回答2.已回答3.已关闭) + private String realName;// 患者姓名 + private int sex;// 患者性别(0.男 1.女) + private String birthDate;// 患者出生日期 + private String photo;// 患者头像路径 + private String mobile;// 手机号 + private String diseaseName;//患病标签 + private String user_status;//是否注销 + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getDiseaseName() { + return diseaseName; + } + + public void setDiseaseName(String diseaseName) { + this.diseaseName = diseaseName; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPatientUuid() { + return patientUuid; + } + + public void setPatientUuid(String patientUuid) { + this.patientUuid = patientUuid; + } + + public String getExpertUuid() { + return expertUuid; + } + + public void setExpertUuid(String expertUuid) { + this.expertUuid = expertUuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getDiseaseUuid() { + return diseaseUuid; + } + + public void setDiseaseUuid(String diseaseUuid) { + this.diseaseUuid = diseaseUuid; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public String getBirthDate() { + return birthDate; + } + + public void setBirthDate(String birthDate) { + this.birthDate = birthDate; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + @Override + public int describeContents() { + return 0; + } + + public DataList() { + + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.uuid); + dest.writeString(this.patientUuid); + dest.writeString(this.expertUuid); + dest.writeString(this.title); + dest.writeString(this.createDate); + dest.writeString(this.content); + dest.writeString(this.diseaseUuid); + dest.writeInt(this.state); + dest.writeString(this.realName); + dest.writeInt(this.sex); + dest.writeString(this.birthDate); + dest.writeString(this.photo); + dest.writeString(this.mobile); + } + + public DataList(Parcel in) { + this.uuid = in.readString(); + this.patientUuid = in.readString(); + this.expertUuid = in.readString(); + this.title = in.readString(); + this.createDate = in.readString(); + this.content = in.readString(); + this.diseaseUuid = in.readString(); + this.state = in.readInt(); + this.realName = in.readString(); + this.sex = in.readInt(); + this.birthDate = in.readString(); + this.photo = in.readString(); + this.mobile = in.readString(); + } + + public final Creator CREATOR = new Creator() { + + @Override + public DataList[] newArray(int size) { + return new DataList[size]; + } + + @Override + public DataList createFromParcel(Parcel source) { + return new DataList(source); + } + }; + + } +// @Override +// public String toString() { +// return "ConsultListBean [data=" + data + "]"; +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBeanHis.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBeanHis.java new file mode 100644 index 0000000..6a9a893 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ConsultListBeanHis.java @@ -0,0 +1,23 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:公益咨询bean + */ +public class ConsultListBeanHis extends BaseBean { + public ConsultBeans data; + + public class ConsultBeans + { + public List list; + public int totalPage; + } + + +// @Override +// public String toString() { +// return "ConsultListBean [data=" + data + "]"; +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBean.java new file mode 100644 index 0000000..198d4e4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBean.java @@ -0,0 +1,30 @@ +package cn.shangyu.gdxzExpert.bean; + +public class CourseDetailBean extends BaseBean { + + public double price; + public String iscollection; + public String type; + public Data data; + public int freeRecord; + public int WelfareNum; + public String fileSize; + public String fileMD5; + public class Data { + + public int account; + public long system_time; + public long expire_time; + public long pay_time; + public String pay_channel; + public String order_id; + public String file_uuid; + public String uuid; + public String photo; + public String order_status; + public long create_date; + public double discount; + public String user_uuid; + public String name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBeanNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBeanNew.java new file mode 100644 index 0000000..088cdaa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseDetailBeanNew.java @@ -0,0 +1,40 @@ +package cn.shangyu.gdxzExpert.bean; + +public class CourseDetailBeanNew extends BaseBean { + public Data data; + public class Data { + public double price; + public int welfareNum; + public String fileSize; + public String fileMD5; + public String iscollection; + public int freeRecord; + public String type; + public String name; + public String tags; + public Order order; + public class Order{ + public String uuid; + public String user_uuid; + public int account; + public double discount; + public String order_id; + public long system_time; + public long expire_time; + public long pay_time; + public String pay_channel; + + public String file_uuid; + + public String photo; + public String order_status; + public long create_date; + + + public String name; + } + + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseEvaBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseEvaBean.java new file mode 100644 index 0000000..5ac73d0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseEvaBean.java @@ -0,0 +1,288 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CourseEvaBean { + private String message; + private EBean data; + private String msg; + private String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + + public EBean getData() { + return data; + } + + public void setData(EBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class EBean{ + private String total; + private Listlist; + private int pages; + private String pageNum; + private String pageSize; + private Boolean isFirstPage; + private Boolean isLastPage; + + public String getTotal() { + return total; + } + + public void setTotal(String total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public String getPageNum() { + return pageNum; + } + + public void setPageNum(String pageNum) { + this.pageNum = pageNum; + } + + public String getPageSize() { + return pageSize; + } + + public void setPageSize(String pageSize) { + this.pageSize = pageSize; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + } + + public class EvaBean + { + private String id; + private String state; + private String comment; + private String create_date; + private String star; + private String user_name; + private String user_status; + private String examine_status; + private String user_uuid; + private List excellentcourse_comment_list; + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getStar() { + return star; + } + + public void setStar(String star) { + this.star = star; + } + + public List getExcellentcourse_comment_list() { + return excellentcourse_comment_list; + } + + public void setExcellentcourse_comment_list(List excellentcourse_comment_list) { + this.excellentcourse_comment_list = excellentcourse_comment_list; + } + } + public class sbuEvaBean + { + private String id; + private String state; + private String comment; + private String create_date; + private String star; + private String user_name; + private String user_status; + private String examine_status; + private String user_uuid; + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getStar() { + return star; + } + + public void setStar(String star) { + this.star = star; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseGanExBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseGanExBean.java new file mode 100644 index 0000000..d5393a4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseGanExBean.java @@ -0,0 +1,108 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CourseGanExBean { + public String message; + public CourseGanData data; + public String msg; + public String code; + public class CourseGanData + { + private int total; + private List list; + private int pages; + private int pageNum; + private Boolean isFirstPage; + private Boolean isLastPage; + private int pageSize; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public CourseGanData getData() { + return data; + } + + public void setData(CourseGanData data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIconBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIconBean.java new file mode 100644 index 0000000..ea75bd4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIconBean.java @@ -0,0 +1,72 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CourseIconBean { + private String msg; + private String code; + private List data; + private String message; + public class DataBean + { + private String img; + private String name; + private String id; + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexBean.java new file mode 100644 index 0000000..af3c832 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexBean.java @@ -0,0 +1,262 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CourseIndexBean { + public String message; + public DataBean data; + public String msg; + public String code; + public class DataBean + { + public List video_type_List; + public Listscroll_list; + public Listfirst_type_list; + public Listspecial_type_list; + + public List getVideo_type_List() { + return video_type_List; + } + + public void setVideo_type_List(List video_type_List) { + this.video_type_List = video_type_List; + } + + public List getScroll_list() { + return scroll_list; + } + + public void setScroll_list(List scroll_list) { + this.scroll_list = scroll_list; + } + + public List getFirst_type_list() { + return first_type_list; + } + + public void setFirst_type_list(List first_type_list) { + this.first_type_list = first_type_list; + } + + public List getSpecial_type_list() { + return special_type_list; + } + + public void setSpecial_type_list(List special_type_list) { + this.special_type_list = special_type_list; + } + } + public class VideoBean + { + + public String type_name; + public String type_id; + public Listvideo_list; + + public String getType_name() { + return type_name; + } + + public void setType_name(String type_name) { + this.type_name = type_name; + } + + public String getType_id() { + return type_id; + } + + public void setType_id(String type_id) { + this.type_id = type_id; + } + + public List getVideo_list() { + return video_list; + } + + public void setVideo_list(List video_list) { + this.video_list = video_list; + } + } + public class VideoListBean + { + public int id; + public String tags; + public String study_num; + public String title; + public String discount_price; + public String account; + public String discount_type; + public String sroll_img; + public String index_img; + public String more_img; + public String special_type_name; + public String back_bon; + public String fuli_bon; + + public String getBack_bon() { + return back_bon; + } + + public void setBack_bon(String back_bon) { + this.back_bon = back_bon; + } + + public String getFuli_bon() { + return fuli_bon; + } + + public void setFuli_bon(String fuli_bon) { + this.fuli_bon = fuli_bon; + } + + public String getSpecial_type_name() { + return special_type_name; + } + + public void setSpecial_type_name(String special_type_name) { + this.special_type_name = special_type_name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDiscount_price() { + return discount_price; + } + + public void setDiscount_price(String discount_price) { + this.discount_price = discount_price; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDiscount_type() { + return discount_type; + } + + public void setDiscount_type(String discount_type) { + this.discount_type = discount_type; + } + + public String getSroll_img() { + return sroll_img; + } + + public void setSroll_img(String sroll_img) { + this.sroll_img = sroll_img; + } + + public String getIndex_img() { + return index_img; + } + + public void setIndex_img(String index_img) { + this.index_img = index_img; + } + + public String getMore_img() { + return more_img; + } + + public void setMore_img(String more_img) { + this.more_img = more_img; + } + + public String getStudy_num() { + return study_num; + } + + public void setStudy_num(String study_num) { + this.study_num = study_num; + } + } + public class TypeBean + { + private String name; + private String id; + private String img; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexSearchBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexSearchBean.java new file mode 100644 index 0000000..bcfbea7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseIndexSearchBean.java @@ -0,0 +1,221 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CourseIndexSearchBean { + public String message; + public List data; + public String msg; + public String code; + + public class SearchBean + { + public int id; + public String tags; + public String study_num; + public String title; + public String discount_price; + public String account; + public String discount_type; + public String sroll_img; + public String index_img; + public String more_img; + public String special_type_name; + public String back_bon; + public String fuli_bon; + Listsearch_second_list; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getStudy_num() { + return study_num; + } + + public void setStudy_num(String study_num) { + this.study_num = study_num; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDiscount_price() { + return discount_price; + } + + public void setDiscount_price(String discount_price) { + this.discount_price = discount_price; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDiscount_type() { + return discount_type; + } + + public void setDiscount_type(String discount_type) { + this.discount_type = discount_type; + } + + public String getSroll_img() { + return sroll_img; + } + + public void setSroll_img(String sroll_img) { + this.sroll_img = sroll_img; + } + + public String getIndex_img() { + return index_img; + } + + public void setIndex_img(String index_img) { + this.index_img = index_img; + } + + public String getMore_img() { + return more_img; + } + + public void setMore_img(String more_img) { + this.more_img = more_img; + } + + public String getSpecial_type_name() { + return special_type_name; + } + + public void setSpecial_type_name(String special_type_name) { + this.special_type_name = special_type_name; + } + + public String getBack_bon() { + return back_bon; + } + + public void setBack_bon(String back_bon) { + this.back_bon = back_bon; + } + + public String getFuli_bon() { + return fuli_bon; + } + + public void setFuli_bon(String fuli_bon) { + this.fuli_bon = fuli_bon; + } + + public List getSearch_second_list() { + return search_second_list; + } + + public void setSearch_second_list(List search_second_list) { + this.search_second_list = search_second_list; + } + } + public class SecondSearchBean + { + private String id; + private String vid; + private String title; + private String excellentcourse_id; + private String excellentcourse_first_title_id; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getVid() { + return vid; + } + + public void setVid(String vid) { + this.vid = vid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getExcellentcourse_id() { + return excellentcourse_id; + } + + public void setExcellentcourse_id(String excellentcourse_id) { + this.excellentcourse_id = excellentcourse_id; + } + + public String getExcellentcourse_first_title_id() { + return excellentcourse_first_title_id; + } + + public void setExcellentcourse_first_title_id(String excellentcourse_first_title_id) { + this.excellentcourse_first_title_id = excellentcourse_first_title_id; + } + } + + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderBean.java new file mode 100644 index 0000000..f77afe8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderBean.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.bean; + +public class CourseOrderBean extends BaseBean { +// "pingGanDanFileOrder": { + public PingGanDanFileOrder data; + public class PingGanDanFileOrder { + private double account; + private String file_uuid; + private long system_time; + private long expire_time; + private String pay_time; + private String pay_channel; + private String order_id; + private String uuid; + private String order_status; + private String photo; + private String create_date; + private String discount; + private String user_uuid; + private String name; + public double getAccount() { + return account; + } + public void setAccount(double account) { + this.account = account; + } + public String getFile_uuid() { + return file_uuid; + } + public void setFile_uuid(String file_uuid) { + this.file_uuid = file_uuid; + } + public long getSystem_time() { + return system_time; + } + public void setSystem_time(long system_time) { + this.system_time = system_time; + } + public long getExpire_time() { + return expire_time; + } + public void setExpire_time(long expire_time) { + this.expire_time = expire_time; + } + + public String getPay_time() { + return pay_time; + } + + public void setPay_time(String pay_time) { + this.pay_time = pay_time; + } + + public String getPay_channel() { + return pay_channel; + } + public void setPay_channel(String pay_channel) { + this.pay_channel = pay_channel; + } + public String getOrder_id() { + return order_id; + } + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + public String getUuid() { + return uuid; + } + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getOrder_status() { + return order_status; + } + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + public String getPhoto() { + return photo; + } + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getDiscount() { + return discount; + } + public void setDiscount(String discount) { + this.discount = discount; + } + public String getUser_uuid() { + return user_uuid; + } + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderListBean.java new file mode 100644 index 0000000..b9de53d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseOrderListBean.java @@ -0,0 +1,202 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CourseOrderListBean extends BaseBean { + public int downloadFileCount; + public CourseOrderBean data; + public int downloadTotalAccount; + public int shareloadFileCount; + public int shareTotalAccount; + public class CourseOrderBean { + + private int totalPage; + private List list; + private int totalRow; + private int pageNumber; + private int pageSize; + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + public int getTotalPage() { + return totalPage; + } + + public void setList(List list) { + this.list = list; + } + public List getList() { + return list; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + public int getTotalRow() { + return totalRow; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + public int getPageNumber() { + return pageNumber; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + public int getPageSize() { + return pageSize; + } + + } + + public class CourseList { + + private String create_date; + private int discount; + private String providername; + private String download_path; + private String title; + private String price; + private String readnum; + private String order_status; + private String order_id; + private String uuid; + private String downloadername; + private String hospitalname; + private String author; + private String preview_path; + private String sort; + private String provider; + private String status; + private String type; + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + public String getCreate_date() { + return create_date; + } + + public void setDiscount(int discount) { + this.discount = discount; + } + public int getDiscount() { + return discount; + } + + public void setProvidername(String providername) { + this.providername = providername; + } + public String getProvidername() { + return providername; + } + + public void setDownload_path(String download_path) { + this.download_path = download_path; + } + public String getDownload_path() { + return download_path; + } + + public void setTitle(String title) { + this.title = title; + } + public String getTitle() { + return title; + } + + public void setPrice(String price) { + this.price = price; + } + public String getPrice() { + return price; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + public String getReadnum() { + return readnum; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + public String getOrder_status() { + return order_status; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + public String getOrder_id() { + return order_id; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getUuid() { + return uuid; + } + + public void setDownloadername(String downloadername) { + this.downloadername = downloadername; + } + public String getDownloadername() { + return downloadername; + } + + public void setHospitalname(String hospitalname) { + this.hospitalname = hospitalname; + } + public String getHospitalname() { + return hospitalname; + } + + public void setAuthor(String author) { + this.author = author; + } + public String getAuthor() { + return author; + } + + public void setPreview_path(String preview_path) { + this.preview_path = preview_path; + } + public String getPreview_path() { + return preview_path; + } + + public void setSort(String sort) { + this.sort = sort; + } + public String getSort() { + return sort; + } + + public void setProvider(String provider) { + this.provider = provider; + } + public String getProvider() { + return provider; + } + + public void setStatus(String status) { + this.status = status; + } + public String getStatus() { + return status; + } + + public void setType(String type) { + this.type = type; + } + public String getType() { + return type; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseUrlDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseUrlDetailBean.java new file mode 100644 index 0000000..5ab338f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CourseUrlDetailBean.java @@ -0,0 +1,7 @@ +package cn.shangyu.gdxzExpert.bean; + +public class CourseUrlDetailBean extends BaseBean { + + String price; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CoursewareListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CoursewareListBean.java new file mode 100644 index 0000000..3781cfa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CoursewareListBean.java @@ -0,0 +1,171 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class CoursewareListBean extends BaseBean { + public CoursewareList data; + + public class CoursewareList { + public int pageNumber; + public int pageSize; + public int totalPage; + public List list; + } + + public class CoursewareBean { + // 打折比例 + private double discount; + // 作者名字 + private String providername; + private String author; + // 专家医院 + private String hospitalname; + // 下载地址 + private String preview_path; + private String download_path; + private String sort; + private String uuid; + // 创建地址 + private String create_date; + // 标题 + private String title; + // 价格 + private int price; + // 阅读数 + private int readnum; + private String provider; + private String status; + // 课件格式 + private String type; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public double getDiscount() { + return discount; + } + + public void setDiscount(double discount) { + this.discount = discount; + } + + public String getProvidername() { + return providername; + } + + public void setProvidername(String providername) { + this.providername = providername; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getHospitalname() { + return hospitalname; + } + + public void setHospitalname(String hospitalname) { + this.hospitalname = hospitalname; + } + + public String getPreview_path() { + return preview_path; + } + + public void setPreview_path(String preview_path) { + this.preview_path = preview_path; + } + + public String getDownload_path() { + return download_path; + } + + public void setDownload_path(String download_path) { + this.download_path = download_path; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getProvider() { + return provider; + } + + public void setProvider(String provider) { + this.provider = provider; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateGoodsOrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateGoodsOrderBean.java new file mode 100644 index 0000000..a2fc642 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateGoodsOrderBean.java @@ -0,0 +1,183 @@ +package cn.shangyu.gdxzExpert.bean; + +public class CreateGoodsOrderBean { + /** + * code : 200 + * data : {"time_expire":1539847563,"address":"北京市东城区欧克了绝交","user_name":"啊急急急急","goods_order_id":"1291539842563047","mobile":"15148585885","express_name":"","type":1,"pionts":1,"express_id":"","name":"iPhone 4","goods_num":1,"create_date":1539842563,"email":"","status":1} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * time_expire : 1539847563 + * address : 北京市东城区欧克了绝交 + * user_name : 啊急急急急 + * goods_order_id : 1291539842563047 + * mobile : 15148585885 + * express_name : + * type : 1 + * pionts : 1 + * express_id : + * name : iPhone 4 + * goods_num : 1 + * create_date : 1539842563 + * email : + * status : 1 + */ + + private int time_expire; + private String address; + private String user_name; + private String goods_order_id; + private String mobile; + private String express_name; + private int type; + private int pionts; + private String express_id; + private String name; + private int goods_num; + private int create_date; + private String email; + private int status; + + public int getTime_expire() { + return time_expire; + } + + public void setTime_expire(int time_expire) { + this.time_expire = time_expire; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getGoods_order_id() { + return goods_order_id; + } + + public void setGoods_order_id(String goods_order_id) { + this.goods_order_id = goods_order_id; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getExpress_name() { + return express_name; + } + + public void setExpress_name(String express_name) { + this.express_name = express_name; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getPionts() { + return pionts; + } + + public void setPionts(int pionts) { + this.pionts = pionts; + } + + public String getExpress_id() { + return express_id; + } + + public void setExpress_id(String express_id) { + this.express_id = express_id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getGoods_num() { + return goods_num; + } + + public void setGoods_num(int goods_num) { + this.goods_num = goods_num; + } + + public int getCreate_date() { + return create_date; + } + + public void setCreate_date(int create_date) { + this.create_date = create_date; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateOrderBean1.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateOrderBean1.java new file mode 100644 index 0000000..a1aaafb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CreateOrderBean1.java @@ -0,0 +1,426 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by wangchengxin on 2019/5/22. + */ + +public class CreateOrderBean1 { + /** + * code : 1 + * message : 创建成功 + * order : {"app":"app_SaLOeTDq5G8KHWH4","paid":false,"refunded":false,"merchantOrderNo":"1558494662127bthdafa","couponAmount":0,"balanceAmount":null,"chargeAmount":null,"amountRefunded":0,"clientIp":"222.128.49.133","timeExpire":1558494962,"refunds":null,"charge":null,"balanceTransaction":null,"coupon":null,"userFee":null,"extraAmount":null,"userFrom":null,"livemode":true,"metadata":{},"body":"患者>Tom2>JfI0oJFdgkN8XA315fP>购买了>100000>积分","chargeEssentials":{"transactionNo":null,"credential":null,"extra":null,"channel":null},"timePaid":null,"created":1558494662,"uid":"JfI0oJFdgkN8XA315fP","amount":200000,"availableBalance":0,"subject":"购买积分","currency":"cny","object":"order","id":"2011905220005025401","type":null,"description":null,"status":"created"} + */ + + private String code; + private String message; + private OrderBean order; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public OrderBean getOrder() { + return order; + } + + public void setOrder(OrderBean order) { + this.order = order; + } + + public static class OrderBean { + /** + * app : app_SaLOeTDq5G8KHWH4 + * paid : false + * refunded : false + * merchantOrderNo : 1558494662127bthdafa + * couponAmount : 0 + * balanceAmount : null + * chargeAmount : null + * amountRefunded : 0 + * clientIp : 222.128.49.133 + * timeExpire : 1558494962 + * refunds : null + * charge : null + * balanceTransaction : null + * coupon : null + * userFee : null + * extraAmount : null + * userFrom : null + * livemode : true + * metadata : {} + * body : 患者>Tom2>JfI0oJFdgkN8XA315fP>购买了>100000>积分 + * chargeEssentials : {"transactionNo":null,"credential":null,"extra":null,"channel":null} + * timePaid : null + * created : 1558494662 + * uid : JfI0oJFdgkN8XA315fP + * amount : 200000 + * availableBalance : 0 + * subject : 购买积分 + * currency : cny + * object : order + * id : 2011905220005025401 + * type : null + * description : null + * status : created + */ + + private String app; + private boolean paid; + private boolean refunded; + private String merchantOrderNo; + private int couponAmount; + private Object balanceAmount; + private Object chargeAmount; + private int amountRefunded; + private String clientIp; + private int timeExpire; + private Object refunds; + private Object charge; + private Object balanceTransaction; + private Object coupon; + private Object userFee; + private Object extraAmount; + private Object userFrom; + private boolean livemode; + private MetadataBean metadata; + private String body; + private ChargeEssentialsBean chargeEssentials; + private Object timePaid; + private int created; + private String uid; + private int amount; + private int availableBalance; + private String subject; + private String currency; + private String object; + private String id; + private Object type; + private Object description; + private String status; + + public String getApp() { + return app; + } + + public void setApp(String app) { + this.app = app; + } + + public boolean isPaid() { + return paid; + } + + public void setPaid(boolean paid) { + this.paid = paid; + } + + public boolean isRefunded() { + return refunded; + } + + public void setRefunded(boolean refunded) { + this.refunded = refunded; + } + + public String getMerchantOrderNo() { + return merchantOrderNo; + } + + public void setMerchantOrderNo(String merchantOrderNo) { + this.merchantOrderNo = merchantOrderNo; + } + + public int getCouponAmount() { + return couponAmount; + } + + public void setCouponAmount(int couponAmount) { + this.couponAmount = couponAmount; + } + + public Object getBalanceAmount() { + return balanceAmount; + } + + public void setBalanceAmount(Object balanceAmount) { + this.balanceAmount = balanceAmount; + } + + public Object getChargeAmount() { + return chargeAmount; + } + + public void setChargeAmount(Object chargeAmount) { + this.chargeAmount = chargeAmount; + } + + public int getAmountRefunded() { + return amountRefunded; + } + + public void setAmountRefunded(int amountRefunded) { + this.amountRefunded = amountRefunded; + } + + public String getClientIp() { + return clientIp; + } + + public void setClientIp(String clientIp) { + this.clientIp = clientIp; + } + + public int getTimeExpire() { + return timeExpire; + } + + public void setTimeExpire(int timeExpire) { + this.timeExpire = timeExpire; + } + + public Object getRefunds() { + return refunds; + } + + public void setRefunds(Object refunds) { + this.refunds = refunds; + } + + public Object getCharge() { + return charge; + } + + public void setCharge(Object charge) { + this.charge = charge; + } + + public Object getBalanceTransaction() { + return balanceTransaction; + } + + public void setBalanceTransaction(Object balanceTransaction) { + this.balanceTransaction = balanceTransaction; + } + + public Object getCoupon() { + return coupon; + } + + public void setCoupon(Object coupon) { + this.coupon = coupon; + } + + public Object getUserFee() { + return userFee; + } + + public void setUserFee(Object userFee) { + this.userFee = userFee; + } + + public Object getExtraAmount() { + return extraAmount; + } + + public void setExtraAmount(Object extraAmount) { + this.extraAmount = extraAmount; + } + + public Object getUserFrom() { + return userFrom; + } + + public void setUserFrom(Object userFrom) { + this.userFrom = userFrom; + } + + public boolean isLivemode() { + return livemode; + } + + public void setLivemode(boolean livemode) { + this.livemode = livemode; + } + + public MetadataBean getMetadata() { + return metadata; + } + + public void setMetadata(MetadataBean metadata) { + this.metadata = metadata; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public ChargeEssentialsBean getChargeEssentials() { + return chargeEssentials; + } + + public void setChargeEssentials(ChargeEssentialsBean chargeEssentials) { + this.chargeEssentials = chargeEssentials; + } + + public Object getTimePaid() { + return timePaid; + } + + public void setTimePaid(Object timePaid) { + this.timePaid = timePaid; + } + + public int getCreated() { + return created; + } + + public void setCreated(int created) { + this.created = created; + } + + public String getUid() { + return uid; + } + + public void setUid(String uid) { + this.uid = uid; + } + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public int getAvailableBalance() { + return availableBalance; + } + + public void setAvailableBalance(int availableBalance) { + this.availableBalance = availableBalance; + } + + public String getSubject() { + return subject; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getObject() { + return object; + } + + public void setObject(String object) { + this.object = object; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Object getType() { + return type; + } + + public void setType(Object type) { + this.type = type; + } + + public Object getDescription() { + return description; + } + + public void setDescription(Object description) { + this.description = description; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public static class MetadataBean { + } + + public static class ChargeEssentialsBean { + /** + * transactionNo : null + * credential : null + * extra : null + * channel : null + */ + + private Object transactionNo; + private Object credential; + private Object extra; + private Object channel; + + public Object getTransactionNo() { + return transactionNo; + } + + public void setTransactionNo(Object transactionNo) { + this.transactionNo = transactionNo; + } + + public Object getCredential() { + return credential; + } + + public void setCredential(Object credential) { + this.credential = credential; + } + + public Object getExtra() { + return extra; + } + + public void setExtra(Object extra) { + this.extra = extra; + } + + public Object getChannel() { + return channel; + } + + public void setChannel(Object channel) { + this.channel = channel; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/CustomViewsInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CustomViewsInfo.java new file mode 100644 index 0000000..f72e09f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/CustomViewsInfo.java @@ -0,0 +1,30 @@ +package cn.shangyu.gdxzExpert.bean; + +import com.stx.xhb.androidx.entity.BaseBannerInfo; + +public class CustomViewsInfo implements BaseBannerInfo { + + private HomeBean.NewsBean info; + + public CustomViewsInfo(HomeBean.NewsBean info) { + this.info = info; + } + + @Override + public String getXBannerUrl() { + return info.getHeadImg(); + } + public String getNewsUrl() + { + return info.getPath(); + } + + public String uuid() + { + return info.getUuid(); + } + @Override + public String getXBannerTitle() { + return info.getTitle(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/DownListenerEvent.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/DownListenerEvent.java new file mode 100644 index 0000000..98abbf1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/DownListenerEvent.java @@ -0,0 +1,19 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by WANGChengXin on 2019/11/6. + */ + +public class DownListenerEvent { + private String message; + public DownListenerEvent(String message){ + this.message=message; + } + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/EvenBusEvent.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/EvenBusEvent.java new file mode 100644 index 0000000..944c6e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/EvenBusEvent.java @@ -0,0 +1,37 @@ +package cn.shangyu.gdxzExpert.bean; + +public class EvenBusEvent { + + private String mMsg; + private String mType; + + // public EvenBusEvent(String msg) { + // mMsg = msg; + // } + + public String getmMsg() { + return mMsg; + } + + public void setmMsg(String mMsg) { + this.mMsg = mMsg; + } + + public String getmType() { + return mType; + } + + public void setmType(String mType) { + this.mType = mType; + } + + public EvenBusEvent(String msg, String type) { + this.mType = type; + this.mMsg = msg; + } + + public EvenBusEvent() { + // TODO Auto-generated constructor stub + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/EventListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/EventListBean.java new file mode 100644 index 0000000..3ae47d7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/EventListBean.java @@ -0,0 +1,143 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class EventListBean extends BaseBean { + // "data": { + // "pageNumber": 1, + // "pageSize": 10, + // "totalRow": 3, + // "list": [ + // { + // "title": "789", + // "imgpath": "book/pdf/2016/20160809143057.jpg", + // "create_date": null, + // "sort": 0, + // "end_date": "2016-12-10 00:00:00", + // "uuid": "6b0a9a5e15764cc587d36f3e8ead0335", + // "status": 1, + // "type": null, + // "path": "html/activity/6b0a9a5e15764cc587d36f3e8ead0335.html", + // "content": null + // }, + public Data data; + + public class Data { + public String pageNumber; + public String pageSize; + public String totalRow; + public List list; + } + + public class EventBase { + private String title; + private String imgpath; + private String create_date; + private String sort; + private String end_date; + private String uuid; + private String status; + private String type; + private String path; + private String content; + private String mobile; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getEnd_date() { + return end_date; + } + + public void setEnd_date(String end_date) { + this.end_date = end_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertDetail.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertDetail.java new file mode 100644 index 0000000..ddc2dd3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertDetail.java @@ -0,0 +1,432 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * ExpertDetail.java + * + * @author Administrator + * @date 2015-10-20 上午8:53:49 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:专家详情 + */ +public class ExpertDetail { + + /** + * VideoResTop2 : [{"path":"html/video/ccd524b82530457bb447296ba5f2161b.html","readnum":129,"type_uuid":"blds","imgpath":"book/pdf/2018/20180515153327.jpg","name":"肝脏黑超、和谐和核磁共振检查各有什么先进点?","create_date":"2018-04-26 15:37:19","uuid":"ccd524b82530457bb447296ba5f2161b","public_name":"123"},{"path":"html/video/d4c70d4335ac4e2abc7f3c10d3e30e1b.html","readnum":66,"type_uuid":"blds","imgpath":"book/pdf/2018/20180515153357.jpg","name":"568","create_date":"2018-04-19 11:40:32","uuid":"d4c70d4335ac4e2abc7f3c10d3e30e1b","public_name":"第三方"}] + * code : 1 + * data : {"positionName":"主任中医师","sex":0,"callDisable":"N","clinicDisable":"N","monthDisable":"N","isStar":0,"intro":"现在修改个人简介","specialities":"肝炎,药物肝病,中西医结合,肝硬化,肝衰竭,乙型肝炎,肝癌介入,寄生虫病","callIsEnable":0,"clinicIsEnable":0,"monthIsEnable":0,"uuid":"uN8U0rU0ci1U5WFUdTh","photo":"expert/2018-03-26/85804553a776446588009d86df15af09.jpg","hospitalName":"北京和平里医院","officeName":"传染科","realName":"赵医生"} + * sendFlowerNum : 3 + * expertApplyNum : 8 + * ConsultTotalNum : 15 + * isFriend : true + * DongTaiResTop2 : [{"path":"html/dongtai/95fec0125527451c8e7716dc98bc63f7.html","author":"HMM","TITLE":"第五条动态","HEAD_IMG":"book/pdf/2018/20180530104213.jpg"},{"path":"html/dongtai/bb3eddd5b6c94698949787825beca45b.html","author":"HMM","TITLE":"第二条动态","HEAD_IMG":"book/pdf/2018/20180530095634.jpg"}] + * message : 查询成功 + */ + + private String code; + private DataBean data; + private int sendFlowerNum; + private int expertApplyNum; + private int ConsultTotalNum; + private boolean isFriend; + private String message; + private List VideoResTop2; + private List DongTaiResTop2; + private String gandan_expert_uuid; + public boolean isFriend() { + return isFriend; + } + + public void setFriend(boolean isFriend) { + this.isFriend = isFriend; + } + + public String getGandan_expert_uuid() { + return gandan_expert_uuid; + } + + public void setGandan_expert_uuid(String gandan_expert_uuid) { + this.gandan_expert_uuid = gandan_expert_uuid; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getSendFlowerNum() { + return sendFlowerNum; + } + + public void setSendFlowerNum(int sendFlowerNum) { + this.sendFlowerNum = sendFlowerNum; + } + + public int getExpertApplyNum() { + return expertApplyNum; + } + + public void setExpertApplyNum(int expertApplyNum) { + this.expertApplyNum = expertApplyNum; + } + + public int getConsultTotalNum() { + return ConsultTotalNum; + } + + public void setConsultTotalNum(int ConsultTotalNum) { + this.ConsultTotalNum = ConsultTotalNum; + } + + public boolean isIsFriend() { + return isFriend; + } + + public void setIsFriend(boolean isFriend) { + this.isFriend = isFriend; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getVideoResTop2() { + return VideoResTop2; + } + + public void setVideoResTop2(List VideoResTop2) { + this.VideoResTop2 = VideoResTop2; + } + + public List getDongTaiResTop2() { + return DongTaiResTop2; + } + + public void setDongTaiResTop2(List DongTaiResTop2) { + this.DongTaiResTop2 = DongTaiResTop2; + } + + public static class DataBean { + /** + * positionName : 主任中医师 + * sex : 0 + * callDisable : N + * clinicDisable : N + * monthDisable : N + * isStar : 0 + * intro : 现在修改个人简介 + * specialities : 肝炎,药物肝病,中西医结合,肝硬化,肝衰竭,乙型肝炎,肝癌介入,寄生虫病 + * callIsEnable : 0 + * clinicIsEnable : 0 + * monthIsEnable : 0 + * uuid : uN8U0rU0ci1U5WFUdTh + * photo : expert/2018-03-26/85804553a776446588009d86df15af09.jpg + * hospitalName : 北京和平里医院 + * officeName : 传染科 + * realName : 赵医生 + */ + + private String positionName; + private int sex; + private String callDisable; + private String clinicDisable; + private String monthDisable; + private int isStar; + private String intro; + private String specialities; + private int callIsEnable; + private int clinicIsEnable; + private int monthIsEnable; + private String uuid; + private String photo; + private String hospitalName; + private String officeName; + private String realName; + + public String getPositionName() { + return positionName; + } + + public void setPositionName(String positionName) { + this.positionName = positionName; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public String getCallDisable() { + return callDisable; + } + + public void setCallDisable(String callDisable) { + this.callDisable = callDisable; + } + + public String getClinicDisable() { + return clinicDisable; + } + + public void setClinicDisable(String clinicDisable) { + this.clinicDisable = clinicDisable; + } + + public String getMonthDisable() { + return monthDisable; + } + + public void setMonthDisable(String monthDisable) { + this.monthDisable = monthDisable; + } + + public int getIsStar() { + return isStar; + } + + public void setIsStar(int isStar) { + this.isStar = isStar; + } + + public String getIntro() { + return intro; + } + + public void setIntro(String intro) { + this.intro = intro; + } + + public String getSpecialities() { + return specialities; + } + + public void setSpecialities(String specialities) { + this.specialities = specialities; + } + + public int getCallIsEnable() { + return callIsEnable; + } + + public void setCallIsEnable(int callIsEnable) { + this.callIsEnable = callIsEnable; + } + + public int getClinicIsEnable() { + return clinicIsEnable; + } + + public void setClinicIsEnable(int clinicIsEnable) { + this.clinicIsEnable = clinicIsEnable; + } + + public int getMonthIsEnable() { + return monthIsEnable; + } + + public void setMonthIsEnable(int monthIsEnable) { + this.monthIsEnable = monthIsEnable; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getHospitalName() { + return hospitalName; + } + + public void setHospitalName(String hospitalName) { + this.hospitalName = hospitalName; + } + + public String getOfficeName() { + return officeName; + } + + public void setOfficeName(String officeName) { + this.officeName = officeName; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + } + + public static class VideoResTop2Bean { + /** + * path : html/video/ccd524b82530457bb447296ba5f2161b.html + * readnum : 129 + * type_uuid : blds + * imgpath : book/pdf/2018/20180515153327.jpg + * name : 肝脏黑超、和谐和核磁共振检查各有什么先进点? + * create_date : 2018-04-26 15:37:19 + * uuid : ccd524b82530457bb447296ba5f2161b + * public_name : 123 + */ + + private String path; + private int readnum; + private String type_uuid; + private String imgpath; + private String name; + private String create_date; + private String uuid; + private String public_name; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getType_uuid() { + return type_uuid; + } + + public void setType_uuid(String type_uuid) { + this.type_uuid = type_uuid; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + } + + public static class DongTaiResTop2Bean { + /** + * path : html/dongtai/95fec0125527451c8e7716dc98bc63f7.html + * author : HMM + * TITLE : 第五条动态 + * HEAD_IMG : book/pdf/2018/20180530104213.jpg + * editType + */ + + private String path; + private String author; + private String TITLE; + private String HEAD_IMG; + private int editType; + + + public int getEditType() { + return editType; + } + + public void setEditType(int editType) { + this.editType = editType; + } + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTITLE() { + return TITLE; + } + + public void setTITLE(String TITLE) { + this.TITLE = TITLE; + } + + public String getHEAD_IMG() { + return HEAD_IMG; + } + + public void setHEAD_IMG(String HEAD_IMG) { + this.HEAD_IMG = HEAD_IMG; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertFlowerList.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertFlowerList.java new file mode 100644 index 0000000..e176539 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertFlowerList.java @@ -0,0 +1,199 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class ExpertFlowerList extends BaseBean { + // "system_time": 1490233230, + // "expire_time": null, + // "pay_time": null, + // "pay_channel": null, + // "order_id": null, + // "flower_account": null, + // "flower_num": null, + // "order_status": null, + // "uuid": null, + // "photo": "patient/2017-02-28/2287d363a47349f28bd8c59c60f67452.jpg", + // "create_date": 1490061268, + // "expert_uuid": null, + // "patient_uuid": "9uEMhsz8tAgJRFjYld4", + // "name": "jacklove", + // "message": "萨瓦迪卡" + + public FlowerListBean data; + + public class FlowerListBean + { + public mindList flower_data; + public int total_num; + public double total_amount; + } + public class mindList { + public String pageNumber; + public String pageSize; + public long pages; + public String totalRow; + public List list; + public int total; + + public class expertFlower { + private String flower_account; + private String flower_num; + private String name; + private String photo; + private double xinyi; + private String order_id; + private String order_status; + private String uuid; + private String create_date; + private String user_uuid; + private String message; + // 系统时间 + private String system_time; + // 失效时间 + private String expire_time; + // 支付方式 + private String pay_channel; + // 支付时间 + private String pay_time; + private String num; + private String patient_name; + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getPatient_name() { + return patient_name; + } + + public void setPatient_name(String patient_name) { + this.patient_name = patient_name; + } + + public String getFlower_account() { + return flower_account; + } + + public void setFlower_account(String flower_account) { + this.flower_account = flower_account; + } + + public String getFlower_num() { + return flower_num; + } + + public void setFlower_num(String flower_num) { + this.flower_num = flower_num; + } + + public String getSystem_time() { + return system_time; + } + + public void setSystem_time(String system_time) { + this.system_time = system_time; + } + + public String getExpire_time() { + return expire_time; + } + + public void setExpire_time(String expire_time) { + this.expire_time = expire_time; + } + + public String getPay_channel() { + return pay_channel; + } + + public void setPay_channel(String pay_channel) { + this.pay_channel = pay_channel; + } + + public String getPay_time() { + return pay_time; + } + + public void setPay_time(String pay_time) { + this.pay_time = pay_time; + } + + public String getRealname() { + return name; + } + + public void setRealname(String realname) { + this.name = realname; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public double getXinyi() { + return xinyi; + } + + public void setXinyi(double xinyi) { + this.xinyi = xinyi; + } + + public String getOrder_id() { + return order_id; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + + public String getOrder_status() { + return order_status; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertHonorBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertHonorBean.java new file mode 100644 index 0000000..f27bc5b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertHonorBean.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2020/4/20. + */ + +public class ExpertHonorBean { + + /** + * code : 1 + * HonorList : [{"nick_name":"咨询专家","id":1},{"nick_name":"2018英雄榜","id":3},{"nick_name":"2017英雄榜","id":4}] + * message : 查询成功 + */ + + private String code; + private String message; + private List HonorList; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getHonorList() { + return HonorList; + } + + public void setHonorList(List HonorList) { + this.HonorList = HonorList; + } + + public static class HonorListBean { + /** + * nick_name : 咨询专家 + * id : 1 + */ + + private String nick_name; + private int id; + + public String getNick_name() { + return nick_name; + } + + public void setNick_name(String nick_name) { + this.nick_name = nick_name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertMindList.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertMindList.java new file mode 100644 index 0000000..f12d121 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExpertMindList.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class ExpertMindList extends BaseBean { + // "code": 1, + // "expertXinYiList": { + // "pageNumber": 1, + // "pageSize": 10, + // "totalPage": 18, + // "totalRow": 179 + // "list": [ + // { + // "xinyi": null, + // "order_id": null, + // "order_status": "canceled", + // "uuid": null, + // "create_date": 1489392696, + // "user_uuid": "LU8DI8V4NqlnFW6T3OG", + // "message": "" + // }, + public double total; + public mindList data; + public int xinyi_price; + + public class mindList { + public String pageNumber; + public String pageSize; + public long totalPage; + public String totalRow; + public List list; + + public class expertMind { + private String user_name; + private double xinyi; + private String order_id; + private String order_status; + private String uuid; + private String create_date; + private String user_uuid; + private String message; + private String user_photo; + + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getUser_photo() { + return user_photo; + } + + public void setUser_photo(String user_photo) { + this.user_photo = user_photo; + } + + public double getXinyi() { + return xinyi; + } + + public void setXinyi(double xinyi) { + this.xinyi = xinyi; + } + + public String getOrder_id() { + return order_id; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + + public String getOrder_status() { + return order_status; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExperteDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExperteDetailBean.java new file mode 100644 index 0000000..f0443cb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ExperteDetailBean.java @@ -0,0 +1,7 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class ExperteDetailBean { + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/FapiaoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/FapiaoBean.java new file mode 100644 index 0000000..bf1c299 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/FapiaoBean.java @@ -0,0 +1,83 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class FapiaoBean { + public String message; + public List data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class PiaoBean + { + private String account; + private String uuid; + private String excellencourse_title; + private String excellencourse_img; + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getExcellencourse_title() { + return excellencourse_title; + } + + public void setExcellencourse_title(String excellencourse_title) { + this.excellencourse_title = excellencourse_title; + } + + public String getExcellencourse_img() { + return excellencourse_img; + } + + public void setExcellencourse_img(String excellencourse_img) { + this.excellencourse_img = excellencourse_img; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/FuCardBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/FuCardBean.java new file mode 100644 index 0000000..aaab23a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/FuCardBean.java @@ -0,0 +1,184 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class FuCardBean { + public String message; + public CardBean data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public CardBean getData() { + return data; + } + + public void setData(CardBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class CardBean + { + private int total; + private List list; + private int pageSize; + private int pageNum; + private int pages; + private Boolean isFirstPage; + private Boolean isLastPage; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public class DetailBean + { + + private int id; + private String idcard; + private List welfare_list; + private String exchange_date; + + public String getIdcard() { + return idcard; + } + + public void setIdcard(String idcard) { + this.idcard = idcard; + } + + public class welfareBean + { + private String type_name; + private int num; + private String type_unit; + + public String getType_unit() { + return type_unit; + } + + public void setType_unit(String type_unit) { + this.type_unit = type_unit; + } + + public String getType_name() { + return type_name; + } + + public void setType_name(String type_name) { + this.type_name = type_name; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public List getWelfare_list() { + return welfare_list; + } + + public void setWelfare_list(List welfare_list) { + this.welfare_list = welfare_list; + } + + public String getExchange_date() { + return exchange_date; + } + + public void setExchange_date(String exchange_date) { + this.exchange_date = exchange_date; + } + } + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GDLiveBroadcastBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GDLiveBroadcastBean.java new file mode 100644 index 0000000..4e8d101 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GDLiveBroadcastBean.java @@ -0,0 +1,194 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by GAOPeng on 2017/7/27. + */ + +public class GDLiveBroadcastBean extends BaseBean { + + /** + * code : 1 data : + * {"pageSize":10,"pageNumber":1,"list":[{"liveurl":null,"liveimg" + * :null,"begin_date" + * :"2017-07-27 10:07:00","spareurl":null,"sort":null,"uuid" + * :"e77748c474f74203ba2cad0a45a97de4" + * ,"title":"123","end_date":"2017-08-04 10:07:00" + * ,"status":0,"type":null,"path" + * :"html/educationonline/e77748c474f74203ba2cad0a45a97de4.html" + * }],"totalPage":1,"totalRow":1} totalPage : 1 message : 查询成功 + */ + + public DataBean data; + + public static class DataBean { + /** + * pageSize : 10 pageNumber : 1 list : + * [{"liveurl":null,"liveimg":null,"begin_date" + * :"2017-07-27 10:07:00","spareurl" + * :null,"sort":null,"uuid":"e77748c474f74203ba2cad0a45a97de4" + * ,"title":"123" + * ,"end_date":"2017-08-04 10:07:00","status":0,"type":null ,"path": + * "html/educationonline/e77748c474f74203ba2cad0a45a97de4.html" }] + * totalPage : 1 totalRow : 1 + */ + + private int pageSize; + private int pageNumber; + private int totalPage; + private int totalRow; + private List list; + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * liveurl : null liveimg : null begin_date : 2017-07-27 10:07:00 + * spareurl : null sort : null uuid : + * e77748c474f74203ba2cad0a45a97de4 title : 123 end_date : + * 2017-08-04 10:07:00 status : 0 type : null path : + * html/educationonline/e77748c474f74203ba2cad0a45a97de4.html + */ + + private String liveurl; + private String liveimg; + private String begin_date; + private String spareurl; + private String sort; + private String uuid; + private String title; + private String end_date; + private int status; + private String type; + private String path; + public String keywords; + + public String getLiveurl() { + return liveurl; + } + + public void setLiveurl(String liveurl) { + this.liveurl = liveurl; + } + + public String getLiveimg() { + return liveimg; + } + + public void setLiveimg(String liveimg) { + this.liveimg = liveimg; + } + + public String getBegin_date() { + return begin_date; + } + + public void setBegin_date(String begin_date) { + this.begin_date = begin_date; + } + + public String getSpareurl() { + return spareurl; + } + + public void setSpareurl(String spareurl) { + this.spareurl = spareurl; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getEnd_date() { + return end_date; + } + + public void setEnd_date(String end_date) { + this.end_date = end_date; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHospitalBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHospitalBean.java new file mode 100644 index 0000000..253b3f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHospitalBean.java @@ -0,0 +1,239 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class GanDanHospitalBean extends BaseBean{ + + public DataBean data; + + public static class DataBean { + /** + * pageNumber : 1 pageSize : 10 list : + * [{"scoretotal":"8.5","isfocus":null + * ,"gandanHospitalMsssage":null,"fcousnum" + * :1,"img":"gandanhospital/img/2018/20180223144451.jpg" + * ,"mobile":null,"uuid" + * :"2931944f25374fa0856e2a671dd04da4","expert":null + * ,"intro":null,"score1" + * :null,"score2":null,"score3":null,"proclamation" + * :null,"level":null,"address" + * :null,"name":"北京第三医院"},{"scoretotal":"2.6" + * ,"isfocus":null,"gandanHospitalMsssage":null,"fcousnum":1,"img": + * "gandanhospital/img/2018/20180223144416.jpg" + * ,"mobile":null,"uuid":"ab224e75456f4f5b9185c42d77682b00" + * ,"expert":null + * ,"intro":null,"score1":null,"score2":null,"score3":null, + * "proclamation" + * :null,"level":null,"address":null,"name":"北京第二医院"},{"scoretotal" + * :"2.0" + * ,"isfocus":null,"gandanHospitalMsssage":null,"fcousnum":1,"img": + * "gandanhospital/img/2018/20180223144336.jpg" + * ,"mobile":null,"uuid":"70fbb4057059487297516568f26866a2" + * ,"expert":null + * ,"intro":null,"score1":null,"score2":null,"score3":null, + * "proclamation":null,"level":null,"address":null,"name":"北京第一医院"}] + * totalPage : 1 totalRow : 3 + */ + + private int pageNumber; + private int pageSize; + private int totalPage; + private int totalRow; + private List list; + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * scoretotal : 8.5 isfocus : null gandanHospitalMsssage : null + * fcousnum : 1 img : gandanhospital/img/2018/20180223144451.jpg + * mobile : null uuid : 2931944f25374fa0856e2a671dd04da4 expert : + * null intro : null score1 : null score2 : null score3 : null + * proclamation : null level : null address : null name : 北京第三医院 + */ + + private String scoretotal; + private Object isfocus; + private Object gandanHospitalMsssage; + private int fcousnum; + private String img; + private Object mobile; + private String uuid; + private Object expert; + private Object intro; + private Object score1; + private Object score2; + private Object score3; + private Object proclamation; + private int level; + private Object address; + private String name; + + public String getScoretotal() { + return scoretotal; + } + + public void setScoretotal(String scoretotal) { + this.scoretotal = scoretotal; + } + + public Object getIsfocus() { + return isfocus; + } + + public void setIsfocus(Object isfocus) { + this.isfocus = isfocus; + } + + public Object getGandanHospitalMsssage() { + return gandanHospitalMsssage; + } + + public void setGandanHospitalMsssage(Object gandanHospitalMsssage) { + this.gandanHospitalMsssage = gandanHospitalMsssage; + } + + public int getFcousnum() { + return fcousnum; + } + + public void setFcousnum(int fcousnum) { + this.fcousnum = fcousnum; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public Object getMobile() { + return mobile; + } + + public void setMobile(Object mobile) { + this.mobile = mobile; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Object getExpert() { + return expert; + } + + public void setExpert(Object expert) { + this.expert = expert; + } + + public Object getIntro() { + return intro; + } + + public void setIntro(Object intro) { + this.intro = intro; + } + + public Object getScore1() { + return score1; + } + + public void setScore1(Object score1) { + this.score1 = score1; + } + + public Object getScore2() { + return score2; + } + + public void setScore2(Object score2) { + this.score2 = score2; + } + + public Object getScore3() { + return score3; + } + + public void setScore3(Object score3) { + this.score3 = score3; + } + + public Object getProclamation() { + return proclamation; + } + + public void setProclamation(Object proclamation) { + this.proclamation = proclamation; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public Object getAddress() { + return address; + } + + public void setAddress(Object address) { + this.address = address; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHouseDetialBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHouseDetialBean.java new file mode 100644 index 0000000..555a26e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GanDanHouseDetialBean.java @@ -0,0 +1,159 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by GAOPeng on 2016/10/26. + */ +public class GanDanHouseDetialBean { + + /** + * code : 1 + * data : {"commentnum":0,"patient_photo":"patient/2016-03-17/ee55faf3ce974ea9ab78b41b5286f688.jpg","patient_name":"雷腮猴","patient_mobile":"18339934521","patient_uuid":"XinwR5TI0w47vHpNW6g","uuid":"072b4fb1f8c3436a94f9677619f45cc0","photo":["case/2016-10-26/1ba0f41e5628451da7938e40a7a26b41.jpg","case/2016-10-26/e90c7d61c57645078090f7c191058724.jpg"],"create_date":"2016-10-26 16:25:48.0","time":"1小时前","tags":"乙肝,丙肝","content":"啦啦啦啦啦"} + * message : 查询成功 + */ + + private String code; + /** + * commentnum : 0 + * patient_photo : patient/2016-03-17/ee55faf3ce974ea9ab78b41b5286f688.jpg + * patient_name : 雷腮猴 + * patient_mobile : 18339934521 + * patient_uuid : XinwR5TI0w47vHpNW6g + * uuid : 072b4fb1f8c3436a94f9677619f45cc0 + * photo : ["case/2016-10-26/1ba0f41e5628451da7938e40a7a26b41.jpg","case/2016-10-26/e90c7d61c57645078090f7c191058724.jpg"] + * create_date : 2016-10-26 16:25:48.0 + * time : 1小时前 + * tags : 乙肝,丙肝 + * content : 啦啦啦啦啦 + */ + + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + private int commentnum; + private String expert_photo; + private String expert_name; + private String expert_mobile; + private String expert_uuid; + private String uuid; + private String create_date; + private String time; + private String tags; + private String content; + private List photo; + + public int getCommentnum() { + return commentnum; + } + + public void setCommentnum(int commentnum) { + this.commentnum = commentnum; + } + + public String getPatient_photo() { + return expert_photo; + } + + public void setPatient_photo(String patient_photo) { + this.expert_photo = patient_photo; + } + + public String getPatient_name() { + return expert_name; + } + + public void setPatient_name(String patient_name) { + this.expert_name = patient_name; + } + + public String getPatient_mobile() { + return expert_mobile; + } + + public void setPatient_mobile(String patient_mobile) { + this.expert_mobile = patient_mobile; + } + + public String getPatient_uuid() { + return expert_uuid; + } + + public void setPatient_uuid(String patient_uuid) { + this.expert_uuid = patient_uuid; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public List getPhoto() { + return photo; + } + + public void setPhoto(List photo) { + this.photo = photo; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GandanDoctorListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GandanDoctorListBean.java new file mode 100644 index 0000000..40d28c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GandanDoctorListBean.java @@ -0,0 +1,200 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class GandanDoctorListBean { + /** + * code : 1 + * data : {"pageNumber":1,"pageSize":10,"list":[{"img":"expert/2017-08-14/f427659f109a4575924c5ee58839d11b.jpg","office_name":"传染科","name":"测试版贾医生","position_name":"主任中医师","apply_num":25,"uuid":"6bc7063f7c7e4171ba867a5c2386b34a","hospital_name":"北京大学第一医院","consult_num":34},{"img":"expert/2018-03-27/566c885fe10142dba43e4c76053151b1.jpg","office_name":"肝病科","name":"测试版仝医生","position_name":"主任中医师","apply_num":25,"uuid":"b30ca49c030c4a978be224caa23ab2f5","hospital_name":"首都医科大学附属北京佑安医院","consult_num":32},{"img":"expert/2017-09-14/64134f8d7f8143da824338c915e9937b.jpg","office_name":"人工肝科","name":"杨壮测","position_name":"住院医师","apply_num":0,"uuid":"1c2115501eae4f209da0514e32cee65a","hospital_name":"首都医科大学附属北京佑安医院","consult_num":0},{"img":"expert/2018-03-26/85804553a776446588009d86df15af09.jpg","office_name":"传染科","name":"赵医生","position_name":"主任中医师","apply_num":8,"uuid":"897c7ed7f385419ab5926efb23fcc263","hospital_name":"北京和平里医院","consult_num":15}],"totalPage":1,"totalRow":4} + * message : 查询成功 + */ + + private int code; + private DataBean data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNumber : 1 + * pageSize : 10 + * list : [{"img":"expert/2017-08-14/f427659f109a4575924c5ee58839d11b.jpg","office_name":"传染科","name":"测试版贾医生","position_name":"主任中医师","apply_num":25,"uuid":"6bc7063f7c7e4171ba867a5c2386b34a","hospital_name":"北京大学第一医院","consult_num":34},{"img":"expert/2018-03-27/566c885fe10142dba43e4c76053151b1.jpg","office_name":"肝病科","name":"测试版仝医生","position_name":"主任中医师","apply_num":25,"uuid":"b30ca49c030c4a978be224caa23ab2f5","hospital_name":"首都医科大学附属北京佑安医院","consult_num":32},{"img":"expert/2017-09-14/64134f8d7f8143da824338c915e9937b.jpg","office_name":"人工肝科","name":"杨壮测","position_name":"住院医师","apply_num":0,"uuid":"1c2115501eae4f209da0514e32cee65a","hospital_name":"首都医科大学附属北京佑安医院","consult_num":0},{"img":"expert/2018-03-26/85804553a776446588009d86df15af09.jpg","office_name":"传染科","name":"赵医生","position_name":"主任中医师","apply_num":8,"uuid":"897c7ed7f385419ab5926efb23fcc263","hospital_name":"北京和平里医院","consult_num":15}] + * totalPage : 1 + * totalRow : 4 + */ + + private int pageNumber; + private int pageSize; + private int totalPage; + private int totalRow; + private List list; + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * img : expert/2017-08-14/f427659f109a4575924c5ee58839d11b.jpg + * office_name : 传染科 + * name : 测试版贾医生 + * position_name : 主任中医师 + * apply_num : 25 + * uuid : 6bc7063f7c7e4171ba867a5c2386b34a + * hospital_name : 北京大学第一医院 + * consult_num : 34 + * expert_uuid:expert_uuid:YU0TRARAvR8PzcKMH82 + * is_star + */ + + private String img; + private String office_name; + private String name; + private String position_name; + private int apply_num; + private String uuid; + private String hospital_name; + private int consult_num; + private int is_star; + private String expert_uuid; + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public int getIs_star() { + return is_star; + } + + public void setIs_star(int is_star) { + this.is_star = is_star; + } + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getOffice_name() { + return office_name; + } + + public void setOffice_name(String office_name) { + this.office_name = office_name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPosition_name() { + return position_name; + } + + public void setPosition_name(String position_name) { + this.position_name = position_name; + } + + public int getApply_num() { + return apply_num; + } + + public void setApply_num(int apply_num) { + this.apply_num = apply_num; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getHospital_name() { + return hospital_name; + } + + public void setHospital_name(String hospital_name) { + this.hospital_name = hospital_name; + } + + public int getConsult_num() { + return consult_num; + } + + public void setConsult_num(int consult_num) { + this.consult_num = consult_num; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetAppActivityBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetAppActivityBean.java new file mode 100644 index 0000000..e14c754 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetAppActivityBean.java @@ -0,0 +1,105 @@ +package cn.shangyu.gdxzExpert.bean; + +public class GetAppActivityBean { + + /** + * code : 200 + * data : {"note":"线上随访管理患者更方便\n添加随访患者,每新增6位,赠送由段钟平教授编写的《一个肝病医生的手记》一本,上不封顶!免邮到家!活动结束后,小助手会联系您。","img":"appactivity/img/2020/20200226111159.png","form":2,"name":"福利赠书","url_path":"/expertAPI/applyNum4Book","status":1} + * message : 成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * note : 线上随访管理患者更方便 + 添加随访患者,每新增6位,赠送由段钟平教授编写的《一个肝病医生的手记》一本,上不封顶!免邮到家!活动结束后,小助手会联系您。 + * img : appactivity/img/2020/20200226111159.png + * form : 2 + * name : 福利赠书 + * url_path : /expertAPI/applyNum4Book + * status : 1 + */ + + private String note; + private String img; + private int form; + private String name; + private String url_path; + private int status; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public int getForm() { + return form; + } + + public void setForm(int form) { + this.form = form; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl_path() { + return url_path; + } + + public void setUrl_path(String url_path) { + this.url_path = url_path; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetFollowUpBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetFollowUpBean.java new file mode 100644 index 0000000..41126e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetFollowUpBean.java @@ -0,0 +1,148 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by WANGChengXin on 2019/10/25. + */ + +public class GetFollowUpBean { + + /** + * code : 1 + * data : {"createdate":null,"uuid":"73f03740019d44f8912a2241ce788b86","expert_uuid":"74BXtpwcy6h0zHNvNtJ","patient_uuid":"Pm8XvqeQqKENtPEK7gn","datetime":"2019-03-12","isremindme":0,"isremindpatient":1,"status":null,"note":"请近日来医院复诊、复查","type":2} + * message : 操作成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * createdate : null + * uuid : 73f03740019d44f8912a2241ce788b86 + * expert_uuid : 74BXtpwcy6h0zHNvNtJ + * patient_uuid : Pm8XvqeQqKENtPEK7gn + * datetime : 2019-03-12 + * isremindme : 0 + * isremindpatient : 1 + * status : null + * note : 请近日来医院复诊、复查 + * type : 2 + */ + + private Object createdate; + private String uuid; + private String expert_uuid; + private String patient_uuid; + private String datetime; + private int isremindme; + private int isremindpatient; + private Object status; + private String note; + private int type; + + public Object getCreatedate() { + return createdate; + } + + public void setCreatedate(Object createdate) { + this.createdate = createdate; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getPatient_uuid() { + return patient_uuid; + } + + public void setPatient_uuid(String patient_uuid) { + this.patient_uuid = patient_uuid; + } + + public String getDatetime() { + return datetime; + } + + public void setDatetime(String datetime) { + this.datetime = datetime; + } + + public int getIsremindme() { + return isremindme; + } + + public void setIsremindme(int isremindme) { + this.isremindme = isremindme; + } + + public int getIsremindpatient() { + return isremindpatient; + } + + public void setIsremindpatient(int isremindpatient) { + this.isremindpatient = isremindpatient; + } + + public Object getStatus() { + return status; + } + + public void setStatus(Object status) { + this.status = status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsBean.java new file mode 100644 index 0000000..9e1bc0a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsBean.java @@ -0,0 +1,121 @@ +package cn.shangyu.gdxzExpert.bean; + +public class GetGoodsBean { + /** + * code : 200 + * data : {"img":"book/pdf/2018/20181012111943.png","times":0,"name":"天堂伞","bonuspoints":100,"uuid":"ec539f117c86445684b39a57c736d147","detail_path":"html/goods/ec539f117c86445684b39a57c736d147.html"} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * img : book/pdf/2018/20181012111943.png + * times : 0 + * name : 天堂伞 + * bonuspoints : 100 + * uuid : ec539f117c86445684b39a57c736d147 + * detail_path : html/goods/ec539f117c86445684b39a57c736d147.html + */ + + private String img; + private int times; + private String name; + private int bonuspoints; + private String uuid; + private String detail_path; + private String detial_imgpath; + private int type; + + public String getDetial_imgpath() { + return detial_imgpath; + } + + public void setDetial_imgpath(String detial_imgpath) { + this.detial_imgpath = detial_imgpath; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public int getTimes() { + return times; + } + + public void setTimes(int times) { + this.times = times; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getBonuspoints() { + return bonuspoints; + } + + public void setBonuspoints(int bonuspoints) { + this.bonuspoints = bonuspoints; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getDetail_path() { + return detail_path; + } + + public void setDetail_path(String detail_path) { + this.detail_path = detail_path; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsOrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsOrderBean.java new file mode 100644 index 0000000..2917bd0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetGoodsOrderBean.java @@ -0,0 +1,212 @@ +package cn.shangyu.gdxzExpert.bean; + +public class GetGoodsOrderBean { + + /** + * code : 200 + * data : {"time_expire":1539850243,"address":"北京市东城区欧克了绝交","user_name":"啊急急急急","goods_order_id":"1291539845243553","mobile":"15148585885","express_name":"","type":1,"pionts":1,"express_id":"","name":"iPhone 4","goods_num":1,"create_date":1539845243,"email":"","status":1} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * time_expire : 1539850243 + * address : 北京市东城区欧克了绝交 + * user_name : 啊急急急急 + * goods_order_id : 1291539845243553 + * mobile : 15148585885 + * express_name : + * type : 1 + * pionts : 1 + * express_id : + * name : iPhone 4 + * goods_num : 1 + * create_date : 1539845243 + * email : + * status : 1 + * "type": 1, + * + * + "system_time": 1540171201, + "address": "吉林省长春市南关区噜啦噜啦噜啦", + "user_name": "阿拉蕾", + "goods_order_id": "1291539910969915", + "mobile": "15128585856", + "express_name": "", + "type": 1, + "pionts": 2, + "express_id": "", + "name": "iPhone 4", + "goods_num": 2, + "create_date": 1539910969, + "email": "", + "status": 2 + * + */ + + private int time_expire; + private String address; + private String user_name; + private String goods_order_id; + private String mobile; + private String express_name; + private int type; + private int pionts; + private String express_id; + private String name; + private int goods_num; + private int create_date; + private String email; + private int status; + private int system_time; + + + public int getSystem_time() { + return system_time; + } + + public void setSystem_time(int system_time) { + this.system_time = system_time; + } + + public int getTime_expire() { + return time_expire; + } + + public void setTime_expire(int time_expire) { + this.time_expire = time_expire; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getGoods_order_id() { + return goods_order_id; + } + + public void setGoods_order_id(String goods_order_id) { + this.goods_order_id = goods_order_id; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getExpress_name() { + return express_name; + } + + public void setExpress_name(String express_name) { + this.express_name = express_name; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public int getPionts() { + return pionts; + } + + public void setPionts(int pionts) { + this.pionts = pionts; + } + + public String getExpress_id() { + return express_id; + } + + public void setExpress_id(String express_id) { + this.express_id = express_id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getGoods_num() { + return goods_num; + } + + public void setGoods_num(int goods_num) { + this.goods_num = goods_num; + } + + public int getCreate_date() { + return create_date; + } + + public void setCreate_date(int create_date) { + this.create_date = create_date; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetHospitalListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetHospitalListBean.java new file mode 100644 index 0000000..61c8416 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetHospitalListBean.java @@ -0,0 +1,27 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +//获取医院,科室,职称,等列表 +public class GetHospitalListBean extends BaseBean { + + public Data data; + + public class Data { + public List list; + public int pageNumber;// 页码 + public int totalPage;// 唯一标识 + } + + public class ListData { + public String uuid;// 唯一标识 + public String name;// 医院名称 + public String level;// 医院等级 + public int provId;// 省id + public int cityId;// 市id + public int countyId;// 区县id + public String address;// 详细地址 + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetInterrogationBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetInterrogationBean.java new file mode 100644 index 0000000..8f04d52 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetInterrogationBean.java @@ -0,0 +1,371 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by wangchengxin on 2019/7/23. + */ + +public class GetInterrogationBean implements Serializable{ + + + /** + * code : 200 + * data : {"birthday":"1995-07-19 00:00:00","imgs":"interrogation/2019-07-23/a64c9f9b6850454eb3443d0d5c043373.jpg,interrogation/2019-07-23/d66c3bc826ab4a478a11759b6ad7d31c.jpg,interrogation/2019-07-23/243b8f1a32e84abcb16ee311c9716df1.jpg,interrogation/2019-07-23/9824459080d94a1d8a4536b9308f171e.jpg,interrogation/2019-07-23/629701c6276144ed87a5f4e5b182a8e9.jpg,interrogation/2019-07-23/2bffe3fa3f914e4b9ed0e64c5608352f.jpg,interrogation/2019-07-23/3fea2d814de1405db75748bc194c4fe9.jpg,interrogation/2019-07-23/f8edf86d1e1b43ee8b2757573bed25c8.jpg","AnswerList":[{"note":"不过这个时候还在为别人考虑","imgs":"interrogation/2019-07-25/ba31b38e715a49bf808acd91f86f5e69.jpg,interrogation/2019-07-25/6733cb8650c143029ac11f642788aab2.jpg,interrogation/2019-07-25/a48b7a555eda41858fad21f064be53ba.jpg,interrogation/2019-07-25/f57e0fca68474b14994a8d5cbf6f8b70.jpg,interrogation/2019-07-25/4e68e466a93e49c2b9b6eb7f30f218db.jpg","answer_uuid":"c9bfc0ada0fb4a6cb0b09c0e54146431","satisfied":1,"name":"副主任中医师","expert_uuid":"8bkYFkACDmlCVrWsUDC","photo":"expert/2017-08-23/f34b3012a2b04e85a3e7ef1ea8e20919.jpg","create_date":"6小时前","realname":"杨浦区","hospital_name":"科研发布测试"}],"your_question":"嗯窝窝头读的我","sex":0,"disease_uuid":"b317eb27e0b04d69a43ee64db095825a","family_uuid":"92f911e0304b4e928109e3d0ed530066","disease_describe":"就嗯egg爷爷个这也液压嗯嗯嗯","step1_uuid":"9a1bbb783beb440b9a6ab240efed81f5","SupplementList":[{"imgs":"interrogation/2019-07-25/86d659d6b13a48dbb5f89091033cb750.jpg,interrogation/2019-07-25/b68e89e2a85849caac319c5c03bf16f4.jpg,interrogation/2019-07-25/0ea78cbf166b451f8a39d2cfb7770c67.jpg,interrogation/2019-07-25/46e02a438ff84207bc91371936fbdd52.jpg,interrogation/2019-07-25/d24bf117545e4ab3b0fc82a479e96425.jpg,interrogation/2019-07-25/16fb6a2f82384c1a894f0936b02bc2f7.jpg","your_question":"","disease_describe":"to鲁诺拒绝拒绝了了痛苦","create_date":"2019-07-25 17:17:19"}],"name":"啦啦啦","disease_name":"丙型肝炎","create_date":"2019-07-23 16:28:15","status":1} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean implements Serializable{ + /** + * birthday : 1995-07-19 00:00:00 + * imgs : interrogation/2019-07-23/a64c9f9b6850454eb3443d0d5c043373.jpg,interrogation/2019-07-23/d66c3bc826ab4a478a11759b6ad7d31c.jpg,interrogation/2019-07-23/243b8f1a32e84abcb16ee311c9716df1.jpg,interrogation/2019-07-23/9824459080d94a1d8a4536b9308f171e.jpg,interrogation/2019-07-23/629701c6276144ed87a5f4e5b182a8e9.jpg,interrogation/2019-07-23/2bffe3fa3f914e4b9ed0e64c5608352f.jpg,interrogation/2019-07-23/3fea2d814de1405db75748bc194c4fe9.jpg,interrogation/2019-07-23/f8edf86d1e1b43ee8b2757573bed25c8.jpg + * AnswerList : [{"note":"不过这个时候还在为别人考虑","imgs":"interrogation/2019-07-25/ba31b38e715a49bf808acd91f86f5e69.jpg,interrogation/2019-07-25/6733cb8650c143029ac11f642788aab2.jpg,interrogation/2019-07-25/a48b7a555eda41858fad21f064be53ba.jpg,interrogation/2019-07-25/f57e0fca68474b14994a8d5cbf6f8b70.jpg,interrogation/2019-07-25/4e68e466a93e49c2b9b6eb7f30f218db.jpg","answer_uuid":"c9bfc0ada0fb4a6cb0b09c0e54146431","satisfied":1,"name":"副主任中医师","expert_uuid":"8bkYFkACDmlCVrWsUDC","photo":"expert/2017-08-23/f34b3012a2b04e85a3e7ef1ea8e20919.jpg","create_date":"6小时前","realname":"杨浦区","hospital_name":"科研发布测试"}] + * your_question : 嗯窝窝头读的我 + * sex : 0 + * disease_uuid : b317eb27e0b04d69a43ee64db095825a + * family_uuid : 92f911e0304b4e928109e3d0ed530066 + * disease_describe : 就嗯egg爷爷个这也液压嗯嗯嗯 + * step1_uuid : 9a1bbb783beb440b9a6ab240efed81f5 + * SupplementList : [{"imgs":"interrogation/2019-07-25/86d659d6b13a48dbb5f89091033cb750.jpg,interrogation/2019-07-25/b68e89e2a85849caac319c5c03bf16f4.jpg,interrogation/2019-07-25/0ea78cbf166b451f8a39d2cfb7770c67.jpg,interrogation/2019-07-25/46e02a438ff84207bc91371936fbdd52.jpg,interrogation/2019-07-25/d24bf117545e4ab3b0fc82a479e96425.jpg,interrogation/2019-07-25/16fb6a2f82384c1a894f0936b02bc2f7.jpg","your_question":"","disease_describe":"to鲁诺拒绝拒绝了了痛苦","create_date":"2019-07-25 17:17:19"}] + * name : 啦啦啦 + * disease_name : 丙型肝炎 + * create_date : 2019-07-23 16:28:15 + * status : 1 + */ + + private String birthday; + private String imgs; + private String your_question; + private int sex; + private String disease_uuid; + private String family_uuid; + private String disease_describe; + private String step1_uuid; + private String name; + private String disease_name; + private String create_date; + private int status; + private String user_status; + private List AnswerList; + private List SupplementList; + + public String getBirthday() { + return birthday; + } + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getImgs() { + return imgs; + } + + public void setImgs(String imgs) { + this.imgs = imgs; + } + + public String getYour_question() { + return your_question; + } + + public void setYour_question(String your_question) { + this.your_question = your_question; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public String getDisease_uuid() { + return disease_uuid; + } + + public void setDisease_uuid(String disease_uuid) { + this.disease_uuid = disease_uuid; + } + + public String getFamily_uuid() { + return family_uuid; + } + + public void setFamily_uuid(String family_uuid) { + this.family_uuid = family_uuid; + } + + public String getDisease_describe() { + return disease_describe; + } + + public void setDisease_describe(String disease_describe) { + this.disease_describe = disease_describe; + } + + public String getStep1_uuid() { + return step1_uuid; + } + + public void setStep1_uuid(String step1_uuid) { + this.step1_uuid = step1_uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDisease_name() { + return disease_name; + } + + public void setDisease_name(String disease_name) { + this.disease_name = disease_name; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public List getAnswerList() { + return AnswerList; + } + + public void setAnswerList(List AnswerList) { + this.AnswerList = AnswerList; + } + + public List getSupplementList() { + return SupplementList; + } + + public void setSupplementList(List SupplementList) { + this.SupplementList = SupplementList; + } + + public static class AnswerListBean implements Serializable{ + /** + * note : 不过这个时候还在为别人考虑 + * imgs : interrogation/2019-07-25/ba31b38e715a49bf808acd91f86f5e69.jpg,interrogation/2019-07-25/6733cb8650c143029ac11f642788aab2.jpg,interrogation/2019-07-25/a48b7a555eda41858fad21f064be53ba.jpg,interrogation/2019-07-25/f57e0fca68474b14994a8d5cbf6f8b70.jpg,interrogation/2019-07-25/4e68e466a93e49c2b9b6eb7f30f218db.jpg + * answer_uuid : c9bfc0ada0fb4a6cb0b09c0e54146431 + * satisfied : 1 + * name : 副主任中医师 + * expert_uuid : 8bkYFkACDmlCVrWsUDC + * photo : expert/2017-08-23/f34b3012a2b04e85a3e7ef1ea8e20919.jpg + * create_date : 6小时前 + * realname : 杨浦区 + * hospital_name : 科研发布测试 + */ + + private String note; + private String imgs; + private String answer_uuid; + private int satisfied; + private String name; + private String expert_uuid; + private String photo; + private String create_date; + private String realname; + private String hospital_name; + private String expert_status; + private String examine_status; + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + + public String getExpert_status() { + return expert_status; + } + + public void setExpert_status(String expert_status) { + this.expert_status = expert_status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getImgs() { + return imgs; + } + + public void setImgs(String imgs) { + this.imgs = imgs; + } + + public String getAnswer_uuid() { + return answer_uuid; + } + + public void setAnswer_uuid(String answer_uuid) { + this.answer_uuid = answer_uuid; + } + + public int getSatisfied() { + return satisfied; + } + + public void setSatisfied(int satisfied) { + this.satisfied = satisfied; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public String getHospital_name() { + return hospital_name; + } + + public void setHospital_name(String hospital_name) { + this.hospital_name = hospital_name; + } + } + + public static class SupplementListBean implements Serializable{ + /** + * imgs : interrogation/2019-07-25/86d659d6b13a48dbb5f89091033cb750.jpg,interrogation/2019-07-25/b68e89e2a85849caac319c5c03bf16f4.jpg,interrogation/2019-07-25/0ea78cbf166b451f8a39d2cfb7770c67.jpg,interrogation/2019-07-25/46e02a438ff84207bc91371936fbdd52.jpg,interrogation/2019-07-25/d24bf117545e4ab3b0fc82a479e96425.jpg,interrogation/2019-07-25/16fb6a2f82384c1a894f0936b02bc2f7.jpg + * your_question : + * disease_describe : to鲁诺拒绝拒绝了了痛苦 + * create_date : 2019-07-25 17:17:19 + */ + + private String imgs; + private String your_question; + private String disease_describe; + private String create_date; + + public String getImgs() { + return imgs; + } + + public void setImgs(String imgs) { + this.imgs = imgs; + } + + public String getYour_question() { + return your_question; + } + + public void setYour_question(String your_question) { + this.your_question = your_question; + } + + public String getDisease_describe() { + return disease_describe; + } + + public void setDisease_describe(String disease_describe) { + this.disease_describe = disease_describe; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetListBean.java new file mode 100644 index 0000000..c19e4c3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetListBean.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +//获取医院,科室,职称,等列表 +public class GetListBean extends BaseBean { + + public List data; + + public class ListData { + + //医院列表 + public String uuid;//唯一标识 + public String name;//医院名称 + public String level;//医院等级 + public int provId;//省id + public int cityId;//市id + public int countyId;//区县id + public String address;//详细地址 + + //科室列表 + public String officeUuid;//唯一标识 + public String officeName;//科室名称 + + //职称列表 + public String des; //职称描述 +// public String uuid; //职称id +// public String name; //职称名称 + + //行政区划列表 + public int id; //主键 id +// public String name; //城市名称 + public String fullName; //省市县 全称 + public int parent; //父级id + public String treePath; //省市县结构层次标识,逗号之间为父级id + + } + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetUserIconBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetUserIconBean.java new file mode 100644 index 0000000..28958c6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetUserIconBean.java @@ -0,0 +1,90 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2020/3/9. + */ + +public class GetUserIconBean { + + /** + * code : 200 + * data : [{"img":"appicon/img/2020/20200306185745.png","name":"资讯","id":4,"selected":"4"},{"img":"appicon/img/2020/20200306185717.png","name":"患者","id":7,"selected":"7"},{"img":"appicon/img/2020/20200306185753.jpg","name":"肝胆课件","id":3,"selected":"false"},{"img":"appicon/img/2020/20200306185737.png","name":"视频","id":5,"selected":"false"},{"img":"appicon/img/2020/20200306185729.jpeg","name":"科普","id":6,"selected":"false"}] + * message : 查询成功 + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * img : appicon/img/2020/20200306185745.png + * name : 资讯 + * id : 4 + * selected : 4 + */ + + private String img; + private String name; + private int id; + private String selected; + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getSelected() { + return selected; + } + + public void setSelected(String selected) { + this.selected = selected; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetWelfarePageBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetWelfarePageBean.java new file mode 100644 index 0000000..df53487 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GetWelfarePageBean.java @@ -0,0 +1,130 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2020/4/3. + */ + +public class GetWelfarePageBean { + + /** + * code : 200 + * data : [{"left_tip":"再新增随访","flag":false,"right_tip":"赠送下载","num":0,"name":"video","right_result":"2集","left_result":"5个","title":"肝胆视频"},{"left_tip":"再新增随访","flag":false,"right_tip":"赠送下载","num":0,"name":"kejian","right_result":"2篇","left_result":"10个","title":"肝胆课件"},{"left_tip":"再新增随访","flag":false,"right_tip":"赠送兑换","num":0,"name":"jingpin","right_result":"1次","left_result":"20个","title":"精品课程"},{"left_tip":"再新增随访","flag":false,"right_tip":"赠送下载","num":0,"name":"wanfang","right_result":"5篇","left_result":"5个","title":"万方医学"},{"left_tip":"再新增随访(年度计算)","flag":false,"right_tip":"赠送U盘","num":0,"name":"upan","right_result":"1个","left_result":"100个","title":"知识U盘"}] + * message : 查询成功 + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * left_tip : 再新增随访 + * flag : false + * right_tip : 赠送下载 + * num : 0 + * name : video + * right_result : 2集 + * left_result : 5个 + * title : 肝胆视频 + */ + + private String left_tip; + private boolean flag; + private String right_tip; + private int num; + private String name; + private String right_result; + private String left_result; + private String title; + + public String getLeft_tip() { + return left_tip; + } + + public void setLeft_tip(String left_tip) { + this.left_tip = left_tip; + } + + public boolean isFlag() { + return flag; + } + + public void setFlag(boolean flag) { + this.flag = flag; + } + + public String getRight_tip() { + return right_tip; + } + + public void setRight_tip(String right_tip) { + this.right_tip = right_tip; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getRight_result() { + return right_result; + } + + public void setRight_result(String right_result) { + this.right_result = right_result; + } + + public String getLeft_result() { + return left_result; + } + + public void setLeft_result(String left_result) { + this.left_result = left_result; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GethonorDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GethonorDetailBean.java new file mode 100644 index 0000000..b279c18 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GethonorDetailBean.java @@ -0,0 +1,117 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2020/4/20. + */ + +public class GethonorDetailBean { + + /** + * code : 1 + * data : {"note":"感谢有您,一路相伴。\u201c肝胆英雄榜\u201d是由国内最具影响力的肝胆病互联网线上服务平台-肝胆相照依据肝胆病医生在各自领域年度所做工作,综合评选出来的最认可的\u201c肝胆好医生\u201d,授予证书并赠送精美感恩好礼。\n目前\u201c肝胆英雄榜\u201d荣誉包括:\u201c护肝大使\u201d、\u201c护肝新星\u201d、\u201c公益之星\u201d、\u201c科普达人\u201d、\u201c视频之星\u201d、\u201c人气科室\u201d及\u201c宣传之星\u201d等。","img":"honor/img/2020/20200417172914.png","honorlist":[{"nick_name":"2018英雄榜","id":3},{"nick_name":"2017英雄榜","id":4},{"nick_name":"2016英雄榜","id":5}],"title":"入围3届肝胆英雄榜"} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * note : 感谢有您,一路相伴。“肝胆英雄榜”是由国内最具影响力的肝胆病互联网线上服务平台-肝胆相照依据肝胆病医生在各自领域年度所做工作,综合评选出来的最认可的“肝胆好医生”,授予证书并赠送精美感恩好礼。 + 目前“肝胆英雄榜”荣誉包括:“护肝大使”、“护肝新星”、“公益之星”、“科普达人”、“视频之星”、“人气科室”及“宣传之星”等。 + * img : honor/img/2020/20200417172914.png + * honorlist : [{"nick_name":"2018英雄榜","id":3},{"nick_name":"2017英雄榜","id":4},{"nick_name":"2016英雄榜","id":5}] + * title : 入围3届肝胆英雄榜 + */ + + private String note; + private String img; + private String title; + private List honorlist; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public List getHonorlist() { + return honorlist; + } + + public void setHonorlist(List honorlist) { + this.honorlist = honorlist; + } + + public static class HonorlistBean { + /** + * nick_name : 2018英雄榜 + * id : 3 + */ + + private String nick_name; + private int id; + + public String getNick_name() { + return nick_name; + } + + public void setNick_name(String nick_name) { + this.nick_name = nick_name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsListBean.java new file mode 100644 index 0000000..6eb02f4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsListBean.java @@ -0,0 +1,213 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class GoodsListBean { + /** + * code : 200 + * data : {"pageSize":10,"pageNum":1,"pages":1,"list":[{"img":"book/pdf/2018/20181012111943.png","times":0,"name":"天堂伞","id":4,"bonuspoints":100,"uuid":"ec539f117c86445684b39a57c736d147","detail_path":"html/goods/ec539f117c86445684b39a57c736d147.html"},{"img":"book/pdf/2018/20181012111140.png","times":0,"name":"充电工","id":3,"bonuspoints":200,"uuid":"0d8a1bc9f4e0454b882ef5d75bb90c8b","detail_path":"html/goods/0d8a1bc9f4e0454b882ef5d75bb90c8b.html"}],"isFirstPage":true,"isLastPage":true,"total":2} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageSize : 10 + * pageNum : 1 + * pages : 1 + * list : [{"img":"book/pdf/2018/20181012111943.png","times":0,"name":"天堂伞","id":4,"bonuspoints":100,"uuid":"ec539f117c86445684b39a57c736d147","detail_path":"html/goods/ec539f117c86445684b39a57c736d147.html"},{"img":"book/pdf/2018/20181012111140.png","times":0,"name":"充电工","id":3,"bonuspoints":200,"uuid":"0d8a1bc9f4e0454b882ef5d75bb90c8b","detail_path":"html/goods/0d8a1bc9f4e0454b882ef5d75bb90c8b.html"}] + * isFirstPage : true + * isLastPage : true + * total : 2 + * + */ + + private int pageSize; + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int total; + private List list; + + + public boolean isFirstPage() { + return isFirstPage; + } + + public void setFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isLastPage() { + return isLastPage; + } + + public void setLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * img : book/pdf/2018/20181012111943.png + * times : 0 + * name : 天堂伞 + * id : 4 + * bonuspoints : 100 + * uuid : ec539f117c86445684b39a57c736d147 + * detail_path : html/goods/ec539f117c86445684b39a57c736d147.html + * "type": 1,1:实物,2:虚拟 + * "img": "book/pdf/2018/20181026100203.png", + "name": "脂肪肝相关书籍", + "bonuspoints": 500, + "type": 1, + "uuid": "bd4a59d6b0f548b88918f44968e2c04f" + */ + + private String img; + private String name; + private int bonuspoints; + private String uuid; + private int type; + private int upan; + + public int getUpan() { + return upan; + } + + public void setUpan(int upan) { + this.upan = upan; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + + public int getBonuspoints() { + return bonuspoints; + } + + public void setBonuspoints(int bonuspoints) { + this.bonuspoints = bonuspoints; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsNewsListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsNewsListBean.java new file mode 100644 index 0000000..1b233f3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsNewsListBean.java @@ -0,0 +1,75 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class GoodsNewsListBean { + /** + * code : 200 + * data : [{"path":"html/news/d9f5c47d0a1048f193b39d220baedff5.html","headImg":"book/pdf/2018/20181016095158.png","title":"123"}] + * message : checkSign succeed + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * path : html/news/d9f5c47d0a1048f193b39d220baedff5.html + * headImg : book/pdf/2018/20181016095158.png + * title : 123 + */ + + private String path; + private String headImg; + private String title; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsOrderListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsOrderListBean.java new file mode 100644 index 0000000..6c79e77 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GoodsOrderListBean.java @@ -0,0 +1,224 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class GoodsOrderListBean { + /** + * code : 200 + * data : {"isFirstPage":true,"isLastPage":false,"pageSize":10,"list":[{"goods_name":"肝胆相照专家端VIP会员","address":"","mobile":"15145838538","goods_num":1,"create_date":1539844670,"uuid":"12101539844670504","pionts":1,"email":"6658686@qq.com","status":2,"pay_time":1539844672},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539844637,"uuid":"1291539844637973","pionts":1,"email":"","status":2,"pay_time":1539844638},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539844545,"uuid":"1291539844545506","pionts":1,"email":"","status":2,"pay_time":1539844546},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539844448,"uuid":"1291539844448906","pionts":1,"email":"","status":2,"pay_time":1539844450},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843928,"uuid":"1291539843928268","pionts":1,"email":"","status":2,"pay_time":1539843930},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843767,"uuid":"1291539843767321","pionts":1,"email":"","status":1},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843588,"uuid":"1291539843588218","pionts":1,"email":"","status":2,"pay_time":1539843589},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843573,"uuid":"1291539843573624","pionts":1,"email":"","status":2,"pay_time":1539843574},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843119,"uuid":"1291539843119061","pionts":1,"email":"","status":2,"pay_time":1539843120},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539842985,"uuid":"1291539842985388","pionts":1,"email":"","status":1}],"pageNum":1,"pages":4,"total":34} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * isFirstPage : true + * isLastPage : false + * pageSize : 10 + * list : [{"goods_name":"肝胆相照专家端VIP会员","address":"","mobile":"15145838538","goods_num":1,"create_date":1539844670,"uuid":"12101539844670504","pionts":1,"email":"6658686@qq.com","status":2,"pay_time":1539844672},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539844637,"uuid":"1291539844637973","pionts":1,"email":"","status":2,"pay_time":1539844638},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539844545,"uuid":"1291539844545506","pionts":1,"email":"","status":2,"pay_time":1539844546},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539844448,"uuid":"1291539844448906","pionts":1,"email":"","status":2,"pay_time":1539844450},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843928,"uuid":"1291539843928268","pionts":1,"email":"","status":2,"pay_time":1539843930},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843767,"uuid":"1291539843767321","pionts":1,"email":"","status":1},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843588,"uuid":"1291539843588218","pionts":1,"email":"","status":2,"pay_time":1539843589},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843573,"uuid":"1291539843573624","pionts":1,"email":"","status":2,"pay_time":1539843574},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539843119,"uuid":"1291539843119061","pionts":1,"email":"","status":2,"pay_time":1539843120},{"goods_name":"iPhone 4","address":"北京市东城区欧克了绝交","mobile":"15148585885","goods_num":1,"create_date":1539842985,"uuid":"1291539842985388","pionts":1,"email":"","status":1}] + * pageNum : 1 + * pages : 4 + * total : 34 + */ + + private boolean isFirstPage; + private boolean isLastPage; + private int pageSize; + private int pageNum; + private int pages; + private int total; + private List list; + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * goods_name : 肝胆相照专家端VIP会员 + * address : + * mobile : 15145838538 + * goods_num : 1 + * create_date : 1539844670 + * uuid : 12101539844670504 + * pionts : 1 + * email : 6658686@qq.com + * status : 2 + * pay_time : 1539844672 + * + * + */ + + private String goods_name; + private String address; + private String mobile; + private int goods_num; + private int create_date; + private String uuid; + private int pionts; + private String email; + private int status; + private int pay_time; + + public String getGoods_name() { + return goods_name; + } + + public void setGoods_name(String goods_name) { + this.goods_name = goods_name; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public int getGoods_num() { + return goods_num; + } + + public void setGoods_num(int goods_num) { + this.goods_num = goods_num; + } + + public int getCreate_date() { + return create_date; + } + + public void setCreate_date(int create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public int getPionts() { + return pionts; + } + + public void setPionts(int pionts) { + this.pionts = pionts; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getPay_time() { + return pay_time; + } + + public void setPay_time(int pay_time) { + this.pay_time = pay_time; + } + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupListBean.java new file mode 100644 index 0000000..85dd05a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupListBean.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/12/11. + */ + +public class GroupListBean { + + /** + * code : 1 + * data : [{"name":"jujujuj","uuid":"81982080c30c42abaf21d27121b15824"},{"name":"几个是啦啦","uuid":"b55c0153c58841569c493613115dba1e"},{"name":"您老图","uuid":"d215cda85d7c42058472087ac01021cf"},{"name":"具体噜噜噜噜","uuid":"fb0b25114a4643828d43e534a989d5cc"}] + * message : 请求数据成功 + */ + + private int code; + private String message; + private List data; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * name : jujujuj + * uuid : 81982080c30c42abaf21d27121b15824 + */ + + private String name; + private String uuid; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupManageBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupManageBean.java new file mode 100644 index 0000000..4df390a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupManageBean.java @@ -0,0 +1,36 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by WANGChengXin on 2019/10/21. + */ + +public class GroupManageBean { + private String name; + private String groupId; + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + private boolean ischoose; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public boolean isIschoose() { + return ischoose; + } + + public void setIschoose(boolean ischoose) { + this.ischoose = ischoose; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientList.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientList.java new file mode 100644 index 0000000..f6b9e4d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientList.java @@ -0,0 +1,203 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +public class GroupPatientList extends BaseBean implements Serializable{ + public List data; + + public class Group implements Serializable{ + public List patientList; + public String patientNum; + public String name; + public String uuid; + public String expert_uuid; + // 1 未选中 2选中 3部分选中 + public int select=1; + public int type;//0:自建分组1:后台分组 + + } + + public static class PatientData implements Serializable{ + public PatientData() { + // TODO Auto-generated constructor stub + } + // 1 未选中 2选中 + public int select=1; + public String mobile;// 手机号 + public String realName;// 患者姓名 + public String photo;// 患者头像路径 + public String uuid;// 唯一标示 + public String birthDate;// 患者出生日期 + public int sex;// 患者性别(0.男 1.女) + public int type;// 类型//1.随访关系 2.包月服务关系 (type==2即为VIP) + public String provId;// 省id + public String cityId;// 市id + public String countyId;// 区县id + public String nation;// 民族 + public String nickname;// 别名 + public String note;// 备注内容 + public String join_date;//随访时间 + // 新的患者增加的 + public String patientUuid;// 患者uuid + public String expertUuid;// 专家uuid + public String createDate;// 申请时间 + public String content;// 申请内容 + public int status;// 新的患者申请,状态(1.待审核2.审核通过3.拒绝 4.已过期) + private boolean isSelect; + + public String getJoin_date() { + return join_date; + } + + public void setJoin_date(String join_date) { + this.join_date = join_date; + } + + public boolean isSelect() { + return isSelect; + } + + public void setSelect(boolean select) { + isSelect = select; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getBirthDate() { + return birthDate; + } + + public void setBirthDate(String birthDate) { + this.birthDate = birthDate; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getProvId() { + return provId; + } + + public void setProvId(String provId) { + this.provId = provId; + } + + public String getCityId() { + return cityId; + } + + public void setCityId(String cityId) { + this.cityId = cityId; + } + + public String getCountyId() { + return countyId; + } + + public void setCountyId(String countyId) { + this.countyId = countyId; + } + + public String getNation() { + return nation; + } + + public void setNation(String nation) { + this.nation = nation; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getPatientUuid() { + return patientUuid; + } + + public void setPatientUuid(String patientUuid) { + this.patientUuid = patientUuid; + } + + public String getExpertUuid() { + return expertUuid; + } + + public void setExpertUuid(String expertUuid) { + this.expertUuid = expertUuid; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + @Override + public String toString() { + return "PatientData [mobile=" + mobile + ", realName=" + realName + + ", photo=" + photo + ", uuid=" + uuid + ", birthDate=" + + birthDate + ", sex=" + sex + ", type=" + type + + ", provId=" + provId + ", cityId=" + cityId + + ", countyId=" + countyId + ", nation=" + nation + "]"; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientListBean.java new file mode 100644 index 0000000..178990a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/GroupPatientListBean.java @@ -0,0 +1,366 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/12/19. + */ + +public class GroupPatientListBean { + + /** + * code : 1 + * data : [{"join_date":"2019-12-19 08:34:11.0","is_start":0,"nickname":"测试9","type":1,"note":null,"nation":null,"bloodType":null,"fixedTelephone":null,"mailingAddress":null,"postalCode":null,"detailed_address":null,"diagnosis":"GOOD","uuid":"yzXekPJgI9PMVLORz1J","height":null,"mobile":"18012345609","isEnable":0,"photo":"patient/2016-12-20/eb3a0e5e2edb48eca63773ce0e009b5f.jpg","countyId":2,"cityId":2,"birthDate":"1993-07-18","sex":1,"provId":null,"weight":null,"realName":"安卓患者测试9"},{"join_date":"2019-12-19 08:34:53.0","is_start":0,"nickname":"测试1","type":1,"note":null,"nation":null,"bloodType":null,"fixedTelephone":null,"mailingAddress":null,"postalCode":null,"detailed_address":null,"diagnosis":"GOOD","uuid":"Pm8XvqeQqKENtPEK7gn","height":null,"mobile":"18012345601","isEnable":0,"photo":"patient/2019-11-05/ad8f0ba7aa004b209983033129ce2bdd.jpg","countyId":2,"cityId":2,"birthDate":"2016-06-17","sex":1,"provId":null,"weight":null,"realName":"测试账号1"}] + * message : 请求数据成功 + * group : {"patientNum":null,"sort":null,"uuid":"331de4f919b84432910167b991ab6454","expert_uuid":"74BXtpwcy6h0zHNvNtJ","create_date":null,"name":"饿了啦啦啦啦啦啦"} + */ + + private int code; + private String message; + private GroupBean group; + private List data; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public GroupBean getGroup() { + return group; + } + + public void setGroup(GroupBean group) { + this.group = group; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class GroupBean { + /** + * patientNum : null + * sort : null + * uuid : 331de4f919b84432910167b991ab6454 + * expert_uuid : 74BXtpwcy6h0zHNvNtJ + * create_date : null + * name : 饿了啦啦啦啦啦啦 + */ + + private Object patientNum; + private Object sort; + private String uuid; + private String expert_uuid; + private Object create_date; + private String name; + + public Object getPatientNum() { + return patientNum; + } + + public void setPatientNum(Object patientNum) { + this.patientNum = patientNum; + } + + public Object getSort() { + return sort; + } + + public void setSort(Object sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public Object getCreate_date() { + return create_date; + } + + public void setCreate_date(Object create_date) { + this.create_date = create_date; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + + public static class DataBean { + /** + * join_date : 2019-12-19 08:34:11.0 + * is_start : 0 + * nickname : 测试9 + * type : 1 + * note : null + * nation : null + * bloodType : null + * fixedTelephone : null + * mailingAddress : null + * postalCode : null + * detailed_address : null + * diagnosis : GOOD + * uuid : yzXekPJgI9PMVLORz1J + * height : null + * mobile : 18012345609 + * isEnable : 0 + * photo : patient/2016-12-20/eb3a0e5e2edb48eca63773ce0e009b5f.jpg + * countyId : 2 + * cityId : 2 + * birthDate : 1993-07-18 + * sex : 1 + * provId : null + * weight : null + * realName : 安卓患者测试9 + */ + + private String join_date; + private int is_start; + private String nickname; + private int type; + private Object note; + private Object nation; + private Object bloodType; + private Object fixedTelephone; + private Object mailingAddress; + private Object postalCode; + private Object detailed_address; + private String diagnosis; + private String uuid; + private Object height; + private String mobile; + private int isEnable; + private String photo; + private int countyId; + private int cityId; + private String birthDate; + private int sex; + private Object provId; + private Object weight; + private String realName; + + public String getJoin_date() { + return join_date; + } + + public void setJoin_date(String join_date) { + this.join_date = join_date; + } + + public int getIs_start() { + return is_start; + } + + public void setIs_start(int is_start) { + this.is_start = is_start; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public Object getNote() { + return note; + } + + public void setNote(Object note) { + this.note = note; + } + + public Object getNation() { + return nation; + } + + public void setNation(Object nation) { + this.nation = nation; + } + + public Object getBloodType() { + return bloodType; + } + + public void setBloodType(Object bloodType) { + this.bloodType = bloodType; + } + + public Object getFixedTelephone() { + return fixedTelephone; + } + + public void setFixedTelephone(Object fixedTelephone) { + this.fixedTelephone = fixedTelephone; + } + + public Object getMailingAddress() { + return mailingAddress; + } + + public void setMailingAddress(Object mailingAddress) { + this.mailingAddress = mailingAddress; + } + + public Object getPostalCode() { + return postalCode; + } + + public void setPostalCode(Object postalCode) { + this.postalCode = postalCode; + } + + public Object getDetailed_address() { + return detailed_address; + } + + public void setDetailed_address(Object detailed_address) { + this.detailed_address = detailed_address; + } + + public String getDiagnosis() { + return diagnosis; + } + + public void setDiagnosis(String diagnosis) { + this.diagnosis = diagnosis; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Object getHeight() { + return height; + } + + public void setHeight(Object height) { + this.height = height; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public int getIsEnable() { + return isEnable; + } + + public void setIsEnable(int isEnable) { + this.isEnable = isEnable; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public int getCountyId() { + return countyId; + } + + public void setCountyId(int countyId) { + this.countyId = countyId; + } + + public int getCityId() { + return cityId; + } + + public void setCityId(int cityId) { + this.cityId = cityId; + } + + public String getBirthDate() { + return birthDate; + } + + public void setBirthDate(String birthDate) { + this.birthDate = birthDate; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public Object getProvId() { + return provId; + } + + public void setProvId(Object provId) { + this.provId = provId; + } + + public Object getWeight() { + return weight; + } + + public void setWeight(Object weight) { + this.weight = weight; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HeroBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HeroBean.java new file mode 100644 index 0000000..af3d482 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HeroBean.java @@ -0,0 +1,88 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by WANGChengXin on 2019/11/29. + */ + +public class HeroBean { + + /** + * code : 200 + * data : {"note":"2019英雄排行榜","name":"2019英雄排行榜","url_path":"http://twx.igandan.org/activity/hero2019","status":1} + * message : 成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * note : 2019英雄排行榜 + * name : 2019英雄排行榜 + * url_path : http://twx.igandan.org/activity/hero2019 + * status : 1 + */ + + private String note; + private String name; + private String url_path; + private int status; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl_path() { + return url_path; + } + + public void setUrl_path(String url_path) { + this.url_path = url_path; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeBean.java new file mode 100644 index 0000000..a2e207b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeBean.java @@ -0,0 +1,673 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class HomeBean { + private String msg; + private String code; + private HomeDataBean data; + private String message; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public HomeDataBean getData() { + return data; + } + + public void setData(HomeDataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public class HomeDataBean + { + private List news_list; + private List icons_list; + private List meeting_list; + private List esite_list; + private List excellencourse_list; + private List video_list; + private List guide_ist; + private List gandanfile_list; + private WelFareBean welfare_notice; + private ConsultBean consult_list; + private String sign_in; + private String has_unread; + private ExpertBean expertDetail; + private String isOnlineToday; + + public String getIsOnlineToday() { + return isOnlineToday; + } + + public void setIsOnlineToday(String isOnlineToday) { + this.isOnlineToday = isOnlineToday; + } + + public ExpertBean getExpertDetail() { + return expertDetail; + } + + public void setExpertDetail(ExpertBean expertDetail) { + this.expertDetail = expertDetail; + } + + public WelFareBean getWelfare_notice() { + return welfare_notice; + } + + public void setWelfare_notice(WelFareBean welfare_notice) { + this.welfare_notice = welfare_notice; + } + + public ConsultBean getConsult_list() { + return consult_list; + } + + public void setConsult_list(ConsultBean consult_list) { + this.consult_list = consult_list; + } + + public List getNews_list() { + return news_list; + } + + public void setNews_list(List news_list) { + this.news_list = news_list; + } + + public List getIcons_list() { + return icons_list; + } + + public void setIcons_list(List icons_list) { + this.icons_list = icons_list; + } + + public List getMeeting_list() { + return meeting_list; + } + + public void setMeeting_list(List meeting_list) { + this.meeting_list = meeting_list; + } + + public List getEsite_list() { + return esite_list; + } + + public void setEsite_list(List esite_list) { + this.esite_list = esite_list; + } + + public List getExcellencourse_list() { + return excellencourse_list; + } + + public void setExcellencourse_list(List excellencourse_list) { + this.excellencourse_list = excellencourse_list; + } + + public List getVideo_list() { + return video_list; + } + + public void setVideo_list(List video_list) { + this.video_list = video_list; + } + + public List getGuide_ist() { + return guide_ist; + } + + public void setGuide_ist(List guide_ist) { + this.guide_ist = guide_ist; + } + + public List getGandanfile_list() { + return gandanfile_list; + } + + public void setGandanfile_list(List gandanfile_list) { + this.gandanfile_list = gandanfile_list; + } + + public String getSign_in() { + return sign_in; + } + + public void setSign_in(String sign_in) { + this.sign_in = sign_in; + } + + public String getHas_unread() { + return has_unread; + } + + public void setHas_unread(String has_unread) { + this.has_unread = has_unread; + } + } + public class ExpertBean + { + private String hospitalName; + private String realName; + + public String getHospitalName() { + return hospitalName; + } + + public void setHospitalName(String hospitalName) { + this.hospitalName = hospitalName; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + } + public class ConsultBean + { + private String yetDayTotalNum; + private String yetDayTotalnumEPNum; + private String count; + + public String getYetDayTotalNum() { + return yetDayTotalNum; + } + + public void setYetDayTotalNum(String yetDayTotalNum) { + this.yetDayTotalNum = yetDayTotalNum; + } + + public String getYetDayTotalnumEPNum() { + return yetDayTotalnumEPNum; + } + + public void setYetDayTotalnumEPNum(String yetDayTotalnumEPNum) { + this.yetDayTotalnumEPNum = yetDayTotalnumEPNum; + } + + + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } + } + public class WelFareBean + { + private String one_last_notice; + private String receive_notice; + + public String getOne_last_notice() { + return one_last_notice; + } + + public void setOne_last_notice(String one_last_notice) { + this.one_last_notice = one_last_notice; + } + + public String getReceive_notice() { + return receive_notice; + } + + public void setReceive_notice(String receive_notice) { + this.receive_notice = receive_notice; + } + } + public class NewsBean + { + private String title; + private String color; + private String headImg; + private String type; + private String path; + private String uuid; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getColor() { + return color; + } + + public void setColor(String color) { + this.color = color; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } + public class IconBean + { + private String fixed; + private String img; + private String name; + private Boolean red; + private Boolean red1; + + public Boolean getRed1() { + return red1; + } + + public void setRed1(Boolean red1) { + this.red1 = red1; + } + + public Boolean getRed() { + return red; + } + + public void setRed(Boolean red) { + this.red = red; + } + + public String getFixed() { + return fixed; + } + + public void setFixed(String fixed) { + this.fixed = fixed; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + public class MettingBean + { + private String title; + private String end_date; + private String liveurl; + private String begin_date; + private String state; + private String path; + private String begin_date_timestamp; + + public String getBegin_date_timestamp() { + return begin_date_timestamp; + } + + public void setBegin_date_timestamp(String begin_date_timestamp) { + this.begin_date_timestamp = begin_date_timestamp; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getEnd_date() { + return end_date; + } + + public void setEnd_date(String end_date) { + this.end_date = end_date; + } + + public String getLiveurl() { + return liveurl; + } + + public void setLiveurl(String liveurl) { + this.liveurl = liveurl; + } + + public String getBegin_date() { + return begin_date; + } + + public void setBegin_date(String begin_date) { + this.begin_date = begin_date; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } + + public class EsiteBean + { + private String img_path; + private String url; + private String name; + + public String getImg_path() { + return img_path; + } + + public void setImg_path(String img_path) { + this.img_path = img_path; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + public class CourseBean { + public int id; + public String tags; + public String study_num; + public String title; + public String discount_price; + public String account; + public String discount_type; + public String sroll_img; + public String index_img; + public String special_type_name; + public String back_bon; + public String fuli_bon; + public String upload_num; + public String video_num; + + public String getVideo_num() { + return video_num; + } + + public void setVideo_num(String video_num) { + this.video_num = video_num; + } + + public String getUpload_num() { + return upload_num; + } + + public void setUpload_num(String upload_num) { + this.upload_num = upload_num; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getStudy_num() { + return study_num; + } + + public void setStudy_num(String study_num) { + this.study_num = study_num; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDiscount_price() { + return discount_price; + } + + public void setDiscount_price(String discount_price) { + this.discount_price = discount_price; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getDiscount_type() { + return discount_type; + } + + public void setDiscount_type(String discount_type) { + this.discount_type = discount_type; + } + + public String getSroll_img() { + return sroll_img; + } + + public void setSroll_img(String sroll_img) { + this.sroll_img = sroll_img; + } + + public String getIndex_img() { + return index_img; + } + + public void setIndex_img(String index_img) { + this.index_img = index_img; + } + + public String getSpecial_type_name() { + return special_type_name; + } + + public void setSpecial_type_name(String special_type_name) { + this.special_type_name = special_type_name; + } + + public String getBack_bon() { + return back_bon; + } + + public void setBack_bon(String back_bon) { + this.back_bon = back_bon; + } + + public String getFuli_bon() { + return fuli_bon; + } + + public void setFuli_bon(String fuli_bon) { + this.fuli_bon = fuli_bon; + } + } + public class VideoBean + { + private String uuid; + private String imgpath; + private String polyv_uuid; + private String name; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getPolyv_uuid() { + return polyv_uuid; + } + + public void setPolyv_uuid(String polyv_uuid) { + this.polyv_uuid = polyv_uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + public class GuideBean + { + private String title; + private String article_uuid; + private String path; + private String create_date; + private String tags; + private String guide_type; + + public String getGuide_type() { + return guide_type; + } + + public void setGuide_type(String guide_type) { + this.guide_type = guide_type; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getArticle_uuid() { + return article_uuid; + } + + public void setArticle_uuid(String article_uuid) { + this.article_uuid = article_uuid; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeList.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeList.java new file mode 100644 index 0000000..ca07435 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeList.java @@ -0,0 +1,174 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean.InfoData; + + +public class HomeList extends BaseBean { + public ArrayList data; + public int expertApplyNum; + public int pingFlowewrnum; + public int ConsultTotalNum ; + public int signIn ; + public int isOnlineToday ; + public InfoData expert; + public String moocswitch; +// public String moocimg; +// public String moocurl; + +// "adlist": [ +// { +// "img": "mooc/img/2018/20180613161213.jpg", +// "position": 1, +// "url": "http://www.baidu.com" +// }, +// { +// "img": "mooc/img/2018/20180613161231.jpg", +// "position": 2, +// "url": "http://www.sina.com" +// }, +// { +// "img": "mooc/img/2018/20180613161246.jpg", +// "position": 3, +// "url": "http://www.qq.com" +// } +// ], + public static class AdlistBean { + /** + * img : mooc/img/2018/20180613151852.jpg + * position : 1 + * url : p1 + */ + + private String img; + private int position; + private String url; + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + } + private ArrayList adlist; + + + public ArrayList getAdlist() { + return adlist; + } + + + public void setAdlist(ArrayList adlist) { + this.adlist = adlist; + } + + + public class HomeBean { + + private String title; + /** + * 小类1新闻,2会议,3肝胆家园,4病例讨论,5病例分享,6肝胆活动,7科普文章 + */ + + private String image; + private String content; + private String btype; + private String article_uuid; + private String atype; + private String uuid; + private String status; + private String path; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getBtype() { + return btype; + } + + public void setBtype(String btype) { + this.btype = btype; + } + + public String getArticle_uuid() { + return article_uuid; + } + + public void setArticle_uuid(String article_uuid) { + this.article_uuid = article_uuid; + } + + public String getAtype() { + return atype; + } + + public void setAtype(String atype) { + this.atype = atype; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeModalBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeModalBean.java new file mode 100644 index 0000000..f94da4b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeModalBean.java @@ -0,0 +1,79 @@ +package cn.shangyu.gdxzExpert.bean; + +public class HomeModalBean { + private String code; + private HomeData data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public HomeData getData() { + return data; + } + + public void setData(HomeData data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public class HomeData{ + private String note; + private String img; + private String form; + private String name; + private String url_path; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getForm() { + return form; + } + + public void setForm(String form) { + this.form = form; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl_path() { + return url_path; + } + + public void setUrl_path(String url_path) { + this.url_path = url_path; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeTrollNewBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeTrollNewBean.java new file mode 100644 index 0000000..5634bfa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HomeTrollNewBean.java @@ -0,0 +1,191 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class HomeTrollNewBean { + /** + * code : 1 + * data : [{"image":null,"atype":2,"btype":6,"article_uuid":"2099370482c34266b7e9019b347b9649","uuid":"9b816d5f0a1e43dd98a3c7bec911a148","title":"测试页面显示问题","status":1,"path":"html/activity/2099370482c34266b7e9019b347b9649.html","content":null},{"image":null,"atype":2,"btype":7,"article_uuid":"4b21a0195f2548c78b13071c4b7f80ce","uuid":"28ea280c3cb54c4d902245ecd8aa571e","title":"张一山--酒精肝病的日常饮食注意事项","status":1,"path":"html/article/4b21a0195f2548c78b13071c4b7f80ce.html","content":null},{"image":null,"atype":2,"btype":8,"article_uuid":"4461117928ba4f0599b6454581b9b13c","uuid":"8abd6cfca4b94b9998323d87aa918194","title":"测试多个标签筛选","status":1,"path":"html/video/4461117928ba4f0599b6454581b9b13c.html","content":"惹我★测试多个标签筛选★85★book/pdf/2017/20170705150936.jpg★joker"}] + * patientmoocswitchStr : 0 + * adlist : [{"img":"mooc/img/2018/20180613151852.jpg","position":1,"url":"p1"},{"img":"mooc/img/2018/20180613151916.jpg","position":2,"url":"p2"},{"img":"mooc/img/2018/20180613151934.jpg","position":3,"url":"p3"}] + * message : 查询成功 + */ + + private String code; + private String patientmoocswitchStr; + private String message; + private List data; + private List adlist; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getPatientmoocswitchStr() { + return patientmoocswitchStr; + } + + public void setPatientmoocswitchStr(String patientmoocswitchStr) { + this.patientmoocswitchStr = patientmoocswitchStr; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public List getAdlist() { + return adlist; + } + + public void setAdlist(List adlist) { + this.adlist = adlist; + } + + public static class DataBean { + /** + * image : null + * atype : 2 + * btype : 6 + * article_uuid : 2099370482c34266b7e9019b347b9649 + * uuid : 9b816d5f0a1e43dd98a3c7bec911a148 + * title : 测试页面显示问题 + * status : 1 + * path : html/activity/2099370482c34266b7e9019b347b9649.html + * content : null + */ + + private Object image; + private int atype; + private int btype; + private String article_uuid; + private String uuid; + private String title; + private int status; + private String path; + private Object content; + + public Object getImage() { + return image; + } + + public void setImage(Object image) { + this.image = image; + } + + public int getAtype() { + return atype; + } + + public void setAtype(int atype) { + this.atype = atype; + } + + public int getBtype() { + return btype; + } + + public void setBtype(int btype) { + this.btype = btype; + } + + public String getArticle_uuid() { + return article_uuid; + } + + public void setArticle_uuid(String article_uuid) { + this.article_uuid = article_uuid; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public Object getContent() { + return content; + } + + public void setContent(Object content) { + this.content = content; + } + } + + public static class AdlistBean { + /** + * img : mooc/img/2018/20180613151852.jpg + * position : 1 + * url : p1 + */ + + private String img; + private int position; + private String url; + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public int getPosition() { + return position; + } + + public void setPosition(int position) { + this.position = position; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalBean.java new file mode 100644 index 0000000..e60bb57 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalBean.java @@ -0,0 +1,76 @@ +package cn.shangyu.gdxzExpert.bean; + +public class HospitalBean { + private String name; + private String county_name; + private String city_name; + private String prov_name; + private String uuid; + private String county_id; + private String prov_id; + private String city_id; + + public String getCounty_id() { + return county_id; + } + + public void setCounty_id(String county_id) { + this.county_id = county_id; + } + + public String getProv_id() { + return prov_id; + } + + public void setProv_id(String prov_id) { + this.prov_id = prov_id; + } + + public String getCity_id() { + return city_id; + } + + public void setCity_id(String city_id) { + this.city_id = city_id; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCounty_name() { + return county_name; + } + + public void setCounty_name(String county_name) { + this.county_name = county_name; + } + + public String getCity_name() { + return city_name; + } + + public void setCity_name(String city_name) { + this.city_name = city_name; + } + + public String getProv_name() { + return prov_name; + } + + public void setProv_name(String prov_name) { + this.prov_name = prov_name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalDetialBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalDetialBean.java new file mode 100644 index 0000000..22d55b6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalDetialBean.java @@ -0,0 +1,528 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class HospitalDetialBean { + + private int code; + private DataBean data; + private String message; + private int isExpertFromHospital; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public int getIsExpertFromHospital() { + return isExpertFromHospital; + } + + public void setIsExpertFromHospital(int isExpertFromHospital) { + this.isExpertFromHospital = isExpertFromHospital; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DongtaiBean{ +// "path": "html/dongtai/f28204093f7d4140ad9652fe6e1de17b.html", +// "author": "肝胆相照", +// "TITLE": "如何绑定银行卡", +// "HEAD_IMG": "book/pdf/2018/20180531165726.jpg" + //"editType" + + private String path; + private String author; + private String TITLE; + private String HEAD_IMG; + private int editType; + + + public int getEditType() { + return editType; + } + + public void setEditType(int editType) { + this.editType = editType; + } + public String getPath() { + return path; + } + public void setPath(String path) { + this.path = path; + } + public String getAuthor() { + return author; + } + public void setAuthor(String author) { + this.author = author; + } + public String getTITLE() { + return TITLE; + } + public void setTITLE(String tITLE) { + TITLE = tITLE; + } + public String getHEAD_IMG() { + return HEAD_IMG; + } + public void setHEAD_IMG(String hEAD_IMG) { + HEAD_IMG = hEAD_IMG; + } + + + } + + public static class VideoBean { + private String path; + private String readnum; + private String type_uuid; + private String imgpath; + private String name; + private String create_date; + private String uuid; + private String public_name; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getType_uuid() { + return type_uuid; + } + + public void setType_uuid(String type_uuid) { + this.type_uuid = type_uuid; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + } + + + + + public static class DataBean { + private String mobile; + private Object uuid; + private String intro; + private String score1; + private String score2; + private String score3; + private String scoretotal; + private int isfocus; + private int fcousnum; + private String img; + private Object level; + private String address; + private String name; + private List expert; + private String proclamation; + private List gandanHospitalMsssage; + private Listvideo; + private List dongtai; + + + public List getDongtai() { + return dongtai; + } + + public void setDongtai(List dongtai) { + this.dongtai = dongtai; + } + + public List getVideo() { + return video; + } + + public void setVideo(List video) { + this.video = video; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public Object getUuid() { + return uuid; + } + + public void setUuid(Object uuid) { + this.uuid = uuid; + } + + public String getIntro() { + return intro; + } + + public void setIntro(String intro) { + this.intro = intro; + } + + public String getScore1() { + return score1; + } + + public void setScore1(String score1) { + this.score1 = score1; + } + + public String getScore2() { + return score2; + } + + public void setScore2(String score2) { + this.score2 = score2; + } + + public String getScore3() { + return score3; + } + + public void setScore3(String score3) { + this.score3 = score3; + } + + public String getScoretotal() { + return scoretotal; + } + + public void setScoretotal(String scoretotal) { + this.scoretotal = scoretotal; + } + + public int getIsfocus() { + return isfocus; + } + + public void setIsfocus(int isfocus) { + this.isfocus = isfocus; + } + + public int getFcousnum() { + return fcousnum; + } + + public void setFcousnum(int fcousnum) { + this.fcousnum = fcousnum; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public Object getLevel() { + return level; + } + + public void setLevel(Object level) { + this.level = level; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getExpert() { + return expert; + } + + public void setExpert(List expert) { + this.expert = expert; + } + + public String getProclamation() { + return proclamation; + } + + public void setProclamation(String proclamation) { + this.proclamation = proclamation; + } + + public List getGandanHospitalMsssage() { + return gandanHospitalMsssage; + } + + public void setGandanHospitalMsssage( + List gandanHospitalMsssage) { + this.gandanHospitalMsssage = gandanHospitalMsssage; + } + + public static class ExpertBean { + /** + * photo : expert/2017-08-23/f34b3012a2b04e85a3e7ef1ea8e20919.jpg + * uuid : 8bkYFkACDmlCVrWsUDC realname : 杨浦区 flowernum : 255 + * fllownum : 8 consultnum : 26 position : 副主任中医师 + */ + + private String photo; + private String uuid; + private String realname; + private int flowernum; + private int fllownum; + private int consultnum; + private String position; + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + + public int getFlowernum() { + return flowernum; + } + + public void setFlowernum(int flowernum) { + this.flowernum = flowernum; + } + + public int getFllownum() { + return fllownum; + } + + public void setFllownum(int fllownum) { + this.fllownum = fllownum; + } + + public int getConsultnum() { + return consultnum; + } + + public void setConsultnum(int consultnum) { + this.consultnum = consultnum; + } + + public String getPosition() { + return position; + } + + public void setPosition(String position) { + this.position = position; + } + } + + public static class GandanHospitalMsssageBean { + /** + * img3 : score2 : 10.0 score3 : 10.0 publish_realname : Huge + * replay_num : 4 score1 : 10.0 create_date : 2018-03-30 08:53:43 + * uuid : bc5fd005431a40a494d617b68c43de8c content : + * 我回家看看我的手机没电没时间了,我 img2 : scoretotal : 10.0 img1 : + */ + + private String img3; + private double score2; + private double score3; + private String publish_realname; + private int replay_num; + private double score1; + private String create_date; + private String uuid; + private String content; + private String img2; + private double scoretotal; + private String img1; + + public String getImg3() { + return img3; + } + + public void setImg3(String img3) { + this.img3 = img3; + } + + public double getScore2() { + return score2; + } + + public void setScore2(double score2) { + this.score2 = score2; + } + + public double getScore3() { + return score3; + } + + public void setScore3(double score3) { + this.score3 = score3; + } + + public String getPublish_realname() { + return publish_realname; + } + + public void setPublish_realname(String publish_realname) { + this.publish_realname = publish_realname; + } + + public int getReplay_num() { + return replay_num; + } + + public void setReplay_num(int replay_num) { + this.replay_num = replay_num; + } + + public double getScore1() { + return score1; + } + + public void setScore1(double score1) { + this.score1 = score1; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getImg2() { + return img2; + } + + public void setImg2(String img2) { + this.img2 = img2; + } + + public double getScoretotal() { + return scoretotal; + } + + public void setScoretotal(double scoretotal) { + this.scoretotal = scoretotal; + } + + public String getImg1() { + return img1; + } + + public void setImg1(String img1) { + this.img1 = img1; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalListBean.java new file mode 100644 index 0000000..e1aa526 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalListBean.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/1/7. + */ + +public class HospitalListBean { + + /** + * code : 200 + * data : [{"name":"","uuid":"d8902eaa7962471eb218db5f206eb0c4"},{"name":"181医院","uuid":"d6297e178c64468ba4c414bc1a085ec8"},{"name":"301医院海南分院","uuid":"3f04d68defba4c7d978dce31274c5e53"},{"name":"322医院","uuid":"23bee29ac915468587c9b281fda27d94"},{"name":"33医院","uuid":"d85d4d80d50a43d49b9f6a0ca2712888"},{"name":"401医院","uuid":"1f7fd577e84645b59440790f55b19b17"},{"name":"405医院","uuid":"e709d3e10e204496a49a28abca87d9d2"},{"name":"ce","uuid":"819d5c0902464347808c181318011eda"},{"name":"阿巴嘎旗蒙医医院","uuid":"02596eb9dfd248a78f1ee65c40a60b74"},{"name":"阿巴嘎旗医院","uuid":"e2c7f193e5ba447e95c15d00c35af4d9"}] + * message : checkSign succeed + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * name : + * uuid : d8902eaa7962471eb218db5f206eb0c4 + */ + + private String name; + private String uuid; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalRollListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalRollListBean.java new file mode 100644 index 0000000..4ad47a9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HospitalRollListBean.java @@ -0,0 +1,38 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class HospitalRollListBean extends BaseBean { + public List data; + + public class HospitalRollBean { + private String path; + private String headImg; + private String title; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/HouseBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HouseBean.java new file mode 100644 index 0000000..85470a2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/HouseBean.java @@ -0,0 +1,134 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class HouseBean extends BaseBean { + public HouseData data; + public class HouseData { + public String pageNumber; + public String pageSize; + public String totalRow; + public int totalPage; + public List list; + } + + public class HouseList { + private String expert_photo; + private String expert_name; + private String expert_mobile; + private String commentnum; + private String expert_uuid; + private String create_date; + private String modify_date; + private String uuid; + private String time; + private String tags; + private String content; + private List photo; + private String examine_status; + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + public String getExpert_photo() { + return expert_photo; + } + + public void setExpert_photo(String expert_photo) { + this.expert_photo = expert_photo; + } + + public String getExpert_name() { + return expert_name; + } + + public void setExpert_name(String expert_name) { + this.expert_name = expert_name; + } + + public String getExpert_mobile() { + return expert_mobile; + } + + public void setExpert_mobile(String expert_mobile) { + this.expert_mobile = expert_mobile; + } + + public String getCommentnum() { + return commentnum; + } + + public void setCommentnum(String commentnum) { + this.commentnum = commentnum; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getModify_date() { + return modify_date; + } + + public void setModify_date(String modify_date) { + this.modify_date = modify_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public List getPhoto() { + return photo; + } + + public void setPhoto(List photo) { + this.photo = photo; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/IconBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/IconBean.java new file mode 100644 index 0000000..e96c9bd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/IconBean.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.bean; + +public class IconBean { + private int img; + private String name; + private Boolean red; + + public Boolean getRed() { + return red; + } + + public void setRed(Boolean red) { + this.red = red; + } + public IconBean(int img, String name) { + this.img = img; + this.name = name; + + + } + public IconBean(int img, String name,Boolean red) { + this.img = img; + this.name = name; + this.red=red; + + } + public int getImg() { + return img; + } + + public void setImg(int img) { + this.img = img; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/InterrogationPatientInfoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/InterrogationPatientInfoBean.java new file mode 100644 index 0000000..aca8cee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/InterrogationPatientInfoBean.java @@ -0,0 +1,231 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; + +/** + * Created by wangchengxin on 2019/7/26. + */ + +public class InterrogationPatientInfoBean implements Serializable{ + + + /** + * code : 200 + * data : {"birthday":"1993-07-18","disease_date":"1年","address":"北京市东城区","regist_patient":1,"prov_id":1,"sex":1,"boolean_medication":"有","medication_info":"没哦信息网小JJ我了我了我了","county_id":2,"whether_hbv":1,"whether_pregnant":3,"liver_status":"无明显肝纤维化","other_disease":"糖尿病","name":"shh","go_hospital":0,"disease_name":"甲型肝炎","expected_date_of_childbirth":"2019-07-18","city_id":2} + * message : 成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean implements Serializable{ + /** + * birthday : 1993-07-18 + * disease_date : 1年 + * address : 北京市东城区 + * regist_patient : 1 + * prov_id : 1 + * sex : 1 + * boolean_medication : 有 + * medication_info : 没哦信息网小JJ我了我了我了 + * county_id : 2 + * whether_hbv : 1 + * whether_pregnant : 3 + * liver_status : 无明显肝纤维化 + * other_disease : 糖尿病 + * name : shh + * go_hospital : 0 + * disease_name : 甲型肝炎 + * expected_date_of_childbirth : 2019-07-18 + * city_id : 2 + */ + + private String birthday; + private String disease_date; + private String address; + private int regist_patient; + private int prov_id; + private int sex; + private String boolean_medication; + private String medication_info; + private int county_id; + private int whether_hbv; + private int whether_pregnant; + private String liver_status; + private String other_disease; + private String name; + private int go_hospital; + private String disease_name; + private String expected_date_of_childbirth; + private int city_id; + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getDisease_date() { + return disease_date; + } + + public void setDisease_date(String disease_date) { + this.disease_date = disease_date; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public int getRegist_patient() { + return regist_patient; + } + + public void setRegist_patient(int regist_patient) { + this.regist_patient = regist_patient; + } + + public int getProv_id() { + return prov_id; + } + + public void setProv_id(int prov_id) { + this.prov_id = prov_id; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public String getBoolean_medication() { + return boolean_medication; + } + + public void setBoolean_medication(String boolean_medication) { + this.boolean_medication = boolean_medication; + } + + public String getMedication_info() { + return medication_info; + } + + public void setMedication_info(String medication_info) { + this.medication_info = medication_info; + } + + public int getCounty_id() { + return county_id; + } + + public void setCounty_id(int county_id) { + this.county_id = county_id; + } + + public int getWhether_hbv() { + return whether_hbv; + } + + public void setWhether_hbv(int whether_hbv) { + this.whether_hbv = whether_hbv; + } + + public int getWhether_pregnant() { + return whether_pregnant; + } + + public void setWhether_pregnant(int whether_pregnant) { + this.whether_pregnant = whether_pregnant; + } + + public String getLiver_status() { + return liver_status; + } + + public void setLiver_status(String liver_status) { + this.liver_status = liver_status; + } + + public String getOther_disease() { + return other_disease; + } + + public void setOther_disease(String other_disease) { + this.other_disease = other_disease; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getGo_hospital() { + return go_hospital; + } + + public void setGo_hospital(int go_hospital) { + this.go_hospital = go_hospital; + } + + public String getDisease_name() { + return disease_name; + } + + public void setDisease_name(String disease_name) { + this.disease_name = disease_name; + } + + public String getExpected_date_of_childbirth() { + return expected_date_of_childbirth; + } + + public void setExpected_date_of_childbirth(String expected_date_of_childbirth) { + this.expected_date_of_childbirth = expected_date_of_childbirth; + } + + public int getCity_id() { + return city_id; + } + + public void setCity_id(int city_id) { + this.city_id = city_id; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/KeyWordBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/KeyWordBean.java new file mode 100644 index 0000000..71978d7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/KeyWordBean.java @@ -0,0 +1,84 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class KeyWordBean extends BaseBean { + public List data; + + public class KeyWord { + private String headImg; + private String summary; + private String title; + private String createDate; + private String uuid; + private String agreenum; + private String readnum; + private String path; + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgDataBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgDataBean.java new file mode 100644 index 0000000..9cf4498 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgDataBean.java @@ -0,0 +1,25 @@ +package cn.shangyu.gdxzExpert.bean; + +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.DataBean.GandanHospitalMsssageBean; + +public class LeaseMsgDataBean extends BaseBean { + private GandanHospitalMsssageBean data; + private int isExpertFromHospital; + + public GandanHospitalMsssageBean getData() { + return data; + } + + public void setData(GandanHospitalMsssageBean data) { + this.data = data; + } + + public int getIsExpertFromHospital() { + return isExpertFromHospital; + } + + public void setIsExpertFromHospital(int isExpertFromHospital) { + this.isExpertFromHospital = isExpertFromHospital; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgListBean.java new file mode 100644 index 0000000..ace555d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LeaseMsgListBean.java @@ -0,0 +1,65 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class LeaseMsgListBean extends BaseBean { + public List data; + + public class MsgBean { + private String comment_uuid; + private String comment; + private String create_date; + private String expert_uuid; + private String examine_status; + private String user_uuid; + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + + public String getComment_uuid() { + return comment_uuid; + } + + public void setComment_uuid(String comment_uuid) { + this.comment_uuid = comment_uuid; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/LessonTageBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LessonTageBean.java new file mode 100644 index 0000000..ffca47d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LessonTageBean.java @@ -0,0 +1,30 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class LessonTageBean extends BaseBean { + + public List data; + + public class TageBean { + private String name; + private int id; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/LibraryListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LibraryListBean.java new file mode 100644 index 0000000..2eb0c7e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LibraryListBean.java @@ -0,0 +1,224 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * LibraryList.java + * + * @author liufang + * @date 2015-11-4 上午11:02:01 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:图书馆实体类 + */ +public class LibraryListBean extends BaseBean { + public List data; + public int totalGuideT; + public class LibraryData { + + public String uuid; // 唯一标识 + /** + * 分类 + */ + public String name; // 名称 + public String imgs; // 图片路径 + public String createDate; // 创建日期 + /** + * 治疗指南、期刊杂志 + */ + public String title; // 标题 + public String typeName; // 类型名称 + public String fileFormat; // 文件格式 + public String fileSize; // 文件大小 + public String releaseTime; // 发布时间 + public String updateTime; // 更新时间 + public String browseQuantity; // 浏览量 + public String summary; // 摘要 + public String isCollect; + /** + * 期刊杂志 + */ + public String cn; + public String authorName; // 作者名称 + public String secondTitle; // 副标题 + public String des; // 描述 + public String content; // 内容 + public String contentTxt; + public String filepath; + /** + * 治疗指南 + */ + public String guideSource;// 指南来源 + public String path;// 指南路径 + public String total;// 数量 + public String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getImgs() { + return imgs; + } + + public String getCn() { + return cn; + } + + public void setCn(String cn) { + this.cn = cn; + } + + public void setImgs(String imgs) { + this.imgs = imgs; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public String getFileFormat() { + return fileFormat; + } + + public void setFileFormat(String fileFormat) { + this.fileFormat = fileFormat; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getReleaseTime() { + return releaseTime; + } + + public void setReleaseTime(String releaseTime) { + this.releaseTime = releaseTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getBrowseQuantity() { + return browseQuantity; + } + + public void setBrowseQuantity(String browseQuantity) { + this.browseQuantity = browseQuantity; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getIsCollect() { + return isCollect; + } + + public void setIsCollect(String isCollect) { + this.isCollect = isCollect; + } + + public String getAuthorName() { + return authorName; + } + + public void setAuthorName(String authorName) { + this.authorName = authorName; + } + + public String getSecondTitle() { + return secondTitle; + } + + public void setSecondTitle(String secondTitle) { + this.secondTitle = secondTitle; + } + + public String getDes() { + return des; + } + + public void setDes(String des) { + this.des = des; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getGuideSource() { + return guideSource; + } + + public void setGuideSource(String guideSource) { + this.guideSource = guideSource; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListFreeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListFreeBean.java new file mode 100644 index 0000000..2e41a9a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListFreeBean.java @@ -0,0 +1,207 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/3/26. + */ + +public class ListFreeBean { + + + /** + * code : 200 + * data : {"pageNum":1,"pages":1,"isFirstPage":true,"isLastPage":true,"pageSize":10,"list":[{"img":"series/img/2019/20190321133412.png","readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"20:09","title":"视频1002","type":"1","polyv_uuid":"cfb7a69a75608a0df9cf03ac888470a5_c"}],"total":1} + * message : query succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNum : 1 + * pages : 1 + * isFirstPage : true + * isLastPage : true + * pageSize : 10 + * list : [{"img":"series/img/2019/20190321133412.png","readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"20:09","title":"视频1002","type":"1","polyv_uuid":"cfb7a69a75608a0df9cf03ac888470a5_c"}] + * total : 1 + */ + + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int pageSize; + private int total; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * img : series/img/2019/20190321133412.png + * readnum : 0 + * series_type_uuid : cb4119569ea94b1f9d1d6d1a7ebc0dc2 + * time : 20:09 + * title : 视频1002 + * type : 1 + * polyv_uuid : cfb7a69a75608a0df9cf03ac888470a5_c + * uuid": "b39c7352bf7b4e0f82becd91a3c7f423" + */ + + private String img; + private int readnum; + private String series_type_uuid; + private String time; + private String title; + private String type; + private String polyv_uuid; + private String uuid; + + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getSeries_type_uuid() { + return series_type_uuid; + } + + public void setSeries_type_uuid(String series_type_uuid) { + this.series_type_uuid = series_type_uuid; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPolyv_uuid() { + return polyv_uuid; + } + + public void setPolyv_uuid(String polyv_uuid) { + this.polyv_uuid = polyv_uuid; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListGroupSendMsgBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListGroupSendMsgBean.java new file mode 100644 index 0000000..02e13cb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListGroupSendMsgBean.java @@ -0,0 +1,187 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/12/9. + */ + +public class ListGroupSendMsgBean { + + + /** + * code : 200 + * data : {"pageSize":10,"list":[{"patient_uuid":"JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m","msg_content":"groupsendmsg/2019-12-09/058d0ec70f6343c2bae9cc8780d032d9.jpg","msg_type":2,"msg_send_date":"2019-12-09 09:51:54","uuid":"4ad42000fda44255940eefef74a317e1","realname":"安卓测试安卓测试测试,测试版曹操"},{"patient_uuid":"JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m","msg_content":"啦啦啦","msg_type":1,"msg_send_date":"2019-12-09 10:26:17","uuid":"62df2e4d0b8646279031d235fcfaa569","realname":"安卓测试安卓测试测试,测试版曹操"},{"patient_uuid":"JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m","msg_content":"groupsendmsg/2019-12-09/0d8816fbc6d14a86bdbe7bf5c6c9f574.jpg","msg_type":2,"msg_send_date":"2019-12-09 10:24:58","uuid":"9258754f5dcd46de89244b8f8b12e04d","realname":"安卓测试安卓测试测试,测试版曹操"},{"patient_uuid":"0Ip6Zwk0fMa2ozuxI0m","msg_content":"看看","msg_type":1,"msg_send_date":"2019-12-09 11:24:48","uuid":"9d04bbb4bd62462f9b3b149d1cf7aa32","realname":"测试版曹操"}],"pageNum":1,"pages":1,"isFirstPage":true,"isLastPage":true,"total":4} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageSize : 10 + * list : [{"patient_uuid":"JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m","msg_content":"groupsendmsg/2019-12-09/058d0ec70f6343c2bae9cc8780d032d9.jpg","msg_type":2,"msg_send_date":"2019-12-09 09:51:54","uuid":"4ad42000fda44255940eefef74a317e1","realname":"安卓测试安卓测试测试,测试版曹操"},{"patient_uuid":"JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m","msg_content":"啦啦啦","msg_type":1,"msg_send_date":"2019-12-09 10:26:17","uuid":"62df2e4d0b8646279031d235fcfaa569","realname":"安卓测试安卓测试测试,测试版曹操"},{"patient_uuid":"JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m","msg_content":"groupsendmsg/2019-12-09/0d8816fbc6d14a86bdbe7bf5c6c9f574.jpg","msg_type":2,"msg_send_date":"2019-12-09 10:24:58","uuid":"9258754f5dcd46de89244b8f8b12e04d","realname":"安卓测试安卓测试测试,测试版曹操"},{"patient_uuid":"0Ip6Zwk0fMa2ozuxI0m","msg_content":"看看","msg_type":1,"msg_send_date":"2019-12-09 11:24:48","uuid":"9d04bbb4bd62462f9b3b149d1cf7aa32","realname":"测试版曹操"}] + * pageNum : 1 + * pages : 1 + * isFirstPage : true + * isLastPage : true + * total : 4 + */ + + private int pageSize; + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int total; + private List list; + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * patient_uuid : JfI0oJFdgkN8XA315fP,0Ip6Zwk0fMa2ozuxI0m + * msg_content : groupsendmsg/2019-12-09/058d0ec70f6343c2bae9cc8780d032d9.jpg + * msg_type : 2 + * msg_send_date : 2019-12-09 09:51:54 + * uuid : 4ad42000fda44255940eefef74a317e1 + * realname : 安卓测试安卓测试测试,测试版曹操 + */ + + private String patient_uuid; + private String msg_content; + private int msg_type; + private String msg_send_date; + private String uuid; + private String realname; + + public String getPatient_uuid() { + return patient_uuid; + } + + public void setPatient_uuid(String patient_uuid) { + this.patient_uuid = patient_uuid; + } + + public String getMsg_content() { + return msg_content; + } + + public void setMsg_content(String msg_content) { + this.msg_content = msg_content; + } + + public int getMsg_type() { + return msg_type; + } + + public void setMsg_type(int msg_type) { + this.msg_type = msg_type; + } + + public String getMsg_send_date() { + return msg_send_date; + } + + public void setMsg_send_date(String msg_send_date) { + this.msg_send_date = msg_send_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListNewInterrogationBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListNewInterrogationBean.java new file mode 100644 index 0000000..66d2380 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListNewInterrogationBean.java @@ -0,0 +1,225 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/7/29. + */ + +public class ListNewInterrogationBean { + + /** + * code : 200 + * data : {"pageNum":1,"pages":2,"isFirstPage":true,"isLastPage":false,"pageSize":10,"list":[{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"122354557788858855666985","step1_uuid":"0e9fad25651c4dafb9a581c3a38830eb","disease_name":"丙型肝炎","create_date":"2019-07-27 15:45:46"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"jnmtawptmajmdajmvlxlm. jnx","sex":1,"name":"联系人001","disease_describe":"a little better with some kind and fun and challenging enough that way but","step1_uuid":"0e9fad25651c4dafb9a581c3a38830eb","disease_name":"丙型肝炎","create_date":"2019-07-27 15:45:46"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"123586605685585555555666366634343555","sex":1,"name":"联系人001","disease_describe":"测试一下的一款产品是最美丽动人最大最流行单品都在这里","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"a good night of football to the game will work with me tonight so you don't want anything from your life or your plans","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"00000000000000","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"222222222222222222222222222222","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"我们可以看到一句的意思呢、这些是你想什么地方","sex":1,"name":"联系人001","disease_describe":"测试一下了一个星期才会去上班啦、这么早来干嘛呀\u2026\u2026我们可以看到自己所说","step1_uuid":"0f8ea2c2a5fa423fb4c2f502459852ec","disease_name":"乙型肝炎","create_date":"2019-07-27 15:12:10"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"666666666333663333","step1_uuid":"0f8ea2c2a5fa423fb4c2f502459852ec","disease_name":"乙型肝炎","create_date":"2019-07-27 15:12:10"},{"birthday":"1995-07-19 00:00:00","answer_num":1,"your_question":"","sex":0,"name":"啦啦啦","disease_describe":"Jack啦啦","step1_uuid":"4266d558e0ad4389ae7bdbc921091ca6","disease_name":"甲型肝炎","create_date":"2019-07-27 14:20:42"},{"birthday":"1995-07-19 00:00:00","answer_num":1,"your_question":"","sex":0,"name":"啦啦啦","disease_describe":"啦啦阿狸考虑可怜all吧啦","step1_uuid":"4266d558e0ad4389ae7bdbc921091ca6","disease_name":"甲型肝炎","create_date":"2019-07-27 14:20:42"}],"total":19} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNum : 1 + * pages : 2 + * isFirstPage : true + * isLastPage : false + * pageSize : 10 + * list : [{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"122354557788858855666985","step1_uuid":"0e9fad25651c4dafb9a581c3a38830eb","disease_name":"丙型肝炎","create_date":"2019-07-27 15:45:46"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"jnmtawptmajmdajmvlxlm. jnx","sex":1,"name":"联系人001","disease_describe":"a little better with some kind and fun and challenging enough that way but","step1_uuid":"0e9fad25651c4dafb9a581c3a38830eb","disease_name":"丙型肝炎","create_date":"2019-07-27 15:45:46"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"123586605685585555555666366634343555","sex":1,"name":"联系人001","disease_describe":"测试一下的一款产品是最美丽动人最大最流行单品都在这里","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"a good night of football to the game will work with me tonight so you don't want anything from your life or your plans","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"00000000000000","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"222222222222222222222222222222","step1_uuid":"aff750df8fb44e888c9c237c6fdf00b9","disease_name":"乙型肝炎","create_date":"2019-07-27 15:16:01"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"我们可以看到一句的意思呢、这些是你想什么地方","sex":1,"name":"联系人001","disease_describe":"测试一下了一个星期才会去上班啦、这么早来干嘛呀\u2026\u2026我们可以看到自己所说","step1_uuid":"0f8ea2c2a5fa423fb4c2f502459852ec","disease_name":"乙型肝炎","create_date":"2019-07-27 15:12:10"},{"birthday":"1999-07-27 00:00:00","answer_num":0,"your_question":"","sex":1,"name":"联系人001","disease_describe":"666666666333663333","step1_uuid":"0f8ea2c2a5fa423fb4c2f502459852ec","disease_name":"乙型肝炎","create_date":"2019-07-27 15:12:10"},{"birthday":"1995-07-19 00:00:00","answer_num":1,"your_question":"","sex":0,"name":"啦啦啦","disease_describe":"Jack啦啦","step1_uuid":"4266d558e0ad4389ae7bdbc921091ca6","disease_name":"甲型肝炎","create_date":"2019-07-27 14:20:42"},{"birthday":"1995-07-19 00:00:00","answer_num":1,"your_question":"","sex":0,"name":"啦啦啦","disease_describe":"啦啦阿狸考虑可怜all吧啦","step1_uuid":"4266d558e0ad4389ae7bdbc921091ca6","disease_name":"甲型肝炎","create_date":"2019-07-27 14:20:42"}] + * total : 19 + */ + + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int pageSize; + private int total; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * birthday : 1999-07-27 00:00:00 + * answer_num : 0 + * your_question : + * sex : 1 + * name : 联系人001 + * disease_describe : 122354557788858855666985 + * step1_uuid : 0e9fad25651c4dafb9a581c3a38830eb + * disease_name : 丙型肝炎 + * create_date : 2019-07-27 15:45:46 + */ + + private String birthday; + private int answer_num; + private String your_question; + private int sex; + private String name; + private String disease_describe; + private String step1_uuid; + private String disease_name; + private String create_date; + private String user_status; + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public int getAnswer_num() { + return answer_num; + } + + public void setAnswer_num(int answer_num) { + this.answer_num = answer_num; + } + + public String getYour_question() { + return your_question; + } + + public void setYour_question(String your_question) { + this.your_question = your_question; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDisease_describe() { + return disease_describe; + } + + public void setDisease_describe(String disease_describe) { + this.disease_describe = disease_describe; + } + + public String getStep1_uuid() { + return step1_uuid; + } + + public void setStep1_uuid(String step1_uuid) { + this.step1_uuid = step1_uuid; + } + + public String getDisease_name() { + return disease_name; + } + + public void setDisease_name(String disease_name) { + this.disease_name = disease_name; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListOutPatientBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListOutPatientBean.java new file mode 100644 index 0000000..c3969e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListOutPatientBean.java @@ -0,0 +1,234 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by wangchengxin on 2019/1/11. + */ + +public class ListOutPatientBean implements Serializable{ + + + /** + * note : {"note":"图佛陀饿的微信","uuid":"2e094ae62ff04fc4ad4a68e6ef1a36b7"} + * code : 200 + * data : {"pageSize":10,"pageNumber":1,"totalPage":1,"list":[{"office_name":"进空间","week":1,"workplace_uuid":"06fa4089f09f4439b41dd954f2941651","location":"他大额就发了","type":4,"uuid":"e639f99eddf643ab95d6c54a9ee80208","day":"a","hospital_address":"黑龙江省牡丹江市爱民区新华路52附近","hospital_name":"爱民区北山社区卫生中心"}],"totalRow":1} + * message : checkSign succeed + */ + + private NoteBean note; + private String code; + private DataBean data; + private String message; + + public NoteBean getNote() { + return note; + } + + public void setNote(NoteBean note) { + this.note = note; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class NoteBean implements Serializable{ + /** + * note : 图佛陀饿的微信 + * uuid : 2e094ae62ff04fc4ad4a68e6ef1a36b7 + */ + + private String note; + private String uuid; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } + + public static class DataBean implements Serializable{ + /** + * pageSize : 10 + * pageNumber : 1 + * totalPage : 1 + * list : [{"office_name":"进空间","week":1,"workplace_uuid":"06fa4089f09f4439b41dd954f2941651","location":"他大额就发了","type":4,"uuid":"e639f99eddf643ab95d6c54a9ee80208","day":"a","hospital_address":"黑龙江省牡丹江市爱民区新华路52附近","hospital_name":"爱民区北山社区卫生中心"}] + * totalRow : 1 + */ + + private int pageSize; + private int pageNumber; + private int totalPage; + private int totalRow; + private List list; + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean implements Serializable{ + /** + * office_name : 进空间 + * week : 1 + * workplace_uuid : 06fa4089f09f4439b41dd954f2941651 + * location : 他大额就发了 + * type : 4 + * uuid : e639f99eddf643ab95d6c54a9ee80208 + * day : a + * hospital_address : 黑龙江省牡丹江市爱民区新华路52附近 + * hospital_name : 爱民区北山社区卫生中心 + */ + + private String office_name; + private int week; + private String workplace_uuid; + private String location; + private int type; + private String uuid; + private String day; + private String hospital_address; + private String hospital_name; + + public String getOffice_name() { + return office_name; + } + + public void setOffice_name(String office_name) { + this.office_name = office_name; + } + + public int getWeek() { + return week; + } + + public void setWeek(int week) { + this.week = week; + } + + public String getWorkplace_uuid() { + return workplace_uuid; + } + + public void setWorkplace_uuid(String workplace_uuid) { + this.workplace_uuid = workplace_uuid; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getDay() { + return day; + } + + public void setDay(String day) { + this.day = day; + } + + public String getHospital_address() { + return hospital_address; + } + + public void setHospital_address(String hospital_address) { + this.hospital_address = hospital_address; + } + + public String getHospital_name() { + return hospital_name; + } + + public void setHospital_name(String hospital_name) { + this.hospital_name = hospital_name; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesTypeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesTypeBean.java new file mode 100644 index 0000000..b05a282 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesTypeBean.java @@ -0,0 +1,244 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/3/26. + */ + +public class ListSeriesTypeBean { + + /** + * code : 200 + * data : {"isFirstPage":true,"pageNum":1,"pages":1,"pageSize":10,"isLastPage":true,"list":[{"note":"

QWER出品,必出精品<\/p>","img":"series/img/2019/20190321133412.png","author":"QWER","price":850,"discount":1,"sort":0,"title":"系列视频1","type":"0","create_date":1553146453,"uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","status":1}],"total":1} + * message : query succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * isFirstPage : true + * pageNum : 1 + * pages : 1 + * pageSize : 10 + * isLastPage : true + * list : [{"note":"

QWER出品,必出精品<\/p>","img":"series/img/2019/20190321133412.png","author":"QWER","price":850,"discount":1,"sort":0,"title":"系列视频1","type":"0","create_date":1553146453,"uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","status":1}] + * total : 1 + */ + + private boolean isFirstPage; + private int pageNum; + private int pages; + private int pageSize; + private boolean isLastPage; + private int total; + private List list; + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * note :

QWER出品,必出精品

+ * img : series/img/2019/20190321133412.png + * author : QWER + * price : 850 + * discount : 1.0 + * sort : 0 + * title : 系列视频1 + * type : 0 + * create_date : 1553146453 + * uuid : cb4119569ea94b1f9d1d6d1a7ebc0dc2 + * status : 1 + * "slogan": "肝胆精英汇出品,必属精品" + */ + + private String note; + private String img; + private String author; + private int price; + private double discount; + private int sort; + private String title; + private String type; + private int create_date; + private String uuid; + private String slogan; + private int status; + public String getSlogan() { + return slogan; + } + + public void setSlogan(String slogan) { + this.slogan = slogan; + } + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public double getDiscount() { + return discount; + } + + public void setDiscount(double discount) { + this.discount = discount; + } + + public int getSort() { + return sort; + } + + public void setSort(int sort) { + this.sort = sort; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getCreate_date() { + return create_date; + } + + public void setCreate_date(int create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesVideoByTypeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesVideoByTypeBean.java new file mode 100644 index 0000000..1c2ec30 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListSeriesVideoByTypeBean.java @@ -0,0 +1,350 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by wangchengxin on 2019/4/2. + */ + +public class ListSeriesVideoByTypeBean implements Serializable{ + + + /** + * code : 200 + * data : {"pageNum":1,"pages":1,"isFirstPage":true,"isLastPage":true,"pageSize":10,"list":[{"readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"32:56","title":"视频1003","type":"2","polyv_uuid":"cfb7a69a7501cf5d4528ed40150ccd97_c"},{"readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"20:09","title":"视频1002","type":"1","polyv_uuid":"cfb7a69a75608a0df9cf03ac888470a5_c"},{"readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"10:20","title":"视频1001","type":"0","polyv_uuid":"cfb7a69a750da3a9cbc2c30b7eaa480d_c"}],"total":3} + * SeriesType : {"note_url":"html/seriestype/09049d47d5da4e978c05354bb18a0e3b.html","img":"series/img/2019/20190402104229.jpg","author":"系列视频","price":0,"discount_end_date":1556246520,"discount":0,"paid_num":0,"discount_begin_date":1554259320,"is_paid":0,"title":"系列视频5系列视频5系列视频5","type":"0","uuid":"09049d47d5da4e978c05354bb18a0e3b"} + * message : query succeed + */ + + private String code; + private DataBean data; + private SeriesTypeBean SeriesType; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public SeriesTypeBean getSeriesType() { + return SeriesType; + } + + public void setSeriesType(SeriesTypeBean SeriesType) { + this.SeriesType = SeriesType; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean implements Serializable{ + /** + * pageNum : 1 + * pages : 1 + * isFirstPage : true + * isLastPage : true + * pageSize : 10 + * list : [{"readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"32:56","title":"视频1003","type":"2","polyv_uuid":"cfb7a69a7501cf5d4528ed40150ccd97_c"},{"readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"20:09","title":"视频1002","type":"1","polyv_uuid":"cfb7a69a75608a0df9cf03ac888470a5_c"},{"readnum":0,"series_type_uuid":"cb4119569ea94b1f9d1d6d1a7ebc0dc2","time":"10:20","title":"视频1001","type":"0","polyv_uuid":"cfb7a69a750da3a9cbc2c30b7eaa480d_c"}] + * total : 3 + */ + + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int pageSize; + private int total; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean implements Serializable{ + /** + * readnum : 0 + * series_type_uuid : cb4119569ea94b1f9d1d6d1a7ebc0dc2 + * time : 32:56 + * title : 视频1003 + * type : 2 + * "uuid": "95b034a50209416eb2e8ca6cf902aee0" + * polyv_uuid : cfb7a69a7501cf5d4528ed40150ccd97_c + */ + + private int readnum; + private String series_type_uuid; + private String time; + private String title; + private String type; + private String polyv_uuid; + private String create_date; + private String uuid; + + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.readnum = readnum; + } + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getSeries_type_uuid() { + return series_type_uuid; + } + + public void setSeries_type_uuid(String series_type_uuid) { + this.series_type_uuid = series_type_uuid; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPolyv_uuid() { + return polyv_uuid; + } + + public void setPolyv_uuid(String polyv_uuid) { + this.polyv_uuid = polyv_uuid; + } + } + } + + public static class SeriesTypeBean implements Serializable{ + /** + * note_url : html/seriestype/09049d47d5da4e978c05354bb18a0e3b.html + * img : series/img/2019/20190402104229.jpg + * author : 系列视频 + * price : 0 + * discount_end_date : 1556246520 + * discount : 0.0 + * paid_num : 0 + * discount_begin_date : 1554259320 + * is_paid : 0 + * title : 系列视频5系列视频5系列视频5 + * type : 0 + * uuid : 09049d47d5da4e978c05354bb18a0e3b + * is_white:0 + */ + + private String note_url; + private String img; + private String author; + private int price; + private long discount_end_date; + private double discount; + private int paid_num; + private long discount_begin_date; + private int is_paid; + private String title; + private String type; + private String uuid; + private int is_white; + public int getIs_white() { + return is_white; + } + + public void setIs_white(int is_white) { + this.is_white = is_white; + } + public String getNote_url() { + return note_url; + } + + public void setNote_url(String note_url) { + this.note_url = note_url; + } + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public long getDiscount_end_date() { + return discount_end_date; + } + + public void setDiscount_end_date(int discount_end_date) { + this.discount_end_date = discount_end_date; + } + + public double getDiscount() { + return discount; + } + + public void setDiscount(double discount) { + this.discount = discount; + } + + public int getPaid_num() { + return paid_num; + } + + public void setPaid_num(int paid_num) { + this.paid_num = paid_num; + } + + public long getDiscount_begin_date() { + return discount_begin_date; + } + + public void setDiscount_begin_date(int discount_begin_date) { + this.discount_begin_date = discount_begin_date; + } + + public int getIs_paid() { + return is_paid; + } + + public void setIs_paid(int is_paid) { + this.is_paid = is_paid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListWorkPlaceBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListWorkPlaceBean.java new file mode 100644 index 0000000..6d968a5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ListWorkPlaceBean.java @@ -0,0 +1,121 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/1/7. + */ + +public class ListWorkPlaceBean { + + + /** + * code : 200 + * list : [{"hospital_uuid":"85bf0a91eca9400cae61d08c2aefc34d","office_name":"啦啦啦","expert_uuid":"HyuxWlUBRSolPUCKvHL","location":"看见了吧","type":3,"uuid":"3af1cad395f54648b6d4376b36d3caf4","hospital_name":"爱民区北安社区卫生中心"}] + * message : checkSign succeed + */ + + private String code; + private String message; + private List list; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * hospital_uuid : 85bf0a91eca9400cae61d08c2aefc34d + * office_name : 啦啦啦 + * expert_uuid : HyuxWlUBRSolPUCKvHL + * location : 看见了吧 + * type : 3 + * uuid : 3af1cad395f54648b6d4376b36d3caf4 + * hospital_name : 爱民区北安社区卫生中心 + */ + + private String hospital_uuid; + private String office_name; + private String expert_uuid; + private String location; + private int type; + private String uuid; + private String hospital_name; + + public String getHospital_uuid() { + return hospital_uuid; + } + + public void setHospital_uuid(String hospital_uuid) { + this.hospital_uuid = hospital_uuid; + } + + public String getOffice_name() { + return office_name; + } + + public void setOffice_name(String office_name) { + this.office_name = office_name; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getHospital_name() { + return hospital_name; + } + + public void setHospital_name(String hospital_name) { + this.hospital_name = hospital_name; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/LogisticsBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LogisticsBean.java new file mode 100644 index 0000000..85fb923 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LogisticsBean.java @@ -0,0 +1,76 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class LogisticsBean { + private String code; + private String message; + private LogistBean data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public LogistBean getData() { + return data; + } + + public void setData(LogistBean data) { + this.data = data; + } + + public class LogistBean + { + private List data; + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + } + public class LoBean + { + private String ftime; + private String context; + private String statusCode; + + public String getStatusCode() { + return statusCode; + } + + public void setStatusCode(String statusCode) { + this.statusCode = statusCode; + } + + public String getFtime() { + return ftime; + } + + public void setFtime(String ftime) { + this.ftime = ftime; + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/LoveListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LoveListBean.java new file mode 100644 index 0000000..bf7f5ff --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/LoveListBean.java @@ -0,0 +1,28 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * LoveListBean.java + * @author Administrator + * @date 2015-11-7 下午4:52:40 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明: + */ +public class LoveListBean extends BaseBean { + public List data; + + public class LoveData { + public String uuid; + public String name; + public int amounts; + public String createDate; + public int sex; + public String content; + public String details; + public String phone; + public String useRequirements; + public String photo; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MailanListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MailanListBean.java new file mode 100644 index 0000000..d5d4f5e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MailanListBean.java @@ -0,0 +1,184 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class MailanListBean { + + /** + * code : 200 + * data : {"pageNum":0,"pages":1,"isFirstPage":false,"isLastPage":false,"pageSize":10,"list":[{"expect_date":"2019-05-01","topic":"关注肾功能","type":"线下录制视频","create_date":"2019-04-24","status":0},{"expect_date":"2019-05-01","topic":"母婴阻断","type":"线下患教会","create_date":"2019-04-24","status":0},{"expect_date":"2019-05-04","topic":"关注肾功能","type":"线下患教会","create_date":"2019-04-24","status":0}],"total":3} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNum : 0 + * pages : 1 + * isFirstPage : false + * isLastPage : false + * pageSize : 10 + * list : [{"expect_date":"2019-05-01","topic":"关注肾功能","type":"线下录制视频","create_date":"2019-04-24","status":0},{"expect_date":"2019-05-01","topic":"母婴阻断","type":"线下患教会","create_date":"2019-04-24","status":0},{"expect_date":"2019-05-04","topic":"关注肾功能","type":"线下患教会","create_date":"2019-04-24","status":0}] + * total : 3 + */ + + private int pageNum; + private int pages; + private boolean isFirstPage; + private boolean isLastPage; + private int pageSize; + private int total; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * expect_date : 2019-05-01 + * topic : 关注肾功能 + * type : 线下录制视频 + * create_date : 2019-04-24 + * status : 0 + * uuid: + */ + + private String expect_date; + private String topic; + private String type; + private String create_date; + private String uuid; + private int status; + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + public String getExpect_date() { + return expect_date; + } + + public void setExpect_date(String expect_date) { + this.expect_date = expect_date; + } + + public String getTopic() { + return topic; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBean.java new file mode 100644 index 0000000..adb07c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBean.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * MedicineBean.java + * @author Administrator + * @date 2015-10-29 上午10:01:26 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:用药宝典数据bean + */ +public class MedicineBean { + public String code; + public String message; + public List data; + public class MedicineList{//列表 + public String uuid; + public String content;//描述内容 + public String name;//名称 + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBook.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBook.java new file mode 100644 index 0000000..1750513 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MedicineBook.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * 用药宝典实体类 + * + * @author 高财顺 + * + */ +public class MedicineBook { + + private String uuid;// 用药宝典uuid + private String content;// 描述内容 + private String name;// 名称 + private String htmlPath; + private String imgPath; + + public String getUuid() { + return uuid; + } + + public String getHtmlPath() { + return htmlPath; + } + + public void setHtmlPath(String htmlPath) { + this.htmlPath = htmlPath; + } + + public String getImgPath() { + return imgPath; + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MeetingBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MeetingBean.java new file mode 100644 index 0000000..1ee6bee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MeetingBean.java @@ -0,0 +1,181 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MeetingBean extends BaseBean { + // "data": { + // "list": [ + // { + // "title": "123", + // "uuid": "0eb2b1b7752247f88602325297ecffb3", + // "end_date": "2016-08-17 00:00:00", + // "begin_date": "2016-08-01 00:00:00", + // "sort": null, + // "status": null, + // "location": "123", + // "type": null, + // "path": "html/meeting/0eb2b1b7752247f88602325297ecffb3.html", + // "content": null + // } + // ], + // "totalPage": 1, + // "pageNumber": 1, + // "pageSize": 10, + // "totalRow": 1 + public MeatingData data; + + public class MeatingData { + public int totalPage; + public int pageNumber; + public int pageSize; + public int totalRow; + public int pages; + public List list; + } + + public class MeatingList { + /** + * =0位每一组的第一个 >0排序 + */ + private int count; + private String title; + private String uuid; + private String end_date; + private String begin_date; + private String sort; + // status (0 无直播 1 待直播 2 直播中 3 已结束) + private String status; + private String location; + private String type; + private String path; + private String content; + // liveimg (直播图片) + private String liveimg; + // liveurl (直播地址) + private String liveurl; + // spareurl (备用地址) + private String spareurl; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getLiveimg() { + return liveimg; + } + + public void setLiveimg(String liveimg) { + this.liveimg = liveimg; + } + + public String getLiveurl() { + return liveurl; + } + + public void setLiveurl(String liveurl) { + this.liveurl = liveurl; + } + + public String getSpareurl() { + return spareurl; + } + + public void setSpareurl(String spareurl) { + this.spareurl = spareurl; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getEnd_date() { + return end_date; + } + + public void setEnd_date(String end_date) { + this.end_date = end_date; + } + + public String getBegin_date() { + return begin_date; + } + + public void setBegin_date(String begin_date) { + this.begin_date = begin_date; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageBean.java new file mode 100644 index 0000000..3e653ba --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageBean.java @@ -0,0 +1,252 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MessageBean { + private String code; + private String msg; + private String message; + private BeanData data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public BeanData getData() { + return data; + } + + public void setData(BeanData data) { + this.data = data; + } + + public class BeanData + { + private int pageNum; + private int pages; + private int pageSize; + private int totall; + private Boolean isFirstPage; + private Boolean isLastPage; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotall() { + return totall; + } + + public void setTotall(int totall) { + this.totall = totall; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public class DetailBean + { + private String is_read; + private String title; + private String create_date; + private String id; + private String content; + private ExtraBean extra; + + public String getIs_read() { + return is_read; + } + + public void setIs_read(String is_read) { + this.is_read = is_read; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public ExtraBean getExtra() { + return extra; + } + + public void setExtra(ExtraBean extra) { + this.extra = extra; + } + + public class ExtraBean + { + private String module; + private String type; + private String id; + private String uuid; + private String name; + private String url; + private String step1_uuid; + private String user_name; + private String user_photo; + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getUser_photo() { + return user_photo; + } + + public void setUser_photo(String user_photo) { + this.user_photo = user_photo; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getStep1_uuid() { + return step1_uuid; + } + + public void setStep1_uuid(String step1_uuid) { + this.step1_uuid = step1_uuid; + } + + public String getModule() { + return module; + } + + public void setModule(String module) { + this.module = module; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListBean.java new file mode 100644 index 0000000..a9fa869 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListBean.java @@ -0,0 +1,25 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:系统消息bean + */ +public class MessageListBean extends BaseBean { + public List data; + + public class MessageList { + + public String uuid;// + public String title;//标题 + public String content;//内容 + public String isRead;////是否已读 0未读 1已读 + public String type;// 1.电话咨询提醒 2.门诊预约提醒 3.包月定制提醒消息 + public String receiveUuid;//接收人uuid + public String receiveType;//1.专家 2.患者 + public String sendDate;///创建日期 + public String orderNum;//订单号 + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListDetailBean.java new file mode 100644 index 0000000..6543cfc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageListDetailBean.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.bean; + + +/** + * + * 功能说明:系统消息bean + */ +public class MessageListDetailBean extends BaseBean { + public MessageDetail data; + + public class MessageDetail { + + public String uuid;// + public String title;//标题 + public String content;//内容 + public String isRead;////是否已读 0未读 1已读 + public String type;// 1.电话咨询提醒 2.门诊预约提醒 3.包月定制提醒消息 + public String receiveUuid;//接收人uuid + public String receiveType;//1.专家 2.患者 + public String sendDate;///创建日期 + public String orderNum;//订单号 + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageNumBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageNumBean.java new file mode 100644 index 0000000..df63656 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MessageNumBean.java @@ -0,0 +1,80 @@ +package cn.shangyu.gdxzExpert.bean; + +public class MessageNumBean { + private String code; + private String msg; + private String message; + private NumBean data; + + public NumBean getData() { + return data; + } + + public void setData(NumBean data) { + this.data = data; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + public class NumBean + { + + private String Module_Order; + private String Module_Comment; + private String Module_Welfare; + private String Module_Relation; + + public String getModule_Order() { + return Module_Order; + } + + public void setModule_Order(String module_Order) { + Module_Order = module_Order; + } + + public String getModule_Comment() { + return Module_Comment; + } + + public void setModule_Comment(String module_Comment) { + Module_Comment = module_Comment; + } + + public String getModule_Welfare() { + return Module_Welfare; + } + + public void setModule_Welfare(String module_Welfare) { + Module_Welfare = module_Welfare; + } + + public String getModule_Relation() { + return Module_Relation; + } + + public void setModule_Relation(String module_Relation) { + Module_Relation = module_Relation; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MindDateilBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MindDateilBean.java new file mode 100644 index 0000000..78d38a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MindDateilBean.java @@ -0,0 +1,113 @@ +package cn.shangyu.gdxzExpert.bean; + +public class MindDateilBean extends BaseBean { + public MindDateil xinyi; + + public class MindDateil { + private double xinyi; + private String order_id; + private String order_status; + private String uuid; + private String create_date; + private String user_uuid; + private String message; + // 系统时间 + private String system_time; + // 失效时间 + private String expire_time; + // 支付方式 + private String pay_channel; + // 支付时间 + private String pay_time; + + public String getSystem_time() { + return system_time; + } + + public void setSystem_time(String system_time) { + this.system_time = system_time; + } + + public String getExpire_time() { + return expire_time; + } + + public void setExpire_time(String expire_time) { + this.expire_time = expire_time; + } + + public String getPay_channel() { + return pay_channel; + } + + public void setPay_channel(String pay_channel) { + this.pay_channel = pay_channel; + } + + public String getPay_time() { + return pay_time; + } + + public void setPay_time(String pay_time) { + this.pay_time = pay_time; + } + + public double getXinyi() { + return xinyi; + } + + public void setXinyi(double xinyi) { + this.xinyi = xinyi; + } + + public String getOrder_id() { + return order_id; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + + public String getOrder_status() { + return order_status; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MonthDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MonthDetailBean.java new file mode 100644 index 0000000..991b40e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MonthDetailBean.java @@ -0,0 +1,56 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:服务查看设置 + */ +public class MonthDetailBean extends BaseBean { + public List time; + public List fee; + public Data data; + + public class DataTime { + //包月 + public String uuid;// 唯一标示 + public String price;// 价格 + public int howLong;// 时长 + public String monthServiceUuid;// 包月服务id + + //门诊的修改 + public String clinicWeek;// 星期 + public String morAft;// 上下午 + public String clinicServiceUuid;// 门诊uuid + + //电话的修改 + public String callWeek;// 星期 + public String startDate;// 开始时间 + public String endDate;// 结束时间 + public String callServiceUuid;// 门诊uuid + } + public class DataFee { + //电话 + public String uuid;// 唯一标示 + public String price;// 价格 + public int howLong;// 时长 + public String callServiceUuid;// 电话uuid + + } + + public class Data { + public String uuid; + public int isEnable;//是否开启 0.否 1.是 + public int state; + public String expertUuid;//专家uuid + public String createDate; + public String modifyDate; + public String intro;//服务简介 + + //门诊的查看 + public String price;//价格/次 + public String places;//次/半天 + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDoctorBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDoctorBean.java new file mode 100644 index 0000000..5363c38 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDoctorBean.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.DataBean.ExpertBean; + +public class MoreDoctorBean extends BaseBean { + public ListDoctorBean data; + public class ListDoctorBean { + private List list; + private int totalPage; + private int pageNumber; + private int totalRow; + private int pageSize; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDongtaiBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDongtaiBean.java new file mode 100644 index 0000000..c728d1e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreDongtaiBean.java @@ -0,0 +1,160 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * @author 作者 wcx + * @version 创建时间:2018-5-30 下午4:52:33 + * 类说明 + */ +public class MoreDongtaiBean { + + /** + * code : 1 + * data : {"pageNumber":1,"pageSize":10,"list":[{"path":"html/dongtai/62afe1f58093473e91cbb74ca877f82a.html","author":"HMM","TITLE":"第四条动态","HEAD_IMG":"book/pdf/2018/20180530103848.jpg"}],"totalPage":1,"totalRow":1} + * message : 查询成功 + */ + + private int code; + private DataBean data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNumber : 1 + * pageSize : 10 + * list : [{"path":"html/dongtai/62afe1f58093473e91cbb74ca877f82a.html","author":"HMM","TITLE":"第四条动态","HEAD_IMG":"book/pdf/2018/20180530103848.jpg"}] + * totalPage : 1 + * totalRow : 1 + */ + + private int pageNumber; + private int pageSize; + private int totalPage; + private int totalRow; + private List list; + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * path : html/dongtai/62afe1f58093473e91cbb74ca877f82a.html + * author : HMM + * TITLE : 第四条动态 + * HEAD_IMG : book/pdf/2018/20180530103848.jpg + * editType:1//不加头2加头拼接 + */ + + private String path; + private String author; + private String TITLE; + private String HEAD_IMG; + private int editType; + + + public int getEditType() { + return editType; + } + + public void setEditType(int editType) { + this.editType = editType; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getTITLE() { + return TITLE; + } + + public void setTITLE(String TITLE) { + this.TITLE = TITLE; + } + + public String getHEAD_IMG() { + return HEAD_IMG; + } + + public void setHEAD_IMG(String HEAD_IMG) { + this.HEAD_IMG = HEAD_IMG; + } + } + } + +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreLeaveMsgBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreLeaveMsgBean.java new file mode 100644 index 0000000..6b964e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreLeaveMsgBean.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.DataBean.ExpertBean; +import cn.shangyu.gdxzExpert.bean.HospitalDetialBean.DataBean.GandanHospitalMsssageBean; + +public class MoreLeaveMsgBean extends BaseBean { + public ListDoctorBean data; + public class ListDoctorBean { + private List list; + private int totalPage; + private int pageNumber; + private int totalRow; + private int pageSize; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreNoticeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreNoticeBean.java new file mode 100644 index 0000000..4b1ff2b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreNoticeBean.java @@ -0,0 +1,95 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MoreNoticeBean { + /** + * code : 1 + * data : {"pageNumber":1,"pageSize":10,"list":["第三条公告","第二条公告","第一条公告"],"totalPage":1,"totalRow":3} + * message : 查询成功 + */ + + private int code; + private DataBean data; + private String message; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNumber : 1 + * pageSize : 10 + * list : ["第三条公告","第二条公告","第一条公告"] + * totalPage : 1 + * totalRow : 3 + */ + + private int pageNumber; + private int pageSize; + private int totalPage; + private int totalRow; + private List list; + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreVideoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreVideoBean.java new file mode 100644 index 0000000..1182983 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MoreVideoBean.java @@ -0,0 +1,54 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; +public class MoreVideoBean extends BaseBean { + public ListVideoBean data; + public class ListVideoBean { + private List list; + private int totalPage; + private int pageNumber; + private int totalRow; + private int pageSize; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyBankCardBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyBankCardBean.java new file mode 100644 index 0000000..ea597f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyBankCardBean.java @@ -0,0 +1,18 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MyBankCardBean extends BaseBean { + + + public List data; + public class MyBankListData { + public String uuid; + public String ownerUuid; //持有人UUId + public String bankName;//银行名称 + public String cardNum;//银行卡号 + public String holderName;//持有人姓名 + public String bankImg;//银行背景图片 + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCasediscussionBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCasediscussionBean.java new file mode 100644 index 0000000..95bfb92 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCasediscussionBean.java @@ -0,0 +1,227 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * 病例讨论列表Bean + */ +/* + * public class MyCasediscussionBean extends BaseBean { public + * List data; + * + * public int totalPage; public String pageNumber; public String pageSize; + * public String totalRow; + * + * public static class MYCasediscussion implements Serializable { public + * List photo; public String uuid; public String expert_uuid; public + * String des; public String expert_photo; public String expert_name; public + * String expert_hospital_name; public String tag1; public String tag2; public + * String tag3; public String create_date; } } + */ +public class MyCasediscussionBean { + private String code; + private DataBean data; + private int totalPage; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + private int pageNumber; + private int pageSize; + private int totalRow; + private int totalPage; + private List list; + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class MYCasediscussion implements Serializable { + private String create_date; + private String expert_uuid; + private String expert_photo; + private String expert_name; + private String expert_hospital_name; + private String tag1; + private String tag2; + private String tag3; + private String des; + private String uuid; + private List photo; + private String commentNum; + private String examine_status; + + public String getExamine_status() { + return examine_status; + } + + public void setExamine_status(String examine_status) { + this.examine_status = examine_status; + } + + public String getCommentNum() { + return commentNum; + } + + public void setCommentNum(String commentNum) { + this.commentNum = commentNum; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getExpert_photo() { + return expert_photo; + } + + public void setExpert_photo(String expert_photo) { + this.expert_photo = expert_photo; + } + + public String getExpert_name() { + return expert_name; + } + + public void setExpert_name(String expert_name) { + this.expert_name = expert_name; + } + + public String getExpert_hospital_name() { + return expert_hospital_name; + } + + public void setExpert_hospital_name(String expert_hospital_name) { + this.expert_hospital_name = expert_hospital_name; + } + + public String getTag1() { + return tag1; + } + + public void setTag1(String tag1) { + this.tag1 = tag1; + } + + public String getTag2() { + return tag2; + } + + public void setTag2(String tag2) { + this.tag2 = tag2; + } + + public String getTag3() { + return tag3; + } + + public void setTag3(String tag3) { + this.tag3 = tag3; + } + + public String getDes() { + return des; + } + + public void setDes(String des) { + this.des = des; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public List getPhoto() { + return photo; + } + + public void setPhoto(List photo) { + this.photo = photo; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCourseBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCourseBean.java new file mode 100644 index 0000000..ab9b5da --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyCourseBean.java @@ -0,0 +1,177 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MyCourseBean { + public String message; + public CourseBean data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public CourseBean getData() { + return data; + } + + public void setData(CourseBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class CourseBean + { + private int total; + private List list; + private int pages; + private int pageNum; + private Boolean isFirstPage; + private Boolean isLastPage; + private int pageSize; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + public class MyBean + { + private String special_type_name; + private String study_num; + private String excellencourse_video_num; + private String excellencourse_upload_num; + private String excellencourse_title; + private String excellencourse_index_img; + private String excellencourse_id; + + public String getSpecial_type_name() { + return special_type_name; + } + + public void setSpecial_type_name(String special_type_name) { + this.special_type_name = special_type_name; + } + + public String getStudy_num() { + return study_num; + } + + public void setStudy_num(String study_num) { + this.study_num = study_num; + } + + public String getExcellencourse_video_num() { + return excellencourse_video_num; + } + + public void setExcellencourse_video_num(String excellencourse_video_num) { + this.excellencourse_video_num = excellencourse_video_num; + } + + public String getExcellencourse_upload_num() { + return excellencourse_upload_num; + } + + public void setExcellencourse_upload_num(String excellencourse_upload_num) { + this.excellencourse_upload_num = excellencourse_upload_num; + } + + public String getExcellencourse_title() { + return excellencourse_title; + } + + public void setExcellencourse_title(String excellencourse_title) { + this.excellencourse_title = excellencourse_title; + } + + public String getExcellencourse_index_img() { + return excellencourse_index_img; + } + + public void setExcellencourse_index_img(String excellencourse_index_img) { + this.excellencourse_index_img = excellencourse_index_img; + } + + public String getExcellencourse_id() { + return excellencourse_id; + } + + public void setExcellencourse_id(String excellencourse_id) { + this.excellencourse_id = excellencourse_id; + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyDetailInfoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyDetailInfoBean.java new file mode 100644 index 0000000..ac1ec1f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyDetailInfoBean.java @@ -0,0 +1,31 @@ +package cn.shangyu.gdxzExpert.bean; + +public class MyDetailInfoBean extends BaseBean { + + + public MyDetailInfoData data; + public class MyDetailInfoData { + public String uuid;//唯一标识 + public String mobile;//手机号 + public String realName;//真实姓名 + public String photo;//头像路径 + public String sex; // 性别(0.男 1.女) + public String email; //邮箱 + public String nation; //民族 + public String provId;//省id + public String cityId;//市id + public String countyId;//区县id + public String birthDate;//出生日期 + public String hospitalUuid;//坐诊医院uuid + public String hospitalName;//坐诊医院名称 + public String officeUuid;//科室uuid + public String officeName;//科室名称 + public String officePhone;//科室电话 + public String positionUuid;//职称uuid + public String intro;//简介 + public String certificate;//执业资格证 + public String certificateImg;//执业资格证图片 + public String qrcode;//二维码 + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyFlowerBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyFlowerBean.java new file mode 100644 index 0000000..7f3fa3d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyFlowerBean.java @@ -0,0 +1,20 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.math.BigDecimal; +import java.util.List; + +public class MyFlowerBean extends BaseBean { + + public int totalFolwerCount;//鲜花总数 + public double totalFolwerPrice;//价格总数 + public List data; + public class flowerOrderRecordData { + public String name;//送花者姓名 + public String quantity;//数量 + public BigDecimal price;//单价 + public BigDecimal totalPrice;//总价 + public String createDate;//送花日期 + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyNewBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyNewBean.java new file mode 100644 index 0000000..ec52622 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyNewBean.java @@ -0,0 +1,141 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MyNewBean { + private String msg; + private String code; + private MyBean data; + private String message; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public MyBean getData() { + return data; + } + + public void setData(MyBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public class MyBean + { + + private String ping_flowewr_num; + private String consult_total_num; + private String total_points; + private String expert_apply_num; + private String sign_in; + private List honor_list; + private String myInfoBackGround; + private String ranking; + + public String getRanking() { + return ranking; + } + + public void setRanking(String ranking) { + this.ranking = ranking; + } + + public String getMyInfoBackGround() { + return myInfoBackGround; + } + + public void setMyInfoBackGround(String myInfoBackGround) { + this.myInfoBackGround = myInfoBackGround; + } + + public String getPing_flowewr_num() { + return ping_flowewr_num; + } + + public void setPing_flowewr_num(String ping_flowewr_num) { + this.ping_flowewr_num = ping_flowewr_num; + } + + public String getConsult_total_num() { + return consult_total_num; + } + + public void setConsult_total_num(String consult_total_num) { + this.consult_total_num = consult_total_num; + } + + public String getTotal_points() { + return total_points; + } + + public void setTotal_points(String total_points) { + this.total_points = total_points; + } + + public String getExpert_apply_num() { + return expert_apply_num; + } + + public void setExpert_apply_num(String expert_apply_num) { + this.expert_apply_num = expert_apply_num; + } + + public String getSign_in() { + return sign_in; + } + + public void setSign_in(String sign_in) { + this.sign_in = sign_in; + } + + public List getHonor_list() { + return honor_list; + } + + public void setHonor_list(List honor_list) { + this.honor_list = honor_list; + } + } + public class HonorBean + { + + private String nick_name; + private String id; + + public String getNick_name() { + return nick_name; + } + + public void setNick_name(String nick_name) { + this.nick_name = nick_name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyOrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyOrderBean.java new file mode 100644 index 0000000..6ff64e7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyOrderBean.java @@ -0,0 +1,251 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class MyOrderBean { + public String message; + public OrderBean data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public OrderBean getData() { + return data; + } + + public void setData(OrderBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class OrderBean + { + private int total; + private List list; + private int pages; + private int pageNum; + private Boolean isFirstPage; + private Boolean isLastPage; + private int pageSize; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + public class ODetailBean + { + private String order_status; + private String uuid; + private String order_id; + private String expire_time; + private String excellencourse_title; + private String pay_account; + private String excellencourse_id; + private String create_date; + private String account; + private String id; + private ListchildOrder; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getOrder_id() { + return order_id; + } + + public void setOrder_id(String order_id) { + this.order_id = order_id; + } + + public String getOrder_status() { + return order_status; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getExpire_time() { + return expire_time; + } + + public void setExpire_time(String expire_time) { + this.expire_time = expire_time; + } + + public String getExcellencourse_title() { + return excellencourse_title; + } + + public void setExcellencourse_title(String excellencourse_title) { + this.excellencourse_title = excellencourse_title; + } + + public String getPay_account() { + return pay_account; + } + + public void setPay_account(String pay_account) { + this.pay_account = pay_account; + } + + public String getExcellencourse_id() { + return excellencourse_id; + } + + public void setExcellencourse_id(String excellencourse_id) { + this.excellencourse_id = excellencourse_id; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public List getChildOrder() { + return childOrder; + } + + public void setChildOrder(List childOrder) { + this.childOrder = childOrder; + } + } + public class ChilderBean + { + private String order_status; + private String order_pay_type; + private String bonuspoints; + private String account; + + public String getOrder_status() { + return order_status; + } + + public void setOrder_status(String order_status) { + this.order_status = order_status; + } + + public String getOrder_pay_type() { + return order_pay_type; + } + + public void setOrder_pay_type(String order_pay_type) { + this.order_pay_type = order_pay_type; + } + + public String getBonuspoints() { + return bonuspoints; + } + + public void setBonuspoints(String bonuspoints) { + this.bonuspoints = bonuspoints; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyPointsBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyPointsBean.java new file mode 100644 index 0000000..2fc35c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyPointsBean.java @@ -0,0 +1,90 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + + +/** + * @author 作者 wcx + * @version 创建时间:2018-7-13 上午9:33:54 + * 类说明 + */ +public class MyPointsBean { + + /** + * code : 1 + * gdxzday : 875 + * thisWeek : ["2018-07-13","2018-07-12"] + * totalPoints : 56 + * continuous_day : 2 + * message : 查询成功 + * totalDay : 2 + */ + + private String code; + private int gdxzday; + private int totalPoints; + private int continuous_day; + private String message; + private int totalDay; + private List thisWeek; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public int getGdxzday() { + return gdxzday; + } + + public void setGdxzday(int gdxzday) { + this.gdxzday = gdxzday; + } + + public int getTotalPoints() { + return totalPoints; + } + + public void setTotalPoints(int totalPoints) { + this.totalPoints = totalPoints; + } + + public int getContinuous_day() { + return continuous_day; + } + + public void setContinuous_day(int continuous_day) { + this.continuous_day = continuous_day; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public int getTotalDay() { + return totalDay; + } + + public void setTotalDay(int totalDay) { + this.totalDay = totalDay; + } + + public List getThisWeek() { + return thisWeek; + } + + public void setThisWeek(List thisWeek) { + this.thisWeek = thisWeek; + } + + + +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyWorkTableBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyWorkTableBean.java new file mode 100644 index 0000000..086d45f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MyWorkTableBean.java @@ -0,0 +1,33 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + + +public class MyWorkTableBean extends BaseBean { + public workdData data; + public class workdData { + + public List ECallSTBList;//专家设置的电话咨询时间 + public List PCallSTBList;//患者设置的电话咨询时间 + public List EClinicSTBList;//专家设置的门诊预约时间 + public List PClinicSTBList;//患者设置的门诊预约时间 + } + + public class expertTelData { + public String startDate;//开始时间 + public String endDate;//结束时间 + } + public class patientTelData { + public String startDate;//开始时间 + public String endDate;//结束时间 + } + public class expertCliniData { + public String morAft;//0全天 1上午 2下午 + public int count;//数量 + } + public class patientCliniData { + public String morAft; + public int count; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/MylanBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MylanBean.java new file mode 100644 index 0000000..a06555e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/MylanBean.java @@ -0,0 +1,99 @@ +package cn.shangyu.gdxzExpert.bean; + +public class MylanBean { + public String message; + public GanxiBean data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public GanxiBean getData() { + return data; + } + + public void setData(GanxiBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class GanxiBean + { + private String expect; + private String note; + private String total; + private String submit_num; + private String commit_num; + private String huanjiao; + + public String getExpect() { + return expect; + } + + public void setExpect(String expect) { + this.expect = expect; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getTotal() { + return total; + } + + public void setTotal(String total) { + this.total = total; + } + + public String getSubmit_num() { + return submit_num; + } + + public void setSubmit_num(String submit_num) { + this.submit_num = submit_num; + } + + public String getCommit_num() { + return commit_num; + } + + public void setCommit_num(String commit_num) { + this.commit_num = commit_num; + } + + public String getHuanjiao() { + return huanjiao; + } + + public void setHuanjiao(String huanjiao) { + this.huanjiao = huanjiao; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewCommentBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewCommentBean.java new file mode 100644 index 0000000..77799f3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewCommentBean.java @@ -0,0 +1,201 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class NewCommentBean { + /** + * + * { + * "code": "200", + * "data": [{ + * "comment_uuid": "tXZ8MkquLFWThrN29F6", + * "photo": "book/pdf/2016/20160714092534.jpg", + * "user_uuid": "3La2JEVcQKV0numtgpy", + * "create_date": "2019-12-20 11:50", + * "parent_id": null, + * "childs": [{ + * "comment_uuid": "OmR65DNd4QGsL7HWabB", + * "photo": "expert/2019-11-07/bdea2d7841f14b01a5a93c388a9040a7.jpg", + * "user_uuid": "ql4gO6C90QjOhbo4azY", + * "create_date": "2020-09-24 10:54", + * "parent_id": 0, + * "childs": [{ + * "comment_uuid": "xah8kM0SyBD6FsIk2sF", + * "photo": "expert/2020-09-17/c94da2f754884080a5502192bb94947b.jpg", + * "user_uuid": "OSUO0OxAz5n0OlnD7hH", + * "create_date": "2020-09-24 11:51", + * "parent_id": 0, + * "childs": [], + * "name": "杰瑞97", + * "id": 3, + * "content": "hh " + * }], + * "name": "高振宇", + * "id": 2, + * "content": "我们都要 "* }, { + * "comment_uuid": "xah8kM0SyBD6FsIk2sF", + * "photo": "expert/2020-09-17/c94da2f754884080a5502192bb94947b.jpg", + * "user_uuid": "OSUO0OxAz5n0OlnD7hH", + * "create_date": "2020-09-24 11:51", + * "parent_id": 0, + * "childs": [], + * "name": "杰瑞97", + * "id": 3, + * "content": "hh "* }, { + * "comment_uuid": "EqoeYpHaqgRh0YDwqsE", + * "photo": "expert/2019-11-07/bdea2d7841f14b01a5a93c388a9040a7.jpg", + * "user_uuid": "ql4gO6C90QjOhbo4azY", + * "create_date": "2020-09-24 14:25", + * "parent_id": 0, + * "childs": [], + * "name": "高振宇", + * "id": 4, + * "content": "我们都要学会感恩回馈大家分享一个样纸,这些都不知道是哪个部门的 "* }, { + * "comment_uuid": "vgQrSB8QbixOq7qsYuo", + * "photo": "expert/2019-11-07/bdea2d7841f14b01a5a93c388a9040a7.jpg", + * "user_uuid": "ql4gO6C90QjOhbo4azY", + * "create_date": "2020-09-24 15:30", + * "parent_id": 0, + * "childs": [], + * "name": "高振宇", + * "id": 7, + * "content": "你们是谁呀、在一起就是这么简单吗……这种事情一定不会改变。 "* }], + * "name": "杰瑞9", + * "id": 0, + * "content": "时候" + * }, { + * "comment_uuid": "XZRem95LLanRn2aS9fl", + * "photo": "book/pdf/2016/20160714092534.jpg", + * "user_uuid": "uGHPjruuHHz6IUqpROv", + * "create_date": "2019-12-20 14:30", + * "parent_id": null, + * "childs": [{ + * "comment_uuid": "euK0PIKiNIJPoW4q6XK", + * "photo": "expert/2019-11-07/bdea2d7841f14b01a5a93c388a9040a7.jpg", + * "user_uuid": "ql4gO6C90QjOhbo4azY", + * "create_date": "2020-09-24 14:41", + * "parent_id": 1, + * "childs": [], + * "name": "高振宇", + * "id": 5, + * "content": "我想要去皮的冲动……我们的生活方式越来越远。一直都在你身上你永远不知道是你不知道自己是什么样子才发现 "* }], + * "name": "杰瑞1", + * "id": 1, + * "content": "图图" + * }, { + * "comment_uuid": "i7pVx5Oho5bDZSbIRnL", + * "photo": "expert/2019-11-07/bdea2d7841f14b01a5a93c388a9040a7.jpg", + * "user_uuid": "ql4gO6C90QjOhbo4azY", + * "create_date": "2020-09-24 14:42", + * "parent_id": null, + * "childs": [], + * "name": "高振宇", + * "id": 6, + * "content": "我们的爱情就是说了一场恋爱的恋爱了……在于我们" + * }], + * "message": "查询成功" + * }*/ + private String comment_uuid; + private String photo; + private String user_uuid; + private String user_status; + private String create_date; + private String parent_id; + private String name; + private String id; + private String content; + private List childList; + private Boolean isExpanded;//评论列表是否展开 + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public Boolean getExpanded() { + return isExpanded; + } + + public void setExpanded(Boolean expanded) { + isExpanded = expanded; + } + + public List getChildList() { + return childList; + } + + public void setChildList(List childList) { + this.childList = childList; + } + + public String getComment_uuid() { + return comment_uuid; + } + + public void setComment_uuid(String comment_uuid) { + this.comment_uuid = comment_uuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getParent_id() { + return parent_id; + } + + public void setParent_id(String parent_id) { + this.parent_id = parent_id; + } + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewListBean.java new file mode 100644 index 0000000..e57b726 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewListBean.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:新闻bean + */ +public class NewListBean extends BaseBean { + public List data; + + public class NewsList { + + public String title;//标题 + public String headImg;//封面图片 + public String path;///详情 + public String createDate;///创建日期 + public String summary;//摘要 + public String agreenum;//点赞数量 + public String readnum;//阅读量 + public String uuid;//新闻的uuid + public String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getUuid() { + return uuid; + } + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewTeachData.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewTeachData.java new file mode 100644 index 0000000..e4ad7c2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewTeachData.java @@ -0,0 +1,121 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by GAOPeng on 2016/7/26. + */ +public class NewTeachData { + private String code; + private int totalPage; + private String message; + + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + private String summary; + private String title; + private String headImg; + private String createDate; + private String uuid; + private int agreenum; + private int readnum; + private String path; + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public int getAgreenum() { + return agreenum; + } + + public void setAgreenum(int agreenum) { + this.agreenum = agreenum; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewsTagListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewsTagListBean.java new file mode 100644 index 0000000..7822177 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/NewsTagListBean.java @@ -0,0 +1,29 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:新闻标签bean + */ +public class NewsTagListBean extends BaseBean { + public List data; + + public class newsTagList { + private String ID; + private String NAME; + public void setId(String id) { + this.ID = id; + } + public String getId() { + return ID; + } + + public void setName(String name) { + this.NAME = name; + } + public String getName() { + return NAME; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/OldCommentBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/OldCommentBean.java new file mode 100644 index 0000000..011fc36 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/OldCommentBean.java @@ -0,0 +1,19 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class OldCommentBean extends BaseBean { + // "data": [ + // { + // "comment_uuid": "8i7LZvMXiqQErP2te9e", + // "expert_uuid": "rwF4n9leLEF8RuT16Um", + // "photo": "expert/2016-06-29/e641e9927b7647a596ea12054ed8f982.jpg", + // "comment": "阿狸logo呵呵啦log里了", + // "create_date": "2016-08-10 14:53:30", + // "realname": "测试" + // }, + public List data; + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/OrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/OrderBean.java new file mode 100644 index 0000000..0da0cdc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/OrderBean.java @@ -0,0 +1,193 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * OrderBean.java + * + * @author liufang + * @date 2015-11-10 下午4:46:42 + * + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:可提现订单列表实体类 + */ +public class OrderBean extends BaseBean { + + public List preCashOrderList; + public List totalIncomeList; + + public double totalPreCash;//可提现金额 + + public double totalIncome;//账户余额 + + public double minCash; + + public static class OrderData implements Parcelable { + private String uuid; // 订单标识 + private String patientUuid; // 患者UUID + private String photo; // 头像 + private String expertUuid; // 专家UUID + private String orderNum; // 订单号 + private String price; // 价格 + private String orderStatus; // 订单状态 1.待审核2.已审核3.未通过审核 4.已关闭 5.审核前患者取消订单 + // 6.审核后患者取消订单 7.审核后医生取消订单 8.已完成 9.已结算 + private String orderType; // 订单类型 1.电话 2.门诊 3.包月4.鲜花 + private String orderDate; // 订单时间 + private String payStatus; // 支付状态 0.未支付 1.已支付 + private String realName; // 患者真实姓名 + private String isMonth; //是不是包月 1是 0 不是 + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPatientUuid() { + return patientUuid; + } + + public void setPatientUuid(String patientUuid) { + this.patientUuid = patientUuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getExpertUuid() { + return expertUuid; + } + + public void setExpertUuid(String expertUuid) { + this.expertUuid = expertUuid; + } + + public String getOrderNum() { + return orderNum; + } + + public void setOrderNum(String orderNum) { + this.orderNum = orderNum; + } + + public String getPrice() { + return price; + } + + public void setPrice(String price) { + this.price = price; + } + + public String getOrderStatus() { + return orderStatus; + } + + public void setOrderStatus(String orderStatus) { + this.orderStatus = orderStatus; + } + + public String getOrderType() { + return orderType; + } + + public void setOrderType(String orderType) { + this.orderType = orderType; + } + + public String getPayStatus() { + return payStatus; + } + + public void setPayStatus(String payStatus) { + this.payStatus = payStatus; + } + + public String getOrderDate() { + return orderDate; + } + + public void setOrderDate(String orderDate) { + this.orderDate = orderDate; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getIsMonth() { + return isMonth; + } + + public void setIsMonth(String isMonth) { + this.isMonth = isMonth; + } + + public OrderData() { + + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.uuid); + dest.writeString(this.patientUuid); + dest.writeString(this.photo); + dest.writeString(this.expertUuid); + dest.writeString(this.orderNum); + dest.writeString(this.price); + dest.writeString(this.orderStatus); + dest.writeString(this.orderType); + dest.writeString(this.orderDate); + dest.writeString(this.payStatus); + dest.writeString(this.realName); + dest.writeString(this.isMonth); + } + + public OrderData(Parcel in) { + this.uuid = in.readString(); + this.patientUuid = in.readString(); + this.photo = in.readString(); + this.expertUuid = in.readString(); + this.orderNum = in.readString(); + this.price = in.readString(); + this.orderStatus = in.readString(); + this.orderType = in.readString(); + this.orderDate = in.readString(); + this.payStatus = in.readString(); + this.realName = in.readString(); + this.isMonth = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + + @Override + public OrderData[] newArray(int size) { + return new OrderData[size]; + } + + @Override + public OrderData createFromParcel(Parcel source) { + return new OrderData(source); + } + }; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PageBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PageBean.java new file mode 100644 index 0000000..b2aa351 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PageBean.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PageBean { + private String msg; + private String code; + private DataBean data; + private String message; + public class DataBean + { + private String totalPoints; + private String points_price_exchange; + private String availableBalance; + + public String getTotalPoints() { + return totalPoints; + } + + public void setTotalPoints(String totalPoints) { + this.totalPoints = totalPoints; + } + + public String getPoints_price_exchange() { + return points_price_exchange; + } + + public void setPoints_price_exchange(String points_price_exchange) { + this.points_price_exchange = points_price_exchange; + } + + public String getAvailableBalance() { + return availableBalance; + } + + public void setAvailableBalance(String availableBalance) { + this.availableBalance = availableBalance; + } + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PaperBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PaperBean.java new file mode 100644 index 0000000..cddbcf9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PaperBean.java @@ -0,0 +1,31 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PaperBean { + private String title; + private String author; + private String name; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCardBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCardBean.java new file mode 100644 index 0000000..64dce28 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCardBean.java @@ -0,0 +1,173 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by WANGChengXin on 2019/10/24. + */ + +public class PatientCardBean { + + + /** + * code : 200 + * patient : {"photo":"patient/2019-11-05/ad8f0ba7aa004b209983033129ce2bdd.jpg","realname":"测试账号1"} + * FollowUpUuid : 4d51965708c240aba5222d7ba1ef8c41 + * message : 成功 + * group : {"note":"我的备注啦啦垃圾拒绝了他了情侣了了啦啦啦啦了了了了了啦啦痛苦拒绝考虑啦啦啦拒绝老K了了了啦啦吧V领居銮","name":"心分组","nickname":"你干啥","is_star":0,"group_type":0} + * FollowUpDate : 2019-09-12 + */ + + private String code; + private PatientBean patient; + private String FollowUpUuid; + private String message; + private GroupBean group; + private String FollowUpDate; + private String isFriend; + + public String getIsFriend() { + return isFriend; + } + + public void setIsFriend(String isFriend) { + this.isFriend = isFriend; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public PatientBean getPatient() { + return patient; + } + + public void setPatient(PatientBean patient) { + this.patient = patient; + } + + public String getFollowUpUuid() { + return FollowUpUuid; + } + + public void setFollowUpUuid(String FollowUpUuid) { + this.FollowUpUuid = FollowUpUuid; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public GroupBean getGroup() { + return group; + } + + public void setGroup(GroupBean group) { + this.group = group; + } + + public String getFollowUpDate() { + return FollowUpDate; + } + + public void setFollowUpDate(String FollowUpDate) { + this.FollowUpDate = FollowUpDate; + } + + public static class PatientBean { + /** + * photo : patient/2019-11-05/ad8f0ba7aa004b209983033129ce2bdd.jpg + * realname : 测试账号1 + */ + + private String photo; + private String realname; + private String uuid; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getRealname() { + return realname; + } + + public void setRealname(String realname) { + this.realname = realname; + } + } + + public static class GroupBean { + /** + * note : 我的备注啦啦垃圾拒绝了他了情侣了了啦啦啦啦了了了了了啦啦痛苦拒绝考虑啦啦啦拒绝老K了了了啦啦吧V领居銮 + * name : 心分组 + * nickname : 你干啥 + * is_star : 0 + * group_type : 0 + */ + + private String note; + private String name; + private String nickname; + private int is_star; + private int group_type; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public int getIs_star() { + return is_star; + } + + public void setIs_star(int is_star) { + this.is_star = is_star; + } + + public int getGroup_type() { + return group_type; + } + + public void setGroup_type(int group_type) { + this.group_type = group_type; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCaseBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCaseBean.java new file mode 100644 index 0000000..83e330d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientCaseBean.java @@ -0,0 +1,130 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class PatientCaseBean extends BaseBeanNew{ + private PatientCase data; + + public PatientCase getData() { + return data; + } + + public void setData(PatientCase data) { + this.data = data; + } + + public class PatientCase extends BaseBeanList + { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } + public class CaseBean + { + private String patientcaseId;// 病例id integer + private String name;// 姓名 string + private String groupNo;// 入组编号 string + private String patientNo;// 患者编号(门诊、住院编号) string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer + private String createTime;// 创建时间 string + private String updateTime;// + private String departmentName; + private String employeeName; + private String freezeFlag; + + public String getFreezeFlag() { + return freezeFlag; + } + + public void setFreezeFlag(String freezeFlag) { + this.freezeFlag = freezeFlag; + } + + public String getEmployeeName() { + return employeeName; + } + + public void setEmployeeName(String employeeName) { + this.employeeName = employeeName; + } + + public String getDepartmentName() { + return departmentName; + } + + public void setDepartmentName(String departmentName) { + this.departmentName = departmentName; + } + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getGroupNo() { + return groupNo; + } + + public void setGroupNo(String groupNo) { + this.groupNo = groupNo; + } + + public String getPatientNo() { + return patientNo; + } + + public void setPatientNo(String patientNo) { + this.patientNo = patientNo; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientDetailBean.java new file mode 100644 index 0000000..af1ba9e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientDetailBean.java @@ -0,0 +1,152 @@ +package cn.shangyu.gdxzExpert.bean; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.List; + +public class PatientDetailBean extends BaseBean { + + public PatientDetailData data; + public int age; + public String medicalHistoryContent; + public List patientCase; + + + public class PatientDetailData { + public String uuid; + public String mobile; + public String realName; + public String photo; + public String diagnosis; + public String birthDate; + public String sex; + public String nation; + public int provId; + public int cityId; + public int countyId; + public String nationName; + public String provName;//省 + public String cityName;//市 + public String countyName;//区 + public String detailed_address;//详细地址 + } + public class PatientDetailImg { + public String des; + public String uuid; + public String patientUuid; + public String modifyDate; + public String diseaseUuid; + public String createDate; + public String title; + public int state; + public String diseaseName; + } + //既往史 + public static class MedicalHistoryContent implements Parcelable{ + public String patientUuid; + public String first; + public String second; + public String three; + public String four; + public String five; + public String six; + public String seven; + + public String getPatientUuid() { + return patientUuid; + } + public void setPatientUuid(String patientUuid) { + this.patientUuid = patientUuid; + } + public String getFirst() { + return first; + } + public void setFirst(String first) { + this.first = first; + } + public String getSecond() { + return second; + } + public void setSecond(String second) { + this.second = second; + } + public String getThree() { + return three; + } + public void setThree(String three) { + this.three = three; + } + public String getFour() { + return four; + } + public void setFour(String four) { + this.four = four; + } + public String getFive() { + return five; + } + public void setFive(String five) { + this.five = five; + } + public String getSix() { + return six; + } + public void setSix(String six) { + this.six = six; + } + public String getSeven() { + return seven; + } + public void setSeven(String seven) { + this.seven = seven; + } + + @Override + public int describeContents() { + // TODO Auto-generated method stub + return 0; + } + @Override + public void writeToParcel(Parcel dest, int flags) { + // TODO Auto-generated method stub + dest.writeString(this.patientUuid); + dest.writeString(this.first); + dest.writeString(this.second); + dest.writeString(this.three); + dest.writeString(this.four); + dest.writeString(this.five); + dest.writeString(this.six); + dest.writeString(this.seven); + } + + public MedicalHistoryContent(Parcel in) { + this.patientUuid = in.readString(); + this.first = in.readString(); + this.second = in.readString(); + this.three = in.readString(); + this.four = in.readString(); + this.five = in.readString(); + this.six = in.readString(); + this.seven = in.readString(); + } + + public static final Creator CREATOR + = new Creator() { + + @Override + public MedicalHistoryContent[] newArray(int size) { + // TODO Auto-generated method stub + return new MedicalHistoryContent[size]; + } + + @Override + public MedicalHistoryContent createFromParcel(Parcel source) { + // TODO Auto-generated method stub + return new MedicalHistoryContent(source); + } + }; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientListBean.java new file mode 100644 index 0000000..310b4c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientListBean.java @@ -0,0 +1,159 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:患者列表与患者申请列表bean + */ +public class PatientListBean extends BaseBean { + public List data; + + public static class PatientData { + + public String mobile;// 手机号 + public String realName;// 患者姓名 + public String photo;// 患者头像路径 + public String uuid;// 唯一标示 + public String birthDate;// 患者出生日期 + public int sex;// 患者性别(0.男 1.女) + public int type;// 类型//1.随访关系 2.包月服务关系 (type==2即为VIP) + public String provId;// 省id + public String cityId;// 市id + public String countyId;// 区县id + public String nation;// 民族 + public String nickname;// 别名 + public String note;// 备注内容 + + // 新的患者增加的 + public String patientUuid;// 患者uuid + public String expertUuid;// 专家uuid + public String createDate;// 申请时间 + public String content;// 申请内容 + public int status;// 新的患者申请,状态(1.待审核2.审核通过3.拒绝 4.已过期) + public String join_date;//随访时间 + public String diagnosis;//患病类型 + private String sortLetters; // 显示数据拼音的首字母 + private boolean isSelect; + + public String getJoin_date() { + return join_date; + } + + public void setJoin_date(String join_date) { + this.join_date = join_date; + } + + public boolean isSelect() { + return isSelect; + } + + public void setSelect(boolean select) { + isSelect = select; + } + + public String getSortLetters() { + return sortLetters; + } + + public void setSortLetters(String sortLetters) { + this.sortLetters = sortLetters; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getBirthDate() { + return birthDate; + } + + public void setBirthDate(String birthDate) { + this.birthDate = birthDate; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getProvId() { + return provId; + } + + public void setProvId(String provId) { + this.provId = provId; + } + + public String getCityId() { + return cityId; + } + + public void setCityId(String cityId) { + this.cityId = cityId; + } + + public String getCountyId() { + return countyId; + } + + public void setCountyId(String countyId) { + this.countyId = countyId; + } + + public String getNation() { + return nation; + } + + public void setNation(String nation) { + this.nation = nation; + } + + @Override + public String toString() { + return "PatientData [ realName=" + realName + ", nickname=" + + nickname + ", sortLetters=" + sortLetters + "]"; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientNoticeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientNoticeBean.java new file mode 100644 index 0000000..65a8ceb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientNoticeBean.java @@ -0,0 +1,68 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by wangchengxin on 2019/4/25. + */ + +public class PatientNoticeBean { + + /** + * code : 200 + * data : {"uuid":"d068693cba7d4445a5d76f9629e46461","notice":"记录了"} + * message : 修改成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * uuid : d068693cba7d4445a5d76f9629e46461 + * notice : 记录了 + */ + + private String uuid; + private String notice; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getNotice() { + return notice; + } + + public void setNotice(String notice) { + this.notice = notice; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientTeachBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientTeachBean.java new file mode 100644 index 0000000..37de152 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientTeachBean.java @@ -0,0 +1,175 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class PatientTeachBean extends BaseBean { + + public List data; + + public class PatientTBean { + + private String expertName; + private String imgPath; + private String topic; + private String publisherUuid; + private String recommendedUuid; + private String isOriginal; + private String isThrough; + private String filePath; + private String uuid; + private String agreenum; + private String readnum; + private String submitDate; + private String modifyDate; + private String summary; + private String type; + private String path; + private String tags; + private String content; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getExpertName() { + return expertName; + } + + public void setExpertName(String expertName) { + this.expertName = expertName; + } + + public String getImgPath() { + return imgPath; + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath; + } + + public String getTopic() { + return topic; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public String getPublisherUuid() { + return publisherUuid; + } + + public void setPublisherUuid(String publisherUuid) { + this.publisherUuid = publisherUuid; + } + + public String getRecommendedUuid() { + return recommendedUuid; + } + + public void setRecommendedUuid(String recommendedUuid) { + this.recommendedUuid = recommendedUuid; + } + + public String getIsOriginal() { + return isOriginal; + } + + public void setIsOriginal(String isOriginal) { + this.isOriginal = isOriginal; + } + + public String getIsThrough() { + return isThrough; + } + + public void setIsThrough(String isThrough) { + this.isThrough = isThrough; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getSubmitDate() { + return submitDate; + } + + public void setSubmitDate(String submitDate) { + this.submitDate = submitDate; + } + + public String getModifyDate() { + return modifyDate; + } + + public void setModifyDate(String modifyDate) { + this.modifyDate = modifyDate; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientVideoTypeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientVideoTypeBean.java new file mode 100644 index 0000000..3a952e7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PatientVideoTypeBean.java @@ -0,0 +1,110 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/10/25. + */ + +public class PatientVideoTypeBean { + + /** + * code : 1 + * data : [{"sort":0,"uuid":"BMSpatientvideo","video":null,"status":1,"note":"BMS患者端","name":"0--BMS患者端"},{"sort":0,"uuid":"c81ded8a86134349afcd9d4d90eb268f","video":null,"status":1,"note":"不断测试","name":"2017年核苷类药物抗病毒治疗策略"},{"sort":0,"uuid":"dc4fbcbe0d2748a1bd5bd1ea1e15050d","video":null,"status":1,"note":"肝胆会议","name":"a-科普视频"},{"sort":0,"uuid":"86e9e9cca83449aebd4f3792923561dc","video":null,"status":1,"note":"AA","name":"b--甲乙丙丁"},{"sort":0,"uuid":"27f2ff6db1d94327bf06fdfb76d0859b","video":null,"status":1,"note":"h-谈丙话肝","name":"h-谈丙话肝"},{"sort":0,"uuid":"99138cd4b11c450f9dc427e3ba859979","video":null,"status":1,"note":"微信-Y-疾病知识","name":"Y-疾病知识"},{"sort":0,"uuid":"f8f23326906945d7af463ada92a61cce","video":null,"status":1,"note":"微信-Y-名医讲堂","name":"Y-名医讲堂"},{"sort":0,"uuid":"d360f4d6d7464fb2afbe2a885fecdc23","video":null,"status":1,"note":"微信-Y-诊断治疗","name":"Y-诊断治疗"},{"sort":0,"uuid":"ec516a9591754131a575eebbb523e28c","video":null,"status":1,"note":"egeDDDFF","name":"测试长代课教师覅偶if覅偶而王菲未返回发热发热为太热问题惹我特务团热我突然"},{"sort":0,"uuid":"36dea2d3fb25430eb2aa4cc1568984b7","video":null,"status":1,"note":"肝胆讲座","name":"肝胆讲座"},{"sort":0,"uuid":"83d661f7efe4484f982c96d8978d73e4","video":null,"status":1,"note":"长标题查看","name":"继续住院治疗先保肝降酶周后可加抗病毒药物降酶周"},{"sort":0,"uuid":"53058e24cc9145288d50b4df68df068e","video":null,"status":1,"note":"打发斯蒂芬","name":"师傅"},{"sort":0,"uuid":"30e437b7b9274acc9c1ff66af05caa21","video":null,"status":1,"note":"台湾测试","name":"台湾测试"}] + * message : 查询成功 + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * sort : 0 + * uuid : BMSpatientvideo + * video : null + * status : 1 + * note : BMS患者端 + * name : 0--BMS患者端 + */ + + private int sort; + private String uuid; + private Object video; + private int status; + private String note; + private String name; + + public int getSort() { + return sort; + } + + public void setSort(int sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public Object getVideo() { + return video; + } + + public void setVideo(Object video) { + this.video = video; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayBean.java new file mode 100644 index 0000000..1dbd016 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayBean.java @@ -0,0 +1,128 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PayBean { + private String msg; + private String code; + private DataBean data; + private String message; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public class DataBean + { + private String account; + private String excellencourse_order_id; + private String status; + private PayWechatBean.PayWeBean order; + private String channel; + private String trade_no; + + public String getTrade_no() { + return trade_no; + } + + public void setTrade_no(String trade_no) { + this.trade_no = trade_no; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public String getExcellencourse_order_id() { + return excellencourse_order_id; + } + + public void setExcellencourse_order_id(String excellencourse_order_id) { + this.excellencourse_order_id = excellencourse_order_id; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public PayWechatBean.PayWeBean getOrder() { + return order; + } + + public void setOrder(PayWechatBean.PayWeBean order) { + this.order = order; + } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } + } + public class PingBean{ + private String app; + private String id; + private int amount; + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public String getApp() { + return app; + } + + public void setApp(String app) { + this.app = app; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayGoodsOrderbean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayGoodsOrderbean.java new file mode 100644 index 0000000..18169d2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayGoodsOrderbean.java @@ -0,0 +1,163 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PayGoodsOrderbean { + /** + * code : 200 + * data : {"user_uuid":"1dvjBbnWlkspdWbI3Oh","time_expire":1539316430791,"address":"北京","mobile":"13028646988","name":"天堂伞","goods_num":2,"id":4,"create_date":1539316425791,"goods_uuid":"ec539f117c86445684b39a57c736d147","pionts":200,"email":"","status":2} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * user_uuid : 1dvjBbnWlkspdWbI3Oh + * time_expire : 1539316430791 + * address : 北京 + * mobile : 13028646988 + * name : 天堂伞 + * goods_num : 2 + * id : 4 + * create_date : 1539316425791 + * goods_uuid : ec539f117c86445684b39a57c736d147 + * pionts : 200 + * email : + * status : 2 + */ + + private String user_uuid; + private long time_expire; + private String address; + private String mobile; + private String name; + private int goods_num; + private int id; + private long create_date; + private String goods_uuid; + private int pionts; + private String email; + private int status; + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public long getTime_expire() { + return time_expire; + } + + public void setTime_expire(long time_expire) { + this.time_expire = time_expire; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getGoods_num() { + return goods_num; + } + + public void setGoods_num(int goods_num) { + this.goods_num = goods_num; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public long getCreate_date() { + return create_date; + } + + public void setCreate_date(long create_date) { + this.create_date = create_date; + } + + public String getGoods_uuid() { + return goods_uuid; + } + + public void setGoods_uuid(String goods_uuid) { + this.goods_uuid = goods_uuid; + } + + public int getPionts() { + return pionts; + } + + public void setPionts(int pionts) { + this.pionts = pionts; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayWechatBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayWechatBean.java new file mode 100644 index 0000000..d417867 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PayWechatBean.java @@ -0,0 +1,116 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PayWechatBean { + private String code; + private String msg; + private String message; + private PayWeBean data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public PayWeBean getData() { + return data; + } + + public void setData(PayWeBean data) { + this.data = data; + } + + public class PayWeBean + { + private String package_str; + private String appid; + private String sign; + private String partnerid; + private String prepayid; + private String noncestr; + private String timestamp; + private String trade_no; + + public String getTrade_no() { + return trade_no; + } + + public void setTrade_no(String trade_no) { + this.trade_no = trade_no; + } + + public String getPackage_str() { + return package_str; + } + + public void setPackage_str(String package_str) { + this.package_str = package_str; + } + + public String getAppid() { + return appid; + } + + public void setAppid(String appid) { + this.appid = appid; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public String getPartnerid() { + return partnerid; + } + + public void setPartnerid(String partnerid) { + this.partnerid = partnerid; + } + + public String getPrepayid() { + return prepayid; + } + + public void setPrepayid(String prepayid) { + this.prepayid = prepayid; + } + + public String getNoncestr() { + return noncestr; + } + + public void setNoncestr(String noncestr) { + this.noncestr = noncestr; + } + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoAibum.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoAibum.java new file mode 100644 index 0000000..b8d6e3d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoAibum.java @@ -0,0 +1,77 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +public class PhotoAibum implements Serializable { + /** + * + */ + private static final long serialVersionUID = 1L; + private String name; // 相册名字 + public int count; // 数量 + private int bitmap; // 相册第一张图片 + private String bitmapPath; // 相册第一张图片 + // public String thumbnailPath; + public List bitList = new ArrayList(); + + + + public String getBitmapPath() { + return bitmapPath; + } + + public void setBitmapPath(String bitmapPath) { + this.bitmapPath = bitmapPath; + } + + public PhotoAibum() { + } + + public PhotoAibum(String name, int count, int bitmap, String bitmapPath) { + super(); + this.bitmapPath = bitmapPath; + this.name = name; + this.count = count; + this.bitmap = bitmap; + } + + public List getBitList() { + return bitList; + } + + public void setBitList(List bitList) { + this.bitList = bitList; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public int getBitmap() { + return bitmap; + } + + public void setBitmap(int bitmap) { + this.bitmap = bitmap; + } + + @Override + public String toString() { + return "PhotoAibum [name=" + name + ", count=" + count + ", bitmap=" + + bitmap + ", bitList=" + bitList + "]"; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoItem.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoItem.java new file mode 100644 index 0000000..3cd8597 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PhotoItem.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; + +public class PhotoItem implements Serializable { + private static final long serialVersionUID = 8682674788506891598L; + private int photoID; + private boolean select; + private String path; + public String thumbnailPath; + + public PhotoItem(int id, String path) { + photoID = id; + select = false; + this.path = path; + } + + public PhotoItem() { + + } + + public PhotoItem(int id, boolean flag) { + photoID = id; + select = flag; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public int getPhotoID() { + return photoID; + } + + public void setPhotoID(int photoID) { + this.photoID = photoID; + } + + public boolean isSelect() { + return select; + } + + public void setSelect(boolean select) { + this.select = select; + } + + @Override + public String toString() { + return "PhotoItem [photoID=" + photoID + ", select=" + select + + ", path=" + path + ", thumbnailPath=" + thumbnailPath + "]"; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PoMessageBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PoMessageBean.java new file mode 100644 index 0000000..b79b3dc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PoMessageBean.java @@ -0,0 +1,34 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class PoMessageBean extends BaseBean { + + + public myPublishMessageData data; + + public class myPublishMessageData { + public List list; + public int pageNumber ; + public int pageSize ; + public int totalPage ; + public int totalRow ; + } + public class myPublishMessageList { + public String uuid ; + public String createDate;//发送日期 + public String sendUuid;//发送者UUID + public String receiveUuid ;// 接受者标识 为接受者手机号 多个手机号以逗号分隔 + public String content ;// 内容 + public String patientName;//患者姓名 + public int type;// 类型 1.纯文本2.语音3.图片4.视频 + public int sendType;//发送者类型 1.患者 2.专家 + public int receiveType;//接受者者类型 1.患者 2.专家 + public int chatFrom;// 通过哪个模块发送的消息1.公益咨询 2.随访 3.VIP + public String chatFromUuid;// 发送模块的消息的UUID1.公益咨询 2.随访 3.VIP + + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PointTicketlistBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PointTicketlistBean.java new file mode 100644 index 0000000..197241d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PointTicketlistBean.java @@ -0,0 +1,166 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/5/9. + */ + +public class PointTicketlistBean { + + /** + * code : 200 + * data : {"pageNum":1,"pages":1,"pageSize":10,"isFirstPage":true,"isLastPage":true,"list":[{"end_date":1559283420,"begin_date":1558505820,"uuid":"161d6a9bd16249e08df7bb02c447e67b","point":1000},{"end_date":1557469800,"begin_date":1557297000,"uuid":"b62751ef4ea543fd83e68c6f25660a8b","point":500},{"end_date":1557469800,"begin_date":1557297000,"uuid":"c3777c414c7c469393be21e4cb620cc9","point":500},{"end_date":1559283420,"begin_date":1558505820,"uuid":"e99ef038de1d4be48a80eaa02080f10b","point":1000},{"end_date":1557469800,"begin_date":1557297000,"uuid":"f8e287f65f34470e8ce6c6042e4514a0","point":500}],"total":5} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageNum : 1 + * pages : 1 + * pageSize : 10 + * isFirstPage : true + * isLastPage : true + * list : [{"end_date":1559283420,"begin_date":1558505820,"uuid":"161d6a9bd16249e08df7bb02c447e67b","point":1000},{"end_date":1557469800,"begin_date":1557297000,"uuid":"b62751ef4ea543fd83e68c6f25660a8b","point":500},{"end_date":1557469800,"begin_date":1557297000,"uuid":"c3777c414c7c469393be21e4cb620cc9","point":500},{"end_date":1559283420,"begin_date":1558505820,"uuid":"e99ef038de1d4be48a80eaa02080f10b","point":1000},{"end_date":1557469800,"begin_date":1557297000,"uuid":"f8e287f65f34470e8ce6c6042e4514a0","point":500}] + * total : 5 + */ + + private int pageNum; + private int pages; + private int pageSize; + private boolean isFirstPage; + private boolean isLastPage; + private int total; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * end_date : 1559283420 + * begin_date : 1558505820 + * uuid : 161d6a9bd16249e08df7bb02c447e67b + * point : 1000 + */ + + private int end_date; + private int begin_date; + private String uuid; + private int point; + + public int getEnd_date() { + return end_date; + } + + public void setEnd_date(int end_date) { + this.end_date = end_date; + } + + public int getBegin_date() { + return begin_date; + } + + public void setBegin_date(int begin_date) { + this.begin_date = begin_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public int getPoint() { + return point; + } + + public void setPoint(int point) { + this.point = point; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvDownloadInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvDownloadInfo.java new file mode 100644 index 0000000..74c2f88 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvDownloadInfo.java @@ -0,0 +1,140 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PolyvDownloadInfo { + // vid + private String vid; + // 时长 + private String duration; + // 文件大小 + private long filesize; + // 码率 + private int bitrate; + // 标题 + private String title; + // 已下载的文件大小(mp4)/已下载的文件个数(ts) + private long percent; + // 总文件大小(mp4)/总个数(ts) + private long total; + + private String headImg;//封面 + private String author;//作者 + private boolean check;//是否选中:编辑/取消 + private String uuid; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public boolean isCheck() { + return check; + } + + public void setCheck(boolean check) { + this.check = check; + } + + public PolyvDownloadInfo(){} + + public PolyvDownloadInfo(String vid, String duration, long filesize, int bitrate, String title,String headImg,String author,String uuid) { + this.vid = vid; + this.duration = duration; + this.filesize = filesize; + this.bitrate = bitrate; + this.title = title; + this.headImg =headImg; + this.author =author; + this.uuid = uuid; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getVid() { + return vid; + } + + public void setVid(String vid) { + this.vid = vid; + } + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public long getFilesize() { + return filesize; + } + + public void setFilesize(long filesize) { + this.filesize = filesize; + } + + public int getBitrate() { + return bitrate; + } + + public void setBitrate(int bitrate) { + this.bitrate = bitrate; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public long getPercent() { + return percent; + } + + public void setPercent(long percent) { + this.percent = percent; + } + + public long getTotal() { + return total; + } + + public void setTotal(long total) { + this.total = total; + } + + @Override + public String toString() { + return "PolyvDownloadInfo{" + + "vid='" + vid + '\'' + + ", duration='" + duration + '\'' + + ", filesize=" + filesize + + ", bitrate=" + bitrate + + ", title='" + title + '\'' + + ", percent=" + percent + + ", total=" + total + + ", headImg=" + headImg + + ", author=" + author + + ", uuid=" + uuid + + '}'; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvUploadInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvUploadInfo.java new file mode 100644 index 0000000..8b08cd8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PolyvUploadInfo.java @@ -0,0 +1,102 @@ +package cn.shangyu.gdxzExpert.bean; + +public class PolyvUploadInfo { + // 标题 + private String title; + // 文件路径 + private String filepath; + // 文件大小 + private long filesize; + // 描述 + private String desc; + // 分类id + private String cataid; + // 已上传的文件大小 + private long percent; + // 需上传的总文件大小 + private long total; + + public PolyvUploadInfo(){} + + public PolyvUploadInfo(String title, String desc, long filesize, String filepath) { + // cataid默认为0 + this(title, desc, filesize, filepath, "0"); + } + + public PolyvUploadInfo(String title, String desc, long filesize, String filepath, String cataid) { + this.title = title; + this.desc = desc; + this.filesize = filesize; + this.filepath = filepath; + this.cataid = cataid; + } + + public String getCataid() { + return cataid; + } + + public void setCataid(String cataid) { + this.cataid = cataid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getFilepath() { + return filepath; + } + + public void setFilepath(String filepath) { + this.filepath = filepath; + } + + public long getFilesize() { + return filesize; + } + + public void setFilesize(long filesize) { + this.filesize = filesize; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public long getPercent() { + return percent; + } + + public void setPercent(long percent) { + this.percent = percent; + } + + public long getTotal() { + return total; + } + + public void setTotal(long total) { + this.total = total; + } + + @Override + public String toString() { + return "PolyvUploadInfo{" + + "title='" + title + '\'' + + ", filepath='" + filepath + '\'' + + ", filesize=" + filesize + + ", desc='" + desc + '\'' + + ", cataid='" + cataid + '\'' + + ", percent=" + percent + + ", total=" + total + + '}'; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/PublicSercicePhotoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PublicSercicePhotoBean.java new file mode 100644 index 0000000..02ed597 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/PublicSercicePhotoBean.java @@ -0,0 +1,144 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class PublicSercicePhotoBean extends BaseBean { + public PublicSercicebean data; + + public class PublicSercicebean + { + public PublicSerciceDetail detail; + public List imgList; + public String message; + } + + public class PublicSerciceDetail { + public String patientName; + public String patientPhoto; + public String patientUuid; + public String expertUuid; + public String expertName; + public String diseaseName; + public String expertPhoto; + public String createDate; + public String uuid; + public String diseaseUuid; + public String state; + public String content; + public String user_status;//是否注销 + + public String getUser_status() { + return user_status; + } + + public void setUser_status(String user_status) { + this.user_status = user_status; + } + + public String getDiseaseName() { + return diseaseName; + } + + public void setDiseaseName(String diseaseName) { + this.diseaseName = diseaseName; + } + + public String getPatientName() { + return patientName; + } + + public void setPatientName(String patientName) { + this.patientName = patientName; + } + + public String getPatientPhoto() { + return patientPhoto; + } + + public void setPatientPhoto(String patientPhoto) { + this.patientPhoto = patientPhoto; + } + + public String getPatientUuid() { + return patientUuid; + } + + public void setPatientUuid(String patientUuid) { + this.patientUuid = patientUuid; + } + + public String getExpertUuid() { + return expertUuid; + } + + public void setExpertUuid(String expertUuid) { + this.expertUuid = expertUuid; + } + + public String getExpertName() { + return expertName; + } + + public void setExpertName(String expertName) { + this.expertName = expertName; + } + + public String getExpertPhoto() { + return expertPhoto; + } + + public void setExpertPhoto(String expertPhoto) { + this.expertPhoto = expertPhoto; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getDiseaseUuid() { + return diseaseUuid; + } + + public void setDiseaseUuid(String diseaseUuid) { + this.diseaseUuid = diseaseUuid; + } + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } + + + public class PublicSercicePhoto { + public String uuid;//唯一标识 + public String path;//图片路径 + public String consultUuid;//公益咨询uuid + public String createDate;//添加时间 + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/QuestionBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/QuestionBean.java new file mode 100644 index 0000000..e57bfdf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/QuestionBean.java @@ -0,0 +1,158 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class QuestionBean { + private String message; + private QBean data; + private String msg; + private String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public QBean getData() { + return data; + } + + public void setData(QBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class QBean + { + private int total; + private List list; + private int pages; + private int pageNum; + private Boolean isFirstPage; + private Boolean isLastPage; + private int pageSize; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + public class Qbean1 + { + private String path; + private String summary; + private String id; + private String title; + private String create_date; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/QuickReplyBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/QuickReplyBean.java new file mode 100644 index 0000000..5ef1eef --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/QuickReplyBean.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + *@author JIXiao + *@author 经典病例收藏Bean CircleCollectBIngliBean + */ +public class QuickReplyBean extends BaseBean { + public List data; + public class QuickReplyData{ + // "createdate": "2016-06-22 15:43:10", + // "replystr": "测试编辑快捷回复添加接口", + // "user_uuid": "p4wP6oxxqqhb303bmpS", + // "uuid": "32d1ae2ff7584eb8ba4914f122c7e6aa", + // "sort": 0 + public String createdate; + public String replystr; + public String user_uuid; + public String uuid; + public int sort; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/RankingBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/RankingBean.java new file mode 100644 index 0000000..32f551d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/RankingBean.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class RankingBean extends BaseBeanNew{ + public rankingList getData() { + return data; + } + + public void setData(rankingList data) { + this.data = data; + } + + private rankingList data; + + public class rankingList extends BaseBeanList + { + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } + public class listRankingBean + { + private String name;// string + private String hospitalName ;// string + private int num;// + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getHospitalName() { + return hospitalName; + } + + public void setHospitalName(String hospitalName) { + this.hospitalName = hospitalName; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/RegistBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/RegistBean.java new file mode 100644 index 0000000..a14809c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/RegistBean.java @@ -0,0 +1,69 @@ +package cn.shangyu.gdxzExpert.bean; + +public class RegistBean extends BaseBean { + // { + // "code": "1", + // "expertbean": { + // "isVisit": 0,- + // "createDate": null,- + // "isEnable": 1,- + // "deviceType": 0,- + // "deviceSpec": null,- + // "currentSpec": null,- + // "currentType": 0,- + // "positionName": null, + // "modifyDate": null, + // "userName": null, + // "password": null, + // "qrcode": "qrCodeImg/r7VdqQK3CSa5o6nsYU4.png", + // "certificateImg": null, + // "birthDate": null, + // "isStar": 0, + // "mobile": "13071195611", + // "uuid": "r7VdqQK3CSa5o6nsYU4", + // "photo": null, + // "intro": null, + // "officeName": null, + // "sex": 0, + // "nation": 0, + // "provId": 0, + // "cityId": 0, + // "countyId": 0, + // "email": null, + // "hospitalName": null, + // "officeUuid": null, + // "checkInfo": null, + // "hospitalUuid": null, + // "officePhone": null, + // "positionUuid": null, + // "certificate": null, + // "state": 1, + // "realName": null + // }, + // "message": "恭喜您注册成功,请登录完善个人信息" + // } + public Expertbean expertbean; + + public class Expertbean { + + private String state; + private String uuid; + + public String getState() { + return state; + } + + public void setState(String state) { + this.state = state; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/RetrieveUser.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/RetrieveUser.java new file mode 100644 index 0000000..2948aa2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/RetrieveUser.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.bean; + +public class RetrieveUser extends BaseBean { + // "metadata": {}, + // "created": 1488969262, + // "mobile": null, + // "app": "app_mPqfjPHyv18SiHSu", + // "availableCoupons": 0, + // "avatar": null, + // "availableBalance": 0, + // "disabled": false, + // "email": null, + // "gender": null, + // "identified": false, + // "livemode": true, + // "withdrawableBalance": 0, + // "object": "user", + // "address": null, + // "name": "mobile1", + // "id": "LU8DI8V4NqlnFW6T3OG" + private String availableCoupons; + private String availableBalance; + private String withdrawableBalance; + private String id; + + public String getAvailableCoupons() { + return availableCoupons; + } + + public void setAvailableCoupons(String availableCoupons) { + this.availableCoupons = availableCoupons; + } + + public String getAvailableBalance() { + return availableBalance; + } + + public void setAvailableBalance(String availableBalance) { + this.availableBalance = availableBalance; + } + + public String getWithdrawableBalance() { + return withdrawableBalance; + } + + public void setWithdrawableBalance(String withdrawableBalance) { + this.withdrawableBalance = withdrawableBalance; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ScienceListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ScienceListBean.java new file mode 100644 index 0000000..51b4760 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ScienceListBean.java @@ -0,0 +1,55 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * ScienceBean.java + * 功能说明:科普bean ScienceListBean + */ +public class ScienceListBean extends BaseBean { + public List data; + + public class ScienceData { + public String uuid; + public String topic; + public String content; + public String submitDate; + public String modifyDate; + public int type; + public String recommendedUuid; + public String publisherUuid; + public int isOriginal; + public String path; + public String expertName; + public String summary; + public String imgPath; + public String agreenum;//点赞 + public String readnum;//阅读量 + + + public String getUuid() { + return uuid; + } + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ScientificBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ScientificBean.java new file mode 100644 index 0000000..aa378b9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ScientificBean.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * 我的科研 + * + * 类名称:ScientificBean + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-15 上午11:06:53 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class ScientificBean extends BaseBean { + public List data; + public class ScientificData { + public String projectName;//项目名称 + public String members;//提交者姓名 + public String expertUuid;//专家uuid + public String scientificResearchUuid;// + public String applyerCompany;//提交单位 + public String officeName;//科室名称 + public String mobile;//电话号码 + public String email;//电子邮箱 + public String applyerTime; //申请时间 + public String applyFile;//申请书下载文件(文件路径) + public String state;//申请状态 + public String projectType;//项目类型 (0其他项目 1平台项目) + public String applyerTimeStr;//"2015-12-22 10:53:42" + + //其他项目 + public String path;//路径 + public String imgs;//图片 + public String createDate;//时间 + public String endDate;//结束时间 + public String content;//内容 + public String createDateStr;//"2015-09-08 16:00:00" + public String contentText;//摘要 + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SearchHospitalBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SearchHospitalBean.java new file mode 100644 index 0000000..73b6590 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SearchHospitalBean.java @@ -0,0 +1,16 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class SearchHospitalBean extends BaseBean{ + Listdata; + + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SeriesVideoNewsListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SeriesVideoNewsListBean.java new file mode 100644 index 0000000..6071098 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SeriesVideoNewsListBean.java @@ -0,0 +1,81 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by wangchengxin on 2019/4/1. + */ + +public class SeriesVideoNewsListBean { + + + /** + * code : 200 + * data : [{"img":"series/img/2019/20190402104229.jpg","title":"系列视频5系列视频5系列视频5","uuid":"09049d47d5da4e978c05354bb18a0e3b"},{"img":"series/img/2019/20190402095040.jpg","title":"系列视频4","uuid":"c2f0e171ee464a31beae31a361bc0688"},{"img":"series/img/2019/20190401184848.png","title":"系列视频3系列视频3","uuid":"5091a25df1724c688c26caff8c2219eb"}] + * message : checkSign succeed + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * img : series/img/2019/20190402104229.jpg + * title : 系列视频5系列视频5系列视频5 + * uuid : 09049d47d5da4e978c05354bb18a0e3b + */ + + private String img; + private String title; + private String uuid; + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SettingInfoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SettingInfoBean.java new file mode 100644 index 0000000..a00d976 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SettingInfoBean.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +//获取医院,科室,职称,等列表 +public class SettingInfoBean extends BaseBean { + + public InfoData data; + public List special; + + public class InfoData { + + public String uuid;//唯一标识 + public String mobile;//手机号 + public String realName;//真实姓名 + public String photo;//头像路径 + public int sex;// 性别(0.男 1.女) + public String email;//邮箱 + public int provId;//省id + public int cityId;//市id + public int countyId;//区县id + public String birthDate;//出生日期 + public String hospitalUuid;//坐诊医院uuid + public String hospitalName;//坐诊医院名称 + public String officeUuid;//科室uuid + public String officeName;//科室名称 + public String officePhone;//科室电话 + public String positionName;//职称姓名 + public String positionUuid;//职称uuid + public String intro;//简介 + public String certificate;//执业资格证 + public String certificateImg;//执业资格证图片 + public String qrcode;//二维码 + public int state;//审核状态( 1.待审核 2.审核中 3.待补充资料 4.再次审核 5.拒绝 6.已通过) + public String checkInfo;//审核信息 + public String isStar;//是否是肝胆名医 0否 1是 + @Override + public String toString() { + return "InfoData [uuid=" + uuid + ", mobile=" + mobile + + ", realName=" + realName + ", photo=" + photo + ", sex=" + + sex + ", email=" + email + ", provId=" + provId + + ", cityId=" + cityId + ", countyId=" + countyId + + ", birthDate=" + birthDate + ", hospitalUuid=" + + hospitalUuid + ", hospitalName=" + hospitalName + + ", officeUuid=" + officeUuid + ", officeName=" + + officeName + ", officePhone=" + officePhone + + ", positionName=" + positionName + ", positionUuid=" + + positionUuid + ", intro=" + intro + ", certificate=" + + certificate + ", certificateImg=" + certificateImg + + ", qrcode=" + qrcode + ", isStar=" + isStar + "]"; + } + + + + } + public class SpecialData { + public String diseaseUuid;//专长 + public String diseaseName;//专长名称 + + @Override + public String toString() { + return "SpecialData [diseaseUuid=" + diseaseUuid + "]"; + } + + + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ShareCollectListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ShareCollectListBean.java new file mode 100644 index 0000000..7851bb3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ShareCollectListBean.java @@ -0,0 +1,32 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class ShareCollectListBean extends BaseBean { + + + public CollectListData data; + public class CollectListData { + public List list; + public int pageNumber ; + public int pageSize ; + public int totalPage ; + public int totalRow ; + } + + public class ShareList { + + public String uuid; + public String title;//标题; + public String createDate;//创建时间 + public String releaseTime; //发布时间 ” authorName”; + public String authorName;//作者名 只有<期刊杂志>有此字段 未标注的三个分类都具有 + public String des;//描述 只有<期刊杂志>有此字段 + public String summary;//摘要 + public String isCollect;// + public String libraryUuid;// + public String secondTitle;//副标题 + public String path;//静态路径 + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ShowBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ShowBean.java new file mode 100644 index 0000000..42a9856 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ShowBean.java @@ -0,0 +1,27 @@ +package cn.shangyu.gdxzExpert.bean; + +public class ShowBean { + int radio; + int liner; + + public ShowBean(int radio, int liner) { + this.radio = radio; + this.liner = liner; + } + + public int getRadio() { + return radio; + } + + public void setRadio(int radio) { + this.radio = radio; + } + + public int getLiner() { + return liner; + } + + public void setLiner(int liner) { + this.liner = liner; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SimpleBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SimpleBean.java new file mode 100644 index 0000000..ada6ded --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SimpleBean.java @@ -0,0 +1,40 @@ +package cn.shangyu.gdxzExpert.bean; + +public class SimpleBean { + private String code; + private String msg; + private String message; + private String data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SpinnerOption.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SpinnerOption.java new file mode 100644 index 0000000..4557500 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SpinnerOption.java @@ -0,0 +1,29 @@ +package cn.shangyu.gdxzExpert.bean; + +public class SpinnerOption { + private String id = ""; + private String text = ""; + + public SpinnerOption() { + id = ""; + text = ""; + } + + public SpinnerOption(String id, String text) { + this.id = id; + this.text = text; + } + + @Override + public String toString() { + return text; + } + + public String getId() { + return id; + } + + public String getText() { + return text; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/StartBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/StartBean.java new file mode 100644 index 0000000..ee53a9b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/StartBean.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +public class StartBean extends BaseBean { + // "data": { + // "uuid": null, + // "status": null, + // "note": null, + // "type": null, + // "path": "book/pdf/2016/20161110113530.png" + // }, + public Start data; + + public class Start { + String uuid; + String status; + String note; + String type; + String path; + String url; + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/StopOutPatientListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/StopOutPatientListBean.java new file mode 100644 index 0000000..1afc118 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/StopOutPatientListBean.java @@ -0,0 +1,147 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * Created by WANGChengXin on 2019/1/10. + */ + +public class StopOutPatientListBean implements Serializable { + + /** + * code : 200 + * data : [{"expire_date":"1547136000","uuid":"687822668a5b4b9aa27c4f204e203dc0","user_uuid":"HyuxWlUBRSolPUCKvHL","date_list":[{"param1":"2019-01-09","param2":"2019-01-09"},{"param1":"2019-01-09","param2":"2019-01-11"}],"note":"哈哈哈","status":1,"type":1},{"expire_date":"1549900800","uuid":"d492e5e3504d4b5ea0fd278f54fa2e16","user_uuid":"HyuxWlUBRSolPUCKvHL","date_list":[{"param1":"2019-02-12","param2":"2019-02-12"},{"param1":"2019-02-12","param2":"2019-02-12"}],"note":"额额额","status":1,"type":1},{"expire_date":"1547092800","uuid":"ee57c16cae774590b03126be7dba0906","user_uuid":"HyuxWlUBRSolPUCKvHL","date_list":[{"param1":"2019-01-10","param2":"上午"}],"note":"QQ","status":1,"type":3}] + * message : checkSign succeed + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean implements Serializable{ + /** + * expire_date : 1547136000 + * uuid : 687822668a5b4b9aa27c4f204e203dc0 + * user_uuid : HyuxWlUBRSolPUCKvHL + * date_list : [{"param1":"2019-01-09","param2":"2019-01-09"},{"param1":"2019-01-09","param2":"2019-01-11"}] + * note : 哈哈哈 + * status : 1 + * type : 1 + */ + + private String expire_date; + private String uuid; + private String user_uuid; + private String note; + private int status; + private int type; + private List date_list; + + public String getExpire_date() { + return expire_date; + } + + public void setExpire_date(String expire_date) { + this.expire_date = expire_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public List getDate_list() { + return date_list; + } + + public void setDate_list(List date_list) { + this.date_list = date_list; + } + + public static class DateListBean implements Serializable { + /** + * param1 : 2019-01-09 + * param2 : 2019-01-09 + */ + + private String param1; + private String param2; + + public String getParam1() { + return param1; + } + + public void setParam1(String param1) { + this.param1 = param1; + } + + public String getParam2() { + return param2; + } + + public void setParam2(String param2) { + this.param2 = param2; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SuggestBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SuggestBean.java new file mode 100644 index 0000000..ed9f46d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SuggestBean.java @@ -0,0 +1,166 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class SuggestBean extends BaseBeanNew{ + private sugBean data; + + public sugBean getData() { + return data; + } + + public void setData(sugBean data) { + this.data = data; + } + + public class sugBean extends BaseBeanList{ + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } + public class proBean + { + private String projectId; + private String departmentId; + private String name; + private String nickname; + private String sponsor;// 主办单位 string + private String executor;// 执行单位 string + private String content;// 项目内容 string + private String leader;// 主导专家 string + private List wechatImg;// 微信联系方式 string + private String beginDate;// 项目开始时间 string + private String endDate;// 项目结束时间 string + private String plannedNum;// 计划入组数 integer + private String status;// 项目状态:1进行中/0已结束 integer + private String applyStat;//e 项目申请:1开放式/0封闭式 integer + private String note;// + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getSponsor() { + return sponsor; + } + + public void setSponsor(String sponsor) { + this.sponsor = sponsor; + } + + public String getExecutor() { + return executor; + } + + public void setExecutor(String executor) { + this.executor = executor; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getLeader() { + return leader; + } + + public void setLeader(String leader) { + this.leader = leader; + } + + public List getWechatImg() { + return wechatImg; + } + + public void setWechatImg(List wechatImg) { + this.wechatImg = wechatImg; + } + + public String getBeginDate() { + return beginDate; + } + + public void setBeginDate(String beginDate) { + this.beginDate = beginDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getPlannedNum() { + return plannedNum; + } + + public void setPlannedNum(String plannedNum) { + this.plannedNum = plannedNum; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getApplyStat() { + return applyStat; + } + + public void setApplyStat(String applyStat) { + this.applyStat = applyStat; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/SuifagnBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SuifagnBean.java new file mode 100644 index 0000000..0c71665 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/SuifagnBean.java @@ -0,0 +1,143 @@ +package cn.shangyu.gdxzExpert.bean; + +public class SuifagnBean extends BaseBeanNew{ + private fangBean data; + + public fangBean getData() { + return data; + } + + public void setData(fangBean data) { + this.data = data; + } + + public class fangBean + { + private String suifangId;// 主键 integer(int64) + private String patientcaseId;// 关联病历 表 integer(int64) + private String suifangDate;// 随访时间 string(date) + private String type;// 类型 1基线数据 2随访数据 integer(int32) + private String patientgroup;// 患者分组 integer(int32) + private String yongyaoId;// 关联用药表 id integer(int64) + private String hbvSymbolId;// 关联 乙肝表面标志物及 HBV DNA integer(int64) + private String liverFunctionId;// 关联 肝功生化及肿瘤标志物 id integer(int64) + private String ctId;// 关联 腹部 B 超或 CT/MR integer(int64) + private String liverElasticityId;// 关联 肝脏弹性检查 id integer(int64) + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String createTime;// 创建时间 string(date-time) + private String updateTime;// + + public String getSuifangId() { + return suifangId; + } + + public void setSuifangId(String suifangId) { + this.suifangId = suifangId; + } + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public String getSuifangDate() { + return suifangDate; + } + + public void setSuifangDate(String suifangDate) { + this.suifangDate = suifangDate; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPatientgroup() { + return patientgroup; + } + + public void setPatientgroup(String patientgroup) { + this.patientgroup = patientgroup; + } + + public String getYongyaoId() { + return yongyaoId; + } + + public void setYongyaoId(String yongyaoId) { + this.yongyaoId = yongyaoId; + } + + public String getHbvSymbolId() { + return hbvSymbolId; + } + + public void setHbvSymbolId(String hbvSymbolId) { + this.hbvSymbolId = hbvSymbolId; + } + + public String getLiverFunctionId() { + return liverFunctionId; + } + + public void setLiverFunctionId(String liverFunctionId) { + this.liverFunctionId = liverFunctionId; + } + + public String getCtId() { + return ctId; + } + + public void setCtId(String ctId) { + this.ctId = ctId; + } + + public String getLiverElasticityId() { + return liverElasticityId; + } + + public void setLiverElasticityId(String liverElasticityId) { + this.liverElasticityId = liverElasticityId; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TagList.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TagList.java new file mode 100644 index 0000000..e50b7f6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TagList.java @@ -0,0 +1,67 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class TagList extends BaseBean { + + public List data; + + public class TagBean { + private String DES; + private String ID; + private String sort; + private String create_date; + private String TYPE; + // 主要 + private String NAME; + + public String getDES() { + return DES; + } + + public void setDES(String dES) { + DES = dES; + } + + public String getID() { + return ID; + } + + public void setID(String iD) { + ID = iD; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getTYPE() { + return TYPE; + } + + public void setTYPE(String tYPE) { + TYPE = tYPE; + } + + public String getNAME() { + return NAME; + } + + public void setNAME(String nAME) { + NAME = nAME; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingBean.java new file mode 100644 index 0000000..3e1cf79 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingBean.java @@ -0,0 +1,88 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class TestingBean extends BaseBean { + public List type_2; + public List roll; + + public class rollBean { + private String path; + private String imgpath; + private int id; + private String title; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + } + + public class type_2Bean { + private String imgpath; + private int id; + private String title; + private String contact; + + public String getContact() { + return contact; + } + + public void setContact(String contact) { + this.contact = contact; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingDetailBean.java new file mode 100644 index 0000000..396ce34 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TestingDetailBean.java @@ -0,0 +1,47 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class TestingDetailBean extends BaseBean { + public List data; + + public class Testingdetail { + private String path; + private String imgpath; + private int id; + private String title; + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/Testqqqqq.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/Testqqqqq.java new file mode 100644 index 0000000..b79ae3c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/Testqqqqq.java @@ -0,0 +1,249 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/1/18. + */ + +public class Testqqqqq { + + + /** + * note : {"note":"图佛陀饿的微信kkk","uuid":"2e094ae62ff04fc4ad4a68e6ef1a36b7"} + * code : 200 + * StopOutPatientList : 2019-01-17~2019-01-20;停诊 + 备注:哦哦哦 + 发表于(2019-01-17) + + 2019-01-18~2019-01-18;2019-01-19~2019-01-19;2019-01-19~2019-01-20;停诊 + 备注:做摸摸摸默默 + 发表于(2019-01-18) + * OutPatientList : {"pageSize":10,"pageNumber":1,"totalPage":1,"list":[{"office_name":"阿里","week":1,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"4dc7e1eb3cb44d27b297f8152788dc1f","day":"b","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"阿里","week":3,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"bc69d091e09a41fca876309be83866ec","day":"a","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"阿里","week":3,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"9ad9c5c1fd5546e8ad83995e2be87d86","day":"b","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"克拉克看看","week":3,"workplace_uuid":"92009de625254c338c50c58f649361e4","location":"啦啦啦啦","type":2,"uuid":"230d83a65332447aa54aa91a1f7f7496","day":"b","hospital_address":"内蒙古自治区锡林郭勒盟阿巴嘎旗巴彦查干西街8号","hospital_name":"阿巴嘎旗医院"},{"office_name":"阿里","week":3,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"81f16bed4a0240a8bd07677d5241b9fb","day":"c","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"克拉克看看","week":3,"workplace_uuid":"92009de625254c338c50c58f649361e4","location":"啦啦啦啦","type":2,"uuid":"f80ef9869c484a459a4b158d3d2f9d8e","day":"d","hospital_address":"内蒙古自治区锡林郭勒盟阿巴嘎旗巴彦查干西街8号","hospital_name":"阿巴嘎旗医院"},{"office_name":"阿里","week":7,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"8892ae51ade549ef896cd672b2f92d95","day":"c","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"}],"totalRow":7} + * message : checkSign succeed + */ + + private NoteBean note; + private String code; + private String StopOutPatientList; + private OutPatientListBean OutPatientList; + private String message; + + public NoteBean getNote() { + return note; + } + + public void setNote(NoteBean note) { + this.note = note; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getStopOutPatientList() { + return StopOutPatientList; + } + + public void setStopOutPatientList(String StopOutPatientList) { + this.StopOutPatientList = StopOutPatientList; + } + + public OutPatientListBean getOutPatientList() { + return OutPatientList; + } + + public void setOutPatientList(OutPatientListBean OutPatientList) { + this.OutPatientList = OutPatientList; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class NoteBean { + /** + * note : 图佛陀饿的微信kkk + * uuid : 2e094ae62ff04fc4ad4a68e6ef1a36b7 + */ + + private String note; + private String uuid; + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } + + public static class OutPatientListBean { + /** + * pageSize : 10 + * pageNumber : 1 + * totalPage : 1 + * list : [{"office_name":"阿里","week":1,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"4dc7e1eb3cb44d27b297f8152788dc1f","day":"b","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"阿里","week":3,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"bc69d091e09a41fca876309be83866ec","day":"a","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"阿里","week":3,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"9ad9c5c1fd5546e8ad83995e2be87d86","day":"b","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"克拉克看看","week":3,"workplace_uuid":"92009de625254c338c50c58f649361e4","location":"啦啦啦啦","type":2,"uuid":"230d83a65332447aa54aa91a1f7f7496","day":"b","hospital_address":"内蒙古自治区锡林郭勒盟阿巴嘎旗巴彦查干西街8号","hospital_name":"阿巴嘎旗医院"},{"office_name":"阿里","week":3,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"81f16bed4a0240a8bd07677d5241b9fb","day":"c","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"},{"office_name":"克拉克看看","week":3,"workplace_uuid":"92009de625254c338c50c58f649361e4","location":"啦啦啦啦","type":2,"uuid":"f80ef9869c484a459a4b158d3d2f9d8e","day":"d","hospital_address":"内蒙古自治区锡林郭勒盟阿巴嘎旗巴彦查干西街8号","hospital_name":"阿巴嘎旗医院"},{"office_name":"阿里","week":7,"workplace_uuid":"6fc6343c24ad43c69973767ea9fab694","location":"啦啦啦","type":2,"uuid":"8892ae51ade549ef896cd672b2f92d95","day":"c","hospital_address":"内蒙古自治区兴安盟科尔沁右翼前旗101省道附近","hospital_name":"阿力得尔中心卫生院"}] + * totalRow : 7 + */ + + private int pageSize; + private int pageNumber; + private int totalPage; + private int totalRow; + private List list; + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRow() { + return totalRow; + } + + public void setTotalRow(int totalRow) { + this.totalRow = totalRow; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * office_name : 阿里 + * week : 1 + * workplace_uuid : 6fc6343c24ad43c69973767ea9fab694 + * location : 啦啦啦 + * type : 2 + * uuid : 4dc7e1eb3cb44d27b297f8152788dc1f + * day : b + * hospital_address : 内蒙古自治区兴安盟科尔沁右翼前旗101省道附近 + * hospital_name : 阿力得尔中心卫生院 + */ + + private String office_name; + private int week; + private String workplace_uuid; + private String location; + private int type; + private String uuid; + private String day; + private String hospital_address; + private String hospital_name; + + public String getOffice_name() { + return office_name; + } + + public void setOffice_name(String office_name) { + this.office_name = office_name; + } + + public int getWeek() { + return week; + } + + public void setWeek(int week) { + this.week = week; + } + + public String getWorkplace_uuid() { + return workplace_uuid; + } + + public void setWorkplace_uuid(String workplace_uuid) { + this.workplace_uuid = workplace_uuid; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getDay() { + return day; + } + + public void setDay(String day) { + this.day = day; + } + + public String getHospital_address() { + return hospital_address; + } + + public void setHospital_address(String hospital_address) { + this.hospital_address = hospital_address; + } + + public String getHospital_name() { + return hospital_name; + } + + public void setHospital_name(String hospital_name) { + this.hospital_name = hospital_name; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketBean.java new file mode 100644 index 0000000..0785012 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketBean.java @@ -0,0 +1,157 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class TicketBean { + public String message; + public TDataBean data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public TDataBean getData() { + return data; + } + + public void setData(TDataBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class TDataBean + { + private int total; + private List list; + private int pages; + private int pageNum; + private Boolean isFirstPage; + private Boolean isLastPage; + private int pageSize; + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + } + public class TDetailBean + { + private String amount; + private String num; + private String create_date; + private String status; + private String id; + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getNum() { + return num; + } + + public void setNum(String num) { + this.num = num; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketDetailBean.java new file mode 100644 index 0000000..f489770 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TicketDetailBean.java @@ -0,0 +1,153 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class TicketDetailBean { + public String message; + public TDBean data; + public String msg; + public String code; + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public TDBean getData() { + return data; + } + + public void setData(TDBean data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public class TDBean{ + public String amount; + public String create_date; + public String user_uuid; + public String down_url; + public String tax_number; + public String email; + public String head; + public String status; + public String note; + public String id; + public String type; + public List excellencourseList; + + public String getAmount() { + return amount; + } + + public void setAmount(String amount) { + this.amount = amount; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUser_uuid() { + return user_uuid; + } + + public void setUser_uuid(String user_uuid) { + this.user_uuid = user_uuid; + } + + public String getDown_url() { + return down_url; + } + + public void setDown_url(String down_url) { + this.down_url = down_url; + } + + public String getTax_number() { + return tax_number; + } + + public void setTax_number(String tax_number) { + this.tax_number = tax_number; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getHead() { + return head; + } + + public void setHead(String head) { + this.head = head; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List getExcellencourseList() { + return excellencourseList; + } + + public void setExcellencourseList(List excellencourseList) { + this.excellencourseList = excellencourseList; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TimestampBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TimestampBean.java new file mode 100644 index 0000000..eba1dce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TimestampBean.java @@ -0,0 +1,15 @@ +package cn.shangyu.gdxzExpert.bean; + +public class TimestampBean { + + private String timestamp; + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeBean.java new file mode 100644 index 0000000..d408dc5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeBean.java @@ -0,0 +1,17 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class TreeBean extends BaseBeanNew{ + private List data; + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeDetailBean.java new file mode 100644 index 0000000..f3f65c8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/TreeDetailBean.java @@ -0,0 +1,80 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +public class TreeDetailBean extends ChildTree implements Serializable +{ + // private String title;// 标题 string +// private String key;// 唯一标识 string +// private String formRefKey;// 表单key string +// private String date;// 日期 string +// private String dataStatus;// 录入状态 0未录入 1部分录入 2已录入 integer(int32) +// private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) +// private String apiId;// + private List children; + + // public String getTitle() { +// return title; +// } +// +// public void setTitle(String title) { +// this.title = title; +// } +// +// public String getKey() { +// return key; +// } +// +// public void setKey(String key) { +// this.key = key; +// } +// +// public String getFormRefKey() { +// return formRefKey; +// } +// +// public void setFormRefKey(String formRefKey) { +// this.formRefKey = formRefKey; +// } +// +// public String getDate() { +// return date; +// } +// +// public void setDate(String date) { +// this.date = date; +// } +// +// public String getDataStatus() { +// return dataStatus; +// } +// +// public void setDataStatus(String dataStatus) { +// this.dataStatus = dataStatus; +// } +// +// public String getSdvStatus() { +// return sdvStatus; +// } +// +// public void setSdvStatus(String sdvStatus) { +// this.sdvStatus = sdvStatus; +// } +// +// public String getApiId() { +// return apiId; +// } +// +// public void setApiId(String apiId) { +// this.apiId = apiId; +// } +// + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/UGoodsBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/UGoodsBean.java new file mode 100644 index 0000000..46eadfe --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/UGoodsBean.java @@ -0,0 +1,124 @@ +package cn.shangyu.gdxzExpert.bean; + +public class UGoodsBean { + + /** + * code : 200 + * data : {"img":"book/pdf/2018/20181026181358.png","times":19,"name":"肝胆相照知识U盘","detial_imgpath":"goods/iORHnThuNk2FCPrYRYv.png","bonuspoints":12,"type":1,"uuid":"ca1656f03cf84784a37e1e4bd99fd302","detail_path":"html/goods/ca1656f03cf84784a37e1e4bd99fd302.html"} + * message : checkSign succeed + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * img : book/pdf/2018/20181026181358.png + * times : 19 + * name : 肝胆相照知识U盘 + * detial_imgpath : goods/iORHnThuNk2FCPrYRYv.png + * bonuspoints : 12 + * type : 1 + * uuid : ca1656f03cf84784a37e1e4bd99fd302 + * detail_path : html/goods/ca1656f03cf84784a37e1e4bd99fd302.html + */ + + private String img; + private int times; + private String name; + private String detial_imgpath; + private int bonuspoints; + private int type; + private String uuid; + private String detail_path; + + public String getImg() { + return img; + } + + public void setImg(String img) { + this.img = img; + } + + public int getTimes() { + return times; + } + + public void setTimes(int times) { + this.times = times; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDetial_imgpath() { + return detial_imgpath; + } + + public void setDetial_imgpath(String detial_imgpath) { + this.detial_imgpath = detial_imgpath; + } + + public int getBonuspoints() { + return bonuspoints; + } + + public void setBonuspoints(int bonuspoints) { + this.bonuspoints = bonuspoints; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getDetail_path() { + return detail_path; + } + + public void setDetail_path(String detail_path) { + this.detail_path = detail_path; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/UserDataBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/UserDataBean.java new file mode 100644 index 0000000..ef73288 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/UserDataBean.java @@ -0,0 +1,41 @@ +package cn.shangyu.gdxzExpert.bean; + + +/** + * 类名称:推送扩展字段 + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-9 下午2:01:59 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class UserDataBean { + + public userData data; + public String type; + +// type=1:专家同意患者的随访申请。 +// type=2:专家拒绝患者的随访申请。 +// type=3:专家抢答成功公益咨询。 + +// type=4:专家解除患者的随访关系。 +// type=5:患者解除专家的随访关系。 +// type=6:订单消息 +// type=7:系统消息 + + public class userData { + /** + * 姓名 + */ + public String name; + /** + * photo + */ + public String photo; + /** + * uuid + */ + public String uuid; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VersionBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VersionBean.java new file mode 100644 index 0000000..a4d469f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VersionBean.java @@ -0,0 +1,15 @@ +package cn.shangyu.gdxzExpert.bean; + +public class VersionBean extends BaseBean { + + public VersionData data; + public class VersionData { + public String appType;//1专家端 2患者端 + public String path; + public String sysType;//1.android 2.ios + public String version ; + public String uuid ; + public String intro ; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBean.java new file mode 100644 index 0000000..ad8c9a0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBean.java @@ -0,0 +1,211 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class VideoBean extends BaseBean { + // "data": [ + // { + // "video": [ + // { + + // } + // ], + // "sort": 0, + // "uuid": "98005cdfaa2e4db5b60c2a1b91ec99d9", + // "status": 1, + // "note": "肝胆会议", + // "name": "肝胆会议" + // }, + public List data; + + public class VideoData { + private String sort; + private String uuid; + private String status; + private String note; + private String name; + public List video; + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + } + + public class VideoB { + // "type_uuid": "98005cdfaa2e4db5b60c2a1b91ec99d9", + // "public_name": "肝胆想照", + // "imgpath": "book/pdf/2016/20161111160405.png", + // "sort": 0, + // "uuid": "4e84813d87674e20b4033ab01ad6b50f", + // "create_date": "2016-11-11 16:04:10", + // "readnum": 0, + // "status": 1, + // "name": "雁栖湖会议回放", + // "path": "html/video/4e84813d87674e20b4033ab01ad6b50f.html" + private String type_uuid; + private String public_name; + private String imgpath; + private String sort; + private String uuid; + private String create_date; + private String readnum; + private String status; + private String name; + private String path; + private String note; + private String content; + private String polyv_uuid; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getPolyv_uuid() { + return polyv_uuid; + } + + public void setPolyv_uuid(String polyv_uuid) { + this.polyv_uuid = polyv_uuid; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getType_uuid() { + return type_uuid; + } + + public void setType_uuid(String type_uuid) { + this.type_uuid = type_uuid; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBeanNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBeanNew.java new file mode 100644 index 0000000..06bc7fd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoBeanNew.java @@ -0,0 +1,68 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class VideoBeanNew extends BaseBean { + + public List data; + + public class VideoData { + + public String name; + public List list; + + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + } + + public class VideoB { + + private String uuid; + private String create_date; + private String name; + + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoDetailBean.java new file mode 100644 index 0000000..9d53875 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoDetailBean.java @@ -0,0 +1,406 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/3/27. + */ + +public class VideoDetailBean { + + /** + * code : 200 + * data : {"code":200,"data":[{"df":2,"seed":0,"first_image":"http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","playerwidth":"600","filesize":[61157232,86602971],"title":"09Joern Schattenberg教授 NAFLD - identifying patients at risk and considering treatment","vid":"cfb7a69a75608a0df9cf03ac888470a5_c","mp4_1":"http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.mp4","duration":"00:25:01","times":"14","mp4_2":"http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.mp4","md5checksum":"6c5f4e1f96bfc765434a8857113f8c4f","images_b":["cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5_b.jpg"],"context":"","cataid":"1553225083951","tag":"","ptime":"2019-03-22 11:33:29","source_filesize":86012414,"sourcefile":"","default_video":"http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.flv","images":["cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5.jpg"],"previewVid":"omnp4l39l48305l0kn9mn06lm555740l8_m","hls":["http://hls.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.m3u8","http://hls.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.m3u8"],"mp4":"http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.mp4","flv1":"http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.flv","flv2":"http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.flv","imageUrls":["http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5.jpg"],"original_definition":"1280x720","playerheight":"337","swf_link":"http://player.polyv.net/videos/cfb7a69a75608a0df9cf03ac888470a5_c.swf","status":"61"}],"message":"success","status":"success"} + * message : query succeed + */ + + private String code; + private DataBeanX data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBeanX getData() { + return data; + } + + public void setData(DataBeanX data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBeanX { + /** + * code : 200 + * data : [{"df":2,"seed":0,"first_image":"http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","playerwidth":"600","filesize":[61157232,86602971],"title":"09Joern Schattenberg教授 NAFLD - identifying patients at risk and considering treatment","vid":"cfb7a69a75608a0df9cf03ac888470a5_c","mp4_1":"http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.mp4","duration":"00:25:01","times":"14","mp4_2":"http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.mp4","md5checksum":"6c5f4e1f96bfc765434a8857113f8c4f","images_b":["cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5_b.jpg"],"context":"","cataid":"1553225083951","tag":"","ptime":"2019-03-22 11:33:29","source_filesize":86012414,"sourcefile":"","default_video":"http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.flv","images":["cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5.jpg"],"previewVid":"omnp4l39l48305l0kn9mn06lm555740l8_m","hls":["http://hls.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.m3u8","http://hls.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.m3u8"],"mp4":"http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.mp4","flv1":"http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.flv","flv2":"http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.flv","imageUrls":["http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5.jpg"],"original_definition":"1280x720","playerheight":"337","swf_link":"http://player.polyv.net/videos/cfb7a69a75608a0df9cf03ac888470a5_c.swf","status":"61"}] + * message : success + * status : success + */ + + private int code; + private String message; + private String status; + private List data; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * df : 2 + * seed : 0 + * first_image : http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg + * playerwidth : 600 + * filesize : [61157232,86602971] + * title : 09Joern Schattenberg教授 NAFLD - identifying patients at risk and considering treatment + * vid : cfb7a69a75608a0df9cf03ac888470a5_c + * mp4_1 : http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.mp4 + * duration : 00:25:01 + * times : 14 + * mp4_2 : http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.mp4 + * md5checksum : 6c5f4e1f96bfc765434a8857113f8c4f + * images_b : ["cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4_b.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5_b.jpg"] + * context : + * cataid : 1553225083951 + * tag : + * ptime : 2019-03-22 11:33:29 + * source_filesize : 86012414 + * sourcefile : + * default_video : http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.flv + * images : ["cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4.jpg","cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5.jpg"] + * previewVid : omnp4l39l48305l0kn9mn06lm555740l8_m + * hls : ["http://hls.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.m3u8","http://hls.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.m3u8"] + * mp4 : http://mpv.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.mp4 + * flv1 : http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.flv + * flv2 : http://plvod01.videocc.net/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.flv + * imageUrls : ["http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_0.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_1.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_2.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_3.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_4.jpg","http://img.videocc.net/uimage/c/cfb7a69a75/5/cfb7a69a75608a0df9cf03ac888470a5_5.jpg"] + * original_definition : 1280x720 + * playerheight : 337 + * swf_link : http://player.polyv.net/videos/cfb7a69a75608a0df9cf03ac888470a5_c.swf + * status : 61 + */ + + private int df; + private int seed; + private String first_image; + private String playerwidth; + private String title; + private String vid; + private String mp4_1; + private String duration; + private String times; + private String mp4_2; + private String md5checksum; + private String context; + private String cataid; + private String tag; + private String ptime; + private int source_filesize; + private String sourcefile; + private String default_video; + private String previewVid; + private String mp4; + private String flv1; + private String flv2; + private String original_definition; + private String playerheight; + private String swf_link; + private String status; + private List filesize; + private List images_b; + private List images; + private List hls; + private List imageUrls; + + public int getDf() { + return df; + } + + public void setDf(int df) { + this.df = df; + } + + public int getSeed() { + return seed; + } + + public void setSeed(int seed) { + this.seed = seed; + } + + public String getFirst_image() { + return first_image; + } + + public void setFirst_image(String first_image) { + this.first_image = first_image; + } + + public String getPlayerwidth() { + return playerwidth; + } + + public void setPlayerwidth(String playerwidth) { + this.playerwidth = playerwidth; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getVid() { + return vid; + } + + public void setVid(String vid) { + this.vid = vid; + } + + public String getMp4_1() { + return mp4_1; + } + + public void setMp4_1(String mp4_1) { + this.mp4_1 = mp4_1; + } + + public String getDuration() { + return duration; + } + + public void setDuration(String duration) { + this.duration = duration; + } + + public String getTimes() { + return times; + } + + public void setTimes(String times) { + this.times = times; + } + + public String getMp4_2() { + return mp4_2; + } + + public void setMp4_2(String mp4_2) { + this.mp4_2 = mp4_2; + } + + public String getMd5checksum() { + return md5checksum; + } + + public void setMd5checksum(String md5checksum) { + this.md5checksum = md5checksum; + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public String getCataid() { + return cataid; + } + + public void setCataid(String cataid) { + this.cataid = cataid; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getPtime() { + return ptime; + } + + public void setPtime(String ptime) { + this.ptime = ptime; + } + + public int getSource_filesize() { + return source_filesize; + } + + public void setSource_filesize(int source_filesize) { + this.source_filesize = source_filesize; + } + + public String getSourcefile() { + return sourcefile; + } + + public void setSourcefile(String sourcefile) { + this.sourcefile = sourcefile; + } + + public String getDefault_video() { + return default_video; + } + + public void setDefault_video(String default_video) { + this.default_video = default_video; + } + + public String getPreviewVid() { + return previewVid; + } + + public void setPreviewVid(String previewVid) { + this.previewVid = previewVid; + } + + public String getMp4() { + return mp4; + } + + public void setMp4(String mp4) { + this.mp4 = mp4; + } + + public String getFlv1() { + return flv1; + } + + public void setFlv1(String flv1) { + this.flv1 = flv1; + } + + public String getFlv2() { + return flv2; + } + + public void setFlv2(String flv2) { + this.flv2 = flv2; + } + + public String getOriginal_definition() { + return original_definition; + } + + public void setOriginal_definition(String original_definition) { + this.original_definition = original_definition; + } + + public String getPlayerheight() { + return playerheight; + } + + public void setPlayerheight(String playerheight) { + this.playerheight = playerheight; + } + + public String getSwf_link() { + return swf_link; + } + + public void setSwf_link(String swf_link) { + this.swf_link = swf_link; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public List getFilesize() { + return filesize; + } + + public void setFilesize(List filesize) { + this.filesize = filesize; + } + + public List getImages_b() { + return images_b; + } + + public void setImages_b(List images_b) { + this.images_b = images_b; + } + + public List getImages() { + return images; + } + + public void setImages(List images) { + this.images = images; + } + + public List getHls() { + return hls; + } + + public void setHls(List hls) { + this.hls = hls; + } + + public List getImageUrls() { + return imageUrls; + } + + public void setImageUrls(List imageUrls) { + this.imageUrls = imageUrls; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoMoreBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoMoreBean.java new file mode 100644 index 0000000..b3d3d65 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoMoreBean.java @@ -0,0 +1,139 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class VideoMoreBean extends BaseBean { + +// {"code":"1","data":{"pageNumber":1,"pageSize":20,"totalPage":1,"list":[{"video_type_name":"0-第五届上海国际消化系统疾病会议","path":"html/video/fe99a028dc80464b8c79aa87f4ef7145.html","type_uuid":"4bba35a661d84ae0ac3999b7ecf2c8a3","readnum":0,"imgpath":"book/pdf/2019/20190613141329.png","name":"乙型肝炎","create_date":"2018-06-22 15:17:55","public_name":"是","uuid":"fe99a028dc80464b8c79aa87f4ef7145"},{"video_type_name":"123","path":"html/video/0a684f5c8348439ca6518a6263dc5548.html","type_uuid":"0bcf0ee84d404fe3b964d3da5c11df1c","readnum":0,"imgpath":"book/pdf/2019/20190613140643.png","name":"HBV","create_date":"2018-04-04 10:01:55","public_name":"HBV","uuid":"0a684f5c8348439ca6518a6263dc5548"},{"video_type_name":"上海肝病论坛","path":"html/video/926d8927096b456bb26db7ee37ebb922.html","type_uuid":"eb628b01425042d68751e244d29eb09a","readnum":4,"imgpath":"book/pdf/2019/20190613140502.png","name":"乙肝多一次","create_date":"2018-06-21 18:28:09","public_name":"阿萨德","uuid":"926d8927096b456bb26db7ee37ebb922"},{"video_type_name":"0-安徽省第十四届肝病学术年会","path":"html/video/e269667c20f44beeab4d6219e40651c7.html","type_uuid":"65b9a3e050424c71b856edbc3af56317","readnum":91,"imgpath":"book/pdf/2018/20180515153443.jpg","name":"为什么乙肝抗病毒治疗后,仍需注意原发性肝癌的发生?","create_date":"2018-06-22 14:32:16","public_name":"贾继东","uuid":"e269667c20f44beeab4d6219e40651c7"},{"video_type_name":"0-安徽省第十四届肝病学术年会","path":"html/video/6dc35332e3814c419b53738e6c32e2a4.html","type_uuid":"65b9a3e050424c71b856edbc3af56317","readnum":75,"imgpath":"book/pdf/2018/20180515153527.jpg","name":"什么是乙肝五项?“大三阳”和“小三阳”又是怎么回事?","create_date":"2018-06-22 14:32:16","public_name":"侯金林","uuid":"6dc35332e3814c419b53738e6c32e2a4"},{"video_type_name":"0-安徽省第十四届肝病学术年会","path":"html/video/41227c0ae0bb42ffa51f125434e7201d.html","type_uuid":"65b9a3e050424c71b856edbc3af56317","readnum":58,"imgpath":"book/pdf/2018/20180515153453.jpg","name":"和乙肝病毒阳性的人一起生活是不是很危险?","create_date":"2018-06-22 14:32:16","public_name":"段钟平","uuid":"41227c0ae0bb42ffa51f125434e7201d"},{"video_type_name":"0-安徽省第十四届肝病学术年会","path":"html/video/07728f5bb22e4bc2a02ed1fb2d665715.html","type_uuid":"65b9a3e050424c71b856edbc3af56317","readnum":23,"imgpath":"book/pdf/2018/20180515153507.jpg","name":"乙肝妈妈可以进行母乳喂养吗?","create_date":"2018-06-22 14:32:16","public_name":"段钟平","uuid":"07728f5bb22e4bc2a02ed1fb2d665715"},{"video_type_name":"0-安徽省第十四届肝病学术年会","path":"html/video/2e391d09612d452daf907e62812d65f2.html","type_uuid":"65b9a3e050424c71b856edbc3af56317","readnum":8,"imgpath":"book/pdf/2018/20180515153518.jpg","name":"为什么乙肝患者要做病毒的定量检测?","create_date":"2018-06-22 14:32:16","public_name":"宁琴","uuid":"2e391d09612d452daf907e62812d65f2"},{"video_type_name":"0-安徽省第十四届肝病学术年会","path":"html/video/430fd29e01594aaf8e92509693860d83.html","type_uuid":"65b9a3e050424c71b856edbc3af56317","readnum":4,"imgpath":"book/pdf/2018/20180515153540.jpg","name":"乙肝患者做肝脏超声检查有什么作用?","create_date":"2018-06-22 14:32:16","public_name":"宁琴","uuid":"430fd29e01594aaf8e92509693860d83"},{"video_type_name":"全国青年医师肝病知识大赛","path":"html/video/c2980937f85347f394fcfc1fed4fef9c.html","type_uuid":"yishi","readnum":18,"imgpath":"book/pdf/2018/20180307101140.png","name":"肝语视频微课堂—乙肝抗病毒治疗","create_date":"2018-04-19 11:23:21","public_name":"朱冰","uuid":"c2980937f85347f394fcfc1fed4fef9c"},{"video_type_name":"继续住院治疗先保肝降酶周后可加抗病毒药物降酶周","path":"html/video/d1fb9d967e364677abc983eba2490fa9.html","type_uuid":"58ca5d18280948a69e78b90130efbacd","readnum":15,"imgpath":"book/pdf/2017/20170704141258.jpg","name":"慢性乙型肝炎重要治疗策略","create_date":"2018-04-04 09:44:30","public_name":"王宇明","uuid":"d1fb9d967e364677abc983eba2490fa9"}],"totalRow":11},"message":"查询成功"} + + public VideoMoreData data; + + public class VideoMoreData { + public List list; + public int pageNumber; + public int pageSize; + public int totalPage; + public int totalRow; + } + + public class VideoMore { + private String type_uuid; + private String public_name; + private String imgpath; + private String sort; + private String uuid; + private String create_date; + private String status; + private String name; + private String path; + private String readnum; + private String note; + private String video_type_name; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getVideo_type_name() { + return video_type_name; + } + + public void setVideo_type_name(String video_type_name) { + this.video_type_name = video_type_name; + } + + public String getType_uuid() { + return type_uuid; + } + + public void setType_uuid(String type_uuid) { + this.type_uuid = type_uuid; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getSort() { + return sort; + } + + public void setSort(String sort) { + this.sort = sort; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoOrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoOrderBean.java new file mode 100644 index 0000000..c96cb69 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoOrderBean.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by wangchengxin on 2019/4/3. + */ + +public class VideoOrderBean { + + /** + * code : 200 + * order_uuid : fa422f738f2d413a977d1caa281b8a0e + * message : query succeed + */ + + private String code; + private String order_uuid; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getOrder_uuid() { + return order_uuid; + } + + public void setOrder_uuid(String order_uuid) { + this.order_uuid = order_uuid; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoRollBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoRollBean.java new file mode 100644 index 0000000..92d8fdc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoRollBean.java @@ -0,0 +1,95 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class VideoRollBean { + + /** + * code : 200 + * data : [{"path":"html/video/71c40238f4754c6a8ad4e6531e150a2c.html","imgpath":"book/pdf/2019/20191101112821.png","name":" \u201c紫藤石透疹饮\u201d治疗成人麻疹出疹期的临床研究","uuid":"71c40238f4754c6a8ad4e6531e150a2c"},{"path":"html/video/d938701deaa6459b96975d31cc67f4f9.html","imgpath":"book/pdf/2019/20191101112557.png","name":"中草药相关肝损伤的临床分析","uuid":"d938701deaa6459b96975d31cc67f4f9"}] + * message : 查询成功 + */ + + private String code; + private String message; + private List data; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public static class DataBean { + /** + * path : html/video/71c40238f4754c6a8ad4e6531e150a2c.html + * imgpath : book/pdf/2019/20191101112821.png + * name : “紫藤石透疹饮”治疗成人麻疹出疹期的临床研究 + * uuid : 71c40238f4754c6a8ad4e6531e150a2c + */ + + private String path; + private String imgpath; + private String name; + private String uuid; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoTeachDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoTeachDetailBean.java new file mode 100644 index 0000000..e31efbc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoTeachDetailBean.java @@ -0,0 +1,180 @@ +package cn.shangyu.gdxzExpert.bean; + +/** + * Created by WANGChengXin on 2019/11/2. + */ + +public class VideoTeachDetailBean { + + /** + * code : 200 + * video : {"note":"《医学微视》是为了提高公民医学素养水平,以\u201c多了解一点权威医学知识,就多一分健康保障\u201d为主旨,主要是针对文字信息很难理解的现状,将公众最关心的医药知识和疾病知识,通过权威医药专家生动形象、通俗化、专业化的讲解,录成短视频的形式,借助互联网、IPAD、智能手机渠道传播给公众,利于公众理解、信任和接受, 帮助公众多了解一些疾病知识。\n\n范建高,男,主任医师,教授,科主任,博士生导师、博士后流动站指导教师,教育部新世纪优秀人才,澳大利亚国立大学访问学者。上海市肝病学会副主任委员,中华肝病学会脂肪肝和酒精性肝病学组组长,国际动脉硬化学会中国分会理事、国际肝胆胰学会中国分会内科委员、亚太地区非酒精性脂肪性肝病以及原发性肝癌预防和监测专家组成员、WHO慢病与代谢工作组成员。\n\n范建高教授擅长消化系统疾病特别是慢性肝病的诊治,在脂肪肝、酒精性肝病以及肥胖、糖尿病、高脂血症合并肝损伤的处理方面造诣很深。\n","path":"html/video/0cb8ca86ed2843bea26b48314b7d86c4.html","readnum":27,"imgpath":"book/pdf/2019/20191101114900.png","name":"酒精肝是怎么回事","isCollection":0,"polyv_uuid":"cfb7a69a7531f6312a4d7bd01d7a4a3b_c","uuid":"0cb8ca86ed2843bea26b48314b7d86c4","public_name":"范建高","content":" +
+ + * point : 1 + */ + + private String note; + private String path; + private int readnum; + private String imgpath; + private String name; + private int isCollection; + private String polyv_uuid; + private String uuid; + private String public_name; + private String content; + private int point; + private String tags; + + public String getTags() { + return tags; + } + + public void setTags(String tags) { + this.tags = tags; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public int getReadnum() { + return readnum; + } + + public void setReadnum(int readnum) { + this.readnum = readnum; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getIsCollection() { + return isCollection; + } + + public void setIsCollection(int isCollection) { + this.isCollection = isCollection; + } + + public String getPolyv_uuid() { + return polyv_uuid; + } + + public void setPolyv_uuid(String polyv_uuid) { + this.polyv_uuid = polyv_uuid; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getPoint() { + return point; + } + + public void setPoint(int point) { + this.point = point; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoWatchRecordBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoWatchRecordBean.java new file mode 100644 index 0000000..09502f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VideoWatchRecordBean.java @@ -0,0 +1,232 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2019/10/30. + */ + +public class VideoWatchRecordBean { + + /** + * code : 200 + * data : {"list":[{"video_name":"sd","path":"html/video/80c7eb329004478aabdadb7eaaa39bfb.html","user_name":"杰瑞2","imgpath":"book/pdf/2017/20170519091511.JPG","polyv_uuid":"","public_name":"sd","content":" +
+ + * status : 1 + */ + + private String video_name; + private String path; + private String user_name; + private String imgpath; + private String polyv_uuid; + private String public_name; + private String content; + private String video_uuid; + private int status; + private String video_type;//(1肝胆视频 2患教视频) + + public String getVideo_type() { + return video_type; + } + + public void setVideo_type(String video_type) { + this.video_type = video_type; + } + + public String getVideo_uuid() { + return video_uuid; + } + + public void setVideo_uuid(String video_uuid) { + this.video_uuid = video_uuid; + } + + public String getVideo_name() { + return video_name; + } + + public void setVideo_name(String video_name) { + this.video_name = video_name; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getUser_name() { + return user_name; + } + + public void setUser_name(String user_name) { + this.user_name = user_name; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getPolyv_uuid() { + return polyv_uuid; + } + + public void setPolyv_uuid(String polyv_uuid) { + this.polyv_uuid = polyv_uuid; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VipOrderBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VipOrderBean.java new file mode 100644 index 0000000..a22cfce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VipOrderBean.java @@ -0,0 +1,47 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * 功能说明:vip,服务订单bean + */ +public class VipOrderBean extends BaseBean { + public List data; + + public class DataList { + public String uuid;//唯一标示 + public String patientUuid;//患者uuid + public String expertUuid;//专家uuid + public String realName;//真实姓名 + public String photo;//头像 + public String orderNum;//订单号 + public String price;//价格 + public String startDate;//预约时间 + public String vip;//是否为vip 0.不是 1.是 + public String leftDay;//包月 显示剩余多少天 如果值为-1表示已到期 + public String orderType;//1.电话 2.门诊 3.包月 + public String orderDate;//订单创建时间 + public String createDate;//申请时间 + public String payStatus;//支付状态 0.未支付 1.已支付 + /** + * 1.待审核2.已审核3.未通过审核 4.已关闭 5.审核前患者取消订单 6.审核后患者取消订单 7.审核后医生取消订单 8.已完成 9.已结算 + */ + public String orderStatus; + + //下面是订单详情增加的 + //如果是电话预约 data详情 + public String howLong;//电话咨询(分钟)或者包月(月)时长 + public String checkDate;//审核时间 + public String monthUuid;//包月uuid + public String endDate;//结束时间 + + //如果是门诊预约 data详情为 + public String clinicDate;//门诊预约时间 + public String morAft;//1.上午 2.下午 + + //如果是鲜花 data详情为 + public String num;//数量 + public String totalPrice;//总价 + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanBean.java new file mode 100644 index 0000000..e19a3f2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanBean.java @@ -0,0 +1,47 @@ +package cn.shangyu.gdxzExpert.bean; + +public class VisitPlanBean { + private boolean isChecked; + private String context; + private String date; + private String week; + + public String getWeek() { + return week; + } + + public void setWeek(String week) { + this.week = week; + } + + public boolean isChecked() { + return isChecked; + } + + public void setChecked(boolean isChecked) { + this.isChecked = isChecked; + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + @Override + public String toString() { + return "VisitPlanBean [isChecked=" + isChecked + ", context=" + context + + ", date=" + date + "]"; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanListBean.java new file mode 100644 index 0000000..4297c0d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/VisitPlanListBean.java @@ -0,0 +1,132 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.Collection; +import java.util.List; + +/** + * + * @author ZHAODeWei + * + */ +public class VisitPlanListBean extends BaseBean { + public VisitListData data; + + public class VisitListData { + public Collection list; + public int pageNumber; + public int pageSize; + public int totalRow; + } + + public class Datas { + String expertname; + String patientname; + String patient_uuid; + String isremindpatient; + String datetime; + String isremindme; + String createdate; + String uuid; + String expert_uuid; + String status; + String note; + String type; + + public String getExpertname() { + return expertname; + } + + public void setExpertname(String expertname) { + this.expertname = expertname; + } + + public String getPatientname() { + return patientname; + } + + public void setPatientname(String patientname) { + this.patientname = patientname; + } + + public String getPatient_uuid() { + return patient_uuid; + } + + public void setPatient_uuid(String patient_uuid) { + this.patient_uuid = patient_uuid; + } + + public String getIsremindpatient() { + return isremindpatient; + } + + public void setIsremindpatient(String isremindpatient) { + this.isremindpatient = isremindpatient; + } + + public String getDatetime() { + return datetime; + } + + public void setDatetime(String datetime) { + this.datetime = datetime; + } + + public String getIsremindme() { + return isremindme; + } + + public void setIsremindme(String isremindme) { + this.isremindme = isremindme; + } + + public String getCreatedate() { + return createdate; + } + + public void setCreatedate(String createdate) { + this.createdate = createdate; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFArticleListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFArticleListBean.java new file mode 100644 index 0000000..aa5464c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFArticleListBean.java @@ -0,0 +1,99 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * + * @author ZHAODeWei 万方医学获取列表 + */ +public class WFArticleListBean { + // "Total": 12551, + // "Records": [ + // { + // "ArticleID": "gz200001002", + // "Title": "慢性肝炎病理分类与临床的关系", + // "Creator": "李缨|LI Ying;翟为溶|ZHAI Weirong;张清波|ZHANG Qingbo", + // "Source": "肝脏", + // "KeyWords": "慢性肝炎;病理分类;临床指标", + // "Year": 2000, + // "DBID": "WF_QK" + // }, + + private long Total; + public List Records; + + public long getTotal() { + return Total; + } + + public void setTotal(long total) { + Total = total; + } + + public class ArticleBase { + private String ArticleID; + private String Title; + private String Creator; + private String Source; + private String KeyWords; + private int Year; + private String DBID; + + public String getArticleID() { + return ArticleID; + } + + public void setArticleID(String articleID) { + ArticleID = articleID; + } + + public String getTitle() { + return Title; + } + + public void setTitle(String title) { + Title = title; + } + + public String getCreator() { + return Creator; + } + + public void setCreator(String creator) { + Creator = creator; + } + + public String getSource() { + return Source; + } + + public void setSource(String source) { + Source = source; + } + + public String getKeyWords() { + return KeyWords; + } + + public void setKeyWords(String keyWords) { + KeyWords = keyWords; + } + + public int getYear() { + return Year; + } + + public void setYear(int year) { + Year = year; + } + + public String getDBID() { + return DBID; + } + + public void setDBID(String dBID) { + DBID = dBID; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFCollectBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFCollectBean.java new file mode 100644 index 0000000..132954e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFCollectBean.java @@ -0,0 +1,179 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class WFCollectBean extends BaseBean { + public WFCollectBeanList data; + + public class WFCollectBeanList { + public List list; + public int pageNumber; + public int pageSize; + public int totalPage; + public int totalRow; + } + + public class WFBean { + // "title": "APASL、EASL、A.ASLD和Keeffe慢性乙型肝炎治疗共识(指南)的临床价值", + // "summary": null, + // "createDate": "2016-07-22 08:40:33", + // "uuid": "3922c917ae5247c7a97100b173f1e8b2", + // "des": null, + // "creator": "于乐成|YU Yue-cheng;陈成伟|CHEN Cheng-wei;姚光弼|YAO Guang-bi", + // "libraryUuid": null, + // "articleID": "gz200901002", + // "keyWords": "", + // "authorName": null, + // "releaseTime": null, + // "secondTitle": null, + // "isCollect": 1, + // "year": "2009", + // "source": "肝脏", + // "path": null + private String title; + private String summary; + private String createDate; + private String uuid; + private String des; + private String creator; + private String libraryUuid; + private String articleID; + private String keyWords; + private String authorName; + private String releaseTime; + private String secondTitle; + private String isCollect; + private String year; + private String source; + private String path; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getCreateDate() { + return createDate; + } + + public void setCreateDate(String createDate) { + this.createDate = createDate; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getDes() { + return des; + } + + public void setDes(String des) { + this.des = des; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getLibraryUuid() { + return libraryUuid; + } + + public void setLibraryUuid(String libraryUuid) { + this.libraryUuid = libraryUuid; + } + + public String getArticleID() { + return articleID; + } + + public void setArticleID(String articleID) { + this.articleID = articleID; + } + + public String getKeyWords() { + return keyWords; + } + + public void setKeyWords(String keyWords) { + this.keyWords = keyWords; + } + + public String getAuthorName() { + return authorName; + } + + public void setAuthorName(String authorName) { + this.authorName = authorName; + } + + public String getReleaseTime() { + return releaseTime; + } + + public void setReleaseTime(String releaseTime) { + this.releaseTime = releaseTime; + } + + public String getSecondTitle() { + return secondTitle; + } + + public void setSecondTitle(String secondTitle) { + this.secondTitle = secondTitle; + } + + public String getIsCollect() { + return isCollect; + } + + public void setIsCollect(String isCollect) { + this.isCollect = isCollect; + } + + public String getYear() { + return year; + } + + public void setYear(String year) { + this.year = year; + } + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFDetailBean.java new file mode 100644 index 0000000..de5666a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFDetailBean.java @@ -0,0 +1,140 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class WFDetailBean { + + /** + * Volum : 19 + * Issue : 1 + * Page : 13-24 + * Abstract : 篇首 为规范慢性乙型肝炎的预防、诊断和治疗,中华医学会肝病学分会和感染病学分会于2005年组织国内有关专家制订了<慢性乙型肝炎防治指南>[1].近5年来,国内外有关慢性乙型肝炎的基础和临床研究取得很大进展,为此我们对该指南进行更新. + * Organization : null + * ArticleID : zhgzbzz201101007 + * Title : 慢性乙型肝炎防治指南(2010年版) + * Creator : 中华医学会肝病学分会;中华医学会感染病学分会 + * Source : 中华肝脏病杂志 + * Year : 2011 + * KeyWords : 肝炎,乙型,慢性;治疗;预防;指南;Hepatitis B,chronic;Treatment;Prevention;Guideline + * DBID : WF_QK + * HasOriginalDoc : 1 + */ + + private String Volum; + private String Issue; + private String Page; + private String Abstract; + private Object Organization; + private String ArticleID; + private String Title; + private String Creator; + private String Source; + private int Year; + private String KeyWords; + private String DBID; + private int HasOriginalDoc; + + public String getVolum() { + return Volum; + } + + public void setVolum(String Volum) { + this.Volum = Volum; + } + + public String getIssue() { + return Issue; + } + + public void setIssue(String Issue) { + this.Issue = Issue; + } + + public String getPage() { + return Page; + } + + public void setPage(String Page) { + this.Page = Page; + } + + public String getAbstract() { + return Abstract; + } + + public void setAbstract(String Abstract) { + this.Abstract = Abstract; + } + + public Object getOrganization() { + return Organization; + } + + public void setOrganization(Object Organization) { + this.Organization = Organization; + } + + public String getArticleID() { + return ArticleID; + } + + public void setArticleID(String ArticleID) { + this.ArticleID = ArticleID; + } + + public String getTitle() { + return Title; + } + + public void setTitle(String Title) { + this.Title = Title; + } + + public String getCreator() { + return Creator; + } + + public void setCreator(String Creator) { + this.Creator = Creator; + } + + public String getSource() { + return Source; + } + + public void setSource(String Source) { + this.Source = Source; + } + + public int getYear() { + return Year; + } + + public void setYear(int Year) { + this.Year = Year; + } + + public String getKeyWords() { + return KeyWords; + } + + public void setKeyWords(String KeyWords) { + this.KeyWords = KeyWords; + } + + public String getDBID() { + return DBID; + } + + public void setDBID(String DBID) { + this.DBID = DBID; + } + + public int getHasOriginalDoc() { + return HasOriginalDoc; + } + + public void setHasOriginalDoc(int HasOriginalDoc) { + this.HasOriginalDoc = HasOriginalDoc; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFSearchListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFSearchListBean.java new file mode 100644 index 0000000..392c1b1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFSearchListBean.java @@ -0,0 +1,125 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class WFSearchListBean { + + /** + * Total : 119381 + * Records : [{"ArticleID":"zgzl201201001","Title":"中国肿瘤登记地区2008年恶性肿瘤发病和死亡分析","Creator":"|$郑荣寿;|$张思维;A002963611|$吴良有;A000451886|$李光琳;|$赵平;|$赫捷;|$陈万青","Source":"中国肿瘤","Year":2012,"KeyWords":"肿瘤登记;发病率;死亡率;流行病学;中国","DBID":"WF_QK","HasOriginalDoc":0},{"ArticleID":"zgzl201103001","Title":"中国肿瘤登记地区2007年肿瘤发病和死亡分析","Creator":"A001489901|$陈万青;A002781599|$张思维;A004549116|$郑荣寿;A001495967|$雷正龙;A000917322|$李光琳;A002371866|$邹小农;A004214594|$赵平","Source":"中国肿瘤","Year":2011,"KeyWords":"肿瘤登记;发病率;死亡率;流行病学;中国","DBID":"WF_QK","HasOriginalDoc":0},{"ArticleID":"zhhlzz200802016","Title":"肿瘤患者PICC置管主要并发症及其相关因素分析","Creator":"A000181057|$吴红娟;A000677751|$陈雪峰;A000040790|$张美英;A000123303|$胡巧云;A001396450|$林小琴","Source":"中华护理杂志","Year":2008,"KeyWords":"导管插入术;中心静脉;肿瘤","DBID":"WF_QK","HasOriginalDoc":1},{"ArticleID":"zhzl200003001","Title":"肿瘤微血管生成的机制与肿瘤侵袭和转移","Creator":"李春海;李克勤","Source":"中华肿瘤杂志","Year":2000,"KeyWords":null,"DBID":"WF_QK","HasOriginalDoc":1},{"ArticleID":"zhhlzz200208032","Title":"社会支持:肿瘤护理中值得重视的一种理念和方法","Creator":"A004498506|$黄丽;A000013787|$杨廷忠","Source":"中华护理杂志","Year":2002,"KeyWords":null,"DBID":"WF_QK","HasOriginalDoc":1},{"ArticleID":"zhzl200202037","Title":"中医药对维护肿瘤患者生活质量的作用","Creator":"A000002355|$李佩文","Source":"中华肿瘤杂志","Year":2002,"KeyWords":"肿瘤/中医药疗法;中药;生活质量","DBID":"WF_QK","HasOriginalDoc":1},{"ArticleID":"zhzl199904031","Title":"凋亡与肿瘤","Creator":"王申五;武莎莎","Source":"中华肿瘤杂志","Year":1999,"KeyWords":null,"DBID":"WF_QK","HasOriginalDoc":0},{"ArticleID":"zgzl200209001","Title":"中国12市县1993年~1997年肿瘤发病和死亡登记资料统计分析","Creator":"A000181667|$李连弟;A000093924|$饶克勤;A000144506|$张思维;A000290428|$鲁凤珠;A000745030|$邹小农","Source":"中国肿瘤","Year":2002,"KeyWords":"肿瘤;流行病学;登记;发病率;死亡率;中国","DBID":"WF_QK","HasOriginalDoc":1},{"ArticleID":"zl201206007","Title":"中国女性乳腺癌的发病和死亡现况\u2014\u2014全国32个肿瘤登记点2003-2007年资料分析报告","Creator":"A000228533|$黄哲宙;A000094973|$陈万青;A000040410|$吴春晓;A003649090|$郑荣寿;A000049087|$陈建国;A000159271|$杨念念;A001527676|$王宁;A000129800|$张思维;A000006204|$郑莹","Source":"肿瘤","Year":2012,"KeyWords":"乳腺肿瘤;发病率;死亡率;肿瘤登记;中国","DBID":"WF_QK","HasOriginalDoc":1},{"ArticleID":"cwycnyy200401001","Title":"肿瘤营养学的兴起及临床应用","Creator":"A000000593|$黎介寿","Source":"肠外与肠内营养","Year":2004,"KeyWords":"肿瘤;营养学","DBID":"WF_QK","HasOriginalDoc":1}] + */ + + private int Total; + private List Records; + + public int getTotal() { + return Total; + } + + public void setTotal(int Total) { + this.Total = Total; + } + + public List getRecords() { + return Records; + } + + public void setRecords(List Records) { + this.Records = Records; + } + + public static class RecordsBean implements Comparable{ + + /** + * ArticleID : zgzl201201001 + * Title : 中国肿瘤登记地区2008年恶性肿瘤发病和死亡分析 + * Creator : |$郑荣寿;|$张思维;A002963611|$吴良有;A000451886|$李光琳;|$赵平;|$赫捷;|$陈万青 + * Source : 中国肿瘤 + * Year : 2012 + * KeyWords : 肿瘤登记;发病率;死亡率;流行病学;中国 + * DBID : WF_QK + * HasOriginalDoc : 0 + */ + + private String ArticleID; + private String Title; + private String Creator; + private String Source; + private Integer Year; + private String KeyWords; + private String DBID; + private int HasOriginalDoc; + + public String getArticleID() { + return ArticleID; + } + + public void setArticleID(String ArticleID) { + this.ArticleID = ArticleID; + } + + public String getTitle() { + return Title; + } + + public void setTitle(String Title) { + this.Title = Title; + } + + public String getCreator() { + return Creator; + } + + public void setCreator(String Creator) { + this.Creator = Creator; + } + + public String getSource() { + return Source; + } + + public void setSource(String Source) { + this.Source = Source; + } + + public Integer getYear() { + return Year; + } + + public void setYear(Integer Year) { + this.Year = Year; + } + + public String getKeyWords() { + return KeyWords; + } + + public void setKeyWords(String KeyWords) { + this.KeyWords = KeyWords; + } + + public String getDBID() { + return DBID; + } + + public void setDBID(String DBID) { + this.DBID = DBID; + } + + public int getHasOriginalDoc() { + return HasOriginalDoc; + } + + public void setHasOriginalDoc(int HasOriginalDoc) { + this.HasOriginalDoc = HasOriginalDoc; + } + + @Override + public int compareTo(RecordsBean another) { + // TODO Auto-generated method stub + return another.getYear().compareTo(this.getYear()); + } + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFYKArticleListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFYKArticleListBean.java new file mode 100644 index 0000000..fe9e5e0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WFYKArticleListBean.java @@ -0,0 +1,168 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.io.Serializable; +import java.util.List; + +/** + * + * @author ZHAODeWei 万方医学获取列表(医库) + */ +public class WFYKArticleListBean { + public boolean status; + public String message; + public WFYKDateBean data; + + public class WFYKDateBean { + public int total; + public int time; + public List results; + } + + public class WFYKBean implements Serializable { + private String id; + private int database; + private int source; + private String WFID; + private String journal; + private String issue; + private String volume; + private String title; + private String pagination; + private String text; + private String[] authorList; + private String[] affiliationList; + private String[] keywordList; + private String language; + private long pubDate; + private String dbid; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public int getDatabase() { + return database; + } + + public void setDatabase(int database) { + this.database = database; + } + + public int getSource() { + return source; + } + + public void setSource(int source) { + this.source = source; + } + + public String getWFID() { + return WFID; + } + + public void setWFID(String wFID) { + WFID = wFID; + } + + public String getJournal() { + return journal; + } + + public void setJournal(String journal) { + this.journal = journal; + } + + public String getIssue() { + return issue; + } + + public void setIssue(String issue) { + this.issue = issue; + } + + public String getVolue() { + return volume; + } + + public void setVolue(String volue) { + this.volume = volue; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getPagination() { + return pagination; + } + + public void setPagination(String pagination) { + this.pagination = pagination; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String[] getAuthorList() { + return authorList; + } + + public void setAuthorList(String[] authorList) { + this.authorList = authorList; + } + + public String[] getAffiliationList() { + return affiliationList; + } + + public void setAffiliationList(String[] affiliationList) { + this.affiliationList = affiliationList; + } + + public String[] getKeywordList() { + return keywordList; + } + + public void setKeywordList(String[] keywordList) { + this.keywordList = keywordList; + } + + public String getLanguage() { + return language; + } + + public void setLanguage(String language) { + this.language = language; + } + + public long getPubDate() { + return pubDate; + } + + public void setPubDate(long pubDate) { + this.pubDate = pubDate; + } + + public String getDbid() { + return dbid; + } + + public void setDbid(String dbid) { + this.dbid = dbid; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/WelfareListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WelfareListBean.java new file mode 100644 index 0000000..6215f33 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/WelfareListBean.java @@ -0,0 +1,156 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +/** + * Created by WANGChengXin on 2020/5/22. + */ + +public class WelfareListBean { + + /** + * code : 1 + * data : {"pageSize":10,"pageNum":1,"pages":1,"isLastPage":true,"isFirstPage":true,"list":[{"count_num":2,"name":"随访患者","create_date":"2020-05-09 13:28:50"}],"total":1} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * pageSize : 10 + * pageNum : 1 + * pages : 1 + * isLastPage : true + * isFirstPage : true + * list : [{"count_num":2,"name":"随访患者","create_date":"2020-05-09 13:28:50"}] + * total : 1 + */ + + private int pageSize; + private int pageNum; + private int pages; + private boolean isLastPage; + private boolean isFirstPage; + private int total; + private List list; + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public boolean isIsLastPage() { + return isLastPage; + } + + public void setIsLastPage(boolean isLastPage) { + this.isLastPage = isLastPage; + } + + public boolean isIsFirstPage() { + return isFirstPage; + } + + public void setIsFirstPage(boolean isFirstPage) { + this.isFirstPage = isFirstPage; + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + + public static class ListBean { + /** + * count_num : 2 + * name : 随访患者 + * create_date : 2020-05-09 13:28:50 + */ + + private int count_num; + private String name; + private String create_date; + + public int getCount_num() { + return count_num; + } + + public void setCount_num(int count_num) { + this.count_num = count_num; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/XHYKMediconDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/XHYKMediconDetailBean.java new file mode 100644 index 0000000..5ccd199 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/XHYKMediconDetailBean.java @@ -0,0 +1,31 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class XHYKMediconDetailBean { + public int mediCode; + public String mediMsg; + public List mediData; + + public class Bean { + private String ElementMsg; + private String DataResult; + + public String getElementMsg() { + return ElementMsg; + } + + public void setElementMsg(String elementMsg) { + ElementMsg = elementMsg; + } + + public String getDataResult() { + return DataResult; + } + + public void setDataResult(String dataResult) { + DataResult = dataResult; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconBean.java new file mode 100644 index 0000000..544b7d5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconBean.java @@ -0,0 +1,49 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class YKMediconBean { + public int mediCode; + public String mediMsg; + public List mediData; + + public class MediconBean { + private int DrugID; + private String ProduceName; + private String ProduceCompany; + private int DrugType; + + public String getProduceName() { + return ProduceName; + } + + public void setProduceName(String produceName) { + ProduceName = produceName; + } + + public String getProduceCompany() { + return ProduceCompany; + } + + public void setProduceCompany(String produceCompany) { + ProduceCompany = produceCompany; + } + + public int getDrugID() { + return DrugID; + } + + public void setDrugID(int drugID) { + DrugID = drugID; + } + + public int getDrugType() { + return DrugType; + } + + public void setDrugType(int drugType) { + DrugType = drugType; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconDetailBean.java new file mode 100644 index 0000000..be44de7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconDetailBean.java @@ -0,0 +1,78 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class YKMediconDetailBean { + public int mediCode; + public String mediMsg; + public Medidata mediData; + + public class Keydata { + + private String title; + private String content; + + public void setTitle(String title) { + this.title = title; + } + + public String getTitle() { + return title; + } + + public void setContent(String content) { + this.content = content; + } + + public String getContent() { + return content; + } + + } + + public class Drugname { + + private String drugtitle; + private String drugenname; + + public void setDrugtitle(String drugtitle) { + this.drugtitle = drugtitle; + } + + public String getDrugtitle() { + return drugtitle; + } + + public void setDrugenname(String drugenname) { + this.drugenname = drugenname; + } + + public String getDrugenname() { + return drugenname; + } + + } + + public class Medidata { + + private List keydata; + private Drugname drugname; + + public void setKeydata(List keydata) { + this.keydata = keydata; + } + + public List getKeydata() { + return keydata; + } + + public void setDrugname(Drugname drugname) { + this.drugname = drugname; + } + + public Drugname getDrugname() { + return drugname; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconTitleBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconTitleBean.java new file mode 100644 index 0000000..598039a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconTitleBean.java @@ -0,0 +1,49 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class YKMediconTitleBean { + public int mediCode; + public String mediMsg; + public List mediData; + + public class MediconBeanTitle { + private int NameID; + private String InstructionTitle; + private String DrugName; + private int DataType; + + public String getInstructionTitle() { + return InstructionTitle; + } + + public void setInstructionTitle(String instructionTitle) { + InstructionTitle = instructionTitle; + } + + public String getDrugName() { + return DrugName; + } + + public void setDrugName(String drugName) { + DrugName = drugName; + } + + public int getNameID() { + return NameID; + } + + public void setNameID(int nameID) { + NameID = nameID; + } + + public int getDataType() { + return DataType; + } + + public void setDataType(int dataType) { + DataType = dataType; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconXHTitleBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconXHTitleBean.java new file mode 100644 index 0000000..514bf63 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YKMediconXHTitleBean.java @@ -0,0 +1,41 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class YKMediconXHTitleBean { + public int mediCode; + public String mediMsg; + public List mediData; + + public class MediconXHBeanTitle { + private int NameID; + private String DrugTypeName; + + private int DataType; + + public String getDrugTypeName() { + return DrugTypeName; + } + + public void setDrugTypeName(String drugTypeName) { + DrugTypeName = drugTypeName; + } + + public int getNameID() { + return NameID; + } + + public void setNameID(int nameID) { + NameID = nameID; + } + + public int getDataType() { + return DataType; + } + + public void setDataType(int dataType) { + DataType = dataType; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/YearsBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YearsBean.java new file mode 100644 index 0000000..67d020d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/YearsBean.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.bean; + +public class YearsBean { + int editText; + int editText2; + int t1; + int ys1; + int ms1; + + public YearsBean(int editText, int editText2, int t1, int ys1, int ms1) { + this.editText = editText; + this.editText2 = editText2; + this.t1 = t1; + this.ys1 = ys1; + this.ms1 = ms1; + } + + + public int getEditText2() { + return editText2; + } + + public void setEditText2(int editText2) { + this.editText2 = editText2; + } + + public int getEditText() { + return editText; + } + + public void setEditText(int editText) { + this.editText = editText; + } + + public int getT1() { + return t1; + } + + public void setT1(int t1) { + this.t1 = t1; + } + + public int getYs1() { + return ys1; + } + + public void setYs1(int ys1) { + this.ys1 = ys1; + } + + public int getMs1() { + return ms1; + } + + public void setMs1(int ms1) { + this.ms1 = ms1; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ZengshuBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ZengshuBean.java new file mode 100644 index 0000000..7bf2c35 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ZengshuBean.java @@ -0,0 +1,64 @@ +package cn.shangyu.gdxzExpert.bean; + +public class ZengshuBean { + + /** + * code : 200 + * data : {"book_num":0,"patient_num":0} + * message : 查询成功 + */ + + private String code; + private DataBean data; + private String message; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public DataBean getData() { + return data; + } + + public void setData(DataBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class DataBean { + /** + * book_num : 0 + * patient_num : 0 + */ + + private int book_num; + private int patient_num; + + public int getBook_num() { + return book_num; + } + + public void setBook_num(int book_num) { + this.book_num = book_num; + } + + public int getPatient_num() { + return patient_num; + } + + public void setPatient_num(int patient_num) { + this.patient_num = patient_num; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBean.java new file mode 100644 index 0000000..02eb905 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBean.java @@ -0,0 +1,96 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class ctIdBean { + private String ctId;// 主键 integer(int64) + private String pv;// 门静脉宽度:mm(填写超声结果,不能填写CTorMR结果),整数 string + private String cir;// 肝硬化:是/否 integer(int32) + private String hccFlag;// 肝癌:是/否 integer(int32) + private String fldFlag; + private List imgPath;// 相关图片 string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String createTime;// 创建时间 string(date-time) + private String updateTime;// + + public String getFldFlag() { + return fldFlag; + } + + public void setFldFlag(String fldFlag) { + this.fldFlag = fldFlag; + } + + public String getCtId() { + return ctId; + } + + public void setCtId(String ctId) { + this.ctId = ctId; + } + + public String getPv() { + return pv; + } + + public void setPv(String pv) { + this.pv = pv; + } + + public String getCir() { + return cir; + } + + public void setCir(String cir) { + this.cir = cir; + } + + public String getHccFlag() { + return hccFlag; + } + + public void setHccFlag(String hccFlag) { + this.hccFlag = hccFlag; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBeans.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBeans.java new file mode 100644 index 0000000..e55a552 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/ctIdBeans.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.bean; + +public class ctIdBeans extends BaseBeanNew{ + private ctIdBean data; + + public ctIdBean getData() { + return data; + } + + public void setData(ctIdBean data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoing.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoing.java new file mode 100644 index 0000000..ea70c15 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoing.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.bean; + +public class endpoing +{ + private String endpointId;// 主键 integer + private String patientcaseId;// 关联病历表 integer + private String eventType;// 终点事件 string + private String reportDate;// 报告时间 string + private String notes;// 备注 string + private String createTime;// 创建时间 string + private String updateTime;// + + + + public String getEndpointId() { + return endpointId; + } + + public void setEndpointId(String endpointId) { + this.endpointId = endpointId; + } + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public String getEventType() { + return eventType; + } + + public void setEventType(String eventType) { + this.eventType = eventType; + } + + public String getReportDate() { + return reportDate; + } + + public void setReportDate(String reportDate) { + this.reportDate = reportDate; + } + + public String getNotes() { + return notes; + } + + public void setNotes(String notes) { + this.notes = notes; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoingetDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoingetDetailBean.java new file mode 100644 index 0000000..fa8c6b9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/endpoingetDetailBean.java @@ -0,0 +1,44 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +import cn.shangyu.gdxzExpert.adapter.endpointImgBean; + +public class endpoingetDetailBean extends BaseBeanNew{ + private poingetDetailBean data; + + + + public poingetDetailBean getData() { + return data; + } + + public void setData(poingetDetailBean data) { + this.data = data; + } + + public class poingetDetailBean + { + private Listlist; + private endpointImgBean endpointImg; + + public endpointImgBean getEndpointImg() { + return endpointImg; + } + + public void setEndpointImg(endpointImgBean endpointImg) { + this.endpointImg = endpointImg; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBean.java new file mode 100644 index 0000000..3e7849c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBean.java @@ -0,0 +1,117 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class hbvSymbolIdBean { + private String hbvSymbolId;// 主键 integer(int64) + private String hbsag;// 乙型肝炎表面抗原(HBsAg)* 单位IU/mL, 小数 string + private String antiHbs;// 乙型肝炎表面抗体(anti-HBs) 单位IU/L,小数 string + private String hbeag;// 乙型肝炎 e 抗原(HBeAg) 单位COI,小数 string + private String antiHbe;// 乙型肝炎 e 抗体(anti-HBe) 单位COI,小数 string + private String hbeagFalg;// e 抗原(HBeAg)阳性:是/否 integer(int32) + private String hbvDna;// HBV-DNA 单位IU/mL,例如:2000000,低于检测下线: 填写0 string + private List imgPath;// 相关图片 string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String createTime;// 创建时间 string(date-time) + + + public String getHbvSymbolId() { + return hbvSymbolId; + } + + public void setHbvSymbolId(String hbvSymbolId) { + this.hbvSymbolId = hbvSymbolId; + } + + public String getHbsag() { + return hbsag; + } + + public void setHbsag(String hbsag) { + this.hbsag = hbsag; + } + + public String getAntiHbs() { + return antiHbs; + } + + public void setAntiHbs(String antiHbs) { + this.antiHbs = antiHbs; + } + + public String getHbeag() { + return hbeag; + } + + public void setHbeag(String hbeag) { + this.hbeag = hbeag; + } + + public String getAntiHbe() { + return antiHbe; + } + + public void setAntiHbe(String antiHbe) { + this.antiHbe = antiHbe; + } + + public String getHbeagFalg() { + return hbeagFalg; + } + + public void setHbeagFalg(String hbeagFalg) { + this.hbeagFalg = hbeagFalg; + } + + public String getHbvDna() { + return hbvDna; + } + + public void setHbvDna(String hbvDna) { + this.hbvDna = hbvDna; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + private String updateTime;// + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBeans.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBeans.java new file mode 100644 index 0000000..eba4635 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/hbvSymbolIdBeans.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.bean; + +public class hbvSymbolIdBeans extends BaseBeanNew{ + private hbvSymbolIdBean data; + + public hbvSymbolIdBean getData() { + return data; + } + + public void setData(hbvSymbolIdBean data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/imBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/imBean.java new file mode 100644 index 0000000..6fd9a6b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/imBean.java @@ -0,0 +1,104 @@ +package cn.shangyu.gdxzExpert.bean; + +public class imBean +{ + private String fileId; + private String folderType; + private String fileName; + private String fileSize; + private String fileType; + private String fileKey; + private String creatorId; + private String reatorName; + private String creatorUserType; + private String fileUrl; + private String createTime; + + public String getFileId() { + return fileId; + } + + public void setFileId(String fileId) { + this.fileId = fileId; + } + + public String getFolderType() { + return folderType; + } + + public void setFolderType(String folderType) { + this.folderType = folderType; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getFileKey() { + return fileKey; + } + + public void setFileKey(String fileKey) { + this.fileKey = fileKey; + } + + public String getCreatorId() { + return creatorId; + } + + public void setCreatorId(String creatorId) { + this.creatorId = creatorId; + } + + public String getReatorName() { + return reatorName; + } + + public void setReatorName(String reatorName) { + this.reatorName = reatorName; + } + + public String getCreatorUserType() { + return creatorUserType; + } + + public void setCreatorUserType(String creatorUserType) { + this.creatorUserType = creatorUserType; + } + + public String getFileUrl() { + return fileUrl; + } + + public void setFileUrl(String fileUrl) { + this.fileUrl = fileUrl; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBean.java new file mode 100644 index 0000000..231031a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBean.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class liverElasticityIdBean { + private String liverElasticityId;// 主键 integer(int64) + private String checkType;// 检测仪器:1 Fibroscan 2 Fibrotouch string + private String fatAttenuation;// 脂肪衰减参数,单位dB/m,整数 string + private String liverHardness;// 肝硬度值,单位kPa,小数 string + private List imgPath;// 相关图片 string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String createTime;// 创建时间 string(date-time) + private String updateTime;// + + public String getLiverElasticityId() { + return liverElasticityId; + } + + public void setLiverElasticityId(String liverElasticityId) { + this.liverElasticityId = liverElasticityId; + } + + public String getCheckType() { + return checkType; + } + + public void setCheckType(String checkType) { + this.checkType = checkType; + } + + public String getFatAttenuation() { + return fatAttenuation; + } + + public void setFatAttenuation(String fatAttenuation) { + this.fatAttenuation = fatAttenuation; + } + + public String getLiverHardness() { + return liverHardness; + } + + public void setLiverHardness(String liverHardness) { + this.liverHardness = liverHardness; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBeans.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBeans.java new file mode 100644 index 0000000..7d0aff1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverElasticityIdBeans.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.bean; + +public class liverElasticityIdBeans { + private liverElasticityIdBean data; + + public liverElasticityIdBean getData() { + return data; + } + + public void setData(liverElasticityIdBean data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBean.java new file mode 100644 index 0000000..1dfb7ab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBean.java @@ -0,0 +1,150 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class liverFunctionIdBean { + private String liverFunctionId;// 主键 integer(int64) + private String alt;// 丙氨酸氨基转移酶(ALT) 单位U/L ,小数2位 string + private String ast;// 门冬氨酸氨基转移酶(AST) 单位U/L ,小数2位 string + private String glu;// 空腹血糖(GLU), 单位mmol/L,小数 string + private String ghb;// 糖化血红蛋白(GHB,有糖尿病者), 单位%,小数 string + private String tg;// 甘油三酯(TG) ,单位mmol/L,小数 string + private String cho;// 总胆固醇(CHO) ,单位mmol/L,小数 string + private String ldl;// 低密度脂蛋白(LDL) ,单位mmol/L,小数 string + private String hldl;// 高密度脂蛋白(HLDL), 单位mmol/L,小数 string + private String afp;// 甲胎蛋白(AFP),单位ng/mL,小数 string + private List imgPath;// 相关图片 string + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private String createTime;// 创建时间 string(date-time) + private String updateTime;// + private String tbil; + + public String getTbil() { + return tbil; + } + + public void setTbil(String tbil) { + this.tbil = tbil; + } + + public String getLiverFunctionId() { + return liverFunctionId; + } + + public void setLiverFunctionId(String liverFunctionId) { + this.liverFunctionId = liverFunctionId; + } + + public String getAlt() { + return alt; + } + + public void setAlt(String alt) { + this.alt = alt; + } + + public String getAst() { + return ast; + } + + public void setAst(String ast) { + this.ast = ast; + } + + public String getGlu() { + return glu; + } + + public void setGlu(String glu) { + this.glu = glu; + } + + public String getGhb() { + return ghb; + } + + public void setGhb(String ghb) { + this.ghb = ghb; + } + + public String getTg() { + return tg; + } + + public void setTg(String tg) { + this.tg = tg; + } + + public String getCho() { + return cho; + } + + public void setCho(String cho) { + this.cho = cho; + } + + public String getLdl() { + return ldl; + } + + public void setLdl(String ldl) { + this.ldl = ldl; + } + + public String getHldl() { + return hldl; + } + + public void setHldl(String hldl) { + this.hldl = hldl; + } + + public String getAfp() { + return afp; + } + + public void setAfp(String afp) { + this.afp = afp; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBeans.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBeans.java new file mode 100644 index 0000000..3fbe115 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/liverFunctionIdBeans.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.bean; + +public class liverFunctionIdBeans extends BaseBeanNew{ + private liverFunctionIdBean data; + + public liverFunctionIdBean getData() { + return data; + } + + public void setData(liverFunctionIdBean data) { + this.data = data; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/patientExBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/patientExBean.java new file mode 100644 index 0000000..9d33f30 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/patientExBean.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.bean; +/** + * + * @author 患者别名备注 + * + */ +public class patientExBean extends BaseBean{ +public patientEx patientEx; + public class patientEx { + public String nickname; + public String note; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/proDetailBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proDetailBean.java new file mode 100644 index 0000000..176fa61 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proDetailBean.java @@ -0,0 +1,154 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class proDetailBean extends BaseBeanNew{ + private pdetailBean data; + + public pdetailBean getData() { + return data; + } + + public void setData(pdetailBean data) { + this.data = data; + } + + public class pdetailBean + { + private String projectId;// 项目ID integer(int32) + private String departmentId;// 部门id integer(int64) + private String name;// 项目全称 string + private String nickname;// 项目简称 string + private String sponsor;// 主办单位 string + private String executor;// 执行单位 string + private String content;// 项目内容 string + private String leader;// 主导专家 string + private List wechatImg;// 微信联系方式 string + private String beginDate;// 项目开始时间 string(date) + private String endDate;// 项目结束时间 string(date) + private String plannedNum;// 计划入组数 integer(int32) + private String status;// 项目状态:1进行中/0已结束 integer(int32) + private String applyState;// 项目申请:1开放式/0封闭式 integer(int32) + private String note;// + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getSponsor() { + return sponsor; + } + + public void setSponsor(String sponsor) { + this.sponsor = sponsor; + } + + public String getExecutor() { + return executor; + } + + public void setExecutor(String executor) { + this.executor = executor; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getLeader() { + return leader; + } + + public void setLeader(String leader) { + this.leader = leader; + } + + public List getWechatImg() { + return wechatImg; + } + + public void setWechatImg(List wechatImg) { + this.wechatImg = wechatImg; + } + + public String getBeginDate() { + return beginDate; + } + + public void setBeginDate(String beginDate) { + this.beginDate = beginDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public String getPlannedNum() { + return plannedNum; + } + + public void setPlannedNum(String plannedNum) { + this.plannedNum = plannedNum; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getApplyState() { + return applyState; + } + + public void setApplyState(String applyState) { + this.applyState = applyState; + } + + public String getNote() { + return note; + } + + public void setNote(String note) { + this.note = note; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/proMyListBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proMyListBean.java new file mode 100644 index 0000000..b10d06d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proMyListBean.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class proMyListBean extends BaseBeanNew{ + private myBean data; + + public myBean getData() { + return data; + } + + public void setData(myBean data) { + this.data = data; + } + + public class myBean extends BaseBeanList{ + private List list; + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } + public class mylistBean extends BaseBeanList{ + private String projectId;// 项目ID integer + private String name;// 项目全称 string + private String plannedNum;// 计划入组数 integer + private String centreNum;// 中心数 integer + private String userNum;// 用户数 integer + private String status;// 项目状态:1进行中/0已结束 integer + private String applyState;// + private String caseNum; + private String nickname; + private String projectEmployeeStatus; + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getProjectEmployeeStatus() { + return projectEmployeeStatus; + } + + public void setProjectEmployeeStatus(String projectEmployeeStatus) { + this.projectEmployeeStatus = projectEmployeeStatus; + } + + public String getCaseNum() { + return caseNum; + } + + public void setCaseNum(String caseNum) { + this.caseNum = caseNum; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getPlannedNum() { + return plannedNum; + } + + public void setPlannedNum(String plannedNum) { + this.plannedNum = plannedNum; + } + + public String getCentreNum() { + return centreNum; + } + + public void setCentreNum(String centreNum) { + this.centreNum = centreNum; + } + + public String getUserNum() { + return userNum; + } + + public void setUserNum(String userNum) { + this.userNum = userNum; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getApplyState() { + return applyState; + } + + public void setApplyState(String applyState) { + this.applyState = applyState; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleBean.java new file mode 100644 index 0000000..7a628de --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleBean.java @@ -0,0 +1,48 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class proRoleBean extends BaseBeanNew{ + private List data; + + public List getData() { + return data; + } + + + public void setData(List data) { + this.data = data; + } + + + public class RoleBean + { + private String roleId;// integer(int64) + private String employeeId;// integer(int64) + private String roleName;// + + public String getRoleId() { + return roleId; + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(String employeeId) { + this.employeeId = employeeId; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleTokenBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleTokenBean.java new file mode 100644 index 0000000..8483249 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRoleTokenBean.java @@ -0,0 +1,82 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class proRoleTokenBean extends BaseBeanNew{ + private RoleTokenBean data; + + public RoleTokenBean getData() { + return data; + } + + public void setData(RoleTokenBean data) { + this.data = data; + } + + public class RoleTokenBean{ + private String token;// token string + private String employeeId;// 员工id integer(int64) + private String roleId;// 角色id integer(int64) + private String projectId;// 项目id integer(int32) + private String departmentId;// + public List menuList; + public String getToken() { + return token; + } + + public void setToken(String token) { + this.token = token; + } + + public String getEmployeeId() { + return employeeId; + } + + public void setEmployeeId(String employeeId) { + this.employeeId = employeeId; + } + + public String getRoleId() { + return roleId; + } + + public void setRoleId(String roleId) { + this.roleId = roleId; + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public String getDepartmentId() { + return departmentId; + } + + public void setDepartmentId(String departmentId) { + this.departmentId = departmentId; + } + + public List getMenuList() { + return menuList; + } + + public void setMenuList(List menuList) { + this.menuList = menuList; + } + } + public class MeanuBean{ + private String apiPerms; + + public String getApiPerms() { + return apiPerms; + } + + public void setApiPerms(String apiPerms) { + this.apiPerms = apiPerms; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRuzuBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRuzuBean.java new file mode 100644 index 0000000..a98bd5f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/proRuzuBean.java @@ -0,0 +1,37 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class proRuzuBean extends BaseBeanNew{ + private List data; + + public List getData() { + return data; + } + + public void setData(List data) { + this.data = data; + } + + public class RuzuBean + { + private String statisticsDate; + private int num; + + public String getStatisticsDate() { + return statisticsDate; + } + + public void setStatisticsDate(String statisticsDate) { + this.statisticsDate = statisticsDate; + } + + public int getNum() { + return num; + } + + public void setNum(int num) { + this.num = num; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm.java new file mode 100644 index 0000000..64378fa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm.java @@ -0,0 +1,66 @@ +package cn.shangyu.gdxzExpert.bean; + +public class projectQueryForm { + private String pageNum; + private String pageSize; + private String searchCount; +// private List sortItemList; + private String keywords; + private String sdvStatus; + + private String freezeFlag; + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public String getFreezeFlag() { + return freezeFlag; + } + + public void setFreezeFlag(String freezeFlag) { + this.freezeFlag = freezeFlag; + } + + public String getPageNum() { + return pageNum; + } + + public void setPageNum(String pageNum) { + this.pageNum = pageNum; + } + + public String getPageSize() { + return pageSize; + } + + public void setPageSize(String pageSize) { + this.pageSize = pageSize; + } + + public String getSearchCount() { + return searchCount; + } + + public void setSearchCount(String searchCount) { + this.searchCount = searchCount; + } + + + public String getKeywords() { + return keywords; + } + + public void setKeywords(String keywords) { + this.keywords = keywords; + } + + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm1.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm1.java new file mode 100644 index 0000000..dc97175 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm1.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.bean; + +public class projectQueryForm1 { + private String patientNo; + private String name; + + + + public String getPatientNo() { + return patientNo; + } + + public void setPatientNo(String patientNo) { + this.patientNo = patientNo; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm2.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm2.java new file mode 100644 index 0000000..afa1358 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm2.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.bean; + +public class projectQueryForm2 extends projectQueryForm1{ + private String patientcaseId; + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm3.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm3.java new file mode 100644 index 0000000..4eaf17d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm3.java @@ -0,0 +1,31 @@ +package cn.shangyu.gdxzExpert.bean; + +public class projectQueryForm3 { + private String beginDate;// 开始时间 true + private String endDate;// + private String searchType; + + public String getSearchType() { + return searchType; + } + + public void setSearchType(String searchType) { + this.searchType = searchType; + } + + public String getBeginDate() { + return beginDate; + } + + public void setBeginDate(String beginDate) { + this.beginDate = beginDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm4.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm4.java new file mode 100644 index 0000000..d766577 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm4.java @@ -0,0 +1,206 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class projectQueryForm4 extends projectQueryForm2{ + private String sex;// 性别 1男 2女 + private String birthday;// 出生日期 false + private String mobile;// 联系电话 false + private String hbvYear;// 乙肝病史 年 false + private String hbvMonth;// 乙肝病史 月 false + private String alcoholFlag;// 酒精性脂肪肝 是/否 + private String nonAlcoholFlag;// 非酒精性脂肪肝 是/否 + private String drinkFlag;// 是否饮酒 是/否 + private String diagnosisAlcoholFlag;// 是否符合诊断酒精性肝病 是/否 + private String drinkStopFlag;// 是否戒酒 是/否 + private String drinkStopYear;// 戒酒 年 false + private String drinkStopMonth;// 戒酒 月 false + private String hbvFamilyFlag;// 家族中有无其他HBV感染者 是/否 + private String hccFamilyFlag;// 家族中有无肝细胞癌患者 是/否 + private String htnMixFlag;// 混合 高血压 是/否 false + private String dmMixFlag;// 混合 糖尿病 是/否 false + private String chdMixFlag;// 混合 冠心病 是/否 false + private String ciMixFlag;// 混合 脑梗死 是/否 false + private String ichMixFlag;// 混合 脑出血 是/否 false + private String otherMix;// 混合 其他 是/否 false + private List imgPath;//imgPath 相关图片 false + private String baseinfoDataStatus; + + public String getBaseinfoDataStatus() { + return baseinfoDataStatus; + } + + public void setBaseinfoDataStatus(String baseinfoDataStatus) { + this.baseinfoDataStatus = baseinfoDataStatus; + } + + public String getSex() { + return sex; + } + + public void setSex(String sex) { + this.sex = sex; + } + + public String getBirthday() { + return birthday; + } + + public void setBirthday(String birthday) { + this.birthday = birthday; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getHbvYear() { + return hbvYear; + } + + public void setHbvYear(String hbvYear) { + this.hbvYear = hbvYear; + } + + public String getHbvMonth() { + return hbvMonth; + } + + public void setHbvMonth(String hbvMonth) { + this.hbvMonth = hbvMonth; + } + + public String getAlcoholFlag() { + return alcoholFlag; + } + + public void setAlcoholFlag(String alcoholFlag) { + this.alcoholFlag = alcoholFlag; + } + + public String getNonAlcoholFlag() { + return nonAlcoholFlag; + } + + public void setNonAlcoholFlag(String nonAlcoholFlag) { + this.nonAlcoholFlag = nonAlcoholFlag; + } + + public String getDrinkFlag() { + return drinkFlag; + } + + public void setDrinkFlag(String drinkFlag) { + this.drinkFlag = drinkFlag; + } + + public String getDiagnosisAlcoholFlag() { + return diagnosisAlcoholFlag; + } + + public void setDiagnosisAlcoholFlag(String diagnosisAlcoholFlag) { + this.diagnosisAlcoholFlag = diagnosisAlcoholFlag; + } + + public String getDrinkStopFlag() { + return drinkStopFlag; + } + + public void setDrinkStopFlag(String drinkStopFlag) { + this.drinkStopFlag = drinkStopFlag; + } + + public String getDrinkStopYear() { + return drinkStopYear; + } + + public void setDrinkStopYear(String drinkStopYear) { + this.drinkStopYear = drinkStopYear; + } + + public String getDrinkStopMonth() { + return drinkStopMonth; + } + + public void setDrinkStopMonth(String drinkStopMonth) { + this.drinkStopMonth = drinkStopMonth; + } + + public String getHbvFamilyFlag() { + return hbvFamilyFlag; + } + + public void setHbvFamilyFlag(String hbvFamilyFlag) { + this.hbvFamilyFlag = hbvFamilyFlag; + } + + public String getHccFamilyFlag() { + return hccFamilyFlag; + } + + public void setHccFamilyFlag(String hccFamilyFlag) { + this.hccFamilyFlag = hccFamilyFlag; + } + + public String getHtnMixFlag() { + return htnMixFlag; + } + + public void setHtnMixFlag(String htnMixFlag) { + this.htnMixFlag = htnMixFlag; + } + + public String getDmMixFlag() { + return dmMixFlag; + } + + public void setDmMixFlag(String dmMixFlag) { + this.dmMixFlag = dmMixFlag; + } + + public String getChdMixFlag() { + return chdMixFlag; + } + + public void setChdMixFlag(String chdMixFlag) { + this.chdMixFlag = chdMixFlag; + } + + public String getCiMixFlag() { + return ciMixFlag; + } + + public void setCiMixFlag(String ciMixFlag) { + this.ciMixFlag = ciMixFlag; + } + + public String getIchMixFlag() { + return ichMixFlag; + } + + public void setIchMixFlag(String ichMixFlag) { + this.ichMixFlag = ichMixFlag; + } + + public String getOtherMix() { + return otherMix; + } + + public void setOtherMix(String otherMix) { + this.otherMix = otherMix; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm5.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm5.java new file mode 100644 index 0000000..fb89b2c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/projectQueryForm5.java @@ -0,0 +1,49 @@ +package cn.shangyu.gdxzExpert.bean; + +public class projectQueryForm5 { + private String patientcaseId;// 关联病历 表 true + private String suifangDate;//e 随访时间 false + private String type;// 类型 1基线数据 2随访数据 + private String patientgroup;// 患者分组 false + private String suifangId;// + + public String getPatientcaseId() { + return patientcaseId; + } + + public void setPatientcaseId(String patientcaseId) { + this.patientcaseId = patientcaseId; + } + + public String getSuifangDate() { + return suifangDate; + } + + public void setSuifangDate(String suifangDate) { + this.suifangDate = suifangDate; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPatientgroup() { + return patientgroup; + } + + public void setPatientgroup(String patientgroup) { + this.patientgroup = patientgroup; + } + + public String getSuifangId() { + return suifangId; + } + + public void setSuifangId(String suifangId) { + this.suifangId = suifangId; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/sortItem.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/sortItem.java new file mode 100644 index 0000000..77711c4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/sortItem.java @@ -0,0 +1,28 @@ +package cn.shangyu.gdxzExpert.bean; + +public class sortItem +{ + private Boolean isAsc; + private String column; + + public sortItem(Boolean isAsc, String column) { + this.isAsc = isAsc; + this.column = column; + } + + public Boolean getAsc() { + return isAsc; + } + + public void setAsc(Boolean asc) { + isAsc = asc; + } + + public String getColumn() { + return column; + } + + public void setColumn(String column) { + this.column = column; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/bean/yongyaoBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/bean/yongyaoBean.java new file mode 100644 index 0000000..2bc96f8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/bean/yongyaoBean.java @@ -0,0 +1,663 @@ +package cn.shangyu.gdxzExpert.bean; + +import java.util.List; + +public class yongyaoBean { + private String yongyaoId;// 主键 integer(int64) + private String treatFlag;// 是否进行过抗病毒治疗:是 1/否 0 + private String etvFlag;// 恩替卡韦(ETV) + private String etvDurationYear;// 恩替卡韦(ETV)使用疗程: 年 integer(int32) + private String etvDurationMonth;// 恩替卡韦(ETV)使用疗程: 月 integer(int32) + private String etvStopFlag;// 恩替卡韦(ETV) 是否中途停药 integer(int32) + private String etvStopYear;// 恩替卡韦(ETV)停药年 integer(int32) + private String etvStopMonth;// 恩替卡韦(ETV)停药月 integer(int32) + private String tdfFlag;// 替诺福韦脂(TDF) + private String tdfDurationYear;// 替诺福韦脂(TDF)使用疗程: 年 integer(int32) + private String tdfDurationMonth;// 替诺福韦脂(TDF)使用疗程: 月 integer(int32) + private String tdfStopFlag;// 替诺福韦脂(TDF)是否中途停药 integer(int32) + private String tdfStopYear;// 替诺福韦脂(TDF)停药年 integer(int32) + private String tdfStopMonth;// 替诺福韦脂(TDF)停药月 integer(int32) + private String tafFlag;// 丙酚替诺福韦脂(TAF) + private String tafDurationYear;// 丙酚替诺福韦脂(TAF)使用疗程: 年 integer(int32) + private String tafDurationMonth;// 丙酚替诺福韦脂(TAF)使用疗程: 月 integer(int32) + private String tafStopFlag;// 丙酚替诺福韦脂(TAF) 是否中途停药 integer(int32) + private String tafStopYear;// 丙酚替诺福韦脂(TAF)停药年 integer(int32) + private String tafStopMonth;// 丙酚替诺福韦脂(TAF)停药月 integer(int32) + private String advFlag;// 阿德福韦脂(ADV) + private String advDurationYear;// 阿德福韦脂(ADV)使用疗程: 年 integer(int32) + private String advDurationMonth;// 阿德福韦脂(ADV)使用疗程: 月 integer(int32) + private String advStopFlag;// 阿德福韦脂(ADV)是否中途停药 integer(int32) + private String advStopYear;// 阿德福韦脂(ADV)停药年 integer(int32) + private String advStopMonth;// 阿德福韦脂(ADV)停药月 integer(int32) + private String tmfFlag;// 艾米替诺福韦脂(TMF) + private String tmfDurationYear;// 艾米替诺福韦脂(TMF)使用疗程: 年 integer(int32) + private String tmfDurationMonth;// 艾米替诺福韦脂(TMF)使用疗程: 月 integer(int32) + private String tmfStopFlag;// 艾米替诺福韦脂(TMF) 是否中途停药 integer(int32) + private String tmfStopYear;// 艾米替诺福韦脂(TMF)停药年 integer(int32) + private String tmfStopMonth;// 艾米替诺福韦脂(TMF)停药月 integer(int32) + private String ldtFlag;// 替比夫定(LDT) + private String ldtDurationYear;// 替比夫定(LDT)使用疗程: 年 integer(int32) + private String ldtDurationMonth;// 替比夫定(LDT)使用疗程: 月 integer(int32) + private String ldtStopFlag;// 替比夫定(LDT)是否中途停药 integer(int32) + private String ldtStopYear;// 替比夫定(LDT)停药年 integer(int32) + private String ldtStopMonth;// 替比夫定(LDT)停药月 integer(int32) + private String lamFlag;// 拉米夫定(LAM) + private String lamDurationYear;// 拉米夫定(LAM)使用疗程: 年 integer(int32) + private String lamDurationMonth;// 拉米夫定(LAM)使用疗程: 月 integer(int32) + private String lamStopFlag;// 拉米夫定(LAM)是否中途停药 integer(int32) + private String lamStopYear;// 拉米夫定(LAM)停药年 integer(int32) + private String lamStopMonth;// 拉米夫定(LAM)停药月 integer(int32) + private String peg0flag;// 普干扰素 + private String peg0year;// 普干扰素 使用疗程 年 integer(int32) + private String peg0month;// 普干扰素 使用疗程 月 integer(int32) + private String peg0continuous;// 普干扰素 用药连续 01 integer(int32) + private String peg0course;// 普干扰素 使用疗程次数 integer(int32) + private String peg0unite;// 普干扰素 核苷联合干扰素 integer(int32) + private String peg90flag;// peg 干扰素(90) + private String peg90year;// peg 干扰素(90) 使用疗程 年 integer(int32) + private String peg90month;// peg 干扰素(90) 使用疗程 月 integer(int32) + private String peg90continuous;// peg 干扰素(90) 用药连续 01 integer(int32) + private String peg90course;// peg 干扰素(90) 使用疗程次数 integer(int32) + private String peg90unite;// peg 干扰素(90) 核苷联合干扰素 integer(int32) + private String peg135flag;// peg 干扰素(135) + private String peg135year;// peg 干扰素(135) 使用疗程 年 integer(int32) + private String peg135month;// peg 干扰素(135) 使用疗程 月 integer(int32) + private String peg135continuous;// peg 干扰素(135) 用药连续 01 integer(int32) + private String peg135course;// peg 干扰素(135) 使用疗程次数 integer(int32) + private String peg135unite;// peg 干扰素(135) 核苷联合干扰素 integer(int32) + private String peg180flag;// peg 干扰素(180) + private String peg180year;// peg 干扰素(180) 使用疗程 年 integer(int32) + private String peg180month;// peg 干扰素(180) 使用疗程 月 integer(int32) + private String peg180continuous;// peg 干扰素(180) 用药连续 01 integer(int32) + private String peg180course;// peg 干扰素(180) 使用疗程次数 integer(int32) + private String peg180unite;// peg 干扰素(180) 核苷联合干扰素 integer(int32) + private String createTime;// 创建时间 string(date-time) + private String updateTime;// 更新时间 string(date-time) + private String dataStatus;// 录入状态 0未录入 1部分录入 2已完成 integer(int32) + private String sdvStatus;// SDV状态 0未SDV 1部分SDV 2已SDV integer(int32) + private List imgPath;// + + public String getYongyaoId() { + return yongyaoId; + } + + public void setYongyaoId(String yongyaoId) { + this.yongyaoId = yongyaoId; + } + + public String getTreatFlag() { + return treatFlag; + } + + public void setTreatFlag(String treatFlag) { + this.treatFlag = treatFlag; + } + + public String getEtvFlag() { + return etvFlag; + } + + public void setEtvFlag(String etvFlag) { + this.etvFlag = etvFlag; + } + + public String getEtvDurationYear() { + return etvDurationYear; + } + + public void setEtvDurationYear(String etvDurationYear) { + this.etvDurationYear = etvDurationYear; + } + + public String getEtvDurationMonth() { + return etvDurationMonth; + } + + public void setEtvDurationMonth(String etvDurationMonth) { + this.etvDurationMonth = etvDurationMonth; + } + + public String getEtvStopFlag() { + return etvStopFlag; + } + + public void setEtvStopFlag(String etvStopFlag) { + this.etvStopFlag = etvStopFlag; + } + + public String getEtvStopYear() { + return etvStopYear; + } + + public void setEtvStopYear(String etvStopYear) { + this.etvStopYear = etvStopYear; + } + + public String getEtvStopMonth() { + return etvStopMonth; + } + + public void setEtvStopMonth(String etvStopMonth) { + this.etvStopMonth = etvStopMonth; + } + + public String getTdfFlag() { + return tdfFlag; + } + + public void setTdfFlag(String tdfFlag) { + this.tdfFlag = tdfFlag; + } + + public String getTdfDurationYear() { + return tdfDurationYear; + } + + public void setTdfDurationYear(String tdfDurationYear) { + this.tdfDurationYear = tdfDurationYear; + } + + public String getTdfDurationMonth() { + return tdfDurationMonth; + } + + public void setTdfDurationMonth(String tdfDurationMonth) { + this.tdfDurationMonth = tdfDurationMonth; + } + + public String getTdfStopFlag() { + return tdfStopFlag; + } + + public void setTdfStopFlag(String tdfStopFlag) { + this.tdfStopFlag = tdfStopFlag; + } + + public String getTdfStopYear() { + return tdfStopYear; + } + + public void setTdfStopYear(String tdfStopYear) { + this.tdfStopYear = tdfStopYear; + } + + public String getTdfStopMonth() { + return tdfStopMonth; + } + + public void setTdfStopMonth(String tdfStopMonth) { + this.tdfStopMonth = tdfStopMonth; + } + + public String getTafFlag() { + return tafFlag; + } + + public void setTafFlag(String tafFlag) { + this.tafFlag = tafFlag; + } + + public String getTafDurationYear() { + return tafDurationYear; + } + + public void setTafDurationYear(String tafDurationYear) { + this.tafDurationYear = tafDurationYear; + } + + public String getTafDurationMonth() { + return tafDurationMonth; + } + + public void setTafDurationMonth(String tafDurationMonth) { + this.tafDurationMonth = tafDurationMonth; + } + + public String getTafStopFlag() { + return tafStopFlag; + } + + public void setTafStopFlag(String tafStopFlag) { + this.tafStopFlag = tafStopFlag; + } + + public String getTafStopYear() { + return tafStopYear; + } + + public void setTafStopYear(String tafStopYear) { + this.tafStopYear = tafStopYear; + } + + public String getTafStopMonth() { + return tafStopMonth; + } + + public void setTafStopMonth(String tafStopMonth) { + this.tafStopMonth = tafStopMonth; + } + + public String getAdvFlag() { + return advFlag; + } + + public void setAdvFlag(String advFlag) { + this.advFlag = advFlag; + } + + public String getAdvDurationYear() { + return advDurationYear; + } + + public void setAdvDurationYear(String advDurationYear) { + this.advDurationYear = advDurationYear; + } + + public String getAdvDurationMonth() { + return advDurationMonth; + } + + public void setAdvDurationMonth(String advDurationMonth) { + this.advDurationMonth = advDurationMonth; + } + + public String getAdvStopFlag() { + return advStopFlag; + } + + public void setAdvStopFlag(String advStopFlag) { + this.advStopFlag = advStopFlag; + } + + public String getAdvStopYear() { + return advStopYear; + } + + public void setAdvStopYear(String advStopYear) { + this.advStopYear = advStopYear; + } + + public String getAdvStopMonth() { + return advStopMonth; + } + + public void setAdvStopMonth(String advStopMonth) { + this.advStopMonth = advStopMonth; + } + + public String getTmfFlag() { + return tmfFlag; + } + + public void setTmfFlag(String tmfFlag) { + this.tmfFlag = tmfFlag; + } + + public String getTmfDurationYear() { + return tmfDurationYear; + } + + public void setTmfDurationYear(String tmfDurationYear) { + this.tmfDurationYear = tmfDurationYear; + } + + public String getTmfDurationMonth() { + return tmfDurationMonth; + } + + public void setTmfDurationMonth(String tmfDurationMonth) { + this.tmfDurationMonth = tmfDurationMonth; + } + + public String getTmfStopFlag() { + return tmfStopFlag; + } + + public void setTmfStopFlag(String tmfStopFlag) { + this.tmfStopFlag = tmfStopFlag; + } + + public String getTmfStopYear() { + return tmfStopYear; + } + + public void setTmfStopYear(String tmfStopYear) { + this.tmfStopYear = tmfStopYear; + } + + public String getTmfStopMonth() { + return tmfStopMonth; + } + + public void setTmfStopMonth(String tmfStopMonth) { + this.tmfStopMonth = tmfStopMonth; + } + + public String getLdtFlag() { + return ldtFlag; + } + + public void setLdtFlag(String ldtFlag) { + this.ldtFlag = ldtFlag; + } + + public String getLdtDurationYear() { + return ldtDurationYear; + } + + public void setLdtDurationYear(String ldtDurationYear) { + this.ldtDurationYear = ldtDurationYear; + } + + public String getLdtDurationMonth() { + return ldtDurationMonth; + } + + public void setLdtDurationMonth(String ldtDurationMonth) { + this.ldtDurationMonth = ldtDurationMonth; + } + + public String getLdtStopFlag() { + return ldtStopFlag; + } + + public void setLdtStopFlag(String ldtStopFlag) { + this.ldtStopFlag = ldtStopFlag; + } + + public String getLdtStopYear() { + return ldtStopYear; + } + + public void setLdtStopYear(String ldtStopYear) { + this.ldtStopYear = ldtStopYear; + } + + public String getLdtStopMonth() { + return ldtStopMonth; + } + + public void setLdtStopMonth(String ldtStopMonth) { + this.ldtStopMonth = ldtStopMonth; + } + + public String getLamFlag() { + return lamFlag; + } + + public void setLamFlag(String lamFlag) { + this.lamFlag = lamFlag; + } + + public String getLamDurationYear() { + return lamDurationYear; + } + + public void setLamDurationYear(String lamDurationYear) { + this.lamDurationYear = lamDurationYear; + } + + public String getLamDurationMonth() { + return lamDurationMonth; + } + + public void setLamDurationMonth(String lamDurationMonth) { + this.lamDurationMonth = lamDurationMonth; + } + + public String getLamStopFlag() { + return lamStopFlag; + } + + public void setLamStopFlag(String lamStopFlag) { + this.lamStopFlag = lamStopFlag; + } + + public String getLamStopYear() { + return lamStopYear; + } + + public void setLamStopYear(String lamStopYear) { + this.lamStopYear = lamStopYear; + } + + public String getLamStopMonth() { + return lamStopMonth; + } + + public void setLamStopMonth(String lamStopMonth) { + this.lamStopMonth = lamStopMonth; + } + + public String getPeg0flag() { + return peg0flag; + } + + public void setPeg0flag(String peg0flag) { + this.peg0flag = peg0flag; + } + + public String getPeg0year() { + return peg0year; + } + + public void setPeg0year(String peg0year) { + this.peg0year = peg0year; + } + + public String getPeg0month() { + return peg0month; + } + + public void setPeg0month(String peg0month) { + this.peg0month = peg0month; + } + + public String getPeg0continuous() { + return peg0continuous; + } + + public void setPeg0continuous(String peg0continuous) { + this.peg0continuous = peg0continuous; + } + + public String getPeg0course() { + return peg0course; + } + + public void setPeg0course(String peg0course) { + this.peg0course = peg0course; + } + + public String getPeg0unite() { + return peg0unite; + } + + public void setPeg0unite(String peg0unite) { + this.peg0unite = peg0unite; + } + + public String getPeg90flag() { + return peg90flag; + } + + public void setPeg90flag(String peg90flag) { + this.peg90flag = peg90flag; + } + + public String getPeg90year() { + return peg90year; + } + + public void setPeg90year(String peg90year) { + this.peg90year = peg90year; + } + + public String getPeg90month() { + return peg90month; + } + + public void setPeg90month(String peg90month) { + this.peg90month = peg90month; + } + + public String getPeg90continuous() { + return peg90continuous; + } + + public void setPeg90continuous(String peg90continuous) { + this.peg90continuous = peg90continuous; + } + + public String getPeg90course() { + return peg90course; + } + + public void setPeg90course(String peg90course) { + this.peg90course = peg90course; + } + + public String getPeg90unite() { + return peg90unite; + } + + public void setPeg90unite(String peg90unite) { + this.peg90unite = peg90unite; + } + + public String getPeg135flag() { + return peg135flag; + } + + public void setPeg135flag(String peg135flag) { + this.peg135flag = peg135flag; + } + + public String getPeg135year() { + return peg135year; + } + + public void setPeg135year(String peg135year) { + this.peg135year = peg135year; + } + + public String getPeg135month() { + return peg135month; + } + + public void setPeg135month(String peg135month) { + this.peg135month = peg135month; + } + + public String getPeg135continuous() { + return peg135continuous; + } + + public void setPeg135continuous(String peg135continuous) { + this.peg135continuous = peg135continuous; + } + + public String getPeg135course() { + return peg135course; + } + + public void setPeg135course(String peg135course) { + this.peg135course = peg135course; + } + + public String getPeg135unite() { + return peg135unite; + } + + public void setPeg135unite(String peg135unite) { + this.peg135unite = peg135unite; + } + + public String getPeg180flag() { + return peg180flag; + } + + public void setPeg180flag(String peg180flag) { + this.peg180flag = peg180flag; + } + + public String getPeg180year() { + return peg180year; + } + + public void setPeg180year(String peg180year) { + this.peg180year = peg180year; + } + + public String getPeg180month() { + return peg180month; + } + + public void setPeg180month(String peg180month) { + this.peg180month = peg180month; + } + + public String getPeg180continuous() { + return peg180continuous; + } + + public void setPeg180continuous(String peg180continuous) { + this.peg180continuous = peg180continuous; + } + + public String getPeg180course() { + return peg180course; + } + + public void setPeg180course(String peg180course) { + this.peg180course = peg180course; + } + + public String getPeg180unite() { + return peg180unite; + } + + public void setPeg180unite(String peg180unite) { + this.peg180unite = peg180unite; + } + + public String getCreateTime() { + return createTime; + } + + public void setCreateTime(String createTime) { + this.createTime = createTime; + } + + public String getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(String updateTime) { + this.updateTime = updateTime; + } + + public String getDataStatus() { + return dataStatus; + } + + public void setDataStatus(String dataStatus) { + this.dataStatus = dataStatus; + } + + public String getSdvStatus() { + return sdvStatus; + } + + public void setSdvStatus(String sdvStatus) { + this.sdvStatus = sdvStatus; + } + + public List getImgPath() { + return imgPath; + } + + public void setImgPath(List imgPath) { + this.imgPath = imgPath; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/MyIm.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/MyIm.java new file mode 100644 index 0000000..61f625c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/MyIm.java @@ -0,0 +1,46 @@ +package cn.shangyu.gdxzExpert.big; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.text.style.ImageSpan; + +public class MyIm extends ImageSpan +{ + public MyIm(Context arg0, int arg1) { + super(arg0, arg1); + } + public int getSize(Paint paint, CharSequence text, int start, int end, + Paint.FontMetricsInt fm) { + Drawable d = getDrawable(); + Rect rect = d.getBounds(); + if (fm != null) { + Paint.FontMetricsInt fmPaint=paint.getFontMetricsInt(); + int fontHeight = fmPaint.bottom - fmPaint.top; + int drHeight=rect.bottom-rect.top; + + int top= drHeight/2 - fontHeight/4; + int bottom=drHeight/2 + fontHeight/4; + + fm.ascent=-bottom; + fm.top=-bottom; + fm.bottom=top; + fm.descent=top; + } + return rect.right; + } + + @Override + public void draw(Canvas canvas, CharSequence text, int start, int end, + float x, int top, int y, int bottom, Paint paint) { + Drawable b = getDrawable(); + canvas.save(); + int transY = 0; + transY = ((bottom-top) - b.getBounds().bottom)/2+top; + canvas.translate(x, transY); + b.draw(canvas); + canvas.restore(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BeginBigActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BeginBigActivity.java new file mode 100644 index 0000000..4c814ab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BeginBigActivity.java @@ -0,0 +1,55 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.ImageView; + +import com.umeng.analytics.MobclickAgent; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.IS_BIG_MUDULE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_OPEN_BIGVERSION; + +public class BeginBigActivity extends BaseActivity { + + + @Override + public void setTitle() { + + } + + @Override + public View onCreateSuccessedView() { + View view=View.inflate(ct, R.layout.activity_begin_big, null); + ImageView btn_bgein_big=view.findViewById(R.id.btn_bgein_big); + btn_bgein_big.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + MobclickAgent.onEvent(BeginBigActivity.this,EXPERT_OPEN_BIGVERSION); + SharePrefUtil.saveBoolean(UIUtils.getContext(),IS_BIG_MUDULE,true); + Intent intent=new Intent(BeginBigActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } + }); + top_title.setText("大字版"); + top_title.setTextSize(23); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigCoursewareActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigCoursewareActivity.java new file mode 100644 index 0000000..e64d6f7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigCoursewareActivity.java @@ -0,0 +1,657 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_COURSEWARE_LIST; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CourseUrlDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CoursewareListBean; +import cn.shangyu.gdxzExpert.bean.CoursewareListBean.CoursewareBean; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class BigCoursewareActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + private View view; + private DrawableCenterButtonR screen; + // private EditText search_text; + private int page = 1; + private PullToRefreshListView ptrLv; + private String topic = "0"; + private DrawableCenterCheckBox mCb_Jx; + private RelativeLayout mRl_pop_screen; + private Button mBt_sure, mBt_reset; + private GridView mGv_screen; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private View ll_loading; + private LinearLayout ll_empty; + BigCoursewareActivity mActivity; + private List ListBeans = new ArrayList(); + public CoursewareAdapter mAdapter; + public ImageView mTv_share; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("肝胆课件"); + top_title.setTextSize(23); + top_right.setImageResource(R.drawable.big_search); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_courseware_big); + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_courseware); + // 查询输入的内容 + // search_text = (EditText) view.findViewById(R.id.et_search_text); + // 点击查询按钮search + screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_kj_screen); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无课件"); + mRl_pop_screen = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + // 空布局,处理 + mCb_Jx = (DrawableCenterCheckBox) view.findViewById(R.id.cb_kj_jx); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mTv_share = (ImageView) view.findViewById(R.id.tv_share); + mActivity = this; + initListener(); + getDataResult(); + getTagList(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + MobclickAgent.onEvent(this,EXPERT_COURSEWARE_LIST); + } + + private void initListener() { + // TODO Auto-generated method stub + mGv_screen.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + ptrLv.setMode(Mode.BOTH); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + + } + }); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + mBt_sure.setOnClickListener(this); + screen.setOnClickListener(this); + mTv_share.setOnClickListener(this); + mCb_Jx.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + page = 1; + if (isChecked) { + topic = "1"; + mCb_Jx.setText("最热"); + } else { + topic = "0"; + mCb_Jx.setText("最新"); + } + getDataResult(); + + } + }); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + StringBuilder keywords = new StringBuilder(); + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.tv_share: + showLoag(); + break; + case R.id.top_right: + Intent intent = new Intent(mActivity, BigPublicSearchActivity.class); + intent.setType("course"); + startActivity(intent); + break; + case R.id.bt_kj_screen: + if (mTagList == null) { + getTagList(); + } + if (mRl_pop_screen.getVisibility() == View.GONE) { + mRl_pop_screen.setVisibility(View.VISIBLE); + + } else { + mRl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + break; + case R.id.bt_sure: + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null && TagPosition.size() != 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + screen.setCompoundDrawables(null, null, drawable, null); + screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.shaixuan_big); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + screen.setCompoundDrawables(null, null, drawable, null); + screen.setTextColor(getResources().getColor( + R.color.c333333)); + } + page = 1; + keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + + } + getDataResult(); + break; + + default: + break; + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList!=null&&mTagList.data.size()>0?mTagList.data.size():0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen_big); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + } + + public static final int GET_COURSE_DATAS_RESULT = 101; + public static final int GET_TAGS_DATAS_RESULT = 102; + public static final int GET_SHRE_DATAS_RESULT = 103; + + public void getTagList() { + Map param = new HashMap(); + param.put("type", "6"); + sendParamtoNet(Url.getTagList, param, GET_TAGS_DATAS_RESULT, mActivity, + true); + + } + + public void getDataResult() { + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", keywords.toString()); + param.put("sort", topic); + param.put("title", ""); + sendJsonPostParamtoNetSignMD5(Url.getGanDanFileByKeyWords, param, + GET_COURSE_DATAS_RESULT, mActivity); + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, CourseUrlDetailActivity.class); + intent.putExtra("url", + ListBeans.get(arg2 - 1).getPreview_path()); + intent.putExtra("title", ListBeans.get(arg2 - 1).getTitle()); + intent.putExtra("uuid", ListBeans.get(arg2 - 1).getUuid()); + intent.putExtra("type", ListBeans.get(arg2 - 1).getType()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_TAGS_DATAS_RESULT: + processTage(resultJson); + break; + case GET_COURSE_DATAS_RESULT: + processData(resultJson); + break; + case GET_SHRE_DATAS_RESULT: + JSONObject jsob; + try { + jsob = new JSONObject(resultJson); + String retcode = jsob.getString("code"); + if (!retcode.equals("1")) { + ToastUtil.showMessage("提交失败"); + }else{ + ToastUtil.showMessage("谢谢您的支持"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + default: + break; + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + CoursewareListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, CoursewareListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + // 初始化列表的数据 + if (page == 1) { + ListBeans.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + ListBeans.addAll(bean.data.list); + } + } + + else { + ListBeans.addAll(bean.data.list); + } + if (mAdapter == null) { + mAdapter = new CoursewareAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 +// long totalPage = bean.data.totalPage; + if (bean.data.list==null||bean.data.list.size()==0) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + ECAlertDialog buildAlert; + + private void showLoag() { + String message = "肝胆相照将稍后与您沟通课件分享\r\n谢谢您对平台的支持!"; + buildAlert = ECAlertDialog.buildAlert(BigCoursewareActivity.this, message, + "取消", "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + toshare(); + } + + }); + buildAlert.setTitle("提示"); + // buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + public void toshare() { + String expertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + Map param = new HashMap(); + param.put("content", "我要共享课件"); + param.put("expertUuid", expertUuid); + sendParamtoNet(Url.getfeedBack, param, GET_SHRE_DATAS_RESULT, mActivity, + true); + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + public class CoursewareAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return ListBeans.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return ListBeans.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_courseware_big); + vh = new ViewHolder(); +// vh.mIv_type = (ImageView) convertView +// .findViewById(R.id.item_iv_courseware); +// vh.iv_down = (ImageView) convertView +// .findViewById(R.id.iv_down); + vh.mTv_free = (TextView) convertView + .findViewById(R.id.item_tv_free_price); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.item_tv_title); + vh.mTv_providername = (TextView) convertView + .findViewById(R.id.item_tv_providername); + vh.mTv_hospitalname = (TextView) convertView + .findViewById(R.id.item_tv_hospitalname); + vh.mTv_readnum = (TextView) convertView + .findViewById(R.id.item_tv_rednum); + vh.mTv_price = (TextView) convertView + .findViewById(R.id.item_tv_price); +// vh.mTv_yuan = (TextView) convertView +// .findViewById(R.id.item_tv_yuan); + vh.mTv_old = (TextView) convertView + .findViewById(R.id.item_tv_old); + vh.mTv_old_price = (TextView) convertView + .findViewById(R.id.item_tv_old_price); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } +// if (ListBeans.get(position).getType().contains("pdf")) { +// vh.mIv_type.setImageResource(R.drawable.pdf); +// } else if (ListBeans.get(position).getType().contains("doc")) { +// vh.mIv_type.setImageResource(R.drawable.word); +// } else { +// vh.mIv_type.setImageResource(R.drawable.ppt); +// } +// if (ListBeans.get(position).getPrice()<0){ +// vh.iv_down.setVisibility(View.INVISIBLE); +// }else { +// vh.iv_down.setVisibility(View.VISIBLE); +// } + vh.mTv_title.setText(ListBeans.get(position).getTitle()); + vh.mTv_hospitalname.setText(ListBeans.get(position).getHospitalname()); + vh.mTv_readnum.setText(ListBeans.get(position).getReadnum() + "人阅读"); + vh.mTv_title.setText(ListBeans.get(position).getTitle()); + vh.mTv_providername.setText(ListBeans.get(position) + .getProvidername()+" "); + if (ListBeans.get(position).getPrice() == 0) { + vh.mTv_free.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else if (ListBeans.get(position).getPrice() > 0) { + if (ListBeans.get(position).getDiscount() < 1 + && ListBeans.get(position).getDiscount() > 0) { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.VISIBLE); + vh.mTv_price.setText("下载 "+ListBeans.get(position).getDiscount() + * ListBeans.get(position).getPrice() / 100.0 + "元"); + vh.mTv_old.setVisibility(View.VISIBLE); + vh.mTv_old_price.setVisibility(View.VISIBLE); + vh.mTv_old_price.setText(ListBeans.get(position).getPrice() + / 100.0 + "元"); + vh.mTv_old_price.getPaint() + .setFlags( + Paint.STRIKE_THRU_TEXT_FLAG + | Paint.ANTI_ALIAS_FLAG); + } else if (ListBeans.get(position).getDiscount() == 1) { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.VISIBLE); + vh.mTv_price.setText("下载 "+ListBeans.get(position).getPrice() + / 100.0 + "元"); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else if (ListBeans.get(position).getDiscount() == 0) { + vh.mTv_free.setVisibility(View.VISIBLE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } else { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } + } else { + vh.mTv_free.setVisibility(View.GONE); + vh.mTv_price.setVisibility(View.GONE); + vh.mTv_old.setVisibility(View.GONE); + vh.mTv_old_price.setVisibility(View.GONE); + } + + return convertView; + } + + class ViewHolder { +// public ImageView iv_down; + public TextView mTv_title, mTv_providername, mTv_hospitalname, + mTv_readnum, mTv_price, mTv_free, mTv_old, + mTv_old_price; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMainActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMainActivity.java new file mode 100644 index 0000000..1602ffa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMainActivity.java @@ -0,0 +1,161 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.big.fragment.BigHomeFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigMyFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigRecommendFragment; +import cn.shangyu.gdxzExpert.big.adapter.NormalItemViewBig; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.OldPageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +public class BigMainActivity extends BaseActivity { + + @Override + public void setTitle() { + + } + + private OldPageNavigationView tab; + private FragmentManager manager; + NavigationController navigationController; + private Fragment currentFragment; + BigHomeFragment bigHomeFragment; + BigRecommendFragment bigRecommendFragment; + BigMyFragment bigMyFragment; + @Override + public View onCreateSuccessedView() { + View view = View.inflate(ct, R.layout.activity_big_main, null); + mToolbar.setVisibility(View.GONE); + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) layout.getLayoutParams(); + p.setMargins(0,0, 0, 0); + layout.requestLayout(); + tab= view.findViewById(R.id.tab); + + //注意这里调用了custom()方法 + navigationController = tab.custom() + .addItem(newItem(R.drawable.big_home_d,R.drawable.big_home,"首页")) + .addItem(newItem(R.drawable.big_r_d,R.drawable.big_r,"推荐")) + .addItem(newItem(R.drawable.big_my_d,R.drawable.big_my,"我的")) + + .build(); + + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + // 选中时触发 + switch (index) + { + case 0: + showFragment(bigHomeFragment); + break; + case 1: + showFragment(bigRecommendFragment); + + break; + case 2: + showFragment(bigMyFragment); + + break; + + } + + } + }); + initFragment(); + if(getIntent().getIntExtra("home_module",0)==0) + { + showFragment(bigHomeFragment); + } + else + { + navigationController.setSelect(getIntent().getIntExtra("home_module",0)); + } + return view; + } + //创建一个Item + private BaseTabItem newItem(int drawable, int checkedDrawable, String text){ + NormalItemViewBig normalItemView = new NormalItemViewBig(this); + normalItemView.initialize(drawable,checkedDrawable,text,14); + normalItemView.setTextDefaultColor(Color.parseColor("#999999")); + normalItemView.setTextCheckedColor(Color.parseColor("#ff8B2316")); +// normalItemView.setMessageNumber(1); +// normalItemView.setHasMessage(true); + return normalItemView; + } + private void initFragment() + { + manager = getSupportFragmentManager(); + //实例化碎片对象 + bigHomeFragment = new BigHomeFragment(); + bigRecommendFragment = new BigRecommendFragment(); + bigMyFragment = new BigMyFragment(); + } + /** + 71 * 展示Fragment + 72 */ + private void showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = manager.beginTransaction(); + if(currentFragment!=null) + { + transaction.hide(currentFragment); + } + + currentFragment = fragment; + if (!fragment.isAdded()) { + transaction.add(R.id.frame_container, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + } + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onBackPressed() { +// super.onBackPressed(); + doTaskToBackEvent(); + Intent i= new Intent(Intent.ACTION_MAIN); + i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + i.addCategory(Intent.CATEGORY_HOME); + startActivity(i); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_HOME) { + doTaskToBackEvent(); + } + return super.onKeyDown(keyCode, event); + } + /** + * 返回隐藏到后台 + */ + public void doTaskToBackEvent() { + moveTaskToBack(true); + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(this, 4); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMettingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMettingActivity.java new file mode 100644 index 0000000..3f47990 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMettingActivity.java @@ -0,0 +1,579 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static cn.bertsir.zbar.QrConfig.SCANVIEW_TYPE_QRCODE; +import static cn.bertsir.zbar.QrConfig.SCREEN_PORTRAIT; +import static cn.bertsir.zbar.QrConfig.TYPE_QRCODE; +import static cn.bertsir.zbar.view.ScanLineView.style_line; +import static cn.shangyu.gdxzExpert.utils.Url.getNewMeetingList; +import static cn.shangyu.gdxzExpert.utils.Url.scanurl; + +import android.Manifest; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.DataOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.bertsir.zbar.Qr.ScanResult; +import cn.bertsir.zbar.QrConfig; +import cn.bertsir.zbar.QrManager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ConfirmActivity; +import cn.shangyu.gdxzExpert.activity.GDEventDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MeetingBean; +import cn.shangyu.gdxzExpert.big.adapter.BigMeetingAdapter; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class BigMettingActivity extends BaseActivity implements + AdapterView.OnItemClickListener, OnCallBackFromNet { + + + private TextView tv_empty_msg; + + @Override + public void setTitle() { + top_title.setTextSize(23); + top_title.setText("看直播"); + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + finish(); + } + }); + top_right_text.setText("扫一扫"); + top_right_text.setTextSize(18); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(BigMettingActivity.this, Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + startToCapture(); + } else { + EasyWindow.with(BigMettingActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog).show(); + PermissionsUtil.requestPermission(BigMettingActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问读取短信的权限 + startToCapture(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读取短信的申请 + + } + + }, new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + startToCapture(); + } + } + }); + } + + + View view; + private PullToRefreshListView ptrLv; + private String url = getNewMeetingList; + private int page = 1; + private List mList = new ArrayList(); + private List tempList = new ArrayList(); + BigMeetingAdapter mAdapter; +// private String status = "";//肝胆直播 + LinearLayout ll_empty; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + view = UIUtils.inflate(R.layout.activity_big_metting); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_video); +// 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + + tv_empty_msg.setText("暂无会议预告"); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + meetingListBySearchNew("",page+"","","",""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + meetingListBySearchNew("",page+"","","",""); + } + }); + initData(); + + return view; + } + + + private void meetingListBySearchNew(String location,String page,String type,String status,String month) { + showLoadingProgress(); + Map param = new HashMap(); + param.put("page", page); + sendJsonPostParamtoNetSignMD5(url + "V2", param, 01, this); + } + + public void initData() { + +// String result = SharePrefUtil.getString(this, url + "V2", null); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { +// showLoadingProgress(); +// } +// // 网络是否可用 +// if (!CommonUtil.isNetworkAvailable()) { +// onLoaded(); +// // 显示网络错误布局 +// ptrLv.setEmptyView(tv_load_fail); +// return; +// } + + meetingListBySearchNew("",page+"","","",""); + + + } + +// public List DatasList; + + public void getPosition() { +// DatasList = new ArrayList(); +// int count = 0; +// for (int i = 0; i < mList.size(); i++) { +// if (!DatasList.contains(mList.get(i).getBegin_date() +// .substring(0, 7))) { +// DatasList.add(mList.get(i).getBegin_date().substring(0, 7)); +// // Positions.add(i + ""); +// count = 0; +// mList.get(i).setCount(count); +// } else { +// count++; +// mList.get(i).setCount(count); +// } +// } + // 更新科普 + if (mAdapter == null) { + mAdapter = new BigMeetingAdapter(this, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + public void shuaixuanList(List lists) + { + tempList.clear(); + for (MeetingBean.MeatingList bean:lists) + { + if(!StringUtil.isEmpty(bean.getLiveimg())) + { + tempList.add(bean); + } + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + MeetingBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, MeetingBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean == null) + { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + + if (bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + shuaixuanList(bean.data.list); + mList.addAll(tempList); +// mList.addAll(bean.data.list); + } + } else { + shuaixuanList(bean.data.list); + mList.addAll(tempList); +// mList.addAll(bean.data.list); + } + if (mAdapter == null) { + mAdapter = new BigMeetingAdapter(this, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多会议了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.pages; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(BigMettingActivity.this, GDEventDetailActivity.class); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + //intent.putExtra("url", Url.urlHtml + mList.get(position - 1).getPath());wcx旧版 + intent.putExtra("url", mList.get(position - 1).getPath()); + intent.putExtra("summary", mList.get(position - 1).getContent()); + intent.setType("meeting"); + startActivity(intent); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub\ +// if (page == 1) { +// SharePrefUtil.saveString(this, url + "V2", +// resultJson); +// +// } + processData(resultJson); + } + + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + private void startToCapture() { + start(); +// startActivity(new Intent(MainActivity.this, CaptureActivity.class)); + } + String scanResult; + private void start() { + + QrConfig qrConfig = new QrConfig.Builder() + .setDesText("将二维码放入框内,自动扫码")//扫描框下文字 + .setShowDes(true)//是否显示扫描框下面文字 + .setShowLight(false)//显示手电筒按钮 + .setShowTitle(true)//显示Title + .setShowAlbum(false)//显示从相册选择按钮 + .setNeedCrop(false)//是否从相册选择后裁剪图片 +// .setCornerColor(Color.parseColor("#E42E30"))//设置扫描框颜色 + .setLineColor(Color.parseColor("#8D2316"))//设置扫描线颜色 + .setLineSpeed(QrConfig.LINE_MEDIUM)//设置扫描线速度 + .setScanType(TYPE_QRCODE)//设置扫码类型(二维码,条形码,全部,自定义,默认为二维码) + .setScanViewType(SCANVIEW_TYPE_QRCODE)//设置扫描框类型(二维码还是条形码,默认为二维码) + .setCustombarcodeformat(QrConfig.BARCODE_PDF417)//此项只有在扫码类型为TYPE_CUSTOM时才有效 + .setPlaySound(true)//是否扫描成功后bi~的声音 +// .setDingPath(cb_show_custom_ding.isChecked() ? R.raw.test : R.raw.qrcode)//设置提示音(不设置为默认的Ding~) + .setIsOnlyCenter(false)//是否只识别框中内容(默认为全屏识别) +// .setTitleText(et_qr_title.getText().toString())//设置Tilte文字 + .setTitleBackgroudColor(Color.parseColor("#FFEFEFEF"))//设置状态栏颜色 + .setTitleTextColor(Color.parseColor("#8D2316"))//设置Title文字颜色 +// .setShowZoom(cb_show_zoom.isChecked())//是否开始滑块的缩放 +// .setAutoZoom(cb_auto_zoom.isChecked())//是否开启自动缩放(实验性功能,不建议使用) +// .setFingerZoom(cb_finger_zoom.isChecked())//是否开始双指缩放 +// .setDoubleEngine(cb_double_engine.isChecked())//是否开启双引擎识别(仅对识别二维码有效,并且开启后只识别框内功能将失效) + .setScreenOrientation(SCREEN_PORTRAIT)//设置屏幕方式 + .setOpenAlbumText("选择要识别的图片")//打开相册的文字 + .setLooperScan(false)//是否连续扫描二维码 +// .setLooperWaitTime(Integer.parseInt(et_loop_scan_time.getText().toString()) * 1000)//连续扫描间隔时间 + .setScanLineStyle(style_line)//扫描线样式 +// .setAutoLight(cb_auto_light.isChecked())//自动灯光 + .setShowVibrator(true)//是否震动提醒 + .create(); + QrManager.getInstance().init(qrConfig).startScan(this, new QrManager.OnScanResultCallback() { + @Override + public void onScanSuccess(ScanResult result) { +// Log.e(TAG, "onScanSuccess: " + result); + + scanResult = result.getContent(); + try { + scanResult= AESUtil.Decrypt(scanResult, "deoep09_klodLdAo"); + new Thread(networkTask2).start(); + } catch (Exception e) { + e.printStackTrace(); + } + +// Toast.makeText(MainActivity.this, "内容:" + result.getContent() +// + " 类型:" + result.getType(), Toast.LENGTH_SHORT).show(); + } + }); + } + String finres; + String canfinres; + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + //String url = null; + + if(scanResult==null) + { + ToastUtil.showMessage("您扫描的不是有效的肝胆相照平台二维码"); +// finish(); + return; + } + + if (scanResult.contains("watchliveFrom")) { + + String uuid = SharePrefUtil.getString(BigMettingActivity.this, Constant.uuid, "123"); + String realname = SharePrefUtil.getString(BigMettingActivity.this, Constant.realName, "肝胆相照专家"); + String photo = SharePrefUtil.getString(BigMettingActivity.this, Constant.photo, "https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + if (StringUtil.isEmpty(photo) || "null".equals(photo)) { + photo = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + scanResult = scanResult.replaceAll("watchliveFrom:", ""); + try { + //url = urlpath +"?message=" + AESUtil.Encrypt("liveScanSuccess}" + result + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + finres=AESUtil.Encrypt("watchliveTo}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + canfinres=AESUtil.Encrypt("watchliveCancel}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + getTooken1(scanurl,AESUtil.Encrypt("liveScanSuccess}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo")); + } catch (Exception e) { + e.printStackTrace(); + } + + } + else if(scanResult.contains("watchvideoFrom")){ + String uuid = SharePrefUtil.getString(BigMettingActivity.this, Constant.uuid, "123"); + String realname = SharePrefUtil.getString(BigMettingActivity.this, Constant.realName, "肝胆相照专家"); + String photo = SharePrefUtil.getString(BigMettingActivity.this, Constant.photo, "https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + if (StringUtil.isEmpty(photo) || "null".equals(photo)) { + photo = "https://doc.igandan.com/app/html/img/2016/20160714132557.png"; + } + scanResult = scanResult.replaceAll("watchvideoFrom:", ""); + try { + //url = urlpath + "?message=" +AESUtil.Encrypt("videoScanSuccess}" + result + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + finres=AESUtil.Encrypt("watchvideoTo}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + canfinres=AESUtil.Encrypt("watchvideoCancel}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo"); + getTooken1(scanurl,AESUtil.Encrypt("videoScanSuccess}" + scanResult + "}" + uuid + "," + realname + "," + photo,"deoep09_klodLdAo")); + } catch (Exception e) { + e.printStackTrace(); + } + + } + else { + ToastUtil.showMessage("您扫描的不是有效的肝胆相照平台二维码"); +// finish(); + + } + + + } + + + }; + + private void getTooken1(String urlStringUtil,String param) { + // TODO Auto-generated method stub + + + try { + String data="message="+ URLEncoder.encode(param,"UTF-8"); + URL url = new URL(urlStringUtil); + + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); + + conn.setConnectTimeout(5 * 1000); + DataOutputStream dos=new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(data); + dos.flush(); + dos.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Log.d("saoresult" , result); + Message message = new Message(); + message.what = 102; + message.obj = new String(result); + handler1.sendMessage(message); + }else { + Message message = new Message(); + message.what = 105; + handler1.sendMessage(message); + ToastUtil.showMessage("请求失败了,请稍后重试"); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showMessage("请求失败,请稍后重试"); + } + + } + public Handler handler1 = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case 102: + + try { + + String str = (String) msg.obj; + //Log.d("saoresult" , str);//{"code":1,"message":"授权成功"} + JSONObject objs = new JSONObject(str); + int retcode = objs.optInt("code"); + +// String expertuuid = objs.getString("expertUuid"); +// String message = objs.getString("message"); + //ToastUtil.showMessage(message,1); + if(retcode==1) + { + + if(finres!=null&&canfinres!=null) + { + + Intent intent=new Intent(BigMettingActivity.this, ConfirmActivity.class); + intent.putExtra("scancode",finres); + intent.putExtra("canfinres",canfinres); + startActivity(intent); +// finish(); + } + } + else { + ToastUtil.showMessage("服务器异常!"); + } + + + } catch (JSONException e) { + e.printStackTrace(); + // ToastUtil.showMessage("服务器异常!"); + finish(); + } + break; + + + } + + } + + }; +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMyLibraryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMyLibraryActivity.java new file mode 100644 index 0000000..ee7b0f7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigMyLibraryActivity.java @@ -0,0 +1,451 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; + +import androidx.fragment.app.FragmentManager; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyWFArticleActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.big.fragment.BIgBookshelfFragment; +import cn.shangyu.gdxzExpert.fragment.BookshelfFragment2; +import cn.shangyu.gdxzExpert.fragment.MedicineBookFragment; +import cn.shangyu.gdxzExpert.fragment.PubMedFragment; +import cn.shangyu.gdxzExpert.fragment.SearchPaperFragment; +import cn.shangyu.gdxzExpert.fragment.ToolsListFragment; +import cn.shangyu.gdxzExpert.fragment.WFSearchFragment; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.NotNormalItemView; +import cn.shangyu.gdxzExpert.widge.pickerview.PopMenu; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.PageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +/** + * MyLibraryActivity.java + * + * @author liufang + * @date 2015-11-4 上午9:40:44 + * + * + * 功能说明:我的图书馆主页面 + */ +public class BigMyLibraryActivity extends BaseActivity implements + OnCheckedChangeListener { + private RadioGroup main_radiogroup; + private FragmentManager fm; + private PopMenu popMenu; + private PageNavigationView mGroup_library; + private RadioButton mWf_Libiary, mEn_Libiary, mPubWed, mDaiCha; + private RadioButton mRb_Journal, mRb_Medicine, mRb_Tools; + View im_bg; + private NavigationController navigationController; + public View mV_lines,v_g; + private RadioButton mRb_chinease,iv_library_english,iv_library_wanfang; + public static int ERROR = 101; + public static boolean isdrug = true; + + @Override + public void setTitle() { + top_back_layout.setVisibility(View.VISIBLE); + top_title.setTextSize(23); + top_right.setVisibility(View.GONE); + top_right.setImageResource(R.drawable.icon_library_right); + + // 初始化弹出菜单 + popMenu = new PopMenu(this); + popMenu.addItems(new String[] { getString(R.string.action_download), + getString(R.string.action_collect) }, + new int[] { R.drawable.icon_pop_item_down, + R.drawable.icon_pop_item_collect }); + // 菜单项点击监听器 + popMenu.setOnItemClickListener(popmenuItemClickListener); + } + + // 弹出菜单监听器 + OnItemClickListener popmenuItemClickListener = new OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // ***********下载*********** + if (position == 0) { + Intent intent = new Intent(ct, MyWFArticleActivity.class); + intent.setType("下载"); + startActivity(intent); + // ************收藏************ + } else if (position == 1) { + Intent intent = new Intent(ct, MyWFArticleActivity.class); + intent.setType("收藏"); + startActivity(intent); + } + popMenu.dismiss(); + } + }; + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_my_library_big, null); + v_g=view.findViewById(R.id.v_g); + v_g.setOnClickListener(this); + v_g.setVisibility(View.GONE); + main_radiogroup = (RadioGroup) view + .findViewById(R.id.main_radiogroup_library); + mGroup_library = view + .findViewById(R.id.tab); + mDaiCha = (RadioButton) view.findViewById(R.id.iv_library_daicha); + im_bg=view.findViewById(R.id.im_bg); + navigationController = mGroup_library.custom() + .addItem(newItem("代查文献")) + .addItem(newItem("英文文献")) + .build(); + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + + // 选中时触发 + if(index==0) + { + changeSearch(); + } + else + { + + changeENJournal(); + } + + } + }); +// mGroup_library.setOnCheckedChangeListener(mChangeListener); + main_radiogroup.setOnCheckedChangeListener(this); + // mLl_lines = (LinearLayout) view.findViewById(R.id.ll_lines); + mWf_Libiary = (RadioButton) view.findViewById(R.id.iv_library_wanfang); + mRb_Journal = (RadioButton) view.findViewById(R.id.tab_rbn_journal); + mRb_chinease = (RadioButton) view + .findViewById(R.id.iv_library_chinease); + iv_library_english=view.findViewById(R.id.iv_library_english); + iv_library_wanfang=view.findViewById(R.id.iv_library_wanfang); + mRb_Medicine = (RadioButton) view.findViewById(R.id.tab_rbn_express); + mRb_Tools = (RadioButton) view.findViewById(R.id.tab_rbn_tools); + // mV_line1 = view.findViewById(R.id.v_line1); + // mV_line2 = view.findViewById(R.id.v_line2); + // mV_line3 = view.findViewById(R.id.v_line3); + // mV_line4 = view.findViewById(R.id.v_line4); + mV_lines = view.findViewById(R.id.v_lines); + // tvGuide = (TextView) view.findViewById(R.id.tv_guide); + // tvJournal = (TextView) view.findViewById(R.id.tv_journal); + // tvExpress = (TextView) view.findViewById(R.id.tv_express); + // tvTools = (TextView) view.findViewById(R.id.tv_tools); + if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) + { + mRb_Journal.setVisibility(View.VISIBLE); + view.findViewById(R.id.tv_express).setVisibility(View.VISIBLE); + view.findViewById(R.id.tv_journal).setVisibility(View.VISIBLE); + view.findViewById(R.id.tab_rbn_guide).setVisibility(View.VISIBLE); + } + else + { + mRb_Journal.setVisibility(View.GONE); + view.findViewById(R.id.tv_express).setVisibility(View.GONE); + view.findViewById(R.id.tv_journal).setVisibility(View.GONE); + view.findViewById(R.id.tab_rbn_guide).setVisibility(View.GONE); + } + fm = getSupportFragmentManager(); + String searchStr = getIntent().getStringExtra("search"); + + String navi = getIntent().getStringExtra("navi"); + if (!StringUtil.isEmpty(navi) && navi.equals("journal")) { + mRb_Journal.setChecked(true); + } else if (!StringUtil.isEmpty(navi) && navi.equals("wf")) { + mRb_Journal.setChecked(true); + mWf_Libiary.setChecked(true); + } else if (!StringUtil.isEmpty(navi) && navi.equals("drug")) { + mRb_Medicine.setChecked(true); + isdrug = true; + } else if (!StringUtil.isEmpty(navi) && navi.equals("tools")) { + mRb_Tools.setChecked(true); + } else if (!StringUtil.isEmpty(navi) && navi.equals("interaction")) { + mRb_Medicine.setChecked(true); + isdrug = false; + } else { + changeGuide(); + } + if (!StringUtil.isEmpty(searchStr) && searchStr.equals("searchStr")) { + mRb_Journal.setChecked(true); + mWf_Libiary.setChecked(true); + } else if (!StringUtil.isEmpty(searchStr) + && searchStr.equals("medicine")) { + mRb_Medicine.setChecked(true); + } + if(!SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) + { + + mRb_Tools.setChecked(true); + } + return view; + } + private BaseTabItem newItem(String text){ + NotNormalItemView normalItemView = new NotNormalItemView(this); + normalItemView.initialize(text); + return normalItemView; + } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + OnCheckedChangeListener mChangeListener = new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + //代码设置drawableleft + Drawable drawable = getResources().getDrawable( + R.drawable.big_select); + // / 这一步必须要做,否则不会显示. + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); + + isZaZhi = true; + switch (checkedId) { + case R.id.iv_library_chinease: + + mRb_chinease.setCompoundDrawables(null, null, null, drawable); + iv_library_english.setCompoundDrawables(null, null, null, null); + iv_library_wanfang.setCompoundDrawables(null, null, null, null); + changeWFJournal(); + break; + case R.id.iv_library_english: + iv_library_english.setCompoundDrawables(null, null, null, drawable); + mRb_chinease.setCompoundDrawables(null, null, null, null); + iv_library_wanfang.setCompoundDrawables(null, null, null, null); + changeENJournal(); + break; + case R.id.iv_library_pubmed: + changePubMed(); + break; + case R.id.iv_library_daicha: + changeSearch(); + break; + case R.id.iv_library_wanfang: + iv_library_wanfang.setCompoundDrawables(null, null, null, drawable); + iv_library_english.setCompoundDrawables(null, null, null, null); + mRb_chinease.setCompoundDrawables(null, null, null, null); + changeWFSearch(); + break; + + default: + break; + } + } + }; + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right: + popMenu.showAsDropDown(v); + // startActivity(new Intent(ct, DownloadCollectActivity.class)); + break; + default: + break; + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { +// top_right.setVisibility(View.VISIBLE); + im_bg.setVisibility(View.GONE); + isZaZhi = false; + switch (checkedId) { + case R.id.tab_rbn_guide: + if (mGroup_library.getVisibility() == View.VISIBLE) { + mGroup_library.setVisibility(View.GONE); + // mLl_lines.setVisibility(View.GONE); +// mV_lines.setVisibility(View.GONE); + } + changeGuide(); + break; + case R.id.tab_rbn_journal: + if (mGroup_library.getVisibility() == View.GONE) { + mGroup_library.setVisibility(View.VISIBLE); + // mLl_lines.setVisibility(View.VISIBLE); +// mV_lines.setVisibility(View.VISIBLE); + } + //代码设置drawableleft + Drawable drawable = getResources().getDrawable( + R.drawable.big_select); + // / 这一步必须要做,否则不会显示. + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); + mRb_chinease.setCompoundDrawables(null, null, null, drawable); + mRb_chinease.setChecked(true); +// changeWFJournal(); + changeSearch(); + break; + case R.id.tab_rbn_express: + if (mGroup_library.getVisibility() == View.VISIBLE) { + mGroup_library.setVisibility(View.GONE); + // mLl_lines.setVisibility(View.GONE); +// mV_lines.setVisibility(View.GONE); + } + changeExpress(); + break; + case R.id.tab_rbn_tools: + if (mGroup_library.getVisibility() == View.VISIBLE) { + mGroup_library.setVisibility(View.GONE); + // mLl_lines.setVisibility(View.GONE); +// mV_lines.setVisibility(View.GONE); + } + changeTools(); + break; + } + } + + /** + * 治疗指南 + */ + private void changeGuide() { + top_title.setText("诊疗指南"); + top_right.setVisibility(View.GONE); + + BookshelfFragment2 mFragment = BookshelfFragment2.newInstance(Url.getGuideType, 0); + fm.beginTransaction().replace(R.id.frame_container, mFragment, "BOOKSHELF").commit(); + } + + /** + * 万方期刊杂志 + */ + boolean isZaZhi = false; + + private void changeWFJournal() { + top_title.setText("期刊杂志"); + BIgBookshelfFragment mFragment = BIgBookshelfFragment.newInstance( + Url.getWfmagazineType, 1,false); + if (isZaZhi) { + isZaZhi = false; + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "CHINEASE") + .commit(); + } else { + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "CHINEASE") + .commit(); + } + + } + + // PubMedFragment + + /** + * PubMed + */ + private void changePubMed() { + top_title.setText("期刊杂志"); + PubMedFragment mFragment = new PubMedFragment(); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "PUBMED").commit(); + } + + /** + * 代查文献 + */ + private void changeSearch() { + navigationController.setSelect(0); + im_bg.setVisibility(View.VISIBLE); + top_title.setText("期刊杂志"); + SearchPaperFragment mFragment=new SearchPaperFragment(); +// SearchLibiaryFragment mFragment = new SearchLibiaryFragment(); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "PUBMED").commit(); + } + + ; + + /** + * 万方医学 + */ + private void changeWFSearch() { + top_title.setText("期刊杂志"); + WFSearchFragment mFragment = new WFSearchFragment(); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "PUBMED").commit(); + } + + /** + * 英文期刊杂志 + */ + private void changeENJournal() { + top_title.setText("期刊杂志"); + im_bg.setVisibility(View.GONE); + BIgBookshelfFragment mFragment = BIgBookshelfFragment.newInstance( + Url.getCnmagazineType, 1,true); + fm.beginTransaction() + .setCustomAnimations(R.anim.slide_right_in, + R.anim.slide_left_out, R.anim.slide_left_in, + R.anim.slide_right_out) + .replace(R.id.frame_container, mFragment, "ENGLISH").commit(); + } + + /** + * 我的药箱 + */ + private void changeExpress() { + top_title.setText("药品助手"); + top_right.setVisibility(View.GONE); + MedicineBookFragment medicineBookFragment = new MedicineBookFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, medicineBookFragment, + "medicine_getsth_fragment").commitAllowingStateLoss(); + } + + /** + * 常用工具 + */ + private void changeTools() { + top_title.setText("常用工具"); + top_right.setVisibility(View.GONE); + ToolsListFragment mFragment = new ToolsListFragment(); + fm.beginTransaction() + .replace(R.id.frame_container, mFragment, "TOOLS_LIST") + .commit(); + } + + /** + * singleTask 再次的回调 + */ + @Override + protected void onNewIntent(Intent intent) { + // TODO Auto-generated method stub + super.onNewIntent(intent); + mDaiCha.setChecked(true); + changeSearch(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewPatientActivity.java new file mode 100644 index 0000000..46fdbd9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewPatientActivity.java @@ -0,0 +1,938 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.saveUnreadFollow; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.unreadFollow; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.Constant.general; +import static cn.shangyu.gdxzExpert.utils.Url.relationRecordLately; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.big.bean.OldPatientBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.bagder.Badger; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +/** + * + * MainActivity.java + * + * @author ssy Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:新的患者申请列表页面 + */ + +public class BigNewPatientActivity extends BaseActivity implements OnItemClickListener,OnCallBackFromNet { + + // listview控件 + private ListView ptrLv; + // 处理正在加载,空,错误的布局 + private TextView load_empty; + private ArrayList PatientList = new ArrayList(); + private String applyListUrl = Url.getapplyList; + private NewPatientAdapter patientAdapter; + private long count = 0; + public static int ERROR = 101; + public static int REQUEST_REFRESH = 102; + public static final int GETAPPLYLISTOPERATE = 200; + private String status; + private int position; + private String nickname; + private int page = 1; + private PullToRefreshListView ptrLv1;//30天内申请 + private TextView text1,text; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("新的患者"); + top_title.setTextSize(23); + } + + @Override + public View onCreateSuccessedView() { + + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_new_patient_big, null); + ptrLv = (ListView) view.findViewById(R.id.lv_item_new_patient); + text1=view.findViewById(R.id.text1); + text=view.findViewById(R.id.text); + ptrLv1 = (PullToRefreshListView) view.findViewById(R.id.lv_patient); + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + TextView tv_add_patient = view.findViewById(R.id.tv_add_patient); + tv_add_patient.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(BigNewPatientActivity.this,MyQrCodeActivity.class); + startActivity(intent); + } + }); + if(!StringUtil.isEmpty(getIntent().getStringExtra("message_id"))) + { + readMessage(getIntent().getStringExtra("message_id")); + } + onLoaded1(); + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv1.getRefreshableView().setOnItemClickListener(this); + ptrLv1.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getOldPatient(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getOldPatient(page+""); + } + }); + ptrLv1.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + if("2".equals(tempList.get(i-1).getStatus())) + { + Intent intent = new Intent(BigNewPatientActivity.this, BigPatientActivity.class); + intent.putExtra("realName", tempList.get(i-1).getPatient_name()); + intent.putExtra("patientUuid", tempList.get(i-1).getPatient_uuid()); + intent.putExtra("photo", tempList.get(i-1).getPatient_photo()); + intent.putExtra("type", Constant.typePatient); + //启动患者详情界面 + startActivity(intent); + } + + } + }); + initData(); + if(unreadFollow>0) + { + unreadFollow=0; + refreshMessages(); + saveUnreadFollow(); + } + return view; + } + public void refreshMessages() + { + int unreadNum = NIMClient.getService(MsgService.class).getTotalUnreadCount(); + Badger.updateBadgerCount(unreadNum); + } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); +// ECNotificationManager.getInstance().forceCancelNotification(); + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 +// String result = SharePrefUtil.getString(ct, applyListUrl, null); +// LogUtil.i("result = "+result); + count = SharePrefUtil.getLong(ct, "new_patient_count", 0); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { +// // 显示加载框 +// showLoadingProgress(); +// } +// // 网络是否可用 +// if (!CommonUtil.isNetworkAvailable()) { +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// return; +// } + getNewPatientList(applyListUrl); + + } + private void getOldPatient(String page) + { +// showProgressDialog("请求中..."); + Map param = new HashMap(); + param.put("page", page); + sendJsonPostParamtoNetSignMD5(relationRecordLately, param, 103, this); + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + "uuid", ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + LogUtil.i("info.result = "+info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded() { + // 隐藏加载进度框 +// dismissLoadingProgress(); + ptrLv1.onRefreshComplete(); + } + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded1() { + // 隐藏加载进度框 + dismissLoadingProgress(); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + + // 解析json数据 + PatientListBean bean = GsonTools.fromGsonToBean(result,PatientListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); +// ptrLv.setEmptyView(load_empty); + return; + } + // 初始化列表数据 + PatientList.clear(); + count = 0; + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { +// ptrLv.setEmptyView(load_empty); + text.setVisibility(View.GONE); + } else { + load_empty.setVisibility(View.GONE); + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + PatientList.add(bean.data.get(i)); + count++; + } + } + // 如果待审核也没有显示空布局 + if (PatientList.size() <= 0) { + text.setVisibility(View.GONE); + } + else + { + load_empty.setVisibility(View.GONE); + text.setVisibility(View.VISIBLE); + } + } + // 实例化适配器 + patientAdapter = new NewPatientAdapter(BigNewPatientActivity.this, + PatientList); + ptrLv.setAdapter(patientAdapter); +// fixListViewHeight(ptrLv); + SharePrefUtil.saveLong(ct, "new_patient_count", count); + // 完成 + + getOldPatient(page+""); + } + //ListAdapter listAdapter = mCateListView.getAdapter(); + //int totalHeight = 0; + //int count = listAdapter.getCount(); + + + private void fixListViewHeight(ListView listView) + { + + int totalHeight = 0; + // 如果没有设置数据适配器,则 ListView 没有子项,返回 + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) + return; + int listViewWidth = this.getWindowManager().getDefaultDisplay().getWidth(); + int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth, View.MeasureSpec.AT_MOST); + for (int i = 0, len = listAdapter.getCount(); i < len; i++) { + View listItem = listAdapter.getView(i, null, listView); + listItem.measure(widthSpec, 0); // 计算子项View 的宽高 + int list_child_item_height = listItem.getMeasuredHeight()+listView.getDividerHeight(); + + totalHeight += list_child_item_height; // 统计所有子项的总高度 + } +// for (int index = 0,len = listAdapter.getCount(); index < len; index++ ) +// { +// View listViewItem = listAdapter.getView(index,null,listView); +// // 计算子项 View 的宽高 +// listViewItem.measure(0, 0); +// // 计算所有子项的高度和 +// totalHeight += listViewItem.getMeasuredHeight(); +// } + + ViewGroup.LayoutParams params = listView.getLayoutParams(); + //listView.getDividerHeight () 获取子项间分隔符的高度 + //params.height 设置 ListView 完全显示需要的高度 +// params.height = totalHeight + (listView.getDividerHeight()*(listAdapter.getCount()-1)); + params.height =totalHeight; + listView.setLayoutParams(params); + } + private OldPatientAdapter mAdapter; + private OldPatientBean oldPatientBean; + private List mList=new ArrayList<>(); + private List tempList = new ArrayList<>(); + public void shuaixuanList(List lists) + { + tempList.clear(); + for (OldPatientBean.ListBean bean:lists) + { + if("2".equals(bean.getStatus())||"3".equals(bean.getStatus())||"4".equals(bean.getStatus())) + { + tempList.add(bean); + } + } + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case 103: + +// closeProgressDialog(); + oldPatientBean=GsonTools.fromGsonToBean(resultJson, OldPatientBean.class); + if (oldPatientBean == null) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) { + // 显示空布局 + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 + onLoaded(); + text1.setVisibility(View.GONE); + return; + } else { + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + } + } else { + + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); +; + } + if(mList.size()<1) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + } + else + { + load_empty.setVisibility(View.GONE); + text1.setVisibility(View.VISIBLE); + } + + if (mAdapter == null) { + mAdapter = new OldPatientAdapter(this, (ArrayList) mList); + ptrLv1.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = oldPatientBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + fixListViewHeight(ptrLv); + break; + case GETAPPLYLISTOPERATE: + page=1; + getOldPatient(page+""); + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (("1").equals(retcode)) { + + // 插入该患者 + String patientUuid = PatientList.get(position).patientUuid; + String realName = PatientList.get(position).realName; + String photo = PatientList.get(position).photo; + String mobile = PatientList.get(position).mobile; + int sex = PatientList.get(position).sex; + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + patientUuid); + patientModel.setPhoto(photo); + patientModel.setMobile(mobile); + patientModel.setRealName(realName); + patientModel.setSex(sex); + patientModel.setType(Constant.typePatient); + PatientSqlManager.insertPatient(patientModel, + Constant.typePatient); + + ToastUtil.showToast("操作成功"); + PatientList.remove(position); + patientAdapter.notifyDataSetChanged(); + BigNewPatientActivity.this + .setResult(REQUEST_REFRESH); + if (PatientList.isEmpty()) { +// ptrLv.setEmptyView(load_empty); + text.setVisibility(View.GONE); + } + count--; + SharePrefUtil.saveLong(ct, "new_patient_count", + count); + // CCPAppManager.startChattingAction(ct, + // Constant.Patient_AppKey + patientUuid, + // realName, "2,1,2,0", patientUuid, 6); + if (status != null && status.equals("2")) { + handleSendTextMessage(Constant.Patient_AppKey + + patientUuid,realName); + Intent intent10 = new Intent(BigNewPatientActivity.this, + SetInformActivity.class); + intent10.putExtra("nickname_new",nickname); + intent10.putExtra("patientUuid",patientUuid); +// intent10.putExtra("nickname",nickname); + startActivity(intent10); + } + if (!nickname.equals(realName)){ +// updatename( Url.getupdateNickname,patientUuid,SharePrefUtil.getString(ct, "uuid", ""), nickname,""); + } + + } else { + ToastUtil.showToast(message); + } + SharePrefUtil.saveString(ct, Url.getapplyListOperate, ""); + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + } + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv1.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public class NewPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + private String applyListOperate = Url.getapplyListOperate; +// private ImageLoader imageLoader; +// private RequestQueue queue; + public NewPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList = patientList; +// queue = Volley.newRequestQueue(context); +// imageLoader = new ImageLoader(queue, new BitmapCache()); + } + + @Override + public int getCount() { + + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list_big, null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_image); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_patient_date); + mHolder.tvInfo = (TextView) convertView + .findViewById(R.id.tv_patient_info); + mHolder.btOk = (Button) convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_new_patient_cancle); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + + mHolder.tvInfo.setText(p.content); + mHolder.tvDate.setText(p.createDate); + +// mHolder.ivImage.setTag(p.photo+""); +// if(mHolder.ivImage.getTag().equals(p.photo+"")) +// { +//// mHolder.ivImage.setDefaultImageResId(R.drawable.icon_touxiang_persion_gray_big); +//// mHolder.ivImage.setErrorImageResId(R.drawable.icon_touxiang_persion_gray_big); +// mHolder.ivImage.setImageUrl(Url.urlHtml + p.photo, imageLoader); +// } +// +// 通过 tag 来防止图片错位 +// if (mHolder.ivImage.getTag() != null && mHolder.ivImage.getTag().equals(p.photo)) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + p.photo, +// mHolder.ivImage, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + else + { + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + // 待审核 + + mHolder.btOk.setVisibility(View.VISIBLE); + mHolder.btCancle.setVisibility(View.VISIBLE); + + // 同意事件 + mHolder.btOk.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("ok-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String content=p1.content.replaceAll(",",","); + String[] split = content.split(","); + String[] split1 = split[0].split("我是"); + String nickname =split1[1]; +// String nickname = split1[split1.length]; + String format = format(nickname); + getNewPatient(applyListOperate, uuid, "2", position,format); + } + }); + // 拒绝事件 + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("cancle-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String[] split = p1.content.split(",在"); + String[] split1 = split[0].split("我是"); + String nickname = split1[split1.length-1]; + LogUtil.i("nickname = "+nickname); + String format = format(nickname); + LogUtil.i("format = "+format); + getNewPatient(applyListOperate, uuid, "3", position,format); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + public class OldPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + + + public OldPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList=patientList; + + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list_big1, null); + mHolder1 = new OldViewHolder(); + mHolder1.ivImage = convertView + .findViewById(R.id.iv_patient_image); + mHolder1.tvDate = convertView + .findViewById(R.id.tv_patient_date); + mHolder1.tvInfo = convertView + .findViewById(R.id.tv_patient_info); + mHolder1.btOk = convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder1.btCancle = convertView + .findViewById(R.id.bt_new_patient_cancle); + mHolder1.nickname=convertView.findViewById(R.id.nickname); + convertView.setTag(mHolder1); + } else { + mHolder1 = (OldViewHolder) convertView.getTag(); + } + + // 给控件赋值. + OldPatientBean.ListBean p = PatientList.get(position); +// if(StringUtil.isEmpty(p.getNickname())) +// { +// mHolder1.tvInfo.setMaxLines(2); +// mHolder1.nickname.setVisibility(View.GONE); +// } +// else +// { +// mHolder1.tvInfo.setMaxLines(1); +// mHolder1.nickname.setVisibility(View.VISIBLE); +// mHolder1.nickname.setText("备注名:"+p.getNickname()); +// } + mHolder1.tvInfo.setMaxLines(1); + mHolder1.nickname.setVisibility(View.VISIBLE); + mHolder1.nickname.setText("昵称:"+p.getPatient_name()); + mHolder1.tvInfo.setText(p.getContent()); + + mHolder1.tvDate.setText(p.getCreate_date()); + if (!TextUtils.isEmpty(p.getPatient_photo()) && !"null".equals(p.getPatient_photo())) { + RequestOptions requestOptions = new RequestOptions().error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(context).asBitmap().load(Url.urlHtml + p.getPatient_photo()).apply(requestOptions) + .into(mHolder1.ivImage); +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + p.getPatient_photo(), +// mHolder1.ivImage, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + else + { + mHolder1.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + // 待审核 + switch (p.getStatus()) + { + case "2": + + mHolder1.btOk.setText("已同意"); + mHolder1.btCancle.setVisibility(View.VISIBLE); + break; + case "3": + + mHolder1.btOk.setText("已拒绝"); + mHolder1.btCancle.setVisibility(View.GONE); + break; + case "4": + + mHolder1.btOk.setText("已过期"); + mHolder1.btCancle.setVisibility(View.GONE); + break; + } + + + + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private NewsViewHolder mHolder = null; + private OldViewHolder mHolder1 = null; + private class NewsViewHolder { + + public Button btCancle; + public Button btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + } + private class OldViewHolder { + + public ImageView btCancle; + public TextView btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + public TextView nickname; + } + public static String format(String s){ + String str=s.replaceAll("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……& ;*()——+|{}【】‘;:”“’。,、?|-]", ""); + return str; +} + + /** + * 同意或拒绝操作 getNewPatient + * + * @param loadUrl + * @param uuid + * @param status + * @param position + * void + */ + private void getNewPatient(final String loadUrl, String uuid, + final String status, final int position, final String nickname) { + showProgressDialog("请求中..."); + + this.status = status; + this.position = position; + this.nickname = nickname; + Map map = new HashMap<>(); + map.put("uuid",uuid); + map.put("status",status); + sendParamtoNet(loadUrl,map,GETAPPLYLISTOPERATE,this,false); + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if (ptrLv.getHeaderViewsCount() > 0) { + position = position - 1; + } + + } + private void updatename(final String loadUrl, final String patientUuid, String expertUuid, String NickName, String NoteContent) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("patientUuid",patientUuid);//患者uuid + params.addBodyParameter("expertUuid",expertUuid);//专家uuid + params.addBodyParameter("nickname",NickName);//别名 + params.addBodyParameter("note",NoteContent);//备注内容 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid,info.result); + LogUtil.i(info.result); +// getproseData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); +// ToastUtil.showMsgCustomToast("加载失败"); + } + }); + + } + /** + * 处理文本发送方法事件通知 + * + * @param + */ + private void handleSendTextMessage(String patientuuid,String realname) { + IMMessage imMessage = MessageBuilder.createTextMessage(patientuuid.split("#")[1].toLowerCase(), P2P, "你好,我已经是你的随访医生了"); + MessageFragment.ext.clear(); +// MessageFragment.ext.put(Extras.EXTRA_GDXZ_NICKNAME, UserInfoHelper.getUserName(patientuuid)); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_NICKNAME, realname); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_TYPE,general); + imMessage.setRemoteExtension(MessageFragment.ext); + NIMClient.getService(MsgService.class).sendMessage(imMessage,false); +// // 组建一个待发送的ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT); +// // 设置消息接收者 +// msg.setTo(patientuuid); +// // 创建一个文本消息体,并添加到消息对象中 +// ECTextMessageBody msgBody = new ECTextMessageBody("你好,我已经是你的随访医生了"); +// msg.setBody(msgBody); +// msg.setUserData("2,1,2,0"); +// try { +// // 发送消息,该函数见上 +// long rowId = -1; +// rowId = IMChattingHelper.sendECMessage(msg); +// // 通知列表刷新 +// msg.setId(rowId); +// // notifyIMessageListView(msg); +// } catch (Exception e) { +// e.printStackTrace(); +// } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewSystemMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewSystemMessageActivity.java new file mode 100644 index 0000000..34d650e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigNewSystemMessageActivity.java @@ -0,0 +1,696 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static cn.shangyu.gdxzExpert.application.BaseApplication.getContext; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; +import static cn.shangyu.gdxzExpert.utils.Url.appMesageRead; +import static cn.shangyu.gdxzExpert.utils.Url.unReadList; + +import android.app.AlertDialog; +import android.content.Intent; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity; +import cn.shangyu.gdxzExpert.activity.BillDetailsActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity2; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.GanDanHouseDetialActivity; +import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyFuliCardActivity; +import cn.shangyu.gdxzExpert.activity.WebActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.bean.MessageNumBean; +import cn.shangyu.gdxzExpert.big.fragment.BigFuMessageFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigHuiMessageFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigOrderMessageFragment; +import cn.shangyu.gdxzExpert.big.fragment.BigSuiMessageFragment; +import cn.shangyu.gdxzExpert.fragment.FuMessageFragment; +import cn.shangyu.gdxzExpert.fragment.HuiMessageFragment; +import cn.shangyu.gdxzExpert.fragment.OrderMessageFragment; +import cn.shangyu.gdxzExpert.fragment.SuiMessageFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.umeng.PushCourseUrlDetailActivity; +import cn.shangyu.gdxzExpert.umeng.PushNewsDetailActivity; +import cn.shangyu.gdxzExpert.umeng.PushZhiBoActivity; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.OldPageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.item.NormalItemView; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +public class BigNewSystemMessageActivity extends BaseActivity implements OnCallBackFromNet { + + public OldPageNavigationView tab; + public OldPageNavigationView tab1; + +// @Override +// protected void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// setContentView(R.layout.activity_new_system_message); +// } + public static final String fragmentTag1 = "fragment1"; + public static final String fragmentTag2 = "fragment2"; + public static final String fragmentTag3 = "fragment3"; + public static final String fragmentTag4 = "fragment4"; + private Fragment currentFragment; + private FragmentManager manager; + private BigFuMessageFragment fuMessageFragment; + private BigOrderMessageFragment orderMessageFragment; + private BigSuiMessageFragment suiMessageFragment; + private BigHuiMessageFragment huiMessageFragment; + NavigationController navigationController; + NavigationController navigationController1; + private int num0=0,num1=0,num2=0,num3=0; + public Boolean needrequest=false;//是否需要重新请求 + + public int unreadnum=0; + private View big_top_bar; + TextView top_right_text; + RelativeLayout top_back_layout; + public ImageView im_bg; + @Override + public void setTitle() { +// top_title.setText("消息"); +// top_right.setImageResource(R.drawable.clear_message); +// top_right.setVisibility(View.VISIBLE); +// top_right.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// clearMessage(); +// } +// }); + } + + private void clearMessage() + { + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new, null); + AlertDialog dialog3 = new AlertDialog.Builder( + BigNewSystemMessageActivity.this,AlertDialog.THEME_HOLO_LIGHT).create(); + + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + RelativeLayout r_b =layout.findViewById(R.id.r_b); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + + if(unreadnum>0) + { + + } + else + { + r_b.setVisibility(View.GONE); + btn_sure.setText("确定"); + tv_tishi.setText("您没有可清除的未读消息"); + + } + dialog3.show(); + Window window =dialog3.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(unreadnum>0){ + needrequest=true; + + showLoadingProgress(); + clearMsg(""); + } + + dialog3.dismiss(); + } + }); + + } + + @Override + public View onCreateSuccessedView() { + mToolbar.setVisibility(View.GONE); + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) layout.getLayoutParams(); + p.setMargins(0,0, 0, 0); + layout.requestLayout(); + View view = View.inflate(ct, R.layout.activity_new_system_message_big, null); + big_top_bar=view.findViewById(R.id.big_top_bar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(big_top_bar).init(); + + tab= view.findViewById(R.id.tab); + tab1= view.findViewById(R.id.tab1); + top_right_text=view.findViewById(R.id.top_right_text); + top_right_text.setOnClickListener(this); + top_back_layout=view.findViewById(R.id.top_back_layout); + top_back_layout.setOnClickListener(this); + im_bg=view.findViewById(R.id.im_bg); + //注意这里调用了custom()方法 + navigationController = tab.custom() + .addItem(newItem(R.drawable.fu_message_big,R.drawable.fu_message_big,"福利")) + .addItem(newItem(R.drawable.ding_message_big,R.drawable.ding_message_big,"订单")) + .addItem(newItem(R.drawable.sui_message_big,R.drawable.sui_message_big,"随访")) + .addItem(newItem(R.drawable.hui_message_big,R.drawable.hui_message_big,"回复我的")) + .build(); + + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + if(tab1.getVisibility()==View.GONE) + { + navigationController1.setSelect(index); + } + + // 选中时触发 + switch (index) + { + case 0: + showFragment(fuMessageFragment); + break; + case 1: + showFragment(orderMessageFragment); + + break; + case 2: + showFragment(suiMessageFragment); + + break; + case 3: + showFragment(huiMessageFragment); + break; + } + + + + + + } + }); + //注意这里调用了custom()方法 + navigationController1 = tab1.custom() + .addItem(newItem1("福利")) + .addItem(newItem1("订单")) + .addItem(newItem1("随访")) + .addItem(newItem1("回复我的")) + .build(); + + navigationController1.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + if(tab.getVisibility()==View.GONE) + { + navigationController.setSelect(index); + } + + // 选中时触发 + switch (index) + { + case 0: + showFragment(fuMessageFragment); + break; + case 1: + showFragment(orderMessageFragment); + + break; + case 2: + showFragment(suiMessageFragment); + + break; + case 3: + showFragment(huiMessageFragment); + break; + } + + + + + + } + }); + if(!StringUtil.isEmpty(getIntent().getStringExtra("message_id"))) + { + readMessage(getIntent().getStringExtra("message_id")); + } +// showLoadingProgress(); + initMessage(); + initFragment(); + if(getIntent().getIntExtra("module",0)==0) + { + showFragment(fuMessageFragment); + } + else + { + navigationController.setSelect(getIntent().getIntExtra("module",0)); + navigationController1.setSelect(getIntent().getIntExtra("module",0)); + } + +// showFragment(fuMessageFragment); + return view; + } + public void initMessage() + { + Map map=new HashMap<>(); + sendJsonPostParamtoNetSignMD5(unReadList,map,101,this); + } + private void clearMsg(String id) + { + + Map map=new HashMap<>(); + map.put("id",id); + sendJsonPostParamtoNetSignMD5(appMesageRead,map,102,this); + } + /** + 71 * 展示Fragment + 72 */ + private void showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = manager.beginTransaction(); + if(currentFragment!=null) + { + transaction.hide(currentFragment); + } + + currentFragment = fragment; + if (!fragment.isAdded()) { + transaction.add(R.id.frame_container, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + } + } + private void initFragment() + { + manager = getSupportFragmentManager(); + //实例化碎片对象 + fuMessageFragment = new BigFuMessageFragment(); + orderMessageFragment = new BigOrderMessageFragment(); + suiMessageFragment = new BigSuiMessageFragment(); + huiMessageFragment=new BigHuiMessageFragment(); + + + } + //创建一个Item + private BaseTabItem newItem(int drawable, int checkedDrawable, String text){ + NormalItemView normalItemView = new NormalItemView(this); + normalItemView.initialize(drawable,checkedDrawable,text,18); + normalItemView.setTextDefaultColor(Color.parseColor("#ff666666")); + normalItemView.setTextCheckedColor(Color.parseColor("#ff8B2316")); + return normalItemView; + } + //创建一个Item + private BaseTabItem newItem1(String text){ + NormalItemView normalItemView = new NormalItemView(this); + normalItemView.initialize(text,18); + normalItemView.setTextDefaultColor(Color.parseColor("#ff666666")); + normalItemView.setTextCheckedColor(Color.parseColor("#ff8B2316")); + return normalItemView; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.top_right_text: + clearMessage(); + break; + case R.id.top_back_layout: + finish(); + break; + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + public void reInitMessage() + { + initMessage(); + if(currentFragment instanceof FuMessageFragment) + { + ((FuMessageFragment) currentFragment). initMessage("1",((FuMessageFragment) currentFragment).page+""); + } + else if(currentFragment instanceof OrderMessageFragment) + { + ((OrderMessageFragment) currentFragment). initMessage("2",((OrderMessageFragment) currentFragment).page+""); + } + else if(currentFragment instanceof SuiMessageFragment) + { + ((SuiMessageFragment) currentFragment). initMessage("3",((SuiMessageFragment) currentFragment).page+""); + } + else if(currentFragment instanceof HuiMessageFragment) + { + ((HuiMessageFragment) currentFragment). initMessage("4",((HuiMessageFragment) currentFragment).page+""); + } + } + MessageNumBean messageNumBean; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode) + { + case 102: + dismissLoadingProgress(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.optString("code"))) + { + + if(needrequest) + { + needrequest=false; + reInitMessage(); + + } + } + else + { + ToastUtil.showMessage(jsonObject.optString("message")); + } + + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 101: +// dismissLoadingProgress(); + + messageNumBean= GsonTools.fromGsonToBean(resultJson,MessageNumBean.class); + if("200".equals(messageNumBean.getCode())) + { + + if(messageNumBean.getData()!=null) + { +// setUnread(0,111+""); + setUnread(0,messageNumBean.getData().getModule_Welfare()); + setUnread(1,messageNumBean.getData().getModule_Order()); + setUnread(2,messageNumBean.getData().getModule_Relation()); + setUnread(3,messageNumBean.getData().getModule_Comment()); + + } + } + break; + } + + } + public void setUnread(int index,String num) + { + unreadnum=0; + if(!StringUtil.isEmpty(num)&&Integer.valueOf(num)>0) + { + navigationController.setMessageNumber(index,Integer.valueOf(num)); + navigationController.setHasMessage(index,true); + navigationController1.setMessageNumber(index,Integer.valueOf(num)); + navigationController1.setHasMessage(index,true); + switch (index) + { + case 0: + num0=Integer.valueOf(num); + break; + case 1: + num1=Integer.valueOf(num); + break; + case 2: + num2=Integer.valueOf(num); + break; + case 3: + num3=Integer.valueOf(num); + break; + + + } + + } + else + { + navigationController.setMessageNumber(index,0); + navigationController.setHasMessage(index,false); + + navigationController1.setMessageNumber(index,0); + navigationController1.setHasMessage(index,false); + switch (index) + { + case 0: + num0=0; + break; + case 1: + num1=0; + break; + case 2: + num2=0; + break; + case 3: + num3=0; + break; + + + } + } + + unreadnum=num0+num1+num2+num3; + } + + public void goActivity(String type, MessageBean.BeanData.DetailBean pushBean,int index) + { + switch (index) + { + case 0: + if(num0>0) + { + clearMsg(pushBean.getId()); + num0--; + setUnread(index,num0+""); + } + break; + case 1: + if(num1>0) + { + clearMsg(pushBean.getId()); + num1--; + setUnread(index,num1+""); + } + break; + case 2: + if(num2>0) + { + clearMsg(pushBean.getId()); + num2--; + setUnread(index,num2+""); + } + break; + case 3: + if(num3>0) + { + clearMsg(pushBean.getId()); + num3--; + setUnread(index,num3+""); + } + break; + + + } + + + Intent intent=new Intent(); + + switch (type) + { + case "1"://新闻 + intent.setClass(getContext(),PushNewsDetailActivity.class); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", pushBean.getExtra().getUuid()); + intent.putExtra("flag", 3); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"3"://肝胆视频 + Intent intent4 = VideoDetailPolyvPlayerActivity.newIntent(getContext(), VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent4.putExtra("startNow", false); + intent4.putExtra("isVlmsOnline", false); + intent4.putExtra("uuid", pushBean.getExtra().getUuid()); + intent4.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent4); + break; + case"4"://直播 + intent.setType("zhibo"); + intent.setClass(getContext(),PushZhiBoActivity.class); + intent.putExtra("id", pushBean.getExtra().getId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"5"://肝胆课件 + intent.setClass(getContext(),PushCourseUrlDetailActivity.class); + intent.putExtra("uuid", pushBean.getExtra().getUuid()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"6"://精品课 + case"7": + intent.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id", pushBean.getExtra().getId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"9"://积分商城 + if(BigModule()) + { + intent.setClass(getContext(), BigPointsMallActivity.class); + } + else + { + intent.setClass(getContext(), PointsMallActivity.class); + } + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"10"://指南 + intent.setClass(getContext(), BookshelfListActivity2.class); + intent.putExtra("typeUuid", pushBean.getExtra().getUuid()); + intent.putExtra("title", pushBean.getExtra().getName()); + intent.putExtra("loadUrl", Url.getGuideList); + intent.putExtra("type", "0"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"11"://普通url + intent.setClass(getContext(), WebActivity.class); + intent.putExtra("url",pushBean.getExtra().getUrl()); + intent.putExtra("title","推送消息"); + intent.putExtra("need_share","0"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "12"://申请随访 + case "14": + intent.setClass(getContext(), BiggNewPatientActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "13"://解除随访 +// intent.setClass(getContext(), NewSystemMessageActivity.class); +// intent.putExtra("module",2); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// getContext().startActivity(intent); + break; + case"15"://精品课评论 + intent.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id", pushBean.getExtra().getId()); + intent.putExtra("pinglun","yes"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"16"://一问多答 + intent.setClass(getContext(), BigNewSystemMessageActivity.class); + intent.putExtra("step1_uuid",pushBean.getExtra().getStep1_uuid()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"17"://病例讨论 + intent.setClass(getContext(), CaseCussionDetailActivity.class); + intent.putExtra("uuid", pushBean.getExtra().getUuid());//传值病例的uuid + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"18"://送花 + intent.setClass(getContext(), MyFlowerActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"19"://课件收益 + intent.setClass(getContext(), MyCoursewareActivity.class); + intent.putExtra("changeMyCoolect",1); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"21"://提现 + intent.setClass(getContext(), BillDetailsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"20"://发票 + intent.setClass(getContext(), FaPiaoActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"28"://课件分享 + case"30"://精品课优质评价 + case"31"://学完返现 + case"32"://福利课堂 + case"33"://阅读福利 + case"34"://观看福利 + case"36"://特别奖励 + intent.setClass(getContext(), AccumulatePointsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"35"://福利卡 + intent.setClass(getContext(), MyFuliCardActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "40"://互动圈 + intent.setClass(getContext(), GanDanHouseDetialActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("uuid",pushBean.getExtra().getUuid()); + getContext().startActivity(intent); + break; + default: + break; + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientActivity.java new file mode 100644 index 0000000..b5212d7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientActivity.java @@ -0,0 +1,1284 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static cn.shangyu.gdxzExpert.utils.Constant.consult; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.Manifest; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CaseRecordActivity; +import cn.shangyu.gdxzExpert.activity.CasehistoryActivity; +import cn.shangyu.gdxzExpert.activity.PatientEditActivity; +import cn.shangyu.gdxzExpert.activity.VisitPlanActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.PatientCardBean; +import cn.shangyu.gdxzExpert.bean.PatientDetailBean; +import cn.shangyu.gdxzExpert.bean.PatientDetailBean.PatientDetailImg; +import cn.shangyu.gdxzExpert.bean.patientExBean; +import cn.shangyu.gdxzExpert.big.adapter.RecyclerItemClickListener; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ClipboardUtils; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ExpandTextView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import cn.shangyu.gdxzExpert.widget.NewECListDialog; + +/** + * PatientActivity.java + * + * @author 纪肖 + * @author ssy修改 + * @date2015.09.24 患者详情界面,患者基本信息的展示,实现了点击查看病历详情 以及备注名字修改备注内容修改 + */ +public class BigPatientActivity extends BaseActivity implements + OnItemClickListener, OnCallBackFromNet { + + // private TextView tvn; + private TextView tvna; + private ExpandTextView tvnb; + private ImageView tvp; + private RecyclerView lv; + private String mobile; + private String nickname; + private String type; + private String consultUuid; + private String patientUuid; + public static String PatientDetailUrl = Url.getpatientDetail; + private List caselist = new ArrayList(); + private TextView tvege; + RelativeLayout text3; + private TextView tvjibing; + private TextView tvnation; + private ImageView tvsex; + private int state = 0; + private boolean isHistory; + private ECAlertDialog buildAlert; + private LinearLayout mBt_visit, mBt_records; + TextView bt_calling; + private String paintphonenumber; + private TextView tv_dress; + private RelativeLayout ly_note; + private RelativeLayout ly_setting_othername; + private TextView tv_my_note; + private String NoteContent; + private String NickName; + private String addNickname = Url.gettoAddNickname; + private String expertUuid; + private TextView tv_clinical; + private String note; + private String name; + private String patientUuid1; + private LinearLayout bt_send_message,bt_send_message1; +// private boolean isFriend; + TextView nick_name,tv_fenzu; +// private RelativeLayout iv_shezhibieming; + RelativeLayout rl_fenzu; + + ScrollView scrollView1; + Boolean needmanage; + @Override + public void setTitle() { + top_title.setText("患者详情"); + top_back_layout.setOnClickListener(this); + needmanage=getIntent().getBooleanExtra("needmanage",true); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + top_right_text.setText("编辑"); + top_right_text.setOnClickListener(this); + if(needmanage) + { + top_right_text.setVisibility(View.VISIBLE); + } + else + { + top_right_text.setVisibility(View.GONE); + } + } + else + { + top_right.setImageResource(R.drawable.edit_patitent); + if(needmanage) + { + top_right.setVisibility(View.VISIBLE); + } + else + { + top_right.setVisibility(View.GONE); + } + top_right.setOnClickListener(this); + } + + } + + @RequiresApi(api = Build.VERSION_CODES.M) + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_patient_big, null); + } + else + { + view = View.inflate(ct, R.layout.activity_patient_nom, null); + } + tvp = view.findViewById(R.id.photo);// 头像 + tvsex = (ImageView) view.findViewById(R.id.im_sex);// 头像 +// iv_shezhibieming = view.findViewById(R.id.iv_shezhibieming);// 头像 + tvege = (TextView) view.findViewById(R.id.tv_ege);// 年龄 + tvna = (TextView) view.findViewById(R.id.real_name);// 姓名 + nick_name=view.findViewById(R.id.nick_name); + tvnation = (TextView) view.findViewById(R.id.tv_nation);// 民族 + tvjibing = (TextView) view.findViewById(R.id.jibing_01);// 疾病 + tv_dress = (TextView) view.findViewById(R.id.tv_dress);// 患者地址 + tvnb = view.findViewById(R.id.paintmsg);// 临床诊断 + tvnb.initWidth(getWindowManager().getDefaultDisplay().getWidth()); + tv_my_note = (TextView) view.findViewById(R.id.tv_my_note);// 备注内容 + tv_clinical = (TextView) view.findViewById(R.id.tv_clinical);// 临床诊断 + text3=view.findViewById(R.id.text3); + rl_fenzu=view.findViewById(R.id.rl_fenzu); + tv_fenzu=view.findViewById(R.id.tv_fenzu); + rl_fenzu.setOnClickListener(this); + lv = view.findViewById(R.id.lv_paient_info); + LinearLayoutManager linearLayoutManagerv = new LinearLayoutManager(this); + linearLayoutManagerv.setOrientation(LinearLayoutManager.HORIZONTAL); + lv.setLayoutManager(linearLayoutManagerv); + //设置item间距,30dp + lv.addItemDecoration(new SpaceItemDecoration(15,0)); + ly_note = view.findViewById(R.id.ly_bz);// 备注 + ly_setting_othername = view + .findViewById(R.id.ly_setting_othername);// 设置别名 + ly_setting_othername.setOnClickListener(this); + + // 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 + // ,应该在setAdapter后面设置 + // setListViewHeightBasedOnChildren(lv); + bt_send_message =view.findViewById(R.id.bt_send_message);// 发消息 + bt_send_message1=view.findViewById(R.id.bt_send_message1); + bt_calling = view.findViewById(R.id.bt_calling);// 打电话 + mBt_visit = view.findViewById(R.id.bt_patient_visit);// 添加随访计划 + mBt_records = view.findViewById(R.id.bt_case_records);// 打电话 + scrollView1=view.findViewById(R.id.scrollView1); + initListener(); + initIntent(); + AddNickname(addNickname); + getPatientList(PatientDetailUrl); + initData(); + scrollView1.setOnScrollChangeListener(new View.OnScrollChangeListener() { + @Override + public void onScrollChange(View view, int i, int i1, int i2, int i3) { + if (checkIfVisable(bt_send_message)) + { + bt_send_message1.setVisibility(View.GONE); + } + else + { + bt_send_message1.setVisibility(View.VISIBLE); + } + +// bt_send_message.post(new Runnable() { +// @Override +// public void run() { +// int[] position = new int[2]; +// bt_send_message.getLocationInWindow(position); +// WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); +// if (position[1] + bt_send_message.getHeight() > wm +// .getDefaultDisplay().getHeight()) { +// bt_send_message.setVisibility(View.GONE); +// bt_send_message1.setVisibility(View.VISIBLE); +// } +// else +// { +// bt_send_message.setVisibility(View.VISIBLE); +// bt_send_message1.setVisibility(View.GONE); +// } +// } +// }); + } + }); + + + return view; + } + private void getDetail() { + + Map map = new HashMap<>(); + map.put("patient_uuid",patientUuid); + LogUtil.i("patient_uuid",patientUuid); + sendJsonPostParamtoNetSignMD5(Url.patientCard,map,200,this); + + + } +// /** +// * 判断View是否可见 +// * +// * @param target View +// * @param judgeAll 为true时,判断View全部可见才返回true +// * @return boolean +// */ +// public static boolean checkIfVisable1(View target, boolean judgeAll) { +// Rect rect = new Rect(); +// target.getLocalVisibleRect(rect); +// if (judgeAll) { +// return rect.top == 0; +// }else { +// return rect.top >= 0; +// } +// } + + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + if (checkIfVisable(bt_send_message)) + { + bt_send_message1.setVisibility(View.GONE); + } + else + { + bt_send_message1.setVisibility(View.VISIBLE); + } + + } + + + boolean checkIfVisable(View v){ + int[] position = new int[2]; + v.getLocationInWindow(position); + WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); + if (position[1] + 0.5*v.getHeight() > wm + .getDefaultDisplay().getHeight()) { + return false; + } + else + { + return true; + } +// Point p = new Point(); +// getWindowManager().getDefaultDisplay().getSize(p); +// int screenWidth = p.x; +// int screenHeight = p.y; +// Rect rect = new Rect(0, 0, screenWidth, (int) (screenHeight*2)); +// int[] location = new int[2]; +// v.getLocationInWindow(location); +// if (v.getLocalVisibleRect(rect)) { +// return true; +// } else { +// return false; +// } + } + + private void initIntent() { + Intent intent = getIntent(); + name = intent.getStringExtra("realName"); + // nickname = intent.getStringExtra("nickname"); + // note = intent.getStringExtra("note"); + String photo = intent.getStringExtra("photo"); + // mobile = intent.getStringExtra("mobile"); + patientUuid = intent.getStringExtra("patientUuid"); + patientUuid1 = intent.getStringExtra("patientUuid") + "1"; + consultUuid = intent.getStringExtra("consultUuid");// 公益咨询uuid + type = intent.getStringExtra("type");// 聊天的类型 + state = intent.getIntExtra("state", 0);// 聊天的类型 + isHistory = intent.getBooleanExtra("isHistory", false);// 是否是历史咨询 +// isFriend = intent.getBooleanExtra("isFriend", true);// 是否是公益咨询 + int sex = SharePrefUtil.getInt(ct, "sex", -1); + +// if (Constant.typePatient.equals(type)) { +// bt_send_message.setVisibility(View.VISIBLE); +// bt_calling.setVisibility(View.VISIBLE); +// } else { +// bt_send_message.setVisibility(View.GONE); +// bt_calling.setVisibility(View.GONE); +// } + +// if (!isFriend){//不是好友 +// top_right_text.setVisibility(View.GONE); +//// iv_shezhibieming.setVisibility(View.GONE); +// ly_setting_othername.setVisibility(View.GONE); +// ly_setting_othername.setFocusable(false); +// ly_note.setFocusable(false); +// ly_setting_othername.setEnabled(false); +// ly_note.setEnabled(false); +// +// } +// if (!TextUtils.isEmpty(nickname) && !"null".equals(nickname)) { +// tvna.setText("设置别名"); +// top_title.setText(nickname); +// } + Drawable rightDrawable = getResources().getDrawable(R.drawable.new_man_big); + ; + if (1 == sex) {// 0男,1女 + rightDrawable = getResources().getDrawable(R.drawable.new_woman_big); + tvsex.setImageDrawable(rightDrawable); + } + else if(0==sex) + { + tvsex.setImageDrawable(rightDrawable); + } + + tvna.setText(name); + + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + tvp, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + + } + + private void initListener() { + bt_calling.setOnClickListener(this); + mBt_visit.setOnClickListener(this); + mBt_records.setOnClickListener(this); + ly_note.setOnClickListener(this); +// tvnb.setOnClickListener(this); + bt_send_message.setOnClickListener(this); + bt_send_message1.setOnClickListener(this); + lv.addOnItemTouchListener(new RecyclerItemClickListener(this, lv, new RecyclerItemClickListener.OnItemClickListener() { + @Override + public void onItemClick(View view, int position) { + Intent casehistoryIntent = new Intent(BigPatientActivity.this, + CasehistoryActivity.class); + // 获取数据 + casehistoryIntent.putExtra("caseUuid", caselist.get(position).uuid); + casehistoryIntent.putExtra("title", caselist.get(position).title); + casehistoryIntent.putExtra("diseaseUuid", + caselist.get(position).diseaseUuid); + casehistoryIntent.putExtra("des", caselist.get(position).des); + casehistoryIntent.putExtra("diseaseName", caselist.get(position).diseaseName); + startActivity(casehistoryIntent); + } + + @Override + public void onItemLongClick(View view, int position) { + + } + })); + } + + @Override + protected void onResume() { + super.onResume(); + AddNickname(addNickname); + getPatientList(PatientDetailUrl); + getDetail(); + } + + private void initData() { + // TODO Auto-generated method stub + String patientInfo = SharePrefUtil.getString(ct, patientUuid, ""); + String patientInfo1 = SharePrefUtil.getString(ct, patientUuid1, ""); + if (TextUtils.isEmpty(patientInfo) || TextUtils.isEmpty(patientInfo1)) { + showProgressDialog("正在加载"); + } else { + processData(patientInfo); + getproseData(patientInfo1); + } + getDetail(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + /** + * 执行返回结果 + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + + // if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + // mPopupWindowDialog.dismiss(); + // } + if (data == null) { + return; + } + // 别名 + if (requestCode == 21) { + + if (data.getStringExtra("NickName").equals("")) { +// tvna.setText("给患者添加备注名"); + + } else { + tvna.setText(data.getStringExtra("NickName")); + nick_name.setText("昵称:"+name); + nick_name.setVisibility(View.VISIBLE); + ly_setting_othername.setVisibility(View.GONE); + } + if (data.getStringExtra("NoteContent")==null||StringUtil.isEmpty(data.getStringExtra("NoteContent"))) { + tv_my_note.setText(getResources().getString(com.netease.nim.uikit.R.string.patient_note)); + + } else { + + tv_my_note.setText(data.getStringExtra("NoteContent")); + } + } + else + { + if (requestCode == 24) + { + finish(); + } + } + + super.onActivityResult(requestCode, resultCode, data); + } + + /** + * 请求服务器。获取备注数据 gettoAddNickname + * + * @param loadUrl + * void + */ + private void AddNickname(final String loadUrl) { + // TODO Auto-generated method stub + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid", patientUuid);// 患者uuid + params.addBodyParameter("expertUuid", expertUuid);// 专家uuid + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid1, info.result); + LogUtil.i(info.result); + getproseData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // ToastUtil.showMsgCustomToast("加载失败"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void getproseData(String result) { + // TODO Auto-generated method stub + closeProgressDialog(); + patientExBean bean = GsonTools.fromGsonToBean(result, + patientExBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + if (bean.code.equals("1")) { + if (bean.patientEx != null) { + note = bean.patientEx.note;// 备注内容 + nickname = bean.patientEx.nickname;// 别名 + if (note != null&&!StringUtil.isEmpty(note)) { + tv_my_note.setText(note); + } else { + tv_my_note.setText(getResources().getString(com.netease.nim.uikit.R.string.patient_note)); + } + if (nickname != null && !StringUtil.isEmpty(nickname)) { + nick_name.setVisibility(View.VISIBLE); + tvna.setText(nickname); + + ly_setting_othername.setVisibility(View.GONE); + + } else { + tvna.setText(name); + + nick_name.setVisibility(View.GONE); + ly_setting_othername.setVisibility(View.VISIBLE); + + } + } + } + } + + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param loadUrl + * void + */ + private void getPatientList(final String loadUrl) { + if(StringUtil.isEmpty(patientUuid)) + { + return; + } + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid", patientUuid);// 患者uuid +// LogUtil.i("patientUuid==" + patientUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid, info.result); + LogUtil.i(info.result); + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // ToastUtil.showMsgCustomToast("加载失败"); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + LogUtil.i("患者详情 = "+result); + closeProgressDialog(); + PatientDetailBean bean = GsonTools.fromGsonToBean(result, + PatientDetailBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } +// if (bean.data != null) { +// String dia = bean.data.diagnosis; +// if (!TextUtils.isEmpty(dia)) { +// if (dia.contains("肝炎(甲")) { +// tv_clinical.setText("临床诊断:" + "肝炎"); +// } else { +// tv_clinical.setText("临床诊断:" + dia); +// } +// +// } else { +// tv_clinical.setText("临床诊断:" + "暂无"); +// } +// } + String medicalHistoryContent = bean.medicalHistoryContent;// 既往史 + if (!StringUtil.isEmpty(medicalHistoryContent)) { + if (medicalHistoryContent.contains("甲、乙、丙、丁")) { + String ddd = medicalHistoryContent.replace("(甲、乙、丙、丁、戊肝)", ""); + tvnb.setOriginalText(ddd); + } else { + tvnb.setOriginalText(medicalHistoryContent); + } + + } else { + tvnb.setText("暂无"); + } + int age = bean.age;// 出生日期 + if (age > 0) { + tvege.setText(getResources().getString(R.string.patient_ege, + age + "")); + } else if (age == 0) { + tvege.setText(getResources().getString(R.string.patient_ege, + "1" + "")); + } else { + tvege.setText(getResources().getString(R.string.patient_ege, "未知")); + } + + LogUtil.i("bean.casee==" + bean.patientCase); + // 先清除 + caselist.clear(); + if (bean.patientCase != null && bean.patientCase.size() != 0) { + // 把数据加进去 + caselist.addAll(bean.patientCase); + if(caselist.size()>0) + { + text3.setVisibility(View.VISIBLE); + lv.setVisibility(View.VISIBLE); + } + else + { + text3.setVisibility(View.GONE); + lv.setVisibility(View.GONE); + } + PaAdapter adapter = new PaAdapter(caselist); + lv.setAdapter(adapter); + + + tvjibing.setVisibility(View.GONE); + } + else + { + text3.setVisibility(View.GONE); + lv.setVisibility(View.GONE); + + } + + // 数据为空 + if (bean.data == null) { + return; + } else { + + name = bean.data.realName; + if (!TextUtils.isEmpty(name)) { + nick_name.setText("昵称:"+name); +// + } + else + { + tvna.setText(name); + + } + + // 头像 + String sex = bean.data.sex; + Drawable rightDrawable = getResources().getDrawable( + R.drawable.new_man_big); + ; + if (StringUtil.isEmpty(sex) + ) { + + tvsex.setImageDrawable(null); + } + else if (1 == Integer.parseInt(sex)) {// 0男,1女 + rightDrawable = getResources() + .getDrawable(R.drawable.new_woman_big); + tvsex.setImageDrawable(rightDrawable); + } + else if(0==Integer.parseInt(sex)) + { + tvsex.setImageDrawable(rightDrawable); + } + + + // 头像 + String photo = bean.data.photo; + if (!TextUtils.isEmpty(photo) && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + tvp, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + + String nationName = bean.data.nationName;// 民族 + if (!TextUtils.isEmpty(nationName) && !"null".equals(nationName)) { + tvnation.setText(getResources().getString( + R.string.patient_nation, nationName)); + } else { + tvnation.setText("民族:" + "未知"); + } + String provName = bean.data.provName;// 省 + String cityName = bean.data.cityName;// 市 + String countyName = bean.data.countyName;// 区 +// String detailed_address = bean.data.detailed_address;// 详细地址 + String detailed_address = bean.data.detailed_address;// 详细地址废弃 + detailed_address="null"; + + String pc = "";// 省市区 + if (TextUtils.isEmpty(provName) || TextUtils.isEmpty(cityName) + || "null".equalsIgnoreCase(provName) + || "null".equalsIgnoreCase(cityName)) {// 只要省市其中一个为空,则该地址无效。必须保证省市不为空 + if (TextUtils.isEmpty(detailed_address) + || "null".equalsIgnoreCase(detailed_address)) { + tv_dress.setText("地区:" + "未知"); + } else { + tv_dress.setText("地区:" + detailed_address); + } + + } else {// 这就说明省市已经不为空了 + if (!TextUtils.isEmpty(countyName) + && !"null".equalsIgnoreCase(countyName)) {// 说明区不为空 + if (cityName.equals(countyName)) {// 判断市区是否一样 + pc = provName + cityName; + } else { + pc = provName + cityName + countyName; + } + } else {// 区为空,则为没有区 + pc = provName + cityName; + } + if (TextUtils.isEmpty(detailed_address) + || "null".equalsIgnoreCase(detailed_address)) { + tv_dress.setText("地区:" + pc); + } else { + tv_dress.setText("地区:" + pc + detailed_address); + } + } + + // if (TextUtils.isEmpty(countyName) || + // "null".equalsIgnoreCase(detailed_address)) {//详细地址为空 + // tv_dress.setText("住址: "+ pc); + // }else{ + // tv_dress.setText("住址: "+ pc + detailed_address); + // } + + // if + // (!TextUtils.isEmpty(provName)||!TextUtils.isEmpty(cityName)||!TextUtils.isEmpty(countyName) + // ||!TextUtils.isEmpty(detailed_address) + // && + // !"null".equals(provName)||!"null".equals(cityName)||!"null".equals(countyName) + // ||!"null".equals(detailed_address)) { + // + // }else{ + // } + paintphonenumber = bean.data.mobile;// 患者手机号码 + if (!TextUtils.isEmpty(paintphonenumber) + && !"null".equals(paintphonenumber)) { +// bt_calling.setText(CommonUtil.hidePhoneNo(paintphonenumber)); + bt_calling.setText(paintphonenumber); + } + + // String birthDate = bean.data.birthDate;//出生日期 + // if (!TextUtils.isEmpty(age) && !"null".equals(age)) { + // int ege = DateUtil.getAgeByBirthday(birthDate); + // } + } + } + private void showCall() + { + NewECListDialog dialog = new NewECListDialog(this , new String[]{"呼叫","复制","取消"}); + dialog.setOnDialogItemClickListener(new NewECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + switch (position) + { + case 0: + // 拨打患者电话 增加二级弹窗 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(BigPatientActivity.this, Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Calling(); + } else { + EasyWindow.with(BigPatientActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_phone).show(); + PermissionsUtil.requestPermission(BigPatientActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + Calling(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + Calling(); + } + + break; + case 1: + ClipboardUtils.copyFromEdit(BigPatientActivity.this, + "电话号码",paintphonenumber); + ToastUtil.showMessage(cn.shangyu.gdxzExpert.R.string.app_copy_ok); + break; + case 2: + dialog.dismiss(); + break; + } + + } + }); + + dialog.setTitle(""); + dialog.show(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.tv_invite_message: + Intent intent = new Intent(BigPatientActivity.this, + CasehistoryActivity.class); + startActivity(intent); + break; + case R.id.bt_patient_visit: + Intent intentVisit = new Intent(BigPatientActivity.this, + VisitPlanActivity.class); + intentVisit.putExtra("patientUuid", patientUuid); + intentVisit.putExtra("patientName", name); + startActivity(intentVisit); + + break; + case R.id.bt_case_records: + Intent intentRecords = new Intent(BigPatientActivity.this, + CaseRecordActivity.class); + intentRecords.putExtra("patientUuid", patientUuid); + startActivity(intentRecords); + + break; + case R.id.bt_send_message1: + case R.id.bt_send_message: + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(BigPatientActivity.this); + Intent intent2 = new Intent("START_PATION_ACTION"); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent2); + // 如果是患者类型,则,把按钮改为发送消息,是公益咨询就是我要回答,其他之外就是隐藏 + if (Constant.typeConsult.equals(type)) { + if (0 == state) { + // 获取抢答 + showProgressDialog("抢答请求中..."); + getList(resConsult); + } else { + SessionHelper.startP2PSession(this, patientUuid.toLowerCase(),consult,""); + + } + } else if (Constant.typePatient.equals(type)) { + // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), + // receiver_type(接收方类型 1.患者 2.专家), + // chat_from(来源1.公益咨询 2.随访 3.vip), + // chat_from_uuid(如果是公益咨询,则存uuid,否则0) +// SessionHelper.startP2PSession(this, patientUuid.toLowerCase(),general,""); + if(StringUtil.isEmpty(nickname)) + { + SessionHelper.startP2PSessionname(this, patientUuid.toLowerCase(),general,"",name); + } + else + { + UserInfoHelper.updatePatientInfo( patientUuid.toLowerCase(), SessionTypeEnum.P2P,nickname); + SessionHelper.startP2PSessionname(this, patientUuid.toLowerCase(),general,"",nickname); + + } + +// CCPAppManager.startChattingAction(ct, Constant.Patient_AppKey +// + patientUuid, top_title.getText().toString(), "2,1,2,0", patientUuid, 0); + finish(); + } else { + finish(); + } + break; + case R.id.bt_calling: +// showCall(); + // 拨打患者电话 增加二级弹窗 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(BigPatientActivity.this, Manifest.permission.CALL_PHONE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Calling(); + } else { + EasyWindow.with(BigPatientActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_phone).show(); + PermissionsUtil.requestPermission(BigPatientActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + Calling(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 +// finish(); + + } + + }, new String[]{Manifest.permission.CALL_PHONE}); + } + + }else { + Calling(); + } + + + break; + case R.id.rl_fenzu: + +// if (group_type==0){ +// Intent intent1 = new Intent(BigPatientActivity.this, GroupManageActivity.class); +// intent1.putExtra("patientUuid",patientUuid); +// if ("通过分组给患者分类".equals(tv_fenzu.getText().toString())){ +// intent1.putExtra("fenzu",""); +// }else { +// intent1.putExtra("fenzu",tv_fenzu.getText().toString()); +// } +// startActivity(intent1); +// }else { +// ToastUtil.showMessage("该患者暂不支持分组编辑"); +// } + + case R.id.ly_setting_othername:// 别名 + +// Intent intent2 = new Intent(BigPatientActivity.this, +// PatientNickNameEditActivity.class); +// intent2.putExtra("patientUuid", patientUuid); +// startActivityForResult(intent2, 1); +// break; + case R.id.ly_bz:// 备注 +// Intent intent3 = new Intent(BigPatientActivity.this, +// PatientNoteContentEditActivity.class); +// intent3.putExtra("NoteContent", tv_my_note.getText().toString() +// .trim()); +// intent3.putExtra("patientUuid", patientUuid); +// startActivityForResult(intent3, 2); + Intent intent10 = new Intent(BigPatientActivity.this, + SetInformActivity.class); + intent10.putExtra("patientUuid",patientUuid); + intent10.putExtra("nickname",nickname); + if (getResources().getString(com.netease.nim.uikit.R.string.patient_note).equals(tv_my_note.getText().toString())){ + intent10.putExtra("miaosu",""); + }else { + intent10.putExtra("miaosu", tv_my_note.getText().toString()); + } + intent10.putExtra("fenzu",tv_fenzu.getText().toString()); +// intent10.putExtra("miaosu",tv_my_note.getText().toString()); + startActivityForResult(intent10,21); + break; + case R.id.top_right: + case R.id.top_right_text: + Intent intent1 = new Intent(BigPatientActivity.this,PatientEditActivity.class); + intent1.putExtra("patientUuid",patientUuid); + startActivityForResult(intent1,24); + break; + default: + break; + } + } + + /** + * @author 拨打电话 + * @author Calling + */ + private void Calling() { + // TODO Auto-generated method stub + String message = "确定拨打该患者手机号码?"; + buildAlert = ECAlertDialog.buildAlert(ct, message, "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + try { + // TODO Auto-generated method stub + if (!TextUtils.isEmpty(paintphonenumber)) { + Intent intent = new Intent(); + // 系统默认的action,用来打开默认的电话界面 + intent.setAction(Intent.ACTION_CALL); + // 需要拨打的号码 + intent.setData(Uri.parse("tel:" + + paintphonenumber)); + startActivity(intent); + } else { + ToastUtil.showMessage("暂未获取到患者联系方式"); + } + } catch (Exception e) { + // TODO: handle exception + ToastUtil.showMessage("应用暂未获得权限"); + } + } + }); + buildAlert.setTitle("确定拨打"); + buildAlert.setTitleColor(getResources().getColor(R.color.top_title)); + buildAlert.show(); + } + + // 抢答的接口 + private static String resConsult = Url.getresConsult; + + /** + * 抢答 + * + * @param loadUrl + * void + * @param + */ + private void getList(final String loadUrl) { + // 封装参数 + RequestParams params = new RequestParams(); + // 判断是否是公益咨询列表还是抢答公益咨询,page = 0表示是抢答的接口 + String expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + params.addBodyParameter("expertUuid", expertUuid); + params.addBodyParameter("consultUuid", consultUuid); + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // 表示是抢答的 + isState(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + ToastUtil.showToast("请求失败,请稍候再试"); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + /** + * 抢答数据解析处理 isState 1.抢答成功 2.该公益咨询已被抢答 + * + * @param result + * void + */ + protected void isState(String result) { + // TODO Auto-generated method stub + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + String states = bean.code;// 1.抢答成功 2.该公益咨询已被抢答 + String message = bean.message; + closeProgressDialog(); + if (states.equals("1")) { + ToastUtil.showToast("抢答成功"); + // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), + // receiver_type(接收方类型 1.患者 2.专家), + // chat_from(来源1.公益咨询 2.随访 3.vip), + // chat_from_uuid(如果是公益咨询,则存uuid,否则0) + CCPAppManager.startChattingAction(ct, patientUuid, name, "2,1,1," + + consultUuid, patientUuid, Constant.openPublicService); + } else if (states.equals("2")) { + DialogUtil.getMyProDialog(ct, "确定", message, new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + DialogUtil.dismissMyAlertDialog(); + } + }).setProgressBarVisibility(View.GONE); + } + } + private int group_type = 0; + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case 200: + + PatientCardBean bean = GsonTools.fromGsonToBean(resultJson, + PatientCardBean.class); + if(!"200".equals(bean.getCode())) + { +// if("35000".equals(bean.getCode())) +// { +// +// } +// else +// { +// ToastUtil.showMessage(bean.getMessage()); +// } + return; + } + + if("1".equals(bean.getIsFriend())) + { + + } + else + { + top_right_text.setVisibility(View.GONE); + ECAlertDialog dilaog2 = ECAlertDialog.buildAlert(BigPatientActivity.this, + "随访关系已解除", "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dialog.dismiss(); + finish(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + } + PatientCardBean.GroupBean group = bean.getGroup(); + if (group!=null){ + group_type = group.getGroup_type(); + if (!StringUtil.isEmpty(bean.getGroup().getName())){ + + tv_fenzu.setText(bean.getGroup().getName().replace(",",",")); + } + else + { + tv_fenzu.setText("通过分组给患者分类"); + } + } + + + + + break; + } + } + + public class PaAdapter extends RecyclerView.Adapter { + + List list; + + + public PaAdapter(List list) { + this.list=list; + + } + + @NonNull + @Override + public PaAdapter.NewsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View convertView; + if(CommonUtil.BigModule()) + { + convertView = LayoutInflater.from(BigPatientActivity.this).inflate(R.layout.item_patient_case_big, + parent, false); + } + else + { + convertView = LayoutInflater.from(BigPatientActivity.this).inflate(R.layout.item_patient_case_nom, + parent, false); + } + + + NewsViewHolder mHolder = new NewsViewHolder(convertView); + + mHolder.tv_invite_message = (TextView) convertView + .findViewById(R.id.tv_invite_message); + mHolder.tv_invite_date = (TextView) convertView + .findViewById(R.id.tv_invite_date); + + + return mHolder; + + } + + @Override + public void onBindViewHolder(@NonNull NewsViewHolder mHolder, int position) { + if (list.get(position).diseaseName.contains("甲、乙、丙、丁")) { + String ddd = list.get(position).diseaseName.replace("(甲、乙、丙、丁、戊肝)", + ""); + mHolder.tv_invite_message.setText(ddd); + } else { + mHolder.tv_invite_message.setText(list.get(position).diseaseName); + } + mHolder.tv_invite_date.setText(getTime(list.get(position).createDate)); + } + + + + @Override + public int getItemCount() { + return list.size(); + } + + public class NewsViewHolder extends RecyclerView.ViewHolder + { + + public NewsViewHolder(@NonNull View itemView) { + super(itemView); + } + + public TextView tv_invite_date; + public TextView tv_invite_message; + + } + + } + + + @Override + // 引用第三方布局 点击事件实现病历详情界面的跳转 + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + Intent casehistoryIntent = new Intent(BigPatientActivity.this, + CasehistoryActivity.class); + // 获取数据 + casehistoryIntent.putExtra("caseUuid", caselist.get(arg2).uuid); + casehistoryIntent.putExtra("title", caselist.get(arg2).title); + casehistoryIntent.putExtra("diseaseUuid", + caselist.get(arg2).diseaseUuid); + casehistoryIntent.putExtra("des", caselist.get(arg2).des); + startActivity(casehistoryIntent); + } + + public String getTime(String str1) { + if (str1!=null&&str1.length()>9) { + return str1.subSequence(0, 10).toString(); + } + else + { + return str1; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientVideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientVideoActivity.java new file mode 100644 index 0000000..914e123 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPatientVideoActivity.java @@ -0,0 +1,1013 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.apache.commons.lang.CharUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PublicSearchActivity; +import cn.shangyu.gdxzExpert.activity.SendMindActivity; +import cn.shangyu.gdxzExpert.activity.VideoMoreActivity; +import cn.shangyu.gdxzExpert.adapter.VideoGVAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.bean.VideoBean; +import cn.shangyu.gdxzExpert.bean.VideoBean.VideoData; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.view.MyGridView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; + +public class BigPatientVideoActivity extends BaseActivity implements OnCallBackFromNet { + private View view; + private PullToRefreshListView mLv_Video; + private View ll_loading; + private TextView mLoad_empty; + private BigPatientVideoActivity mActivity; + private VideoAdapter mAdapter; + private VideoBean bean; + private Button mBt_send_mind; + + private RelativeLayout mRl_List, mRl_Gv; + private GridView mGv_screen; + private ListView mLv_title; + private DrawableCenterButtonR mbt_screen; + private LinearLayout mLl_title; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private Button mBt_sure, mBt_reset; + private String mCheckedTitle; + private TitleAdapter mAdapter3; + private ImageView mIm_All1, mIm_All2; + private TextView mTv_Title; + private int page = 1; + private VideoSAdapter mAdapter4; + private String typeUuid= "0e5fa3d76b8047528fdd3c452b77e9dd"; + private List data; + private DrawableCenterCheckBox cb_sort; + private String sort = "2";//最新 + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("患教视频"); + top_title.setTextSize(23); + top_right.setImageResource(R.drawable.big_search); + top_right.setVisibility(View.VISIBLE); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_video_big); + initView(); + return view; + } + + private void initView() { + mLv_Video = (PullToRefreshListView) view.findViewById(R.id.lv_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + mBt_send_mind = (Button) view.findViewById(R.id.bt_send_mind); + mbt_screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_screen); + mLl_title = (LinearLayout) view.findViewById(R.id.ll_title); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mLv_title = (ListView) view.findViewById(R.id.lv_title); + mRl_List = (RelativeLayout) view.findViewById(R.id.rl_pop_list); + mRl_Gv = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mTv_Title = (TextView) view.findViewById(R.id.tv_title); + mIm_All1 = (ImageView) view.findViewById(R.id.imageView1); + mIm_All2 = (ImageView) view.findViewById(R.id.imageView2); + cb_sort = (DrawableCenterCheckBox) view.findViewById(R.id.cb_sort);//最新,最热 + LinearLayout ll_go_patient_video1 = view.findViewById(R.id.ll_go_patient_video1); + ll_go_patient_video1.setVisibility(View.GONE); + mLoad_empty.setText("暂无患教视频"); + mTv_Title.setText("乙肝"); + mLv_Video.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + setLastUpdateTime(); + mActivity = this; + mBt_send_mind.setVisibility(View.GONE); + mLv_Video.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getVideoByKey(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getVideoByKey(); + } + }); + mBt_send_mind.setOnClickListener(this); + mbt_screen.setOnClickListener(this); + mLl_title.setOnClickListener(this); + cb_sort.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + page = 1; + if (isChecked){ + sort = "1"; + cb_sort.setText("最热"); + }else { + sort = "2"; + cb_sort.setText("最新"); + } + getVideoByKey(); + } + }); + initListener(); + getDataResult(); + getTagList(); + } + + private void initListener() { + // TODO Auto-generated method stub + mGv_screen.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_Gv.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.shaixuan_big); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.c333333)); + } + page = 1; + if (StringUtil.isEmpty(typeUuid) && Tags.size() == 0) { + mLv_Video.setMode(Mode.DISABLED); + getDataResult(); + } else { + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + } + } + }); + mLv_title.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (position == 0) { + mCheckedTitle = "全部视频"; + mTv_Title.setText("全部视频"); + mIm_All2.setImageResource(R.drawable.all_video_big); + mIm_All1.setImageResource(R.drawable.video_all_big); + mTv_Title.setTextColor(getResources().getColor( + R.color.c333333)); + typeUuid = ""; + if (Tags == null || Tags.size() == 0) { + mLv_Video.setMode(Mode.DISABLED); + getDataResult(); + } else { + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + } + + } else { + page = 1; + mCheckedTitle =data.get(position - 1).getName(); + if (mCheckedTitle.length()>13){ + mTv_Title.setText(mCheckedTitle.substring(0,12)+"..."); + }else { + mTv_Title.setText(mCheckedTitle); + } + mIm_All2.setImageResource(R.drawable.select_video_big); + mIm_All1.setImageResource(R.drawable.video_select); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + typeUuid = data.get(position - 1).getUuid(); + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + + } + mAdapter3.notifyDataSetChanged(); + mRl_List.setVisibility(View.GONE); + } + }); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getTagList() { + Map param = new HashMap(); + param.put("type", "5"); + sendParamtoNet(Url.getTagList, param, GET_TAGS_DATAS_RESULT, mActivity, + true); + + } + + public void getVideoByKey() { + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } + showProgressDialog("请稍候"); + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", keywords.toString()); + param.put("typeUuid", typeUuid); + param.put("sort", sort); + sendJsonPostParamtoNetSignMD5(Url.getPatientVideoByKeyWordsNew, param, GET_DATAS_BY_KEY_RESULT, + mActivity); + } + + /** + * 获取列表数据 + */ + public static final int GET_VIDEO_DATAS_RESULT = 101; + public static final int GET_TAGS_DATAS_RESULT = 102; + public static final int GET_DATAS_BY_KEY_RESULT = 103; + + public static final int GET_READ_NUM_RESULT = 201; + public static final int GET_MORE_NUM_RESULT = 301; + public static final int GET_READ_NUM_RESULT2 = 401; + + public void getDataResult() { + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(Url.getPtientVideoNew, param, GET_VIDEO_DATAS_RESULT, mActivity); + + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right: + if(BigModule()) + { + Intent intent = new Intent(mActivity, BigPublicSearchActivity.class); + intent.setType("patientVideo"); + startActivity(intent); + } + else + { + Intent intent = new Intent(mActivity, PublicSearchActivity.class); + intent.setType("patientVideo"); + startActivity(intent); + } + + break; + case R.id.bt_send_mind: + Intent intent1 = new Intent(mActivity, SendMindActivity.class); + startActivity(intent1); + break; + // mRl_List, mRl_Gv; + case R.id.bt_screen: + if (mTagList == null) { + getTagList(); + } + if (mRl_Gv.getVisibility() == View.GONE) { + mRl_Gv.setVisibility(View.VISIBLE); + if (mRl_List.getVisibility() == View.VISIBLE) { + mRl_List.setVisibility(View.GONE); + } + } else { + mRl_Gv.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + break; + case R.id.ll_title: + if (mRl_List.getVisibility() == View.GONE) { + mRl_List.setVisibility(View.VISIBLE); + if (mRl_Gv.getVisibility() == View.VISIBLE) { + mRl_Gv.setVisibility(View.GONE); + } + } else { + mRl_List.setVisibility(View.GONE); + } + break; + default: + break; + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_TAGS_DATAS_RESULT: + processTage(resultJson); + break; + case GET_VIDEO_DATAS_RESULT: + processData(resultJson); + break; + case GET_DATAS_BY_KEY_RESULT: + processDatalist(resultJson); + break; + default: + break; + } + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + try { + bean = GsonTools.fromGsonToBean(result, VideoBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + } else { + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + + if (bean.data == null || bean.data.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + + return; + } else { + mLoad_empty.setVisibility(View.GONE); + // mList.addAll(bean.data.list); + } + mAdapter4 = null; + /**去除z-BMS患者端*/ + data = new ArrayList<>(); + data.addAll(bean.data); + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + data.get(i).setName(s); + } + } + } + + //显示全部默认最新视频 + getVideoByKey(); + + //取消更多显示 +// if (mAdapter == null) { +// mAdapter = new VideoAdapter(data); +// mLv_Video.getRefreshableView().setAdapter(mAdapter); +// } else { +// mAdapter.getDatas(data); +// mAdapter.notifyDataSetChanged(); +// } + if (mAdapter3 == null) { + mAdapter3 = new TitleAdapter(); + mLv_title.setAdapter(mAdapter3); + } + loaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_READ_NUM_RESULT: + if (requestCode == GET_READ_NUM_RESULT) { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < this.data.size(); i++) { + for (int j = 0; j < this.data.get(i).video.size(); j++) { + if (this.data.get(i).video.get(j).getUuid() + .equals(uuid)) { + String Snum = this.data.get(i).video.get(j) + .getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + this.data.get(i).video.get(j).setReadnum( + Inum + ""); + mAdapter.notifyDataSetChanged(); + } + } + } + } + } else { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < beanlists.size(); i++) { + if (beanlists.get(i).getUuid().equals(uuid)) { + String Snum = beanlists.get(i).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + beanlists.get(i).setReadnum(Inum + ""); + mAdapter4.notifyDataSetChanged(); + + } + } + } + } + + break; + case GET_MORE_NUM_RESULT: + + getDataResult(); + break; + default: + break; + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (mTagList != null && mTagList.data.size() > 0) { + return mTagList.data.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen_big); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + + public class TitleAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return data.size() + 1; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if (position == 0) { + return "全部视频"; + } + return data.get(position - 1); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position - 1; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(mActivity); + if (position == 0) { + tv_item.setText("全部视频"); + } else { + tv_item.setText(data.get(position - 1).getName()); + } + if ("全部视频".equals(mCheckedTitle) && position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + if (position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } else { + if (mCheckedTitle != null + && mCheckedTitle.equals(data.get(position - 1) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + } + tv_item.setTextSize(18); + tv_item.setPadding(10, dip2px(mActivity, 10), 10, + dip2px(mActivity, 10)); + return tv_item; + } + + } + + private List beanlists = new ArrayList(); + + private void processDatalist(String result) { + LogUtil.i("视频列表result = "+result); + VideoMoreBean bean = GsonTools.fromGsonToBean(result, + VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + // mLv_Video.setEmptyView(mLoad_empty); + mLoad_empty.setVisibility(View.VISIBLE); + mAdapter = null; + mLv_Video.setAdapter(null); + + loaded(); + return; + + } else { + mLoad_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + beanlists.get(i).setVideo_type_name(s); + } + } + } + + } + + + + if (mAdapter4 != null) { + mLv_Video.setAdapter(mAdapter4); + } + } + } else { + // 加载更多下一页时候e + if (bean != null || bean.data != null) { + beanlists.addAll(bean.data.list); + } else { + ToastUtil.showMessage("没有更多数据了"); + } + + } + mAdapter = null; + // 更新 + if (mAdapter4 == null) { + mAdapter4 = new VideoSAdapter(beanlists); + mLv_Video.getRefreshableView().setAdapter(mAdapter4); + } else { + mAdapter4.getDatas(beanlists); + mAdapter4.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mLv_Video.setMode(Mode.PULL_FROM_START); + + } else { + mLv_Video.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + closeProgressDialog(); + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + public class VideoAdapter extends BaseAdapter { + private List datas; + + public VideoAdapter(List datas) { + // TODO Auto-generated constructor stub + this.datas = datas; + } + + public void getDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return datas.size(); + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return datas.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder holder; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video); + holder = new ViewHolder(); + holder.mGv = (MyGridView) convertView.findViewById(R.id.mgv_video); + holder.mTv_Title = (TextView) convertView. findViewById(R.id.tv_video_title); + holder.mTv_more = (TextView) convertView.findViewById(R.id.tv_video_more); + convertView.setTag(holder); + } else { + holder = (ViewHolder) convertView.getTag(); + } + + holder.mTv_Title.setText(datas.get(position).getName()); + holder.mTv_more.setTag(position); + holder.mTv_more.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, VideoMoreActivity.class); + intent.putExtra("uuid", datas.get((int) v.getTag()).getUuid()); + intent.putExtra("title", datas.get((int) v.getTag()).getName()); + intent.setType("video2"); + mActivity.startActivityForResult(intent, + mActivity.GET_MORE_NUM_RESULT); + } + }); +// holder.mAdapter.getList(datas.get(position).video); + if(holder.mGv!=null){ + VideoGVAdapter mAdapter = new VideoGVAdapter(mActivity,datas.get(position).video); + holder.mGv.setAdapter(mAdapter); + } + holder.mGv.setTag(position); + holder.mGv.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int Num = (int) parent.getTag(); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait, datas.get(Num).video.get(position) + .getPolyv_uuid()); + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); +// intent.putExtra("uuid",data.get(position).getUuid()); +// startActivity(intent1); +// Intent intent = new Intent(mActivity, VideoDetilActivity.class); + intent.putExtra("url", datas.get(Num).video.get(position) + .getPath()); + intent.putExtra("uuid", datas.get(Num).video.get(position).getUuid()); + intent.putExtra("vid", datas.get(Num).video.get(position).getPolyv_uuid()); + intent.putExtra("note", datas.get(Num).video.get(position) + .getNote()); + intent.putExtra("title", datas.get(Num).video.get(position) + .getName()); + intent.putExtra("readnum", datas.get(Num).video.get(position) + .getReadnum()); + intent.putExtra("imgpath", datas.get(Num).video.get(position) + .getImgpath()); + intent.putExtra("public_name", + datas.get(Num).video.get(position).getPublic_name()); + intent.putExtra("ispatientvideo",true); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT); + } + }); + return convertView; + } + + class ViewHolder { + TextView mTv_Title, mTv_more; + MyGridView mGv; + + } + + } + public class VideoSAdapter extends BaseAdapter { + private List lists; + + public VideoSAdapter(List lists) { + this.lists = lists; + + } + + public void getDatas(List lists) { + this.lists = lists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return lists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_list_big); + vh = new ViewHolder(); + vh.item_view = convertView + .findViewById(R.id.item_view); + vh.mTv_title1 = (TextView) convertView + .findViewById(R.id.tv_video_content1); + vh.mTv_name1 = (TextView) convertView + .findViewById(R.id.tv_video_name1); + + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + if(lists.get(position).getCreate_date()!=null&&lists.get(position).getCreate_date().length()>9) + + { + vh.mTv_title1.setText(lists.get(position).getPublic_name()+" "+lists.get(position).getCreate_date().substring(0,10)); + } + else + { + vh.mTv_title1.setText(lists.get(position).getPublic_name()+" "+lists.get(position).getCreate_date()); + } + vh.mTv_name1.setText(lists.get(position).getName()); + + vh.item_view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", lists.get(position).getPath()); + intent.putExtra("uuid", lists.get(position).getUuid()); + intent.putExtra("note", lists.get(position).getNote()); + intent.putExtra("title", lists.get(position).getName()); + intent.putExtra("readnum", lists.get(position).getReadnum()); + intent.putExtra("imgpath", lists.get(position).getImgpath()); + intent.putExtra("need_inside_share", "yes"); + intent.putExtra("public_name", lists.get(position) + .getPublic_name()); + intent.putExtra("ispatientvideo",true); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT2); + + } + }); + + + return convertView; + } + + class ViewHolder { + LinearLayout item_view; + TextView mTv_title1, mTv_name1; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPointsMallActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPointsMallActivity.java new file mode 100644 index 0000000..3e606c6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPointsMallActivity.java @@ -0,0 +1,800 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.adapter.HospitalAdapter; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GoodsListBean; +import cn.shangyu.gdxzExpert.bean.GoodsNewsListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.pointsmall.MyExchangeActivity; +import cn.shangyu.gdxzExpert.pointsmall.ProductDetailActivity; +import cn.shangyu.gdxzExpert.pointsmall.PullToRefreshHeadGridView; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class BigPointsMallActivity extends BaseActivity implements OnClickListener,OnItemClickListener,OnCallBackFromNet{ + + private PullToRefreshHeadGridView gv_product; + private int startPage = 1; + private PointsMallAdapter adapter; +// private RelativeLayout headerView; + private CustomProgressDialog pd; + private GoodsListBean fromJsonBean; + private List beans; + private LinearLayout ll_empty; +// private LinearLayout top_news_viewpager,dots_ll; + private ArrayList dotList; + private RollViewPager mViewPager; + private ArrayList titleList; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private DrawableCenterCheckBox cb_exchange,cb_score,cb_shelf; + private Boolean cb_exchangeb=false; + private Boolean cb_scoreb=false; + private Boolean cb_shelfb=false; + private String sort ="1"; + String name=""; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); +// ll_empty.setVisibility(View.VISIBLE); + gv_product.setEmptyView(ll_empty); + gv_product.setMode(Mode.DISABLED); + setAdapter(); + return; + } + if (beans.size() < 4||fromJsonBean.getData().getList().size()==0) { + gv_product.setMode(Mode.PULL_FROM_START); + }else { + gv_product.setMode(Mode.BOTH); + } + setAdapter(); + pd.dismiss(); + gv_product.onRefreshComplete(); + + break; + default: + break; + } + + } + + }; + private GoodsNewsListBean fromJsonBean1; +// private TextView topNewsTitle; + private Button bt_qualitycourse; + private LinearLayout ll_integraltickit,ll_buy_point; + + private void setAdapter() { + // TODO Auto-generated method stub + if (adapter == null) { + adapter = new PointsMallAdapter(); + gv_product.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("积分商城"); + top_title.setTextSize(23); + top_back_layout.setOnClickListener(this); + top_right_text = (TextView) findViewById(R.id.top_right_text); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("搜索"); + top_right_text.setTextSize(18); + top_right_text.setOnClickListener(this); + top_back_layout.setOnClickListener(this); + } + String tag_type=""; + private PullToRefreshListView ptrLv; + private PullToRefreshListView ptrLvpx; + RelativeLayout rl_pop_list,rl_pop_listp; + int[]sx; + String[]ssx; + String[]ssxid; + int[]px=new int[4]; + HospitalAdapter sxhospitalAdapter,pxhospitalAdapter; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_pointsmall_big); + getTypeData(); + if (!StringUtil.isEmpty(getIntent().getStringExtra("name"))) { + + name=getIntent().getStringExtra("name"); + } + ll_integraltickit = view.findViewById(R.id.ll_integraltickit); + ll_buy_point = view.findViewById(R.id.ll_buy_point); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + gv_product = view.findViewById(R.id.gv_product); + bt_qualitycourse = view.findViewById(R.id.bt_qualitycourse); + bt_qualitycourse.setOnClickListener(this); +// HeaderGridView refreshableView = gv_product.getRefreshableView(); +// headerView =view.findViewById(R.id.header); + +// topNewsTitle = (TextView) headerView.findViewById(R.id.top_news_title1); +// top_news_viewpager = (LinearLayout) headerView.findViewById(R.id.top_news_viewpager);//头部轮播 +// dots_ll = (LinearLayout) headerView.findViewById(R.id.dots_ll);//头部轮播 +// top_news_viewpager.setFocusable(true); +// top_news_viewpager.setFocusableInTouchMode(true); +// top_news_viewpager.requestFocus(); + cb_exchange=view.findViewById(R.id.cb_exchange); + cb_score=view.findViewById(R.id.cb_score); + cb_shelf=view.findViewById(R.id.cb_shelf); +// int width =getResources().getDisplayMetrics().widthPixels; +// // int height = CommonUtil.dip2px(mActivity, 180); +// int height = width * 320 / 640; +// if (width < 720) { +// height = width * 7 / 16 - 10; +// // height = width/2; +// LogUtil.i("width=" + width + "height=" + height); +// } +// ViewGroup.LayoutParams ivLp = top_news_viewpager +// .getLayoutParams(); +// ivLp.width = width; +// ivLp.height = height; +// top_news_viewpager.setLayoutParams(ivLp); + rl_pop_list=view.findViewById(R.id.rl_pop_list); + rl_pop_listp=view.findViewById(R.id.rl_pop_listp); + ptrLv = view.findViewById(R.id.lv_item);// 下拉刷新的listview控件 + ptrLvpx= view.findViewById(R.id.lv_item_px); + ptrLv.setMode(PullToRefreshBase.Mode.DISABLED); + + final Drawable drawable_n = getResources().getDrawable(R.drawable.triangle_normal_big); + drawable_n.setBounds(0, 0, drawable_n.getMinimumWidth(),drawable_n.getMinimumHeight()); //此为必须写的 + final Drawable drawable_s = getResources().getDrawable(R.drawable.triangle_green_theme_big); + drawable_s.setBounds(0, 0, drawable_n.getMinimumWidth(),drawable_n.getMinimumHeight()); //此为必须写的 + final Drawable drawable_d = getResources().getDrawable(R.drawable.triangle_green_theme_big); + drawable_d.setBounds(0, 0, drawable_n.getMinimumWidth(),drawable_n.getMinimumHeight()); //此为必须写的 + ptrLvpx.setMode(PullToRefreshBase.Mode.DISABLED); + ptrLv.getRefreshableView().setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + startPage = 1; + cb_shelf.setTextColor(getResources().getColor(R.color.tab_text_sel)); + cb_shelf.setText(getResources().getStringArray(R.array.sx_array_item)[i-1]); + + tag_type=ssxid[i-1]; + Arrays.fill(sx,0); + sx[i-1]=1; + sxhospitalAdapter.notifyDataSetChanged(); + cb_shelfb=true; + rl_pop_list.setVisibility(View.GONE); + cb_shelf.setCompoundDrawables(null, null, drawable_s, null); + getSortData(); + } + }); + + pxhospitalAdapter=new HospitalAdapter(BigPointsMallActivity.this,getResources().getStringArray(R.array.px_array_item),px); + ptrLvpx.getRefreshableView().setAdapter(pxhospitalAdapter); + ptrLvpx.getRefreshableView().setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + startPage = 1; + cb_score.setTextColor(getResources().getColor(R.color.tab_text_sel)); + cb_score.setText(getResources().getStringArray(R.array.px_array_item)[i-1]); + + switch (i-1) + { + case 0: + sort="4"; + break; + case 1: + sort="3"; + break; + case 2: + sort="5"; + break; + case 3: + sort="6"; + break; + } + Arrays.fill(px,0); + px[i-1]=1; + pxhospitalAdapter.notifyDataSetChanged(); + cb_scoreb=true; + rl_pop_listp.setVisibility(View.GONE); + cb_score.setCompoundDrawables(null, null, drawable_s, null); + getSortData(); + } + }); + + gv_product.setMode(Mode.BOTH); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); +// refreshableView.setNumColumns(2); +// refreshableView.addHeaderView(headerView); + initListViewTipText(); + beans = new ArrayList<>(); +// getHeadScrollImg(); + getSortData(); + + cb_score.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { +// startPage = 1; + if(!cb_scoreb) + { + cb_scoreb=true; + rl_pop_listp.setVisibility(View.VISIBLE); + rl_pop_list.setVisibility(View.GONE); + + + } + else + { + cb_scoreb=false; + rl_pop_listp.setVisibility(View.GONE); + + } +// cb_score.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// cb_shelfb=false; +// cb_shelf.setTextColor(getResources().getColor(R.color.c333333)); +// cb_shelf.setCompoundDrawables(null, null, drawable_n, null); +// cb_exchangeb=false; +// cb_exchange.setTextColor(getResources().getColor(R.color.c333333)); +// cb_exchange.setCompoundDrawables(null, null, drawable_n, null); +// startPage = 1; +// if(!cb_scoreb) +// { +// cb_scoreb=true; +// cb_score.setCompoundDrawables(null, null, drawable_s, null); +// sort="3"; +// getData(); +// } +// else +// { +// cb_score.setCompoundDrawables(null, null, drawable_d, null); +// cb_scoreb=false; +// sort="4"; +// getData(); +// } + } + }); + cb_exchange.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + cb_exchange.setTextColor(getResources().getColor(R.color.tab_text_sel)); + cb_shelfb=false; + cb_shelf.setTextColor(getResources().getColor(R.color.c333333)); + cb_shelf.setCompoundDrawables(null, null, drawable_n, null); + cb_scoreb=false; + cb_score.setTextColor(getResources().getColor(R.color.c333333)); + cb_score.setCompoundDrawables(null, null, drawable_n, null); + startPage = 1; + if(!cb_exchangeb) + { + cb_exchange.setCompoundDrawables(null, null, drawable_s, null); + cb_exchangeb=true; + sort="5"; + getData(); + } + else + { + cb_exchangeb=false; + cb_exchange.setCompoundDrawables(null, null, drawable_d, null); + sort="6"; + getData(); + } + } + }); + cb_shelf.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { +// startPage = 1; + if(!cb_shelfb) + { + cb_shelfb=true; + rl_pop_list.setVisibility(View.VISIBLE); + rl_pop_listp.setVisibility(View.GONE); +; + + } + else + { + cb_shelfb=false; + rl_pop_list.setVisibility(View.GONE); + + + } +// cb_shelf.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// cb_exchangeb=false; +// cb_exchange.setTextColor(getResources().getColor(R.color.c333333)); +// cb_exchange.setCompoundDrawables(null, null, drawable_n, null); +// cb_scoreb=false; +// cb_score.setTextColor(getResources().getColor(R.color.c333333)); +// cb_score.setCompoundDrawables(null, null, drawable_n, null); +// startPage = 1; +// if(cb_shelfb) +// { +// cb_shelf.setCompoundDrawables(null, null, drawable_d, null); +// cb_shelfb=false; +// sort="2"; +// getData(); +// +// } +// else +// { +// cb_shelf.setCompoundDrawables(null, null, drawable_s, null); +// cb_shelfb=true; +// sort="1"; +// getData(); +// +// } + } + }); + gv_product.setOnItemClickListener(this); + ll_buy_point.setOnClickListener(this); + ll_integraltickit.setOnClickListener(this); + return view; + } + private void getTypeData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.goodsTagList, param, 101, this); + } + private void getSortData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + param.put("sort",sort); + param.put("tag_type",tag_type); + param.put("name",name); + sendJsonPostParamtoNetSignMD5(Url.goodsListV2, param, 1, this); + } + private void getHeadScrollImg() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); +// param.put("debug","true"); + sendJsonPostParamtoNetSignMD5(Url.goodsNewsList, param, 2, this); + } + + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + param.put("sort",sort); + sendJsonPostParamtoNetSignMD5(Url.goodsList, param, 1, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_right_text: +// Intent intent = new Intent(BigPointsMallActivity.this,MyExchangeActivity.class); +// startActivity(intent); + Intent intentv = new Intent(BigPointsMallActivity.this, + BigPublicSearchActivity.class); + intentv.setType("shopping"); + startActivity(intentv); + break; + case R.id.top_back_layout: +// finish(); + break; + case R.id.bt_qualitycourse: + startActivity(new Intent(BigPointsMallActivity.this, QualityCourseActivity.class)); + break; + case R.id.ll_integraltickit://积分券 + Intent intent = new Intent(BigPointsMallActivity.this, MyExchangeActivity.class); + startActivity(intent); +// Intent intent1 = new Intent(BigPointsMallActivity.this, IntegralTicketActivity.class); +// startActivity(intent1); + break; + case R.id.ll_buy_point://购买积分 + Intent intent2 = new Intent(BigPointsMallActivity.this, BuyIntegerActivty.class); + startActivity(intent2); + break; + } + } + + class PointsMallAdapter extends BaseAdapter{ + private final int LEFT_TYPE=0; + private final int RIGHT_TYPE=1; + private int currentType; + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beans!=null&beans.size()>0?beans.size():0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beans.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + + @Override + public int getViewTypeCount() { + return 2; + } + + @Override + public int getItemViewType(int position) { + if (position%2==0) { + return LEFT_TYPE; + } else { + return RIGHT_TYPE; + } + } + + @SuppressWarnings("null") + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View firstItemView = null; + View othersItemView=null; + currentType= getItemViewType(position); + if (currentType== LEFT_TYPE) { + firstItemView = convertView; + PointsMallAdapter.FirstItemViewHolder firstItemViewHolder=null; + if (firstItemView==null) { + firstItemView = UIUtils.inflate(R.layout.item_gv_product_new_big); + firstItemViewHolder=new PointsMallAdapter.FirstItemViewHolder(); + firstItemViewHolder.iv_product=(ImageView) firstItemView.findViewById(R.id.iv_product); + firstItemViewHolder.tv_pruduct_name=(TextView) firstItemView.findViewById(R.id.tv_pruduct_name); + firstItemViewHolder.tv_pruduct_point=(TextView) firstItemView.findViewById(R.id.tv_pruduct_point); + firstItemView.setTag(firstItemViewHolder); + + } else { + firstItemViewHolder=(PointsMallAdapter.FirstItemViewHolder) firstItemView.getTag(); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml + beans.get(position).getImg(), firstItemViewHolder.iv_product, + ImageOptions.getImageOptions(R.drawable.default_video)); + firstItemViewHolder.tv_pruduct_name.setText(beans.get(position).getName()); + firstItemViewHolder.tv_pruduct_point.setText(beans.get(position).getBonuspoints()+"积分"); + convertView=firstItemView; + }else{ + othersItemView = convertView; + PointsMallAdapter.OthersViewHolder othersViewHolder=null; + if (othersItemView==null) { + othersItemView = UIUtils.inflate(R.layout.item_gv_product1_big); + othersViewHolder=new PointsMallAdapter.OthersViewHolder(); + othersViewHolder.iv_product1=(ImageView) othersItemView.findViewById(R.id.iv_product); + othersViewHolder.tv_pruduct_name1=(TextView) othersItemView.findViewById(R.id.tv_pruduct_name); + othersViewHolder.tv_pruduct_point1=(TextView) othersItemView.findViewById(R.id.tv_pruduct_point); + othersItemView.setTag(othersViewHolder); + } else { + othersViewHolder=(PointsMallAdapter.OthersViewHolder) othersItemView.getTag(); + } + /** + * + * */ + + ImageLoader.getInstance().displayImage( + Url.urlHtml + beans.get(position).getImg(), othersViewHolder.iv_product1, + ImageOptions.getImageOptions(R.drawable.default_video)); + othersViewHolder.tv_pruduct_name1.setText(beans.get(position).getName()); + othersViewHolder.tv_pruduct_point1.setText(beans.get(position).getBonuspoints()+"积分"); + + convertView=othersItemView; + } + + return convertView; + } + //第一个Item的ViewHolder + private class FirstItemViewHolder{ + ImageView iv_product; + TextView tv_pruduct_name,tv_pruduct_point; + } + + //除第一个Item以外其余Item的ViewHolder + private class OthersViewHolder{ + ImageView iv_product1; + TextView tv_pruduct_name1,tv_pruduct_point1; + } + } + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + gv_product.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = gv_product + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = gv_product.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub + startPage = 1; +// getData(); + getSortData(); + } + private void geneItems() { + // TODO Auto-generated method stub + startPage++; + getSortData(); +// getData(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(BigPointsMallActivity.this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(BigPointsMallActivity.this,ProductDetailActivity.class); + intent.putExtra("uuid", beans.get(position).getUuid()); + intent.putExtra("type", beans.get(position).getType()); + intent.putExtra("name", beans.get(position).getName()); + intent.putExtra("upan",beans.get(position).getUpan()); + startActivity(intent); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("gdxzsort","resultJson = " + resultJson); + switch (resultCode) { + case 101: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.optString("code"))) + { + if(!jsonObject.isNull("data")) + { + JSONArray jsonArray= jsonObject.optJSONArray("data"); + if(jsonArray!=null) + { + ssx=new String[jsonArray.length()]; + ssxid=new String[jsonArray.length()]; + sx=new int[jsonArray.length()]; + for(int i=0;i0){ +// initDot(fromJsonBean1.getData().size()); + mViewPager = new RollViewPager(BigPointsMallActivity.this, dotList, + R.drawable.dot_focus4, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intentt1 = new Intent(BigPointsMallActivity.this, NewsDetailActivity.class); + intentt1.putExtra("url", Url.urlHtml+fromJsonBean1.getData().get(position).getPath()); + intentt1.putExtra("title", "积分商城"); + intentt1.putExtra("newsTitle", fromJsonBean1.getData().get(position).getTitle()); + intentt1.putExtra("summary", "爱学习爱分享,领积分兑奖品,今天你兑了吗?"); + intentt1.putExtra("flag", 1); + startActivity(intentt1); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + ArrayList list = new ArrayList<>(); + titleList = new ArrayList(); + for (int i = 0; i < fromJsonBean1.getData().size(); i++) { + list.add(Url.urlHtml+fromJsonBean1.getData().get(i).getHeadImg()); + titleList.add(fromJsonBean1.getData().get(i).getTitle()); + } + mViewPager.setUriList(list); + // 开始滚动 + mViewPager.startRoll(); + // top标题 +// mViewPager.setTitle(topNewsTitle, titleList); +// // 加载到布局 +// top_news_viewpager.removeAllViews(); +// top_news_viewpager.addView(mViewPager); + }else { + + } + + + }else { + ToastUtil.showMessage("请求失败"); + } + break; + } + } + +// /** +// * 实例化轮播图点 initDot +// * +// * @param size +// * void +// */ +// private void initDot(int size) { +// dotList = new ArrayList(); +// dots_ll.removeAllViews(); +// for (int i = 0; i < size; i++) { +// LayoutParams params = new LayoutParams( +// CommonUtil.dip2px(this, 6), CommonUtil.dip2px( +// this, 6)); +// params.setMargins(5, 0, 5, 0); +// View m = new View(this); +// if (i == 0) { +// m.setBackgroundResource(R.drawable.dot_focus4); +// } else { +// m.setBackgroundResource(R.drawable.dot_normal); +// } +// m.setLayoutParams(params); +// dots_ll.addView(m); +// dotList.add(m); +// } +// } + + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + AppManager.getAppManager().finishAllActivity1(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPublicSearchActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPublicSearchActivity.java new file mode 100644 index 0000000..f5bbcad --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigPublicSearchActivity.java @@ -0,0 +1,622 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.activity.CourseActivity; +import cn.shangyu.gdxzExpert.activity.SearchCourseActivity; +import cn.shangyu.gdxzExpert.activity.SearchNewsActivity; +import cn.shangyu.gdxzExpert.activity.SearchPatientActivity; +import cn.shangyu.gdxzExpert.activity.SearchScienceActivity; +import cn.shangyu.gdxzExpert.activity.SearchVideoActivity; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class BigPublicSearchActivity extends AppCompatActivity implements OnClickListener { + private GridView gv_search; +// private int[] mDrawable; +// private String[] mName; + private int[] bigmDrawable; + private String[] bigmName; + private int choicePos = -1;// 当前选中位置 + private PublicSearchAdapter mPublicSearchAdapter; + private ImageView iv_back; + private TextView tv_public_ser; + private EditText tv_top_search; + private String type;// 根据类型图标变亮 + private String searchStr; + + // @Override + // public View onCreateSuccessedView() { + // // TODO Auto-generated method stub + // View view = View.inflate(this, R.layout.activity_public_search, null); + // + // return view; + // } + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_public_search_big); + + Toolbar mToolbar=findViewById(R.id.toolbar); + mToolbar.getBackground().setAlpha(255); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + gv_search = (GridView) findViewById(R.id.gv_search); + iv_back = (ImageView) findViewById(R.id.top_back); + tv_public_ser = (TextView) findViewById(R.id.tv_public_ser); + tv_top_search = (EditText) findViewById(R.id.tv_top_search); +// if(SharePrefUtil.getBoolean(this, Constant.ShowMagazine,true)) +// { +// init(); +// } +// else +// { + inithide(); +// } + mPublicSearchAdapter = new PublicSearchAdapter(this, bigmDrawable, bigmName); + gv_search.setAdapter(mPublicSearchAdapter); + initClick(); + } + + private void initClick() { + gv_search.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + choicePos = position; +// if(SharePrefUtil.getBoolean(BigPublicSearchActivity.this, Constant.ShowMagazine,true)) +// { +// if (choicePos == 2) { +// Intent intentwf = new Intent(BigPublicSearchActivity.this, +// BigMyLibraryActivity.class); +// intentwf.putExtra("search", "searchStr"); +// startActivity(intentwf); +// } +// if (choicePos == 6) { +// Intent intent = new Intent(BigPublicSearchActivity.this, +// CourseActivity.class); +// startActivity(intent); +// } +// } +// else +// { + if (choicePos == 5) { + Intent intent = new Intent(BigPublicSearchActivity.this, + CourseActivity.class); + startActivity(intent); + } +// } + + mPublicSearchAdapter.notifyDataSetChanged(); + } + }); + iv_back.setOnClickListener(this); + tv_public_ser.setOnClickListener(this); + tv_top_search.setOnEditorActionListener(new OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEND + || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { + // do something; +// if(SharePrefUtil.getBoolean(BigPublicSearchActivity.this, Constant.ShowMagazine,true)) +// { +// search(); +// } +// else +// { + searchhide(); +// } + return false; + } + return false; + } + }); + } + + private void search() { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + // TODO Auto-generated method stub + // "视频", "资讯", "科普", "指南", "患者", "万方医学" + if (choicePos != 6 && choicePos != 2) { + searchStr = tv_top_search.getText().toString().trim(); + if (StringUtil.isEmpty(searchStr)) { + ToastUtil.showMessage("请输入搜索内容"); + return; + } + } + + switch (choicePos) { + case 0: + Intent intentpVideo = new Intent(BigPublicSearchActivity.this, + SearchVideoActivity.class); + intentpVideo.setType("patient"); + intentpVideo.putExtra("search", searchStr); + startActivity(intentpVideo); + break; + case 7: + Intent intentVideo = new Intent(BigPublicSearchActivity.this, + SearchVideoActivity.class); + intentVideo.setType("doctor"); + intentVideo.putExtra("search", searchStr); + startActivity(intentVideo); + break; + case 4: + Intent intentnews = new Intent(BigPublicSearchActivity.this, + SearchNewsActivity.class); + intentnews.putExtra("search", searchStr); + startActivity(intentnews); + break; + case 1: + + Intent intentScience = new Intent(BigPublicSearchActivity.this, + SearchScienceActivity.class); + intentScience.putExtra("search", searchStr); + startActivity(intentScience); + break; + case 5: + + Intent intentLibrary = new Intent(BigPublicSearchActivity.this, + BookshelfListActivity.class); + intentLibrary.putExtra("search", searchStr); + intentLibrary.putExtra("type", "1"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + break; + case 6: + Intent intentjp = new Intent(BigPublicSearchActivity.this, + CourseActivity.class); + startActivity(intentjp); + break; + + case 2: + Intent intentwf = new Intent(BigPublicSearchActivity.this, + BigMyLibraryActivity.class); + intentwf.putExtra("search", "searchStr"); + startActivity(intentwf); + break; + + case 8: + Intent intentco = new Intent(BigPublicSearchActivity.this, + SearchCourseActivity.class); + intentco.putExtra("search", searchStr); + startActivity(intentco); + // ToastUtil.showMessage("开通在即,敬请期待"); + break; + case 3: + Intent intentPatient = new Intent(BigPublicSearchActivity.this, + SearchPatientActivity.class); + intentPatient.putExtra("search", searchStr); + startActivity(intentPatient); + break; + case 9: + Intent intentshop = new Intent(BigPublicSearchActivity.this, + BigPointsMallActivity.class); + intentshop.putExtra("name", searchStr); + intentshop.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intentshop); +// case 9: +// Intent intentHospital = new Intent(BigPublicSearchActivity.this, +// HospitalSearchActivity.class); +// intentHospital.putExtra("title", searchStr); +// intentHospital.setType("Hospital"); +// startActivity(intentHospital); +// break; +// case 11: +// Intent intentDoctor = new Intent(BigPublicSearchActivity.this, +// GanDanDoctorActivity.class); +// intentDoctor.putExtra("title", searchStr); +// intentDoctor.setType("Doctor"); +// startActivity(intentDoctor); +//// ToastUtil.showMessage("开通在即,敬请期待"); +// break; +// case 10: +// Intent intentDepart = new Intent(BigPublicSearchActivity.this, +// HospitalSearchActivity.class); +// intentDepart.putExtra("title", searchStr); +// intentDepart.setType("Depart"); +// startActivity(intentDepart); +// break; + default: + break; + } + + } + private void needreport(String belong) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("search"); + rbens.setBelong(belong); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + private void searchhide() { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + // TODO Auto-generated method stub + // "视频", "资讯", "科普", "指南", "患者", "万方医学" + if (choicePos != 5 ) { + searchStr = tv_top_search.getText().toString().trim(); + if (StringUtil.isEmpty(searchStr)) { + ToastUtil.showMessage("请输入搜索内容"); + return; + } + } + + switch (choicePos) { + case 0: + Intent intentpVideo = new Intent(BigPublicSearchActivity.this, + SearchVideoActivity.class); + intentpVideo.setType("patient"); + intentpVideo.putExtra("search", searchStr); + startActivity(intentpVideo); + needreport("患教视频"); + break; + case 6: + Intent intentVideo = new Intent(BigPublicSearchActivity.this, + SearchVideoActivity.class); + intentVideo.setType("doctor"); + intentVideo.putExtra("search", searchStr); + startActivity(intentVideo); + needreport("会议视频"); + break; + case 3: + Intent intentnews = new Intent(BigPublicSearchActivity.this, + SearchNewsActivity.class); + intentnews.putExtra("search", searchStr); + startActivity(intentnews); + needreport("新闻"); + break; + case 1: + + Intent intentScience = new Intent(BigPublicSearchActivity.this, + SearchScienceActivity.class); + intentScience.putExtra("search", searchStr); + startActivity(intentScience); + needreport("科普"); + break; + case 4: + + Intent intentLibrary = new Intent(BigPublicSearchActivity.this, + BookshelfListActivity.class); + intentLibrary.putExtra("search", searchStr); + intentLibrary.putExtra("type", "1"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + needreport("指南"); + break; + case 5: + Intent intentjp = new Intent(BigPublicSearchActivity.this, + CourseActivity.class); + startActivity(intentjp); + break; + +// case 2: +// Intent intentwf = new Intent(BigPublicSearchActivity.this, +// BigMyLibraryActivity.class); +// intentwf.putExtra("search", "searchStr"); +// startActivity(intentwf); +// break; + + case 7: + Intent intentco = new Intent(BigPublicSearchActivity.this, + SearchCourseActivity.class); + intentco.putExtra("search", searchStr); + startActivity(intentco); + needreport("肝胆课件"); + // ToastUtil.showMessage("开通在即,敬请期待"); + break; + case 2: + Intent intentPatient = new Intent(BigPublicSearchActivity.this, + SearchPatientActivity.class); + intentPatient.putExtra("search", searchStr); + startActivity(intentPatient); + needreport("患者"); + break; + case 8: + Intent intentshop = new Intent(BigPublicSearchActivity.this, + BigPointsMallActivity.class); + intentshop.putExtra("name", searchStr); + intentshop.setFlags(FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intentshop); + needreport("积分商城"); + break; +// case 9: +// Intent intentHospital = new Intent(BigPublicSearchActivity.this, +// HospitalSearchActivity.class); +// intentHospital.putExtra("title", searchStr); +// intentHospital.setType("Hospital"); +// startActivity(intentHospital); +// break; +// case 11: +// Intent intentDoctor = new Intent(BigPublicSearchActivity.this, +// GanDanDoctorActivity.class); +// intentDoctor.putExtra("title", searchStr); +// intentDoctor.setType("Doctor"); +// startActivity(intentDoctor); +//// ToastUtil.showMessage("开通在即,敬请期待"); +// break; +// case 10: +// Intent intentDepart = new Intent(BigPublicSearchActivity.this, +// HospitalSearchActivity.class); +// intentDepart.putExtra("title", searchStr); +// intentDepart.setType("Depart"); +// startActivity(intentDepart); +// break; + default: + break; + } + + } + private void init() { + type = getIntent().getType(); + if (type.equals("news")) { + choicePos = 4; + } + if (type.equals("science")) { + choicePos = 1; + } + if (type.equals("patientVideo")) { + choicePos = 0; + } + if (type.equals("drug")) { + choicePos = 5; + } + if (type.equals("video")) { + choicePos = 7; + } + if (type.equals("medicine")) { + choicePos = 6; + } + if (type.equals("course")) { + choicePos = 8; + } + if (type.equals("shopping")) { + choicePos = 9; + } +// if (type.equals("hospital")) { +// choicePos = 9; +// } +// if (type.equals("doctor")) { +// choicePos = 11; +// } +// if (type.equals("department")) { +// choicePos = 10; +// } + +// mDrawable = new int[] { R.drawable.item_video, +// R.drawable.item_patient_video, R.drawable.item_news, +// R.drawable.item_science, R.drawable.item_drug, +// R.drawable.item_jingpin, R.drawable.item_wfa, +// R.drawable.item_course, R.drawable.item_patient, +// R.drawable.item_hospital, R.drawable.item_department, +// R.drawable.item_doctor };// "药品",R.drawable.item_medicine, +// mName = new String[] { "会议视频", "患教视频", "新闻", "科普", "指南","精品课", "万方医学", +// "肝胆课件", "患者", "名院", "名科", "名医" };// + bigmDrawable = new int[] { + R.drawable.item_patient_video_big, + R.drawable.item_science_big,R.drawable.item_wfa_big, + R.drawable.item_patient_big,R.drawable.item_news_big, + R.drawable.item_drug_big, + R.drawable.item_jingpin_big,R.drawable.item_video_big, + R.drawable.item_course_big,R.drawable.item_mall_big + };// "药品",R.drawable.item_medicine, + bigmName = new String[] { "患教视频", "科普文章", "万方医学", "随访患者","肝胆新闻", + "指南共识","精品课","肝胆视频", "肝胆课件","积分商城"};// + + + } + private void inithide() { + type = getIntent().getType(); + if (type.equals("news")) { + choicePos = 3; + } + if (type.equals("science")) { + choicePos = 1; + } + if (type.equals("patientVideo")) { + choicePos = 0; + } + if (type.equals("drug")) { + choicePos = 4; + } + if (type.equals("video")) { + choicePos = 6; + } + if (type.equals("medicine")) { + choicePos = 5; + } + if (type.equals("course")) { + choicePos = 7; + } + if (type.equals("shopping")) { + choicePos = 8; + } +// if (type.equals("hospital")) { +// choicePos = 9; +// } +// if (type.equals("doctor")) { +// choicePos = 11; +// } +// if (type.equals("department")) { +// choicePos = 10; +// } + +// mDrawable = new int[] { R.drawable.item_video, +// R.drawable.item_patient_video, R.drawable.item_news, +// R.drawable.item_science, R.drawable.item_drug, +// R.drawable.item_jingpin, R.drawable.item_wfa, +// R.drawable.item_course, R.drawable.item_patient, +// R.drawable.item_hospital, R.drawable.item_department, +// R.drawable.item_doctor };// "药品",R.drawable.item_medicine, +// mName = new String[] { "会议视频", "患教视频", "新闻", "科普", "指南","精品课", "万方医学", +// "肝胆课件", "患者", "名院", "名科", "名医" };// + bigmDrawable = new int[] { + R.drawable.item_patient_video_big, + R.drawable.item_science_big, + R.drawable.item_patient_big,R.drawable.item_news_big, + R.drawable.item_drug_big, + R.drawable.item_jingpin_big,R.drawable.item_video_big, + R.drawable.item_course_big,R.drawable.item_mall_big + };// "药品",R.drawable.item_medicine, + bigmName = new String[] { "患教视频", "科普文章", "随访患者","肝胆新闻", + "指南共识","精品课","肝胆视频", "肝胆课件","积分商城" };// + + + } + // 适配器 + public class PublicSearchAdapter extends BaseAdapter { + private Context mContext; + private int[] mDrawable; + private String[] mName; + + public PublicSearchAdapter(Context mContext, int[] mDrawable, + String[] mName) { + this.mContext = mContext; + this.mDrawable = mDrawable; + this.mName = mName; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mDrawable.length; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mDrawable[position]; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_public_serach_big); + vh = new ViewHolder(); + + vh.iv = (ImageView) convertView.findViewById(R.id.iv_ser_item); + vh.name = (TextView) convertView.findViewById(R.id.tv_ser_name); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + // vh.iv.setBackgroundResource(R.drawable.item_science); + vh.iv.setBackgroundResource(mDrawable[position]); + vh.name.setText(mName[position]); + if (choicePos == position) { + vh.iv.setEnabled(true); + } else { + vh.iv.setEnabled(false); + } + return convertView; + } + + class ViewHolder { + ImageView iv; + TextView name; + } + + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back: + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + this.finish(); + break; + case R.id.tv_public_ser: +// if(SharePrefUtil.getBoolean(BigPublicSearchActivity.this, Constant.ShowMagazine,true)) +// { +// search(); +// } +// else +// { + searchhide(); +// } + break; + + default: + break; + } + } + + public void startReport(List list) + { + Intent intent = new Intent(BigPublicSearchActivity.this, ReportService.class); + intent.putExtra("report_list", (Serializable) list); + intent.putExtra("report_token", Constant.Repotr_token); + startService(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigToolActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigToolActivity.java new file mode 100644 index 0000000..90c0140 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigToolActivity.java @@ -0,0 +1,80 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ToolsActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.big.adapter.BigToolAdapter; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class BigToolActivity extends BaseActivity implements AdapterView.OnItemClickListener { + + @Override + public void setTitle() { + top_title.setTextSize(23); + top_title.setText("常用工具"); + + } + private PullToRefreshListView ptrLv; + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_library_list_big); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + + // 设置只有下拉刷新 + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + initData(); + return view; + + } + /** + * 实例化数据 + */ + private void initData() { + ptrLv.setMode(PullToRefreshBase.Mode.DISABLED); + String[] strTools = getResources().getStringArray(R.array.tools_array_item); + ptrLv.getRefreshableView().setAdapter(new BigToolAdapter(this, R.layout.bookself_item_big, R.id.item_name,strTools)); + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + int position = arg2 - ptrLv.getRefreshableView().getHeaderViewsCount(); +// String title = ((TextView)arg1).getText().toString(); + String title =((TextView)(arg1.findViewById(R.id.item_name))).getText().toString(); + Intent intent = new Intent(this, ToolsActivity.class); + if (position==0) { + intent.putExtra("position", position); + }else if (position==1) { + position=22; + intent.putExtra("position", position); + }else if (position == 2){ + position=23; + intent.putExtra("position", position); + }else{ + intent.putExtra("position", position-2);//之前每加一行多减去一 + } + intent.putExtra("title", title); + startActivity(intent); + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigVideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigVideoActivity.java new file mode 100644 index 0000000..2b9e08a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BigVideoActivity.java @@ -0,0 +1,1305 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.apache.commons.lang.CharUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.SendMindActivity; +import cn.shangyu.gdxzExpert.adapter.VideoAdapter; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.bean.VideoBean; +import cn.shangyu.gdxzExpert.bean.VideoBeanNew; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.bean.VideoRollBean; +import cn.shangyu.gdxzExpert.bean.ZengshuBean; +import cn.shangyu.gdxzExpert.big.adapter.BigVideoSAdapter; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class BigVideoActivity extends BaseActivity implements OnCallBackFromNet { + private View view; + private PullToRefreshListView mLv_Video; + private View ll_loading; + private TextView mLoad_empty; + private BigVideoActivity mActivity; + private VideoAdapter mAdapter; + private VideoBean bean; + private VideoBeanNew beantag; + private Button mBt_send_mind; + private ImageView bt_gandanxyb; + + private RelativeLayout mRl_List, mRl_Gv; + private GridView mGv_screen; + private ListView mLv_title; + private ListView mLv_title_tag; + private DrawableCenterButtonR mbt_screen; + private LinearLayout mLl_title; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private Button mBt_sure, mBt_reset; + private String mCheckedTitle = "全部";; + private String mCheckedTitle1; + private TitleAdapter mAdapter3; + private TitleAdapter1 mAdapter5; + private ImageView mIm_All1, mIm_All2; + private TextView mTv_Title; + private int page = 1; + private BigVideoSAdapter mAdapter4; + private String typeUuid = ""; + private LinearLayout mLl_patient_video,mLl_patient_video1,ll_go_qualitycourse; + private List data; + private List datatag; + List datatagname; + public static final int VIDEOROLL = 200; + private RollViewPager mViewPager; + private ArrayList dotList; +// private View rl_topview; + private String sort = "2";//最新 + private DrawableCenterCheckBox cb_sort; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText(getResources().getString(R.string.gandanshipin)); + top_title.setTextSize(23); + top_right.setImageResource(R.drawable.big_search); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(this); + top_right_search.setOnClickListener(this); + top_right_search.setImageResource(R.drawable.big_search); + top_right_search.setVisibility(View.GONE); + top_back.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_video1_big); + initView(); +// getscrllView(); + return view; + } + + private void getscrllView() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.videoRoll,map,VIDEOROLL,this); + } + private LinearLayout dotLl; + private TextView topNewsTitle; + private LinearLayout mViewPagerLay; + private View topNewsView; + private void initView() { + mLv_Video = (PullToRefreshListView) view.findViewById(R.id.lv_video); + mLoad_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = view.findViewById(R.id.ll_loading); + mBt_send_mind = (Button) view.findViewById(R.id.bt_send_mind); + bt_gandanxyb = view.findViewById(R.id.bt_gandanxyb); + mbt_screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_screen); + cb_sort = (DrawableCenterCheckBox) view.findViewById(R.id.cb_sort);//最新,最热 + mLl_title = (LinearLayout) view.findViewById(R.id.ll_title); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mLv_title = (ListView) view.findViewById(R.id.lv_title); + mLv_title_tag=view.findViewById(R.id.lv_title_tag); + mRl_List = (RelativeLayout) view.findViewById(R.id.rl_pop_list); + mRl_Gv = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mTv_Title = (TextView) view.findViewById(R.id.tv_title); + mIm_All1 = (ImageView) view.findViewById(R.id.imageView1); + mIm_All2 = (ImageView) view.findViewById(R.id.imageView2); + mLl_patient_video = (LinearLayout) view.findViewById(R.id.ll_go_patient_video); + mLl_patient_video1= (LinearLayout) view.findViewById(R.id.ll_go_patient_video1); + ll_go_qualitycourse= (LinearLayout) view.findViewById(R.id.ll_go_qualitycourse); + mLl_patient_video1.setVisibility(View.VISIBLE); + + //添加轮播 +// rl_topview = view.findViewById(R.id.rl_topview); + dotLl = (LinearLayout) view.findViewById(R.id.dots_ll); + topNewsTitle = (TextView) view.findViewById(R.id.top_news_title); + mViewPagerLay = (LinearLayout) view.findViewById(R.id.top_news_viewpager); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + mViewPagerLay.setLayoutParams(ivLp); + +// topNewsView = UIUtils.inflate(R.layout.layout_videoroll_view); +// dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); +// topNewsTitle = (TextView) topNewsView.findViewById(R.id.top_news_title); +// mViewPagerLay = (LinearLayout) topNewsView.findViewById(R.id.top_news_viewpager); +// // 根据手机尺寸设置顶部轮播图的宽高 +// int width = getResources().getDisplayMetrics().widthPixels; +// // int height = CommonUtil.dip2px(mActivity, 180); +// int height = width * 320 / 640; +// if (width < 720) { +// height = width * 7 / 16 - 10; +// // height = width/2; +// LogUtil.i("width=" + width + "height=" + height); +// } +// ViewGroup.LayoutParams ivLp = mViewPagerLay +// .getLayoutParams(); +// ivLp.width = width; +// ivLp.height = height; +// mViewPagerLay.setLayoutParams(ivLp); + //------------------------------------- + mLv_Video.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + setLastUpdateTime(); + mActivity = this; + mLv_Video.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getVideoByKey(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getVideoByKey(); + } + }); + if (Constant.from==1){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_gandanxyb + ); + bt_gandanxyb.setVisibility(View.VISIBLE); + }else if (Constant.from==2){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_gandanxyb + ); + bt_gandanxyb.setVisibility(View.VISIBLE); + } + mBt_send_mind.setOnClickListener(this); + bt_gandanxyb.setOnClickListener(this); + mbt_screen.setOnClickListener(this); + mLl_title.setOnClickListener(this); + mLl_patient_video.setOnClickListener(this); + ll_go_qualitycourse.setOnClickListener(this); + cb_sort.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + page = 1; + if (isChecked){ + sort = "1"; + cb_sort.setText("最热"); + }else { + sort = "2"; + cb_sort.setText("最新"); + } + mRl_List.setVisibility(View.GONE); + mLl_patient_video1.setVisibility(View.VISIBLE); + getVideoByKey(); + } + }); + initListener(); + getDataResult(); + getTagList(); + getNewDataResult(); + } + + private void initListener() { + // TODO Auto-generated method stub + mGv_screen.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + mLl_patient_video1.setVisibility(View.VISIBLE); + mRl_Gv.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.shaixuan_big); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + mbt_screen.setCompoundDrawables(null, null, drawable, null); + mbt_screen.setTextColor(getResources().getColor( + R.color.c333333)); + } + page = 1; + if (StringUtil.isEmpty(typeUuid) && Tags.size() == 0) { + mLv_Video.setMode(Mode.DISABLED); + getDataResult(); + } else { + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + } + } + }); + mLv_title.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if(mAdapter5!=null) + mAdapter5.setDataList(datatag.get(position).getList()); + mAdapter5.notifyDataSetChanged(); + if (position == 0) { + mCheckedTitle = "全部"; +// mTv_Title.setText("全部"); + mIm_All2.setImageResource(R.drawable.all_video_big); + mIm_All1.setImageResource(R.drawable.video_all_big); +// mTv_Title.setTextColor(getResources().getColor( +// R.color.tab_text_nor)); +// typeUuid = ""; +// if (Tags == null || Tags.size() == 0) { +// mLv_Video.setMode(Mode.DISABLED); +// getDataResult(); +// } else { +// mLv_Video.setMode(Mode.BOTH); +// getVideoByKey(); +// } + + } else { +// page = 1; + mCheckedTitle = datatag.get(position).getName(); +// if (mCheckedTitle.length()>13){ +// mTv_Title.setText(mCheckedTitle.substring(0,12)+"..."); +// }else { +// mTv_Title.setText(mCheckedTitle); +// } + +// mIm_All2.setImageResource(R.drawable.select_video); +// mIm_All1.setImageResource(R.drawable.video_select); +// mTv_Title.setTextColor(getResources().getColor( +// R.color.tab_text_sel)); +// typeUuid = data.get(position - 1).getUuid(); +// mLv_Video.setMode(Mode.BOTH); +// getVideoByKey(); + + } + mAdapter3.notifyDataSetChanged(); +// mRl_List.setVisibility(View.GONE); + } + }); + mLv_title_tag.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + + + + page = 1; + if(mAdapter5.getCount()-1==datatag.get(0).getList().size()) + { + if (position == 0) { + mCheckedTitle1 = "全部视频"; + typeUuid=""; + + + } + else + { + mCheckedTitle1 = mAdapter5.getDataItem().get(position-1).getName(); + typeUuid = mAdapter5.getDataItem().get(position-1).getUuid(); + } + } + else + { + mCheckedTitle1 = mAdapter5.getDataItem().get(position).getName(); + typeUuid = mAdapter5.getDataItem().get(position).getUuid(); + } + + if (mCheckedTitle1.length()>13){ + mTv_Title.setText(mCheckedTitle1.substring(0,12)+"..."); + }else { + mTv_Title.setText(mCheckedTitle1); + } + + mIm_All2.setImageResource(R.drawable.select_video_big); + mIm_All1.setImageResource(R.drawable.video_select); + mTv_Title.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + + mLv_Video.setMode(Mode.BOTH); + getVideoByKey(); + + mAdapter5.notifyDataSetChanged(); + mLl_patient_video1.setVisibility(View.VISIBLE); + mRl_List.setVisibility(View.GONE); + } + }); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getTagList() { + Map param = new HashMap(); + param.put("type", "2"); + sendParamtoNet(Url.getTagList, param, GET_TAGS_DATAS_RESULT, mActivity, + true); + + } + + public void getVideoByKey() { + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } + + showProgressDialog("请稍候"); + Map param = new HashMap(); + param.put("page", page + ""); + param.put("keywords", keywords.toString()); + param.put("typeUuid", typeUuid); + param.put("sort", sort); + sendJsonPostParamtoNetSignMD5(Url.getVideoByKeyWordsNew, param, GET_DATAS_BY_KEY_RESULT, + mActivity); + } + + /** + * 获取列表数据 + */ + public static final int GET_VIDEO_DATAS_RESULT = 101; + public static final int GET_TAGS_DATAS_RESULT = 102; + public static final int GET_DATAS_BY_KEY_RESULT = 103; + public static final int GET_VIDEO_TAG_DATAS_RESULT = 104; + public static final int GET_READ_NUM_RESULT = 201; + public static final int GET_MORE_NUM_RESULT = 301; + public static final int GET_READ_NUM_RESULT2 = 401; + public static final int URL_PATH= 220; + + + public void getDataResult() { + Map param = new HashMap(); +// sendParamtoNet(Url.getVideo, param, GET_VIDEO_DATAS_RESULT, mActivity,true); + sendJsonPostParamtoNetSignMD5(Url.getVideoNew, param, GET_VIDEO_DATAS_RESULT, mActivity); + + } + public void getNewDataResult() { + Map param = new HashMap(); + + sendJsonPostParamtoNetSignMD5(Url.getVideoTagNew, param, GET_VIDEO_TAG_DATAS_RESULT, mActivity); + + } + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back: + finish(); + break; + case R.id.top_right: +// Intent intent3 = new Intent(ct, HistoryActivity.class); +// intent3.putExtra("title",top_title.getText()); +// startActivity(intent3); +// finish(); + Intent intent11 = new Intent(mActivity, BigPublicSearchActivity.class); + intent11.setType("video"); + startActivity(intent11); + break; + case R.id.bt_send_mind: + Intent intent1 = new Intent(mActivity, SendMindActivity.class); + startActivity(intent1); + break; + case R.id.bt_gandanxyb: + if (Constant.from==2){ + getUrl_path(); + }else { + Intent intent =new Intent(BigVideoActivity.this,NewsDetailActivity.class); + intent.putExtra("url",Constant.url_path); + intent.putExtra("title",Constant.zengshuName); + intent.putExtra("summary","肝胆相照®肝胆病在线公共服务平台"); + intent.putExtra("flag", 1); + intent.putExtra("need_back",true); + startActivity(intent); + } +// Intent intentgandanxyb = new Intent(mActivity, HeroListActivity.class); +// mActivity.startActivity(intentgandanxyb); + break; + // mRl_List, mRl_Gv; + case R.id.bt_screen: + if (mTagList == null) { + getTagList(); + } + if (mRl_Gv.getVisibility() == View.GONE) { + mRl_Gv.setVisibility(View.VISIBLE); + mLl_patient_video1.setVisibility(View.GONE); + if (mRl_List.getVisibility() == View.VISIBLE) { + mRl_List.setVisibility(View.GONE); +// mLl_patient_video1.setVisibility(View.VISIBLE); + } + } else { + mLl_patient_video1.setVisibility(View.VISIBLE); + mRl_Gv.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + break; + case R.id.ll_title: + if (mRl_List.getVisibility() == View.GONE) { + mRl_List.setVisibility(View.VISIBLE); + mLl_patient_video1.setVisibility(View.GONE); + if (mRl_Gv.getVisibility() == View.VISIBLE) { + mRl_Gv.setVisibility(View.GONE); + mLl_patient_video1.setVisibility(View.VISIBLE); + } + } else { + mRl_List.setVisibility(View.GONE); + mLl_patient_video1.setVisibility(View.VISIBLE); + } + break; + case R.id.ll_go_patient_video: + + Intent intent2 = new Intent(ct, BigPatientVideoActivity.class); + startActivity(intent2); + + break; + case R.id.ll_go_qualitycourse: + + Intent intentll_go_qualitycourse = new Intent(ct, QualityCourseActivity.class); + startActivity(intentll_go_qualitycourse); + + break; + case R.id.top_right_search: + Intent intent = new Intent(mActivity, BigPublicSearchActivity.class); + intent.setType("video"); + startActivity(intent); + break; + } + } + private void getUrl_path() { + Map map = new HashMap<>(); + LogUtil.i("url_path = "+Url.url_path+Constant.url_path); + sendJsonPostParamtoNetSignMD5(Url.url_path+Constant.url_path,map,URL_PATH,this); + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + mLv_Video.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public void loaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ll_loading.setVisibility(View.GONE); + mLv_Video.onRefreshComplete(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + switch (resultCode) { + case URL_PATH: + ZengshuBean zengshuBean = GsonTools.fromGsonToBean(resultJson, ZengshuBean.class); + showFuliZengshuDailog(zengshuBean); + break; + case GET_TAGS_DATAS_RESULT: + processTage(resultJson); + break; + case GET_VIDEO_DATAS_RESULT: + processData(resultJson); + break; + case GET_VIDEO_TAG_DATAS_RESULT: + processTagData(resultJson); + break; + case GET_DATAS_BY_KEY_RESULT: + processDatalist(resultJson); + break; + case VIDEOROLL: +// processRoll(resultJson); + default: + break; + } + } + private void showFuliZengshuDailog(ZengshuBean bean1) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_fulizengshu, null); + TextView tv_rennum = layout.findViewById(R.id.tv_rennum); + TextView tv_bennum = layout.findViewById(R.id.tv_bennum); + ImageView iv_fuli_close = layout.findViewById(R.id.iv_fuli_close); + Button btn_canyu = layout.findViewById(R.id.btn_canyu); + tv_rennum.setText(bean1.getData().getPatient_num()+""); + tv_bennum.setText(bean1.getData().getBook_num()+""); + final Dialog dialog = new AlertDialog.Builder( + this).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + iv_fuli_close.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_canyu.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(BigVideoActivity.this, MyQrCodeActivity.class); + startActivity(intent); + dialog.dismiss(); + } + }); + + } + private ArrayList titleList; + private ArrayList urlList; + private String newsuuid = ""; + private String agreenum = ""; + private String readnum = ""; + //添加轮播 + private void processRoll(String resultJson) { + LogUtil.d("VIDEOROLL = "+resultJson); + final VideoRollBean bean = GsonTools.fromGsonToBean(resultJson, VideoRollBean.class); + if (bean.getData() != null && bean.getData().size() > 0) { +// rl_topview.setVisibility(View.VISIBLE); + titleList = new ArrayList(); + urlList = new ArrayList(); + for (int i = 0; i < bean.getData().size(); i++) { + titleList.add(bean.getData().get(i).getName());// 标题 + if (!TextUtils.isEmpty(bean.getData().get(i).getImgpath())) { + urlList.add(Url.urlHtml + bean.getData().get(i).getImgpath());// //封面图片 + } else { + urlList.add("");// + } + } + // 轮播图的点 + initDot(bean.getData().size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + + + + String url = Url.urlHtml+ bean.getData().get(position).getPath(); + String title = bean.getData().get(position).getName(); + String summary = bean.getData().get(position).getName(); + String headImg = bean.getData().get(position).getImgpath(); + newsuuid = bean.getData().get(position).getUuid(); + agreenum = ""; + readnum = ""; + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", url); + intent.putExtra("uuid", newsuuid); + intent.putExtra("note", summary); + intent.putExtra("title", title); + intent.putExtra("readnum",readnum); + intent.putExtra("imgpath", headImg); + intent.putExtra("public_name",title); + mActivity.startActivityForResult(intent,mActivity.GET_READ_NUM_RESULT); + + + +// Intent intent = new Intent(mActivity,NewsDetailActivity.class); +// String url = Url.urlHtml+ bean.getData().get(position).getPath(); +// String title = bean.getData().get(position).getName(); +// String summary = bean.getData().get(position).getName(); +// String headImg = bean.getData().get(position).getImgpath(); +// newsuuid = bean.getData().get(position).getUuid(); +// agreenum = ""; +// readnum = ""; +// intent.putExtra("url", url); +// // intent.putExtra("title", title); +// intent.putExtra("newssuuuid", newsuuid); +// intent.putExtra("newssagreenum", agreenum); +// intent.putExtra("newssreadnum", readnum); +// intent.putExtra("title", "新闻详情"); +// intent.putExtra("newsTitle", title); +// intent.putExtra("summary", summary); +// intent.putExtra("imageUrl", Url.urlHtml +// + headImg); +// intent.putExtra("flag", 4); +// mActivity.startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // top标题 + mViewPager.setTitle(topNewsTitle, titleList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); +// mLv_Video.getRefreshableView().addHeaderView(topNewsView); + }else { +// rl_topview.setVisibility(View.GONE); + } + } + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + + } + private void processTagData(String result) + { + beantag= GsonTools.fromGsonToBean(result, VideoBeanNew.class); + datatag=beantag.data; + + for (int i = 0;i k=new ArrayList<>(); + for(int j=0;j=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + datatagname.get(j).setName(s); + } + } + } + for(int h :k) + { + datatagname.remove(h); + } + k.clear(); + + } + if (mAdapter3 == null) { + mAdapter3 = new TitleAdapter(datatag); + mLv_title.setAdapter(mAdapter3); + } + if (mAdapter5 == null) { + mAdapter5 = new TitleAdapter1(datatag.get(0).getList()); + mLv_title_tag.setAdapter(mAdapter5); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + LogUtil.i("视频列表result = "+result); + try { + bean = GsonTools.fromGsonToBean(result, VideoBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + } else { + mLoad_empty.setVisibility(View.VISIBLE); + // 完成刷新 + loaded(); + return; + } + + if (bean.data == null || bean.data.size() == 0) { + mLoad_empty.setVisibility(View.VISIBLE); + mLoad_empty.setText("暂无肝胆视频"); + return; + } else { + mLoad_empty.setVisibility(View.GONE); + // mList.addAll(bean.data.list); + } + mAdapter4 = null; + /**去除z-BMS专家端*/ + data = new ArrayList<>(); + data.addAll(bean.data); + List k=new ArrayList<>(); + for (int i = 0;i=4){ + substring = title.substring(0, 4);//取出来前4位 + }else if(title.length()>=3){ + substring = title.substring(0, 3);//取出来前3位 + }else if (title.length()>=2){ + substring = title.substring(0, 2);//取出来前2位 + } + if (substring.contains("-")){//含有- + String[] split = substring.split("-"); + if (split.length>1){ + s = split[split.length - 1] + title.substring(4, title.length()); + }else { + s = title.substring(4, title.length()); + } + data.get(i).setName(s); + } + } + } + for(int h :k) + { + data.remove(h); + } + k.clear(); + //显示全部默认最新视频 + getVideoByKey(); + + //取消更多显示 +// if (mAdapter == null) { +// mAdapter = new VideoAdapter(mActivity, data); +// mLv_Video.getRefreshableView().setAdapter(mAdapter); +// } else { +// mAdapter.getDatas(data); +// mAdapter.notifyDataSetChanged(); +// } + + loaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_READ_NUM_RESULT: + if (requestCode == GET_READ_NUM_RESULT) { + String uuid = data.getStringExtra("uuid"); + if(bean==null||bean.data==null) + return; + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < bean.data.size(); i++) { + for (int j = 0; j < bean.data.get(i).video.size(); j++) { + if (bean.data.get(i).video.get(j).getUuid().equals(uuid)) { + String Snum = bean.data.get(i).video.get(j).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + bean.data.get(i).video.get(j).setReadnum(Inum + ""); + if (mAdapter!=null){ + mAdapter.notifyDataSetChanged(); + } + + } + } + } + } + } else { + String uuid = data.getStringExtra("uuid"); + if (!StringUtil.isEmpty(uuid)) { + for (int i = 0; i < beanlists.size(); i++) { + if (beanlists.get(i).getUuid().equals(uuid)) { + String Snum = beanlists.get(i).getReadnum(); + int Inum = (Integer.parseInt(Snum) + 1); + beanlists.get(i).setReadnum(Inum + ""); + if (mAdapter4!=null){ + mAdapter4.notifyDataSetChanged(); + } + + + } + } + } + } + + break; + case GET_MORE_NUM_RESULT: + + getDataResult(); + break; + default: + break; + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (mTagList != null && mTagList.data.size() > 0) { + return mTagList.data.size(); + } + return 0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen_big); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + public class TitleAdapter1 extends BaseAdapter { + + private List titledata; + public TitleAdapter1(List data) { + this.titledata = data; + } + public void setDataList(List data) + { + this.titledata = data; + } + public List getDataItem() + { + return this.titledata; + } + @Override + public int getCount() { + // TODO Auto-generated method stub + if(titledata.size()==datatag.get(0).getList().size()) + return titledata.size()+1; + else + return titledata.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if(titledata.size()==datatag.get(0).getList().size()) + { + if(position==0) + return titledata.get(0); + else + return titledata.get(position-1); + } + else + { + return titledata.get(position); + } + + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(mActivity); + if(titledata.size()==datatag.get(0).getList().size()) + { + if (position == 0) { + tv_item.setText("全部视频"); + } else { + tv_item.setText(titledata.get(position-1).getName()); + } + if (mCheckedTitle1 != null&&("全部视频".equals(mCheckedTitle1))&& position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + tv_item.setBackgroundColor(Color.WHITE); + } else + { + if (mCheckedTitle1 != null&& position != 0&& mCheckedTitle1.equals(titledata.get(position-1) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + } + else + { + tv_item.setText(titledata.get(position).getName()); + if (mCheckedTitle1 != null&& mCheckedTitle1.equals(titledata.get(position) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + } + + tv_item.setTextSize(18); + tv_item.setPadding(10, dip2px(mActivity, 10), 10, + dip2px(mActivity, 10)); + return tv_item; + } + + } + public class TitleAdapter extends BaseAdapter { + + private List titledata; + public TitleAdapter(List data) { + this.titledata = data; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return titledata.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + if (position == 0) { + return "全部"; + } + return titledata.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + TextView tv_item = new TextView(mActivity); + tv_item.setGravity(Gravity.CENTER); + if (position == 0) { + tv_item.setText("全部"); + } else { + tv_item.setText(titledata.get(position).getName()); + } + if (("全部".equals(mCheckedTitle))&& position == 0) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + tv_item.setBackgroundColor(Color.WHITE); + } else { + + if (mCheckedTitle != null&& mCheckedTitle.equals(titledata.get(position) + .getName())) { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + tv_item.setBackgroundColor(Color.WHITE); + } else { + tv_item.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + + + } + tv_item.setTextSize(18); + tv_item.setPadding(10, dip2px(mActivity, 10), 10, + dip2px(mActivity, 10)); + return tv_item; + } + + } + + private List beanlists = new ArrayList(); + + private void processDatalist(String result) { + + VideoMoreBean bean = GsonTools.fromGsonToBean(result, + VideoMoreBean.class); + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + if (bean == null || bean.data == null || bean.data.list.size() == 0) { + // mLv_Video.setEmptyView(mLoad_empty); + mLoad_empty.setVisibility(View.VISIBLE); + mAdapter = null; + mLv_Video.setAdapter(null); + loaded(); + // setLastUpdateTime(); + return; + + } else { + mLoad_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.list); + if (mAdapter4 != null) { + mLv_Video.setAdapter(mAdapter4); + } + } + } else { + // 加载更多下一页时候e + if (bean != null || bean.data != null) { + beanlists.addAll(bean.data.list); + } else { + ToastUtil.showMessage("没有更多数据了"); + } + + } + mAdapter = null; + // 更新 + if (mAdapter4 == null) { + mAdapter4 = new BigVideoSAdapter(beanlists, mActivity); + mLv_Video.getRefreshableView().setAdapter(mAdapter4); + } else { + mAdapter4.getDatas(beanlists); + mAdapter4.notifyDataSetChanged(); + } + // 完成刷新 + loaded(); + // 得到总页码数 + + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + mLv_Video.setMode(Mode.PULL_FROM_START); + + } else { + mLv_Video.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + closeProgressDialog(); + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BiggNewPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BiggNewPatientActivity.java new file mode 100644 index 0000000..7fb7cf1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/BiggNewPatientActivity.java @@ -0,0 +1,1139 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.widget.NestedScrollView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.big.bean.OldPatientBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.bagder.Badger; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.saveUnreadFollow; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.unreadFollow; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.Constant.general; +import static cn.shangyu.gdxzExpert.utils.Url.relationRecordLately; +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; + + +/** + * + * MainActivity.java + * + * @author ssy Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:新的患者申请列表页面 + */ + +public class BiggNewPatientActivity extends BaseActivity implements OnItemClickListener,OnCallBackFromNet { + + // listview控件 + private ListView ptrLv,ptrLv2; + // 处理正在加载,空,错误的布局 + private TextView load_empty; + private ArrayList PatientList = new ArrayList(); + private String applyListUrl = Url.getapplyList; + private NewPatientAdapter patientAdapter; + private long count = 0; + public static int ERROR = 101; + public static int REQUEST_REFRESH = 102; + public static final int GETAPPLYLISTOPERATE = 200; + private String status; + private int position; + private String nickname; + private int page = 1; + private PullToRefreshListView ptrLv1;//30天内申请 + private TextView text1,text; + SmartRefreshLayout refreshLayout; + NestedScrollView scroll; + LinearLayout classicsFooter,Footer; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("新的患者"); + top_title.setTextSize(23); + } + + @Override + public View onCreateSuccessedView() { + + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_new_patient_big_new, null); + refreshLayout=view.findViewById(R.id.refreshLayout); +// refreshHeaderWrapper=view.findViewById(R.id.fresh_header); + classicsFooter=view.findViewById(R.id.r_head); + scroll= view.findViewById(R.id.scroll); + Footer=view.findViewById(R.id.r_foot); + ptrLv = (ListView) view.findViewById(R.id.lv_item_new_patient); + ptrLv2=view.findViewById(R.id.lv_patient1); + text1=view.findViewById(R.id.text1); + text=view.findViewById(R.id.text); + ptrLv1 = (PullToRefreshListView) view.findViewById(R.id.lv_patient); + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + TextView tv_add_patient = view.findViewById(R.id.tv_add_patient); + tv_add_patient.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(BiggNewPatientActivity.this,MyQrCodeActivity.class); + startActivity(intent); + } + }); + if(!StringUtil.isEmpty(getIntent().getStringExtra("message_id"))) + { + readMessage(getIntent().getStringExtra("message_id")); + } + onLoaded1(); + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv2.setOnItemClickListener(this); + // 得到实际的ListView 设置点击 +// ptrLv1.getRefreshableView().setOnItemClickListener(this); + ptrLv1.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getOldPatient(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getOldPatient(page+""); + } + }); + ptrLv1.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + if("2".equals(tempList.get(i-1).getStatus())) + { + Intent intent = new Intent(BiggNewPatientActivity.this, BigPatientActivity.class); + intent.putExtra("realName", tempList.get(i-1).getPatient_name()); + intent.putExtra("patientUuid", tempList.get(i-1).getPatient_uuid()); + intent.putExtra("photo", tempList.get(i-1).getPatient_photo()); + intent.putExtra("type", Constant.typePatient); + //启动患者详情界面 + startActivity(intent); + } + + } + }); + initData(); + if(unreadFollow>0) + { + unreadFollow=0; + refreshMessages(); + saveUnreadFollow(); + } + return view; + } + public void refreshMessages() + { + int unreadNum = NIMClient.getService(MsgService.class).getTotalUnreadCount(); + Badger.updateBadgerCount(unreadNum); + } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); +// ECNotificationManager.getInstance().forceCancelNotification(); + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(this,null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(this,null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew ); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + page++; + tweenAnimLoadingLayout.refreshing(); + getOldPatient(page+""); + +// refreshLayout.finishLoadMore(2000); + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + page=1; + tweenAnimLoadingLayoutNew.refreshing(); + getOldPatient(page+""); +// refreshLayout.finishRefresh(2000); + } + + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + }); + + // 从sp里取出上一次存的列表数据 +// String result = SharePrefUtil.getString(ct, applyListUrl, null); +// LogUtil.i("result = "+result); + count = SharePrefUtil.getLong(ct, "new_patient_count", 0); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { +// // 显示加载框 +// showLoadingProgress(); +// } +// // 网络是否可用 +// if (!CommonUtil.isNetworkAvailable()) { +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// return; +// } + getNewPatientList(applyListUrl); + + } + private void getOldPatient(String page) + { +// showProgressDialog("请求中..."); + Map param = new HashMap(); + param.put("page", page); + sendJsonPostParamtoNetSignMD5(relationRecordLately, param, 104, this); + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + "uuid", ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + LogUtil.i("info.result = "+info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded() { + // 隐藏加载进度框 +// dismissLoadingProgress(); + ptrLv1.onRefreshComplete(); + } + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded1() { + // 隐藏加载进度框 + dismissLoadingProgress(); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + + // 解析json数据 + PatientListBean bean = GsonTools.fromGsonToBean(result,PatientListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); +// ptrLv.setEmptyView(load_empty); + return; + } + // 初始化列表数据 + PatientList.clear(); + count = 0; + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { +// ptrLv.setEmptyView(load_empty); + text.setVisibility(View.GONE); + } else { + load_empty.setVisibility(View.GONE); + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + PatientList.add(bean.data.get(i)); + count++; + } + } + // 如果待审核也没有显示空布局 + if (PatientList.size() <= 0) { + text.setVisibility(View.GONE); + } + else + { + load_empty.setVisibility(View.GONE); + text.setVisibility(View.VISIBLE); + } + } + // 实例化适配器 + patientAdapter = new NewPatientAdapter(BiggNewPatientActivity.this, + PatientList); + ptrLv.setAdapter(patientAdapter); + fixListViewHeight(ptrLv); + SharePrefUtil.saveLong(ct, "new_patient_count", count); + // 完成 + + getOldPatient(page+""); + } + //ListAdapter listAdapter = mCateListView.getAdapter(); + //int totalHeight = 0; + //int count = listAdapter.getCount(); + + + private void fixListViewHeight(ListView listView) + { + + int totalHeight = 0; + // 如果没有设置数据适配器,则 ListView 没有子项,返回 + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) + return; + int listViewWidth = this.getWindowManager().getDefaultDisplay().getWidth(); + int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth, View.MeasureSpec.AT_MOST); + for (int i = 0, len = listAdapter.getCount(); i < len; i++) { + View listItem = listAdapter.getView(i, null, listView); + listItem.measure(widthSpec, 0); // 计算子项View 的宽高 + int list_child_item_height = listItem.getMeasuredHeight()+listView.getDividerHeight(); + + totalHeight += list_child_item_height; // 统计所有子项的总高度 + } +// for (int index = 0,len = listAdapter.getCount(); index < len; index++ ) +// { +// View listViewItem = listAdapter.getView(index,null,listView); +// // 计算子项 View 的宽高 +// listViewItem.measure(0, 0); +// // 计算所有子项的高度和 +// totalHeight += listViewItem.getMeasuredHeight(); +// } + + ViewGroup.LayoutParams params = listView.getLayoutParams(); + //listView.getDividerHeight () 获取子项间分隔符的高度 + //params.height 设置 ListView 完全显示需要的高度 +// params.height = totalHeight + (listView.getDividerHeight()*(listAdapter.getCount()-1)); + params.height =totalHeight; + listView.setLayoutParams(params); + } + private OldPatientAdapter mAdapter; + private OldPatientBean oldPatientBean; + private List mList=new ArrayList<>(); + private List tempList = new ArrayList<>(); + public void shuaixuanList(List lists) + { + tempList.clear(); + for (OldPatientBean.ListBean bean:lists) + { + if("2".equals(bean.getStatus())||"3".equals(bean.getStatus())||"4".equals(bean.getStatus())) + { + tempList.add(bean); + } + } + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case 104: + refreshLayout.finishRefresh(); + refreshLayout.finishLoadMore(); + oldPatientBean=GsonTools.fromGsonToBean(resultJson, OldPatientBean.class); + if (oldPatientBean == null) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 +// onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) { + // 显示空布局 + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 +// onLoaded(); + text1.setVisibility(View.GONE); + return; + } else { + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + } + } else { + + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + ; + } + if(mList.size()<1) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + } + else + { + load_empty.setVisibility(View.GONE); + text1.setVisibility(View.VISIBLE); + } + + if (mAdapter == null) { + mAdapter = new OldPatientAdapter(this, (ArrayList) mList); + ptrLv2.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 +// onLoaded(); + + if (page > 1) { + // 是否有更多 + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); +// ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + refreshLayout.setEnableLoadMore(false); + if (page > 1) + page--; + } else { + refreshLayout.setEnableLoadMore(true); +// ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + + // 得到总页码数 + int totalPage = oldPatientBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { +// ToastUtil.showMessage("没有更多了"); + refreshLayout.setEnableLoadMore(false); +// ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { +// ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + refreshLayout.setEnableLoadMore(true); + } + } else { +// ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + refreshLayout.setEnableLoadMore(true); + } + + // 设置刷新的时间 +// setLastUpdateTime(); + fixListViewHeight(ptrLv); + fixListViewHeight(ptrLv2); + break; + case 103: + +// closeProgressDialog(); + oldPatientBean=GsonTools.fromGsonToBean(resultJson, OldPatientBean.class); + if (oldPatientBean == null) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) { + // 显示空布局 + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 + onLoaded(); + text1.setVisibility(View.GONE); + return; + } else { + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + } + } else { + + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); +; + } + if(mList.size()<1) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + } + else + { + load_empty.setVisibility(View.GONE); + text1.setVisibility(View.VISIBLE); + } + + if (mAdapter == null) { + mAdapter = new OldPatientAdapter(this, (ArrayList) mList); + ptrLv1.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = oldPatientBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + fixListViewHeight(ptrLv); + break; + case GETAPPLYLISTOPERATE: + page=1; + getOldPatient(page+""); + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (("1").equals(retcode)) { + + // 插入该患者 + String patientUuid = PatientList.get(position).patientUuid; + String realName = PatientList.get(position).realName; + String photo = PatientList.get(position).photo; + String mobile = PatientList.get(position).mobile; + int sex = PatientList.get(position).sex; + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + patientUuid); + patientModel.setPhoto(photo); + patientModel.setMobile(mobile); + patientModel.setRealName(realName); + patientModel.setSex(sex); + patientModel.setType(Constant.typePatient); + PatientSqlManager.insertPatient(patientModel, + Constant.typePatient); + + ToastUtil.showToast("操作成功"); + PatientList.remove(position); + patientAdapter.notifyDataSetChanged(); + BiggNewPatientActivity.this + .setResult(REQUEST_REFRESH); + if (PatientList.isEmpty()) { +// ptrLv.setEmptyView(load_empty); + text.setVisibility(View.GONE); + } + count--; + SharePrefUtil.saveLong(ct, "new_patient_count", + count); + // CCPAppManager.startChattingAction(ct, + // Constant.Patient_AppKey + patientUuid, + // realName, "2,1,2,0", patientUuid, 6); + if (status != null && status.equals("2")) { + handleSendTextMessage(Constant.Patient_AppKey + + patientUuid); + Intent intent10 = new Intent(BiggNewPatientActivity.this, + SetInformActivity.class); + intent10.putExtra("nickname_new",nickname); + intent10.putExtra("patientUuid",patientUuid); +// intent10.putExtra("nickname",nickname); + startActivity(intent10); + } + if (!nickname.equals(realName)){ +// updatename( Url.getupdateNickname,patientUuid,SharePrefUtil.getString(ct, "uuid", ""), nickname,""); + } + + } else { + ToastUtil.showToast(message); + } + SharePrefUtil.saveString(ct, Url.getapplyListOperate, ""); + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + } + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv1.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public class NewPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + private String applyListOperate = Url.getapplyListOperate; +// private ImageLoader imageLoader; +// private RequestQueue queue; + public NewPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList = patientList; +// queue = Volley.newRequestQueue(context); +// imageLoader = new ImageLoader(queue, new BitmapCache()); + } + + @Override + public int getCount() { + + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list_big, null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = convertView + .findViewById(R.id.iv_patient_image); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_patient_date); + mHolder.tvInfo = (TextView) convertView + .findViewById(R.id.tv_patient_info); + mHolder.btOk = (Button) convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_new_patient_cancle); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + + mHolder.tvInfo.setText(p.content); + mHolder.tvDate.setText(p.createDate); + +// mHolder.ivImage.setTag(p.photo+""); +// if(mHolder.ivImage.getTag().equals(p.photo+"")) +// { +//// mHolder.ivImage.setDefaultImageResId(R.drawable.icon_touxiang_persion_gray_big); +//// mHolder.ivImage.setErrorImageResId(R.drawable.icon_touxiang_persion_gray_big); +// mHolder.ivImage.setImageUrl(Url.urlHtml + p.photo, imageLoader); +// } +// +// 通过 tag 来防止图片错位 +// if (mHolder.ivImage.getTag() != null && mHolder.ivImage.getTag().equals(p.photo)) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + p.photo, +// mHolder.ivImage, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + else + { + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + // 待审核 + + mHolder.btOk.setVisibility(View.VISIBLE); + mHolder.btCancle.setVisibility(View.VISIBLE); + + // 同意事件 + mHolder.btOk.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("ok-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String content=p1.content.replaceAll(",",","); + String[] split = content.split(","); + String[] split1 = split[0].split("我是"); + String nickname =split1[1]; +// String nickname = split1[split1.length]; + String format = format(nickname); + getNewPatient(applyListOperate, uuid, "2", position,format); + } + }); + // 拒绝事件 + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("cancle-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String[] split = p1.content.split(",在"); + String[] split1 = split[0].split("我是"); + String nickname = split1[split1.length-1]; + LogUtil.i("nickname = "+nickname); + String format = format(nickname); + LogUtil.i("format = "+format); + getNewPatient(applyListOperate, uuid, "3", position,format); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + public class OldPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + + + public OldPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList=patientList; + + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list_big1, null); + mHolder1 = new OldViewHolder(); + mHolder1.ivImage = convertView + .findViewById(R.id.iv_patient_image); + mHolder1.tvDate = convertView + .findViewById(R.id.tv_patient_date); + mHolder1.tvInfo = convertView + .findViewById(R.id.tv_patient_info); + mHolder1.btOk = convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder1.btCancle = convertView + .findViewById(R.id.bt_new_patient_cancle); + mHolder1.nickname=convertView.findViewById(R.id.nickname); + convertView.setTag(mHolder1); + } else { + mHolder1 = (OldViewHolder) convertView.getTag(); + } + + // 给控件赋值. + OldPatientBean.ListBean p = PatientList.get(position); +// if(StringUtil.isEmpty(p.getNickname())) +// { +// mHolder1.tvInfo.setMaxLines(2); +// mHolder1.nickname.setVisibility(View.GONE); +// } +// else +// { +// mHolder1.tvInfo.setMaxLines(1); +// mHolder1.nickname.setVisibility(View.VISIBLE); +// mHolder1.nickname.setText("备注名:"+p.getNickname()); +// } + mHolder1.tvInfo.setMaxLines(1); + mHolder1.nickname.setVisibility(View.VISIBLE); + mHolder1.nickname.setText("昵称:"+p.getPatient_name()); + mHolder1.tvInfo.setText(p.getContent()); + + mHolder1.tvDate.setText(p.getCreate_date()); + if (!TextUtils.isEmpty(p.getPatient_photo()) && !"null".equals(p.getPatient_photo())) { + RequestOptions requestOptions = new RequestOptions().error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(context).asBitmap().load(Url.urlHtml + p.getPatient_photo()).apply(requestOptions) + .into(mHolder1.ivImage); +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + p.getPatient_photo(), +// mHolder1.ivImage, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + else + { + mHolder1.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + // 待审核 + switch (p.getStatus()) + { + case "2": + + mHolder1.btOk.setText("已同意"); + mHolder1.btCancle.setVisibility(View.VISIBLE); + break; + case "3": + + mHolder1.btOk.setText("已拒绝"); + mHolder1.btCancle.setVisibility(View.GONE); + break; + case "4": + + mHolder1.btOk.setText("已过期"); + mHolder1.btCancle.setVisibility(View.GONE); + break; + } + + + + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private NewsViewHolder mHolder = null; + private OldViewHolder mHolder1 = null; + private class NewsViewHolder { + + public Button btCancle; + public Button btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + } + private class OldViewHolder { + + public ImageView btCancle; + public TextView btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + public TextView nickname; + } + public static String format(String s){ + String str=s.replaceAll("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……& ;*()——+|{}【】‘;:”“’。,、?|-]", ""); + return str; +} + + /** + * 同意或拒绝操作 getNewPatient + * + * @param loadUrl + * @param uuid + * @param status + * @param position + * void + */ + private void getNewPatient(final String loadUrl, String uuid, + final String status, final int position, final String nickname) { + showProgressDialog("请求中..."); + + this.status = status; + this.position = position; + this.nickname = nickname; + Map map = new HashMap<>(); + map.put("uuid",uuid); + map.put("status",status); + sendParamtoNet(loadUrl,map,GETAPPLYLISTOPERATE,this,false); + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if("2".equals(mList.get(position).getStatus())) + { + Intent intent = new Intent(BiggNewPatientActivity.this, BigPatientActivity.class); + intent.putExtra("realName", mList.get(position).getPatient_name()); + intent.putExtra("patientUuid", mList.get(position).getPatient_uuid()); + intent.putExtra("photo", mList.get(position).getPatient_photo()); + intent.putExtra("type", Constant.typePatient); + //启动患者详情界面 + startActivity(intent); + } +// if (ptrLv.getHeaderViewsCount() > 0) { +// position = position - 1; +// } + + } + private void updatename(final String loadUrl, final String patientUuid, String expertUuid, String NickName, String NoteContent) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("patientUuid",patientUuid);//患者uuid + params.addBodyParameter("expertUuid",expertUuid);//专家uuid + params.addBodyParameter("nickname",NickName);//别名 + params.addBodyParameter("note",NoteContent);//备注内容 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid,info.result); + LogUtil.i(info.result); +// getproseData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); +// ToastUtil.showMsgCustomToast("加载失败"); + } + }); + + } + /** + * 处理文本发送方法事件通知 + * + * @param + */ + private void handleSendTextMessage(String patientuuid) { + IMMessage imMessage = MessageBuilder.createTextMessage(patientuuid.split("#")[1].toLowerCase(), P2P, "你好,我已经是你的随访医生了"); + MessageFragment.ext.clear(); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_NICKNAME, UserInfoHelper.getUserName(patientuuid)); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_TYPE,general); + imMessage.setRemoteExtension(MessageFragment.ext); + NIMClient.getService(MsgService.class).sendMessage(imMessage,false); +// // 组建一个待发送的ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT); +// // 设置消息接收者 +// msg.setTo(patientuuid); +// // 创建一个文本消息体,并添加到消息对象中 +// ECTextMessageBody msgBody = new ECTextMessageBody("你好,我已经是你的随访医生了"); +// msg.setBody(msgBody); +// msg.setUserData("2,1,2,0"); +// try { +// // 发送消息,该函数见上 +// long rowId = -1; +// rowId = IMChattingHelper.sendECMessage(msg); +// // 通知列表刷新 +// msg.setId(rowId); +// // notifyIMessageListView(msg); +// } catch (Exception e) { +// e.printStackTrace(); +// } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/NormNewPatientActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/NormNewPatientActivity.java new file mode 100644 index 0000000..e39e4b4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/NormNewPatientActivity.java @@ -0,0 +1,1156 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.saveUnreadFollow; +import static cn.shangyu.gdxzExpert.netease.bagder.Badger.unreadFollow; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.Constant.general; +import static cn.shangyu.gdxzExpert.utils.Url.relationRecordLately; + +import android.content.Context; +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.widget.NestedScrollView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.big.bean.OldPatientBean; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.bagder.Badger; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +/** + * + * MainActivity.java + * + * @author ssy Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:新的患者申请列表页面 + */ + +public class NormNewPatientActivity extends BaseActivity implements OnItemClickListener,OnCallBackFromNet { + + // listview控件 + private ListView ptrLv,ptrLv2; + // 处理正在加载,空,错误的布局 + private TextView load_empty; + private ArrayList PatientList = new ArrayList(); + private String applyListUrl = Url.getapplyList; + private NewPatientAdapter patientAdapter; + private long count = 0; + public static int ERROR = 101; + public static int REQUEST_REFRESH = 102; + public static final int GETAPPLYLISTOPERATE = 200; + private String status; + private int position; + private String nickname; + private int page = 1; + private PullToRefreshListView ptrLv1;//30天内申请 + private TextView text1,text; + SmartRefreshLayout refreshLayout; + NestedScrollView scroll; + LinearLayout classicsFooter,Footer; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("新的患者"); + + } + + + @Override + public View onCreateSuccessedView() { + + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = View.inflate(ct, R.layout.activity_new_patient_norm_new, null); + ptrLv = (ListView) view.findViewById(R.id.lv_item_new_patient); + text1=view.findViewById(R.id.text1); + text=view.findViewById(R.id.text); + ptrLv1 = (PullToRefreshListView) view.findViewById(R.id.lv_patient); + refreshLayout=view.findViewById(R.id.refreshLayout); +// refreshHeaderWrapper=view.findViewById(R.id.fresh_header); + classicsFooter=view.findViewById(R.id.r_head); + scroll= view.findViewById(R.id.scroll); + Footer=view.findViewById(R.id.r_foot); + ptrLv2=view.findViewById(R.id.lv_patient1); + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + TextView tv_add_patient = view.findViewById(R.id.tv_add_patient); + tv_add_patient.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(NormNewPatientActivity.this,MyQrCodeActivity.class); + startActivity(intent); + } + }); + if(!StringUtil.isEmpty(getIntent().getStringExtra("message_id"))) + { + readMessage(getIntent().getStringExtra("message_id")); + } + onLoaded1(); + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv2.setOnItemClickListener(this); + ptrLv1.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getOldPatient(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getOldPatient(page+""); + } + }); + ptrLv1.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + if("2".equals(mList.get(i-1).getStatus())) + { + Intent intent = new Intent(NormNewPatientActivity.this, BigPatientActivity.class); + intent.putExtra("realName", mList.get(i-1).getPatient_name()); + intent.putExtra("patientUuid", mList.get(i-1).getPatient_uuid()); + intent.putExtra("photo", mList.get(i-1).getPatient_photo()); + intent.putExtra("type", Constant.typePatient); + //启动患者详情界面 + startActivity(intent); + } + + } + }); + initData(); + if(unreadFollow>0) + { + unreadFollow=0; + refreshMessages(); + saveUnreadFollow(); + } + return view; + } + public void refreshMessages() + { + int unreadNum = NIMClient.getService(MsgService.class).getTotalUnreadCount(); + Badger.updateBadgerCount(unreadNum); + } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void onResume() { + // TODO Auto-generated method stub + super.onResume(); + needreportPage("新的患者"); +// ECNotificationManager.getInstance().forceCancelNotification(); + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(this,null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(this,null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew ); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + page++; + tweenAnimLoadingLayout.refreshing(); + getOldPatient(page+""); + +// refreshLayout.finishLoadMore(2000); + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + page=1; + tweenAnimLoadingLayoutNew.refreshing(); + getOldPatient(page+""); +// refreshLayout.finishRefresh(2000); + } + + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + }); + // 从sp里取出上一次存的列表数据 +// String result = SharePrefUtil.getString(ct, applyListUrl, null); +// LogUtil.i("result = "+result); + count = SharePrefUtil.getLong(ct, "new_patient_count", 0); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { +// // 显示加载框 +// showLoadingProgress(); +// } +// // 网络是否可用 +// if (!CommonUtil.isNetworkAvailable()) { +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// return; +// } + getNewPatientList(applyListUrl); +// getOldPatient(page+""); + } + private void getOldPatient(String page) + { +// showProgressDialog("请求中..."); + Map param = new HashMap(); + param.put("page", page); + sendJsonPostParamtoNetSignMD5(relationRecordLately, param, 104, this); +// sendJsonPostParamtoNetSignMD5(relationRecordLately, param, 103, this); + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), + "uuid", ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, loadUrl, info.result); + LogUtil.i("info.result = "+info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded() { + // 隐藏加载进度框 +// dismissLoadingProgress(); + ptrLv1.onRefreshComplete(); + } + /** + * 刷新完毕的处理 onLoaded + * + * void + */ + private void onLoaded1() { + // 隐藏加载进度框 + dismissLoadingProgress(); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + LogUtil.i("result = "+result); + // 解析json数据 + PatientListBean bean = GsonTools.fromGsonToBean(result,PatientListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); +// load_empty.setVisibility(View.VISIBLE); +// ptrLv.setEmptyView(load_empty); + return; + } + // 初始化列表数据 + PatientList.clear(); + count = 0; + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { +// load_empty.setVisibility(View.VISIBLE); +// ptrLv.setEmptyView(load_empty); + text.setVisibility(View.GONE); + } else { + load_empty.setVisibility(View.GONE); + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + PatientList.add(bean.data.get(i)); + count++; + } + } + // 如果待审核也没有显示空布局 + if (PatientList.size() <= 0) { +// load_empty.setVisibility(View.VISIBLE); + text.setVisibility(View.GONE); + } + else + { + load_empty.setVisibility(View.GONE); + text.setVisibility(View.VISIBLE); + } + } + // 实例化适配器 + patientAdapter = new NewPatientAdapter(NormNewPatientActivity.this, + PatientList); + ptrLv.setAdapter(patientAdapter); + fixListViewHeight(ptrLv); + SharePrefUtil.saveLong(ct, "new_patient_count", count); + // 完成 + onLoaded(); + getOldPatient(page+""); + } + private OldPatientAdapter mAdapter; + private OldPatientBean oldPatientBean; + private List mList=new ArrayList<>(); + private List tempList = new ArrayList<>(); + public void shuaixuanList(List lists) + { + tempList.clear(); + for (OldPatientBean.ListBean bean:lists) + { + if("2".equals(bean.getStatus())||"3".equals(bean.getStatus())||"4".equals(bean.getStatus())) + { + tempList.add(bean); + } + } + } + private void fixListViewHeight(ListView listView) + { + + int totalHeight = 0; + // 如果没有设置数据适配器,则 ListView 没有子项,返回 + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) + return; + int listViewWidth = this.getWindowManager().getDefaultDisplay().getWidth(); + int widthSpec = View.MeasureSpec.makeMeasureSpec(listViewWidth, View.MeasureSpec.AT_MOST); + for (int i = 0, len = listAdapter.getCount(); i < len; i++) { + View listItem = listAdapter.getView(i, null, listView); + listItem.measure(widthSpec, 0); // 计算子项View 的宽高 + int list_child_item_height = listItem.getMeasuredHeight()+listView.getDividerHeight(); + + totalHeight += list_child_item_height; // 统计所有子项的总高度 + } +// for (int index = 0,len = listAdapter.getCount(); index < len; index++ ) +// { +// View listViewItem = listAdapter.getView(index,null,listView); +// // 计算子项 View 的宽高 +// listViewItem.measure(0, 0); +// // 计算所有子项的高度和 +// totalHeight += listViewItem.getMeasuredHeight(); +// } + + ViewGroup.LayoutParams params = listView.getLayoutParams(); + //listView.getDividerHeight () 获取子项间分隔符的高度 + //params.height 设置 ListView 完全显示需要的高度 +// params.height = totalHeight + (listView.getDividerHeight()*(listAdapter.getCount()-1)); + params.height =totalHeight; + listView.setLayoutParams(params); + } + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case 104: + refreshLayout.finishRefresh(); + refreshLayout.finishLoadMore(); + oldPatientBean=GsonTools.fromGsonToBean(resultJson, OldPatientBean.class); + if (oldPatientBean == null) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 +// onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) { + // 显示空布局 + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + // 完成刷新 +// onLoaded(); + text1.setVisibility(View.GONE); + return; + } else { + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + } + } else { + + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + ; + } + if(mList.size()<1) + { + text1.setVisibility(View.GONE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + + } + else + { + load_empty.setVisibility(View.GONE); + text1.setVisibility(View.VISIBLE); + } + + if (mAdapter == null) { + mAdapter = new OldPatientAdapter(this, (ArrayList) mList); + ptrLv2.setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 +// onLoaded(); + + if (page > 1) { + // 是否有更多 + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); +// ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + refreshLayout.setEnableLoadMore(false); + if (page > 1) + page--; + } else { + refreshLayout.setEnableLoadMore(true); +// ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + + // 得到总页码数 + int totalPage = oldPatientBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { +// ToastUtil.showMessage("没有更多了"); + refreshLayout.setEnableLoadMore(false); +// ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { +// ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + refreshLayout.setEnableLoadMore(true); + } + } else { +// ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + refreshLayout.setEnableLoadMore(true); + } + + // 设置刷新的时间 +// setLastUpdateTime(); + fixListViewHeight(ptrLv); + fixListViewHeight(ptrLv2); + break; + case 103: +// closeProgressDialog(); + oldPatientBean=GsonTools.fromGsonToBean(resultJson, OldPatientBean.class); + if (oldPatientBean == null) + { + text1.setVisibility(View.GONE); +// load_empty.setVisibility(View.VISIBLE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) { + // 显示空布局 +// load_empty.setVisibility(View.VISIBLE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + // 完成刷新 + onLoaded(); + text1.setVisibility(View.GONE); + return; + } else { + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); + } + } else { + + shuaixuanList(oldPatientBean.getData().getList()); + mList.addAll(tempList); +; + } + if(mList.size()<1) + { + text1.setVisibility(View.GONE); +// load_empty.setVisibility(View.VISIBLE); + if(PatientList.size()<1) + { + load_empty.setVisibility(View.VISIBLE); + } + } + else + { + load_empty.setVisibility(View.GONE); + text1.setVisibility(View.VISIBLE); + } + + if (mAdapter == null) { + mAdapter = new OldPatientAdapter(this, (ArrayList) mList); + ptrLv1.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (oldPatientBean.getData() == null || oldPatientBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = oldPatientBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv1.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv1.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + fixListViewHeight(ptrLv); + break; + case GETAPPLYLISTOPERATE: + page=1; + getOldPatient(page+""); + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(resultJson); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (("1").equals(retcode)) { + + // 插入该患者 + String patientUuid = PatientList.get(position).patientUuid; + String realName = PatientList.get(position).realName; + String photo = PatientList.get(position).photo; + String mobile = PatientList.get(position).mobile; + int sex = PatientList.get(position).sex; + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + patientUuid); + patientModel.setPhoto(photo); + patientModel.setMobile(mobile); + patientModel.setRealName(realName); + patientModel.setSex(sex); + patientModel.setType(Constant.typePatient); + PatientSqlManager.insertPatient(patientModel, + Constant.typePatient); + + ToastUtil.showToast("操作成功"); + PatientList.remove(position); + patientAdapter.notifyDataSetChanged(); + NormNewPatientActivity.this + .setResult(REQUEST_REFRESH); + if (PatientList.isEmpty()) { +// ptrLv.setEmptyView(load_empty); + text.setVisibility(View.GONE); + } + count--; + SharePrefUtil.saveLong(ct, "new_patient_count", + count); + // CCPAppManager.startChattingAction(ct, + // Constant.Patient_AppKey + patientUuid, + // realName, "2,1,2,0", patientUuid, 6); + if (status != null && status.equals("2")) { + handleSendTextMessage(Constant.Patient_AppKey + + patientUuid,realName); + Intent intent10 = new Intent(NormNewPatientActivity.this, + SetInformActivity.class); + intent10.putExtra("nickname_new",nickname); + intent10.putExtra("patientUuid",patientUuid); + startActivity(intent10); + } + if (!nickname.equals(realName)){ +// updatename( Url.getupdateNickname,patientUuid,SharePrefUtil.getString(ct, "uuid", ""), nickname,""); + } + + } else { + ToastUtil.showToast(message); + } + SharePrefUtil.saveString(ct, Url.getapplyListOperate, ""); + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + } + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv1.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + public class NewPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + private String applyListOperate = Url.getapplyListOperate; + + public NewPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList = patientList; + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list_nom, null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_patient_image); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_patient_date); + mHolder.tvInfo = (TextView) convertView + .findViewById(R.id.tv_patient_info); + mHolder.btOk = (Button) convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_new_patient_cancle); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + PatientData p = PatientList.get(position); + + mHolder.tvInfo.setText(p.content); + + mHolder.tvDate.setText(p.createDate); + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.photo, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + else + { + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + // 待审核 + + mHolder.btOk.setVisibility(View.VISIBLE); + mHolder.btCancle.setVisibility(View.VISIBLE); + + // 同意事件 + mHolder.btOk.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + if(p1.content==null) + { + ToastUtil.showToast("content is null"); + return; + } + String content=p1.content.replaceAll(",",","); + if(content==null) + { + ToastUtil.showToast("content1 is null"); + return; + } + String[] split = content.split(","); + if(split==null||split.length==0) + { + ToastUtil.showToast("split is null"); + return; + } + String[] split1 = split[0].split("我是"); + if(split1==null||split1.length==0) + { + ToastUtil.showToast("name is null"); + return; + } + String nickname =split1[1]; +// String nickname = split1[split1.length-1]; +// LogUtil.i("nickname = "+nickname); + String format = format(nickname); +// LogUtil.i("format = "+format); + getNewPatient(applyListOperate, uuid, "2", position,format); + needreport(uuid,"通过"); + } + }); + // 拒绝事件 + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("cancle-position==" + position); + String uuid = PatientList.get(position).uuid; + PatientData p1 = PatientList.get(position); + String[] split = p1.content.split(",在"); + String[] split1 = split[0].split("我是"); + String nickname = split1[split1.length-1]; + LogUtil.i("nickname = "+nickname); + String format = format(nickname); + LogUtil.i("format = "+format); + getNewPatient(applyListOperate, uuid, "3", position,format); + needreport(uuid,"拒绝"); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + public class OldPatientAdapter extends BaseAdapter { + + private Context context; + private List PatientList; + + + public OldPatientAdapter(Context context, + ArrayList patientList) { + this.context = context; + this.PatientList=patientList; + + } + + @Override + public int getCount() { + return PatientList.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_new_patient_list_nom_1, null); + mHolder1 = new OldViewHolder(); + mHolder1.ivImage = convertView + .findViewById(R.id.iv_patient_image); + mHolder1.tvDate = convertView + .findViewById(R.id.tv_patient_date); + mHolder1.tvInfo = convertView + .findViewById(R.id.tv_patient_info); + mHolder1.btOk = convertView + .findViewById(R.id.bt_new_patient_ok); + mHolder1.btCancle = convertView + .findViewById(R.id.bt_new_patient_cancle); + mHolder1.nickname=convertView.findViewById(R.id.nickname); + convertView.setTag(mHolder1); + } else { + mHolder1 = (OldViewHolder) convertView.getTag(); + } + + // 给控件赋值. + OldPatientBean.ListBean p = PatientList.get(position); +// if(StringUtil.isEmpty(p.getNickname())) +// { +// mHolder1.tvInfo.setMaxLines(2); +// mHolder1.nickname.setVisibility(View.GONE); +// } +// else +// { +// mHolder1.tvInfo.setMaxLines(1); +// mHolder1.nickname.setVisibility(View.VISIBLE); +// mHolder1.nickname.setText("备注名:"+p.getNickname()); +// } + mHolder1.tvInfo.setMaxLines(1); + mHolder1.nickname.setVisibility(View.VISIBLE); + mHolder1.nickname.setText("昵称:"+p.getPatient_name()); + mHolder1.tvInfo.setText(p.getContent()); + + mHolder1.tvDate.setText(p.getCreate_date()); + if (!TextUtils.isEmpty(p.getPatient_photo()) && !"null".equals(p.getPatient_photo())) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + p.getPatient_photo(), + mHolder1.ivImage, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + else + { + mHolder1.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray_big); + } + + // 待审核 + switch (p.getStatus()) + { + case "2": + + mHolder1.btOk.setText("已同意"); + mHolder1.btCancle.setVisibility(View.VISIBLE); + break; + case "3": + + mHolder1.btOk.setText("已拒绝"); + mHolder1.btCancle.setVisibility(View.GONE); + break; + case "4": + + mHolder1.btOk.setText("已过期"); + mHolder1.btCancle.setVisibility(View.GONE); + break; + } + + + + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private NewsViewHolder mHolder = null; + private OldViewHolder mHolder1 = null; + private class NewsViewHolder { + + public Button btCancle; + public Button btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + } + private class OldViewHolder { + + public ImageView btCancle; + public TextView btOk; + public ImageView ivImage; + public TextView tvInfo; + public TextView tvDate; + public TextView nickname; + } + public static String format(String s){ + String str=s.replaceAll("[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……& ;*()——+|{}【】‘;:”“’。,、?|-]", ""); + return str; +} + + /** + * 同意或拒绝操作 getNewPatient + * + * @param loadUrl + * @param uuid + * @param status + * @param position + * void + */ + private void getNewPatient(final String loadUrl, String uuid, + final String status, final int position, final String nickname) { + showProgressDialog("请求中..."); + + this.status = status; + this.position = position; + this.nickname = nickname; + Map map = new HashMap<>(); + map.put("uuid",uuid); + map.put("status",status); + LogUtil.i("NewPatientActivity uuid = "+uuid); + LogUtil.i("NewPatientActivity status = "+status); + sendParamtoNet(loadUrl,map,GETAPPLYLISTOPERATE,this,false); + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + if("2".equals(mList.get(position).getStatus())) + { + Intent intent = new Intent(NormNewPatientActivity.this, BigPatientActivity.class); + intent.putExtra("realName", mList.get(position).getPatient_name()); + intent.putExtra("patientUuid", mList.get(position).getPatient_uuid()); + intent.putExtra("photo", mList.get(position).getPatient_photo()); + intent.putExtra("type", Constant.typePatient); + //启动患者详情界面 + startActivity(intent); + } +// if (ptrLv.getHeaderViewsCount() > 0) { +// position = position - 1; +// } + + } + private void updatename(final String loadUrl, final String patientUuid, String expertUuid, String NickName, String NoteContent) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("patientUuid",patientUuid);//患者uuid + params.addBodyParameter("expertUuid",expertUuid);//专家uuid + params.addBodyParameter("nickname",NickName);//别名 + params.addBodyParameter("note",NoteContent);//备注内容 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, patientUuid,info.result); + LogUtil.i(info.result); +// getproseData(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); +// ToastUtil.showMsgCustomToast("加载失败"); + } + }); + + } + /** + * 处理文本发送方法事件通知 + * + * @param + */ + private void handleSendTextMessage(String patientuuid,String realname) { + IMMessage imMessage = MessageBuilder.createTextMessage(patientuuid.split("#")[1].toLowerCase(), P2P, "你好,我已经是你的随访医生了"); + MessageFragment.ext.clear(); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_NICKNAME, realname); + MessageFragment.ext.put(Extras.EXTRA_GDXZ_TYPE,general); + imMessage.setRemoteExtension(MessageFragment.ext); + NIMClient.getService(MsgService.class).sendMessage(imMessage,false); +// // 组建一个待发送的ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.TXT); +// // 设置消息接收者 +// msg.setTo(patientuuid); +// // 创建一个文本消息体,并添加到消息对象中 +// ECTextMessageBody msgBody = new ECTextMessageBody("你好,我已经是你的随访医生了"); +// msg.setBody(msgBody); +// msg.setUserData("2,1,2,0"); +// try { +// // 发送消息,该函数见上 +// long rowId = -1; +// rowId = IMChattingHelper.sendECMessage(msg); +// // 通知列表刷新 +// msg.setId(rowId); +// // notifyIMessageListView(msg); +// } catch (Exception e) { +// e.printStackTrace(); +// } + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + } + private void needreport(String id,String result) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("suifang"); + rbens.setDeal_object(id); + rbens.setDeal_result(result); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/SetInformActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/SetInformActivity.java new file mode 100644 index 0000000..35c1ebd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/activity/SetInformActivity.java @@ -0,0 +1,310 @@ +package cn.shangyu.gdxzExpert.big.activity; + +import android.content.Intent; +import android.graphics.Color; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.widget.EditText; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GroupManageActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PatientCardBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +public class SetInformActivity extends BaseActivity implements OnCallBackFromNet { + + + private String patientUuid,nickname_new; + + @Override + public void setTitle() { + top_title.setText("设置备注和分组"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + + + } + EditText tv_beizhu,tv_miaosu; + TextView tv_fenzu,tv_num,tv_newnick,write_name; + TextView r_tijiao; + RelativeLayout r_new_nickname; + private int group_type = 0; + Boolean firstget=false,firstgetnote=false; + @Override + public View onCreateSuccessedView() { + View view; + if(CommonUtil.BigModule()) + { + view = View.inflate(ct, R.layout.activity_set_inform, null); + } + else + { + view = View.inflate(ct, R.layout.activity_set_inform_nom, null); + } + r_new_nickname=view.findViewById(R.id.r_new_nickname); + write_name=view.findViewById(R.id.write_name); + write_name.setOnClickListener(this); + tv_newnick=view.findViewById(R.id.tv_newnick); + tv_miaosu=view.findViewById(R.id.tv_miaosu); + tv_beizhu=view.findViewById(R.id.tv_beizhu); + tv_fenzu=view.findViewById(R.id.tv_fenzu); + tv_num=view.findViewById(R.id.tv_num); + r_tijiao=view.findViewById(R.id.r_tijiao); + r_tijiao.setEnabled(false); + tv_beizhu.addTextChangedListener(new TextWatcher() { + //记录输入的文字 + private CharSequence wordNum; + private int selectionStart; + private int selectionEnd; + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + //输入框输入之前监听 + } + + //输入框实时监听 + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + //实时记录输入的文字 + wordNum = s; + } + + //输入完成之后的监听 + @Override + public void afterTextChanged(Editable s) { + if(!firstget) + { + //这里的200 是你在XML文件里面设置的maxLength + if(s.toString().trim().length()==0&&tv_miaosu.getText().toString().trim().length()==0) + { + r_tijiao.setBackgroundColor(Color.parseColor("#CCCCCC")); + r_tijiao.setEnabled(false); + } + else + { + r_tijiao.setBackgroundColor(Color.parseColor("#3cc7c0")); + r_tijiao.setEnabled(true); + } + } + else + { + firstget=false; + } + tv_beizhu.setSelection(s.length()); + } + }); + tv_miaosu.addTextChangedListener(new TextWatcher() { + //记录输入的文字 + private CharSequence wordNum; + private int selectionStart; + private int selectionEnd; + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + //输入框输入之前监听 + } + + //输入框实时监听 + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + //实时记录输入的文字 + wordNum = s; + } + + //输入完成之后的监听 + @Override + public void afterTextChanged(Editable s) { + + if(!firstgetnote) + { + if(s.toString().trim().length()==0&&tv_beizhu.getText().toString().trim().length()==0) + { + r_tijiao.setBackgroundColor(Color.parseColor("#CCCCCC")); + r_tijiao.setEnabled(false); + } + else + { + r_tijiao.setBackgroundColor(Color.parseColor("#3cc7c0")); + r_tijiao.setEnabled(true); + } + } + else + { + firstgetnote=false; + } + + //TextView显示剩余字数 + //这里的200 是你在XML文件里面设置的maxLength + tv_num.setText(s.length() + "/100"); + selectionStart = tv_miaosu.getSelectionStart(); + selectionEnd = tv_miaosu.getSelectionEnd(); + if (wordNum.length() > 100) { + //删除多余输入的字(不会显示出来) + s.delete(selectionStart - 1, selectionEnd); + int tempSelection = selectionEnd; + tv_num.setText(s.length()+"/100"); + //设置光标在最后 + tv_miaosu.setSelection(tempSelection); + } + } + }); + r_tijiao.setOnClickListener(this::processClick); + tv_fenzu.setOnClickListener(this::processClick); + if(!StringUtil.isEmpty(getIntent().getStringExtra("miaosu"))) + { + firstgetnote=true; + tv_miaosu.setText(getIntent().getStringExtra("miaosu")); + } + + tv_fenzu.setText(getIntent().getStringExtra("fenzu")); + if(!StringUtil.isEmpty(getIntent().getStringExtra("nickname"))) + { + firstget=true; + tv_beizhu.setText(getIntent().getStringExtra("nickname")); + } + else if(!StringUtil.isEmpty(getIntent().getStringExtra("nickname_new"))) + { + nickname_new=getIntent().getStringExtra("nickname_new"); + r_new_nickname.setVisibility(View.VISIBLE); + tv_newnick.setText("申请消息为:我是"+nickname_new); + + } + + patientUuid = getIntent().getStringExtra("patientUuid"); + getDetail(); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + getDetail(); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + private void getDetail() { + Map map = new HashMap<>(); + map.put("patient_uuid",patientUuid); + sendJsonPostParamtoNetSignMD5(Url.patientCard,map,200,this); + + } + String updatenickname; + private void updateInfo() { + updatenickname=tv_beizhu.getText().toString().trim(); + Map map = new HashMap<>(); + map.put("patient_uuid",patientUuid); + map.put("nickname",tv_beizhu.getText().toString().trim()); + map.put("note",tv_miaosu.getText().toString().trim()); + sendJsonPostParamtoNetSignMD5(Url.updateNicknameNote,map,201,this); + + } + @Override + protected void processClick(View v) { + switch (v.getId()) + { + case R.id.write_name: + tv_beizhu.setText(nickname_new); + break; + case R.id.r_tijiao: + if(StringUtil.isEmpty(tv_beizhu.getText().toString().trim())) + { + ToastUtil.showMessage("备注不能为空"); + return; + } + updateInfo(); + needreportOb("set_note_group",patientUuid); + break; + case R.id.tv_fenzu: + hideSoftKeyboard(); + if (group_type==0){ + Intent intent1 = new Intent(SetInformActivity.this, GroupManageActivity.class); + intent1.putExtra("patientUuid",patientUuid); + if ("通过分组给患者分类".equals(tv_fenzu.getText().toString())){ + intent1.putExtra("fenzu",""); + }else { + intent1.putExtra("fenzu",tv_fenzu.getText().toString()); + } + startActivity(intent1); + }else { + ToastUtil.showMessage("该患者暂不支持分组编辑"); + } + break; + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case 201: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + + UserInfoHelper.updatePatientInfo( patientUuid.toLowerCase(), SessionTypeEnum.P2P,updatenickname); + Intent intent=new Intent(); + intent.putExtra("NickName",tv_beizhu.getText().toString().trim()); + intent.putExtra("NoteContent",tv_miaosu.getText().toString().trim()); + setResult(302,intent); + hideSoftKeyboard(); + finish(); + } + ToastUtil.showToast(jsonObject.optString("message")); + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 200: + + PatientCardBean bean = GsonTools.fromGsonToBean(resultJson, + PatientCardBean.class); + + PatientCardBean.GroupBean group = bean.getGroup(); + if (group!=null){ + group_type = group.getGroup_type(); + if (!StringUtil.isEmpty(bean.getGroup().getName())){ + tv_fenzu.setText(bean.getGroup().getName().replace(",",",")); +// tv_fenzu.setTextColor(getResources().getColor(R.color.c666666)); + } + else + { + tv_fenzu.setText("通过分组给患者分类"); +// tv_fenzu.setTextColor(getResources().getColor(R.color.c999999)); + } + } + + break; + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigComplexViewMF.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigComplexViewMF.java new file mode 100644 index 0000000..a71f98b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigComplexViewMF.java @@ -0,0 +1,61 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.gongwen.marqueen.MarqueeFactory; + +import java.util.Date; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.HomeBean; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormatbig; +import static com.netease.nim.uikit.common.util.sys.TimeUtil.isSameDay; + +public class BigComplexViewMF extends MarqueeFactory { + private LayoutInflater inflater; + + public BigComplexViewMF(Context mContext) { + super(mContext); + inflater = LayoutInflater.from(mContext); + } + + @Override + public RelativeLayout generateMarqueeItemView(HomeBean.MettingBean data) { + RelativeLayout mView = (RelativeLayout) inflater.inflate(R.layout.complex_view_big, null); + + ((TextView) mView.findViewById(R.id.tv_title)).setText(data.getTitle()); + switch (data.getState()+"") + { + case "1": + if(isSameDay(new Date(Long.valueOf(data.getBegin_date_timestamp())), + new Date(System.currentTimeMillis()))) + { + Glide.with(mContext).load(R.drawable.big_b_now_big).into((ImageView) mView.findViewById(R.id.im_s)); + ((TextView) mView.findViewById(R.id.tv_time)).setText("开播时间:"+simpleDateFormatbig.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + } + else + { + + Glide.with(mContext).load(R.drawable.big_b_not).into((ImageView) mView.findViewById(R.id.im_s)); + ((TextView) mView.findViewById(R.id.tv_time)).setText("开播时间:"+simpleDateFormatbig.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + } + break; + case "2": + ((TextView) mView.findViewById(R.id.tv_time)).setText("开播时间:"+simpleDateFormatbig.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + Glide.with(mContext).load(R.drawable.big_b_now).into((ImageView) mView.findViewById(R.id.im_s)); + break; + default: + Glide.with(mContext).load(R.drawable.big_b_not).into((ImageView) mView.findViewById(R.id.im_s)); + ((TextView) mView.findViewById(R.id.tv_time)).setText("开播时间:"+simpleDateFormatbig.format(new Date(Long.valueOf(data.getBegin_date_timestamp())))); + break; + + } + return mView; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigHuiAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigHuiAdapter.java new file mode 100644 index 0000000..0298636 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigHuiAdapter.java @@ -0,0 +1,118 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.forward.androids.views.ShapeImageView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; + +public class BigHuiAdapter extends RecyclerView.Adapter { + private Context context; + private List datas; + + + public BigHuiAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.big_hui_item, + parent, false); + + + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.im_c = view.findViewById(R.id.im_c); + viewHolder.tv_n=view.findViewById(R.id.tv_n); +// viewHolder.tv_update=view.findViewById(R.id.tv_update); + +// viewHolder.l_c=view.findViewById(R.id.l_c); + +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels - CommonUtil.dip2px(context, 5)) / 4.5f), +// ViewGroup.LayoutParams.MATCH_PARENT);平分屏幕宽度,显示4个半 +// LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) ((context.getResources().getDisplayMetrics().widthPixels- CommonUtil.dip2px(context, 10) ) / 1.8f), +// ViewGroup.LayoutParams.MATCH_PARENT); +// viewHolder.l_c.setLayoutParams(params); +// viewHolder.l_c.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); +// } +// } +// }); + viewHolder.im_c.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); + } + } + }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); + + ImageLoader.getInstance().displayImage( + datas.get(position).getImgpath(), + holder.im_c, + ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + holder.tv_n.setText(datas.get(position).getName()); +// if(datas.get(position).getUpload_num().equals(datas.get(position).getVideo_num())) +// { +// holder.tv_update.setText("已完结"); +// } +// else +// { +// holder.tv_update.setText("已更新"+datas.get(position).getUpload_num()+"课时"); +// } + + + + } + + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + ShapeImageView im_c; + TextView tv_n; +// ,tv_update; +// LinearLayout l_c; + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigKejianAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigKejianAdapter.java new file mode 100644 index 0000000..f7c3bb2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigKejianAdapter.java @@ -0,0 +1,414 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.Manifest; +import android.app.Activity; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.umeng.analytics.MobclickAgent; + +import java.io.File; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CourseUrlDetailActivity; +import cn.shangyu.gdxzExpert.activity.PdfViewActivity; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_COURSEWARE_CHECK; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_GUIDE_CHECK; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_GUIDE_DOWNLOAD; +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +public class BigKejianAdapter extends RecyclerView.Adapter{ + private Context context; + private List datas; + private Boolean guide; + + public BigKejianAdapter(Context context, List datas) { + this.context=context; + this.datas=datas; + + + } + + public void setGuide(Boolean guide) { + this.guide = guide; + } + + @NonNull + @Override + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.kejian_item_big, + parent, false); + + ViewHolder viewHolder = new ViewHolder(view); + + viewHolder.tv_open = view.findViewById(R.id.tv_open); + viewHolder.tv_n=view.findViewById(R.id.tv_n); + viewHolder.r_kj=view.findViewById(R.id.r_kj); + viewHolder.item_iv_down=view.findViewById(R.id.item_iv_down); + + +// viewHolder.tv_open.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (mOnItemClickListener != null) { +// mOnItemClickListener.onItemClick(viewHolder.itemView, viewHolder.getAdapterPosition()); +// } +// } +// }); + return viewHolder; + + } + + @Override + public void onBindViewHolder(@NonNull ViewHolder holder, int position) { + + holder.tv_n.setText(datas.get(position).getTitle()); + if(2==getDownloadS(datas.get(position).getArticle_uuid())) + { + holder.tv_open.setText("查看"); + holder.tv_open.setVisibility(View.VISIBLE); + holder.item_iv_down.setVisibility(View.GONE); + } + else if(1==getDownloadS(datas.get(position).getArticle_uuid())) + { + holder.tv_open.setText("下载中"); + holder.tv_open.setVisibility(View.VISIBLE); + holder.item_iv_down.setVisibility(View.GONE); + } + else + { + holder.tv_open.setText("下载"); + holder.tv_open.setVisibility(View.VISIBLE); + holder.item_iv_down.setVisibility(View.GONE); +// holder.tv_open.setVisibility(View.GONE); +// holder.item_iv_down.setVisibility(View.VISIBLE); + + } + holder.r_kj.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(guide) + { + if(2==getDownloadS(datas.get(position).getArticle_uuid()) + ) + { + String downloadFilePath = BookDownloadSqlManager + .getDownloadFilePath(datas.get(position).getArticle_uuid()); + + if (!TextUtils.isEmpty(downloadFilePath)) { + MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_CHECK); + // 路径不为空,打开该指南 + openFile(downloadFilePath); + } else { + // 路径为空,则删除不存在文件的记录 + BookDownloadSqlManager.delDownladInfo(datas.get(position).getArticle_uuid()); + notifyDataSetChanged(); + ToastUtil.showToast("文件不存在,请重新下载"); + } + + + + } + else + { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadPdfen( + Url.urlHtml +datas.get(position).getPath(), + datas.get(position).getTitle(), position, + holder); + } else { + EasyWindow.with((Activity) context).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission((Activity)context, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + // 下载 + downloadPdfen( + Url.urlHtml + datas.get(position).getPath(), + datas.get(position).getTitle(), position, + holder); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + + // 下载 + downloadPdfen( + Url.urlHtml + datas.get(position).getPath(), + datas.get(position).getTitle(), position, + holder); + } + } + + } + else + { + MobclickAgent.onEvent(context,EXPERT_HOME_COURSEWARE_CHECK); + Intent intent = new Intent(context, CourseUrlDetailActivity.class); + intent.putExtra("url", datas.get(position).getPath()); + intent.putExtra("title", datas.get(position).getTitle()); + intent.putExtra("uuid", datas.get(position).getArticle_uuid()); + context.startActivity(intent); + } + } + }); + +// Glide.with(context).asBitmap().load(datas.get(position).getIndex_img()) +// .into(holder.im_c); +// ImageLoader.getInstance().displayImage( +// datas.get(position), +// holder.im_c, +// ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + + + } + + /** + * 数据库查询下载状态 0未下载,1下载中,2已下载 + * @param uuid + * @return + */ + private int getDownloadS(String uuid) { + // TODO Auto-generated method stub + int downloadState; + if(guide) + { + downloadState = BookDownloadSqlManager.getDownloadState(uuid); + } + else + { + downloadState = CoursewareBookDownloadSqlManager.getDownloadState(uuid); + Log.d("aaaaaa","downloadState"+downloadState+uuid); + } + + + return downloadState; + } + @Override + public int getItemCount() { + return datas.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder + { + + public ViewHolder(@NonNull View itemView) { + super(itemView); + } + TextView tv_open,tv_n; + RelativeLayout r_kj; + ImageView item_iv_down; + + } + private OnRecyclerViewItemClickListener mOnItemClickListener = null; + + public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { + this.mOnItemClickListener = listener; + } + public void openFile(final String path) { + File file = new File(path); + if (file.exists()) { + if(path.contains("pdf")){ + Intent intent1 = new Intent(context, PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","文献详情"); + context.startActivity(intent1); + }else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + context.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } + + } + } +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/治疗指南/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/治疗指南/"; + private HttpHandler hand; + /** + * @param + * + * + */ + protected void downloadPdfen(String url, final String name, + final int position, final ViewHolder holder) { + MobclickAgent.onEvent(context,EXPERT_HOME_GUIDE_DOWNLOAD); + // TODO Auto-generated method stub + if(StringUtil.isEmpty(url)) + { + ToastUtil.showToast("下载地址有误"+url); + return; + } + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePath + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + downloadModel.setTitle(datas.get(position).getTitle());// 设置标题 +// downloadModel.setTime(datas.get(position).getTitle());// 设置标题 + if(!StringUtil.isEmpty(datas.get(position).getCreate_date())) { + downloadModel.setTime(datas.get(position).getCreate_date()); + } else { + downloadModel.setTime(DateUtil + .getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + downloadModel.setPath(datas.get(position).getPath());// 设置url路劲 + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(".pdf");// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .insertDownload(downloadModel); + notifyDataSetChanged(); + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .insertDownload(downloadModel); + notifyDataSetChanged(); +// if ((int) holder.bt_down_load.getTag() == position) { +// // 异步显示 +// // holder.bt_down_load.setText("查看全文"); +// holder.bt_down_load.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.lookmess)); +// holder.tv_down.setVisibility(View.GONE); +// } +// if (BookshelfListActivity.getInstance() != null) { +// BookshelfListActivity.getInstance() +// .notifyAdapter(); +// } +// if (MyDownloadActivity.getInstance() != null) { +// MyDownloadActivity.getInstance() +// .notifyAdapter(); +// } + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 + // openFile(path); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(datas + .get(position).getArticle_uuid()); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + BookDownloadSqlManager + .updateDownloadState(downloadModel); + notifyDataSetChanged(); +// if ((int) holder.bt_down_load.getTag() == position) { + // 异步显示 + // holder.bt_down_load.setText("下载全文"); +// holder.bt_down_load +// .setBackgroundDrawable(mContext +// .getResources() +// .getDrawable( +// R.drawable.download)); +// holder.tv_down.setVisibility(View.GONE); +// } +// if (BookshelfListActivity.getInstance() != null) { +// BookshelfListActivity.getInstance() +// .notifyAdapter(); +// } + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigLibraryBookshelfAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigLibraryBookshelfAdapter.java new file mode 100644 index 0000000..63c2595 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigLibraryBookshelfAdapter.java @@ -0,0 +1,112 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; + +/** + * LibraryBookshelfAdapter.java + * + * @author liufang + * @date 2015-11-4 上午11:15:25 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆书架适配器 + */ +public class BigLibraryBookshelfAdapter extends BaseAdapter { + private Context mContext; + private List mList; + private int type; + + public BigLibraryBookshelfAdapter(Context context, List list, + int type) { + this.mContext = context; + this.mList = list; + this.type = type; + } + + @Override + public int getCount() { + return mList.size(); + } + + @Override + public Object getItem(int position) { + return mList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContext, + R.layout.bookself_item_big, null); + + holder.name = (TextView) convertView.findViewById(R.id.item_name);// 标题名字 +// holder.img = (ImageView) convertView.findViewById(R.id.item_img); +// holder.tv_num = (TextView) convertView.findViewById(R.id.tv_num); + holder.item = convertView.findViewById(R.id.item_view); + + // 计算GridView的列宽 +// int width = mContext.getResources().getDisplayMetrics().widthPixels; +// int w = width - CommonUtil.dip2px(mContext, 40); +// double h = (w / 3) * 1.415; +// LayoutParams i = holder.img.getLayoutParams(); +// i.width = LayoutParams.WRAP_CONTENT; +// i.height = (int) h; +// holder.img.setLayoutParams(i); +// LogUtil.i("width=" + width + "w=" + w + "h=" + h); + +// if (type == 1) { +// holder.name.setVisibility(View.INVISIBLE); +// holder.tv_num.setVisibility(View.INVISIBLE); +// } else { +// holder.name.setVisibility(View.VISIBLE); +// holder.tv_num.setVisibility(View.VISIBLE); +// } + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + if (position>=0){ + final LibraryData data = mList.get(position); +// if (type == 1) { +// holder.name.setText(" "); +// } else { + holder.name.setText(data.name); +// holder.tv_num.setText("(共"+data.total+"份)"); +// } + +// if (!TextUtils.isEmpty(data.imgs)) { +// ImageLoader.getInstance().displayImage(Url.urlHtml + data.imgs, +// holder.img, +// ImageOptions.getImageOptions(R.drawable.book_default)); +// +// } else { +// holder.img.setImageResource(R.drawable.book_default); +// } + } + + return convertView; + } + + public class Holder { +// public ImageView img; + public TextView name; +// public TextView tv_num; + View item; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigMeetingAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigMeetingAdapter.java new file mode 100644 index 0000000..294f753 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigMeetingAdapter.java @@ -0,0 +1,265 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.AnimationDrawable; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.Date; +import java.util.List; + +import cn.forward.androids.views.ShapeImageView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ZhiBoActivity; +import cn.shangyu.gdxzExpert.bean.MeetingBean.MeatingList; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormatbig; + +public class BigMeetingAdapter extends BaseAdapter { + Context context; + List mList; + private AnimationDrawable anim; + + + + public BigMeetingAdapter(Context mActivity, List mList) { + + this.context = mActivity; + this.mList = mList; + + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_meeting_big); + vh = new ViewHolder(); + vh.mDate = (TextView) convertView + .findViewById(R.id.tv_item_meeting_date); + vh.mTitle = (TextView) convertView + .findViewById(R.id.tv_item_meeting_title); + vh.tv_item_meeting_end=convertView.findViewById(R.id.tv_item_meeting_end); + +// vh.mLocation = (TextView) convertView +// .findViewById(R.id.tv_item_meeting_location); +// vh.mTDate = (TextView) convertView +// .findViewById(R.id.tv_item_meeting_tdate); + vh.mImage = convertView + .findViewById(R.id.iv_item_meeting_image); + vh.imageView1=convertView.findViewById(R.id.imageView1); +// vh.mV_color = convertView.findViewById(R.id.item_color); +// vh.mRl = (RelativeLayout) convertView +// .findViewById(R.id.rl_item_meeting); + vh.mFl = (FrameLayout) convertView.findViewById(R.id.fl_meeting); +// vh.mZhiBo = (TextView) convertView.findViewById(R.id.tv_meeting); +// vh.mIv_bofang = (ImageView) convertView +// .findViewById(R.id.iv_meeting_bofang); + + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + +// vh.mDate.setText("直播时间:"+" "+getTime(mList.get(position).getBegin_date(),0,16)); + vh.mTitle.setText(mList.get(position).getTitle()); +// vh.mLocation.setText(mList.get(position).getLocation()); + + if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("1")) { +// ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); +// vh.mRl.getLayoutParams(); +// vh.mIv_bofang.setVisibility(View.VISIBLE); +// vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); +// pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); +// vh.mRl.setLayoutParams(pp); +// vh.mZhiBo.setText("预告"); + if(getTime(simpleDateFormatbig.format(new Date()),0,10).equals(getTime(mList.get(position).getBegin_date(), 0,10))) + { + Glide.with(context).load(R.drawable.meetingtime_big1).into(vh.imageView1); + vh.mDate.setText("今日"+getTime(mList.get(position).getBegin_date(), 10,16)+" 开始直播"); + vh.mDate.setTextColor(Color.parseColor("#F0992D")); + + + } + else + { + Glide.with(context).load(R.drawable.meetingtime_big).into(vh.imageView1); +// vh.imageView1.setImageDrawable(mActivity.getResources().getDrawable(R.drawable.meetingtime_big)); + vh.mDate.setText("直播时间:"+" "+getTime(mList.get(position).getBegin_date(), 0,16)); + vh.mDate.setTextColor(Color.parseColor("#999999")); + + } + vh.tv_item_meeting_end.setVisibility(View.GONE); + } else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("2")) { +// ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); +// vh.mRl.getLayoutParams(); +// vh.mIv_bofang.setVisibility(View.VISIBLE); +// vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.VISIBLE); +// pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); +// ImageLoader.getInstance().displayImage( +// context.getResources().getDrawable(R.drawable.big_bo_g),vh.imageView1); +// RequestOptions requestOptions = new RequestOptions().dontAnimate().skipMemoryCache(true); +// Glide.with(context).load(R.drawable.zhibo_anim).apply(requestOptions).into(vh.imageView1); + vh.imageView1.setImageDrawable(context.getResources().getDrawable(R.drawable.zhibo_anim)); +// vh.imageView1.setBackground(context.getResources().getDrawable(R.drawable.zhibo_anim)); + anim = (AnimationDrawable) vh.imageView1.getDrawable(); +// vh.imageView1.post(new Runnable() { +// @Override +// public void run() { +// + anim.start(); +// } +// }); +// vh.imageView1.setImageDrawable(mActivity.getResources().getDrawable(R.drawable.meetingtime_big1)); + vh.mDate.setText("直播进行中"); + vh.mDate.setTextColor(Color.parseColor("#F0992D")); +// vh.mRl.setLayoutParams(pp); +// vh.mZhiBo.setText("直播中"); + vh.tv_item_meeting_end.setVisibility(View.GONE); + } else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("3")) { +// ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); +// vh.mRl.getLayoutParams(); +// vh.mIv_bofang.setVisibility(View.GONE); +// vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.GONE); +// pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); +// vh.mRl.setLayoutParams(pp); + Glide.with(context).load(R.drawable.meetingtime_big).into(vh.imageView1); +// vh.imageView1.setImageDrawable(mActivity.getResources().getDrawable(R.drawable.meetingtime_big)); + vh.mDate.setText("直播时间:"+" "+getTime(mList.get(position).getBegin_date(), 0,10)); + vh.mDate.setTextColor(Color.parseColor("#999999")); +// vh.mZhiBo.setText("已结束"); + vh.tv_item_meeting_end.setVisibility(View.VISIBLE); + }else if (mList.get(position).getStatus() != null + && mList.get(position).getStatus().equals("4")) { +// ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); +// vh.mRl.getLayoutParams(); +// vh.mIv_bofang.setVisibility(View.GONE); +// vh.mZhiBo.setVisibility(View.VISIBLE); + // vh.mSpareZhiBo.setVisibility(View.GONE); +// pp.height = dip2px(mActivity, 247); + vh.mFl.setVisibility(View.VISIBLE); +// vh.mRl.setLayoutParams(pp); + Glide.with(context).load(R.drawable.meetingtime_big).into(vh.imageView1); +// vh.imageView1.setImageDrawable(mActivity.getResources().getDrawable(R.drawable.meetingtime_big)); + vh.mDate.setText("直播回放:"+" "+getTime(mList.get(position).getBegin_date(), 0,16)); + vh.mDate.setTextColor(Color.parseColor("#999999")); +// vh.mZhiBo.setText("回放中"); + vh.tv_item_meeting_end.setVisibility(View.GONE); + } else { +// vh.mIv_bofang.setVisibility(View.GONE); +// vh.mZhiBo.setVisibility(View.GONE); + // vh.mSpareZhiBo.setVisibility(View.GONE); +// ViewGroup.LayoutParams pp = vh.mRl.getLayoutParams(); +// vh.mRl.getLayoutParams(); +// pp.height = dip2px(mActivity, 75); + Glide.with(context).load(R.drawable.meetingtime_big).into(vh.imageView1); +// vh.imageView1.setImageDrawable(mActivity.getResources().getDrawable(R.drawable.meetingtime_big)); + vh.mDate.setText("直播时间:"+" "+getTime(mList.get(position).getBegin_date(), 0,16)); + vh.mDate.setTextColor(Color.parseColor("#999999")); + vh.mFl.setVisibility(View.GONE); +// vh.mRl.setLayoutParams(pp); + vh.tv_item_meeting_end.setVisibility(View.GONE); + } + vh.mFl.setTag(position); + vh.mFl.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mList.get((Integer) v.getTag()).getStatus().equals("3")) { + return; + } + Intent intent = new Intent(context, ZhiBoActivity.class); + intent.putExtra("newsTitle", mList.get((Integer) v.getTag()) + .getTitle()); + intent.putExtra("url", mList.get((Integer) v.getTag()) + .getLiveurl()); + intent.putExtra("summary", mList.get((Integer) v.getTag()) + .getLiveimg()); + intent.setType("zhibo"); + context.startActivity(intent); + } + }); + if (!TextUtils.isEmpty(mList.get(position).getLiveimg()) + && !"null".equals(mList.get(position).getLiveimg())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + mList.get(position).getLiveimg(), + vh.mImage, + ImageOptions + .getImageOptions(R.drawable.home_scroll_default1)); + } else { + vh.mImage.setImageResource(R.drawable.home_scroll_default1); + } + return convertView; + } + + class ViewHolder { + TextView mTitle, mDate,tv_item_meeting_end; +// View mV_color; + ShapeImageView mImage; + ImageView imageView1; +// RelativeLayout mRl; + FrameLayout mFl; + } + + public String getTime(String str1, int bnum,int dnum) { +// if (str1.subSequence(0, 16).equals(str2.subSequence(0, 16))) { + return str1.replaceAll("-", ".").subSequence(bnum, dnum).toString(); +// } +// StringBuilder sb = new StringBuilder(); +// sb.append(str1.replaceAll("-", ".").subSequence(0, 15)); +// sb.append("-"); +// sb.append(str2.replaceAll("-", ".").subSequence(0, 15)); +// return sb.toString(); + + } + + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigNormalItemView.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigNormalItemView.java new file mode 100644 index 0000000..ee56a1a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigNormalItemView.java @@ -0,0 +1,84 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import cn.shangyu.gdxzExpert.R; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; + +public class BigNormalItemView extends BaseTabItem { + TextView tv_title; + ImageView im_selector; + + public BigNormalItemView(@NonNull Context context) { + super(context); + LayoutInflater.from(context).inflate(R.layout.item_kejianna, this, true); + tv_title=findViewById(R.id.tv_title); + im_selector=findViewById(R.id.im_selector); + + } + /** + * 方便初始化的方法 + * + * @param title 标题 + */ + public void initialize( String title) { + + tv_title.setText(title); + } + @Override + public void setChecked(boolean checked) { + if (checked) { + + tv_title.setTextColor(Color.parseColor("#ff000000")); + tv_title.setTextSize(23); + tv_title.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); + im_selector.setVisibility(VISIBLE); + } else { + + tv_title.setTextColor(Color.parseColor("#ff666666")); + tv_title.setTextSize(21); + tv_title.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); + im_selector.setVisibility(GONE); + } + + } + + @Override + public void setMessageNumber(int number) { + + } + + @Override + public void setHasMessage(boolean hasMessage) { + + } + + @Override + public void setTitle(String title) { + tv_title.setText(title); + + } + + @Override + public void setDefaultDrawable(Drawable drawable) { + + } + + @Override + public void setSelectedDrawable(Drawable drawable) { + + } + + @Override + public String getTitle() { + return tv_title.getText().toString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigRollAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigRollAdapter.java new file mode 100644 index 0000000..597002e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigRollAdapter.java @@ -0,0 +1,53 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.bumptech.glide.Glide; +import com.zaaach.transformerslayout.holder.Holder; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.IconBean; + +public class BigRollAdapter extends Holder { + private ImageView icon; + private TextView text; + private ImageView iv_red; + public BigRollAdapter(@NonNull View itemView) { + super(itemView); + } + + @Override + protected void initView(View itemView) { + icon = itemView.findViewById(R.id.iv_menu_icon); + text = itemView.findViewById(R.id.tv_menu_text); + iv_red=itemView.findViewById(R.id.iv_red); + } + + @Override + public void onBind(Context context, List list, @Nullable IconBean data, int position) { + if (data == null) return; + if(data.getRed()==null||!data.getRed()) + { + iv_red.setVisibility(View.GONE); + } + else + { + iv_red.setVisibility(View.VISIBLE); + } + text.setText(data.getName()); +// icon.setImageResource(data.getIcon()); + Glide.with(context) + .asBitmap() +// .placeholder(R.drawable.default_place_holder) + .load(data.getImg()) + .into(icon); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigToolAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigToolAdapter.java new file mode 100644 index 0000000..e7a16e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigToolAdapter.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.widget.ArrayAdapter; + +import androidx.annotation.NonNull; + +public class BigToolAdapter extends ArrayAdapter { + + public BigToolAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull String[] objects) { + super(context, resource, textViewResourceId, objects); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoSAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoSAdapter.java new file mode 100644 index 0000000..9bdbbab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoSAdapter.java @@ -0,0 +1,110 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Intent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean.VideoMore; +import cn.shangyu.gdxzExpert.big.activity.BigVideoActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class BigVideoSAdapter extends BaseAdapter { + private List lists; + private BigVideoActivity mActivity; + + public BigVideoSAdapter(List lists, BigVideoActivity mActivity) { + this.lists = lists; + this.mActivity = mActivity; + } + + public void getDatas(List lists) { + this.lists = lists; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return lists.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_list_big); + vh = new ViewHolder(); + vh.item_view = convertView + .findViewById(R.id.item_view); + vh.mTv_title1 = (TextView) convertView + .findViewById(R.id.tv_video_content1); + vh.mTv_name1 = (TextView) convertView + .findViewById(R.id.tv_video_name1); + + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + + if(lists.get(position).getCreate_date()!=null&&lists.get(position).getCreate_date().length()>9) + + { + vh.mTv_title1.setText(lists.get(position).getPublic_name()+" "+lists.get(position).getCreate_date().substring(0,10)); + } + else + { + vh.mTv_title1.setText(lists.get(position).getPublic_name()+" "+lists.get(position).getCreate_date()); + } + vh.mTv_name1.setText(lists.get(position).getName()); + + vh.item_view.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", lists.get(position).getPath()); + intent.putExtra("uuid", lists.get(position).getUuid()); + intent.putExtra("note", lists.get(position).getNote()); + intent.putExtra("title", lists.get(position).getName()); + intent.putExtra("readnum", lists.get(position).getReadnum()); + intent.putExtra("imgpath", lists.get(position).getImgpath()); + intent.putExtra("public_name", lists.get(position) + .getPublic_name()); + mActivity.startActivityForResult(intent, + mActivity.GET_READ_NUM_RESULT2); + } + }); + + return convertView; + } + + class ViewHolder { + + LinearLayout item_view; + TextView mTv_title1, mTv_name1; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoTeachAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoTeachAdapter.java new file mode 100644 index 0000000..dcff0d8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/BigVideoTeachAdapter.java @@ -0,0 +1,147 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.VideoTeachAdapter; +import cn.shangyu.gdxzExpert.bean.VideoMoreBean; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by WANGChengXin on 2019/10/25. + */ + +public class BigVideoTeachAdapter extends VideoTeachAdapter { + private List data; + + + public BigVideoTeachAdapter(List data) { + super(data); + this.data = data; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + if (data == null) { + return 0; + } + return data.size(); + } + + public void getDatas(List data) { + this.data = data; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + NewsViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_video_search_big); + vh = new NewsViewHolder(); + vh.mTv_Title = (TextView) convertView.findViewById(R.id.tv_title); + vh.tv_name = (TextView) convertView.findViewById(R.id.tv_name); + vh.tv_time = (TextView) convertView.findViewById(R.id.tv_time); + vh.tv_video_type_name = (TextView) convertView.findViewById(R.id.tv_video_type_name); + vh.tv_num = (TextView) convertView.findViewById(R.id.tv_num); + convertView.setTag(vh); + } else { + vh = (NewsViewHolder) convertView.getTag(); + } + vh.mTv_Title.setText(data.get(position).getName()); + + + + vh.tv_name.setText(data.get(position).getPublic_name()+" "+data.get(position).getCreate_date().split(" ")[0]); + vh.tv_num.setText(data.get(position).getReadnum()+"人阅读"); + + + + vh.tv_video_type_name.setText(data.get(position).getVideo_type_name()); + +// vh.item_view.setOnClickListener(new View.OnClickListener() { +// +// @Override +// public void onClick(View v) { +// // TODO Auto-generated method stub +// Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); +// // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 +// intent.putExtra("startNow", false); +// intent.putExtra("isVlmsOnline", false); +// intent.putExtra("url", lists.get(position).getPath()); +// intent.putExtra("uuid", lists.get(position).getUuid()); +// intent.putExtra("note", lists.get(position).getNote()); +// intent.putExtra("title", lists.get(position).getName()); +// intent.putExtra("readnum", lists.get(position).getReadnum()); +// intent.putExtra("imgpath", lists.get(position).getImgpath()); +// intent.putExtra("need_inside_share", "yes"); +// intent.putExtra("public_name", lists.get(position) +// .getPublic_name()); +// mActivity.startActivityForResult(intent, +// mActivity.GET_READ_NUM_RESULT2); +// +// } +// }); +// +// +// // 给控件赋值. +// VideoMoreBean.VideoMore videoMore = data.get(position); +// mHolder.tvTitle.setText(videoMore.getName()); +// mHolder.im_read_count.setVisibility(View.INVISIBLE); +// mHolder.tvreadnum.setVisibility(View.INVISIBLE); +// mHolder.tvSummary.setVisibility(View.VISIBLE); +// mHolder.im_argee.setVisibility(View.GONE); +// mHolder.tvdianzannum.setVisibility(View.GONE); +// mHolder.im_argee2.setVisibility(View.VISIBLE); +// mHolder.tv_dianzan_count2.setVisibility(View.VISIBLE); +// if (!TextUtils.isEmpty(data.get(position).getImgpath())) { +// ImageLoader.getInstance().displayImage( +// Url.urlHtml + data.get(position).getImgpath(), mHolder.ivImage, +// ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// } else { +// mHolder.ivImage.setImageResource(R.drawable.default_news_iv); +// } +// mHolder.tvSummary.setText(data.get(position).getPublic_name()); +// mHolder.tvDate.setText(data.get(position).getCreate_date().split(" ")[0]); +// mHolder.tv_dianzan_count2.setText(""+data.get(position).getReadnum()); + + + return convertView; + } + + private class NewsViewHolder { + + TextView mTv_Title,tv_name,tv_time,tv_video_type_name,tv_num; + } + + public boolean inNow(String date) { + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + + String ds1 = formatter.format(new Date()); + if (date.equals(ds1)) { + return true; + } + return false; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/NormalItemViewBig.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/NormalItemViewBig.java new file mode 100644 index 0000000..ac0012a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/NormalItemViewBig.java @@ -0,0 +1,130 @@ +package cn.shangyu.gdxzExpert.big.adapter; + + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.ColorInt; +import androidx.annotation.DrawableRes; +import androidx.core.content.ContextCompat; + +import me.majiajie.pagerbottomtabstrip.R; +import me.majiajie.pagerbottomtabstrip.internal.RoundMessageView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; + +public class NormalItemViewBig extends BaseTabItem { + + private ImageView mIcon; + private final TextView mTitle; + private final RoundMessageView mMessages; + + private Drawable mDefaultDrawable; + private Drawable mCheckedDrawable; + + private int mDefaultTextColor = 0x56000000; + private int mCheckedTextColor = 0x56000000; + + private boolean mChecked; + + public NormalItemViewBig(Context context) { + this(context, null); + } + + public NormalItemViewBig(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public NormalItemViewBig(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + +// LayoutInflater.from(context).inflate(R.layout.item_normal, this, true); + LayoutInflater.from(context).inflate(R.layout.item_normal_new_big, this, true); + mIcon = findViewById(R.id.icon); + mTitle = findViewById(R.id.title); + mMessages = findViewById(R.id.messages); + } + + @Override + public CharSequence getAccessibilityClassName() { + return NormalItemViewBig.class.getName(); + } + + /** + * 方便初始化的方法 + * + * @param drawableRes 默认状态的图标 + * @param checkedDrawableRes 选中状态的图标 + * @param title 标题 + */ + public void initialize(@DrawableRes int drawableRes, @DrawableRes int checkedDrawableRes, String title) { + mDefaultDrawable = ContextCompat.getDrawable(getContext(), drawableRes); + mCheckedDrawable = ContextCompat.getDrawable(getContext(), checkedDrawableRes); + mTitle.setText(title); + } + public void initialize(@DrawableRes int drawableRes, @DrawableRes int checkedDrawableRes, String title,int textsize) { + mDefaultDrawable = ContextCompat.getDrawable(getContext(), drawableRes); + mCheckedDrawable = ContextCompat.getDrawable(getContext(), checkedDrawableRes); + mTitle.setText(title); + mTitle.setTextSize(textsize); + } + + @Override + public void setChecked(boolean checked) { + if (checked) { + mIcon.setImageDrawable(mCheckedDrawable); + mTitle.setTextColor(mCheckedTextColor); + } else { + mIcon.setImageDrawable(mDefaultDrawable); + mTitle.setTextColor(mDefaultTextColor); + } + mChecked = checked; + } + + @Override + public void setMessageNumber(int number) { + mMessages.setMessageNumber(number); + } + + @Override + public void setHasMessage(boolean hasMessage) { + mMessages.setHasMessage(hasMessage); + } + + @Override + public void setTitle(String title) { + mTitle.setText(title); + } + + @Override + public void setDefaultDrawable(Drawable drawable) { + mDefaultDrawable = drawable; + if (!mChecked) { + mIcon.setImageDrawable(drawable); + } + } + + @Override + public void setSelectedDrawable(Drawable drawable) { + mCheckedDrawable = drawable; + if (mChecked) { + mIcon.setImageDrawable(drawable); + } + } + + @Override + public String getTitle() { + return mTitle.getText().toString(); + } + + public void setTextDefaultColor(@ColorInt int color) { + mDefaultTextColor = color; + } + + public void setTextCheckedColor(@ColorInt int color) { + mCheckedTextColor = color; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/RecyclerItemClickListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/RecyclerItemClickListener.java new file mode 100644 index 0000000..0cf6906 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/adapter/RecyclerItemClickListener.java @@ -0,0 +1,59 @@ +package cn.shangyu.gdxzExpert.big.adapter; + +import android.content.Context; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; + +import androidx.recyclerview.widget.RecyclerView; + +public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { + public interface OnItemClickListener { + void onItemClick(View view, int position); + + void onItemLongClick(View view, int position); + } + + private OnItemClickListener mListener; + + private GestureDetector mGestureDetector; + + public RecyclerItemClickListener(Context context, final RecyclerView recyclerView, OnItemClickListener listener) { + mListener = listener; + + mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapUp(MotionEvent e) { + return true; + } + + @Override + public void onLongPress(MotionEvent e) { + View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); + + if (childView != null && mListener != null) { + mListener.onItemLongClick(childView, recyclerView.getChildAdapterPosition(childView)); + } + } + }); + } + + @Override + public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { + View childView = view.findChildViewUnder(e.getX(), e.getY()); + + if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { + mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); + } + + return false; + } + + @Override + public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { + } + + @Override + public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/bean/OldPatientBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/bean/OldPatientBean.java new file mode 100644 index 0000000..1df1f02 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/bean/OldPatientBean.java @@ -0,0 +1,185 @@ +package cn.shangyu.gdxzExpert.big.bean; + +import java.util.List; + +public class OldPatientBean { + private String msg; + private String code; + private PatientBean data; + private String message; + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public PatientBean getData() { + return data; + } + + public void setData(PatientBean data) { + this.data = data; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public class PatientBean + { + private int pageNum; + private int pages; + private int pageSize; + private int totall; + private Boolean isFirstPage; + private Boolean isLastPage; + private List list; + + public int getPageNum() { + return pageNum; + } + + public void setPageNum(int pageNum) { + this.pageNum = pageNum; + } + + public int getPages() { + return pages; + } + + public void setPages(int pages) { + this.pages = pages; + } + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getTotall() { + return totall; + } + + public void setTotall(int totall) { + this.totall = totall; + } + + public Boolean getFirstPage() { + return isFirstPage; + } + + public void setFirstPage(Boolean firstPage) { + isFirstPage = firstPage; + } + + public Boolean getLastPage() { + return isLastPage; + } + + public void setLastPage(Boolean lastPage) { + isLastPage = lastPage; + } + + public List getList() { + return list; + } + + public void setList(List list) { + this.list = list; + } + } + + public class ListBean + { + public String patient_photo; + public String expert_uuid; + public String patient_uuid; + public String create_date; + public String patient_name; + public String nickname; + public String status; + public String content; + + public String getPatient_photo() { + return patient_photo; + } + + public void setPatient_photo(String patient_photo) { + this.patient_photo = patient_photo; + } + + public String getExpert_uuid() { + return expert_uuid; + } + + public void setExpert_uuid(String expert_uuid) { + this.expert_uuid = expert_uuid; + } + + public String getPatient_uuid() { + return patient_uuid; + } + + public void setPatient_uuid(String patient_uuid) { + this.patient_uuid = patient_uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getPatient_name() { + return patient_name; + } + + public void setPatient_name(String patient_name) { + this.patient_name = patient_name; + } + + public String getNickname() { + return nickname; + } + + public void setNickname(String nickname) { + this.nickname = nickname; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BIgBookshelfFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BIgBookshelfFragment.java new file mode 100644 index 0000000..33753f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BIgBookshelfFragment.java @@ -0,0 +1,549 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.activity.FreeagentsearchActivity; +import cn.shangyu.gdxzExpert.activity.MyDownloadActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicSearchActivity; +import cn.shangyu.gdxzExpert.activity.WFArticleListActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.big.adapter.BigLibraryBookshelfAdapter; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * LibraryListFragment.java + * + * @author liufang + * @date 2015-11-4 上午10:17:14 + * + * @copyright Copyright (C) 2015 河南商宇科技有限公司 + * @desc 功能说明:治疗指南、期刊杂志和权威杂志列表页面 + */ +public class BIgBookshelfFragment extends BaseFragment implements + OnItemClickListener { + private PullToRefreshListView ptrLv; + private TextView load_empty; + + private BigLibraryBookshelfAdapter mAdapter; + private List libraryList = new ArrayList<>(); + + private String url; + private BIgBookshelfFragment bookfaament; + private int type; + private LinearLayout mLl_search; + private DrawableCenterButton bt_SearchBook; + private DrawableCenterButtonR bt_screen; + private RelativeLayout mRl_screen; + private GridView mGv_Tage; + private Button mBt_Sure, mBt_reset; + private TagList mTagList; + private List TagPosition; + private List Tags; + private ScreenAdapter mAdapter2; + Boolean ENGLISH =false; + public static BIgBookshelfFragment newInstance(String url, int type,Boolean ENGLISH) { + BIgBookshelfFragment mFragment = new BIgBookshelfFragment(); + Bundle bundle = new Bundle(); + bundle.putString("loadUrl", url); + bundle.putInt("type", type); + bundle.putBoolean("ENGLISH",ENGLISH); + mFragment.setArguments(bundle); + return mFragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + url = getArguments().getString("loadUrl"); + type = getArguments().getInt("type", 0); + ENGLISH=getArguments().getBoolean("ENGLISH",false); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_bookshelf_b); + ptrLv =view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mLl_search = (LinearLayout) view.findViewById(R.id.rl_search_book); + bt_screen = (DrawableCenterButtonR) view + .findViewById(R.id.bt_book_screen); + bt_SearchBook = (DrawableCenterButton) view + .findViewById(R.id.bt_book_search); + mRl_screen = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mGv_Tage = (GridView) view.findViewById(R.id.gv_teach); + mBt_Sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_Sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_screen.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } else { + return; + } + Intent intentLibrary = new Intent(mActivity,BookshelfListActivity.class); + intentLibrary.putExtra("search", keywords.toString()); + intentLibrary.putExtra("type", "0"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + } + }); + + bt_SearchBook.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + PublicSearchActivity.class); + intent.setType("drug"); + startActivity(intent); + } + }); + if (url.equals(Url.getGuideType)) { + mLl_search.setVisibility(View.VISIBLE); + } + if (type == 0) { + load_empty.setText("暂无相关指南"); + getTagList(); + } else { + load_empty.setText("暂无相关文章"); + } + // 设置只有下拉刷新 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2(){ + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + getLibraryList(url); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + getLibraryList(url); + } + + + }); + bt_screen.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mTagList == null) { + getTagList(); + } + if (mRl_screen.getVisibility() == View.GONE) { + mRl_screen.setVisibility(View.VISIBLE); + + } else { + mRl_screen.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i) + .getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + } + }); + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 获取筛选标签 + */ + public void getTagList() { + RequestParams params = new RequestParams(); + params.addBodyParameter("type", "3"); + HttpHelper.loadData(HttpMethod.POST, Url.getTagList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(mActivity, Url.getTagList, + info.result); + processTage(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + } + }); + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + return; + } + getLibraryList(url); + mGv_Tage.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + } + + /** + * 获取书架列表 + * + * @param loadUrl + */ + private void getLibraryList(String loadUrl) { + if (BuildConfig.DEBUG) + LogUtil.i("getLibraryList.loadUrl = " + loadUrl); + HttpHelper.loadData(HttpMethod.POST, loadUrl, null, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess info.result = " + + info.result); + SharePrefUtil.saveString(mActivity, url, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_Tage.setAdapter(mAdapter2); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + Log.i("TAG","result = "+result); + LibraryListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + ptrLv.setEmptyView(load_empty); + return; + } + } else { + ptrLv.setEmptyView(load_empty); + return; + } + + // 初始化列表的数据 + libraryList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) {// bean.data.news + load_empty.setVisibility(View.VISIBLE); + } else { + load_empty.setVisibility(View.GONE); + libraryList.addAll(bean.data); + } + if (mAdapter == null) { + mAdapter = new BigLibraryBookshelfAdapter(mActivity, libraryList, type); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + LibraryData data = (LibraryData) parent.getAdapter().getItem(position); + Intent intent = null; + if (type == 1) { + if (ValidateUtils.isContainChinese(data.getName())) { + if ("免费代查".equals(data.getName())) { + intent = new Intent(mActivity, + FreeagentsearchActivity.class); + } else { + intent = new Intent(mActivity, WFArticleListActivity.class); + } + + } else { + if ("PubMeb".equals(data.getName())) { + Intent intents = new Intent(mActivity, + NewsDetailActivity.class); + intents.putExtra("url", + "http://www.ncbi.nlm.nih.gov/m/pubmed/"); + intents.putExtra("title", "PubMed"); + startActivity(intents); + } else { + // ToastUtil.showMessage("英文的"); + intent = new Intent(mActivity, BookshelfListActivity.class); + intent.putExtra("title", data.name); + intent.putExtra("ENGLISH",ENGLISH); + intent.putExtra("loadUrl", Url.getMagazineList); + intent.putExtra("type", type); + intent.putExtra("typeUuid", data.uuid); + startActivity(intent); + } + return; + } + + } else { + intent = new Intent(mActivity, BookshelfListActivity.class); + } + intent.putExtra("title", data.name); + intent.putExtra("cn", data.cn); + // 此处 判断治疗指南 列表的第一条数据 点击跳转到 我的下载(治疗指南列表的第一条数据是固定不变的) + if (type == 0 && data.name.equals("您已下载")) { + + Intent i = new Intent(getActivity(), MyDownloadActivity.class); + i.setType("0"); + startActivity(i); + } else { + if (type == 0) { + intent.putExtra("loadUrl", Url.getGuideList); + intent.putExtra("type", type); + intent.putExtra("typeUuid", data.uuid); + } else { + intent.putExtra("loadUrl", Url.getMagazineList); + } + startActivity(intent); + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList.data.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + return view; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigFuMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigFuMessageFragment.java new file mode 100644 index 0000000..9e3430a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigFuMessageFragment.java @@ -0,0 +1,325 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import android.os.Bundle; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MessageAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.big.activity.BigNewSystemMessageActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigFuMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigFuMessageFragment extends BaseFragment implements AdapterView.OnItemClickListener, OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + + public BigFuMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment FuMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigFuMessageFragment newInstance(String param1, String param2) { + BigFuMessageFragment fragment = new BigFuMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } + + // @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_fu_message, container, false); +// } + + MessageBean messageBeans; + private BigNewSystemMessageActivity newSystemMessageActivity; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (BigNewSystemMessageActivity) getActivity(); + if (view == null) + view = UIUtils.inflate(R.layout.fragment_fu_message); + +// if (getArguments() != null) { +// messageBeans = (ArrayList)getArguments().getSerializable("messagebean"); +// } + ptrLv = view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty = view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到福利通知哦"); + ll_empty.setBackgroundColor(getResources().getColor(R.color.big_bg)); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("1",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("1",page+""); + } + }); + ptrLv.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int i) { + switch (i) + { + case SCROLL_STATE_IDLE: + if(t<2) + { + + fadeIn(newSystemMessageActivity.tab); + fadeOut(newSystemMessageActivity.tab1); + + } + else + { + + newSystemMessageActivity.im_bg.setVisibility(View.GONE); + fadeIn(newSystemMessageActivity.tab1); + fadeOut(newSystemMessageActivity.tab); + + } + break; + } + + } + + @Override + public void onScroll(AbsListView absListView, int t0, int t1, int i2) { + t=t0; + + } + }); + initMessage("1",1+""); + + return view; + } + int t; + public void fadeIn( View view) { + if (view.getVisibility() == View.VISIBLE) { + return; + } + Animation animation = new AlphaAnimation(0F, 1F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setEnabled(true); + if(view.equals( newSystemMessageActivity.tab)) + { + newSystemMessageActivity.im_bg.setVisibility(View.VISIBLE); + } + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + view.setVisibility(View.VISIBLE); + } + + public void fadeOut( View view) { + if (view.getVisibility() != View.VISIBLE) { + return; + } + + // Since the button is still clickable before fade-out animation + // ends, we disable the button first to block click. + view.setEnabled(false); + Animation animation = new AlphaAnimation(1F, 0F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setVisibility(View.GONE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { +// goActivity(messageBeans.getData().getList().get(i-1).getExtra().getType(), null); + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),0); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("1",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHomeFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHomeFragment.java new file mode 100644 index 0000000..7380d97 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHomeFragment.java @@ -0,0 +1,857 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import static cn.shangyu.gdxzExpert.fragment.HomeNewFragment.GETHOMEMODAL; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.IS_BIG_MUDULE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_EXIT_BIGVERSION; +import static cn.shangyu.gdxzExpert.utils.Url.getapplyList; +import static cn.shangyu.gdxzExpert.utils.Url.unReadList; +import static cn.shangyu.gdxzExpert.utils.Url.urlHtml; + +import android.app.AlertDialog; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.SystemMessageObserver; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.analytics.MobclickAgent; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.MyPatientActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicConsultationActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.GetAppActivityBean; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.bean.HomeModalBean; +import cn.shangyu.gdxzExpert.bean.MessageNumBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.big.activity.BigCoursewareActivity; +import cn.shangyu.gdxzExpert.big.activity.BigMettingActivity; +import cn.shangyu.gdxzExpert.big.activity.BigMyLibraryActivity; +import cn.shangyu.gdxzExpert.big.activity.BigNewSystemMessageActivity; +import cn.shangyu.gdxzExpert.big.activity.BigPublicSearchActivity; +import cn.shangyu.gdxzExpert.big.activity.BigToolActivity; +import cn.shangyu.gdxzExpert.big.activity.BigVideoActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.main.ReminderItem; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GrayManager; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigHomeFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigHomeFragment extends BaseFragment implements OnCallBackFromNet, View.OnClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + View big_top_bar; + private HomeBean homeBean; + private MessageNumBean messageNumBean; + + public BigHomeFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment BigHomeFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigHomeFragment newInstance(String param1, String param2) { + BigHomeFragment fragment = new BigHomeFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + TextView doctor_name; + ImageView pic; + ImageView badgeSysMsg; + LinearLayout l_message,l_change; + TextView tv_top_search; + RelativeLayout big_p,big_g; + TextView big_v,big_c,big_z,big_t,big_b; + private ImageView home_modal,close_modal,home_modal_1; + public static Boolean ismodalshow =false; + public static Boolean ismodalshownow =false; + ImageView iv_red,iv_red1; + Boolean isfirst=true; + @Override + public View onCreateSuccessedView() { + if (view == null) + view = UIUtils.inflate(R.layout.fragment_big_home); + big_top_bar=view.findViewById(R.id.big_top_bar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(big_top_bar).init(); + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = view.findViewById(R.id.ll_load_progress); + tv_load_fail = view.findViewById(R.id.tv_load_fail); + doctor_name=view.findViewById(R.id.doctor_name); + pic=view.findViewById(R.id.pic); + iv_red=view.findViewById(R.id.iv_red); + iv_red1=view.findViewById(R.id.iv_red1); + + l_message=view.findViewById(R.id.l_message); + badgeSysMsg=view.findViewById(R.id.badgeSysMsg); + + if (SharePrefUtil.getBoolean(getActivity(), "isHaveSysMsg", false)) { +// badgeSysMsg.show(); + badgeSysMsg.setVisibility(View.VISIBLE); + } else { +// badgeSysMsg.hide(); + badgeSysMsg.setVisibility(View.GONE); + } + l_message.setOnClickListener(this); + big_g=view.findViewById(R.id.big_g1); + big_g.setOnClickListener(this); + big_v=view.findViewById(R.id.big_v); + big_v.setOnClickListener(this); + big_c=view.findViewById(R.id.big_c); + big_c.setOnClickListener(this); + big_z=view.findViewById(R.id.big_z); + big_z.setOnClickListener(this); + if(SharePrefUtil.getBoolean(getActivity(), Constant.ShowMagazine,true)) + { + big_z.setVisibility(View.VISIBLE); + view.findViewById(R.id.big_zv1).setVisibility(View.VISIBLE); + } + else + { + big_z.setVisibility(View.GONE); + view.findViewById(R.id.big_zv1).setVisibility(View.GONE); + } + big_t=view.findViewById(R.id.big_t); + big_t.setOnClickListener(this); + big_b=view.findViewById(R.id.big_b); + big_b.setOnClickListener(this); + big_p=view.findViewById(R.id.big_p1); + big_p.setOnClickListener(this); + + + tv_top_search=view.findViewById(R.id.tv_top_search); + tv_top_search.setOnClickListener(this); + l_change=view.findViewById(R.id.l_change); + l_change.setOnClickListener(this); + big_top_bar.setOnClickListener(this); + home_modal =view.findViewById(R.id.home_modal); + close_modal =view.findViewById(R.id.close_modal); + home_modal_1=view.findViewById(R.id.home_modal_1); + home_modal.setOnClickListener(this); + close_modal.setOnClickListener(this); +// if(!needshowGuideView()) +// { + getHomeData(); +// } + + getHomeModal(); + getNewPatientList(); + getZengshuInfo(); + registerMsgUnreadInfoObserver(true); + registerSystemMessageObservers(true); + registerObservers(true); + isfirst=true; + return view; + } + public static final int GETAPPACTIVITY= 200; + //福利赠书 + private void getZengshuInfo() { + Map map = new HashMap<>(); + map.put("id","6"); + sendJsonPostParamtoNetSignMD5(Url.getAppActivity,map,GETAPPACTIVITY,this); + } + + @Override + public void onResume() { + super.onResume(); + if(!isfirst) + { + getHomeData(); + getNewPatientList(); + } + + isfirst=false; + } + + /** + * 注册/注销系统消息未读数变化 + */ + private void registerSystemMessageObservers(boolean register) { + NIMClient.getService(SystemMessageObserver.class).observeUnreadCountChange( + sysMsgUnreadCountChangedObserver, register); + } + private Observer sysMsgUnreadCountChangedObserver = (Observer) unreadCount -> { + showRedUnCount(); + }; + private void registerMsgUnreadInfoObserver(boolean register) { + if (register) { + ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback(){ + + @Override + public void onUnreadNumChanged(ReminderItem item) { + showRedUnCount(); + } + }); + } else { + ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback(){ + + @Override + public void onUnreadNumChanged(ReminderItem item) { + + } + }); + } + } + private int patientCount = 0; + private int consultCount = 0; + public void showRedUnCount() + { + patientCount =NIMClient.getService(MsgService.class).getTotalUnreadCount(); + consultCount =0; + NIMClient.getService(MsgService.class).queryRecentContacts() + .setCallback(new RequestCallbackWrapper>() { + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onResult(int code, List recents, Throwable e) { + // recents参数即为最近联系人列表(最近会话列表) + if (code != ResponseCode.RES_SUCCESS || recents == null) { + + } + else + { + Iterator it = recents.iterator(); + while (it.hasNext()) { + RecentContact loadedRecent = it.next(); + if(loadedRecent.getUnreadCount()>0) + { + + if (!PatientSqlManager.isPatient(Constant.Patient_AppKey + loadedRecent.getContactId())) + { + consultCount = loadedRecent.getUnreadCount(); + patientCount=patientCount-loadedRecent.getUnreadCount(); + } + } + + + } + } + if (patientCount < 1) { + showRead("我的患者",false,false); + } else { + + showRead("我的患者",true,false); + } + + if (consultCount<1) { + showRead("公益咨询",false,true); + + } else { + showRead("公益咨询",true,true); + + } + + } + }); + } + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * + */ + private void getNewPatientList() { + String uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + HttpHandler httpHandlerNewPatient = HttpHelper.loadData( + HttpRequest.HttpMethod.POST, getapplyList, params, + new RequestCallBack() { + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onSuccess(ResponseInfo info) { + + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + } + }); + } + /** + * 解析并处理数据 + * + * @param result + */ + + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + int count = 0; + if(bean!=null&&bean.data!=null) + { + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + } + if(count>0) + { + showRead("我的患者",true,true); + } + else + { + showRead("我的患者",false,true); + } + + + + } + private void registerObservers(boolean register) + { + MsgServiceObserve service = NIMClient.getService(MsgServiceObserve.class); + service.observeReceiveMessage(messageReceiverObserver, register); + service.observeRecentContact(messageObserver, register); + } + private Observer> messageReceiverObserver = new Observer>() { + + @Override + public void onEvent(List imMessages) { + showRedUnCount(); + } + }; + + Observer> messageObserver = new Observer>() { + + @Override + public void onEvent(List recentContacts) { + + showRedUnCount(); + } + }; + /** + * 初始四个状态分别为false + * 不分先后顺序 + * 是否有患者申请 + * 患者是否发消息 + * 是否有新的公益咨询 + * 公益咨询是否有新消息 + */ + private Boolean Status1=false; + private Boolean Status2=false; + private Boolean Status3=false; + private Boolean Status4=false; + + /** + * + * + * @param name + * @param + */ + private void showRead(String name,Boolean condition,Boolean need2control) + { + if("我的患者".equals(name)) + { + if(condition) + { + if(need2control) + { + Status1=true; + } + else + { + Status2=true; + } + iv_red.setVisibility(View.VISIBLE); + } + else + { + + if(need2control) + { + + Status1=false; + } + else + { + Status2=false; + } + if(!Status1&&!Status2) + { + iv_red.setVisibility(View.GONE); + } + + } + }else if("公益咨询".equals(name)) + { + if(condition) + { + if(need2control) + { + Status3=true; + } + else + { + Status4=true; + } + iv_red1.setVisibility(View.VISIBLE); + } + else + { + + if(need2control) + { + + Status3=false; + } + else + { + Status4=false; + } + if(!Status3&&!Status4) + { + iv_red1.setVisibility(View.GONE); + } + + } + } + + + + + + + + } + /** + * 获取动态弹框,如年终总结 + */ + private void getHomeModal() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.homeModalurl,map,GETHOMEMODAL,this); + + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + /** + * 获取新首页数据 + */ + private void initData() + { + // 从sp文件里取出资料 + String realName = SharePrefUtil.getString(mActivity, "realName", ""); +// doctor_name.setText("麦麦提图尔洪·阿不都茹苏力麦麦提图尔洪·阿不都茹苏力麦麦提图尔洪·阿不都茹苏力麦麦提图尔洪·阿不都茹苏力麦麦提图尔洪·阿不都茹苏力麦麦提图尔洪·阿不都茹苏力"); + if(doctor_name==null) + return; + if(realName.length()>5) + { + doctor_name.setText(realName); + } + else + { + doctor_name.setText(realName+"专家工作室"); + } + + String photo = SharePrefUtil.getString(mActivity, "photo", null); +// Log.d("gdxzbig",photo); + if (photo != null && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + } + private void getHomeData() { + initData(); + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(unReadList,map,112,this); + sendJsonPostParamtoNetSignMD5(Url.myHomeNew,map,111,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + private HomeModalBean homeModalBean; + private int form;//赠书活动,1:1web_view 2原生弹框 + private String url_path;//赠书活动内容接口 + private String zengshuName; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) { + case GETAPPACTIVITY: + LogUtil.i("GETAPPACTIVITY = "+resultJson); + GetAppActivityBean bean1 = GsonTools.fromGsonToBean(resultJson, GetAppActivityBean.class); + GetAppActivityBean.DataBean data = bean1.getData(); + if (data!=null&&"200".equals(bean1.getCode())){ + + form = data.getForm(); + url_path = data.getUrl_path(); + zengshuName = data.getName(); + Constant.from = form; + Constant.url_path = url_path; + Constant.zengshuName = zengshuName; + Constant.Img = data.getImg(); + } + break; + case GETHOMEMODAL: + + Gson gson1=new Gson(); + homeModalBean=gson1.fromJson(resultJson, HomeModalBean.class); + if(homeModalBean!=null) + { + if(homeModalBean.getData()!=null) + { + if(!StringUtil.isEmpty(homeModalBean.getData().getImg())) + { + ImageLoader + .getInstance() + .displayImage( + urlHtml+homeModalBean.getData().getImg(), + home_modal, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + if(!ismodalshownow) + { + close_modal.setVisibility(View.VISIBLE); + home_modal.setVisibility(View.VISIBLE); + home_modal_1.setVisibility(View.VISIBLE); + ismodalshow=true; + ismodalshownow=true; + + home_modal_1.setClickable(true); + + + + + } + else + { + ismodalshow=false; + } + + + } + + } + } + break; + case 112: + messageNumBean= GsonTools.fromGsonToBean(resultJson, MessageNumBean.class); + if("200".equals(messageNumBean.getCode())) + { + + if(messageNumBean.getData()!=null) + { + if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Welfare())&&Integer.valueOf(messageNumBean.getData().getModule_Welfare())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Order())&&Integer.valueOf(messageNumBean.getData().getModule_Order())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Relation())&&Integer.valueOf(messageNumBean.getData().getModule_Relation())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Comment())&&Integer.valueOf(messageNumBean.getData().getModule_Comment())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + } + else + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", false); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.GONE); +// badgeSysMsg.hide(); + } + + } + } + break; + case 111: + homeBean = GsonTools.fromGsonToBean(resultJson, HomeBean.class); + if ("200".equals(homeBean.getCode())) { + if (homeBean.getData() != null) { + if (homeBean.getData().getExpertDetail() == null) { + handleLogout(false); + return; + } + if(homeBean.getData().getConsult_list()!=null&& + !StringUtil.isEmpty(homeBean.getData().getConsult_list().getCount())) + { + if(Integer.valueOf(homeBean.getData().getConsult_list().getCount())>0) + { + + showRead("公益咨询",true,false); + + + } + else + { + showRead("公益咨询",false,false); + } + } + //本地广播 + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); + Intent intent = new Intent("LOCAL_ACTION1"); + intent.putExtra("issign", homeBean.getData().getSign_in()); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + } + else + { + handleLogout(false); + ToastUtil.showToast(homeBean.getMessage()); + } + break; + } + else + { + handleLogout(false); + ToastUtil.showToast(homeBean.getMessage()); + } + isfirst=false; + + break; + } + } + private void handleLogout(boolean isNotice) { + ToastUtil.showMessage("专家账号信息为空"); + showProgressDialog(getString(R.string.posting_logout)); + /** + * 需要在此判断专家是否登陆,信息是否完整 + * + * */ + startActivity(new Intent(getContext(), LoginNewActivity.class)); + try { + SDKCoreHelper.logout(isNotice); + } catch (Exception e) { + + } + } + + public void changeBig() + { + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new_big, null); + AlertDialog dialog3 = new AlertDialog.Builder( + getActivity(),AlertDialog.THEME_HOLO_LIGHT).create(); + + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog3.show(); + Window window =dialog3.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog3.getWindow().getDecorView()); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + MobclickAgent.onEvent(getActivity(),EXPERT_EXIT_BIGVERSION); + SharePrefUtil.saveBoolean(UIUtils.getContext(),IS_BIG_MUDULE,false); + startActivity(new Intent(getActivity(), MainActivity.class)); + getActivity().finish(); + dialog3.dismiss(); + } + }); + + } + + @Override + public void onClick(View view) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = view.getId(); + if (id == R.id.close_modal) { + close_modal.setVisibility(View.GONE); + home_modal.setVisibility(View.GONE); + home_modal_1.setVisibility(View.GONE); + ismodalshow=false; + } else if (id == R.id.home_modal) { + close_modal.setVisibility(View.GONE); + home_modal.setVisibility(View.GONE); + home_modal_1.setVisibility(View.GONE); + ismodalshow=false; + + if(homeModalBean!=null&&homeModalBean.getData()!=null&&homeModalBean.getData().getUrl_path()!=null) + { + + Intent broadc = new Intent(mActivity, NewsDetailActivity.class); + if(homeModalBean.getData().getUrl_path().contains("?")) + { + broadc.putExtra("url",homeModalBean.getData().getUrl_path()+"&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + else + { + broadc.putExtra("url",homeModalBean.getData().getUrl_path()+"?&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + if(homeModalBean.getData().getName().contains("{{name}}")||homeModalBean.getData().getNote().contains("{{name}}")) + { + broadc.putExtra("newsTitle",homeModalBean.getData().getName().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + broadc.putExtra("summary",homeModalBean.getData().getNote().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + + } + else + { + broadc.putExtra("newsTitle",homeModalBean.getData().getName()); + broadc.putExtra("summary",homeModalBean.getData().getNote()); + } + broadc.putExtra("title","肝胆相照"); + + broadc.putExtra("homemodal","yes"); + + broadc.putExtra("flag", 1); + startActivity(broadc); + } + } else if (id == R.id.l_message) { + startActivity(new Intent(getActivity(), BigNewSystemMessageActivity.class)); + } else if (id == R.id.tv_top_search) { + Intent intentv = new Intent(getActivity(), BigPublicSearchActivity.class); + intentv.setType("video"); + startActivity(intentv); + } else if (id == R.id.l_change) { + changeBig(); + } else if (id == R.id.big_top_bar) { + startActivity(new Intent(mActivity, MyDetailInfoActivity.class)); + } else if (id == R.id.big_p1) { + startActivity(new Intent(mActivity, MyPatientActivity.class)); + } else if (id == R.id.big_g1) { + startActivity(new Intent(mActivity, PublicConsultationActivity.class)); + } else if (id == R.id.big_v) { + startActivity(new Intent(mActivity, BigVideoActivity.class)); + } else if (id == R.id.big_c) { + startActivity(new Intent(mActivity, BigCoursewareActivity.class)); + } else if (id == R.id.big_z) { + startActivity(new Intent(mActivity, BigMyLibraryActivity.class)); + } else if (id == R.id.big_t) { + startActivity(new Intent(mActivity, BigToolActivity.class)); + } else if (id == R.id.big_b) { + startActivity(new Intent(mActivity, BigMettingActivity.class)); + } + } + + + @Override + public void onDestroy() { + super.onDestroy(); + registerMsgUnreadInfoObserver(false); + registerSystemMessageObservers(false); + registerObservers(false); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + + getHomeData(); + getNewPatientList(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHuiMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHuiMessageFragment.java new file mode 100644 index 0000000..d3e7953 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigHuiMessageFragment.java @@ -0,0 +1,388 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import android.graphics.Color; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.big.activity.BigNewSystemMessageActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigHuiMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigHuiMessageFragment extends BaseFragment implements AdapterView.OnItemClickListener, OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + + public BigHuiMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment HuiMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigHuiMessageFragment newInstance(String param1, String param2) { + BigHuiMessageFragment fragment = new BigHuiMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_hui_message, container, false); +// } + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + MessageBean messageBeans; + private BigNewSystemMessageActivity newSystemMessageActivity; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (BigNewSystemMessageActivity) getActivity(); + if(view==null) + view = UIUtils.inflate(R.layout.fragment_hui_message); + ptrLv = view. findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + TextView tv_empty_msg=view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到回复通知哦"); + ll_empty.setBackgroundColor(getResources().getColor(R.color.big_bg)); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("4",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("4",page+""); + + } + }); + ptrLv.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int i) { + switch (i) + { + case SCROLL_STATE_IDLE: + if(t<1) + { + + fadeIn(newSystemMessageActivity.tab); + fadeOut(newSystemMessageActivity.tab1); + + } + else + { + + newSystemMessageActivity.im_bg.setVisibility(View.GONE); + fadeIn(newSystemMessageActivity.tab1); + fadeOut(newSystemMessageActivity.tab); + + } + break; + } + + } + + @Override + public void onScroll(AbsListView absListView, int t0, int t1, int i2) { + t=t0; + + } + }); + initMessage("4",page+""); + return view; + } + int t; + public void fadeIn( View view) { + if (view.getVisibility() == View.VISIBLE) { + return; + } + Animation animation = new AlphaAnimation(0F, 1F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setEnabled(true); + if(view.equals( newSystemMessageActivity.tab)) + { + newSystemMessageActivity.im_bg.setVisibility(View.VISIBLE); + } + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + view.setVisibility(View.VISIBLE); + } + + public void fadeOut( View view) { + if (view.getVisibility() != View.VISIBLE) { + return; + } + + // Since the button is still clickable before fade-out animation + // ends, we disable the button first to block click. + view.setEnabled(false); + Animation animation = new AlphaAnimation(1F, 0F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setVisibility(View.GONE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),3); +// goActivity(messageBeans.getData().getList().get(i-1).getExtra().getType(), null); goActivity(messageBeans.getData().getList().get(i).getExtra().getType(), null); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + public class MessageAdapter extends BaseAdapter + { + private List list; + public MessageAdapter(List messageBeans) { + list=messageBeans; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return list.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder viewHolder; + if (view == null) { + viewHolder = new ViewHolder(); + view = UIUtils.inflate(R.layout.message_back_item_big); + viewHolder.tv_time = view.findViewById(R.id.tv_time); + viewHolder. tv_title = view.findViewById(R.id.tv_title); + viewHolder. tv_content = view.findViewById(R.id.tv_content); + viewHolder.im_head=view.findViewById(R.id.im_head); + + view.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) view.getTag(); + } + viewHolder.tv_time.setText(list.get(i).getCreate_date()); + viewHolder. tv_title.setText(list.get(i).getExtra().getUser_name()); + viewHolder. tv_content.setText(list.get(i).getContent()); + if("1".equals(list.get(i).getIs_read())) + { + viewHolder. tv_title.setTextColor(Color.parseColor("#333333")); + } + else + { + viewHolder. tv_title.setTextColor(Color.parseColor("#EB322D")); + } + if (!TextUtils.isEmpty(list.get(i).getExtra().getUser_photo())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + list.get(i).getExtra().getUser_photo(), viewHolder.im_head); + } + return view; + } + public class ViewHolder{ + TextView tv_time,tv_title,tv_content; + ImageView im_head; + + } + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("4",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigMyFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigMyFragment.java new file mode 100644 index 0000000..9f5bd17 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigMyFragment.java @@ -0,0 +1,1009 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.dip2px; +import static cn.shangyu.gdxzExpert.utils.Url.checkVersion; +import static cn.shangyu.gdxzExpert.utils.Url.getapplyList; +import static cn.shangyu.gdxzExpert.utils.Url.urlHtml; + +import android.app.AlertDialog; +import android.app.AppOpsManager; +import android.app.Dialog; +import android.app.NotificationManager; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.transition.Transition; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.zaaach.transformerslayout.TransformersLayout; +import com.zaaach.transformerslayout.holder.Holder; +import com.zaaach.transformerslayout.holder.TransformersHolderCreator; +import com.zaaach.transformerslayout.listener.OnTransformersItemClickListener; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.MyBankCardActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyFuliCardActivity; +import cn.shangyu.gdxzExpert.activity.MyWelfAreActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.SettingAndHelpActivity; +import cn.shangyu.gdxzExpert.adapter.CellHonorAdapter; +import cn.shangyu.gdxzExpert.adapter.RollAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.AddBonusPointsSuccessBean; +import cn.shangyu.gdxzExpert.bean.GetAppActivityBean; +import cn.shangyu.gdxzExpert.bean.GethonorDetailBean; +import cn.shangyu.gdxzExpert.bean.IconBean; +import cn.shangyu.gdxzExpert.bean.MyNewBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GrayManager; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.MyUserIconUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.pullable.PullableScrollView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigMyFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigMyFragment extends BaseFragment implements View.OnClickListener, OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private ECAlertDialog dilaog2; + + public BigMyFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment BigMyFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigMyFragment newInstance(String param1, String param2) { + BigMyFragment fragment = new BigMyFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + View view; +// RecyclerView recycler_honor; +// HonorAdapter honorAdapter; + ImageView pic; + TextView tv_name; +// TextView patient_num,tv_gongyi,tv_hua,tv_qiandao; + TextView tv_qiandao; + ImageView im_qiandao; + LinearLayout l_sign; + TransformersLayout trans_icon,trans_icon1,trans_icon2,trans_icon3; + RelativeLayout r_banck,r_shezhi,r_fapiao,r_filicard; + private String versionName; + LinearLayout l_g,l_p; +// ,l_h; + Boolean qiandao=false; + private AddBonusPointsSuccessBean addBonusPointsBean; + private static final int GETHONORDETAIL = 202; + private Dialog dialog1; + RelativeLayout im_bg; + private int getisaccount; + RelativeLayout r_z; + ImageView bt_nianzong; + private TextView mTv_new_version; + View big_top_bar; + PullableScrollView sv_pull; + Boolean isscoll=false; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + view = UIUtils.inflate(R.layout.fragment_big_my); + big_top_bar=view.findViewById(R.id.big_top_bar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(big_top_bar).init(); + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = view.findViewById(R.id.ll_load_progress); + tv_load_fail = view.findViewById(R.id.tv_load_fail); + getisaccount = SharePrefUtil.getInt(mActivity, "GETISACCOUNT", 1); + sv_pull=view.findViewById(R.id.sv_pull); + r_z=view.findViewById(R.id.r_z); + im_bg=view.findViewById(R.id.im_bg); + r_fapiao=view.findViewById(R.id.r_fapiao); + r_banck=view.findViewById(R.id.r_banck); + r_filicard=view.findViewById(R.id.r_filicard); + bt_nianzong=view.findViewById(R.id.bt_nianzong); + mTv_new_version = view.findViewById(R.id.tv_new_version);//发现新版本 + if (getisaccount==0){ + r_banck.setVisibility(View.GONE); + r_z.setPadding(0,0,0, CommonUtil.dip2px(getActivity(),10)); + } + r_shezhi=view.findViewById(R.id.r_shezhi); + bt_nianzong.setOnClickListener(this); + r_filicard.setOnClickListener(this); + r_banck.setOnClickListener(this); + r_shezhi.setOnClickListener(this); + r_fapiao.setOnClickListener(this); + l_g=view.findViewById(R.id.l_g); + l_g.setOnClickListener(this); +// l_h=view.findViewById(R.id.l_h); +// l_h.setOnClickListener(this); + l_p=view.findViewById(R.id.l_p); + l_p.setOnClickListener(this); +// recycler_honor=view.findViewById(R.id.recycler_honor); + LinearLayoutManager linearLayoutManagerv = new LinearLayoutManager(getActivity()); + linearLayoutManagerv.setOrientation(LinearLayoutManager.HORIZONTAL); +// recycler_honor.setLayoutManager(linearLayoutManagerv); + pic=view.findViewById(R.id.pic); +// pic.setOnClickListener(this); + tv_name=view.findViewById(R.id.tv_name); +// patient_num=view.findViewById(R.id.patient_num); +// tv_gongyi=view.findViewById(R.id.tv_gongyi); +// tv_hua=view.findViewById(R.id.tv_hua); + tv_qiandao=view.findViewById(R.id.tv_qiandao); + im_qiandao=view.findViewById(R.id.im_qiandao); + l_sign=view.findViewById(R.id.l_sign); + l_sign.setOnClickListener(this); +// tv_qiandao.setOnClickListener(this); + trans_icon=view.findViewById(R.id.trans_icon); + trans_icon1=view.findViewById(R.id.trans_icon1); + trans_icon2=view.findViewById(R.id.trans_icon2); + trans_icon3=view.findViewById(R.id.trans_icon3); + big_top_bar.setOnClickListener(this); + initicon(); + initData(); + getMyData(); + getGroup(); + getzongjie(); + InitLisenter(); + return view; + } + + public void InitLisenter() { + +// big_top_bar.setBackgroundColor(getResources().getColor(R.color.transparent)); +// big_top_bar.getBackground().setAlpha(0); + sv_pull.setOnScrollChangedListener(new PullableScrollView.OnScrollChangedListener() { + + @Override + public void onScrollChanged(ScrollView who, int l, int t, int oldl, + int oldt) { + // TODO Auto-generated method stub + + // define it for scroll height +// if(im_bg.getBackground()!=null) +// { + isscoll=true; + int lHeight = dip2px(64); + + if (t!=0&&t < lHeight) {// = + int progress = (int) (new Float(t) / new Float(lHeight) * 255);// 255 +// Float progress =new Float(t) / new Float(lHeight) ;// 255 +// big_top_bar.setBackgroundColor(Color.parseColor("#22B3CD")); + big_top_bar.getBackground().setAlpha(progress); + } else { + big_top_bar.getBackground().setAlpha(255); + } + +// } + + } + }); + + } + List iconBeans3=new ArrayList<>(); + List iconBeans=new ArrayList<>(); + private void initicon() + { + iconBeans.clear(); + iconBeans.add(new IconBean(R.drawable.hzsh_big,"患者审核")); + iconBeans.add(new IconBean(R.drawable.hzfz_big,"患者分组")); + iconBeans.add(new IconBean(R.drawable.qfxz_big,"群发消息")); + iconBeans.add(new IconBean(R.drawable.sfewm_big,"随访二维码")); + iconBeans.add(new IconBean(R.drawable.czjh_big,"出诊计划")); + trans_icon.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans.get(position).getName()); + } + }) + .load(iconBeans, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + return R.layout.icon_item_big;//第二步使用的布局 + } + }); + List iconBeans1=new ArrayList<>(); + iconBeans1.add(new IconBean(R.drawable.wdsp_big,"我的视频")); + iconBeans1.add(new IconBean(R.drawable.wdkc_big,"我的课程")); + iconBeans1.add(new IconBean(R.drawable.wdxz_big,"我的下载")); + iconBeans1.add(new IconBean(R.drawable.wdsc_big,"我的收藏")); + trans_icon1.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans1.get(position).getName()); + } + }) + .load(iconBeans1, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + return R.layout.icon_item_big;//第二步使用的布局 + } + }); + List iconBeans2=new ArrayList<>(); + + if (getisaccount>0){ + iconBeans2.add(new IconBean(R.drawable.wdzh_big,"我的账户")); + } + + iconBeans2.add(new IconBean(R.drawable.wdjf_big,"我的积分")); + iconBeans2.add(new IconBean(R.drawable.wdfl_big,"我的福利")); + + if (getisaccount>0){ + iconBeans2.add(new IconBean(R.drawable.wdxh_big,"我的鲜花")); + iconBeans2.add(new IconBean(R.drawable.kjmx_big,"课件明细")); + } + + + iconBeans2.add(new IconBean(R.drawable.kcmx_b,"课程明细")); +// iconBeans2.add(new IconBean(R.drawable.sxy_big,"送心意")); + + trans_icon2.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans2.get(position).getName()); + } + }) + .load(iconBeans2, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + + return R.layout.icon_item_big;//第二使用的布局 + } + }); + + iconBeans3.clear(); + iconBeans3.add(new IconBean(R.drawable.wxgl_bg,"微信关联")); + iconBeans3.add(new IconBean(R.drawable.ghsjh_bg,"更换手机号")); + if(isNotificationEnabled()) + { + iconBeans3.add(new IconBean(R.drawable.xxtx_big,"通知已开")); + } + else + { + iconBeans3.add(new IconBean(R.drawable.xxgb_big,"通知已关")); + } + versionName = UpdateVersionUtils.getVersionName(); + iconBeans3.add(new IconBean(R.drawable.fxxbb_big,"V"+ versionName)); + trans_icon3.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans3.get(position).getName()); + } + }) + .load(iconBeans3, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + return R.layout.icon_item_big;//第二使用的布局 + } + }); + } + private void getGroup() { + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(checkVersion,param,101,this); + + } + + private void processDataGrup(String resultJson) { + // TODO Auto-generated method stub + if (resultJson == null) { + return; + } + + String code = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + if("80002".equals(code)) + { + mTv_new_version.setVisibility(View.VISIBLE); + if(trans_icon3!=null&&iconBeans3.size()>3) + { + iconBeans3.get(3).setName("发现新版本"); + iconBeans3.get(3).setImg(R.drawable.fxbb_bg); + trans_icon3.notifyDataChanged(iconBeans3); + + } + + } + else + { + return; + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + } + private void initData() + { + // 从sp文件里取出资料 + String realName = SharePrefUtil.getString(mActivity, "realName", ""); + tv_name.setText(realName); + String photo = SharePrefUtil.getString(mActivity, "photo", null); + if (photo != null && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + } + //年终总结 + private void getzongjie() { + Map map = new HashMap<>(); + map.put("id","8"); + sendJsonPostParamtoNetSignMD5(Url.getAppActivity,map,200,this); + } + + @Override + public void onResume() { + super.onResume(); + getNewPatientList(); + String photo = SharePrefUtil.getString(mActivity, "MyChangePhoto", ""); + if (!StringUtil.isBland(photo) && pic != null) { + ImageLoader + .getInstance() + .displayImage( + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + SharePrefUtil.saveString(mActivity, "MyChangePhoto", null); + } + if(trans_icon3!=null&&iconBeans3.size()>2) + { + if(isNotificationEnabled()) + { + iconBeans3.get(2).setName("通知已开"); + iconBeans3.get(2).setImg(R.drawable.xxtx_big); + } + else + { + iconBeans3.get(2).setName("通知已关"); + iconBeans3.get(2).setImg(R.drawable.xxgb_big); + } + trans_icon3.notifyDataChanged(iconBeans3); + } + + String isbound_wechat = SharePrefUtil.getString(mActivity, "isbound_wechat", ""); + if(!StringUtil.isEmpty(isbound_wechat)&&trans_icon3!=null&&iconBeans3.size()>0) + { + + if(isbound_wechat.equals("yes")) + { + iconBeans3.get(0).setName("微信解绑"); + iconBeans3.get(0).setImg(R.drawable.wxjb_bg); + } + else + { + iconBeans3.get(0).setName("微信关联"); + iconBeans3.get(0).setImg(R.drawable.wxgl_bg); + } + trans_icon3.notifyDataChanged(iconBeans3); + } + else + { + isBoundWechatByUuid(); + } + } + //判断用户是否绑定过微信 + private void isBoundWechatByUuid() { + Map map = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.isBoundWechatByUuid,map,207,this); + } + /** + * 获取新我的数据 + */ + private void getMyData() { +// showProgressDialog("加载中"); + showLoadingProgress(); + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.myNew,map,111,this); + + + } + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * + */ + private void getNewPatientList() { + String uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + HttpHandler httpHandlerNewPatient = HttpHelper.loadData( + HttpRequest.HttpMethod.POST, getapplyList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + int count = 0; + if(bean!=null&&bean.data!=null) + { + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + } + if(count>0) + { + iconBeans.get(0).setRed(true); + trans_icon.notifyDataChanged(iconBeans); + } + else + { + iconBeans.get(0).setRed(false); + trans_icon.notifyDataChanged(iconBeans); + } + + + + } + private void qiandao() + { + showProgressDialog("请稍后"); + Map param = new HashMap<>(); + param.put("score_type","1"); + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, this); + } + private void showSignInDailog() { + // TODO Auto-generated method stub + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_signin_big, null); + TextView tv_gdxzday = (TextView) layout.findViewById(R.id.tv_gdxzday); + TextView tv_totalDay = (TextView) layout.findViewById(R.id.tv_totalDay); + TextView tv_continuous_day = (TextView) layout.findViewById(R.id.tv_continuous_day); + TextView tv_contenttext = (TextView) layout.findViewById(R.id.tv_text1); + ImageView iv_close = (ImageView) layout.findViewById(R.id.iv_close); + tv_gdxzday.setText("今天是我们相识的第"+addBonusPointsBean.getGdxzday()+"天"); + tv_totalDay.setText(addBonusPointsBean.getTotalDay()+""); + tv_continuous_day.setText(addBonusPointsBean.getContinuous_day()+""); + tv_contenttext.setText(addBonusPointsBean.getQuestionAndAnswer().getTitle()); + + final Dialog dialog = new AlertDialog.Builder(getActivity()).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); + GrayManager.getInstance().setLayerGrayType(dialog.getWindow().getDecorView()); + iv_close.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + tv_contenttext.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent broadc = new Intent(mActivity, NewsDetailActivity.class); + broadc.putExtra("url", Url.urlHtml+addBonusPointsBean.getQuestionAndAnswer().getPath()); + broadc.putExtra("newsTitle",addBonusPointsBean.getQuestionAndAnswer().getTitle()); + broadc.putExtra("summary", addBonusPointsBean.getQuestionAndAnswer().getSummary()); + broadc.putExtra("title", "新闻详情"); + broadc.putExtra("flag", 1); + startActivity(broadc); + dialog.dismiss(); + } + }); + + } + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public LoadingPage.ResultState onLoad() { + return null; + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_nianzong) { + if(bean1!=null&&bean1.getData()!=null&&bean1.getData().getUrl_path()!=null) + { + + Intent broadc = new Intent(mActivity, NewsDetailActivity.class); + if(bean1.getData().getUrl_path().contains("?")) + { + broadc.putExtra("url",bean1.getData().getUrl_path()+"&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + else + { + broadc.putExtra("url",bean1.getData().getUrl_path()+"?&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + if(bean1.getData().getName().contains("{{name}}")||bean1.getData().getNote().contains("{{name}}")) + { + broadc.putExtra("newsTitle",bean1.getData().getName().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + broadc.putExtra("summary",bean1.getData().getNote().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + + } + else + { + broadc.putExtra("newsTitle",bean1.getData().getName()); + broadc.putExtra("summary",bean1.getData().getNote()); + } + broadc.putExtra("title","肝胆相照"); + + broadc.putExtra("homemodal","yes"); + + broadc.putExtra("flag", 1); + startActivity(broadc); + } + } else if (id == R.id.l_sign) { + if(qiandao) + { +// startActivity(new Intent(mActivity, PointsMallActivity.class)); + showSigin(); + } + else + { + qiandao(); + } + } else if (id == R.id.l_g) { + startActivity(new Intent(mActivity, MyWelfAreActivity.class)); + } else if (id == R.id.l_p) { + startActivity(new Intent(mActivity, BigPointsMallActivity.class)); + } else if (id == R.id.l_h) { + startActivity(new Intent(mActivity, MyFlowerActivity.class)); + } else if (id == R.id.big_top_bar) { + startActivity(new Intent(mActivity, MyDetailInfoActivity.class)); + } else if (id == R.id.r_banck) { + startActivity(new Intent(mActivity, MyBankCardActivity.class)); + } else if (id == R.id.r_fapiao) { + startActivity(new Intent(mActivity, FaPiaoActivity.class)); + } else if (id == R.id.r_shezhi) { + startActivity(new Intent(mActivity, SettingAndHelpActivity.class)); + } else if (id == R.id.r_filicard) { + startActivity(new Intent(mActivity, MyFuliCardActivity.class)); + } + + } + public void showSigin() + { + dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "今日已签到,每日只能签到一次。\n 请明日继续哦~", "关闭", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + GrayManager.getInstance().setLayerGrayType(dilaog2.getWindow().getDecorView()); + dilaog2.show(); + } + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + MyNewBean myNewBean; +// List honorBeans; + GetAppActivityBean bean1; + List honorlistBeans=new ArrayList<>(); + CellHonorAdapter cellAdapter; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + processDataGrup(resultJson); + break; + case 1: + closeProgressDialog(); + try { + JSONObject jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(optString)) { +// ToastUtil.showMessage(message); + Constant.isRefreshpoint = true;//个人中心界面刷新 + Constant.isSignIn = true; + Gson gson = new Gson(); + addBonusPointsBean = gson.fromJson(resultJson, AddBonusPointsSuccessBean.class); + //点击签到 + showSignInDailog(); + getMyData(); + + }else if("201".equals(optString)){ + showSigin(); +// ToastUtil.showMessage("今日已签到,每日只能签到一次"); + + }else{ + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case 207: + try { + + JSONObject jsonObject1 = new JSONObject(resultJson); + String code1 = jsonObject1.getString("code"); + if ("200".equals(code1)){ + int isBound = jsonObject1.getInt("isBound"); + if (isBound==1){ + if(trans_icon3!=null&&iconBeans3.size()>0) + { + iconBeans3.get(0).setName("微信解绑"); + iconBeans3.get(0).setImg(R.drawable.wxjb_bg); + } + + }else { + iconBeans3.get(0).setName("微信关联"); + iconBeans3.get(0).setImg(R.drawable.wxgl_bg); + } + trans_icon3.notifyDataChanged(iconBeans3); + }else { + ToastUtil.showMessage(jsonObject1.getString("message")); + } + + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + break; + case 200: + bean1 = GsonTools.fromGsonToBean(resultJson, GetAppActivityBean.class); + GetAppActivityBean.DataBean data = bean1.getData(); + if (data!=null&&"200".equals(bean1.getCode())) { + ImageLoader.getInstance().displayImage( + urlHtml + data.getImg(), + bt_nianzong + ); + bt_nianzong.setVisibility(View.VISIBLE); + } + break; + case 111: + dismissLoadingProgress(); +// closeProgressDialog(); + myNewBean= GsonTools.fromGsonToBean(resultJson,MyNewBean.class); + + if("200".equals(myNewBean.getCode())) + { + if(getActivity()==null) + return; + if(myNewBean.getData()!=null) + { + Glide.with(getActivity()) + .asBitmap() + .load(myNewBean.getData().getMyInfoBackGround()) + .into(new SimpleTarget() { + @Override + public void onResourceReady(Bitmap resource, Transition transition) { + Drawable drawable = new BitmapDrawable(resource); + im_bg.setBackground(drawable); +// if(!isscoll) +// { +// +// big_top_bar.setBackground(im_bg.getBackground()); +// big_top_bar.getBackground().setAlpha(255); +// } + } + + }); + +// patient_num.setText(myNewBean.getData().getExpert_apply_num()); +// tv_gongyi.setText(myNewBean.getData().getConsult_total_num()); +// tv_hua.setText(myNewBean.getData().getPing_flowewr_num()); + if("1".equals(myNewBean.getData().getSign_in())) + { + if(!StringUtil.isEmpty(myNewBean.getData().getTotal_points())) +// { +// if(Integer.valueOf(myNewBean.getData().getTotal_points())>=10000) +// { +// BigDecimal decimal= new BigDecimal(Integer.valueOf(myNewBean.getData().getTotal_points())/ 10000.00); +//// BigDecimal decimal= new BigDecimal(15893/ 10000.00); +// BigDecimal newdecimal= decimal.setScale(1, decimal.ROUND_DOWN); +// tv_qiandao.setText(" "+newdecimal.doubleValue()+"万 "); +// } +// else +// { +// if(Integer.valueOf(myNewBean.getData().getTotal_points())<10) +// { +// tv_qiandao.setText(" "+myNewBean.getData().getTotal_points()+" "); +// } +// else +// { +// tv_qiandao.setText(" "+myNewBean.getData().getTotal_points()+" "); +// } +// +// +// } +// +// +// } +// else +// { +// tv_qiandao.setText(" 0 "); +// } +// tv_qiandao.setBackgroundResource(R.drawable.qd_bg); +// tv_qiandao.setTextColor(Color.parseColor("#FFF13632")); + tv_qiandao.setText("已签到"); + Glide.with(getActivity()).load(R.drawable.big_sign_ok).into(im_qiandao); + qiandao=true; + } + else + { + Glide.with(getActivity()).load(R.drawable.big_sign).into(im_qiandao); + tv_qiandao.setText("签到"); +// tv_qiandao.setBackgroundResource(R.drawable.qd1_bg); +// tv_qiandao.setTextColor(Color.parseColor("#ffffff")); + qiandao=false; + } +// int ranking =0; +// if(!StringUtil.isEmpty(myNewBean.getData().getRanking())) +// { +// ranking=Integer.valueOf(myNewBean.getData().getRanking()); +// } + + } + } + else + { + ToastUtil.showToast(myNewBean.getMsg()); + } + break; + case GETHONORDETAIL: + LogUtils.i("GETHONORDETAIL = "+resultJson); + Gson gson2 = new Gson(); + GethonorDetailBean fromJsonBean2= gson2.fromJson(resultJson, GethonorDetailBean.class); + if (fromJsonBean2!=null&&"1".equals(fromJsonBean2.getCode())){ + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.layout_yingxiongbang_new, null); + if (dialog1==null){ + dialog1 = new AlertDialog.Builder(getActivity(),ProgressDialog.THEME_HOLO_LIGHT).create(); + } + RecyclerView re_nickname=layout.findViewById(R.id.re_nickname); + re_nickname.setLayoutManager(new GridLayoutManager(getActivity(), 2, LinearLayoutManager.VERTICAL, false)); +// RelativeLayout rl_nickname = (RelativeLayout) layout.findViewById(R.id.rl_nickname); + TextView tv_context = (TextView) layout.findViewById(R.id.tv_context); +// TextView tv_nick_name1 = (TextView) layout.findViewById(R.id.tv_nick_name1); +// TextView tv_nick_name2 = (TextView) layout.findViewById(R.id.tv_nick_name2); +// TextView tv_nick_name3 = (TextView) layout.findViewById(R.id.tv_nick_name3); +// TextView tv_nick_name4 = (TextView) layout.findViewById(R.id.tv_nick_name4); + ImageView iv_img = (ImageView) layout.findViewById(R.id.iv_img); + View v_close = layout.findViewById(R.id.v_close); + TextView tv_title = (TextView) layout.findViewById(R.id.tv_title); + tv_context.setText(fromJsonBean2.getData().getNote()); + tv_title.setText(fromJsonBean2.getData().getTitle()); + ImageLoader.getInstance().displayImage(Url.urlHtml + fromJsonBean2.getData().getImg(), iv_img); + honorlistBeans.clear(); + if (fromJsonBean2.getData().getHonorlist()!=null){ + honorlistBeans.addAll(fromJsonBean2.getData().getHonorlist()); + cellAdapter = new CellHonorAdapter(getActivity(), honorlistBeans); + re_nickname.setAdapter(cellAdapter); +// rl_nickname.setVisibility(View.VISIBLE); +// if (fromJsonBean2.getData().getHonorlist().size()>0){ +// tv_nick_name1.setVisibility(View.VISIBLE); +// tv_nick_name1.setText(fromJsonBean2.getData().getHonorlist().get(0).getNick_name()); +// } +// if (fromJsonBean2.getData().getHonorlist().size()>1){ +// tv_nick_name2.setVisibility(View.VISIBLE); +// tv_nick_name2.setText(fromJsonBean2.getData().getHonorlist().get(1).getNick_name()); +// } +// if (fromJsonBean2.getData().getHonorlist().size()>2){ +// tv_nick_name3.setVisibility(View.VISIBLE); +// tv_nick_name3.setText(fromJsonBean2.getData().getHonorlist().get(2).getNick_name()); +// } +// if (fromJsonBean2.getData().getHonorlist().size()>3){ +// tv_nick_name4.setVisibility(View.VISIBLE); +// tv_nick_name4.setText(fromJsonBean2.getData().getHonorlist().get(3).getNick_name()); +// } + } + + dialog1.show(); + Window window =dialog1.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog1.getWindow().getDecorView()); + v_close.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog1.dismiss(); + } + }); + + } + break; + } + + } + private void gethonorDetail(String id) { + Map map = new HashMap<>(); + map.put("expert_uuid",SharePrefUtil.getString(mActivity, "uuid", "")); + map.put("id",id); + sendJsonPostParamtoNetSignMD5(Url.gethonorDetail,map,GETHONORDETAIL,this); + } + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + private boolean isNotificationEnabled() { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + //8.0手机以上 + if (((NotificationManager)getActivity(). getSystemService(Context.NOTIFICATION_SERVICE)).getImportance() == NotificationManager.IMPORTANCE_NONE) { + + + return false; + } + } + + String CHECK_OP_NO_THROW = "checkOpNoThrow"; + String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; + + AppOpsManager mAppOps = (AppOpsManager)getActivity(). getSystemService(Context.APP_OPS_SERVICE); + ApplicationInfo appInfo = getActivity(). getApplicationInfo(); + String pkg = getActivity().getPackageName(); + int uid = appInfo.uid; + + Class appOpsClass = null; + + try { + appOpsClass = Class.forName(AppOpsManager.class.getName()); + Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, + String.class); + Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); + + int value = (Integer) opPostNotificationValue.get(Integer.class); + return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); + + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigOrderMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigOrderMessageFragment.java new file mode 100644 index 0000000..c39743c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigOrderMessageFragment.java @@ -0,0 +1,316 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import android.os.Bundle; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MessageAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.big.activity.BigNewSystemMessageActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigOrderMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigOrderMessageFragment extends BaseFragment implements OnCallBackFromNet, AdapterView.OnItemClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + MessageBean messageBeans; + public BigOrderMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment OrderMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigOrderMessageFragment newInstance(String param1, String param2) { + BigOrderMessageFragment fragment = new BigOrderMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_order_message, container, false); +// } +private BigNewSystemMessageActivity newSystemMessageActivity; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (BigNewSystemMessageActivity) getActivity(); + if(view==null) + view = UIUtils.inflate(R.layout.fragment_order_message); + ptrLv = view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty = view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到订单通知哦"); + ll_empty.setBackgroundColor(getResources().getColor(R.color.big_bg)); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("2",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("2",page+""); + } + }); + ptrLv.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int i) { + switch (i) + { + case SCROLL_STATE_IDLE: + if(t<2) + { + + fadeIn(newSystemMessageActivity.tab); + fadeOut(newSystemMessageActivity.tab1); + + } + else + { + + newSystemMessageActivity.im_bg.setVisibility(View.GONE); + fadeIn(newSystemMessageActivity.tab1); + fadeOut(newSystemMessageActivity.tab); + + } + break; + } + + } + + @Override + public void onScroll(AbsListView absListView, int t0, int t1, int i2) { + t=t0; + + } + }); + initMessage("2",1+""); + return view; + } + int t; + public void fadeIn( View view) { + if (view.getVisibility() == View.VISIBLE) { + return; + } + Animation animation = new AlphaAnimation(0F, 1F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setEnabled(true); + if(view.equals( newSystemMessageActivity.tab)) + { + newSystemMessageActivity.im_bg.setVisibility(View.VISIBLE); + } + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + view.setVisibility(View.VISIBLE); + } + + public void fadeOut( View view) { + if (view.getVisibility() != View.VISIBLE) { + return; + } + + // Since the button is still clickable before fade-out animation + // ends, we disable the button first to block click. + view.setEnabled(false); + Animation animation = new AlphaAnimation(1F, 0F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setVisibility(View.GONE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),1); + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("2",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigRecommendFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigRecommendFragment.java new file mode 100644 index 0000000..814ba51 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigRecommendFragment.java @@ -0,0 +1,580 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import static android.content.Context.MODE_PRIVATE; +import static cn.shangyu.gdxzExpert.utils.Url.unReadList; + +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.gongwen.marqueen.MarqueeFactory; +import com.gongwen.marqueen.MarqueeView; +import com.gongwen.marqueen.util.OnItemClickListener; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.ZhiBoActivity; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.bean.MessageNumBean; +import cn.shangyu.gdxzExpert.big.activity.BigCoursewareActivity; +import cn.shangyu.gdxzExpert.big.activity.BigMyLibraryActivity; +import cn.shangyu.gdxzExpert.big.activity.BigNewSystemMessageActivity; +import cn.shangyu.gdxzExpert.big.activity.BigVideoActivity; +import cn.shangyu.gdxzExpert.big.adapter.BigComplexViewMF; +import cn.shangyu.gdxzExpert.big.adapter.BigHuiAdapter; +import cn.shangyu.gdxzExpert.big.adapter.BigKejianAdapter; +import cn.shangyu.gdxzExpert.big.adapter.BigNormalItemView; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.PageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigRecommendFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigRecommendFragment extends BaseFragment implements OnCallBackFromNet, View.OnClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + View big_top_bar; + private HomeBean homeBean; + private MessageNumBean messageNumBean; + + public BigRecommendFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment BigRecommendFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigRecommendFragment newInstance(String param1, String param2) { + BigRecommendFragment fragment = new BigRecommendFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } + TextView doctor_name; + ImageView pic; +// public BadgeView badgeSysMsg; + ImageView badgeSysMsg; + LinearLayout l_message; + RecyclerView recycler_jin,recycler_kejian; + PageNavigationView tab; + private NavigationController navigationController; + RelativeLayout r_huifang,r_kejian,more1,more3; + MarqueeView marqueeView;//直播 + @Override + public View onCreateSuccessedView() { + if (view == null) + view = UIUtils.inflate(R.layout.fragment_big_recommend); + big_top_bar=view.findViewById(R.id.big_top_bar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(big_top_bar).init(); + doctor_name=view.findViewById(R.id.doctor_name); + pic=view.findViewById(R.id.pic); + marqueeView=view.findViewById(R.id.marqueeView); + l_message=view.findViewById(R.id.l_message); + badgeSysMsg=view.findViewById(R.id.badgeSysMsg); +// badgeSysMsg = new BadgeView(getActivity(), l_message); +// badgeSysMsg.setBackgroundResource(R.drawable.unreadwi_dot); +// badgeSysMsg.setBackgroundResource(R.drawable.unread_1dot); + // badgeSysMsg.setBadgeMargin(10, 10); +// badgeSysMsg.setBadgeMargin(20); +// if (SharePrefUtil.getBoolean(getActivity(), "isHaveSysMsg", false)) { +// badgeSysMsg.show(); +// } else { +// badgeSysMsg.hide(); +// } + if (SharePrefUtil.getBoolean(getActivity(), "isHaveSysMsg", false)) { + badgeSysMsg.setVisibility(View.VISIBLE); + } else { + badgeSysMsg.setVisibility(View.GONE); + } + l_message.setOnClickListener(this); + recycler_jin=view.findViewById(R.id.recycler_hui); + LinearLayoutManager linearLayoutManagerv = new LinearLayoutManager(getActivity()); + linearLayoutManagerv.setOrientation(LinearLayoutManager.HORIZONTAL); + r_huifang=view.findViewById(R.id.r_huifang); + recycler_jin.setLayoutManager(linearLayoutManagerv); + //设置item间距,30dp + recycler_jin.addItemDecoration(new SpaceItemDecoration(10,0)); + r_kejian=view.findViewById(R.id.r_kejian); + recycler_kejian=view.findViewById(R.id.recycler_kejian); + tab= view.findViewById(R.id.tab); + big_top_bar.setOnClickListener(this); + more1=view.findViewById(R.id.more1); + more1.setOnClickListener(this); + more3=view.findViewById(R.id.more3); + more3.setOnClickListener(this); + initKejian(); + initData(); + getHomeData(); + isfirst=true; + return view; + } + Boolean isfirst=true; + @Override + public void onResume() { + super.onResume(); + if(!isfirst) + { + getHomeData(); + } + + isfirst=false; + } + + private void initKejian() + { + LinearLayoutManager linearLayoutManagerv1 = new LinearLayoutManager(getActivity()); + linearLayoutManagerv1.setOrientation(LinearLayoutManager.VERTICAL); + recycler_kejian.setLayoutManager(linearLayoutManagerv1); + recycler_kejian.addItemDecoration(new SpaceItemDecoration(0,10)); + //注意这里调用了custom()方法 + navigationController = tab.custom() + .addItem(newItem("实用指南")) + .addItem(newItem("课件分享")) + .build(); + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + + // 选中时触发 + if(index==0) + { + kejianlist.clear(); + kejianlist.addAll(guide_ist); + kejianAdapter.setGuide(true); + } + else + { + kejianlist.clear(); + kejianlist.addAll(gandanfile_list); + kejianAdapter.setGuide(false); + } + kejianAdapter.notifyDataSetChanged(); + } + }); + + + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + String ExpertUuid; + SQLiteDatabase db; + CoursewareBookDownloadSqlManager sq; + private void initData() + { + // 从sp文件里取出资料 + String realName = SharePrefUtil.getString(mActivity, "realName", ""); + if(realName.length()>5) + { + doctor_name.setText(realName); + } + else + { + doctor_name.setText(realName+"专家工作室"); + } +// doctor_name.setText(realName+"专家工作室"); + String photo = SharePrefUtil.getString(mActivity, "photo", null); + if (photo != null && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + ExpertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + + if(getActivity()!=null) + { + db= getActivity().openOrCreateDatabase("courseware.db", MODE_PRIVATE, null); + sq = new CoursewareBookDownloadSqlManager(db); + } + } + + //创建一个Item + private BaseTabItem newItem(String text){ + BigNormalItemView normalItemView = new BigNormalItemView(getActivity()); + normalItemView.initialize(text); + return normalItemView; + } + @RequiresApi(api = Build.VERSION_CODES.N) + private void initzhibo() + { + if(mettingBeans==null||mettingBeans.size()<1) + { + marqueeView.setVisibility(View.GONE); + return; + } + HomeBean.MettingBean mettingBeanicon=mettingBeans.stream() + .filter(customer -> "1".equals(customer.getState())||"2".equals(customer.getState())) + .findAny() + .orElse(null); + if(mettingBeanicon==null) + { + marqueeView.setVisibility(View.GONE); + return; + } + mettingBeansNew.clear(); + Boolean hastoday=false; + + + for(HomeBean.MettingBean mettingBean :mettingBeans) + { + if("1".equals(mettingBean.getState())||"2".equals(mettingBean.getState())) + { + mettingBeansNew.add(mettingBean);//原来的逻辑 +// if(hastoday) +// { +// if(isSameDay(new Date(Long.valueOf(mettingBean.getBegin_date_timestamp())), +// new Date(System.currentTimeMillis()))) +// { +// +// mettingBeansNew.add(mettingBean); +// } +// } +// else +// { +// if(isSameDay(new Date(Long.valueOf(mettingBean.getBegin_date_timestamp())), +// new Date(System.currentTimeMillis()))) +// { +// hastoday=true; +// mettingBeansNew.clear(); +// +// } +// mettingBeansNew.add(mettingBean); +// } + + + } + + } + + marqueeView.setVisibility(View.VISIBLE); + MarqueeFactory marqueeFactory = new BigComplexViewMF(getActivity()); +// if(mettingBeansNew.size()==1) +// { +// mettingBeansNew.add(mettingBeans.get(0)); +// } + marqueeFactory.setData(mettingBeansNew); + marqueeView.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClickListener(RelativeLayout mView, HomeBean.MettingBean mData, int mPosition) { + + Intent intent = new Intent(mActivity, ZhiBoActivity.class); + intent.putExtra("newsTitle", mData.getTitle()); + intent.putExtra("url",mData.getLiveurl()) ; + intent.putExtra("summary", mData.getTitle()); + intent.setType("zhibo"); + startActivity(intent); + } + }); +// marqueeView4.setInAndOutAnim(R.anim.in_top, R.anim.out_bottom); + marqueeView.setMarqueeFactory(marqueeFactory); + if(mettingBeansNew.size()>1) + { + marqueeView.startFlipping(); + } + + } + private void getHomeData() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(unReadList,map,112,this); +// showProgressDialog("加载中"); + sendJsonPostParamtoNetSignMD5(Url.myHomeNew,map,111,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + List mettingBeans=new ArrayList<>(); + List mettingBeansNew=new ArrayList<>(); + private List video_list; + List kejianlist=new ArrayList<>(); + List guide_ist; + List gandanfile_list; + BigHuiAdapter bigHuiAdapter; + BigKejianAdapter kejianAdapter; + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) { + case 112: + messageNumBean= GsonTools.fromGsonToBean(resultJson, MessageNumBean.class); + if("200".equals(messageNumBean.getCode())) + { + + if(messageNumBean.getData()!=null) + { + if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Welfare())&&Integer.valueOf(messageNumBean.getData().getModule_Welfare())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Order())&&Integer.valueOf(messageNumBean.getData().getModule_Order())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Relation())&&Integer.valueOf(messageNumBean.getData().getModule_Relation())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Comment())&&Integer.valueOf(messageNumBean.getData().getModule_Comment())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.VISIBLE); +// badgeSysMsg.show(); + } + else + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", false); + if(badgeSysMsg!=null) + badgeSysMsg.setVisibility(View.GONE); +// badgeSysMsg.hide(); + } + + } + } + break; + case 111: +// closeProgressDialog(); + if(getActivity()==null) + { + return; + } + homeBean = GsonTools.fromGsonToBean(resultJson, HomeBean.class); + if ("200".equals(homeBean.getCode())) { + if (homeBean.getData() != null) { + if (homeBean.getData().getExpertDetail() == null) { + handleLogout(false); + return; + } + mettingBeans.clear(); + mettingBeans.addAll(homeBean.getData().getMeeting_list()); + initzhibo(); + video_list=homeBean.getData().getVideo_list(); + if(video_list==null||video_list.size()<1) + { + r_huifang.setVisibility(View.GONE); + recycler_jin.setVisibility(View.GONE); + } + else + { + r_huifang.setVisibility(View.VISIBLE); + recycler_jin.setVisibility(View.VISIBLE); + } + if(bigHuiAdapter==null) + { + bigHuiAdapter=new BigHuiAdapter(getActivity(),video_list); + recycler_jin.setAdapter(bigHuiAdapter); + bigHuiAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", video_list.get(position).getPolyv_uuid()); + intent.putExtra("uuid", video_list.get(position).getUuid()); + intent.putExtra("note", video_list.get(position).getName()); + intent.putExtra("title", video_list.get(position).getName()); + intent.putExtra("readnum",""); + intent.putExtra("imgpath", video_list.get(position).getImgpath()); + intent.putExtra("public_name",video_list.get(position).getName()); + startActivity(intent); + + } + }); + + } + else + { + bigHuiAdapter.notifyDataSetChanged(); + } + kejianlist.clear(); + guide_ist=homeBean.getData().getGuide_ist(); + gandanfile_list=homeBean.getData().getGandanfile_list(); + if(navigationController!=null&&navigationController.getSelected()==0) + { + kejianlist.addAll(guide_ist); + } + else + { + kejianlist.addAll(gandanfile_list); + } + if(kejianlist!=null&&kejianlist.size()>0|| + guide_ist!=null&&guide_ist.size()>0 + ||gandanfile_list!=null&&gandanfile_list.size()>0) + { + r_kejian.setVisibility(View.VISIBLE); + } + else + { + r_kejian.setVisibility(View.GONE); + } + if(kejianAdapter==null) + { + kejianAdapter=new BigKejianAdapter(getActivity(),kejianlist); + kejianAdapter.setGuide(true); + recycler_kejian.setAdapter(kejianAdapter); + + } + else + { + + kejianAdapter.notifyDataSetChanged(); + } + } + else + { + handleLogout(false); + ToastUtil.showToast(homeBean.getMessage()); + } + isfirst=false; + break; + } + + } + } + private void handleLogout(boolean isNotice) { + ToastUtil.showMessage("专家账号信息为空"); + showProgressDialog(getString(R.string.posting_logout)); + /** + * 需要在此判断专家是否登陆,信息是否完整 + * + * */ + startActivity(new Intent(getContext(), LoginNewActivity.class)); + try { + SDKCoreHelper.logout(isNotice); + } catch (Exception e) { + + } + } + + @Override + public void onClick(View view) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = view.getId(); + if (id == R.id.l_message) { + startActivity(new Intent(getActivity(), BigNewSystemMessageActivity.class)); + } else if (id == R.id.big_top_bar) { + startActivity(new Intent(mActivity, MyDetailInfoActivity.class)); + } else if (id == R.id.more1) { + Intent intent2 = new Intent(mActivity, BigVideoActivity.class); + startActivity(intent2); + } else if (id == R.id.more3) { + if(navigationController.getSelected()==0) + { + startActivity(new Intent(mActivity, BigMyLibraryActivity.class)); + } + else + { + startActivity(new Intent(mActivity, BigCoursewareActivity.class)); + } + } + } + + @Override + public void onStop() { + super.onStop(); + if(mettingBeansNew.size()>1) + { + marqueeView.stopFlipping(); + } + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initData(); + getHomeData(); + } + else + { + if(mettingBeansNew.size()>1) + { + marqueeView.stopFlipping(); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigSuiMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigSuiMessageFragment.java new file mode 100644 index 0000000..d928f77 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/big/fragment/BigSuiMessageFragment.java @@ -0,0 +1,327 @@ +package cn.shangyu.gdxzExpert.big.fragment; + +import android.os.Bundle; +import android.view.View; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MessageAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.big.activity.BigNewSystemMessageActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link BigSuiMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class BigSuiMessageFragment extends BaseFragment implements OnCallBackFromNet, AdapterView.OnItemClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + MessageBean messageBeans; + private BigNewSystemMessageActivity newSystemMessageActivity; + public BigSuiMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment SuiMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static BigSuiMessageFragment newInstance(String param1, String param2) { + BigSuiMessageFragment fragment = new BigSuiMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_sui_message, container, false); +// } + + int t; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (BigNewSystemMessageActivity) getActivity(); + if(view==null) + view = UIUtils.inflate(R.layout.fragment_sui_message); + + ptrLv = view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty = view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到随访通知哦"); + ll_empty.setBackgroundColor(getResources().getColor(R.color.big_bg)); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("3",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("3",page+""); + } + }); + ptrLv.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView absListView, int i) { + switch (i) + { + case SCROLL_STATE_IDLE: + if(t<2) + { + + fadeIn(newSystemMessageActivity.tab); + fadeOut(newSystemMessageActivity.tab1); + + } + else + { + + newSystemMessageActivity.im_bg.setVisibility(View.GONE); + fadeIn(newSystemMessageActivity.tab1); + fadeOut(newSystemMessageActivity.tab); + + } + break; + } + + } + + @Override + public void onScroll(AbsListView absListView, int t0, int t1, int i2) { + t=t0; + + } + }); + initMessage("3",1+""); + return view; + } + public void fadeIn( View view) { + if (view.getVisibility() == View.VISIBLE) { + return; + } + Animation animation = new AlphaAnimation(0F, 1F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setEnabled(true); + if(view.equals( newSystemMessageActivity.tab)) + { + newSystemMessageActivity.im_bg.setVisibility(View.VISIBLE); + } + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + view.setVisibility(View.VISIBLE); + } + + public void fadeOut( View view) { + if (view.getVisibility() != View.VISIBLE) { + return; + } + + // Since the button is still clickable before fade-out animation + // ends, we disable the button first to block click. + view.setEnabled(false); + Animation animation = new AlphaAnimation(1F, 0F); + animation.setDuration(500); + animation.setAnimationListener(new Animation.AnimationListener() { + @Override + public void onAnimationStart(Animation animation) { + + } + + @Override + public void onAnimationEnd(Animation animation) { + view.setVisibility(View.GONE); + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } + }); + view.startAnimation(animation); + } + public int getScrollY() { + View c = ptrLv.getChildAt(0); + if (c == null ) { + return 0; + } + int firstVisiblePosition = ptrLv.getRefreshableView().getFirstVisiblePosition(); + int top = c.getTop(); + return -top + firstVisiblePosition * c.getHeight() ; + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),2); + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("3",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/AbsRecyclerViewAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/AbsRecyclerViewAdapter.java new file mode 100644 index 0000000..59a9d3e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/AbsRecyclerViewAdapter.java @@ -0,0 +1,137 @@ +package cn.shangyu.gdxzExpert.cast; + +import android.content.Context; +import android.view.View; + +import androidx.annotation.IdRes; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.ArrayList; +import java.util.List; + +public abstract class AbsRecyclerViewAdapter extends + RecyclerView.Adapter { + + private Context context; + + protected RecyclerView mRecyclerView; + + private List mListeners = new ArrayList<>(); + + + public AbsRecyclerViewAdapter(RecyclerView recyclerView) { + + this.mRecyclerView = recyclerView; + this.mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + + @Override + public void onScrollStateChanged(RecyclerView rv, int newState) { + + for (RecyclerView.OnScrollListener listener : mListeners) { + listener.onScrollStateChanged(rv, newState); + } + } + + + @Override + public void onScrolled(RecyclerView rv, int dx, int dy) { + + for (RecyclerView.OnScrollListener listener : mListeners) { + listener.onScrolled(rv, dx, dy); + } + } + }); + } + + + public void addOnScrollListener(RecyclerView.OnScrollListener listener) { + + mListeners.add(listener); + } + + + public interface OnItemClickListener { + + void onItemClick(int position, ClickableViewHolder holder); + } + + interface OnItemLongClickListener { + + boolean onItemLongClick(int position, ClickableViewHolder holder); + } + + private OnItemClickListener itemClickListener; + + private OnItemLongClickListener itemLongClickListener; + + + public void setOnItemClickListener(OnItemClickListener listener) { + + this.itemClickListener = listener; + } + + + public void setOnItemLongClickListener(OnItemLongClickListener listener) { + + this.itemLongClickListener = listener; + } + + + public void bindContext(Context context) { + + this.context = context; + } + + + public Context getContext() { + + return this.context; + } + + + @Override + public void onBindViewHolder(final ClickableViewHolder holder, final int position) { + + holder.getParentView().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (itemClickListener != null) { + itemClickListener.onItemClick(position, holder); + } + } + }); + holder.getParentView().setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + return itemLongClickListener != null + && itemLongClickListener.onItemLongClick(position, holder); + } + }); + } + + + public static class ClickableViewHolder extends RecyclerView.ViewHolder { + + private View parentView; + + + public ClickableViewHolder(View itemView) { + + super(itemView); + this.parentView = itemView; + } + + + View getParentView() { + + return parentView; + } + + + @SuppressWarnings("unchecked") + public T $(@IdRes int id) { + + return (T) parentView.findViewById(id); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/IPLVScreencastPlayerListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/IPLVScreencastPlayerListener.java new file mode 100644 index 0000000..a059c8a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/IPLVScreencastPlayerListener.java @@ -0,0 +1,23 @@ +package cn.shangyu.gdxzExpert.cast; + + +import androidx.annotation.Nullable; + +/** + * @author Hoshiiro + */ +public interface IPLVScreencastPlayerListener { + + void onStart(); + + void onPause(); + + void onStop(); + + void onComplete(); + + void onError(String method, int errorCode, @Nullable String errorMsg); + + void onPositionUpdate(long position); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvAllCast.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvAllCast.java new file mode 100644 index 0000000..f9127c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvAllCast.java @@ -0,0 +1,184 @@ +package cn.shangyu.gdxzExpert.cast; + +import com.apowersoft.dlnasender.api.Constant; +import com.apowersoft.dlnasender.api.DLNASender; +import com.apowersoft.dlnasender.api.bean.DeviceInfo; +import com.apowersoft.dlnasender.api.bean.MediaInfo; +import com.apowersoft.dlnasender.api.bean.PositionInfo; +import com.apowersoft.dlnasender.api.listener.DLNADeviceConnectListener; +import com.apowersoft.dlnasender.api.listener.DLNARegistryListener; +import com.apowersoft.dlnasender.api.listener.WXDLNAMethodCallback; +import com.easefun.polyvsdk.log.PolyvCommonLog; + +import java.util.Date; +import java.util.Timer; +import java.util.TimerTask; + + +public class PolyvAllCast { + + private static final String TAG = PolyvAllCast.class.getSimpleName(); + + private IPLVScreencastPlayerListener screencastPlayerListener; + + private Timer getPositionTimer; + + public PolyvAllCast() { + + } + + public void initService(DLNARegistryListener dlnaRegistryListener) { + DLNASender.getInstance().initService(dlnaRegistryListener, new DLNASender.DLNAInitCallback() { + @Override + public void onSuccess(int i) { + PolyvCommonLog.d(TAG, "initService onSuccess"); + } + + @Override + public void onFailure(int code, String msg) { + PolyvCommonLog.d(TAG, "initService onFailure, code = " + code + ", msg = " + msg); + } + }); + } + + public void setPlayerListener(IPLVScreencastPlayerListener listener) { + this.screencastPlayerListener = listener; + } + + public void browse() { + DLNASender.getInstance().startBrowser(); + } + + public void stopBrowse() { + + } + + public void connect(DeviceInfo pInfo, DLNADeviceConnectListener deviceConnectListener) { + DLNASender.getInstance().addCallback(callback); + DLNASender.getInstance().connectDevice(pInfo, deviceConnectListener); + } + + public void disConnect(DeviceInfo pInfo) { + stopGetPositionTimer(); + DLNASender.getInstance().stopDLNA(); + DLNASender.getInstance().removeCallback(callback); + } + + // + + public void playNetMediaWithHeader(MediaInfo mediaInfo) { + DLNASender.getInstance().setDataSource(mediaInfo, mediaInfo.getMediaName()); + DLNASender.getInstance().startDLNACast(); + startGetPositionTimer(); + } + + public void resume() { + DLNASender.getInstance().play(); + } + + public void pause() { + DLNASender.getInstance().pause(); + } + + public void stopPlay() { + stopGetPositionTimer(); + DLNASender.getInstance().stopDLNA(); + } + + public void seekTo(int position) { + DLNASender.getInstance().seekTo(position); + } + + public void setVolume(int percent) { + DLNASender.getInstance().setCurrentVolume(percent); + } + + public void volumeUp() { + DLNASender.getInstance().setVolume(true, 5); + } + + public void volumeDown() { + DLNASender.getInstance().setVolume(false, 5); + } + + // + + // + + private final WXDLNAMethodCallback callback = new WXDLNAMethodCallback() { + private long lastNonZeroTrackDurationSeconds = 0; + @Override + public void onSuccess(String method, Object obj) { + if (screencastPlayerListener == null) { + return; + } + switch (method) { + case Constant.Action.START: + screencastPlayerListener.onStart(); + break; + case Constant.Action.PAUSE: + screencastPlayerListener.onPause(); + break; + case Constant.Action.STOP: + screencastPlayerListener.onStop(); + break; + case Constant.Action.GET_POSITION: + try { + PositionInfo positionInfo = (PositionInfo) obj; + screencastPlayerListener.onPositionUpdate(positionInfo.getTrackElapsedSeconds()); + if (positionInfo.getTrackDurationSeconds() > 0) { + lastNonZeroTrackDurationSeconds = positionInfo.getTrackDurationSeconds(); + } + if (lastNonZeroTrackDurationSeconds > 0 && positionInfo.getTrackElapsedSeconds() >= lastNonZeroTrackDurationSeconds) { + screencastPlayerListener.onComplete(); + } + } catch (Exception e) { + PolyvCommonLog.e(TAG, "onPositionUpdate error" + e.getMessage()); + } + break; + default: + } + } + + // dlna消息发送异常 + private int ERROR_CODE_DLNA_SEND_MESSAGE_ERROR = 4; + // dlna服务异常 + private int ERROR_CODE_DLNA_SERVICE_ERROR = 5; + // dlna状态异常 + private int ERROR_CODE_DLNA_STATUS_ERROR = 6; + // dlna接收端不支持此命令 + private int ERROR_CODE_RECEIVER_NOT_SUPPORT_ACTION = 8; + + @Override + public void onFailure(String method, int errorCode, String errorMsg) { + if (Constant.Action.GET_POSITION.equals(method)) { + return; + } + if (screencastPlayerListener != null) { + screencastPlayerListener.onError(method, errorCode, errorMsg); + } + } + }; + + // + + private void startGetPositionTimer() { + if (getPositionTimer != null) { + getPositionTimer.cancel(); + } + getPositionTimer = new Timer(); + getPositionTimer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + DLNASender.getInstance().getPosition(); + } + }, new Date(), 500); + } + + private void stopGetPositionTimer() { + if (getPositionTimer != null) { + getPositionTimer.cancel(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvIUIUpdateListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvIUIUpdateListener.java new file mode 100644 index 0000000..39ba312 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvIUIUpdateListener.java @@ -0,0 +1,26 @@ +package cn.shangyu.gdxzExpert.cast; + +public interface PolyvIUIUpdateListener { + + int STATE_SEARCH_SUCCESS = 1; + int STATE_SEARCH_ERROR = 2; + int STATE_SEARCH_NO_RESULT = 3; + int STATE_CONNECT_SUCCESS = 10; + int STATE_DISCONNECT = 11;// 连接断开 + int STATE_CONNECT_FAILURE = 12;// 连接失败 + int STATE_PLAY = 20; + int STATE_PAUSE = 21; + int STATE_COMPLETION = 22; + int STATE_STOP = 23; + int STATE_SEEK = 24; + int STATE_POSITION_UPDATE = 25; + int STATE_PLAY_ERROR = 26; + int STATE_LOADING = 27; + int STATE_INPUT_SCREENCODE = 28; + int RELEVANCE_DATA_UNSUPPORT = 29; + + void onUpdateState(int state, Object object); + + void onUpdateText(String msg); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvNetworkUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvNetworkUtils.java new file mode 100644 index 0000000..b3cf140 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvNetworkUtils.java @@ -0,0 +1,261 @@ +package cn.shangyu.gdxzExpert.cast; + +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.wifi.WifiConfiguration; +import android.net.wifi.WifiInfo; +import android.net.wifi.WifiManager; +import android.telephony.TelephonyManager; + +import java.util.List; + +public class PolyvNetworkUtils { + + private PolyvNetworkUtils() { + } + + public static final int NETWORK_WIFI = 1; // wifi network + public static final int NETWORK_4G = 4; // "4G" networks + public static final int NETWORK_3G = 3; // "3G" networks + public static final int NETWORK_2G = 2; // "2G" networks + public static final int NETWORK_UNKNOWN = 5; // unknown network + public static final int NETWORK_NO = -1; // no network + + private static final int NETWORK_TYPE_GSM = 16; + private static final int NETWORK_TYPE_TD_SCDMA = 17; + private static final int NETWORK_TYPE_IWLAN = 18; + + /** + * 打开网络设置界面 + *

3.0以下打开设置界面

+ * + * @param context 上下文 + */ + public static void openWirelessSettings(Context context) { + if (android.os.Build.VERSION.SDK_INT > 10) { + context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); + } else { + context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)); + } + } + + /** + * 获取活动网路信息 + * + * @param context 上下文 + * @return NetworkInfo + */ + private static NetworkInfo getActiveNetworkInfo(Context context) { + ConnectivityManager cm = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + return cm != null ? cm.getActiveNetworkInfo() : null; + } + + /** + * 判断网络是否可用 + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ */ + public static boolean isAvailable(Context context) { + NetworkInfo info = getActiveNetworkInfo(context); + return info != null && info.isAvailable(); + } + + /** + * 判断网络是否连接 + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return true: 是
false: 否 + */ + public static boolean isConnected(Context context) { + NetworkInfo info = getActiveNetworkInfo(context); + return info != null && info.isConnected(); + } + + /** + * 判断网络是否是4G + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return true: 是
false: 不是 + */ + public static boolean is4G(Context context) { + NetworkInfo info = getActiveNetworkInfo(context); + return info != null && info.isAvailable() && info.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE; + } + + /** + * 判断wifi是否连接状态 + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return true: 连接
false: 未连接 + */ + public static boolean isWifiConnected(Context context) { + ConnectivityManager cm = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + //cm.getActiveNetworkInfo may null + return cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI; + } + + /** + * 获取移动网络运营商名称 + *

如中国联通、中国移动、中国电信

+ * + * @param context 上下文 + * @return 移动网络运营商名称 + */ + public static String getNetworkOperatorName(Context context) { + TelephonyManager tm = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + return tm != null ? tm.getNetworkOperatorName() : null; + } + + /** + * 获取移动终端类型 + * + * @param context 上下文 + * @return 手机制式 + *
    + *
  • PHONE_TYPE_NONE : 0 手机制式未知
  • + *
  • PHONE_TYPE_GSM : 1 手机制式为GSM,移动和联通
  • + *
  • PHONE_TYPE_CDMA : 2 手机制式为CDMA,电信
  • + *
  • PHONE_TYPE_SIP : 3
  • + *
+ */ + public static int getPhoneType(Context context) { + TelephonyManager tm = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + return tm != null ? tm.getPhoneType() : -1; + } + + + /** + * 获取当前的网络类型(WIFI,2G,3G,4G) + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return 网络类型 + *
    + *
  • NETWORK_WIFI = 1;
  • + *
  • NETWORK_4G = 4;
  • + *
  • NETWORK_3G = 3;
  • + *
  • NETWORK_2G = 2;
  • + *
  • NETWORK_UNKNOWN = 5;
  • + *
  • NETWORK_NO = -1;
  • + *
+ */ + public static int getNetWorkType(Context context) { + int netType = NETWORK_NO; + NetworkInfo info = getActiveNetworkInfo(context); + if (info != null && info.isAvailable()) { + + if (info.getType() == ConnectivityManager.TYPE_WIFI) { + netType = NETWORK_WIFI; + } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) { + switch (info.getSubtype()) { + + case TelephonyManager.NETWORK_TYPE_GSM: + case TelephonyManager.NETWORK_TYPE_GPRS: + case TelephonyManager.NETWORK_TYPE_CDMA: + case TelephonyManager.NETWORK_TYPE_EDGE: + case TelephonyManager.NETWORK_TYPE_1xRTT: + case TelephonyManager.NETWORK_TYPE_IDEN: + netType = NETWORK_2G; + break; + + case TelephonyManager.NETWORK_TYPE_TD_SCDMA: + case TelephonyManager.NETWORK_TYPE_EVDO_A: + case TelephonyManager.NETWORK_TYPE_UMTS: + case TelephonyManager.NETWORK_TYPE_EVDO_0: + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_HSPA: + case TelephonyManager.NETWORK_TYPE_EVDO_B: + case TelephonyManager.NETWORK_TYPE_EHRPD: + case TelephonyManager.NETWORK_TYPE_HSPAP: + netType = NETWORK_3G; + break; + + case TelephonyManager.NETWORK_TYPE_IWLAN://monitor is this... + case TelephonyManager.NETWORK_TYPE_LTE: + netType = NETWORK_4G; + break; + default: + + String subtypeName = info.getSubtypeName(); + if (subtypeName.equalsIgnoreCase("TD-SCDMA") + || subtypeName.equalsIgnoreCase("WCDMA") + || subtypeName.equalsIgnoreCase("CDMA2000")) { + netType = NETWORK_3G; + } else { + netType = NETWORK_UNKNOWN; + } + break; + } + } else { + netType = NETWORK_UNKNOWN; + } + } + return netType; + } + + /** + * 获取当前的网络类型(WIFI,2G,3G,4G) + *

依赖上面的方法

+ * + * @param context 上下文 + * @return 网络类型名称 + *
    + *
  • NETWORK_WIFI
  • + *
  • NETWORK_4G
  • + *
  • NETWORK_3G
  • + *
  • NETWORK_2G
  • + *
  • NETWORK_UNKNOWN
  • + *
  • NETWORK_NO
  • + *
+ */ + public static String getNetWorkTypeName(Context context) { + switch (getNetWorkType(context)) { + case NETWORK_WIFI: + return "NETWORK_WIFI"; + case NETWORK_4G: + return "NETWORK_4G"; + case NETWORK_3G: + return "NETWORK_3G"; + case NETWORK_2G: + return "NETWORK_2G"; + case NETWORK_NO: + return "NETWORK_NO"; + default: + return "NETWORK_UNKNOWN"; + } + } + + public static String getWIFISSID(Context context) { + String ssid = ""; + WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + if (null != wifiManager) { + WifiInfo wifiInfo = wifiManager.getConnectionInfo(); + if (null != wifiInfo) { + int networkId = wifiInfo.getNetworkId(); + ssid = "".equals(wifiInfo.getSSID()) ? "" : wifiInfo.getSSID(); + List wifiConfigurations = wifiManager.getConfiguredNetworks(); + if (null != wifiConfigurations) { + for (WifiConfiguration wifiConfiguration : wifiConfigurations) { + if (null != wifiConfiguration && wifiConfiguration.networkId == networkId) { + ssid = wifiConfiguration.SSID; + break; + } + } + } + } + } + if (null != ssid && ssid.contains("\"")) { + ssid = ssid.replace("\"", ""); + } + return ssid; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastDeviceListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastDeviceListAdapter.java new file mode 100644 index 0000000..efe2b1e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastDeviceListAdapter.java @@ -0,0 +1,108 @@ +package cn.shangyu.gdxzExpert.cast; + + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import com.apowersoft.dlnasender.api.bean.DeviceInfo; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; + +public class PolyvScreencastDeviceListAdapter extends AbsRecyclerViewAdapter { + private List mDatas; + private OnItemClickListener mItemClickListener; + private DeviceInfo mSelectInfo; + private int mLayoutId; + + public PolyvScreencastDeviceListAdapter(RecyclerView recyclerView, int layoutId) { + super(recyclerView); + mDatas = new ArrayList<>(); + mLayoutId = layoutId; + } + + public void setOnItemClickListener(OnItemClickListener l) { + this.mItemClickListener = l; + } + + public void updateDatas(List infos) { + if (null != infos) { + mDatas.clear(); + mDatas.addAll(infos); + notifyDataSetChanged(); + } + } + + public DeviceInfo getSelectInfo() { + return mSelectInfo; + } + + public void setSelectInfo(DeviceInfo selectInfo) { + mSelectInfo = selectInfo; + } + + private View.OnClickListener mOnItemClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = (int) v.getTag(R.id.id_position); + DeviceInfo info = (DeviceInfo) v.getTag(R.id.id_info); + if (null != mItemClickListener) { + mItemClickListener.onClick(position, info); + } + } + }; + + @Override + public ClickableViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + bindContext(parent.getContext()); + return new ItemViewHolder(LayoutInflater.from(getContext()). + inflate(mLayoutId, parent, false)); + } + + @Override + public void onBindViewHolder(ClickableViewHolder holder, int position) { + super.onBindViewHolder(holder, position); + if (holder instanceof ItemViewHolder) { + ItemViewHolder itemViewHolder = (ItemViewHolder) holder; + DeviceInfo info = mDatas.get(position); + if (null == info) { + return; + } + String item = info.getName()/* + " isOnLine:" + info.isOnLine() + " uid:" + info.getUid() + " types:" + info.getTypes()*/; + itemViewHolder.tv_device_name.setText(item); + if (info == mSelectInfo || + (mSelectInfo != null && info.getMediaID() != null && info.getMediaID().equals(mSelectInfo.getMediaID()))) { + itemViewHolder.tv_device_name.setSelected(true); + } else { + itemViewHolder.tv_device_name.setSelected(false); + } + itemViewHolder.tv_device_name.setTag(R.id.id_position, position); + itemViewHolder.tv_device_name.setTag(R.id.id_info, info); + itemViewHolder.tv_device_name.setOnClickListener(mOnItemClickListener); + } + } + + @Override + public int getItemCount() { + return null == mDatas ? 0 : mDatas.size(); + } + + public class ItemViewHolder extends AbsRecyclerViewAdapter.ClickableViewHolder { + TextView tv_device_name; + + public ItemViewHolder(View itemView) { + super(itemView); + tv_device_name = $(R.id.tv_device_name); + } + } + + public interface OnItemClickListener { + void onClick(int position, DeviceInfo pInfo); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastManager.java new file mode 100644 index 0000000..5fd8f46 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/PolyvScreencastManager.java @@ -0,0 +1,340 @@ +package cn.shangyu.gdxzExpert.cast; + +import android.app.Application; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +import androidx.annotation.Nullable; + +import com.apowersoft.dlnasender.api.DLNASender; +import com.apowersoft.dlnasender.api.bean.DeviceInfo; +import com.apowersoft.dlnasender.api.bean.MediaInfo; +import com.apowersoft.dlnasender.api.listener.DLNADeviceConnectListener; +import com.apowersoft.dlnasender.api.listener.DLNARegistryListener; +import com.apowersoft.dlnasender.api.listener.WxDlnaSenderInitCallback; +import com.easefun.polyvsdk.log.PolyvCommonLog; + +import java.util.List; + +/** + * 投屏封装工具类 + * 封装了投屏的基本使用,开发者在使用投屏时可直接集成 + */ +public class PolyvScreencastManager { + + private static final String TAG = PolyvScreencastManager.class.getSimpleName(); + + private volatile static PolyvScreencastManager INSTANCE; + private UIHandler mUIHandler; + private PolyvAllCast mAllCast; + // 数据 + private List mInfos; + private DeviceInfo connectedDeviceInfo; + private DeviceInfo lastConnectedDeviceInfo; + + // 监听器 + private DLNADeviceConnectListener mActivityConnectListener; + + public static PolyvScreencastManager getInstance(Context context) { + if (INSTANCE == null) { + synchronized (PolyvScreencastManager.class) { + if (INSTANCE == null) { + INSTANCE = new PolyvScreencastManager(); + } + } + } + return INSTANCE; + } + + public static void init(Application application, String appId, String appSecret, final WxDlnaSenderInitCallback initCallback) { + DLNASender.init(application, appId, appSecret, new WxDlnaSenderInitCallback() { + @Override + public void onSuccess() { + if (initCallback != null) { + initCallback.onSuccess(); + } + } + + @Override + public void onFail(int i, String s) { + if (initCallback != null) { + initCallback.onFail(i, s); + } + } + }); + } + + private PolyvScreencastManager() { + mUIHandler = new UIHandler(Looper.getMainLooper()); + mAllCast = new PolyvAllCast(); + } + + public void setUIUpdateListener(PolyvIUIUpdateListener pUIUpdateListener) { + mUIHandler.setUIUpdateListener(pUIUpdateListener); + } + + public void setActivityConnectListener(DLNADeviceConnectListener connectListener) { + this.mActivityConnectListener = connectListener; + } + + public List getInfos() { + return mInfos; + } + + public List getConnectInfos() { + return mInfos; + } + + public void initService() { + mAllCast.initService(dlnaRegistryListener); + mAllCast.setPlayerListener(mPlayerListener); + } + + public void browse() { + mAllCast.browse(); + callOnDeviceChange(); + } + + public void stopBrowse() { + mAllCast.stopBrowse(); + } + + public void connect(DeviceInfo info) { + mAllCast.connect(info, dlnaDeviceConnectListener); + connectedDeviceInfo = info; + lastConnectedDeviceInfo = info; + } + + public DeviceInfo getLastConnectedDeviceInfo() { + return lastConnectedDeviceInfo; + } + + public void disConnect(DeviceInfo info) { + mAllCast.disConnect(info); + connectedDeviceInfo = null; + } + + public void resume() { + mAllCast.resume(); + } + + public void pause() { + mAllCast.pause(); + } + + public void stopPlay(){ + mAllCast.stopPlay(); + } + + public void seekTo(int progress) { + mAllCast.seekTo(progress); + } + + public void setVolume(int percent) { + mAllCast.setVolume(percent); + } + + public void volumeUp() { + mAllCast.volumeUp(); + } + + public void volumeDown() { + mAllCast.volumeDown(); + } + + private Message buildTextMessage(String text) { + Message message = Message.obtain(); + message.what = UIHandler.MSG_TEXT; + message.obj = text; + return message; + } + + private Message buildStateMessage(int state) { + return buildStateMessage(state, null); + } + + private Message buildStateMessage(int state, Object object) { + Message message = Message.obtain(); + message.what = UIHandler.MSG_STATE; + message.arg1 = state; + if (null != object) { + message.obj = object; + } + return message; + } + + // + + private DLNARegistryListener dlnaRegistryListener = new DLNARegistryListener() { + @Override + public void onDeviceChanged(List list) { + mInfos = list; + callOnDeviceChange(); + } + }; + + private void callOnDeviceChange() { + if (mUIHandler != null) { + if (mInfos == null || mInfos.isEmpty()) { + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_SEARCH_NO_RESULT)); + } else { + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_SEARCH_SUCCESS)); + } + } + } + + private DLNADeviceConnectListener dlnaDeviceConnectListener = new DLNADeviceConnectListener() { + @Override + public void onConnect(final DeviceInfo deviceInfo, final int errorCode) { + if (mUIHandler != null) { + final String text = deviceInfo.getName() + "连接成功"; + mUIHandler.sendMessage(buildTextMessage(text)); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_CONNECT_SUCCESS, text)); + mUIHandler.post(new Runnable() { + @Override + public void run() { + if (mActivityConnectListener != null) { + mActivityConnectListener.onConnect(deviceInfo, errorCode); + } + } + }); + } + } + + @Override + public void onDisconnect(final DeviceInfo deviceInfo, final int errorCode) { + if (mUIHandler != null) { + final String text = deviceInfo.getName() + "连接断开"; + mUIHandler.sendMessage(buildTextMessage(text)); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_DISCONNECT, text)); + mUIHandler.post(new Runnable() { + @Override + public void run() { + if (mActivityConnectListener != null) { + mActivityConnectListener.onDisconnect(deviceInfo, errorCode); + } + } + }); + } + } + }; + + /** + * 投屏播放监听 + */ + private IPLVScreencastPlayerListener mPlayerListener = new IPLVScreencastPlayerListener() { + + @Override + public void onStart() { + PolyvCommonLog.d(TAG, "onStart:"); + if (mUIHandler != null) { + mUIHandler.sendMessage(buildTextMessage("开始播放")); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_PLAY)); + } + } + + @Override + public void onPause() { + PolyvCommonLog.d(TAG, "onPause"); + if (mUIHandler != null) { + mUIHandler.sendMessage(buildTextMessage("暂停播放")); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_PAUSE)); + } + } + + @Override + public void onStop() { + PolyvCommonLog.d(TAG, "onStop"); + if (mUIHandler != null) { + mUIHandler.sendMessage(buildTextMessage("播放结束")); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_STOP)); + } + } + + @Override + public void onComplete() { + PolyvCommonLog.d(TAG, "onComplete"); + if (mUIHandler != null) { + mUIHandler.sendMessage(buildTextMessage("播放结束")); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_COMPLETION)); + } + } + + @Override + public void onError(String method, int errorCode, @Nullable String errorMsg) { + mUIHandler.sendMessage(buildTextMessage(errorMsg)); + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_PLAY_ERROR, errorMsg)); + } + + /** + * 进度更新回调 + * + * @param position 当前进度 + */ + @Override + public void onPositionUpdate(long position) { + PolyvCommonLog.d(TAG, "onPositionUpdate position:" + position); + if (mUIHandler != null) { + mUIHandler.sendMessage(buildStateMessage(PolyvIUIUpdateListener.STATE_POSITION_UPDATE, position)); + } + } + + }; + // + + + + private static class UIHandler extends Handler { + + private static final int MSG_TEXT = 1; + private static final int MSG_STATE = 2; + private PolyvIUIUpdateListener mUIUpdateListener; + + private UIHandler(Looper pMainLooper) { + super(pMainLooper); + } + + private void setUIUpdateListener(PolyvIUIUpdateListener pUIUpdateListener) { + mUIUpdateListener = pUIUpdateListener; + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case MSG_TEXT: + String text = (String) msg.obj; + if (null != mUIUpdateListener) { + mUIUpdateListener.onUpdateText(text); + } + break; + case MSG_STATE: + int state = msg.arg1; + Object obj = msg.obj; + if (null != mUIUpdateListener) { + mUIUpdateListener.onUpdateState(state, obj); + } + break; + } + } + + } + + // + + public void playNetMedia(MediaInfo mediaInfo) { + mAllCast.playNetMediaWithHeader(mediaInfo); + } + // + + public void release() { + mAllCast.stopBrowse(); + mAllCast.stopPlay(); + if (connectedDeviceInfo != null) { + disConnect(connectedDeviceInfo); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastSearchLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastSearchLayout.java new file mode 100644 index 0000000..97e0482 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastSearchLayout.java @@ -0,0 +1,703 @@ +package cn.shangyu.gdxzExpert.cast.widget; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Configuration; +import android.net.ConnectivityManager; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Base64; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + +import com.apowersoft.dlnasender.api.Constant; +import com.apowersoft.dlnasender.api.bean.DeviceInfo; +import com.apowersoft.dlnasender.api.bean.MediaInfo; +import com.apowersoft.dlnasender.api.listener.DLNADeviceConnectListener; +import com.easefun.polyvsdk.Video; +import com.easefun.polyvsdk.log.PolyvCommonLog; +import com.easefun.polyvsdk.screencast.PolyvScreencastHelper; +import com.easefun.polyvsdk.video.PolyvVideoView; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.cast.PolyvIUIUpdateListener; +import cn.shangyu.gdxzExpert.cast.PolyvNetworkUtils; +import cn.shangyu.gdxzExpert.cast.PolyvScreencastDeviceListAdapter; +import cn.shangyu.gdxzExpert.cast.PolyvScreencastManager; + +public class PolyvScreencastSearchLayout extends FrameLayout implements View.OnClickListener { + private static final String TAG = PolyvScreencastSearchLayout.class.getSimpleName(); + private static final String WIFI_AP_STATE_CHANGED_ACTION = "android.net.wifi.WIFI_AP_STATE_CHANGED"; + private OnVisibilityChangedListener onVisibilityChangedListener; + private LinearLayout ll_search; + private TextView tv_cancel, tv_wifi_name; + private ImageView iv_refresh, iv_wifi_icon; + private RecyclerView rv_devices; + private PolyvScreencastDeviceListAdapter screencastDeviceListAdapter; + private Runnable runnable; + //screencast + private PolyvScreencastManager screencastManager; + private NetworkReceiver networkReceiver; + private PolyvScreencastStatusLayout screencastStatusLayout; + private boolean isFirstBrowse; + private UIHandler delayHandler; + private int currentCastPosition = -1;//当前投屏进度 + + private boolean isLandLayout; + + private static class UIHandler extends Handler { + private WeakReference reference; + + UIHandler(PolyvScreencastSearchLayout rf) { + reference = new WeakReference<>(rf); + } + + @Override + public void handleMessage(Message msg) { + PolyvScreencastSearchLayout searchLayout = reference.get(); + if (searchLayout == null) { + return; + } + switch (msg.what) { + case PolyvIUIUpdateListener.STATE_SEARCH_SUCCESS: + searchLayout.updateBrowseAdapter(); + break; + } + super.handleMessage(msg); + } + } + + public PolyvScreencastSearchLayout(@NonNull Context context) { + this(context, null); + } + + public PolyvScreencastSearchLayout(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvScreencastSearchLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(); + registerNetworkReceiver(); + refreshWifiName(); + } + + public void setScreencastStatusLayout(PolyvScreencastStatusLayout screencastStatusLayout) { + this.screencastStatusLayout = screencastStatusLayout; + } + + private Context getApplicationContext() { + return getContext().getApplicationContext(); + } + + private void initView() { + + isLandLayout = getAlpha() != 1; + LayoutInflater.from(getContext()).inflate(!isLandLayout ? R.layout.polyv_screencast_search_layout : R.layout.polyv_screencast_search_layout_new, this); + setAlpha(1); + ll_search = (LinearLayout) findViewById(R.id.ll_search); + iv_wifi_icon = (ImageView) findViewById(R.id.iv_wifi_icon); + tv_wifi_name = (TextView) findViewById(R.id.tv_wifi_name); + iv_refresh = (ImageView) findViewById(R.id.iv_refresh); + iv_refresh.setOnClickListener(this); + tv_cancel = (TextView) findViewById(R.id.tv_cancel); + if (tv_cancel != null) { + tv_cancel.setOnClickListener(this); + } + rv_devices = (RecyclerView) findViewById(R.id.rv_devices); + screencastDeviceListAdapter = new PolyvScreencastDeviceListAdapter(rv_devices, !isLandLayout ? R.layout.polyv_recyclerview_device_item : R.layout.polyv_recyclerview_device_item); + rv_devices.setAdapter(screencastDeviceListAdapter); + screencastDeviceListAdapter.setOnItemClickListener(new PolyvScreencastDeviceListAdapter.OnItemClickListener() { + @Override + public void onClick(int position, final DeviceInfo info) { + //检测是否点击的相同的设备 + List connectInfos = null; + if (null != screencastManager) { + connectInfos = screencastManager.getConnectInfos(); + } + if (null != screencastManager && null != connectInfos && !connectInfos.isEmpty()) { + for (DeviceInfo deviceInfo : connectInfos) { + if (deviceInfo != null && deviceInfo.getMediaID() != null && deviceInfo.getMediaID().equals(info.getMediaID())) { + if (!screencastStatusLayout.isShown()) { + screencastStatusLayout.show(deviceInfo); + final int currentBitrate = Math.max(1, screencastStatusLayout.getCurrentPlayBitrate()); + loadInfoAndPlay(currentBitrate); + } + return; + } + } + } + + //重制投屏进度记录的状态 + currentCastPosition = -1; + + removeCallbacks(runnable); + + stop(); + disConnect(); + postDelayed(new Runnable() { + @Override + public void run() { + // 延迟连接,避免在连接成功后返回stop回调 + connect(info); + screencastDeviceListAdapter.setSelectInfo(info); + screencastDeviceListAdapter.notifyDataSetChanged(); + + screencastStatusLayout.show(info); + hide(true); + } + }, 200); + } + }); + delayHandler = new UIHandler(this); + } + + public void setScreencastManager(PolyvScreencastManager screencastManager) { + this.screencastManager = screencastManager; + } + + private void registerNetworkReceiver() { + networkReceiver = new NetworkReceiver(this); + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(WIFI_AP_STATE_CHANGED_ACTION); + intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + getContext().registerReceiver(networkReceiver, intentFilter); + } + + public void destroy() { + if (null != networkReceiver) { + getContext().unregisterReceiver(networkReceiver); + networkReceiver = null; + } + } + + public int getCurrentCastPosition() { + return currentCastPosition; + } + + public void show() { + Log.d("gdxz","show()1" ); + if (getVisibility() == View.VISIBLE) + return; + Log.d("gdxz","show()" ); + screencastManager.setUIUpdateListener(iUIUpdateListener); + screencastManager.setActivityConnectListener(iConnectListener); + setVisibility(View.VISIBLE); + if (onVisibilityChangedListener != null) { + onVisibilityChangedListener.onVisibilityChanged(this, View.VISIBLE); + } + //搜索设备 + PolyvScreencastManager.getInstance(getContext()).initService(); + browse(); + } + + public void hide(boolean isStopBrowse) { + if (getVisibility() != View.VISIBLE) + return; + setVisibility(View.GONE); + if (onVisibilityChangedListener != null) { + onVisibilityChangedListener.onVisibilityChanged(this, View.GONE); + } + if (isStopBrowse) { + stopBrowse(); + } + } + + public void stop() { + List connectInfos = null; + if (null != screencastManager) { + connectInfos = screencastManager.getConnectInfos(); + } + if (null != screencastManager && null != connectInfos && !connectInfos.isEmpty()) { + PolyvCommonLog.d(TAG, "stop click"); + screencastManager.stopPlay(); + } +// else { +// PolyvToastUtil.show(getApplicationContext(), "请先连接设备"); +// } + } + + public void volumeUp() { + List connectInfos = null; + if (null != screencastManager) { + connectInfos = screencastManager.getConnectInfos(); + } + if (null != screencastManager && null != connectInfos && !connectInfos.isEmpty()) { + PolyvCommonLog.d(TAG, "volumeUp click"); + screencastManager.volumeUp(); + } else { + Toast.makeText(getContext(), "请先连接设备", Toast.LENGTH_SHORT); + } + } + + public void volumeDown() { + List connectInfos = null; + if (null != screencastManager) { + connectInfos = screencastManager.getConnectInfos(); + } + if (null != screencastManager && null != connectInfos && !connectInfos.isEmpty()) { + PolyvCommonLog.d(TAG, "volumeDown click"); + screencastManager.volumeDown(); + } else { + Toast.makeText(getContext(), "请先连接设备", Toast.LENGTH_SHORT).show(); + } + } + + public void disConnect() { + disConnect(true); + } + + public void disConnect(boolean isSelectNull) { + DeviceInfo selectInfo = screencastDeviceListAdapter.getSelectInfo(); + if (null != screencastManager && null != selectInfo) { + PolyvCommonLog.d(TAG, "disConnect click:" + selectInfo.getName()); + screencastManager.disConnect(selectInfo); + } + + if (isSelectNull) + selectNull(); + } + + public void selectNull() { + screencastDeviceListAdapter.setSelectInfo(null); + screencastDeviceListAdapter.notifyDataSetChanged(); + } + + public void removeDelayCastRunnable() { + removeCallbacks(runnable); + } + + public void refreshWifiName() { + String netWorkName = PolyvNetworkUtils.getNetworkOperatorName(getApplicationContext()); + boolean isWifi = PolyvNetworkUtils.NETWORK_WIFI == PolyvNetworkUtils.getNetWorkType(getApplicationContext()); + if (isWifi) { + netWorkName = PolyvNetworkUtils.getWIFISSID(getApplicationContext()); + } + if ("网络错误".equals(netWorkName) + || "有线网络".equals(netWorkName)) { + iv_wifi_icon.setSelected(false); + tv_wifi_name.setText("当前是非 WIFI 环境,无法使用投屏功能"); + stopBrowse(); + + ll_search.setVisibility(View.GONE); + rv_devices.setVisibility(View.INVISIBLE); + } else { + iv_wifi_icon.setSelected(true); + tv_wifi_name.setText(netWorkName); + if (getVisibility() == View.VISIBLE || (screencastStatusLayout != null && screencastStatusLayout.isShown())) { + browse(); + } + + ll_search.setVisibility(View.VISIBLE); + rv_devices.setVisibility(View.VISIBLE); + } + } + + public void reconnectPlay() { + PolyvCommonLog.d(TAG, "reconnect click:" + screencastManager.getLastConnectedDeviceInfo()); + if (null != screencastManager) { + PolyvCommonLog.d(TAG, "start connect:" + screencastManager.getLastConnectedDeviceInfo()); + disConnect(); + postDelayed(new Runnable() { + @Override + public void run() { + screencastManager.connect(screencastManager.getLastConnectedDeviceInfo()); + screencastDeviceListAdapter.setSelectInfo(screencastManager.getLastConnectedDeviceInfo()); + screencastDeviceListAdapter.notifyDataSetChanged(); + } + }, 200); + } else { + Toast.makeText(getContext(), "未初始化或未选择设备", Toast.LENGTH_SHORT).show(); + } + } + + private void connect(DeviceInfo info) { + PolyvCommonLog.d(TAG, "connect click:" + info.getName()); + if (null != screencastManager) { + PolyvCommonLog.d(TAG, "start connect:" + info.getName()); + screencastManager.connect(info); + } else { + Toast.makeText(getContext(), "未初始化或未选择设备", Toast.LENGTH_SHORT).show(); + } + } + + private void updateBrowseAdapter() { + if (null != screencastManager) { + List connectInfos = screencastManager.getConnectInfos(); + if (connectInfos != null) { + for (DeviceInfo DeviceInfo : connectInfos) { + if (DeviceInfo != null) { + screencastDeviceListAdapter.setSelectInfo(DeviceInfo); + } + } + } + + List infos = screencastManager.getInfos(); + screencastDeviceListAdapter.updateDatas(infos); + + ll_search.setVisibility(View.GONE); + } + } + + private void browse() { + PolyvCommonLog.d(TAG, "btn_browse click"); + String netWorkName = PolyvNetworkUtils.getNetworkOperatorName(getApplicationContext()); + boolean isWifi = PolyvNetworkUtils.NETWORK_WIFI == PolyvNetworkUtils.getNetWorkType(getApplicationContext()); + if (isWifi) { + netWorkName = PolyvNetworkUtils.getWIFISSID(getApplicationContext()); + } + if ("网络错误".equals(netWorkName) || "有线网络".equals(netWorkName)) { + return; + } + if (null != screencastManager) { + if (!isFirstBrowse) { + isFirstBrowse = true; + } + screencastManager.browse(); + Log.d("gdxz","screencastManager.browse();" ); + ll_search.setVisibility(View.VISIBLE); + } + } + + private void stopBrowse() { + PolyvCommonLog.d(TAG, "btn_stop_browse click"); + if (null != screencastManager) { + PolyvCommonLog.d(TAG, "stop browse"); + PolyvCommonLog.d(TAG, "stop browse"); + isFirstBrowse = false; + screencastManager.stopBrowse(); + + ll_search.setVisibility(View.GONE); + } + } + + private PolyvIUIUpdateListener iUIUpdateListener = new PolyvIUIUpdateListener() { + + @Override + public void onUpdateState(int state, Object object) { + Log.d("gdxz","IUIUpdateListener state:" + state + " text:" + object); + PolyvCommonLog.d(TAG, "IUIUpdateListener state:" + state + " text:" + object); + switch (state) { + case PolyvIUIUpdateListener.STATE_SEARCH_SUCCESS: + if (isFirstBrowse) { + isFirstBrowse = false; + if (getVisibility() == View.VISIBLE) + Toast.makeText(getContext(), "搜索成功", Toast.LENGTH_SHORT).show(); + PolyvCommonLog.d(TAG, "搜索成功"); + } + if (null != delayHandler) { + delayHandler.removeCallbacksAndMessages(null); + delayHandler.sendEmptyMessageDelayed(PolyvIUIUpdateListener.STATE_SEARCH_SUCCESS, + TimeUnit.MILLISECONDS.toMillis(100)); + } + break; + case PolyvIUIUpdateListener.STATE_SEARCH_ERROR: + if (getVisibility() == View.VISIBLE) + Toast.makeText(getContext(), "Auth错误", Toast.LENGTH_SHORT).show(); + break; + case PolyvIUIUpdateListener.STATE_SEARCH_NO_RESULT: + if (null != delayHandler) { + delayHandler.removeCallbacksAndMessages(null); + delayHandler.sendEmptyMessageDelayed(PolyvIUIUpdateListener.STATE_SEARCH_SUCCESS, + TimeUnit.MILLISECONDS.toMillis(100)); + } + break; + case PolyvIUIUpdateListener.STATE_CONNECT_SUCCESS: + break; + case PolyvIUIUpdateListener.STATE_DISCONNECT: + PolyvCommonLog.d(TAG, "disConnect success:" + object); + + Toast.makeText(getContext(), (String) object, Toast.LENGTH_SHORT).show(); + screencastDeviceListAdapter.setSelectInfo(null); + screencastDeviceListAdapter.notifyDataSetChanged(); + break; + case PolyvIUIUpdateListener.STATE_CONNECT_FAILURE: + if (object instanceof String && ((String) object).contains("等待")) + return; + PolyvCommonLog.d(TAG, "connect failure:" + object); + + Toast.makeText(getContext(), (String) object, Toast.LENGTH_SHORT).show(); + screencastDeviceListAdapter.setSelectInfo(null); + screencastDeviceListAdapter.notifyDataSetChanged(); + + disConnect(); + screencastStatusLayout.callPlayErrorStatus(); + break; + case PolyvIUIUpdateListener.STATE_PLAY: + PolyvCommonLog.d(TAG, "callback play"); + + Toast.makeText(getContext(), "开始播放", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callOnStart(); + break; + case PolyvIUIUpdateListener.STATE_LOADING: + PolyvCommonLog.d(TAG, "callback loading"); + + Toast.makeText(getContext(), "开始加载", Toast.LENGTH_SHORT).show(); + break; + case PolyvIUIUpdateListener.STATE_PAUSE: + PolyvCommonLog.d(TAG, "callback pause"); + + Toast.makeText(getContext(), "暂停播放", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callOnPause(); + break; + case PolyvIUIUpdateListener.STATE_STOP: + PolyvCommonLog.d(TAG, "callback stop"); + + Toast.makeText(getContext(), "播放结束", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.hide(true); + disConnect(); + break; + case PolyvIUIUpdateListener.STATE_SEEK: + PolyvCommonLog.d(TAG, "callback seek:" + object); + + Toast.makeText(getContext(), "seek完成", Toast.LENGTH_SHORT).show(); + break; + case PolyvIUIUpdateListener.STATE_PLAY_ERROR: + if (object instanceof String && ((String) object).contains("无响应")) + return; + PolyvCommonLog.d(TAG, "callback error:" + object); + Toast.makeText(getContext(), "播放错误:" + object, Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callPlayErrorStatus(); + break; + case PolyvIUIUpdateListener.STATE_POSITION_UPDATE: + PolyvCommonLog.d(TAG, "callback position update:" + object); + long position = (long) object; + long duration = position; + Video video = screencastStatusLayout.getVideoView().getVideo(); + if (video != null) { + duration = video.getDuration2Millisecond() / 1000; + } + PolyvCommonLog.d(TAG, "总长度:" + duration + " 当前进度:" + position); + currentCastPosition = (int) position; + screencastStatusLayout.callPlayProgress(duration, position); + break; + case PolyvIUIUpdateListener.STATE_COMPLETION: + PolyvCommonLog.d(TAG, "callback completion"); + PolyvCommonLog.d(TAG, "PolyvToastUtil 播放完成"); + Toast.makeText(getContext(), "播放完成", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.hide(true); + break; + } + } + + @Override + public void onUpdateText(String msg) { + PolyvCommonLog.d(TAG, "onUpdateText : " + msg + "\n\n"); + } + }; + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + removeCallbacks(runnable); + } + + /** + * 根据连接的设备 + */ + private DLNADeviceConnectListener iConnectListener = new DLNADeviceConnectListener() { + @Override + public void onConnect(final DeviceInfo serviceInfo, int extra) { + if (TextUtils.isEmpty(serviceInfo.getName())) { + return; + } + removeCallbacks(runnable); + + if (screencastDeviceListAdapter.getSelectInfo() == null) { + return; + } + PolyvCommonLog.d(TAG, "connect success:" + serviceInfo.getName() + "连接成功"); + + Toast.makeText(getContext(), serviceInfo.getName() + "连接成功", Toast.LENGTH_SHORT).show(); + final int currentBitrate = Math.max(1, screencastStatusLayout.getCurrentPlayBitrate()); + loadInfoAndPlay(currentBitrate); + } + + @Override + public void onDisconnect(DeviceInfo serviceInfo, int errorCode) { + final String text = serviceInfo.getName() + "连接断开"; + post(new Runnable() { + @Override + public void run() { + screencastStatusLayout.callPlayErrorStatus(text); + } + }); + } + }; + + public void seekTo(int progress) { + screencastManager.seekTo(progress); + } + + public void pause() { + List connectInfos = null; + if (null != screencastManager) { + connectInfos = screencastManager.getConnectInfos(); + } + if (screencastManager != null && connectInfos != null && !connectInfos.isEmpty()) { + PolyvCommonLog.d(TAG, "pause click"); + screencastManager.pause(); + } + } + + public void resume() { + List connectInfos = null; + if (null != screencastManager) { + connectInfos = screencastManager.getConnectInfos(); + } + if (null != screencastManager && null != connectInfos && !connectInfos.isEmpty()) { + PolyvCommonLog.d(TAG, "resume click"); + // 暂停中 + screencastManager.resume(); + } + } + + + public void play(MediaInfo playerInfo, String playPath, int bitrate, int seconds) { + PolyvCommonLog.d(TAG, "start play url:" + playPath); + if (screencastStatusLayout.getVideoView().isDisableScreenCAP()) { + Toast.makeText(getContext(), "防录屏状态下不能投屏", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callPlayErrorStatus(); + return; + } + if (TextUtils.isEmpty(playPath)) { + Toast.makeText(getContext(), "获取播放地址失败", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callPlayErrorStatus(); + return; + } + if (null == screencastManager) { + Toast.makeText(getContext(), "未初始化或未选择设备", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callPlayErrorStatus(); + return; + } + List connectInfos = screencastManager.getConnectInfos(); + if (null == connectInfos || connectInfos.isEmpty()) { + Toast.makeText(getContext(), "请先连接设备", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callPlayErrorStatus(); + return; + } + screencastStatusLayout.callScreencastingStatus(bitrate); + + final MediaInfo.MediaUrl mediaUrl = playerInfo.getMediaUrls().get(0); + + mediaUrl.setMediaID(Base64.encodeToString(playPath.getBytes(), Base64.NO_WRAP)); + mediaUrl.setUri(playPath); + mediaUrl.setMediaType(Constant.MediaType.VIDEO); + screencastManager.playNetMedia(playerInfo); + } + + public void loadInfoAndPlay(final int bitrate) { + screencastStatusLayout.getVideoView().getPlayPathWithBitRateAsync(bitrate, new PolyvVideoView.Consumer() { + @Override + public void accept(final String playPath) { + if (screencastStatusLayout == null) { + return; + } + + Video video = screencastStatusLayout.getVideoView().getVideo(); + final MediaInfo mediaInfo = new MediaInfo(); + if (video != null) { + mediaInfo.setMediaName(video.getTitle()); + } + final MediaInfo.MediaUrl mediaUrl = new MediaInfo.MediaUrl(); + final List mediaUrlList = new ArrayList<>(); + mediaUrlList.add(mediaUrl); + mediaInfo.setMediaUrls(mediaUrlList); + + PolyvScreencastHelper.getInstance().transformPlayObject(mediaUrl, video, + bitrate, playPath, new PolyvScreencastHelper.PolyvCastTransformCallback() { + @Override + public void onSucceed(Object object, String newPlayPath) { + PolyvCommonLog.d(TAG, "cast: " + newPlayPath); + int videoPosition = screencastStatusLayout.getCurrentPlayPosition(); + mediaUrlList.clear(); + mediaUrlList.add((MediaInfo.MediaUrl) object); + play(mediaInfo, newPlayPath, bitrate, videoPosition); + screencastStatusLayout.resetBitRateView(bitrate); + } + + @Override + public void onFailed(Throwable e) { + e.printStackTrace(); + Toast.makeText(getContext(), e.getMessage() + "", Toast.LENGTH_SHORT).show(); + screencastStatusLayout.callPlayErrorStatus(e.getMessage() + ""); + } + }); + + + } + }); + } + + private static class NetworkReceiver extends BroadcastReceiver { + private WeakReference reference; + + public NetworkReceiver(PolyvScreencastSearchLayout rf) { + reference = new WeakReference<>(rf); + } + + @Override + public void onReceive(Context context, Intent intent) { + if (null == reference || null == reference.get()) { + return; + } + PolyvScreencastSearchLayout searchLayout = reference.get(); + String action = intent.getAction(); + if (ConnectivityManager.CONNECTIVITY_ACTION.equalsIgnoreCase(action) || + PolyvScreencastSearchLayout.WIFI_AP_STATE_CHANGED_ACTION.equalsIgnoreCase(action)) { + searchLayout.refreshWifiName(); + } + } + } + + public void setOnVisibilityChangedListener(OnVisibilityChangedListener onVisibilityChangedListener) { + this.onVisibilityChangedListener = onVisibilityChangedListener; + } + + public interface OnVisibilityChangedListener { + void onVisibilityChanged(@NonNull View changedView, int visibility); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_cancel: + hide(true); + break; + case R.id.iv_refresh: + browse(); + break; + } + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { + if (!isLandLayout) { + hide(true); + } + } else if (isLandLayout) { + hide(true); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastStatusLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastStatusLayout.java new file mode 100644 index 0000000..8f2c525 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/cast/widget/PolyvScreencastStatusLayout.java @@ -0,0 +1,427 @@ +package cn.shangyu.gdxzExpert.cast.widget; + +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Color; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.apowersoft.dlnasender.api.bean.DeviceInfo; +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.vo.PolyvVideoVO; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerMediaController; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvTimeUtils; + +public class PolyvScreencastStatusLayout extends FrameLayout implements View.OnClickListener { + //连接状态,设备名称 + private TextView tv_status, tv_device_name; + //重试等交互按钮 + private TextView tv_retry, tv_bit, tv_exit, tv_switch_device; + //清晰度布局 + private LinearLayout ll_bit_layout; + private TextView tv_sc, tv_hd, tv_flu; + //音量布局 + private LinearLayout ll_volume_layout; + private ImageView iv_volume_add, iv_volume_reduce; + //控制器布局 + private RelativeLayout rl_port; + private ImageView iv_play, iv_land; + private TextView tv_curtime, tv_tottime; + private SeekBar sb_play; + + private PolyvScreencastSearchLayout screencastSearchLayout, landScreencastSearchLayout; + private PolyvVideoView videoView; + private PolyvPlayerMediaController mediaController; + private DeviceInfo deviceInfo; + + private int currentPlayBitrate = -1; + private long maxProgress; + + public PolyvScreencastStatusLayout(@NonNull Context context) { + this(context, null); + } + + public PolyvScreencastStatusLayout(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvScreencastStatusLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initView(); + } + + public void setScreencastSearchLayout(PolyvScreencastSearchLayout screencastSearchLayout) { + this.screencastSearchLayout = screencastSearchLayout; + } + + public void setLandScreencastSearchLayout(PolyvScreencastSearchLayout screencastSearchLayout) { + this.landScreencastSearchLayout = screencastSearchLayout; + } + + private PolyvScreencastSearchLayout getScreencastSearchLayout() { + return PolyvScreenUtils.isLandscape(getContext()) ? landScreencastSearchLayout : screencastSearchLayout; + } + + public void setVideoView(PolyvVideoView videoView) { + this.videoView = videoView; + } + + public void setMediaController(PolyvPlayerMediaController mediaController) { + this.mediaController = mediaController; + } + + public int getCurrentPlayBitrate() { + return currentPlayBitrate == -1 ? videoView.getBitRate() : currentPlayBitrate; + } + + public int getCurrentPlayPosition() { + return videoView == null ? 0 : videoView.getCurrentPosition() / 1000; + } + + private void initView() { + LayoutInflater.from(getContext()).inflate(R.layout.polyv_screencast_status_layout, this); + tv_status = (TextView) findViewById(R.id.tv_status); + tv_device_name = (TextView) findViewById(R.id.tv_device_name); + + tv_retry = (TextView) findViewById(R.id.tv_retry); + tv_retry.setOnClickListener(this); + tv_bit = (TextView) findViewById(R.id.tv_bit); + tv_bit.setOnClickListener(this); + tv_exit = (TextView) findViewById(R.id.tv_exit); + tv_exit.setOnClickListener(this); + tv_switch_device = (TextView) findViewById(R.id.tv_switch_device); + tv_switch_device.setOnClickListener(this); + + ll_bit_layout = (LinearLayout) findViewById(R.id.ll_bit_layout); + ll_bit_layout.setOnClickListener(this); + tv_sc = (TextView) findViewById(R.id.tv_sc); + tv_sc.setOnClickListener(this); + tv_hd = (TextView) findViewById(R.id.tv_hd); + tv_hd.setOnClickListener(this); + tv_flu = (TextView) findViewById(R.id.tv_flu); + tv_flu.setOnClickListener(this); + + ll_volume_layout = (LinearLayout) findViewById(R.id.ll_volume_layout); + iv_volume_add = (ImageView) findViewById(R.id.iv_volume_add); + iv_volume_add.setOnClickListener(this); + iv_volume_reduce = (ImageView) findViewById(R.id.iv_volume_reduce); + iv_volume_reduce.setOnClickListener(this); + + rl_port = (RelativeLayout) findViewById(R.id.rl_port); + findViewById(R.id.iv_screencast_search).setVisibility(View.GONE); + findViewById(R.id.tv_route_portrait).setVisibility(View.GONE); + findViewById(R.id.tv_bit_portrait).setVisibility(View.GONE); + findViewById(R.id.tv_speed_portrait).setVisibility(View.GONE); +// findViewById(R.id.iv_vice_status_portrait).setVisibility(View.GONE);改改改改 + iv_play = (ImageView) findViewById(R.id.iv_play); + iv_play.setOnClickListener(this); + iv_land = (ImageView) findViewById(R.id.iv_land); + iv_land.setOnClickListener(this); + tv_curtime = (TextView) findViewById(R.id.tv_curtime); + tv_tottime = (TextView) findViewById(R.id.tv_tottime); + sb_play = (SeekBar) findViewById(R.id.sb_play); + sb_play.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + if (!fromUser) { + return; + } + int newPosition = (int) (maxProgress * (long) progress / seekBar.getMax()); + tv_curtime.setText(PolyvTimeUtils.generateTime(newPosition * 1000)); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + if (!seekBar.isSelected()) + seekBar.setSelected(true); + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + if (seekBar.isSelected()) + seekBar.setSelected(false); + int seekToPosition = (int) (maxProgress * (long) seekBar.getProgress() / seekBar.getMax()); + getScreencastSearchLayout().seekTo(seekToPosition); + } + }); + } + + public PolyvVideoView getVideoView() { + return videoView; + } + + public void callOnPause() { + iv_play.setSelected(true); + } + + public void callOnStart() { + iv_play.setSelected(false); + } + + public void callConnectStatus(String deviceName) { + tv_bit.setVisibility(View.GONE); + tv_retry.setVisibility(View.GONE); + tv_exit.setBackgroundDrawable(getResources().getDrawable(R.drawable.polyv_tv_lb_corners)); + ll_bit_layout.setVisibility(View.GONE); + ll_volume_layout.setVisibility(View.GONE); + tv_status.setTextColor(Color.WHITE); + + tv_curtime.setText("00:00"); + tv_tottime.setText("00:00"); + sb_play.setProgress(0); + sb_play.setEnabled(false); + maxProgress = 0; + + iv_play.setSelected(false); + iv_play.setEnabled(false); + + tv_status.setText("正在连接..."); + + tv_device_name.setText(deviceName); + } + + public void callPlayProgress(long max, long progress) { + if (max == 0) + return; + maxProgress = max; + tv_curtime.setText(PolyvTimeUtils.generateTime(progress * 1000)); + tv_tottime.setText(PolyvTimeUtils.generateTime(max * 1000)); + sb_play.setProgress((int) (sb_play.getMax() * 1L * progress / max)); + sb_play.setEnabled(true); + + iv_play.setEnabled(true); + } + + public void callScreencastingStatus(int bitrate) { + currentPlayBitrate = bitrate; + tv_status.setTextColor(Color.WHITE); + tv_status.setText("投屏中"); + tv_status.setTextColor(Color.parseColor("#31ADFE")); + + initBitRateView(bitrate); + initBitRateViewVisible(bitrate); + + tv_exit.setBackgroundDrawable(getResources().getDrawable(R.drawable.polyv_tv_no_corners)); + + ll_volume_layout.setVisibility(View.VISIBLE); + } + + public void callScreencastStatusTitle(String title) { + tv_status.setText(title); + tv_status.setTextColor(Color.parseColor("#31ADFE")); + } + + public void callPlayErrorStatus() { + callPlayErrorStatus("投屏失败"); + } + + public void callPlayErrorStatus(String errorMsg) { + tv_status.setTextColor(Color.RED); + tv_status.setText(errorMsg); + tv_status.setTextColor(Color.parseColor("#FF5B5B")); + + tv_bit.setVisibility(View.GONE); + tv_retry.setVisibility(View.VISIBLE); + + tv_exit.setBackgroundDrawable(getResources().getDrawable(R.drawable.polyv_tv_no_corners)); + + ll_volume_layout.setVisibility(View.GONE); + } + + public void show(DeviceInfo info) { + deviceInfo = info; + callConnectStatus(info.getName()); + if (getVisibility() == View.VISIBLE) + return; + setVisibility(View.VISIBLE); + + videoView.pause(true); + } + + public void hide(boolean isStop) { + if (getVisibility() != View.VISIBLE) + return; + currentPlayBitrate = -1; + setVisibility(View.GONE); + if (isStop) { + getScreencastSearchLayout().stop(); +// screencastSearchLayout.disConnect(); +// landScreencastSearchLayout.disConnect(); + } + castProgressSync(); + } + + /** + * 同步投屏进度到本地播放器 + */ + private void castProgressSync() { + if (getScreencastSearchLayout().getCurrentCastPosition() == -1) { + return; + } + long castPosition = getScreencastSearchLayout().getCurrentCastPosition() * 1000; + videoView.seekTo(castPosition); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.iv_play: + if (iv_play.isSelected()) { + getScreencastSearchLayout().resume(); + } else { + getScreencastSearchLayout().pause(); + } + iv_play.setSelected(!iv_play.isSelected()); + break; + case R.id.tv_retry: + callConnectStatus(deviceInfo.getName()); + getScreencastSearchLayout().reconnectPlay(); + break; + case R.id.iv_volume_add: + getScreencastSearchLayout().volumeUp(); + break; + case R.id.iv_volume_reduce: + getScreencastSearchLayout().volumeDown(); + break; + case R.id.tv_sc: + changeBitrate(3); + break; + case R.id.tv_hd: + changeBitrate(2); + break; + case R.id.tv_flu: + changeBitrate(1); + break; + case R.id.ll_bit_layout: + ll_bit_layout.setVisibility(View.GONE); + break; + case R.id.tv_bit: + ll_bit_layout.setVisibility(View.VISIBLE); + break; + case R.id.tv_exit: + hide(true); + getScreencastSearchLayout().removeDelayCastRunnable(); + break; + case R.id.tv_switch_device: + getScreencastSearchLayout().show(); + break; + case R.id.iv_land: + if (iv_land.isSelected()) { + iv_land.setImageResource(R.drawable.polyv_btn_fullscreen); + mediaController.changeToSmallScreen(); + + } else { + iv_land.setImageResource(R.drawable.polyv_btn_exitfulls); + mediaController.changeToFullScreen(); + } + iv_land.setSelected(!iv_land.isSelected()); + break; + } + } + + //初始化选择码率的控件 + private void initBitRateView(int bitRate) { + tv_sc.setSelected(false); + tv_hd.setSelected(false); + tv_flu.setSelected(false); + switch (bitRate) { + case 0: + case 1: + tv_bit.setText("流畅"); + tv_flu.setSelected(true); + break; + case 2: + tv_bit.setText("高清"); + tv_hd.setSelected(true); + break; + case 3: + tv_bit.setText("超清"); + tv_sc.setSelected(true); + break; + } + tv_bit.setVisibility(View.VISIBLE); + } + + //初始化选择码率控件的可见性 + private void initBitRateViewVisible(int currentBitRate) { + tv_sc.setVisibility(View.GONE); + tv_hd.setVisibility(View.GONE); + tv_flu.setVisibility(View.GONE); + PolyvVideoVO videoVO = videoView.getVideo(); + if (videoVO != null) { + switch (videoVO.getDfNum()) { + case 1: + tv_flu.setVisibility(View.VISIBLE); + break; + case 2: + tv_hd.setVisibility(View.VISIBLE); + tv_flu.setVisibility(View.VISIBLE); + break; + case 3: + tv_sc.setVisibility(View.VISIBLE); + tv_hd.setVisibility(View.VISIBLE); + tv_flu.setVisibility(View.VISIBLE); + break; + } + } else { + switch (currentBitRate) { + case 0: + case 1: + tv_flu.setVisibility(View.VISIBLE); + break; + case 2: + tv_hd.setVisibility(View.VISIBLE); + break; + case 3: + tv_sc.setVisibility(View.VISIBLE); + break; + } + } + } + + private void changeBitrate(int bitRate) { + ll_bit_layout.setVisibility(View.GONE); + if (currentPlayBitrate == bitRate) + return; + callScreencastStatusTitle("切换码率"); + initBitRateView(bitRate); + getScreencastSearchLayout().loadInfoAndPlay(bitRate); + } + + //重置选择码率的控件 + public void resetBitRateView(int bitRate) { + ll_bit_layout.setVisibility(View.GONE); + if (currentPlayBitrate == bitRate) + return; + currentPlayBitrate = bitRate; + callScreencastStatusTitle("投屏中"); + initBitRateView(bitRate); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (iv_land != null) { + iv_land.setSelected(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE); + if (iv_land.isSelected()) { + iv_land.setImageResource(R.drawable.polyv_btn_exitfulls); + } else { + iv_land.setImageResource(R.drawable.polyv_btn_fullscreen); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/chartcomposer/CustomStyleChartComposer.java b/app/src/main/java/cn/shangyu/gdxzExpert/chartcomposer/CustomStyleChartComposer.java new file mode 100644 index 0000000..bb9bd0d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/chartcomposer/CustomStyleChartComposer.java @@ -0,0 +1,2188 @@ +package cn.shangyu.gdxzExpert.chartcomposer; + + +import static com.github.AAChartModel.AAChartCore.AATools.AAColor.AARgba; + +import com.github.AAChartModel.AAChartCore.AAChartCreator.AAChartModel; +import com.github.AAChartModel.AAChartCore.AAChartCreator.AASeriesElement; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartAlignType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartAnimationType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartFontWeightType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartLineDashStyleType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartStackingType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartSymbolStyleType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartSymbolType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartVerticalAlignType; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartZoomType; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAColumn; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AADataElement; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AADataLabels; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAHalo; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAHover; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAInactive; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AALabel; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAMarker; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAMarkerHover; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAMarkerStates; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAOptions; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAPlotLinesElement; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AASVGAttributes; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AASelect; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAShadow; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAStates; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAStyle; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAZonesElement; +import com.github.AAChartModel.AAChartCore.AATools.AAColor; +import com.github.AAChartModel.AAChartCore.AATools.AAGradientColor; +import com.github.AAChartModel.AAChartCore.AATools.AALinearGradientDirection; + +import java.util.ArrayList; +import java.util.Map; + +public class CustomStyleChartComposer { + + public static AAChartModel configureColorfulChart() { + String[] colorsNameArr = { + "red", + "orange", + "yellow", + "green", + "cyan", + "blue", + "purple", + "gray", + "darkGray", + "lightGray", + "magenta", + "brown", + "black" + }; + + String[] colorsArr = { + AAColor.Red, + AAColor.Orange, + AAColor.Yellow, + AAColor.Green, + AAColor.Cyan, + AAColor.Blue, + AAColor.Purple, + AAColor.Gray, + AAColor.DarkGray, + AAColor.LightGray, + AAColor.Magenta, + AAColor.Brown, + AAColor.Black, + }; + + return new AAChartModel() + .chartType(AAChartType.Bar) + .animationType(AAChartAnimationType.Bounce) + .title("Colorful Chart") + .subtitle("use AAColor to get color string") + .dataLabelsEnabled(false) + .categories(colorsNameArr) + .colorsTheme(colorsArr) + .stacking(AAChartStackingType.Percent) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo") + .data(new Object[]{ + 149.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 188.5, 276.4, 214.1, 95.6, 54.4}) + .colorByPoint(true) + }); + + } + + public static AAChartModel configureColorfulGradientColorChart() { + String[] gradientColorNamesArr = { + "oceanBlue", + "sanguine", + "lusciousLime", + "purpleLake", + "freshPapaya", + "ultramarine", + "pinkSugar", + "lemonDrizzle", + "victoriaPurple", + "springGreens", + "mysticMauve", + "reflexSilver", + "newLeaf", + "cottonCandy", + "pixieDust", + "fizzyPeach", + "sweetDream", + "firebrick", + "wroughtIron", + "deepSea", + "coastalBreeze", + "eveningDelight", + "neonGlowColor", + "berrySmoothieColor" + }; + + Map[] gradientColorArr = { + AAGradientColor.OceanBlue, + AAGradientColor.Sanguine, + AAGradientColor.LusciousLime, + AAGradientColor.PurpleLake, + AAGradientColor.FreshPapaya, + AAGradientColor.Ultramarine, + AAGradientColor.PinkSugar, + AAGradientColor.LemonDrizzle, + AAGradientColor.VictoriaPurple, + AAGradientColor.SpringGreens, + AAGradientColor.MysticMauve, + AAGradientColor.ReflexSilver, + AAGradientColor.NewLeaf, + AAGradientColor.CottonCandy, + AAGradientColor.PixieDust, + AAGradientColor.FizzyPeach, + AAGradientColor.SweetDream, + AAGradientColor.Firebrick, + AAGradientColor.WroughtIron, + AAGradientColor.DeepSea, + AAGradientColor.CoastalBreeze, + AAGradientColor.EveningDelight, + AAGradientColor.NeonGlow, + AAGradientColor.BerrySmoothie + }; + + return new AAChartModel() + .chartType(AAChartType.Bar) + .title("Colorful Column Chart") + .subtitle("single data array colorful column chart") + .categories(gradientColorNamesArr) + .colorsTheme(gradientColorArr) + .yAxisTitle("gradient color") + .stacking(AAChartStackingType.Percent) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo") + .data(new Object[]{ + 149.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 188.5, 276.4, 214.1, 95.6, 54.4, + 149.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 188.5, 276.4, 214.1, 95.6, 54.4}) + .colorByPoint(true) + }); + + } + + public static AAChartModel configureDiscontinuousDataChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .title("Discontinuous Data Chart") + .dataLabelsEnabled(true) + .tooltipEnabled(true) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo") + .data(new Object[]{6.9, 9.5, 14.5, 18.2, 21.5, null, null, null, null, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6}) + .color(AAGradientColor.DeepSea) + + }); + + } + + public static AAChartModel configureColorfulColumnChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .title("Colorful Column Chart") + .subtitle("single data array colorful column chart") + .colorsTheme(new String[]{"#febc0f", "#FF14d4", "#0bf8f5", "#F33c52", "#1904dd",}) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("东京") + .data(new Object[]{149.9, 171.5, 106.4, 129.2, 144.0, 176.0, 135.6, 188.5, 276.4, 214.1, 95.6, 54.4}) + .colorByPoint(true) + }); + } + + public static AAChartModel configureNightingaleRoseChart() { + return new AAChartModel() + .title("南丁格尔玫瑰图") + .subtitle("极地图中的一种") + .yAxisTitle("cm") + .chartType(AAChartType.Column) + .xAxisVisible(false)//是否显示最外一层圆环 + .yAxisVisible(true)//是否显示中间的多个圆环 + .legendEnabled(false)//隐藏图例(底部可点按的小圆点) + .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .dataLabelsEnabled(true) + .polar(true)//极地化图形 + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("东京") + .data(new Object[]{7.0, 6.9, 9.5, 9.6, 13.9, 14.5, 18.3, 18.2, 21.5, 25.2, 26.5, 23.3}), + } + ) + ; + } + + public static AAChartModel configureChartWithShadowStyle() { + return new AAChartModel() + .chartType(AAChartType.Spline) + .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .markerRadius(0) + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(8.0) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}) + .shadow(new AAShadow() + .offsetX(15.0) + .offsetY(15.0) + .opacity(0.2f) + .width(8.0) + .color(AAColor.Red)) + }); + } + public static AAOptions customChartLegendStyle() { + Object[][] stopsArr = { + {0.00, "#4A89EC38"}, +// {0.50, "#FF14d4"}, + {1.00, "#4A58EC00"}, + };//颜色字符串设置支持十六进制类型和 rgba 类型 + + Map linearGradientColor = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + stopsArr + );//颜色字符串设置支持十六进制类型和 rgba 类型 + AASeriesElement element1 = new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(2) + .color("rgba(74, 88, 236,1)") + .fillColor(linearGradientColor) + + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}); + + + AAChartModel aaChartModel = new AAChartModel() + .chartType(AAChartType.Areaspline) + .title("title") + .subtitle("subtitle") + .subtitleAlign(AAChartAlignType.Left) + .markerRadius(0) + .backgroundColor(AAColor.White) + .dataLabelsEnabled(false) + .yAxisGridLineWidth(0) +// .yAxisTitle("入组数") + + .zoomType(AAChartZoomType.X) + .series(new AASeriesElement[]{element1}); + + AAOptions aaOptions = aaChartModel.aa_toAAOptions(); + + aaOptions.chart.animation = false;// disable animation + aaOptions.tooltip + .backgroundColor(AAGradientColor.Firebrick) + .style(AAStyle.style(AAColor.White)); + +// aaOptions.xAxis.tickWidth = 100f; + aaOptions.yAxis.labels.format = "{value} h";//给y轴添加单位 + AAStyle aaStyle = new AAStyle() + .color("#FFD700")//#FFD700(纯金色) + .backgroundColor(AAColor.Black) + .borderRadius(5) + .border("6px solid #000000") + .opacity(1.0) + .fontWeight(AAChartFontWeightType.Bold); + AAPlotLinesElement[] aaPlotLinesElementsArr = { + new AAPlotLinesElement() + .color("#1e90ff")//颜色值(16进制) + .dashStyle(AAChartLineDashStyleType.LongDashDotDot)//样式:Dash,Dot,Solid等,默认Solid + .width((1)) //标示线粗细 + .value((12)) //所在位置 + .zIndex((1)) //层叠,标示线在图表中显示的层叠级别,值越大,显示越向前 + .label(new AALabel() + .useHTML(true) + .text("PLOT LINES 000001") + .style(aaStyle)) + }; + + aaOptions.xAxis + .gridLineColor(AAColor.DarkGray) + .gridLineWidth(1); + + + + aaOptions.yAxis + .gridLineColor(AAColor.DarkGray) + + .gridLineWidth(1); + + aaOptions.legend + .enabled(false) +// .verticalAlign(AAChartVerticalAlignType.Top) +// .layout(AAChartLayoutType.Vertical) +// .align(AAChartAlignType.Right) + ; + + + return aaOptions; + } + public static AAChartModel configureColumnChartAndBarChart() { + return new AAChartModel() + .chartType(AAChartType.Bar) + .xAxisGridLineWidth(0) + .yAxisGridLineWidth(0) + .categories(new String[]{ + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .color("rgba(74, 88, 236,1)") + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}), + } + ); + + } + public static AAChartModel configureLineChartAndSplineChartStyle(String[] date,Integer[] data) { + Object[][] stopsArr = { + {0.00, "#4A89EC38"}, + {1.00, "#4A58EC00"}, + };//颜色字符串设置支持十六进制类型和 rgba 类型 + Map linearGradientColor = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + stopsArr + );//颜色字符串设置支持十六进制类型和 rgba 类型 + return new AAChartModel() +// .chartType(AAChartType.Line) + .chartType(AAChartType.Area) + .categories(date) + .markerRadius(4) + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .yAxisVisible(false) + .title("") + .subtitle("") + .subtitleAlign(AAChartAlignType.Left) + .zoomType(AAChartZoomType.None) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("入组趋势") + .lineWidth(2) + .fillColor(linearGradientColor) + .color("rgba(74, 88, 236,1)") + .data(data), + } + ); + } + public static AAChartModel configureColorfulGradientAreaChart(String[] date,Integer[] data) { + Object[][] stopsArr = { + {0.00, "#4A89EC38"}, + {1.00, "#4A58EC00"}, + };//颜色字符串设置支持十六进制类型和 rgba 类型 + + Map linearGradientColor = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + stopsArr + );//颜色字符串设置支持十六进制类型和 rgba 类型 + + return new AAChartModel() + .chartType(AAChartType.Area) + .categories(date) + .markerRadius(4) + .yAxisLineWidth(0) +// .yAxisGridLineWidth(1) +// .xAxisGridLineWidth(1) + .yAxisVisible(false)//隐藏y轴的 + .title("") + .subtitle("") + .subtitleAlign(AAChartAlignType.Left) + .zoomType(AAChartZoomType.None) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("入组数") + .lineWidth(2) + .color("rgba(74, 88, 236,1)") + .fillColor(linearGradientColor) + .data(data), + } + ); + } + + + public static AAChartModel configureColorfulGradientSplineChart() { + Object[][] stopsArr = { + {0.00, "#febc0f"}, + {0.25, "#FF14d4"}, + {0.50, "#0bf8f5"}, + {0.75, "#F33c52"}, + {1.00, "#1904dd"}, + };//颜色字符串设置支持十六进制类型和 rgba 类型 + + Map linearGradientColor = AAGradientColor.linearGradient( + AALinearGradientDirection.ToLeft, + stopsArr + );//颜色字符串设置支持十六进制类型和 rgba 类型 + + return new AAChartModel() + .chartType(AAChartType.Spline) + .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .markerRadius(0) + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(15.0) + .color(linearGradientColor) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}), + } + ); + } + + + public static AAChartModel configureGradientColorAreasplineChart() { + Map linearGradientColor = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + "rgba(2255,20,147,1)",//深粉色, alpha 透明度 1 + "rgba(255,105,180,0.1)"//热情的粉红, alpha 透明度 0.1 + );//颜色字符串设置支持十六进制类型和 rgba 类型 + + return new AAChartModel() + .chartType(AAChartType.Areaspline) + .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .markerRadius(8)//marker点半径为8个像素 + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank)//marker点为空心效果 + .markerSymbol(AAChartSymbolType.Circle)//marker点为圆形点○ + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(5.0) + .color(AARgba(220, 20, 60, 1.0f))//猩红色, alpha 透明度 1 + .fillColor(linearGradientColor) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}), + } + ); + } + + + public static AAChartModel configureSpecialStyleMarkerOfSingleDataElementChart() { + Object[][] stopsArr = { + {0.00, "#febc0f"}, + {0.25, "#FF14d4"}, + {0.50, "#0bf8f5"}, + {0.75, "#F33c52"}, + {1.00, "#1904dd"}, + };//颜色字符串设置支持十六进制类型和 rgba 类型 + + Map gradientColorDic1 = AAGradientColor.linearGradient( + AALinearGradientDirection.ToRight, + stopsArr + ); + + AADataElement singleSpecialData = new AADataElement() + .marker(new AAMarker() + .radius(8)//曲线连接点半径 + .symbol(AAChartSymbolType.Circle)//曲线点类型:"circle", "square", "diamond", "triangle","triangle-down",默认是"circle" + .fillColor("#FFFFFF")//点的填充色(用来设置折线连接点的填充色) + .lineWidth(5)//外沿线的宽度(用来设置折线连接点的轮廓描边的宽度) + .lineColor("#FF0000")//外沿线的颜色(用来设置折线连接点的轮廓描边颜色,当值为空字符串时,默认取数据点或数据列的颜色) + ) + .y(26.5); + + return new AAChartModel() + .chartType(AAChartType.Spline) + .backgroundColor("#4b2b7f") + .dataLabelsEnabled(false)//是否显示值 + .tooltipEnabled(true) + .markerRadius(0) + .xAxisVisible(false) + .yAxisVisible(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Virtual Data") + .lineWidth(6) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, singleSpecialData, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}) + .color(gradientColorDic1) + }); + } + + public static AAChartModel configureSpecialStyleColumnOfSingleDataElementChart() { + AADataElement singleSpecialData = new AADataElement() + .color(AAGradientColor.FreshPapaya) + .y(49.5); + + return new AAChartModel() + .chartType(AAChartType.Column) + .dataLabelsEnabled(false)//是否显示值 + .tooltipEnabled(false) + .markerRadius(0) + .xAxisVisible(false) + .yAxisVisible(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Virtual Data") + .lineWidth(6) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, singleSpecialData, 5.2, 26.5, 23.3, 26.5, 13.9, 9.6}) + .color(AAGradientColor.OceanBlue) + }); + } + + public static AAChartModel configureAreaChartThreshold() { + Map gradientColorDic1 = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + "rgba(30, 144, 255,1)",//DodgerBlue, alpha 透明度 1 + "rgba(30, 144, 255,0.1)"//DodgerBlue, alpha 透明度 0.1 + ); + + return new AAChartModel() + .chartType(AAChartType.Area) + .yAxisGridLineWidth(0) + .categories(new String[]{"Jan", "Feb", "Mar", "Apr", "May", "Jun", "July", "Aug", "Spe", "Oct", "Nov", "Dec"}) + .dataLabelsEnabled(false)//是否显示值 + .markerRadius(8) + .markerSymbol(AAChartSymbolType.Circle) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .threshold((-200)) + .data(new Object[]{106.4, 129.2, 269.9, -100.5, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4}) + .lineWidth(6) + .color("rgba(30, 144, 255,1)") + .fillColor(gradientColorDic1) + }); + } + + + //三角形雷达图 + public static AAChartModel configureTriangleRadarChart() { + return new AAChartModel() + .chartType(AAChartType.Area) + .yAxisMax(15.0) + .yAxisGridLineWidth(0) + .xAxisVisible(false) + .markerRadius(0) + .polar(true)//是否极化图形 + .series(new AASeriesElement[]{ + new AASeriesElement() + .data(new Object[]{15.0, 15.0, 15.0,}), + new AASeriesElement() + .data(new Object[]{9.0, 9.0, 9.0,}), + new AASeriesElement() + .data(new Object[]{6.0, 6.0, 6.0,}), + new AASeriesElement() + .data(new Object[]{3.0, 3.0, 3.0,}), + }); + } + + //四边形雷达图 + public static AAChartModel configureQuadrangleRadarChart() { + return new AAChartModel() + .chartType(AAChartType.Area) + .yAxisMax(15.0) + .yAxisGridLineWidth(0) + .xAxisVisible(false) + .markerRadius(0) + .polar(true)//是否极化图形 + .series(new AASeriesElement[]{ + new AASeriesElement() + .data(new Object[]{15.0, 15.0, 15.0, 15.0,}), + new AASeriesElement() + .data(new Object[]{9.0, 9.0, 9.0, 9.0,}), + new AASeriesElement() + .data(new Object[]{6.0, 6.0, 6.0, 6.0,}), + new AASeriesElement() + .data(new Object[]{3.0, 3.0, 3.0, 3.0,}), + }); + } + + //五边形雷达图 + public static AAChartModel configurePentagonRadarChart() { + return new AAChartModel() + .chartType(AAChartType.Area) + .yAxisMax(15.0) + .yAxisGridLineWidth(0) + .xAxisVisible(false) + .markerRadius(0) + .polar(true)//是否极化图形 + .series(new AASeriesElement[]{ + new AASeriesElement() + .data(new Object[]{15.0, 15.0, 15.0, 15.0, 15.0,}), + new AASeriesElement() + .data(new Object[]{9.0, 9.0, 9.0, 9.0, 9.0,}), + new AASeriesElement() + .data(new Object[]{6.0, 6.0, 6.0, 6.0, 6.0,}), + new AASeriesElement() + .data(new Object[]{3.0, 3.0, 3.0, 3.0, 3.0,}), + }); + } + + //六边形雷达图 + public static AAChartModel configureHexagonRadarChart() { + return new AAChartModel() + .chartType(AAChartType.Area) + .yAxisMax(15.0) + .yAxisGridLineWidth(0) + .xAxisVisible(false) + .markerRadius(0) + .polar(true)//是否极化图形 + .series(new AASeriesElement[]{ + new AASeriesElement() + .data(new Object[]{15.0, 15.0, 15.0, 15.0, 15.0, 15.0,}), + new AASeriesElement() + .data(new Object[]{9.0, 9.0, 9.0, 9.0, 9.0, 9.0,}), + new AASeriesElement() + .data(new Object[]{6.0, 6.0, 6.0, 6.0, 6.0, 6.0,}), + new AASeriesElement() + .data(new Object[]{3.0, 3.0, 3.0, 3.0, 3.0, 3.0,}), + }); + } + + public static AAChartModel adjustYAxisMaxAndMinValues() { + String[] categoriesArr = { + "孤岛危机", + "使命召唤", + "荣誉勋章", + "狙击精英", + "神秘海域", + "最后生还者", + "巫师3狂猎", + "对马之魂", + "蝙蝠侠阿甘骑士", + "地狱边境", + "闪客", + "忍者之印", + }; + + return new AAChartModel() + .chartType(AAChartType.Areaspline) + .legendEnabled(false) + .yAxisVisible(true) + .markerRadius(6) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .zoomType(AAChartZoomType.XY) + .categories(categoriesArr) + .yAxisMin(2.0) + .yAxisMax(45.4) + .xAxisTickInterval(2) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("体重") + .color("#2494F3") + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}) + }) + ; + } + + public static AAChartModel customSpecialStyleDataLabelOfSingleDataElementChart() { + Object[][] redStopsArr = new Object[][]{ + new Object[]{0.0, AARgba(255, 0, 0, 0.6f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + new Object[]{0.5, AARgba(255, 0, 0, 0.0f)}, + new Object[]{1.0, AARgba(255, 0, 0, 0.0f)} + }; + + Map gradientColorDic1 = AAGradientColor.linearGradient( + AALinearGradientDirection.ToTop, + AARgba(255, 215, 0, 0.1f), + AARgba(255, 215, 0, 0.6f) + ); + + String formatStr = + "" + + "{y}" + + " m"; + + + AADataElement singleSpecialData = new AADataElement() + .dataLabels(new AADataLabels() + .enabled(true) + .useHTML(true) + .format(formatStr) + .style(new AAStyle() + .fontWeight(AAChartFontWeightType.Bold) + .color(AAColor.White) + .fontSize(16)) + .y((-35)) + .align(AAChartAlignType.Center) + .verticalAlign(AAChartVerticalAlignType.Top) + .overflow("none") + .crop(false) + ) + .y(26.5); + + return new AAChartModel() + .chartType(AAChartType.Areaspline) + .backgroundColor("#4b2b7f") + .dataLabelsEnabled(false)//是否显示值 + .tooltipEnabled(true) + .markerRadius(0) + .xAxisVisible(false) + .yAxisVisible(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Virtual Data") + .lineWidth(6) + .color("rgba(255,215,0,1)") + .fillColor(gradientColorDic1)// gold color, alpha: 1.0 + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, singleSpecialData, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}) + }); + } + + public static AAChartModel customBarChartHoverColorAndSelectColor() { + return new AAChartModel() + .chartType(AAChartType.Bar) + .title("Custom Bar Chart select color") + .yAxisReversed(true) + .xAxisReversed(true) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("ElementOne") + .data(new Object[]{211, 183, 157, 133, 111, 91, 73, 57, 43, 31, 21, 13, 7, 3}) + .allowPointSelect(true) + .states( + new AAStates() + .hover(new AAHover() + .color("rgba(220,20,60,1)"))//猩红色, alpha 透明度 1 + .select(new AASelect() + .color(AAColor.Red))) + }); + } + + public static AAChartModel customChartHoverAndSelectHaloStyle() { + return new AAChartModel() + .chartType(AAChartType.Line) + .title("Custom Chart Hover And Select Halo Style") + .colorsTheme(new Object[]{AAColor.Red}) + .yAxisReversed(true) + .xAxisReversed(true) + .markerRadius(20) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("ElementOne") + .data(new Object[]{211, 183, 157, 133, 111, 91, 73, 57, 43, 31, 21, 13, 7, 3}) + .allowPointSelect(true) + .states( + new AAStates() + .hover(new AAHover() + .halo(new AAHalo() + .size(130) + .opacity(0.8) + .attributes(new AASVGAttributes() + .strokeWidth(50) + .fill("#00BFFF") + .stroke("#00FA9A")))) + .select(new AASelect() + .halo(new AAHalo() + .size(130) + .opacity(1.0) + .attributes(new AASVGAttributes() + .strokeWidth(150) + .fill(AARgba(138, 43, 226, 1f)) + .stroke(AARgba(30, 144, 255, 1f))))) + )}); + } + + public static AAChartModel customSplineChartMarkerStatesHoverStyle() { + return new AAChartModel() + .chartType(AAChartType.Areaspline) + .title("Custom Spline Chart Marker States Hover Style") + .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .markerRadius(8.0)//marker点半径为8个像素 + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(5.0) + .color("rgba(220,20,60,1)")//猩红色, alpha 透明度 1 + .marker(new AAMarker() + .states(new AAMarkerStates() + .hover(new AAMarkerHover() + .fillColor(AAColor.White) + .radius(40) + .lineColor(AAColor.Green) + .lineWidth(20)))) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}), + }); + } + + //Issue: https://github.com/AAChartModel/AAChartKit/issues/948 + public static AAChartModel splineChartHoverLineWithNoChangeAndCustomMarkerStatesHoverStyle() { + return new AAChartModel() + .chartType(AAChartType.Spline) + .title("Spline Chart Hover Line Width No Change && Custom Marker States Hover Style") + .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .markerRadius(8.0)//marker点半径为8个像素 + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(5.0) + .color(AAColor.Red) + .states(new AAStates() + .hover(new AAHover() + .enabled(true) + //手指盘旋或选中图表时,禁止线条变粗 + .lineWidthPlus(0))) + .marker(new AAMarker() + .states(new AAMarkerStates() + .hover(new AAMarkerHover() + .fillColor(AAColor.Red)//设置手指选中点的颜色为红色 + .radius(40)))) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}), + }); + } + + //Issue: https://github.com/AAChartModel/AAChartKit/issues/827 + public static AAChartModel customNormalStackingChartDataLabelsContentAndStyle() { + String[] categories = { + "孤岛危机", + "使命召唤", + "荣誉勋章", + "狙击精英", + "神秘海域", + "最后生还者", + "巫师3狂猎", + "对马之魂", + "死亡搁浅", + "地狱边境", + "闪客", + "忍者之印" + }; + + String[] colorsTheme = { + "#fe117c", + "#ffc069", + "#06caf4", + "#7dffc0" + }; + + AASeriesElement element1 = new AASeriesElement() + .name("2017") + .dataLabels(new AADataLabels() + .enabled(true) + .y(-10) + .format("{total} mm") + .color(AAColor.Red) + .shape("callout") + .backgroundColor(AAColor.White) + .borderColor(AAColor.Red) + .borderRadius(1) + .borderWidth(1) + ) + .data(new Object[]{7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6}); + + AASeriesElement element2 = new AASeriesElement() + .name("2018") + .data(new Object[]{0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5}); + + AASeriesElement element3 = new AASeriesElement() + .name("2019") + .data(new Object[]{0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0}); + + AASeriesElement element4 = new AASeriesElement() + .name("2020") + .data(new Object[]{3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8}); + + AASeriesElement[] series = {element1, element2, element3, element4}; + + return new AAChartModel() + .chartType(AAChartType.Column) + .stacking(AAChartStackingType.Normal) + .yAxisGridLineWidth(0) + .markerRadius(0) + .categories(categories) + .colorsTheme(colorsTheme) + .series(series); + } + + //Issue: https://github.com/AAChartModel/AAChartKit-Swift/issues/190 +//API Doc: https://api.highcharts.com.cn/highcharts#series%3Cpyramid%3E.reversed + public static AAChartModel upsideDownPyramidChart() { + return new AAChartModel() + .chartType(AAChartType.Pyramid) + .yAxisTitle("摄氏度") + .inverted(true) + .legendEnabled(true) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2020") + .reversed(true) + .data(new Object[][]{ + {"Swift", 15654}, + {"Objective-C", 4064}, + {"JavaScript", 1987}, + {"GO", 976}, + {"Python", 846} + }) + }); + } + + //Issue: https://github.com/AAChartModel/AAChartKit/issues/888 + public static AAChartModel doubleLayerPieChart() { + return new AAChartModel() + .chartType(AAChartType.Pie) + .title("浏览器市场占比历史对比") + .subtitle("无任何可靠依据的虚拟数据") + .dataLabelsEnabled(true)//是否直接显示扇形图数据 + .yAxisTitle("摄氏度") + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Past") + .size("40%")//尺寸大小 + .innerSize("30%")//内部圆环半径大小占比 + .borderWidth(0)//描边的宽度 + .allowPointSelect(false)//是否允许在点击数据点标记(扇形图点击选中的块发生位移) + .data(new Object[][]{ + {"Firefox Past", 3336.2}, + {"Chrome Past", 26.8}, + {"Safari Past", 88.5}, + {"Opera Past", 46.0}, + {"Others Past", 223.0}, + }), + + new AASeriesElement() + .name("Now") + .size("80%")//尺寸大小 + .innerSize("70%")//内部圆环半径大小占比 + .borderWidth(0)//描边的宽度 + .allowPointSelect(false)//是否允许在点击数据点标记(扇形图点击选中的块发生位移) + .data(new Object[][]{ + {"Firefox Now", 336.2}, + {"Chrome Now", 6926.8}, + {"Safari Now", 388.5}, + {"Opera Now", 446.0}, + {"Others Now", 223.0}, + }) + }); + } + + //GitHub issue https://github.com/AAChartModel/AAChartKit/issues/903 + public static AAChartModel disableSomeOfLinesMouseTrackingEffect() { + return new AAChartModel() + .chartType(AAChartType.Line)//图表类型 + .tooltipValueSuffix("万元")//设置浮动提示框单位后缀 + .yAxisTitle("万元")//设置 Y 轴标题 + .categories(new String[]{ + "一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月" + }) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .data(new Object[]{7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6}), + new AASeriesElement() + .name("2018") + .enableMouseTracking(false) + .data(new Object[]{0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5}), + new AASeriesElement() + .name("2019") + .enableMouseTracking(false) + .data(new Object[]{0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0}), + new AASeriesElement() + .name("2020") + .enableMouseTracking(false) + .data(new Object[]{3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8}), + }); + } + + + // GitHub issue https://github.com/AAChartModel/AAChartKit/issues/904 + public static AAChartModel configureColorfulShadowSplineChart() { + return new AAChartModel() + .chartType(AAChartType.Spline) + .yAxisVisible(false) + .stacking(AAChartStackingType.Normal) + .colorsTheme(new String[]{"#1e90ff", "#ef476f", "#ffd066", "#04d69f"}) + .markerSymbol(AAChartSymbolType.Circle) + .markerRadius(8.0) + .markerSymbolStyle(AAChartSymbolStyleType.BorderBlank) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .lineWidth(5) + .data(new Object[]{0.45, 0.43, 0.50, 0.55, 0.58, 0.62, 0.83, 0.39, 0.56, 0.67, 0.50, 0.34, 0.50, 0.67, 0.58, 0.29, 0.46, 0.23, 0.47, 0.46, 0.38, 0.56, 0.48, 0.36}) + .shadow( + new AAShadow() + .offsetX(15.0) + .offsetY(15.0) + .opacity(0.2f) + .width(8.0) + .color("#1e90ff")), + new AASeriesElement() + .name("2018") + .lineWidth(5) + .data(new Object[]{0.38, 0.31, 0.32, 0.32, 0.64, 0.66, 0.86, 0.47, 0.52, 0.75, 0.52, 0.56, 0.54, 0.60, 0.46, 0.63, 0.54, 0.51, 0.58, 0.64, 0.60, 0.45, 0.36, 0.67}) + .shadow( + new AAShadow() + .offsetX(15.0) + .offsetY(15.0) + .opacity(0.2f) + .width(8.0) + .color("#ef476f")), + new AASeriesElement() + .name("2019") + .lineWidth(5) + .data(new Object[]{0.46, 0.32, 0.53, 0.58, 0.86, 0.68, 0.85, 0.73, 0.69, 0.71, 0.91, 0.74, 0.60, 0.50, 0.39, 0.67, 0.55, 0.49, 0.65, 0.45, 0.64, 0.47, 0.63, 0.64}) + .shadow( + new AAShadow() + .offsetX(15.0) + .offsetY(15.0) + .opacity(0.2f) + .width(8.0) + .color("#ffd066")), + new AASeriesElement() + .name("2020") + .lineWidth(5) + .data(new Object[]{0.60, 0.51, 0.52, 0.53, 0.64, 0.84, 0.65, 0.68, 0.63, 0.47, 0.72, 0.60, 0.65, 0.74, 0.66, 0.65, 0.71, 0.59, 0.65, 0.77, 0.52, 0.53, 0.58, 0.53}) + .shadow( + new AAShadow() + .offsetX(15.0) + .offsetY(15.0) + .opacity(0.2f) + .width(8.0) + .color("#04d69f")), + }); + } + + // GitHub issue https://github.com/AAChartModel/AAChartKit/issues/905 + public static AAChartModel configureColorfulDataLabelsStepLineChart() { + return new AAChartModel() + .chartType(AAChartType.Line) + .yAxisVisible(false) + .stacking(AAChartStackingType.Normal) + .colorsTheme(new String[]{"#1e90ff","#ef476f","#ffd066","#04d69f"}) + .markerSymbol(AAChartSymbolType.Circle) + .markerRadius(8.0) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .step((true)) + .dataLabels(new AADataLabels() + .style(new AAStyle() + .color("#1e90ff") + .fontSize(11))) + .data(new Object[]{2.10, 2.54, 2.78, 3.62, 4.41, 4.09, 3.83, 4.47, 4.20, 3.94, 3.80, 3.58, 3.19, 4.30, 3.69, 3.52, 3.02, 3.30}), + new AASeriesElement() + .name("2018") + .step((true)) + .dataLabels(new AADataLabels() + .style(new AAStyle() + .color("#ef476f") + .fontSize(11))) + .data(new Object[]{1.56, 1.91, 2.45, 3.87, 3.24, 4.90, 4.61, 4.10, 4.17, 3.85, 4.17, 3.46, 3.46, 3.55, 3.50, 4.13, 2.58, 2.28}), + new AASeriesElement() + .name("2019") + .step((true)) + .dataLabels(new AADataLabels() + .style(new AAStyle() + .color("#ffd066") + .fontSize(11))) + .data(new Object[]{1.16, 1.67, 2.64, 2.86, 3.00, 3.21, 4.14, 4.07, 3.68, 3.11, 3.41, 3.25, 3.32, 3.07, 3.92, 3.05, 2.18, 3.24}), + new AASeriesElement() + .name("2020") + .step((true)) + .dataLabels(new AADataLabels() + .style(new AAStyle() + .color("#04d69f") + .fontSize(11))) + .data(new Object[]{5.59, 3.09, 4.09, 6.14, 5.33, 6.05, 5.71, 6.22, 6.56, 4.75, 5.27, 6.02, 5.22, 5.77, 6.19, 5.68, 4.33, 5.48}), + }); + } + + + // GitHub issue https://github.com/AAChartModel/AAChartKit-Swift/issues/223 + public static AAChartModel configureColorfulGradientColorAndColorfulDataLabelsStepAreaChart() { + Object[][] blueStopsArr = new Object[][]{ + {0.0, AARgba(30, 144, 255, 1.0f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + {0.5, AARgba(30, 144, 255, 0.2f)}, + {1.0, AARgba(30, 144, 255, 0.0f)} + }; + Map gradientBlueColorDic = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + blueStopsArr + ); + + Object[][] redStopsArr = new Object[][]{ + {0.0, AARgba(255, 0, 0, 1.0f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + {0.5, AARgba(255, 0, 0, 0.2f)}, + {1.0, AARgba(255, 0, 0, 0.0f)} + }; + Map gradientRedColorDic = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + redStopsArr + ); + + Object[][] goldStopsArr = new Object[][]{ + {0.0, AARgba(255, 215, 0, 1.0f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + {0.5, AARgba(255, 215, 0, 0.2f)}, + {1.0, AARgba(255, 215, 0, 0.0f)} + }; + Map gradientGoldColorDic = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + goldStopsArr + ); + + Object[][] greenStopsArr = new Object[][]{ + {0.0, AARgba(50, 205, 50, 1.0f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + {0.5, AARgba(50, 205, 50, 0.2f)}, + {1.0, AARgba(50, 205, 50, 0.0f)} + }; + Map gradientGreenColorDic = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + greenStopsArr + ); + + return new AAChartModel() + .chartType(AAChartType.Area) + .yAxisVisible(false) + .stacking(AAChartStackingType.Normal) + .colorsTheme(new String[]{"#1e90ff", "#ef476f", "#ffd066", "#04d69f"}) + .markerSymbol(AAChartSymbolType.Circle) + .markerRadius(5) + .dataLabelsEnabled(true) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .fillColor(gradientBlueColorDic) + .lineWidth(6) + .step((true)) + .dataLabels(new AADataLabels() + .style(AAStyle.style("#1e90ff",11))) + .data(new Object[]{2.10, 2.54, 2.78, 3.62, 4.41, 4.09, 3.83, 4.47, 4.20, 3.94, 3.80, 3.58, 3.19, 4.30, 3.69, 3.52, 3.02, 3.30}), + new AASeriesElement() + .name("2018") + .fillColor(gradientRedColorDic) + .lineWidth(6) + .step((true)) + .dataLabels(new AADataLabels() + .style(AAStyle.style("#ef476f",11)) + ) + .data(new Object[]{1.56, 1.91, 2.45, 3.87, 3.24, 4.90, 4.61, 4.10, 4.17, 3.85, 4.17, 3.46, 3.46, 3.55, 3.50, 4.13, 2.58, 2.28}), + new AASeriesElement() + .name("2019") + .fillColor(gradientGoldColorDic) + .lineWidth(6) + .step((true)) + .dataLabels(new AADataLabels() + .style(AAStyle.style("#ffd066",11))) + .data(new Object[]{1.16, 1.67, 2.64, 2.86, 3.00, 3.21, 4.14, 4.07, 3.68, 3.11, 3.41, 3.25, 3.32, 3.07, 3.92, 3.05, 2.18, 3.24}), + new AASeriesElement() + .name("2020") + .fillColor(gradientGreenColorDic) + .lineWidth(6) + .step((true)) + .dataLabels(new AADataLabels() + .style(AAStyle.style("#04d69f",11))) + .data(new Object[]{5.59, 3.09, 4.09, 6.14, 5.33, 6.05, 5.71, 6.22, 6.56, 4.75, 5.27, 6.02, 5.22, 5.77, 6.19, 5.68, 4.33, 5.48}), + }); + } + + // Refer to https://api.highcharts.com.cn/highcharts#plotOptions.spline.marker.states.hover.enabled + public static AAChartModel disableSplineChartMarkerHoverEffect() { + return new AAChartModel() + .chartType(AAChartType.Spline) + .title("Disable Spline Chart Marker Hover Effect") + .categories(new String[]{ + "一月", "二月", "三月", "四月", "五月", "六月", + "七月", "八月", "九月", "十月", "十一月", "十二月"}) + .markerRadius(0)//marker点半径为0个像素 + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(5.0) + .color("rgba(220,20,60,1)")//猩红色, alpha 透明度 1 + .marker(new AAMarker() + .states(new AAMarkerStates() + .hover(new AAMarkerHover() + .enabled(false)))) + .data(new Object[]{7.0, 6.9, 2.5, 14.5, 18.2, 21.5, 5.2, 26.5, 23.3, 45.3, 13.9, 9.6}), + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1203 + public static AAChartModel configureMaxAndMinDataLabelsForChart() { + AADataLabels aaDataLabels = new AADataLabels() + .enabled(true) + .format("{y} 美元") + .shape("callout") + .style(AAStyle.style(AAColor.Red, 15f, AAChartFontWeightType.Bold)) + .backgroundColor(AAColor.White)// white color + .borderColor(AAColor.Red)// red color + .borderRadius(1.5) + .borderWidth(1.3); + + AADataElement minData = new AADataElement() + .dataLabels(aaDataLabels) + .y(2.5); + + AADataElement maxData = new AADataElement() + .dataLabels(aaDataLabels) + .y(49.5); + + return new AAChartModel() + .chartType(AAChartType.Spline) + .dataLabelsEnabled(false)//是否显示值 + .tooltipEnabled(false) + .markerRadius(0) + .xAxisVisible(false) + .yAxisVisible(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Show The Max and Min values Data Labels") + .lineWidth(7) + .data(new Object[]{7.0, 6.9, minData, 14.5, 18.2, maxData, 5.2, 26.5, 23.3, 26.5, 13.9, 9.6}) + .color(AAGradientColor.OceanBlue) + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1201 + public static AAChartModel customVerticalXAxisCategoriesLabelsByHTMLBreakLineTag() { + return new AAChartModel() + .chartType(AAChartType.Area) + .categories(new String[]{ + "孤


机", + "使


唤", + "荣


章", + "狙


英", + "神


域", + "最



者", + "巫

3

猎", + "对


魂", + "蝙






", + "地


境", + "闪
客", + "忍


印" + }) + .tooltipEnabled(false) + .borderRadius(3) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .data(new Object[]{7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6}), + new AASeriesElement() + .name("2018") + .data(new Object[]{0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5}), + new AASeriesElement() + .name("2019") + .data(new Object[]{0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0}), + new AASeriesElement() + .name("2020") + .data(new Object[]{3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8}), + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1269 + public static AAChartModel noMoreGroupingAndOverlapEachOtherColumnChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .categories(new String[]{"11/23", "11/24", "11/25", "11/26", "11/27", "11/28", "11/29"}) +// .yAxisTickPositions([0, 10, 20, 30, 40, 50]) + .yAxisMax(50) + .yAxisMin(0) + .borderRadius(5) + .series(new AAColumn[]{ + new AAColumn() + .name("总做题") + .color("#D8D8D8") + .data(new Object[]{30, 20, 28, 40, 42, 48, 50}) + .grouping(false) + , + new AAColumn() + .name("正确做题") + .color("#00D9CD") + .data(new Object[]{28, 18, 26, 40, 40, 46, 39}) + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1271 + public static AAChartModel noMoreGroupingAndNestedColumnChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .categories(new String[]{"11/23","11/24", "11/25","11/26","11/27","11/28","11/29"}) +// .yAxisTickPositions([0, 10, 20, 30, 40, 50]) + .yAxisMax(50) + .yAxisMin(0) + .borderRadius(5) + .series(new Object[]{ + new AAColumn() + .name("总目标") + .color("DeepSkyBlue") + .data(new Object[]{30, 20, 28, 40, 42, 48, 50}) + .grouping(false) + .pointPadding(0.05f) + , + new AAColumn() + .name("完成度") + .color("#FF3030") //Firebrick1 color + .data(new Object[]{28, 18, 26, 40, 40, 46, 39}) + .grouping(false) + .pointPadding(0.2f) + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/842 + public static AAChartModel topRoundedCornersStackingColumnChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .stacking(AAChartStackingType.Normal) + .title("Top Rounded Corners Stacking Column Chart") + .colorsTheme(new String[]{"#fe117c", "#ffc069", "#06caf4",}) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .borderRadiusTopLeft("50%") + .borderRadiusTopRight("50%") + .data(new Object[]{2.10, 2.54, 2.78, 3.62, 4.41, 4.09, 3.83, 4.47, 4.20, 3.94, 3.80, 3.58, 3.19, 4.30, 3.69, 3.52, 3.02, 3.30}), + + new AASeriesElement() + .name("Berlin Hot") + .data(new Object[]{1.56, 1.91, 2.45, 3.87, 3.24, 4.90, 4.61, 4.10, 4.17, 3.85, 4.17, 3.46, 3.46, 3.55, 3.50, 4.13, 2.58, 2.28}), + + new AASeriesElement() + .name("Beijing Hot") + .data(new Object[]{1.16, 1.67, 2.64, 2.86, 3.00, 3.21, 4.14, 4.07, 3.68, 3.11, 3.41, 3.25, 3.32, 3.07, 3.92, 3.05, 2.18, 3.24}), + }); + } + + //https://github.com/AAChartModel/AAChartKit-Swift/issues/323 + //https://github.com/AAChartModel/AAChartKit-Swift/issues/346 + //https://github.com/highcharts/rounded-corners + public static AAChartModel freeStyleRoundedCornersStackingColumnChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .stacking(AAChartStackingType.Percent) + .title("Free-Style Rounded Corners Stacking Column Chart") + .xAxisVisible(false) + .yAxisGridLineWidth(0) + .colorsTheme(new Object[]{ + AAGradientColor.linearGradient(AAColor.rgbColor(128, 255, 165), AAColor.rgbColor(1 , 191, 236)), + AAGradientColor.linearGradient(AAColor.rgbColor(0 , 221, 255), AAColor.rgbColor(77 , 119, 255)), + AAGradientColor.linearGradient(AAColor.rgbColor(55 , 162, 255), AAColor.rgbColor(116, 21 , 219)), + AAGradientColor.linearGradient(AAColor.rgbColor(255, 0 , 135), AAColor.rgbColor(135, 0 , 157)), + AAGradientColor.linearGradient(AAColor.rgbColor(255, 191, 0 ), AAColor.rgbColor(224, 62 , 76 )), + AAGradientColor.PixieDust, + AAGradientColor.SweetDream, + AAGradientColor.LusciousLime, + AAGradientColor.WroughtIron, + }) + .series(new AASeriesElement[]{ + new AASeriesElement() + .borderRadiusTopLeft("50%") + .borderRadiusTopRight("50%") + .data(new Object[]{2.10, 2.54, 2.78, 3.62, 4.41, 4.09, 3.83, 4.47, 4.20, 3.94, 3.80, 3.58, 3.19, 4.30, 3.69, 3.52, 3.02, 3.30}), + + new AASeriesElement() + .borderRadiusBottomLeft("50%") + .borderRadiusBottomRight("50%") + .data(new Object[]{1.56, 1.91, 2.45, 3.87, 3.24, 4.90, 4.61, 4.10, 4.17, 3.85, 4.17, 3.46, 3.46, 3.55, 3.50, 4.13, 2.58, 2.28}), + + new AASeriesElement() + .borderRadiusTopLeft("50%") + .borderRadiusBottomRight("50%") + .data(new Object[]{1.16, 1.67, 2.64, 2.86, 3.00, 3.21, 4.14, 4.07, 3.68, 3.11, 3.41, 3.25, 3.32, 3.07, 3.92, 3.05, 2.18, 3.24}), + + new AASeriesElement() + .borderRadiusTopRight("50%") + .borderRadiusBottomRight("50%") + .data(new Object[]{5.59, 3.09, 4.09, 6.14, 5.33, 6.05, 5.71, 6.22, 6.56, 4.75, 5.27, 6.02, 5.22, 5.77, 6.19, 5.68, 4.33, 5.48}), + + new AASeriesElement() + .borderRadius(20) + .data(new Object[]{2.10, 2.54, 2.78, 3.62, 4.41, 4.09, 3.83, 4.47, 4.20, 3.94, 3.80, 3.58, 3.19, 4.30, 3.69, 3.52, 3.02, 3.30}), + + new AASeriesElement() + .borderRadiusTopLeft("50%") + .borderRadiusBottomLeft("50%") + .data(new Object[]{5.59, 3.09, 4.09, 6.14, 5.33, 6.05, 5.71, 6.22, 6.56, 4.75, 5.27, 6.02, 5.22, 5.77, 6.19, 5.68, 4.33, 5.48}), + + new AASeriesElement() + .borderRadiusTopRight("50%") + .borderRadiusBottomLeft("50%") + .data(new Object[]{1.16, 1.67, 2.64, 2.86, 3.00, 3.21, 4.14, 4.07, 3.68, 3.11, 3.41, 3.25, 3.32, 3.07, 3.92, 3.05, 2.18, 3.24}), + + new AASeriesElement() + .borderRadiusBottomLeft("50%") + .borderRadiusBottomRight("50%") + .data(new Object[]{2.10, 2.54, 2.78, 3.62, 4.41, 4.09, 3.83, 4.47, 4.20, 3.94, 3.80, 3.58, 3.19, 4.30, 3.69, 3.52, 3.02, 3.30}), + + new AASeriesElement() + .borderRadiusTopLeft("50%") + .borderRadiusTopRight("50%") + .data(new Object[]{1.56, 1.91, 2.45, 3.87, 3.24, 4.90, 4.61, 4.10, 4.17, 3.85, 4.17, 3.46, 3.46, 3.55, 3.50, 4.13, 2.58, 2.28}), + }); + } + + //https://github.com/AAChartModel/AAChartKit-Swift/issues/365 + public static AAChartModel customColumnChartBorderStyleAndStatesHoverColor() { + return new AAChartModel() + .chartType(AAChartType.Column) + .stacking(AAChartStackingType.Normal) + .colorsTheme(new Object[]{AAColor.DarkGray, AAColor.LightGray})//Colors theme + .categories(new String[]{ + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + }) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Berlin Hot") + .borderColor(AAColor.White) + .borderWidth(3) + .borderRadius(10) + .states(new AAStates() + .hover(new AAHover() + .color(AAColor.Red))) + .data(new Object[]{7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6}), + + new AASeriesElement() + .name("Beijing Hot") + .borderColor(AAColor.White) + .borderWidth(3) + .borderRadius(10) + .states(new AAStates() + .hover(new AAHover() + .color("dodgerblue")))// Dodgerblue/道奇藍/#1e90ff十六进制颜色代码 + .data(new Object[]{0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5}), + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1291 + public static AAChartModel customLineChartWithColorfulMarkersAndLines() { + return new AAChartModel() + .chartType(AAChartType.Line) + .title("Custom Line Chart With Colorful Markers And Lines") + .markerRadius(18.0)//marker点半径为8个像素 + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Tokyo Hot") + .lineWidth(5.0) + .marker(new AAMarker() + .states(new AAMarkerStates() + .hover(new AAMarkerHover() + .radius(40) + .lineWidth(5)))) + .data(new Object[]{ + 2, 4, 8, 16, 32, 64, 128, + new AADataElement() + .y(256.0) + .color(AAColor.Red) + }) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(1) + .color(AAColor.Red), + new AAZonesElement() + .value(2) + .color(AAColor.Orange), + new AAZonesElement() + .value(3) + .color(AAColor.Yellow), + new AAZonesElement() + .value(4) + .color(AAColor.Green), + new AAZonesElement() + .value(5) + .color(AAColor.Cyan), + new AAZonesElement() + .value(6) + .color(AAColor.Blue), + new AAZonesElement() + .value(7) + .color(AAColor.Purple), + }) + , + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1291 + //https://github.com/AAChartModel/AAChartKit/issues/1293 + public static AAChartModel customLineChartWithColorfulMarkersAndLines2() { + return new AAChartModel() + .chartType(AAChartType.Line) + .title("Custom Line Chart With Colorful Markers And Lines") + .markerRadius(25.0)//marker点半径为8个像素 + .markerSymbol(AAChartSymbolType.Circle) + .yAxisLineWidth(0) + .yAxisGridLineWidth(0) + .legendEnabled(true) + .stacking(AAChartStackingType.Normal) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name(AAColor.Blue) + .lineWidth(20.0) + .data(new Object[]{ + 2048, 1024, 1024, 1024, 1024, + new AADataElement() + .y(2048) + .color(AARgba(30, 144, 255, 1.0f)), + }) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(1) + .color(AARgba(30, 144, 255, 1.0f)), + new AAZonesElement() + .value(2) + .color(AARgba(30, 144, 255, 0.8f)), + new AAZonesElement() + .value(3) + .color(AARgba(30, 144, 255, 0.6f)), + new AAZonesElement() + .value(4) + .color(AARgba(30, 144, 255, 0.4f)), + new AAZonesElement() + .value(5) + .color(AARgba(30, 144, 255, 0.2f)), + }) + , + new AASeriesElement() + .name(AAColor.Red) + .lineWidth(20.0) + .data(new Object[]{ + 2048, 1024, 1024, 1024, 1024, + new AADataElement() + .y(2048) + .color(AARgba(255, 0, 0, 1.0f)), + }) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(1) + .color(AARgba(255, 0, 0, 1.0f)), + new AAZonesElement() + .value(2) + .color(AARgba(255, 0, 0, 0.8f)), + new AAZonesElement() + .value(3) + .color(AARgba(255, 0, 0, 0.6f)), + new AAZonesElement() + .value(4) + .color(AARgba(255, 0, 0, 0.4f)), + new AAZonesElement() + .value(5) + .color(AARgba(255, 0, 0, 0.2f)), + }) + , + new AASeriesElement() + .name(AAColor.Yellow) + .lineWidth(20.0) + .data(new Object[]{ + 2048, 1024, 1024, 1024, 1024, + new AADataElement() + .y(2048) + .color(AARgba(255, 215, 0, 1.0f)), + }) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(1) + .color(AARgba(255, 215, 0, 1.0f)), + new AAZonesElement() + .value(2) + .color(AARgba(255, 215, 0, 0.8f)), + new AAZonesElement() + .value(3) + .color(AARgba(255, 215, 0, 0.6f)), + new AAZonesElement() + .value(4) + .color(AARgba(255, 215, 0, 0.4f)), + new AAZonesElement() + .value(5) + .color(AARgba(255, 215, 0, 0.2f)), + }) + , + new AASeriesElement() + .name(AAColor.Green) + .lineWidth(20.0) + .data(new Object[]{ + 2048, 1024, 1024, 1024, 1024, + new AADataElement() + .y(2048) + .color(AARgba(50, 205, 50, 1.0f)), + }) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(1) + .color(AARgba(50, 205, 50, 1.0f)), + new AAZonesElement() + .value(2) + .color(AARgba(50, 205, 50, 0.8f)), + new AAZonesElement() + .value(3) + .color(AARgba(50, 205, 50, 0.6f)), + new AAZonesElement() + .value(4) + .color(AARgba(50, 205, 50, 0.4f)), + new AAZonesElement() + .value(5) + .color(AARgba(50, 205, 50, 0.2f)), + }) + , + new AASeriesElement() + .name(AAColor.Purple) + .lineWidth(20.0) + .data(new Object[]{ + 2048, 1024, 1024, 1024, 1024, + new AADataElement() + .y(2048) + .color(AARgba(138, 43, 226, 1.0f)), + }) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(1) + .color(AARgba(138, 43, 226, 1.0f)), + new AAZonesElement() + .value(2) + .color(AARgba(138, 43, 226, 0.8f)), + new AAZonesElement() + .value(3) + .color(AARgba(138, 43, 226, 0.6f)), + new AAZonesElement() + .value(4) + .color(AARgba(138, 43, 226, 0.4f)), + new AAZonesElement() + .value(5) + .color(AARgba(138, 43, 226, 0.2f)), + }) + , + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1294 + public static AAChartModel drawLineChartWithPointsCoordinates() { + Object[][] dataArr = new Object[][]{ + {0, 200}, + {0, 300}, + {0, 400}, + {1, 100}, + {2, 120}, + {3, 130} + }; + + return new AAChartModel() + .chartType(AAChartType.Scatter) + .title("Draw Line Chart With Points Coordinates") + .markerSymbol(AAChartSymbolType.Circle) + .markerSymbolStyle(AAChartSymbolStyleType.BorderBlank) + .markerRadius(8) + .colorsTheme(new String[]{AAColor.Red}) + .series(new AASeriesElement[]{ + new AASeriesElement() + .type(AAChartType.Line) + .enableMouseTracking(false) + .showInLegend(false) + .marker(new AAMarker() + .enabled(false)) + .states(new AAStates() + .inactive(new AAInactive() + .enabled(false))) + .data(dataArr), + new AASeriesElement() + .name("Red Dot") + .type(AAChartType.Scatter) + .data(dataArr), + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1351 + public static AAChartModel configureSpecialStyleColumnForNegativeDataMixedPositiveData() { + String[] categoriesArr = new String[]{ + "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", + "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至", "小寒", "大寒" + }; + + Integer[] dataArr = new Integer[]{ + -70, -69, -25, -145, -182, -215, -52, -265, -233, -453, -139, -96, + +70, +69, +25, +145, +182, +215, +52, +265, +233, +453, +139, +96, + }; + ArrayList newDataArr = new ArrayList<>(); + + for (Integer dataElementValue : dataArr) { + AADataLabels aaDataLabels = new AADataLabels() + .enabled(true) + .verticalAlign(AAChartVerticalAlignType.Middle) + .x(0) + .y(-10); + + if (dataElementValue < 0) { + AADataElement negativeDataElement = new AADataElement() + .y((-dataElementValue)) + .color(AAColor.Green) + .dataLabels(aaDataLabels + .format("-{y} 美元") + .style(AAStyle.style(AAColor.Green, 11, AAChartFontWeightType.Thin))); + newDataArr.add(negativeDataElement); + } else { + AADataElement positiveDataElement = new AADataElement() + .y((dataElementValue)) + .color(AAColor.Red) + .dataLabels(aaDataLabels + .format("+{y} 美元") + .style(AAStyle.style(AAColor.Red, 11, AAChartFontWeightType.Thin))); + newDataArr.add(positiveDataElement); + } + } + + return new AAChartModel() + .chartType(AAChartType.Column) + .categories(categoriesArr) + .tooltipEnabled(false) + .yAxisVisible(false) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("虚构数据") + .data(newDataArr.toArray()) + }); + } + + //https://github.com/AAChartModel/AAChartKit-Swift/issues/389 + public static AAChartModel configureMultiLevelStopsArrGradientColorAreasplineMixedLineChart() { + ArrayList randomNumArrA = new ArrayList<>(); + ArrayList randomNumArrB = new ArrayList<>(); + double y1; + double y2; + int Q = (int) (Math.random() * 50); + int range = 129; + for (int x = 0; x < range; x++) { + y1 = Math.sin(Q * (x * Math.PI / 180)) + x * 2.0 * 0.01; + y2 = Math.cos(Q * (x * Math.PI / 180)) + x * 3.0 * 0.01; + randomNumArrA.add(y1); + randomNumArrB.add(y2); + } + + Object[][] redStopsArr = new Object[][]{ + {0.0, AARgba(255, 0, 0, 1.0f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + {0.2, AARgba(255, 0, 0, 0.2f)}, + {0.4, AARgba(255, 0, 0, 0.1f)}, + {0.6, AARgba(255, 0, 0, 0.05f)}, + {0.8, AARgba(255, 0, 0, 0.01f)}, + {1.0, AAColor.Clear} + }; + + Map gradientRedColorDic = AAGradientColor.linearGradient( + AALinearGradientDirection.ToBottom, + redStopsArr + ); + + return new AAChartModel() + .chartType(AAChartType.Areaspline) + .stacking(AAChartStackingType.Normal) + .backgroundColor(AAColor.Black) + .colorsTheme(new String[]{"#1e90ff", "#04d69f", "#ef476f", "#ffd066",}) + .dataLabelsEnabled(false) + .markerSymbol(AAChartSymbolType.Circle) + .markerRadius(5) + .markerSymbolStyle(AAChartSymbolStyleType.InnerBlank) + .yAxisGridLineWidth(0.5f) + .xAxisGridLineWidth(0.5f) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .type(AAChartType.Spline) + .lineWidth(6f) + .data(randomNumArrA.toArray()), + new AASeriesElement() + .name("2018") + .type(AAChartType.Spline) + .lineWidth(6f) + .data(randomNumArrB.toArray()), + new AASeriesElement() + .name("2020") + .fillColor(gradientRedColorDic) + .lineWidth(6f) + .threshold(-4f) + .data(randomNumArrA.toArray()), + }); + } + + //https://github.com/AAChartModel/AAChartKit/issues/1401 + public static AAChartModel connectNullsForSingleAASeriesElement() { + Object[] dataArr = new Object[]{ + 0.45, null, null, + 0.55, 0.58, 0.62, null, null, + 0.56, 0.67, 0.50, 0.34, 0.50, null, null, null, null, + 0.23, 0.47, 0.46, 0.38, 0.56, 0.48, 0.36, null, null, null, null, null, null, null, null, + 0.74, 0.66, 0.65, 0.71, 0.59, 0.65, 0.77, 0.52, 0.53, 0.58, 0.53, + }; + + return new AAChartModel() + .chartType(AAChartType.Spline) + .subtitle("虚拟数据") + .colorsTheme(new String[]{"#1e90ff", "#ef476f", "#ffd066", "#04d69f"}) + .yAxisTitle("摄氏度") + .dataLabelsEnabled(false) + .yAxisGridLineWidth(0f) + .stacking(AAChartStackingType.Normal) + .markerRadius(8f) + .markerSymbolStyle(AAChartSymbolStyleType.BorderBlank) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("Do NOT Connect Nulls") + .lineWidth(5f) + .connectNulls(false) + .data(dataArr), + new AASeriesElement() + .name("Connect Nulls") + .lineWidth(5f) + .connectNulls(true) + .data(dataArr), + new AASeriesElement() + .name("Do NOT Connect Nulls") + .lineWidth(5f) + .connectNulls(false) + .data(dataArr), + new AASeriesElement() + .name("Connect Nulls") + .lineWidth(5f) + .connectNulls(true) + .data(dataArr) + }); + } + + +//- (NSArray *)generateRandomNumberArrayWithLength:(NSUInteger)length +// randomRange:(NSUInteger)randomRange +// minNum:(NSUInteger)minNum { +// NSMutableArray *randomNumArrA = [NSMutableArray array]; +// for (NSUInteger x = 0; x < length; x++) { +// NSUInteger randomNum = arc4random() % randomRange + minNum; +// [randomNumArrA addObject:@(randomNum)]; +// } +// return randomNumArrA; +// } + +public static ArrayList generateRandomNumberArrayWithLength(int length, int randomRange, int minNum) { + ArrayList randomNumArrA = new ArrayList<>(); + for (int x = 0; x < length; x++) { + int randomNum = (int) (Math.random() * randomRange + minNum); + randomNumArrA.add(randomNum); + } + return randomNumArrA; + } + + +// - (NSArray *)generateRandomNumberMixedNullArrayWithLength:(NSUInteger)length +// randomRange:(NSUInteger)randomRange +// minNum:(NSUInteger)minNum { +// NSMutableArray *randomNumArrA = [NSMutableArray array]; +// for (NSUInteger x = 0; x < length; x++) { +// if ((100 < x && x < 150) || (300 < x && x < 350)) { +// NSUInteger randomNum = arc4random() % randomRange + minNum; +// [randomNumArrA addObject:@(randomNum)]; +// } else { +// [randomNumArrA addObject:NSNull.null]; +// } +// } +// return randomNumArrA; +// } + + public static ArrayList generateRandomNumberMixedNullArrayWithLength(int length, int randomRange, int minNum) { + ArrayList randomNumArrA = new ArrayList<>(); + for (int x = 0; x < length; x++) { + if ((100 < x && x < 150) || (300 < x && x < 350)) { + int randomNum = (int) (Math.random() * randomRange + minNum); + randomNumArrA.add(randomNum); + } else { + randomNumArrA.add(null); + } + } + return randomNumArrA; + } + + +////https://github.com/AAChartModel/AAChartKit/issues/1419 +//- (AAChartModel *)lineChartsWithLargeDifferencesInTheNumberOfDataInDifferentSeriesElement { +// return AAChartModel.new +// .chartTypeSet(AAChartTypeLine) +// .backgroundColorSet(AAColor.blackColor) +// .colorsThemeSet(@[@"#1e90ff",@"#04d69f",@"#ef476f",@"#ffd066",]) +// .dataLabelsEnabledSet(false) +// .markerRadiusSet(@0) +// .seriesSet(@[ +// AASeriesElement.new +// .nameSet(@"2017") +// .lineWidthSet(@6) +// .dataSet([self generateRandomNumberMixedNullArrayWithLength:3550 randomRange:5 minNum:100]), +// AASeriesElement.new +// .nameSet(@"2018") +// .lineWidthSet(@6) +// .dataSet([self generateRandomNumberArrayWithLength:3550 randomRange:100 minNum:200]), +// AASeriesElement.new +// .nameSet(@"2019") +// .lineWidthSet(@6) +// .dataSet([self generateRandomNumberArrayWithLength:3550 randomRange:150 minNum:400]), +// AASeriesElement.new +// .nameSet(@"2020") +// .lineWidthSet(@6) +// .dataSet([self generateRandomNumberArrayWithLength:3550 randomRange:150 minNum:600]), +// ]); +//} + +//https://github.com/AAChartModel/AAChartKit/issues/1419 + public static AAChartModel lineChartsWithLargeDifferencesInTheNumberOfDataInDifferentSeriesElement() { + return new AAChartModel() + .chartType(AAChartType.Line) + .backgroundColor("#000000") + .colorsTheme(new String[]{"#1e90ff", "#04d69f", "#ef476f", "#ffd066"}) + .dataLabelsEnabled(false) + .markerRadius(0f) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2017") + .lineWidth(6f) + .data(generateRandomNumberMixedNullArrayWithLength(3550, 5, 100).toArray()), + new AASeriesElement() + .name("2018") + .lineWidth(6f) + .data(generateRandomNumberArrayWithLength(3550, 100, 200).toArray()), + new AASeriesElement() + .name("2019") + .lineWidth(6f) + .data(generateRandomNumberArrayWithLength(3550, 150, 400).toArray()), + new AASeriesElement() + .name("2020") + .lineWidth(6f) + .data(generateRandomNumberArrayWithLength(3550, 150, 600).toArray()), + }); + } + + public static AAChartModel largeDataStackingColumnChart() { + return new AAChartModel() + .chartType(AAChartType.Column) + .backgroundColor("#000000") + .colorsTheme(new String[]{"#1e90ff", "#04d69f", "#ef476f", "#ffd066"}) + .dataLabelsEnabled(false) + .stacking(AAChartStackingType.Normal) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("2018") + .lineWidth(6f) + .data(generateRandomNumberArrayWithLength(3550, 100, 200).toArray()), + new AASeriesElement() + .name("2019") + .lineWidth(6f) + .data(generateRandomNumberArrayWithLength(3550, 150, 400).toArray()), + new AASeriesElement() + .name("2020") + .lineWidth(6f) + .data(generateRandomNumberArrayWithLength(3550, 150, 600).toArray()), + }); + } + + ////https://github.com/AAChartModel/AAChartCore-Kotlin/issues/149 + //- (AAChartModel *)customAreasplineChartWithColorfulGradientColorZones { + // NSArray *redStopsArr = @[ + // @[@0.0, AARgbaColor(255, 0, 0, 1.0)],//颜色字符串设置支持十六进制类型和 rgba 类型 + // @[@1.0, AAColor.clearColor] + // ]; + // + // NSArray *greenStopsArr = @[ + // @[@0.0, AARgbaColor(0, 255, 0, 1.0)],//颜色字符串设置支持十六进制类型和 rgba 类型 + // @[@1.0, AAColor.clearColor] + // ]; + // + // NSArray *blueStopsArr = @[ + // @[@0.0, AARgbaColor(0, 0, 255, 1.0)],//颜色字符串设置支持十六进制类型和 rgba 类型 + // @[@1.0, AAColor.clearColor] + // ]; + // + // NSDictionary *redGradientColorDic = [AAGradientColor gradientColorWithDirection:AALinearGradientDirectionToBottom stopsArray:redStopsArr]; + // NSDictionary *greenGradientColorDic = [AAGradientColor gradientColorWithDirection:AALinearGradientDirectionToBottom stopsArray:greenStopsArr]; + // NSDictionary *blueGradientColorDic = [AAGradientColor gradientColorWithDirection:AALinearGradientDirectionToBottom stopsArray:blueStopsArr]; + // + // AADataElement *singleSpecialData = AADataElement.new + // .markerSet(AAMarker.new + // .radiusSet(@8)//曲线连接点半径 + // .symbolSet(AAChartSymbolTypeCircle)//曲线点类型:"circle", "square", "diamond", "triangle","triangle-down",默认是"circle" + // .fillColorSet(AAColor.whiteColor)//点的填充色(用来设置折线连接点的填充色) + // .lineWidthSet(@5)//外沿线的宽度(用来设置折线连接点的轮廓描边的宽度) + // //外沿线的颜色(用来设置折线连接点的轮廓描边颜色,当值为空字符串时,默认取数据点或数据列的颜色) + // .lineColorSet(@"#1E90FF")//道奇蓝 + // ) + // .dataLabelsSet(AADataLabels.new + // .enabledSet(true) + // .allowOverlapSet(true) + // .useHTMLSet(true) + // .backgroundColorSet(AARgbaColor(65, 111, 166, 1.0)) + // .borderRadiusSet(@10) + // .shapeSet(@"callout") + // .formatSet(@"{point.category}
{series.name}: {point.y} %") + // .styleSet(AAStyleColorSizeWeight(AAColor.whiteColor, 12, AAChartFontWeightTypeBold)) + // .xSet(@-80).ySet(@(5)) + // .alignSet(AAChartAlignTypeCenter) + // .verticalAlignSet(AAChartVerticalAlignTypeTop) + // .overflowSet(@"none") + // .cropSet(false) + // ) + // .ySet(@85.3); + // + // AAStyle *axisLabelsStyle = AAStyleColorSizeWeight(AAColor.whiteColor, 12, AAChartFontWeightTypeBold); + // + // return AAChartModel.new + // .chartTypeSet(AAChartTypeAreaspline) + // .backgroundColorSet(AAColor.blackColor) + // .categoriesSet(@[ + // @"Jan", @"Feb", @"Mar", @"Apr", @"May", @"Jun", + // @"Jul", @"Aug", @"Sep", @"Oct", @"Nov", @"Dec" + // ]) + // .dataLabelsEnabledSet(false) + // .legendEnabledSet(false) + // .markerRadiusSet(@0) + // .xAxisLabelsStyleSet(axisLabelsStyle) + // .yAxisLabelsStyleSet(axisLabelsStyle) + // .xAxisGridLineStyleSet([AALineStyle styleWithColor:AAColor.whiteColor dashStyle:AAChartLineDashStyleTypeLongDashDotDot width:@0.5]) + // .yAxisGridLineStyleSet([AALineStyle styleWithWidth:@0]) + // .seriesSet(@[ + // AASeriesElement.new + // .nameSet(@"空气湿度") + // .lineWidthSet(@6) + // .zoneAxisSet(@"x") + // .zonesSet(@[ + // AAZonesElement.new + // .valueSet(@2) + // .colorSet(AAColor.redColor) + // .fillColorSet((id)redGradientColorDic ), + // AAZonesElement.new + // .valueSet(@5) + // .colorSet(AAColor.greenColor) + // .fillColorSet((id)greenGradientColorDic), + // AAZonesElement.new + // .colorSet(AAColor.blueColor) + // .fillColorSet((id)blueGradientColorDic), + // ]) + // .dataSet(@[@56.5, @33.3, @85.3, @23.9, @29.6, @34.5, @28.2, @26.5, @15.2, @56.5, @33.3, singleSpecialData]), + // ]); + //} + + //https://github.com/AAChartModel/AAChartCore-Kotlin/issues/149 + public static AAChartModel customAreasplineChartWithColorfulGradientColorZones() { + Object[][] redStopsArr = new Object[][]{ + new Object[]{0.0f, AARgba(255, 0, 0, 1.0f)},//颜色字符串设置支持十六进制类型和 rgba 类型 + new Object[]{1.0f, AAColor.Clear} + }; + + Object[][] greenStopsArr = new Object[][]{ + new Object[]{0.0f, AARgba(0, 255, 0, 1.0f)}, + new Object[]{1.0f, AAColor.Clear} + }; + + Object[][] blueStopsArr = new Object[][]{ + new Object[]{0.0f, AARgba(0, 0, 255, 1.0f)}, + new Object[]{1.0f, AAColor.Clear} + }; + + Map redGradientColorDic = AAGradientColor.linearGradient(AALinearGradientDirection.ToBottom, redStopsArr); + Map greenGradientColorDic = AAGradientColor.linearGradient(AALinearGradientDirection.ToBottom, greenStopsArr); + Map blueGradientColorDic = AAGradientColor.linearGradient(AALinearGradientDirection.ToBottom, blueStopsArr); + + AADataElement singleSpecialData = new AADataElement() + .marker(new AAMarker() + .radius(8f)//曲线连接点半径 + .symbol(AAChartSymbolType.Circle)//曲线点类型:"circle", "square", "diamond", "triangle","triangle-down",默认是"circle" + .fillColor(AAColor.White)//点的填充色(用来设置折线连接点的填充色) + .lineWidth(5f)//外沿线的宽度(用来设置折线连接点的轮廓描边的宽度) + //外沿线的颜色(用来设置折线连接点的轮廓描边颜色,当值为空字符串时,默认取数据点或数据列的颜色) + .lineColor(AAColor.Red) + ) + .dataLabels(new AADataLabels() + .enabled(true) + .allowOverlap(true) + .useHTML(true) + .backgroundColor(AARgba(65, 111, 166, 1.0f)) + .borderRadius(10f) + .shape("callout") + .format("{point.category}
{series.name}: {point.y} %") + .style(new AAStyle() + .color(AAColor.White) + .fontSize(12f) + .fontWeight(AAChartFontWeightType.Bold) + ) + .x(-80f) + .y(5f) + .align(AAChartAlignType.Center) + .verticalAlign(AAChartVerticalAlignType.Top) + .overflow("none") + .crop(false) + ) + .y(85.3f); + + AAStyle axisLabelsStyle = new AAStyle() + .color(AAColor.White) + .fontSize(12f) + .fontWeight(AAChartFontWeightType.Bold); + + return new AAChartModel() + .chartType(AAChartType.Areaspline) + .backgroundColor(AAColor.Black) + .categories(new String[]{ + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }) + .dataLabelsEnabled(false) + .legendEnabled(false) + .markerRadius(0f) +// .xAxisLabelsStyle(axisLabelsStyle) +// .yAxisLabelsStyle(axisLabelsStyle) +// .xAxisGridLineStyle(new AALineStyle() +// .color(AAColor.White) +// .dashStyle(AAChartLineDashStyleType.LongDashDotDot) +// .width(0.5f) +// ) +// .yAxisGridLineStyle(new AALineStyle() +// .width(0f) +// ) + .series(new AASeriesElement[]{ + new AASeriesElement() + .name("空气湿度") + .lineWidth(6f) + .zoneAxis("x") + .zones(new AAZonesElement[]{ + new AAZonesElement() + .value(2) + .color(AAColor.Red) + .fillColor(redGradientColorDic), + new AAZonesElement() + .value(5) + .color(AAColor.Green) + .fillColor(greenGradientColorDic), + new AAZonesElement() + .color(AAColor.Blue) + .fillColor(blueGradientColorDic), + }) + .data(new Object[]{ + 56.5f, 33.3f, 85.3f, 23.9f, 29.6f, 34.5f, 28.2f, 26.5f, 15.2f, 56.5f, 33.3f, singleSpecialData + }), + }); + + + } + + } diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponent.java b/app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponent.java new file mode 100644 index 0000000..736e17f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponent.java @@ -0,0 +1,81 @@ +package cn.shangyu.gdxzExpert.component; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; + +import com.binioter.guideview.Component; +import com.bumptech.glide.Glide; + +import cn.shangyu.gdxzExpert.R; + + +/** + * Created by binIoter on 16/6/17. + */ +public class SimpleComponent implements Component { + Context context; + public SimpleComponent(Context context) { + this.context=context; + } + + @Override public View getView(LayoutInflater inflater) { + + View ll = inflater.inflate(R.layout.big_component, null); + ImageView img_gif=ll.findViewById(R.id.imggif); + Glide.with(context).asGif().load(R.drawable.gank).into(img_gif); + ll.findViewById(R.id.ship).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(needDimss!=null) + { + needDimss.dimss(); + } + + } + }); + ll.findViewById(R.id.next).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(needDimss!=null) + { + needDimss.next(); + } + } + }); +// ll.setOnClickListener(new View.OnClickListener() { +// @Override public void onClick(View view) { +//// Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show(); +// } +// }); + return ll; + } + + + @Override public int getAnchor() { + return Component.ANCHOR_TOP; + } + + @Override public int getFitPosition() { + return Component.FIT_END; + } + + @Override public int getXOffset() { + return -15; + } + + @Override public int getYOffset() { + return -3; + } + private needDimss needDimss=null; + public interface needDimss + { + void dimss(); + void next(); + } + public void setNeedDimss(needDimss needDimss) + { + this.needDimss=needDimss; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponentNext.java b/app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponentNext.java new file mode 100644 index 0000000..88eaf32 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/component/SimpleComponentNext.java @@ -0,0 +1,72 @@ +package cn.shangyu.gdxzExpert.component; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; + +import com.binioter.guideview.Component; +import com.bumptech.glide.Glide; + +import cn.shangyu.gdxzExpert.R; + + +/** + * Created by binIoter on 16/6/17. + */ +public class SimpleComponentNext implements Component { + Context context; + public SimpleComponentNext(Context context) { + this.context=context; + } + + @Override public View getView(LayoutInflater inflater) { + + View ll = inflater.inflate(R.layout.big_component_next, null); + ImageView img_gif=ll.findViewById(R.id.imggif); + Glide.with(context).asGif().load(R.drawable.gank).into(img_gif); + + ll.findViewById(R.id.next).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + if(needDimss!=null) + { + needDimss.dimss(); + } + } + }); +// ll.setOnClickListener(new View.OnClickListener() { +// @Override public void onClick(View view) { +//// Toast.makeText(view.getContext(), "引导层被点击了", Toast.LENGTH_SHORT).show(); +// } +// }); + return ll; + } + + + @Override public int getAnchor() { + return Component.ANCHOR_BOTTOM; + } + + @Override public int getFitPosition() { + return Component.FIT_END; + } + + @Override public int getXOffset() { + return 15; + } + + @Override public int getYOffset() { + return 3; + } + private needDimss needDimss=null; + public interface needDimss + { + void dimss(); + void next(); + } + public void setNeedDimss(needDimss needDimss) + { + this.needDimss=needDimss; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ECAsyncTask.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ECAsyncTask.java new file mode 100644 index 0000000..335eb60 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ECAsyncTask.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo; + +import android.content.Context; +import android.os.AsyncTask; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public abstract class ECAsyncTask extends AsyncTask { + + private static final String TAG = "ECDemo.ECAsyncTask"; + private Context mContext; + private long mThreadId = 0; + public ECAsyncTask(Context context) { + this.mContext = context; + } + + public Context getContext() { + return mContext; + } + + + /** + * 是否网络请求 + * @return + */ + protected boolean isNetworkRequest() { + return true; + } + + + public void runTask() { + if(!isCancelled()) { + cancel(true); + } + if(mThreadId <= 0L && !isNetworkRequest()) { + return ; + } + + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + if(mContext == null) { + cancel(true); + ECResult exception = new ECResult(); + exception.throwable = new Exception(); + setResult(exception); + return ; + } + onAsyncTaskPreExecute(); + } + + private void setResult(ECResult result) { + if(result.throwable == null) { + onResult(result.obj); + return; + } + if(result.throwable instanceof Exception) { + onException((Exception)result.throwable); + return; + } + onException(new Exception(result.throwable)); + } + + protected void onException(Exception exception) { + if(exception == null) { + return ; + } + onError(R.string.errormsg_server); + LogUtil.e(TAG, exception.getMessage()); + } + + public void onError(int resid) { + ToastUtil.showMessage(resid); + } + + public final boolean isIdle() { + return (getStatus() != Status.RUNNING); + } + + protected void onAsyncTaskPreExecute() { + + } + + protected void onResult(Object obj) { + + } + + + public class ECResult { + Object obj; + Throwable throwable; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/RichTextBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/RichTextBean.java new file mode 100644 index 0000000..c271b4f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/RichTextBean.java @@ -0,0 +1,98 @@ +package cn.shangyu.gdxzExpert.ecdemo; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Created by luhuashan on 16/3/25. + */ +public class RichTextBean implements Parcelable { + + private String title; + private String desc; + private String url; + private String picUrl=""; + + protected RichTextBean(Parcel in) { + title = in.readString(); + desc = in.readString(); + url = in.readString(); + picUrl=in.readString(); + } + + public String getPicUrl() { + return picUrl; + } + + public void setPicUrl(String picUrl) { + this.picUrl = picUrl; + } + + public RichTextBean(){ + super(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public RichTextBean createFromParcel(Parcel in) { + return new RichTextBean(in); + } + + @Override + public RichTextBean[] newArray(int size) { + return new RichTextBean[size]; + } + }; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + /** + * Describe the kinds of special objects contained in this Parcelable's + * marshalled representation. + * + * @return a bitmask indicating the set of special object types marshalled + * by the Parcelable. + */ + @Override + public int describeContents() { + return 0; + } + + /** + * Flatten this object in to a Parcel. + * + * @param dest The Parcel in which the object should be written. + * @param flags Additional flags about how the object should be written. + * May be 0 or {@link #PARCELABLE_WRITE_RETURN_VALUE}. + */ + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(title); + dest.writeString(desc); + dest.writeString(url); + dest.writeString(picUrl); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ActivityTaskUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ActivityTaskUtils.java new file mode 100644 index 0000000..2e0b463 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ActivityTaskUtils.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.app.ActivityManager; +import android.content.Context; +import android.text.TextUtils; + +import java.util.List; + +/** + * 打印Activity相关信息 + * Created by Jorstin on 2015/3/18. + */ +public class ActivityTaskUtils { + + private Context mContext; + + /** + * + */ + public ActivityTaskUtils(Context context) { + mContext = context; + } + + public String toString() { + Context context = mContext; + if(context == null) { + return null ; + } + ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + String packageName = context.getPackageName(); + if(activityManager == null || TextUtils.isEmpty(packageName)) { + return null; + } + + List runningTasks = activityManager.getRunningTasks(100); + StringBuffer buffer = new StringBuffer(); + for(ActivityManager.RunningTaskInfo info : runningTasks) { + if(!info.baseActivity.getClassName().startsWith(packageName) && !info.topActivity.getClassName().startsWith(packageName)) { + continue; + } + Object[] args = new Object[5]; + args[0] = info.id; + args[1] = info.numRunning; + args[2] = info.numActivities; + args[3] = info.topActivity.getShortClassName(); + args[4] = info.baseActivity.getShortClassName(); + String.format("{id:%d num:%d/%d top:%s base:%s}", args); + } + + return buffer.toString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/AnimatorUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/AnimatorUtils.java new file mode 100644 index 0000000..505f4f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/AnimatorUtils.java @@ -0,0 +1,71 @@ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.animation.Animator; +import android.annotation.TargetApi; +import android.os.Build; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; + +/** + * com.yuntongxun.ecdemo.common in ECDemo_Android + * Created by Jorstin on 2015/6/23. + */ +public class AnimatorUtils { + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + public static void updateViewAnimation(View arcView , long duration , float translationX , final OnAnimationListener listener) { + if(arcView == null || SDKVersionUtils.isSmallerorEqual(Build.VERSION_CODES.ICE_CREAM_SANDWICH)) { + return ; + } + Animator animator = (Animator) arcView.getTag(R.anim.property_anim); + if (animator != null) { + animator.cancel(); + } + arcView.animate().cancel(); + if (listener == null) { + arcView.animate().setDuration(duration).translationX(translationX).translationY(0.0F); + return; + } + arcView.animate().setDuration(duration).translationX(translationX).translationY(0.0F).setListener(new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + } + + @Override + public void onAnimationEnd(Animator animation) { + listener.onAnimationEnd(); + } + + @Override + public void onAnimationCancel(Animator animation) { + listener.onAnimationCancel(); + } + + @Override + public void onAnimationRepeat(Animator animation) { + } + }); + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + public static void startViewAnimation(View arcView , float translationX) { + if(arcView == null || SDKVersionUtils.isSmallerorEqual(Build.VERSION_CODES.ICE_CREAM_SANDWICH)) { + return ; + } + Animator animator = (Animator) arcView.getTag(R.anim.property_anim); + if(animator != null) { + animator.cancel(); + } + arcView.animate().cancel(); + arcView.setTranslationX(translationX); + arcView.setTranslationY(0.0F); + } + + + public interface OnAnimationListener { + + void onAnimationCancel(); + void onAnimationEnd(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/CCPAppManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/CCPAppManager.java new file mode 100644 index 0000000..435ab1b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/CCPAppManager.java @@ -0,0 +1,406 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.net.Uri; + +import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; + +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ImageGalleryActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ImageGralleryPagerActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ImageMsgInfoEntry; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChatFooterPanel; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 存储SDK一些全局性的常量 + * Created by Jorstin on 2015/3/17. + */ +public class CCPAppManager { + + public static Md5FileNameGenerator md5FileNameGenerator = new Md5FileNameGenerator(); + /**Android 应用上下文*/ + private static Context mContext = null; + /**包名*/ + public static String pkgName = "cn.shangyu.gdxzExpert"; + /**SharedPreferences 存储名字前缀*/ + public static final String PREFIX = "cn.shangyu.gdxzExpert_"; + public static final int FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT = 0x10000000; + /**IM功能UserData字段默认文字*/ + public static final String USER_DATA = "cn.shangyu.gdxzExpert"; + public static HashMap mPhotoCache = new HashMap(); + public static ArrayList activities = new ArrayList(); + /**IM聊天更多功能面板*/ + private static ChatFooterPanel mChatFooterPanel; + public static String getPackageName() { + return pkgName; + } + + public static HashMap map = new HashMap(); + /** + * 返回SharePreference配置文件名称 + * @return + */ + public static String getSharePreferenceName() { + return pkgName + "_preferences"; + } + + public static SharedPreferences getSharePreference() { + if (mContext != null) { + return mContext.getSharedPreferences(getSharePreferenceName(), 0); + } + return null; + } + public static void put(String key, String v) { + map.put(key, v); + } + + public static String get(String k) { + return map.get(k); + } + /** + * 返回上下文对象 + * @return + */ + public static Context getContext(){ + return mContext; + } + + public static void sendRemoveMemberBR(){ + + getContext().sendBroadcast(new Intent("com.yuntongxun.ecdemo.removemember")); + } + + /** + * 设置上下文对象 + * @param context + */ + public static void setContext(Context context) { + mContext = context; + pkgName = context.getPackageName(); + LogUtil.d(LogUtil.getLogUtilsTag(CCPAppManager.class), + "setup application context for package: " + pkgName); + } + + public static ChatFooterPanel getChatFooterPanel(Context context) { + return mChatFooterPanel; + } + + + + + + + + + /** + * @param context + * @param path + */ + public static void doViewFilePrevieIntent(Context context ,String path) { + try { + Intent intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setAction(Intent.ACTION_VIEW); + + File file = new File(path); + + context.startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + LogUtil.e(LogUtil.getLogUtilsTag(CCPAppManager.class), "do view file error " + e.getLocalizedMessage()); + } + } + + /** + * + * @param cotnext + * @param value + */ + public static void startChattingImageViewAction(Context cotnext, ImageMsgInfoEntry value) { + Intent intent = new Intent(cotnext, ImageGralleryPagerActivity.class); + intent.putExtra(ImageGalleryActivity.CHATTING_MESSAGE, value); + cotnext.startActivity(intent); + } + + /** + * 批量查看图片 + * @param ctx + * @param position + * @param session + */ + public static void startChattingImageViewAction(Context ctx , int position , ArrayList session) { + Intent intent = new Intent(ctx, ImageGralleryPagerActivity.class); + intent.putExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_INDEX, position); + intent.putParcelableArrayListExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_URLS, session); + ctx.startActivity(intent); + } + /** + * 批量查看图片 + * @param ctx + * @param position + * @param session + */ + public static void startChattingImageViewAction(Context ctx , int position , ArrayList session, boolean NoDownlond) { + Intent intent = new Intent(ctx, ImageGralleryPagerActivity.class); + intent.putExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_INDEX, position); + intent.putExtra("download", NoDownlond); + intent.putParcelableArrayListExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_URLS, session); + ctx.startActivity(intent); + } + /** + * 获取应用程序版本名称 + * @return + */ + public static String getVersion() { +// String version = "0.0.0"; +// if(mContext == null) { +// return version; +// } +// try { +// PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( +// getPackageName(), 0); + return BuildConfig.VERSION_NAME; +// } catch (PackageManager.NameNotFoundException e) { +// e.printStackTrace(); +// } +// +// return version; + } + + /** + * 获取应用版本号 + * @return 版本号 + */ + public static int getVersionCode() { + int code = 1; + if(mContext == null) { + return code; + } +// try { +// PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( +// getPackageName(), 0); + code = BuildConfig.VERSION_CODE; +// } catch (PackageManager.NameNotFoundException e) { +// e.printStackTrace(); +// } + + return code; + } + + + public static void addActivity(ECSuperActivity activity) { + activities.add(activity); + } + + public static void clearActivity() { + for(ECSuperActivity activity : activities) { + if(activity != null) { + activity.finish(); + activity = null; + } + activities.clear(); + } + } + + /** + * 打开浏览器下载新版本 + * @param context + */ + public static void startUpdater(Context context) { + Uri uri = Uri.parse("http://dwz.cn/F8Amj"); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + context.startActivity(intent); + } + + public static HashMap prefValues = new HashMap(); + + /** + * + * @param key + * @param value + */ + public static void putPref(String key , Object value) { + prefValues.put(key, value); + } + + public static Object getPref(String key) { + return prefValues.remove(key); + } + + public static void removePref(String key) { + prefValues.remove(key); + } + + /** + * 开启在线客服 + * @param context + * @param contactid + */ + public static void startCustomerServiceAction(Context context , String contactid) { + Intent intent = new Intent(context, ChattingActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra(ChattingFragment.RECIPIENTS, contactid); + intent.putExtra(ChattingFragment.CONTACT_USER, "在线客服"); + intent.putExtra(ChattingActivity.CONNECTIVITY_SERVICE, true); + context.startActivity(intent); + } + + /** + * 聊天界面 + * @param context + * @param contactid + * @param username + */ + public static void startChattingAction(Context context , String contactid , String username, String type, String patientUuid, int state) { + startChattingAction(context , contactid , username , type, patientUuid, false, state); + } + //是否来自公益咨询isFriend + public static void startChattingAction(Context context , String contactid , String username, String type, String patientUuid, int state,boolean isFriend) { + startChattingAction(context , contactid , username , type, patientUuid, false, state,isFriend); + } + + /** + * + * @param context + * @param contactid + * @param username + * @param clearTop + */ + public static void startChattingAction(Context context , String contactid , String username , String type , + String patientUuid, boolean clearTop, int state) { + Intent intent = new Intent(context, ChattingActivity.class); + if(clearTop) { + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + } + intent.putExtra(ChattingFragment.RECIPIENTS, contactid); + intent.putExtra(ChattingFragment.CONTACT_USER, username); + intent.putExtra(ChattingFragment.CONTACT_TYPE, type); + intent.putExtra(ChattingFragment.PATIENT_UUID, patientUuid); + intent.putExtra(ChattingFragment.CUSTOMER_SERVICE, false); + intent.putExtra(ChattingFragment.CONSULT_STATE, state); + context.startActivity(intent); + } + //是否来自公益咨询isFriend + public static void startChattingAction(Context context , String contactid , String username , String type , + String patientUuid, boolean clearTop, int state,boolean isFriend) { + Intent intent = new Intent(context, ChattingActivity.class); + if(clearTop) { + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + } + intent.putExtra(ChattingFragment.RECIPIENTS, contactid); + intent.putExtra(ChattingFragment.CONTACT_USER, username); + intent.putExtra(ChattingFragment.CONTACT_TYPE, type); + intent.putExtra(ChattingFragment.PATIENT_UUID, patientUuid); + intent.putExtra(ChattingFragment.CUSTOMER_SERVICE, false); + intent.putExtra(ChattingFragment.CONSULT_STATE, state); + intent.putExtra(ChattingFragment.isFriend, isFriend); + context.startActivity(intent); + } + /** + * VoIP呼叫 + * @param nickname 昵称 + * @param contactId 呼出号码 + */ + /*public static void callVoIPAction(Context ctx , String nickname, String contactId) { + // VoIP呼叫 + callVoIPAction(ctx , ECVoIPCallManager.CallType.VOICE , nickname , contactId ,false); + }*/ + + /** + * 根据呼叫类型通话 + * @param ctx 上下文 + * @param callType 呼叫类型 + * @param nickname 昵称 + * @param contactId 号码 + */ + /* public static void callVoIPAction(Context ctx , ECVoIPCallManager.CallType callType ,String nickname, String contactId,boolean flag) { + // VoIP呼叫 + Intent callAction = new Intent(ctx , VoIPCallActivity.class); + if(callType == ECVoIPCallManager.CallType.VIDEO) { + callAction = new Intent(ctx , VideoActivity.class); + VoIPCallHelper.mHandlerVideoCall = true; + } else { + VoIPCallHelper.mHandlerVideoCall = false; + } + callAction.putExtra(VoIPCallActivity.EXTRA_CALL_NAME , nickname); + callAction.putExtra(VoIPCallActivity.EXTRA_CALL_NUMBER , contactId); + callAction.putExtra(ECDevice.CALLTYPE , callType); + callAction.putExtra(VoIPCallActivity.EXTRA_OUTGOING_CALL , true); + + if(flag){ + callAction.putExtra(VoIPCallActivity.ACTION_CALLBACK_CALL, true); + } + ctx.startActivity(callAction); + }*/ + + /** + * 根据呼叫类型通话 + * @param ctx 上下文 + * @param callType 呼叫类型 + * @param nickname 昵称 + * @param contactId 号码 + */ + /*public static void callVideoAction(Context ctx , ECVoIPCallManager.CallType callType ,String nickname, String contactId , String callid) { + // VoIP呼叫 + Intent callAction = new Intent(ctx , VoIPCallActivity.class); + if(callType == ECVoIPCallManager.CallType.VIDEO) { + callAction = new Intent(ctx , VideoActivity.class); + VoIPCallHelper.mHandlerVideoCall = true; + } else { + VoIPCallHelper.mHandlerVideoCall = false; + } + callAction.putExtra(VoIPCallActivity.EXTRA_CALL_NAME , nickname); + callAction.putExtra(VoIPCallActivity.EXTRA_CALL_NUMBER , contactId); + callAction.putExtra(ECDevice.CALLTYPE , callType); + callAction.putExtra(ECDevice.CALLID , callid); + callAction.putExtra(VoIPCallActivity.EXTRA_OUTGOING_CALL , true); + ctx.startActivity(callAction); + }*/ + + /** + * 多选呼叫菜单 + * @param ctx 上下文 + * @param nickname 昵称 + * @param contactId 号码 + */ + /*public static void showCallMenu(final Context ctx , final String nickname, final String contactId) { + ECListDialog dialog = new ECListDialog(ctx , R.array.chat_call);; + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + LogUtil.d("onDialogItemClick" , "position " + position); + + if(position==3){ + callVoIPAction(ctx, ECVoIPCallManager.CallType.VOICE, nickname , contactId,true); + return; + } + + callVoIPAction(ctx, ECVoIPCallManager.CallType.values()[position], nickname , contactId,false); + } + }); + dialog.setTitle(R.string.ec_talk_mode_select); + dialog.show(); + }*/ +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferenceSettings.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferenceSettings.java new file mode 100644 index 0000000..9d18a4a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferenceSettings.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import cn.shangyu.gdxzExpert.utils.Constant; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public enum ECPreferenceSettings { + + /** + * Whether is the first use of the application + * + */ + SETTINGS_FIRST_USE("com.yuntongxun.ecdemo_first_use" , Boolean.TRUE), + /**坚持云通讯登陆账号*/ + SETTINGS_YUNTONGXUN_ACCOUNT("com.yuntongxun.ecdemo_yun_account" , ""), + /**检查是否需要自动登录*/ + SETTINGS_REGIST_AUTO("com.yuntongxun.ecdemo_account" , ""), + /**是否使用回车键发送消息*/ + SETTINGS_ENABLE_ENTER_KEY("com.yuntongxun.ecdemo_sendmessage_by_enterkey" , Boolean.TRUE), + /**聊天键盘的高度*/ + SETTINGS_KEYBORD_HEIGHT("com.yuntongxun.ecdemo_keybord_height" , 0), + /**新消息声音*/ + SETTINGS_NEW_MSG_SOUND("com.yuntongxun.ecdemo_new_msg_sound" , true), + /**新消息震动*/ + SETTINGS_NEW_MSG_SHAKE("com.yuntongxun.ecdemo_new_msg_shake" , true), + SETTING_CHATTING_CONTACTID("com.yuntongxun.ecdemo_chatting_contactid" , ""), + /**图片缓存路径*/ + SETTINGS_CROPIMAGE_OUTPUTPATH("gdxzExpert.ecdemo_CropImage_OutputPath" , ""), + + + SETTINGS_APPKEY("com.yuntongxun.ecdemo_appkey" , Constant.AppKey), + SETTINGS_TOKEN("com.yuntongxun.ecdemo_token" , Constant.AppToken), + + + SETTINGS_ABSOLUTELY_EXIT("com.yuntongxun.ecdemo_absolutely_exit" , Boolean.FALSE), + SETTINGS_FULLY_EXIT("com.yuntongxun.ecdemo_fully_exit" , Boolean.FALSE), + SETTINGS_PREVIEW_SELECTED("com.yuntongxun.ecdemo_preview_selected" , Boolean.FALSE), + SETTINGS_OFFLINE_MESSAGE_VERSION("com.yuntongxun.ecdemo_offline_version" , 0), + /**设置是否是匿名聊天*/ + SETTINGS_SHOW_CHATTING_NAME("com.yuntongxun.ecdemo_show_chat_name" , false), + + SETTINGS_CUSTOM_APPKEY("com.yuntongxun.ecdemo_custom_appkey" , ""), + SETTINGS_CUSTOM_TOKEN("com.yuntongxun.ecdemo_custom_token" , ""), + SETTINGS_SERVER_CUSTOM("com.yuntongxun.ecdemo_setserver" , false); + + + + private final String mId; + private final Object mDefaultValue; + + /** + * Constructor of CCPPreferenceSettings. + * @param id + * The unique identifier of the setting + * @param defaultValue + * The default value of the setting + */ + private ECPreferenceSettings(String id, Object defaultValue) { + this.mId = id; + this.mDefaultValue = defaultValue; + } + + /** + * Method that returns the unique identifier of the setting. + * @return the mId + */ + public String getId() { + return this.mId; + } + + /** + * Method that returns the default value of the setting. + * + * @return Object The default value of the setting + */ + public Object getDefaultValue() { + return this.mDefaultValue; + } + + /** + * Method that returns an instance of {@link ECPreferenceSettings} from + * its. unique identifier + * + * @param id + * The unique identifier + * @return CCPPreferenceSettings The navigation sort mode + */ + public static ECPreferenceSettings fromId(String id) { + ECPreferenceSettings[] values = values(); + int cc = values.length; + for (int i = 0; i < cc; i++) { + if (values[i].mId == id) { + return values[i]; + } + } + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferences.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferences.java new file mode 100644 index 0000000..e3e7d95 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ECPreferences.java @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; + +import java.io.InvalidClassException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; + +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 参数配置序列号 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class ECPreferences { + + + /** + * The name of the CCP Demo settings file. + */ + public static final String CCP_PREFERENCE = getDefaultSharedPreferencesFileName(); + + /** + * Constructor of CcpPreferences. + */ + private ECPreferences() { + super(); + } + + /** + * Method that initializes the defaults preferences of the application. + */ + public static void loadDefaults() { + //Sets the default preferences if no value is set yet + try { + Map defaultPrefs = + new HashMap(); + ECPreferenceSettings[] values = ECPreferenceSettings.values(); + int cc = values.length; + for (int i = 0; i < cc; i++) { + defaultPrefs.put(values[i], values[i].getDefaultValue()); + } + savePreferences(defaultPrefs, false, true); + } catch (Exception ex) { + ex.printStackTrace(); + LogUtil.e("Save default settings fails"); + } + } + + + /** + * Method that returns the shared preferences of the application. + * + * @return SharedPreferences The shared preferences of the application + * @hide + */ + public static SharedPreferences getSharedPreferences() { + return BaseApplication.getInstance().getSharedPreferences( + getDefaultSharedPreferencesFileName(), Context.MODE_MULTI_PROCESS); + } + + /** + * + * @return SharedPreferences file name + */ + public static String getDefaultSharedPreferencesFileName() { + return "cn.shangyu.gdxzExpert_preferences"; + } + + /** + * To obtain the system preferences to save the file to edit the object + * @return + */ + public static Editor getSharedPreferencesEditor() { + SharedPreferences cCPreferences = getSharedPreferences(); + Editor edit = cCPreferences.edit(); + edit.remove(""); + return edit; + } + + /** + * Method that saves a preference. + * + * @param pref The preference identifier + * @param value The value of the preference + * @param applied If the preference was applied + * @throws InvalidClassException If the value of the preference is not of the + * type of the preference + */ + public static void savePreference(ECPreferenceSettings pref, Object value, boolean applied) + throws InvalidClassException { + Map prefs = + new HashMap(); + prefs.put(pref, value); + savePreferences(prefs, applied); + } + + /** + * Method that saves the preferences passed as argument. + * + * @param prefs The preferences to be saved + * @param applied If the preference was applied + * @throws InvalidClassException If the value of a preference is not of the + * type of the preference + */ + public static void savePreferences(Map prefs, boolean applied) + throws InvalidClassException { + savePreferences(prefs, true, applied); + } + + /** + * Method that saves the preferences passed as argument. + * + * @param prefs The preferences to be saved + * @param noSaveIfExists No saves if the preference if has a value + * @param applied If the preference was applied + * @throws InvalidClassException If the value of a preference is not of the + * type of the preference + */ + @SuppressLint("NewApi") + @SuppressWarnings("unchecked") + private static void savePreferences( + Map prefs, boolean noSaveIfExists, boolean applied) + throws InvalidClassException { + //Get the preferences editor + SharedPreferences sp = getSharedPreferences(); + Editor editor = sp.edit(); + + //Save all settings + Iterator it = prefs.keySet().iterator(); + while (it.hasNext()) { + ECPreferenceSettings pref = it.next(); + if (!noSaveIfExists && sp.contains(pref.getId())) { + //The preference already has a value + continue; + } + + //Known and valid types + Object value = prefs.get(pref); + if(value == null ) { + return; + } + if (value instanceof Boolean && pref.getDefaultValue() instanceof Boolean) { + editor.putBoolean(pref.getId(), ((Boolean)value).booleanValue()); + } else if (value instanceof String && pref.getDefaultValue() instanceof String) { + editor.putString(pref.getId(), (String)value); + } else if (value instanceof Integer && pref.getDefaultValue() instanceof Integer) { + editor.putInt(pref.getId(), (Integer)value); + } else if (value instanceof Long && pref.getDefaultValue() instanceof Long) { + editor.putLong(pref.getId(), (Long)value); + } else if (value instanceof Set && pref.getDefaultValue() instanceof Set) { + //editor.putStringSet(pref.getId(), (Set)value); + } else if (value instanceof ObjectStringIdentifier + && pref.getDefaultValue() instanceof ObjectStringIdentifier) { + editor.putString(pref.getId(), ((ObjectStringIdentifier)value).getId()); + } else { + //The object is not of the appropriate type + String msg = String.format( + "%s: %s", + pref.getId(), + value.getClass().getName()); + LogUtil.e( String.format( + "Configuration error. InvalidClassException: %s", + msg)); + throw new InvalidClassException(msg); + } + + } + + //Commit settings + editor.commit(); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/MethodInvoke.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/MethodInvoke.java new file mode 100644 index 0000000..91d9239 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/MethodInvoke.java @@ -0,0 +1,110 @@ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.app.Activity; +import android.content.Context; + +import java.lang.ref.WeakReference; +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ActivityTransition; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * com.yuntongxun.ecdemo.common in ECDemo_Android + * Created by Jorstin on 2015/6/25. + */ +public class MethodInvoke { + private static final String TAG = "gdxzExpert.MethodInvoke"; + + public static int getTransitionValue(String componentName) { + Class clazz = getTransitionClass(componentName); + if(clazz != null) { + return getAnnotationValue(clazz); + } + return 0; + } + + private static Class getTransitionClass(String componentName) { + try { + Class clazz = Class.forName(componentName); + return clazz; + } catch (ClassNotFoundException e) { + LogUtil.e(TAG , "Class " + componentName + " not found in dex"); + } + return null; + } + + public static int getAnnotationValue(Class clazz) { + ActivityTransition clazzAnnotation = clazz.getAnnotation(ActivityTransition.class); + if(clazzAnnotation != null) { + return clazzAnnotation.value(); + } + while (clazz.getSuperclass() != null) { + clazz = clazz.getSuperclass(); + clazzAnnotation = clazz.getAnnotation(ActivityTransition.class); + if(clazzAnnotation != null) { + return clazzAnnotation.value(); + } + } + return 0; + } + + public static void startTransitionPopin(Context context) { + if ((context == null) || (!(context instanceof Activity))) { + return; + } + ((Activity) context).overridePendingTransition(R.anim.pop_in, R.anim.anim_not_change); + } + + public static void startTransitionPopout(Context context) { + if ((context == null) || (!(context instanceof Activity))) { + return; + } + ((Activity) context).overridePendingTransition(R.anim.anim_not_change, R.anim.pop_out); + } + + public static void startTransitionNotChange(Context context) { + if ((context == null) || (!(context instanceof Activity))) { + return; + } + ((Activity) context).overridePendingTransition(R.anim.anim_not_change, R.anim.anim_not_change); + } + + + + public interface OnSwipeInvokeResultListener { + void onSwipeInvoke(boolean success); + } + + public static class SwipeInvocationHandler implements InvocationHandler { + + public WeakReference mWeakReference ; + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { + if(mWeakReference == null) { + LogUtil.i(TAG , "swipe invoke fail, callbackRef NULL!"); + return null; + } + OnSwipeInvokeResultListener onSwipeInvokeResultListener = mWeakReference.get(); + if(onSwipeInvokeResultListener == null) { + LogUtil.i(TAG , "swipe invoke fail, callback NULL!"); + return null; + } + boolean result = false; + if(args != null) { + if(args.length > 0) { + boolean isBoolArgs = (args[0] instanceof Boolean); + if(isBoolArgs) { + result = ((Boolean)args[0]).booleanValue(); + } + } + } + onSwipeInvokeResultListener.onSwipeInvoke(result); + return null; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ObjectStringIdentifier.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ObjectStringIdentifier.java new file mode 100644 index 0000000..8a4272b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ObjectStringIdentifier.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public interface ObjectStringIdentifier { + + /** + * Method that returns the identifier of the object. + * + * @return String The identifier of the object + */ + String getId(); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SDKVersionUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SDKVersionUtils.java new file mode 100644 index 0000000..9ebe276 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SDKVersionUtils.java @@ -0,0 +1,22 @@ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.os.Build; + +/** + * com.yuntongxun.ecdemo.common in ECDemo_Android + * Created by Jorstin on 2015/6/23. + */ +public class SDKVersionUtils { + + public static boolean isSmallerVersion(int version) { + return (Build.VERSION.SDK_INT < version); + } + + public static boolean isGreaterorEqual(int version) { + return (Build.VERSION.SDK_INT >= version); + } + + public static boolean isSmallerorEqual(int version) { + return (Build.VERSION.SDK_INT <= version); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipTranslucentMethodUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipTranslucentMethodUtils.java new file mode 100644 index 0000000..73d90fa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipTranslucentMethodUtils.java @@ -0,0 +1,84 @@ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.app.Activity; +import android.app.ActivityOptions; +import android.util.Log; + +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * com.yuntongxun.ecdemo.common in ECDemo_Android + * Created by Jorstin on 2015/6/25. + */ +public class SwipTranslucentMethodUtils { + + private static final String TAG = "gdxzExpert.SwipTranslucentMethodUtils"; + private SwipTranslucentMethodUtils() { + } + + /** + * Convert a translucent themed Activity + * {@link android.R.attr#windowIsTranslucent} to a fullscreen opaque + * Activity. + *

+ * Call this whenever the background of a translucent Activity has changed + * to become opaque. Doing so will allow the {@link android.view.Surface} of + * the Activity behind to be released. + *

+ * This call has no effect on non-translucent activities or on activities + * with the {@link android.R.attr#windowIsFloating} attribute. + */ + public static void convertActivityFromTranslucent(Activity activity) { + try { + Method method = Activity.class.getDeclaredMethod("convertFromTranslucent"); + method.setAccessible(true); + method.invoke(activity); + } catch (Throwable t) { + } + } + + /** + * Convert a translucent themed Activity + * {@link android.R.attr#windowIsTranslucent} back from opaque to + * translucent following a call to + * {@link #convertActivityFromTranslucent(Activity)} . + *

+ * Calling this allows the Activity behind this one to be seen again. Once + * all such Activities have been redrawn + *

+ * This call has no effect on non-translucent activities or on activities + * with the {@link android.R.attr#windowIsFloating} attribute. + */ + public static void convertActivityToTranslucent(Activity activity , MethodInvoke.SwipeInvocationHandler handler) { + try { + Class[] classes = Activity.class.getDeclaredClasses(); + Class translucentConversionListenerClazz = null; + for (Class clazz : classes) { + if (clazz.getSimpleName().contains("TranslucentConversionListener")) { + translucentConversionListenerClazz = clazz; + } + } + + //if(translucentConversionListenerClazz != null) { + Object proxy = Proxy.newProxyInstance(translucentConversionListenerClazz.getClassLoader(), new Class[] {translucentConversionListenerClazz}, handler); + //} + LogUtil.d(TAG , "proxy " + proxy); + if(!SDKVersionUtils.isGreaterorEqual(21)) { + Method method = Activity.class.getDeclaredMethod("convertToTranslucent", new Class[] {translucentConversionListenerClazz}); + method.setAccessible(true); + method.invoke(activity, new Object[]{proxy}); + } else { + Method method = Activity.class.getDeclaredMethod("convertToTranslucent", new Class[] {translucentConversionListenerClazz , ActivityOptions.class}); + method.setAccessible(true); + method.invoke(activity, new Object[]{proxy ,null}); + } + + } catch (Throwable t) { + LogUtil.e(TAG, Log.getStackTraceString(t)); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipeActivityManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipeActivityManager.java new file mode 100644 index 0000000..075f036 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/SwipeActivityManager.java @@ -0,0 +1,101 @@ +package cn.shangyu.gdxzExpert.ecdemo.common; + +import java.lang.ref.WeakReference; +import java.util.Iterator; +import java.util.LinkedList; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * com.yuntongxun.ecdemo.common in ECDemo_Android + * Created by Jorstin on 2015/6/23. + */ +public class SwipeActivityManager { + + private static final String TAG = "gdxzExpert.SwipeActivityManager"; + + private static LinkedList> mLinkedList = new LinkedList>(); + + public static void notifySwipe(float scrollParent) { + if(mLinkedList.size() <= 0) { + LogUtil.w(TAG , "notifySwipe callback stack empty!, scrollParent:" + scrollParent); + return ; + } + SwipeListener swipeListener = mLinkedList.get(0).get(); + if(swipeListener == null) { + LogUtil.w(TAG , "notifySwipe null, scrollParent " + scrollParent) ; + return ; + } + swipeListener.onScrollParent(scrollParent); + LogUtil.v(TAG , "notifySwipe scrollParent: " + scrollParent + ", callback: " + swipeListener); + } + + public static void pushCallback(SwipeListener listener) { + LogUtil.d(TAG, "pushCallback size " + mLinkedList.size() + " , " + listener); + WeakReference swipeListenerWeakReference = new WeakReference(listener); + mLinkedList.add(0, swipeListenerWeakReference); + } + + public static boolean popCallback(SwipeListener listener) { + int size = mLinkedList.size(); + LogUtil.d(TAG , "popCallback size " + size + " , " + listener); + if(listener == null) { + return true; + } + LinkedList list = new LinkedList(); + for(int i = 0 ; i < mLinkedList.size() ; i ++) { + if(listener != mLinkedList.get(i).get()) { + list.add(0 , Integer.valueOf(i)); + } else { + mLinkedList.remove(i); + LogUtil.d(TAG , "popCallback directly, index " + i); + } + if(!listener.isEnableGesture() || list.size() == i) { + LogUtil.d(TAG , "popCallback Fail! Maybe Top Activity"); + return false; + } + } + + Iterator iterator = list.iterator(); + while (iterator.hasNext()) { + Integer next = iterator.next(); + WeakReference remove = mLinkedList.remove(next.intValue()); + LogUtil.d(TAG , "popCallback, popup " + (remove != null ? remove : "NULL-CALLBACK")); + } + return list.isEmpty(); + } + + + public static void notifySettle(boolean open , int speed) { + if(mLinkedList.size() <= 0) { + LogUtil.w(TAG , "notifySettle callback stack empty!, open: " + open + ", speed:" + speed); + return ; + } + SwipeListener swipeListener = mLinkedList.get(0).get(); + if(swipeListener == null) { + LogUtil.w(TAG , "notifySettle null, open: " + open + ", speed:" + speed); + return ; + } + swipeListener.notifySettle(open , speed); + LogUtil.v(TAG , "notifySettle, open:" + open + " speed: " + speed + " callback:" + swipeListener); + } + + + + + public interface SwipeListener { + /** + * Invoke when state change + * @param scrollPercent scroll percent of this view + */ + void onScrollParent(float scrollPercent); + + void notifySettle(boolean open, int speed); + + /** + * 是否可以滑动 + * @return + */ + boolean isEnableGesture(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ViewDragHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ViewDragHelper.java new file mode 100644 index 0000000..a9a4c2d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/ViewDragHelper.java @@ -0,0 +1,1581 @@ +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.common; + +import android.content.Context; +import androidx.core.view.MotionEventCompat; +import androidx.core.view.VelocityTrackerCompat; +import androidx.core.view.ViewCompat; +import androidx.core.widget.ScrollerCompat; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.animation.Interpolator; + +import java.util.Arrays; + + +/** + * ViewDragHelper is a utility class for writing custom ViewGroups. It offers a + * number of useful operations and state tracking for allowing a user to drag + * and reposition views within their parent ViewGroup. + */ +public class ViewDragHelper { + private static final String TAG = "ViewDragHelper"; + + /** + * A null/invalid pointer ID. + */ + public static final int INVALID_POINTER = -1; + + /** + * A view is not currently being dragged or animating as a result of a + * fling/snap. + */ + public static final int STATE_IDLE = 0; + + /** + * A view is currently being dragged. The position is currently changing as + * a result of user input or simulated user input. + */ + public static final int STATE_DRAGGING = 1; + + /** + * A view is currently settling into place as a result of a fling or + * predefined non-interactive motion. + */ + public static final int STATE_SETTLING = 2; + + /** + * Edge flag indicating that the left edge should be affected. + */ + public static final int EDGE_LEFT = 1 << 0; + + /** + * Edge flag indicating that the right edge should be affected. + */ + public static final int EDGE_RIGHT = 1 << 1; + + /** + * Edge flag indicating that the top edge should be affected. + */ + public static final int EDGE_TOP = 1 << 2; + + /** + * Edge flag indicating that the bottom edge should be affected. + */ + public static final int EDGE_BOTTOM = 1 << 3; + + /** + * Edge flag set indicating all edges should be affected. + */ + public static final int EDGE_ALL = EDGE_LEFT | EDGE_TOP | EDGE_RIGHT | EDGE_BOTTOM; + + /** + * Indicates that a check should occur along the horizontal axis + */ + public static final int DIRECTION_HORIZONTAL = 1 << 0; + + /** + * Indicates that a check should occur along the vertical axis + */ + public static final int DIRECTION_VERTICAL = 1 << 1; + + /** + * Indicates that a check should occur along all axes + */ + public static final int DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL; + + public static final int EDGE_SIZE = 20; // dp + + private static final int BASE_SETTLE_DURATION = 256; // ms + + private static final int MAX_SETTLE_DURATION = 600; // ms + + // Current drag state; idle, dragging or settling + private int mDragState; + + // Distance to travel before a drag may begin + private int mTouchSlop; + + // Last known position/pointer tracking + private int mActivePointerId = INVALID_POINTER; + + private float[] mInitialMotionX; + + private float[] mInitialMotionY; + + private float[] mLastMotionX; + + private float[] mLastMotionY; + + private int[] mInitialEdgeTouched; + + private int[] mEdgeDragsInProgress; + + private int[] mEdgeDragsLocked; + + private int mPointersDown; + + private VelocityTracker mVelocityTracker; + + private float mMaxVelocity; + + private float mMinVelocity; + + private int mEdgeSize; + + private int mTrackingEdges; + + private ScrollerCompat mScroller; + + private final Callback mCallback; + + private View mCapturedView; + + private boolean mReleaseInProgress; + + private final ViewGroup mParentView; + + /** + * A Callback is used as a communication channel with the ViewDragHelper + * back to the parent view using it. on*methods are invoked on + * siginficant events and several accessor methods are expected to provide + * the ViewDragHelper with more information about the state of the parent + * view upon request. The callback also makes decisions governing the range + * and draggability of child views. + */ + public static abstract class Callback { + /** + * Called when the drag state changes. See the STATE_* + * constants for more information. + * + * @param state The new drag state + * @see #STATE_IDLE + * @see #STATE_DRAGGING + * @see #STATE_SETTLING + */ + public void onViewDragStateChanged(int state) { + } + + /** + * Called when the captured view's position changes as the result of a + * drag or settle. + * + * @param changedView View whose position changed + * @param left New X coordinate of the left edge of the view + * @param top New Y coordinate of the top edge of the view + * @param dx Change in X position from the last call + * @param dy Change in Y position from the last call + */ + public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { + } + + /** + * Called when a child view is captured for dragging or settling. The ID + * of the pointer currently dragging the captured view is supplied. If + * activePointerId is identified as {@link #INVALID_POINTER} the capture + * is programmatic instead of pointer-initiated. + * + * @param capturedChild Child view that was captured + * @param activePointerId Pointer id tracking the child capture + */ + public void onViewCaptured(View capturedChild, int activePointerId) { + } + + /** + * Called when the child view is no longer being actively dragged. The + * fling velocity is also supplied, if relevant. The velocity values may + * be clamped to system minimums or maximums. + *

+ * Calling code may decide to fling or otherwise release the view to let + * it settle into place. It should do so using + * {@link #settleCapturedViewAt(int, int)} or + * {@link #flingCapturedView(int, int, int, int)}. If the Callback + * invokes one of these methods, the ViewDragHelper will enter + * {@link #STATE_SETTLING} and the view capture will not fully end until + * it comes to a complete stop. If neither of these methods is invoked + * before onViewReleased returns, the view will stop in + * place and the ViewDragHelper will return to {@link #STATE_IDLE}. + *

+ * + * @param releasedChild The captured child view now being released + * @param xvel X velocity of the pointer as it left the screen in pixels + * per second. + * @param yvel Y velocity of the pointer as it left the screen in pixels + * per second. + */ + public void onViewReleased(View releasedChild, float xvel, float yvel) { + } + + /** + * Called when one of the subscribed edges in the parent view has been + * touched by the user while no child view is currently captured. + * + * @param edgeFlags A combination of edge flags describing the edge(s) + * currently touched + * @param pointerId ID of the pointer touching the described edge(s) + * @see #EDGE_LEFT + * @see #EDGE_TOP + * @see #EDGE_RIGHT + * @see #EDGE_BOTTOM + */ + public void onEdgeTouched(int edgeFlags, int pointerId) { + } + + /** + * Called when the given edge may become locked. This can happen if an + * edge drag was preliminarily rejected before beginning, but after + * {@link #onEdgeTouched(int, int)} was called. This method should + * return true to lock this edge or false to leave it unlocked. The + * default behavior is to leave edges unlocked. + * + * @param edgeFlags A combination of edge flags describing the edge(s) + * locked + * @return true to lock the edge, false to leave it unlocked + */ + public boolean onEdgeLock(int edgeFlags) { + return false; + } + + /** + * Called when the user has started a deliberate drag away from one of + * the subscribed edges in the parent view while no child view is + * currently captured. + * + * @param edgeFlags A combination of edge flags describing the edge(s) + * dragged + * @param pointerId ID of the pointer touching the described edge(s) + * @see #EDGE_LEFT + * @see #EDGE_TOP + * @see #EDGE_RIGHT + * @see #EDGE_BOTTOM + */ + public void onEdgeDragStarted(int edgeFlags, int pointerId) { + } + + /** + * Called to determine the Z-order of child views. + * + * @param index the ordered position to query for + * @return index of the view that should be ordered at position + * index + */ + public int getOrderedChildIndex(int index) { + return index; + } + + /** + * Return the magnitude of a draggable child view's horizontal range of + * motion in pixels. This method should return 0 for views that cannot + * move horizontally. + * + * @param child Child view to check + * @return range of horizontal motion in pixels + */ + public int getViewHorizontalDragRange(View child) { + return 0; + } + + /** + * Return the magnitude of a draggable child view's vertical range of + * motion in pixels. This method should return 0 for views that cannot + * move vertically. + * + * @param child Child view to check + * @return range of vertical motion in pixels + */ + public int getViewVerticalDragRange(View child) { + return 0; + } + + /** + * Called when the user's input indicates that they want to capture the + * given child view with the pointer indicated by pointerId. The + * callback should return true if the user is permitted to drag the + * given view with the indicated pointer. + *

+ * ViewDragHelper may call this method multiple times for the same view + * even if the view is already captured; this indicates that a new + * pointer is trying to take control of the view. + *

+ *

+ * If this method returns true, a call to + * {@link #onViewCaptured(View, int)} will follow if the + * capture is successful. + *

+ * + * @param child Child the user is attempting to capture + * @param pointerId ID of the pointer attempting the capture + * @return true if capture should be allowed, false otherwise + */ + public abstract boolean tryCaptureView(View child, int pointerId); + + /** + * Restrict the motion of the dragged child view along the horizontal + * axis. The default implementation does not allow horizontal motion; + * the extending class must override this method and provide the desired + * clamping. + * + * @param child Child view being dragged + * @param left Attempted motion along the X axis + * @param dx Proposed change in position for left + * @return The new clamped position for left + */ + public int clampViewPositionHorizontal(View child, int left, int dx) { + return 0; + } + + /** + * Restrict the motion of the dragged child view along the vertical + * axis. The default implementation does not allow vertical motion; the + * extending class must override this method and provide the desired + * clamping. + * + * @param child Child view being dragged + * @param top Attempted motion along the Y axis + * @param dy Proposed change in position for top + * @return The new clamped position for top + */ + public int clampViewPositionVertical(View child, int top, int dy) { + return 0; + } + } + + /** + * Interpolator defining the animation curve for mScroller + */ + private static final Interpolator sInterpolator = new Interpolator() { + public float getInterpolation(float t) { + t -= 1.0f; + return t * t * t * t * t + 1.0f; + } + }; + + private final Runnable mSetIdleRunnable = new Runnable() { + public void run() { + setDragState(STATE_IDLE); + } + }; + + /** + * Factory method to create a new ViewDragHelper. + * + * @param forParent Parent view to monitor + * @param cb Callback to provide information and receive events + * @return a new ViewDragHelper instance + */ + public static ViewDragHelper create(ViewGroup forParent, Callback cb) { + return new ViewDragHelper(forParent.getContext(), forParent, cb); + } + + /** + * Factory method to create a new ViewDragHelper. + * + * @param forParent Parent view to monitor + * @param sensitivity Multiplier for how sensitive the helper should be + * about detecting the start of a drag. Larger values are more + * sensitive. 1.0f is normal. + * @param cb Callback to provide information and receive events + * @return a new ViewDragHelper instance + */ + public static ViewDragHelper create(ViewGroup forParent, float sensitivity, Callback cb) { + final ViewDragHelper helper = create(forParent, cb); + helper.mTouchSlop = (int) (helper.mTouchSlop * (1 / sensitivity)); + return helper; + } + + /** + * Apps should use ViewDragHelper.create() to get a new instance. This will + * allow VDH to use internal compatibility implementations for different + * platform versions. + * + * @param context Context to initialize config-dependent params from + * @param forParent Parent view to monitor + */ + private ViewDragHelper(Context context, ViewGroup forParent, Callback cb) { + if (forParent == null) { + throw new IllegalArgumentException("Parent view may not be null"); + } + if (cb == null) { + throw new IllegalArgumentException("Callback may not be null"); + } + + mParentView = forParent; + mCallback = cb; + + final ViewConfiguration vc = ViewConfiguration.get(context); + final float density = context.getResources().getDisplayMetrics().density; + mEdgeSize = (int) (EDGE_SIZE * density + 0.5f); + + mTouchSlop = vc.getScaledTouchSlop(); + mMaxVelocity = vc.getScaledMaximumFlingVelocity(); + mMinVelocity = vc.getScaledMinimumFlingVelocity(); + mScroller = ScrollerCompat.create(context, sInterpolator); + } + + /** + * Sets the sensitivity of the dragger. + * + * @param context The application context. + * @param sensitivity value between 0 and 1, the final value for touchSlop = + * ViewConfiguration.getScaledTouchSlop * (1 / s); + */ + public void setSensitivity(Context context, float sensitivity) { + float s = Math.max(0f, Math.min(1.0f, sensitivity)); + ViewConfiguration viewConfiguration = ViewConfiguration.get(context); + mTouchSlop = (int) (viewConfiguration.getScaledTouchSlop() * (1 / s)); + } + + /** + * Set the minimum velocity that will be detected as having a magnitude + * greater than zero in pixels per second. Callback methods accepting a + * velocity will be clamped appropriately. + * + * @param minVel minimum velocity to detect + */ + public void setMinVelocity(float minVel) { + mMinVelocity = minVel; + } + + /** + * Set the max velocity that will be detected as having a magnitude + * greater than zero in pixels per second. Callback methods accepting a + * velocity will be clamped appropriately. + * + * @param maxVel max velocity to detect + */ + public void setMaxVelocity(float maxVel) { + mMaxVelocity = maxVel; + } + + /** + * Return the currently configured minimum velocity. Any flings with a + * magnitude less than this value in pixels per second. Callback methods + * accepting a velocity will receive zero as a velocity value if the real + * detected velocity was below this threshold. + * + * @return the minimum velocity that will be detected + */ + public float getMinVelocity() { + return mMinVelocity; + } + + /** + * Retrieve the current drag state of this helper. This will return one of + * {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}. + * + * @return The current drag state + */ + public int getViewDragState() { + return mDragState; + } + + /** + * Enable edge tracking for the selected edges of the parent view. The + * callback's + * {@link Callback#onEdgeTouched(int, int)} + * and + * {@link Callback#onEdgeDragStarted(int, int)} + * methods will only be invoked for edges for which edge tracking has been + * enabled. + * + * @param edgeFlags Combination of edge flags describing the edges to watch + * @see #EDGE_LEFT + * @see #EDGE_TOP + * @see #EDGE_RIGHT + * @see #EDGE_BOTTOM + */ + public void setEdgeTrackingEnabled(int edgeFlags) { + mTrackingEdges = edgeFlags; + } + + /** + * Return the size of an edge. This is the range in pixels along the edges + * of this view that will actively detect edge touches or drags if edge + * tracking is enabled. + * + * @return The size of an edge in pixels + * @see #setEdgeTrackingEnabled(int) + */ + public int getEdgeSize() { + return mEdgeSize; + } + + /** + * Set the size of an edge. This is the range in pixels along the edges of + * this view that will actively detect edge touches or drags if edge + * tracking is enabled. + * + * @param size The size of an edge in pixels + */ + public void setEdgeSize(int size) { + mEdgeSize = size; + } + + /** + * Capture a specific child view for dragging within the parent. The + * callback will be notified but + * {@link Callback#tryCaptureView(View, int)} + * will not be asked permission to capture this view. + * + * @param childView Child view to capture + * @param activePointerId ID of the pointer that is dragging the captured + * child view + */ + public void captureChildView(View childView, int activePointerId) { + if (childView.getParent() != mParentView) { + throw new IllegalArgumentException("captureChildView: parameter must be a descendant " + + "of the ViewDragHelper's tracked parent view (" + mParentView + ")"); + } + + mCapturedView = childView; + mActivePointerId = activePointerId; + mCallback.onViewCaptured(childView, activePointerId); + setDragState(STATE_DRAGGING); + } + + /** + * @return The currently captured view, or null if no view has been + * captured. + */ + public View getCapturedView() { + return mCapturedView; + } + + /** + * @return The ID of the pointer currently dragging the captured view, or + * {@link #INVALID_POINTER}. + */ + public int getActivePointerId() { + return mActivePointerId; + } + + /** + * @return The minimum distance in pixels that the user must travel to + * initiate a drag + */ + public int getTouchSlop() { + return mTouchSlop; + } + + /** + * The result of a call to this method is equivalent to + * {@link #processTouchEvent(MotionEvent)} receiving an + * ACTION_CANCEL event. + */ + public void cancel() { + mActivePointerId = INVALID_POINTER; + clearMotionHistory(); + + if (mVelocityTracker != null) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + } + + /** + * {@link #cancel()}, but also abort all motion in progress and snap to the + * end of any animation. + */ + public void abort() { + cancel(); + if (mDragState == STATE_SETTLING) { + final int oldX = mScroller.getCurrX(); + final int oldY = mScroller.getCurrY(); + mScroller.abortAnimation(); + final int newX = mScroller.getCurrX(); + final int newY = mScroller.getCurrY(); + mCallback.onViewPositionChanged(mCapturedView, newX, newY, newX - oldX, newY - oldY); + } + setDragState(STATE_IDLE); + } + + /** + * Animate the view child to the given (left, top) position. If + * this method returns true, the caller should invoke + * {@link #continueSettling(boolean)} on each subsequent frame to continue + * the motion until it returns false. If this method returns false there is + * no further work to do to complete the movement. + *

+ * This operation does not count as a capture event, though + * {@link #getCapturedView()} will still report the sliding view while the + * slide is in progress. + *

+ * + * @param child Child view to capture and animate + * @param finalLeft Final left position of child + * @param finalTop Final top position of child + * @return true if animation should continue through + * {@link #continueSettling(boolean)} calls + */ + public boolean smoothSlideViewTo(View child, int finalLeft, int finalTop) { + mCapturedView = child; + mActivePointerId = INVALID_POINTER; + + return forceSettleCapturedViewAt(finalLeft, finalTop, 0, 0); + } + + /** + * Settle the captured view at the given (left, top) position. The + * appropriate velocity from prior motion will be taken into account. If + * this method returns true, the caller should invoke + * {@link #continueSettling(boolean)} on each subsequent frame to continue + * the motion until it returns false. If this method returns false there is + * no further work to do to complete the movement. + * + * @param finalLeft Settled left edge position for the captured view + * @param finalTop Settled top edge position for the captured view + * @return true if animation should continue through + * {@link #continueSettling(boolean)} calls + */ + public boolean settleCapturedViewAt(int finalLeft, int finalTop) { + if (!mReleaseInProgress) { + throw new IllegalStateException("Cannot settleCapturedViewAt outside of a call to " + + "Callback#onViewReleased"); + } + + return forceSettleCapturedViewAt(finalLeft, finalTop, + (int) VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId), + (int) VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId)); + } + + /** + * Settle the captured view at the given (left, top) position. + * + * @param finalLeft Target left position for the captured view + * @param finalTop Target top position for the captured view + * @param xvel Horizontal velocity + * @param yvel Vertical velocity + * @return true if animation should continue through + * {@link #continueSettling(boolean)} calls + */ + private boolean forceSettleCapturedViewAt(int finalLeft, int finalTop, int xvel, int yvel) { + final int startLeft = mCapturedView.getLeft(); + final int startTop = mCapturedView.getTop(); + final int dx = finalLeft - startLeft; + final int dy = finalTop - startTop; + + if (dx == 0 && dy == 0) { + // Nothing to do. Send callbacks, be done. + mScroller.abortAnimation(); + setDragState(STATE_IDLE); + return false; + } + + final int duration = computeSettleDuration(mCapturedView, dx, dy, xvel, yvel); + mScroller.startScroll(startLeft, startTop, dx, dy, duration); + + setDragState(STATE_SETTLING); + return true; + } + + private int computeSettleDuration(View child, int dx, int dy, int xvel, int yvel) { + xvel = clampMag(xvel, (int) mMinVelocity, (int) mMaxVelocity); + yvel = clampMag(yvel, (int) mMinVelocity, (int) mMaxVelocity); + final int absDx = Math.abs(dx); + final int absDy = Math.abs(dy); + final int absXVel = Math.abs(xvel); + final int absYVel = Math.abs(yvel); + final int addedVel = absXVel + absYVel; + final int addedDistance = absDx + absDy; + + final float xweight = xvel != 0 ? (float) absXVel / addedVel : (float) absDx + / addedDistance; + final float yweight = yvel != 0 ? (float) absYVel / addedVel : (float) absDy + / addedDistance; + + int xduration = computeAxisDuration(dx, xvel, mCallback.getViewHorizontalDragRange(child)); + int yduration = computeAxisDuration(dy, yvel, mCallback.getViewVerticalDragRange(child)); + + return (int) (xduration * xweight + yduration * yweight); + } + + private int computeAxisDuration(int delta, int velocity, int motionRange) { + if (delta == 0) { + return 0; + } + + final int width = mParentView.getWidth(); + final int halfWidth = width / 2; + final float distanceRatio = Math.min(1f, (float) Math.abs(delta) / width); + final float distance = halfWidth + halfWidth + * distanceInfluenceForSnapDuration(distanceRatio); + + int duration; + velocity = Math.abs(velocity); + if (velocity > 0) { + duration = 4 * Math.round(1000 * Math.abs(distance / velocity)); + } else { + final float range = (float) Math.abs(delta) / motionRange; + duration = (int) ((range + 1) * BASE_SETTLE_DURATION); + } + return Math.min(duration, MAX_SETTLE_DURATION); + } + + /** + * Clamp the magnitude of value for absMin and absMax. If the value is below + * the minimum, it will be clamped to zero. If the value is above the + * maximum, it will be clamped to the maximum. + * + * @param value Value to clamp + * @param absMin Absolute value of the minimum significant value to return + * @param absMax Absolute value of the maximum value to return + * @return The clamped value with the same sign as value + */ + private int clampMag(int value, int absMin, int absMax) { + final int absValue = Math.abs(value); + if (absValue < absMin) + return 0; + if (absValue > absMax) + return value > 0 ? absMax : -absMax; + return value; + } + + /** + * Clamp the magnitude of value for absMin and absMax. If the value is below + * the minimum, it will be clamped to zero. If the value is above the + * maximum, it will be clamped to the maximum. + * + * @param value Value to clamp + * @param absMin Absolute value of the minimum significant value to return + * @param absMax Absolute value of the maximum value to return + * @return The clamped value with the same sign as value + */ + private float clampMag(float value, float absMin, float absMax) { + final float absValue = Math.abs(value); + if (absValue < absMin) + return 0; + if (absValue > absMax) + return value > 0 ? absMax : -absMax; + return value; + } + + private float distanceInfluenceForSnapDuration(float f) { + f -= 0.5f; // center the values about 0. + f *= 0.3f * Math.PI / 2.0f; + return (float) Math.sin(f); + } + + /** + * Settle the captured view based on standard free-moving fling behavior. + * The caller should invoke {@link #continueSettling(boolean)} on each + * subsequent frame to continue the motion until it returns false. + * + * @param minLeft Minimum X position for the view's left edge + * @param minTop Minimum Y position for the view's top edge + * @param maxLeft Maximum X position for the view's left edge + * @param maxTop Maximum Y position for the view's top edge + */ + public void flingCapturedView(int minLeft, int minTop, int maxLeft, int maxTop) { + if (!mReleaseInProgress) { + throw new IllegalStateException("Cannot flingCapturedView outside of a call to " + + "Callback#onViewReleased"); + } + + mScroller.fling(mCapturedView.getLeft(), mCapturedView.getTop(), + (int) VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId), + (int) VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId), + minLeft, maxLeft, minTop, maxTop); + + setDragState(STATE_SETTLING); + } + + /** + * Move the captured settling view by the appropriate amount for the current + * time. If continueSettling returns true, the caller should + * call it again on the next frame to continue. + * + * @param deferCallbacks true if state callbacks should be deferred via + * posted message. Set this to true if you are calling this + * method from {@link View#computeScroll()} or + * similar methods invoked as part of layout or drawing. + * @return true if settle is still in progress + */ + public boolean continueSettling(boolean deferCallbacks) { + if (mDragState == STATE_SETTLING) { + boolean keepGoing = mScroller.computeScrollOffset(); + final int x = mScroller.getCurrX(); + final int y = mScroller.getCurrY(); + final int dx = x - mCapturedView.getLeft(); + final int dy = y - mCapturedView.getTop(); + + if (dx != 0) { + mCapturedView.offsetLeftAndRight(dx); + } + if (dy != 0) { + mCapturedView.offsetTopAndBottom(dy); + } + + if (dx != 0 || dy != 0) { + mCallback.onViewPositionChanged(mCapturedView, x, y, dx, dy); + } + + if (keepGoing && x == mScroller.getFinalX() && y == mScroller.getFinalY()) { + // Close enough. The interpolator/scroller might think we're + // still moving + // but the user sure doesn't. + mScroller.abortAnimation(); + keepGoing = mScroller.isFinished(); + } + + if (!keepGoing) { + if (deferCallbacks) { + mParentView.post(mSetIdleRunnable); + } else { + setDragState(STATE_IDLE); + } + } + } + + return mDragState == STATE_SETTLING; + } + + /** + * Like all callback events this must happen on the UI thread, but release + * involves some extra semantics. During a release (mReleaseInProgress) is + * the only time it is valid to call {@link #settleCapturedViewAt(int, int)} + * or {@link #flingCapturedView(int, int, int, int)}. + */ + private void dispatchViewReleased(float xvel, float yvel) { + mReleaseInProgress = true; + mCallback.onViewReleased(mCapturedView, xvel, yvel); + mReleaseInProgress = false; + + if (mDragState == STATE_DRAGGING) { + // onViewReleased didn't call a method that would have changed this. + // Go idle. + setDragState(STATE_IDLE); + } + } + + private void clearMotionHistory() { + if (mInitialMotionX == null) { + return; + } + Arrays.fill(mInitialMotionX, 0); + Arrays.fill(mInitialMotionY, 0); + Arrays.fill(mLastMotionX, 0); + Arrays.fill(mLastMotionY, 0); + Arrays.fill(mInitialEdgeTouched, 0); + Arrays.fill(mEdgeDragsInProgress, 0); + Arrays.fill(mEdgeDragsLocked, 0); + mPointersDown = 0; + } + + private void clearMotionHistory(int pointerId) { + if (mInitialMotionX == null) { + return; + } + mInitialMotionX[pointerId] = 0; + mInitialMotionY[pointerId] = 0; + mLastMotionX[pointerId] = 0; + mLastMotionY[pointerId] = 0; + mInitialEdgeTouched[pointerId] = 0; + mEdgeDragsInProgress[pointerId] = 0; + mEdgeDragsLocked[pointerId] = 0; + mPointersDown &= ~(1 << pointerId); + } + + private void ensureMotionHistorySizeForId(int pointerId) { + if (mInitialMotionX == null || mInitialMotionX.length <= pointerId) { + float[] imx = new float[pointerId + 1]; + float[] imy = new float[pointerId + 1]; + float[] lmx = new float[pointerId + 1]; + float[] lmy = new float[pointerId + 1]; + int[] iit = new int[pointerId + 1]; + int[] edip = new int[pointerId + 1]; + int[] edl = new int[pointerId + 1]; + + if (mInitialMotionX != null) { + System.arraycopy(mInitialMotionX, 0, imx, 0, mInitialMotionX.length); + System.arraycopy(mInitialMotionY, 0, imy, 0, mInitialMotionY.length); + System.arraycopy(mLastMotionX, 0, lmx, 0, mLastMotionX.length); + System.arraycopy(mLastMotionY, 0, lmy, 0, mLastMotionY.length); + System.arraycopy(mInitialEdgeTouched, 0, iit, 0, mInitialEdgeTouched.length); + System.arraycopy(mEdgeDragsInProgress, 0, edip, 0, mEdgeDragsInProgress.length); + System.arraycopy(mEdgeDragsLocked, 0, edl, 0, mEdgeDragsLocked.length); + } + + mInitialMotionX = imx; + mInitialMotionY = imy; + mLastMotionX = lmx; + mLastMotionY = lmy; + mInitialEdgeTouched = iit; + mEdgeDragsInProgress = edip; + mEdgeDragsLocked = edl; + } + } + + private void saveInitialMotion(float x, float y, int pointerId) { + ensureMotionHistorySizeForId(pointerId); + mInitialMotionX[pointerId] = mLastMotionX[pointerId] = x; + mInitialMotionY[pointerId] = mLastMotionY[pointerId] = y; + mInitialEdgeTouched[pointerId] = getEdgeTouched((int) x, (int) y); + mPointersDown |= 1 << pointerId; + } + + private void saveLastMotion(MotionEvent ev) { + final int pointerCount = MotionEventCompat.getPointerCount(ev); + for (int i = 0; i < pointerCount; i++) { + final int pointerId = MotionEventCompat.getPointerId(ev, i); + final float x = MotionEventCompat.getX(ev, i); + final float y = MotionEventCompat.getY(ev, i); + mLastMotionX[pointerId] = x; + mLastMotionY[pointerId] = y; + } + } + + /** + * Check if the given pointer ID represents a pointer that is currently down + * (to the best of the ViewDragHelper's knowledge). + *

+ * The state used to report this information is populated by the methods + * {@link #shouldInterceptTouchEvent(MotionEvent)} or + * {@link #processTouchEvent(MotionEvent)}. If one of these + * methods has not been called for all relevant MotionEvents to track, the + * information reported by this method may be stale or incorrect. + *

+ * + * @param pointerId pointer ID to check; corresponds to IDs provided by + * MotionEvent + * @return true if the pointer with the given ID is still down + */ + public boolean isPointerDown(int pointerId) { + return (mPointersDown & 1 << pointerId) != 0; + } + + void setDragState(int state) { + if (mDragState != state) { + mDragState = state; + mCallback.onViewDragStateChanged(state); + if (state == STATE_IDLE) { + mCapturedView = null; + } + } + } + + /** + * Attempt to capture the view with the given pointer ID. The callback will + * be involved. This will put us into the "dragging" state. If we've already + * captured this view with this pointer this method will immediately return + * true without consulting the callback. + * + * @param toCapture View to capture + * @param pointerId Pointer to capture with + * @return true if capture was successful + */ + boolean tryCaptureViewForDrag(View toCapture, int pointerId) { + if (toCapture == mCapturedView && mActivePointerId == pointerId) { + // Already done! + return true; + } + if (toCapture != null && mCallback.tryCaptureView(toCapture, pointerId)) { + mActivePointerId = pointerId; + captureChildView(toCapture, pointerId); + return true; + } + return false; + } + + /** + * Tests scrollability within child views of v given a delta of dx. + * + * @param v View to test for horizontal scrollability + * @param checkV Whether the view v passed should itself be checked for + * scrollability (true), or just its children (false). + * @param dx Delta scrolled in pixels along the X axis + * @param dy Delta scrolled in pixels along the Y axis + * @param x X coordinate of the active touch point + * @param y Y coordinate of the active touch point + * @return true if child views of v can be scrolled by delta of dx. + */ + protected boolean canScroll(View v, boolean checkV, int dx, int dy, int x, int y) { + if (v instanceof ViewGroup) { + final ViewGroup group = (ViewGroup) v; + final int scrollX = v.getScrollX(); + final int scrollY = v.getScrollY(); + final int count = group.getChildCount(); + // Count backwards - let topmost views consume scroll distance + // first. + for (int i = count - 1; i >= 0; i--) { + // TODO: Add versioned support here for transformed views. + // This will not work for transformed views in Honeycomb+ + final View child = group.getChildAt(i); + if (x + scrollX >= child.getLeft() + && x + scrollX < child.getRight() + && y + scrollY >= child.getTop() + && y + scrollY < child.getBottom() + && canScroll(child, true, dx, dy, x + scrollX - child.getLeft(), y + + scrollY - child.getTop())) { + return true; + } + } + } + + return checkV + && (ViewCompat.canScrollHorizontally(v, -dx) || ViewCompat.canScrollVertically(v, + -dy)); + } + + /** + * Check if this event as provided to the parent view's + * onInterceptTouchEvent should cause the parent to intercept the touch + * event stream. + * + * @param ev MotionEvent provided to onInterceptTouchEvent + * @return true if the parent view should return true from + * onInterceptTouchEvent + */ + public boolean shouldInterceptTouchEvent(MotionEvent ev) { + final int action = MotionEventCompat.getActionMasked(ev); + final int actionIndex = MotionEventCompat.getActionIndex(ev); + + if (action == MotionEvent.ACTION_DOWN) { + // Reset things for a new event stream, just in case we didn't get + // the whole previous stream. + cancel(); + } + + if (mVelocityTracker == null) { + mVelocityTracker = VelocityTracker.obtain(); + } + mVelocityTracker.addMovement(ev); + + switch (action) { + case MotionEvent.ACTION_DOWN: { + final float x = ev.getX(); + final float y = ev.getY(); + final int pointerId = MotionEventCompat.getPointerId(ev, 0); + saveInitialMotion(x, y, pointerId); + + final View toCapture = findTopChildUnder((int) x, (int) y); + + // Catch a settling view if possible. + if (toCapture == mCapturedView && mDragState == STATE_SETTLING) { + tryCaptureViewForDrag(toCapture, pointerId); + } + + final int edgesTouched = mInitialEdgeTouched[pointerId]; + if ((edgesTouched & mTrackingEdges) != 0) { + mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId); + } + break; + } + + case MotionEventCompat.ACTION_POINTER_DOWN: { + final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex); + final float x = MotionEventCompat.getX(ev, actionIndex); + final float y = MotionEventCompat.getY(ev, actionIndex); + + saveInitialMotion(x, y, pointerId); + + // A ViewDragHelper can only manipulate one view at a time. + if (mDragState == STATE_IDLE) { + final int edgesTouched = mInitialEdgeTouched[pointerId]; + if ((edgesTouched & mTrackingEdges) != 0) { + mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId); + } + } else if (mDragState == STATE_SETTLING) { + // Catch a settling view if possible. + final View toCapture = findTopChildUnder((int) x, (int) y); + if (toCapture == mCapturedView) { + tryCaptureViewForDrag(toCapture, pointerId); + } + } + break; + } + + case MotionEvent.ACTION_MOVE: { + // First to cross a touch slop over a draggable view wins. Also + // report edge drags. + final int pointerCount = MotionEventCompat.getPointerCount(ev); + for (int i = 0; i < pointerCount; i++) { + final int pointerId = MotionEventCompat.getPointerId(ev, i); + final float x = MotionEventCompat.getX(ev, i); + final float y = MotionEventCompat.getY(ev, i); + final float dx = x - mInitialMotionX[pointerId]; + final float dy = y - mInitialMotionY[pointerId]; + + reportNewEdgeDrags(dx, dy, pointerId); + if (mDragState == STATE_DRAGGING) { + // Callback might have started an edge drag + break; + } + + final View toCapture = findTopChildUnder((int) x, (int) y); + if (toCapture != null && checkTouchSlop(toCapture, dx, dy) + && tryCaptureViewForDrag(toCapture, pointerId)) { + break; + } + } + saveLastMotion(ev); + break; + } + + case MotionEventCompat.ACTION_POINTER_UP: { + final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex); + clearMotionHistory(pointerId); + break; + } + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: { + cancel(); + break; + } + } + + return mDragState == STATE_DRAGGING; + } + + /** + * Process a touch event received by the parent view. This method will + * dispatch callback events as needed before returning. The parent view's + * onTouchEvent implementation should call this. + * + * @param ev The touch event received by the parent view + */ + public void processTouchEvent(MotionEvent ev) { + final int action = MotionEventCompat.getActionMasked(ev); + final int actionIndex = MotionEventCompat.getActionIndex(ev); + + if (action == MotionEvent.ACTION_DOWN) { + // Reset things for a new event stream, just in case we didn't get + // the whole previous stream. + cancel(); + } + + if (mVelocityTracker == null) { + mVelocityTracker = VelocityTracker.obtain(); + } + mVelocityTracker.addMovement(ev); + + switch (action) { + case MotionEvent.ACTION_DOWN: { + final float x = ev.getX(); + final float y = ev.getY(); + final int pointerId = MotionEventCompat.getPointerId(ev, 0); + final View toCapture = findTopChildUnder((int) x, (int) y); + + saveInitialMotion(x, y, pointerId); + + // Since the parent is already directly processing this touch + // event, + // there is no reason to delay for a slop before dragging. + // Start immediately if possible. + tryCaptureViewForDrag(toCapture, pointerId); + + final int edgesTouched = mInitialEdgeTouched[pointerId]; + if ((edgesTouched & mTrackingEdges) != 0) { + mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId); + } + break; + } + + case MotionEventCompat.ACTION_POINTER_DOWN: { + final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex); + final float x = MotionEventCompat.getX(ev, actionIndex); + final float y = MotionEventCompat.getY(ev, actionIndex); + + saveInitialMotion(x, y, pointerId); + + // A ViewDragHelper can only manipulate one view at a time. + if (mDragState == STATE_IDLE) { + // If we're idle we can do anything! Treat it like a normal + // down event. + + final View toCapture = findTopChildUnder((int) x, (int) y); + tryCaptureViewForDrag(toCapture, pointerId); + + final int edgesTouched = mInitialEdgeTouched[pointerId]; + if ((edgesTouched & mTrackingEdges) != 0) { + mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId); + } + } else if (isCapturedViewUnder((int) x, (int) y)) { + // We're still tracking a captured view. If the same view is + // under this + // point, we'll swap to controlling it with this pointer + // instead. + // (This will still work if we're "catching" a settling + // view.) + + tryCaptureViewForDrag(mCapturedView, pointerId); + } + break; + } + + case MotionEvent.ACTION_MOVE: { + if (mDragState == STATE_DRAGGING) { + final int index = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + final float x = MotionEventCompat.getX(ev, index); + final float y = MotionEventCompat.getY(ev, index); + final int idx = (int) (x - mLastMotionX[mActivePointerId]); + final int idy = (int) (y - mLastMotionY[mActivePointerId]); + + dragTo(mCapturedView.getLeft() + idx, mCapturedView.getTop() + idy, idx, idy); + + saveLastMotion(ev); + } else { + // Check to see if any pointer is now over a draggable view. + final int pointerCount = MotionEventCompat.getPointerCount(ev); + for (int i = 0; i < pointerCount; i++) { + final int pointerId = MotionEventCompat.getPointerId(ev, i); + final float x = MotionEventCompat.getX(ev, i); + final float y = MotionEventCompat.getY(ev, i); + final float dx = x - mInitialMotionX[pointerId]; + final float dy = y - mInitialMotionY[pointerId]; + + reportNewEdgeDrags(dx, dy, pointerId); + if (mDragState == STATE_DRAGGING) { + // Callback might have started an edge drag. + break; + } + + final View toCapture = findTopChildUnder((int) x, (int) y); + if (checkTouchSlop(toCapture, dx, dy) + && tryCaptureViewForDrag(toCapture, pointerId)) { + break; + } + } + saveLastMotion(ev); + } + break; + } + + case MotionEventCompat.ACTION_POINTER_UP: { + final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex); + if (mDragState == STATE_DRAGGING && pointerId == mActivePointerId) { + // Try to find another pointer that's still holding on to + // the captured view. + int newActivePointer = INVALID_POINTER; + final int pointerCount = MotionEventCompat.getPointerCount(ev); + for (int i = 0; i < pointerCount; i++) { + final int id = MotionEventCompat.getPointerId(ev, i); + if (id == mActivePointerId) { + // This one's going away, skip. + continue; + } + + final float x = MotionEventCompat.getX(ev, i); + final float y = MotionEventCompat.getY(ev, i); + if (findTopChildUnder((int) x, (int) y) == mCapturedView + && tryCaptureViewForDrag(mCapturedView, id)) { + newActivePointer = mActivePointerId; + break; + } + } + + if (newActivePointer == INVALID_POINTER) { + // We didn't find another pointer still touching the + // view, release it. + releaseViewForPointerUp(); + } + } + clearMotionHistory(pointerId); + break; + } + + case MotionEvent.ACTION_UP: { + if (mDragState == STATE_DRAGGING) { + releaseViewForPointerUp(); + } + cancel(); + break; + } + + case MotionEvent.ACTION_CANCEL: { + if (mDragState == STATE_DRAGGING) { + dispatchViewReleased(0, 0); + } + cancel(); + break; + } + } + } + + private void reportNewEdgeDrags(float dx, float dy, int pointerId) { + int dragsStarted = 0; + if (checkNewEdgeDrag(dx, dy, pointerId, EDGE_LEFT)) { + dragsStarted |= EDGE_LEFT; + } + if (checkNewEdgeDrag(dy, dx, pointerId, EDGE_TOP)) { + dragsStarted |= EDGE_TOP; + } + if (checkNewEdgeDrag(dx, dy, pointerId, EDGE_RIGHT)) { + dragsStarted |= EDGE_RIGHT; + } + if (checkNewEdgeDrag(dy, dx, pointerId, EDGE_BOTTOM)) { + dragsStarted |= EDGE_BOTTOM; + } + + if (dragsStarted != 0) { + mEdgeDragsInProgress[pointerId] |= dragsStarted; + mCallback.onEdgeDragStarted(dragsStarted, pointerId); + } + } + + private boolean checkNewEdgeDrag(float delta, float odelta, int pointerId, int edge) { + final float absDelta = Math.abs(delta); + final float absODelta = Math.abs(odelta); + + if ((mInitialEdgeTouched[pointerId] & edge) != edge || (mTrackingEdges & edge) == 0 + || (mEdgeDragsLocked[pointerId] & edge) == edge + || (mEdgeDragsInProgress[pointerId] & edge) == edge + || (absDelta <= mTouchSlop && absODelta <= mTouchSlop)) { + return false; + } + if (absDelta < absODelta * 0.5f && mCallback.onEdgeLock(edge)) { + mEdgeDragsLocked[pointerId] |= edge; + return false; + } + return (mEdgeDragsInProgress[pointerId] & edge) == 0 && absDelta > mTouchSlop; + } + + /** + * Check if we've crossed a reasonable touch slop for the given child view. + * If the child cannot be dragged along the horizontal or vertical axis, + * motion along that axis will not count toward the slop check. + * + * @param child Child to check + * @param dx Motion since initial position along X axis + * @param dy Motion since initial position along Y axis + * @return true if the touch slop has been crossed + */ + private boolean checkTouchSlop(View child, float dx, float dy) { + if (child == null) { + return false; + } + final boolean checkHorizontal = mCallback.getViewHorizontalDragRange(child) > 0; + final boolean checkVertical = mCallback.getViewVerticalDragRange(child) > 0; + + if (checkHorizontal && checkVertical) { + return dx * dx + dy * dy > mTouchSlop * mTouchSlop; + } else if (checkHorizontal) { + return Math.abs(dx) > mTouchSlop; + } else if (checkVertical) { + return Math.abs(dy) > mTouchSlop; + } + return false; + } + + /** + * Check if any pointer tracked in the current gesture has crossed the + * required slop threshold. + *

+ * This depends on internal state populated by + * {@link #shouldInterceptTouchEvent(MotionEvent)} or + * {@link #processTouchEvent(MotionEvent)}. You should only + * rely on the results of this method after all currently available touch + * data has been provided to one of these two methods. + *

+ * + * @param directions Combination of direction flags, see + * {@link #DIRECTION_HORIZONTAL}, {@link #DIRECTION_VERTICAL}, + * {@link #DIRECTION_ALL} + * @return true if the slop threshold has been crossed, false otherwise + */ + public boolean checkTouchSlop(int directions) { + final int count = mInitialMotionX.length; + for (int i = 0; i < count; i++) { + if (checkTouchSlop(directions, i)) { + return true; + } + } + return false; + } + + /** + * Check if the specified pointer tracked in the current gesture has crossed + * the required slop threshold. + *

+ * This depends on internal state populated by + * {@link #shouldInterceptTouchEvent(MotionEvent)} or + * {@link #processTouchEvent(MotionEvent)}. You should only + * rely on the results of this method after all currently available touch + * data has been provided to one of these two methods. + *

+ * + * @param directions Combination of direction flags, see + * {@link #DIRECTION_HORIZONTAL}, {@link #DIRECTION_VERTICAL}, + * {@link #DIRECTION_ALL} + * @param pointerId ID of the pointer to slop check as specified by + * MotionEvent + * @return true if the slop threshold has been crossed, false otherwise + */ + public boolean checkTouchSlop(int directions, int pointerId) { + if (!isPointerDown(pointerId)) { + return false; + } + + final boolean checkHorizontal = (directions & DIRECTION_HORIZONTAL) == DIRECTION_HORIZONTAL; + final boolean checkVertical = (directions & DIRECTION_VERTICAL) == DIRECTION_VERTICAL; + + final float dx = mLastMotionX[pointerId] - mInitialMotionX[pointerId]; + final float dy = mLastMotionY[pointerId] - mInitialMotionY[pointerId]; + + if (checkHorizontal && checkVertical) { + return dx * dx + dy * dy > mTouchSlop * mTouchSlop; + } else if (checkHorizontal) { + return Math.abs(dx) > mTouchSlop; + } else if (checkVertical) { + return Math.abs(dy) > mTouchSlop; + } + return false; + } + + /** + * Check if any of the edges specified were initially touched in the + * currently active gesture. If there is no currently active gesture this + * method will return false. + * + * @param edges Edges to check for an initial edge touch. See + * {@link #EDGE_LEFT}, {@link #EDGE_TOP}, {@link #EDGE_RIGHT}, + * {@link #EDGE_BOTTOM} and {@link #EDGE_ALL} + * @return true if any of the edges specified were initially touched in the + * current gesture + */ + public boolean isEdgeTouched(int edges) { + final int count = mInitialEdgeTouched.length; + for (int i = 0; i < count; i++) { + if (isEdgeTouched(edges, i)) { + return true; + } + } + return false; + } + + /** + * Check if any of the edges specified were initially touched by the pointer + * with the specified ID. If there is no currently active gesture or if + * there is no pointer with the given ID currently down this method will + * return false. + * + * @param edges Edges to check for an initial edge touch. See + * {@link #EDGE_LEFT}, {@link #EDGE_TOP}, {@link #EDGE_RIGHT}, + * {@link #EDGE_BOTTOM} and {@link #EDGE_ALL} + * @return true if any of the edges specified were initially touched in the + * current gesture + */ + public boolean isEdgeTouched(int edges, int pointerId) { + return isPointerDown(pointerId) && (mInitialEdgeTouched[pointerId] & edges) != 0; + } + + private void releaseViewForPointerUp() { + mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity); + final float xvel = clampMag( + VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId), + mMinVelocity, mMaxVelocity); + final float yvel = clampMag( + VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId), + mMinVelocity, mMaxVelocity); + dispatchViewReleased(xvel, yvel); + } + + private void dragTo(int left, int top, int dx, int dy) { + int clampedX = left; + int clampedY = top; + final int oldLeft = mCapturedView.getLeft(); + final int oldTop = mCapturedView.getTop(); + if (dx != 0) { + clampedX = mCallback.clampViewPositionHorizontal(mCapturedView, left, dx); + mCapturedView.offsetLeftAndRight(clampedX - oldLeft); + } + if (dy != 0) { + clampedY = mCallback.clampViewPositionVertical(mCapturedView, top, dy); + mCapturedView.offsetTopAndBottom(clampedY - oldTop); + } + + if (dx != 0 || dy != 0) { + final int clampedDx = clampedX - oldLeft; + final int clampedDy = clampedY - oldTop; + mCallback + .onViewPositionChanged(mCapturedView, clampedX, clampedY, clampedDx, clampedDy); + } + } + + /** + * Determine if the currently captured view is under the given point in the + * parent view's coordinate system. If there is no captured view this method + * will return false. + * + * @param x X position to test in the parent's coordinate system + * @param y Y position to test in the parent's coordinate system + * @return true if the captured view is under the given point, false + * otherwise + */ + public boolean isCapturedViewUnder(int x, int y) { + return isViewUnder(mCapturedView, x, y); + } + + /** + * Determine if the supplied view is under the given point in the parent + * view's coordinate system. + * + * @param view Child view of the parent to hit test + * @param x X position to test in the parent's coordinate system + * @param y Y position to test in the parent's coordinate system + * @return true if the supplied view is under the given point, false + * otherwise + */ + public boolean isViewUnder(View view, int x, int y) { + if (view == null) { + return false; + } + return x >= view.getLeft() && x < view.getRight() && y >= view.getTop() + && y < view.getBottom(); + } + + /** + * Find the topmost child under the given point within the parent view's + * coordinate system. The child order is determined using + * {@link Callback#getOrderedChildIndex(int)} + * . + * + * @param x X position to test in the parent's coordinate system + * @param y Y position to test in the parent's coordinate system + * @return The topmost child view under (x, y) or null if none found. + */ + public View findTopChildUnder(int x, int y) { + final int childCount = mParentView.getChildCount(); + for (int i = childCount - 1; i >= 0; i--) { + final View child = mParentView.getChildAt(mCallback.getOrderedChildIndex(i)); + if (x >= child.getLeft() && x < child.getRight() && y >= child.getTop() + && y < child.getBottom()) { + return child; + } + } + return null; + } + + private int getEdgeTouched(int x, int y) { + int result = 0; + + if (x < mParentView.getLeft() + mEdgeSize) + result = EDGE_LEFT; + if (y < mParentView.getTop() + mEdgeSize) + result = EDGE_TOP; + if (x > mParentView.getRight() - mEdgeSize) + result = EDGE_RIGHT; + if (y > mParentView.getBottom() - mEdgeSize) + result = EDGE_BOTTOM; + + return result; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPDotView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPDotView.java new file mode 100644 index 0000000..1c266ab --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPDotView.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.base; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class CCPDotView extends LinearLayout { + + /** + * The default count of CCPDotView. + */ + private int defaultCount = 9; + private int defaultNormal = R.drawable.page_normal; + private int defaultActive = R.drawable.page_active; + + /** + * @param context + */ + public CCPDotView(Context context) { + this(context , null); + } + + /** + * @param context + * @param attrs + */ + public CCPDotView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public CCPDotView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + TypedArray typedArray = context.obtainStyledAttributes(R.styleable.AppPanel); + int count = typedArray.getResourceId(R.styleable.AppPanel_dot_count, 0); + typedArray.recycle(); + setDotCount(count); + } + + public void setMaxCount(int count) { + + LogUtil.d(LogUtil.getLogUtilsTag(CCPDotView.class), "CCPDotView.setMaxCount: " + count); + this.defaultCount = count; + } + + public void initDotResource() { + defaultNormal = R.drawable.page_normal_dark; + defaultActive = R.drawable.page_active_dark; + } + + /** + * The total number of dot, namely the total number of pages + * @param count + */ + public void setDotCount(int count) { + + LogUtil.d(LogUtil.getLogUtilsTag(CCPDotView.class), "CCPDotView.setDotCount: " + count); + + if(count < 0) { + + return ; + } + + if(count > this.defaultCount) { + LogUtil.d(LogUtil.getLogUtilsTag(CCPDotView.class), "setDotCount large than max count :" + this.defaultCount); + count = defaultCount; + } + + removeAllViews(); + + while(count != 0 ) { + ImageView imageControl = (ImageView) View.inflate(getContext(), R.layout.ccppage_control_image, null); + + // drak_dot + imageControl.setImageResource(defaultNormal); + addView(imageControl); + + count --; + } + + // white_dot + ImageView imageView = (ImageView) getChildAt(0); + if(imageView != null) { + imageView.setImageResource(defaultActive); + } + } + + + /** + * Set the current sdotselected + * @param selecteDot + */ + public void setSelectedDot(int selecteDot) { + + LogUtil.d(LogUtil.getLogUtilsTag(CCPDotView.class), "setSelectedDot:target index is : " + + selecteDot); + + if (selecteDot >= getChildCount()) { + + selecteDot = getChildCount() - 1; + + } + LogUtil.d(LogUtil.getLogUtilsTag(CCPDotView.class), + "setSelectedDot:after adjust index is : " + selecteDot); + for (int i = 0; i < getChildCount(); i++) { + // drak_dot + ((ImageView) getChildAt(i)).setImageResource(defaultNormal); + } + if (selecteDot < 0) { + selecteDot = 0; + } + + // white_dot + ImageView localImageView = (ImageView) getChildAt(selecteDot); + if (localImageView != null) { + localImageView.setImageResource(defaultActive); + } + } + + public int getDotCount() { + return defaultCount; + } + + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPFlipper.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPFlipper.java new file mode 100644 index 0000000..44ea74f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPFlipper.java @@ -0,0 +1,555 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.base; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.animation.Interpolator; +import android.widget.Scroller; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + *

Title: CCPFlipper.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class CCPFlipper extends ViewGroup { + + + + Interpolator mFLipperInterpolator; + Scroller mScroller; + + /** + * Helper for tracking the velocity of touch events, for implementing + * flinging and other such gestures. + */ + VelocityTracker mTracker; + + /** + * @see #onMeasure(int, int) + */ + OnCCPFlipperMeasureListener onCCPFlipperMeasureListener; + + /** + * + */ + OnFlipperPageListener onFlipperPageListener; + + /** + * Distance a touch can wander before we think the user is scrolling in pixels + */ + private int minScaledTouchSlop; + + /** + * + */ + private int mLastScreen ; + + /** + * current screen view index. + */ + private int mCurScreen; + + /** + * + */ + private int mToScreen; + + private static final int REST_STATE = 0; + private static final int SCROLLING_STATE = 1; + + // touch state identification + private int mTouchState = REST_STATE; + + /** + * The first pointer index of X-coordinate + */ + private float mTouchX; + + /** + * The first pointer index of Y-coordinate + */ + private float mTouchY; + + /** + * + */ + private boolean mExecutFlipper = false; + + private boolean mEnabled = false; + + + public CCPFlipper(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + initFlipper(context); + } + + public CCPFlipper(Context context, AttributeSet attrs) { + this(context, attrs , 0); + + initFlipper(context); + } + + public CCPFlipper(Context context) { + this(context , null); + + initFlipper(context); + } + + + public void initFlipper(Context context) { + + mFLipperInterpolator = new FlipperInterpolator(); + mScroller = new Scroller(getContext(), mFLipperInterpolator); + + this.mLastScreen = -1; + this.mCurScreen = 0; + this.mToScreen = 0; + minScaledTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + } + + /** + * @param l + */ + public void setOnCCPFlipperMeasureListener (OnCCPFlipperMeasureListener l ){ + this.onCCPFlipperMeasureListener = l; + } + + /** + * @param l + */ + public void setOnFlipperListner(OnFlipperPageListener l) { + this.onFlipperPageListener = l; + } + + /** + * + */ + public boolean isFLipper() { + + return this.mExecutFlipper; + } + + public void releaseFlipper() { + + this.mLastScreen = -1; + this.mCurScreen = 0; + this.mToScreen = 0; + } + + public int getCurrentIndex() { + + LogUtil.d(LogUtil.getLogUtilsTag(CCPFlipper.class), "CCPlipper.getCurrentIndex cur screen is: " + this.mCurScreen); + return this.mCurScreen; + } + + /** + * @param screenIndex + * @param duration + */ + public void processVelocity(int screenIndex , int duration) { + + int index = Math.max(0, Math.min(screenIndex, getChildCount() - 1)); + + Scroller scroller = null; + int unScrollx = 0; + int scrollx = 0; + if(getScrollX() != index * getWidth()) { + + unScrollx = index * getWidth() - getScrollX(); + scroller = this.mScroller; + scrollx = getScrollX(); + + if(duration > 0 ) { + return; + } + + int _duration = DensityUtil.round(getContext(), 2 * Math.abs(unScrollx)) ; + if(duration > 0 ) { + _duration = duration; + } + + scroller.startScroll(scrollx, 0, unScrollx, 0, _duration); + if(mCurScreen != index) { + this.mExecutFlipper = true; + this.mToScreen += index - this.mCurScreen; + } + + this.mLastScreen = this.mCurScreen; + this.mCurScreen = index; + + // Static heavy painted View picture + invalidate(); + } + + } + + /** + * @param finalIndex + */ + public final void setScroolIndex(int finalIndex) { + this.mToScreen = finalIndex; + } + + /** + * Sliding to the specified page + * @param index + */ + public final void slipInto(int index) { + int maxIndex = Math.max(0, Math.min(index, -1 + getChildCount())); + mExecutFlipper = false; + if(mScroller != null && !mScroller.isFinished()) { + mScroller.abortAnimation(); + } + if(onFlipperPageListener != null) { + onFlipperPageListener.onFlipperPage(mLastScreen, maxIndex); + } + mLastScreen = mCurScreen; + mCurScreen = maxIndex; + mToScreen = maxIndex; + scrollTo(maxIndex * getWidth(), 0); + } + + /** + * @return + */ + public int getVisiableIndex() { + return mToScreen; + } + + @Override + public void computeScroll() { + + // Returns true if the animation is not over. + // Because of the previous startScroll, + // so only in the completion of startScroll then false + if(this.mScroller.computeScrollOffset()) { + + // The animation effect, according to the current value of each scrolling + scrollTo(this.mScroller.getCurrX(), this.mScroller.getCurrY()); + + // At this time also need to refresh the View, otherwise there may be errors + postInvalidate(); + } else { + if(this.mExecutFlipper) { + this.mExecutFlipper = false; + if(this.onFlipperPageListener != null) { + this.onFlipperPageListener.onFlipperPage(this.mLastScreen, this.mToScreen); + } + } + } + + + } + + /** + * + * @param enabled + */ + public void setInterceptTouchEvent(boolean enabled) { + this.mEnabled = enabled; + } + + /** + * release the velocityTracker + */ + void releaseVelocityTracker() { + if(null != this.mTracker) { + this.mTracker.clear(); + this.mTracker.recycle(); + this.mTracker = null; + } + + mTouchX = 0.0F; + mTouchY = 0.0F; + mTouchState = REST_STATE; + + } + + + /** + * Implement this method to intercept hover events before they are handled + * by child views. + * @return True if the view group would like to intercept the hover event + * and prevent its children from receiving it. + */ + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + + if(!mEnabled) { + return super.onInterceptTouchEvent(ev); + } + + // Implementation of the onInterceptTouchEvent method to intercept + // the mobile event User finger touch screen + if ((ev.getAction() == MotionEvent.ACTION_MOVE) + && (mTouchState != REST_STATE)) { + return true; + } + + if(getChildCount() != 1) { + int action = ev.getAction(); + //if(action != MotionEvent.ACTION_MOVE) { + + float x = ev.getX(); + float y = ev.getY(); + switch (action) { + case MotionEvent.ACTION_DOWN: + // begin to press the touch screen events + // save the X coordinate that press + this.mTouchX = x; + this.mTouchY = y; + mTouchState = mScroller.isFinished() ? REST_STATE : SCROLLING_STATE; + break; + + case MotionEvent.ACTION_MOVE: + // begin to press the touch screen mobile Move event + // Judge ACTION_MOVE events between mobile X coordinate space + int distanceX = (int) Math.abs(this.mTouchX - x); + int distanceY = (int) Math.abs(this.mTouchY - y); + LogUtil.d(LogUtil.getLogUtilsTag(CCPFlipper.class), "xDif = " + distanceX + ", yDif = " + distanceY); + if((distanceX > this.minScaledTouchSlop) && (distanceY < this.minScaledTouchSlop)) { + LogUtil.d(LogUtil.getLogUtilsTag(CCPFlipper.class), + "CCPFlipper.onInterceptHoverEvent distanceX:" + + distanceX + " , distanceY:" + + distanceY + " , minScaledTouchSlop:" + + minScaledTouchSlop); + mTouchState = SCROLLING_STATE; + } + break; + + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + // finger off the screen + mTouchState = REST_STATE; + + break; + default: + break; + } + + return mTouchState != REST_STATE; + //} + } + + return super.onInterceptTouchEvent(ev); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + + if(getChildCount() != 1) { + if(mTracker == null) { + // Returns a new VelocityTracker. + mTracker = VelocityTracker.obtain(); + } + // Add a user's movement to the tracker + mTracker.addMovement(event); + + int action = event.getAction(); + float x = event.getX(); + // OnTouchEvent screen touch event of user + switch (action) { + case MotionEvent.ACTION_DOWN: + + if(mScroller != null + && !mScroller.isFinished()) { + // stop the Flipper animation. + mScroller.abortAnimation(); + } + // when the finger press screen trigger event, recording the X coordinates + this.mTouchX = x; + + break; + case MotionEvent.ACTION_MOVE: + + int distance = (int) (this.mTouchX - x); + this.mTouchX = x; + + scrollBy(distance, 0); + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + // when the finger off the screen, a record of the mVelocityTracker record, + // and achieved X axis sliding velocity + VelocityTracker tracker = this.mTracker; + // Initial rate units + tracker.computeCurrentVelocity(1000); + int xVelocity = (int) tracker.getXVelocity(); + + // when the X axis sliding speed is greater than 600, and mCurScreen > 0 + if((xVelocity > 600) && (this.mCurScreen > 0)) { + // mobile picture to the left + processVelocity(this.mCurScreen - 1 , -1); + + } else if ((xVelocity < -600) && (this.mCurScreen < getChildCount() - 1)) { + // Move to the right of the picture + processVelocity(this.mCurScreen + 1, -1); + + } else { + int width = getWidth(); + processVelocity((getScrollX() + width / 2) / width, -1); + } + + releaseVelocityTracker(); + break; + default: + break; + } + //mScrollingX = MyViewGroup.this.getScrollX(); + return true; + } + + return super.onTouchEvent(event); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + long elapsedRealtime = SystemClock.elapsedRealtime(); + int childCount = getChildCount(); + int left = 0; + for(int k = 0 ; k < childCount; k ++ ) { + View view = getChildAt(k); + if(view != null && view.getVisibility() != View.GONE) { + int measuredWidth = view.getMeasuredWidth(); + LogUtil.d(LogUtil.getLogUtilsTag(CCPFlipper.class), "CCPFlipper onLayout childWidth : " + measuredWidth); + view.layout(left, 0, left + measuredWidth, view.getMeasuredHeight()); + + left += measuredWidth; + } + } + + long curElapsedRealtime = SystemClock.elapsedRealtime(); + LogUtil.d(LogUtil.getLogUtilsTag(CCPFlipper.class), "CCPFlipper.onLayout use " + (curElapsedRealtime - elapsedRealtime) + + " ms, CCPFlipper onLayout changed:" + changed + + " Left,Top,Right,Bottom:" + l + "," + t + "," + r + "," + b); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + long elapsedRealtime = SystemClock.elapsedRealtime(); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + int sizeWidth = MeasureSpec.getSize(widthMeasureSpec); + int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); + //int sizeHeight = View.MeasureSpec.getSize(heightMeasureSpec); + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + if (widthMode != MeasureSpec.EXACTLY + || heightMode != MeasureSpec.EXACTLY) { + throw new IllegalStateException("CCPFlipper.onMeasure error mode"); + } + + if(this.onCCPFlipperMeasureListener != null) { + this.onCCPFlipperMeasureListener.onCCPFlipperMeasure(sizeWidth, sizeHeight); + } + + int childCount = getChildCount(); + for(int index = 0 ; index < childCount ; index ++) { + getChildAt(index).measure(widthMeasureSpec, heightMeasureSpec); + } + scrollTo(sizeWidth * mCurScreen, 0); + long curElapsedRealtime = SystemClock.elapsedRealtime(); + LogUtil.d(LogUtil.getLogUtilsTag(CCPFlipper.class), "CCPFlipper onMeasure:" + sizeWidth + + "," + MeasureSpec.getSize(heightMeasureSpec) + + " childCount:" + childCount + ", use " + + (curElapsedRealtime - elapsedRealtime)); + } + + + /** + * + *

Title: FlipperInterpolator

+ *

Description: An interpolator where the change dot then Slide the spring back effect.

+ *

Company: http://www.cloopen.com/

+ * @author Jorstin Chan + * @version 3.6 + * @date 2013-12-24 + */ + class FlipperInterpolator implements Interpolator { + + private float mTension = 1.3F; + + @Override + public float getInterpolation(float input) { + + input = input - 1.0F; + + return 1.0F + input * input * (input * (1.0F + mTension) + mTension); + } + + } + + /** + *

Title: OnCCPFlipperMeasureListener

+ *

Description: Measure the view and its content to determine the measured width and the + * measured height. This method is invoked by {@link #measure(int, int)} and + * should be overriden by subclasses to provide accurate and efficient + * measurement of their contents.

+ *

Company: http://www.cloopen.com/

+ * @author Jorstin Chan + * @version 3.6 + * @date 2013-12-24 + */ + public abstract interface OnCCPFlipperMeasureListener { + + /** + * @param widthMeasureSpec horizontal space requirements as imposed by the parent. + * The requirements are encoded with + * {@link MeasureSpec}. + * @param heightMeasureSpec vertical space requirements as imposed by the parent. + * The requirements are encoded with + * {@link MeasureSpec}. + */ + public abstract void onCCPFlipperMeasure(int widthMeasureSpec, int heightMeasureSpec); + } + + /** + *

Title: OnFlipperPageListener

+ *

Description:

+ *

Company: http://www.cloopen.com/

+ * @author Jorstin Chan + * @version 3.6 + * @date 2013-12-24 + */ + public abstract interface OnFlipperPageListener { + + /** + * @param startIndex + * @param finalIndex + */ + public abstract void onFlipperPage(int startIndex, int finalIndex); + } + +} + + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPLayoutListenerView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPLayoutListenerView.java new file mode 100644 index 0000000..7d1be2f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CCPLayoutListenerView.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.base; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.view.accessibility.AccessibilityEvent; +import android.view.accessibility.AccessibilityNodeInfo; +import android.widget.FrameLayout; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * TODO: document your custom view class. + */ +public class CCPLayoutListenerView extends FrameLayout { + + + private OnCCPViewLayoutListener mOnLayoutListener; + private OnCCPViewSizeChangedListener mOnSizeChangedListener; + /** + * @param context + */ + public CCPLayoutListenerView(Context context) { + super(context); + } + + /** + * @param context + * @param attrs + */ + public CCPLayoutListenerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + try { + super.onLayout(changed, l, t, r, b); + }catch (Exception e){ + e.printStackTrace(); + }finally { + LogUtil.e("CCPLayoutListenerView54"); + } + + if(this.mOnLayoutListener != null ) { + this.mOnLayoutListener.onViewLayout(); + } + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + @Override + public void onInitializeAccessibilityEvent(AccessibilityEvent event) { + super.onInitializeAccessibilityEvent(event); + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "jorstinchan onInitializeAccessibilityEvent"); + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + @Override + public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { + super.onInitializeAccessibilityNodeInfo(info); + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "jorstinchan onInitializeAccessibilityNodeInfo"); + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + @Override + public void onPopulateAccessibilityEvent(AccessibilityEvent event) { + super.onPopulateAccessibilityEvent(event); + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "jorstinchan onPopulateAccessibilityEvent"); + } + + + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if(this.mOnSizeChangedListener != null ) { + this.mOnSizeChangedListener.onSizeChanged(w, h, oldw, oldh); + } + } + + public void setOnLayoutListener(OnCCPViewLayoutListener onLayoutListener) { + this.mOnLayoutListener = onLayoutListener; + } + + public void setOnSizeChangedListener( + OnCCPViewSizeChangedListener onSizeChangedListener) { + this.mOnSizeChangedListener = onSizeChangedListener; + } + + public void setRootConsumeWatcher() { + + } + + public interface OnCCPViewLayoutListener { + void onViewLayout(); + } + + public interface OnCCPViewSizeChangedListener { + void onSizeChanged(int w, int h, int oldw, int oldh) ; + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CommAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CommAdapter.java new file mode 100644 index 0000000..4e13652 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/CommAdapter.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.base; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; + +/** + * 自定义数据适配器 + * Created by Jorstin on 2015/3/18. + */ +public abstract class CommAdapter extends BaseAdapter { + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + int itemViewType = getItemViewType(position); + if(isNullContentView(convertView, itemViewType)) { + convertView = buildViewByType(position, parent, itemViewType); + } + bindData(convertView, position, itemViewType); + return convertView; + } + + /** + * 判断是否为空,重复使用 + * @param convertView + * @param itemViewType + * @return + */ + protected boolean isNullContentView(View convertView , int itemViewType) { + return convertView == null; + } + + /** + * 需要实现方法,子类根据提供的Item类型返回对应的View + * @param position + * @param parent + * @param itemViewType + * @return + */ + protected abstract View buildViewByType( int position ,ViewGroup parent , int itemViewType); + + /** + * 绑定数据 + * @param convertView + * @param position + * @param itemViewType + */ + protected abstract void bindData(View convertView , int position , int itemViewType); +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/OnLayoutChangedLinearLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/OnLayoutChangedLinearLayout.java new file mode 100644 index 0000000..0c69a27 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/base/OnLayoutChangedLinearLayout.java @@ -0,0 +1,41 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.base; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.LinearLayout; + +/** + * com.yuntongxun.ecdemo.common.base in ECDemo_Android + * Created by Jorstin on 2015/6/16. + */ +public class OnLayoutChangedLinearLayout extends LinearLayout { + + public OnLayoutChangedListener mListener; + public OnLayoutChangedLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public OnLayoutChangedLinearLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + if(mListener == null) { + return ; + } + mListener.onLayoutChanged(); + } + + public void setOnChattingLayoutChangedListener(OnLayoutChangedListener listener) { + mListener = listener; + } + + public interface OnLayoutChangedListener { + void onLayoutChanged(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/AudioManagerTools.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/AudioManagerTools.java new file mode 100644 index 0000000..1c04c36 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/AudioManagerTools.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.media.AudioManager; + +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; + +/** + * AudioManager管理 + * Created by Jorstin on 2015/3/17. + */ +public class AudioManagerTools { + + /**AudioManager */ + private AudioManager mAudioManager = null; + private static AudioManagerTools mInstance; + private AudioManagerTools() { + + } + + /**单例方法*/ + public static AudioManagerTools getInstance() { + + if(mInstance == null) { + mInstance = new AudioManagerTools(); + } + + return mInstance; + } + + /** + * 返回当前所持有的AudioManager访问实例 + * @return + */ + public final AudioManager getAudioManager() { + if(mAudioManager == null) { + mAudioManager = (AudioManager) CCPAppManager.getContext().getSystemService(Context.AUDIO_SERVICE); + } + + return mAudioManager; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/BitmapUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/BitmapUtil.java new file mode 100644 index 0000000..ddbfc26 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/BitmapUtil.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.PointF; +import android.util.Log; + +import org.apache.http.HttpStatus; + +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.List; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 图像处理 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-9 + * @version 4.0 + */ +public class BitmapUtil { + private static final String TAG = "BitmapUtil"; + public static Bitmap getCombineBitmaps(List mEntityList, + Bitmap... bitmaps) { + LogUtil.d(TAG , "count=" + mEntityList.size()); + Bitmap newBitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888); + LogUtil.d(TAG , "newBitmap=" + newBitmap.getWidth() + "," + + newBitmap.getHeight()); + for (int i = 0; i < mEntityList.size(); i++) { + newBitmap = mixtureBitmap(newBitmap, bitmaps[i], new PointF( + mEntityList.get(i).x, mEntityList.get(i).y)); + } + return newBitmap; + } + + public static Bitmap mixtureBitmap(Bitmap first, Bitmap second, + PointF fromPoint) { + if (first == null || second == null || fromPoint == null) { + return null; + } + Bitmap newBitmap = Bitmap.createBitmap(first.getWidth(), + first.getHeight(), Config.ARGB_8888); + Canvas cv = new Canvas(newBitmap); + cv.drawBitmap(first, 0, 0, null); + cv.drawBitmap(second, fromPoint.x, fromPoint.y, null); +// cv.save(Canvas.ALL_SAVE_FLAG); + cv.restore(); + return newBitmap; + } + + public static String saveBitmapToLocal(String outPath , Bitmap bitmap) { + try { + String imagePath = FileAccessor.getAvatarPathName() + "/" + DemoUtils.md5(outPath); + File file = new File(imagePath); + if(!file.exists()) { + file.createNewFile(); + } + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, bufferedOutputStream); + bufferedOutputStream.close(); + LogUtil.d(TAG, "photo image from data, path:" + imagePath); + return imagePath; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String ATTACT_ICON ="demo_default"; + + public static String saveBitmapToLocalSDCard(Bitmap bitmap,String fileName,Context context) { + try { +// String imagePath = FileAccessor.IMESSAGE_RICH_TEXT + "/" + DemoUtils.md5(fileName)+".jpg"; + String imagePath = FileAccessor.getFilePath(context, "/ECSDK_Demo/richtext")+"/" + DemoUtils.md5(fileName)+".jpg"; + Log.i("TAGG", "imagePath ="+imagePath); + File file = new File(imagePath); + if(!file.exists()) { + file.createNewFile(); + } + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, bufferedOutputStream); + bufferedOutputStream.close(); + LogUtil.d(TAG, "photo image from data, path:" + imagePath); + return imagePath; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + + public static class InnerBitmapEntity { + public float x; + public float y; + public float width; + public float height; + public static int devide = 1; + public int index = -1; + + @Override + public String toString() { + return "InnerBitmapEntity [x=" + x + ", y=" + y + ", width=" + width + + ", height=" + height + ", devide=" + devide + ", index=" + + index + "]"; + } + } + + //获取网络图片 + public static Bitmap getHttpBitmap(String urlString){ + URL url; + Bitmap bitmap = null; + + try + { + url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setConnectTimeout(6000); + connection.setDoInput(true); + connection.setUseCaches(true); + + InputStream is = connection.getInputStream(); + bitmap = BitmapFactory.decodeStream(is); + is.close(); + } + catch (MalformedURLException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch (IOException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return bitmap; + } + + /** + * 获取网络图片 + * 注意权限: + * + */ + public static Bitmap getBitmapFromNetWork(String imageUrl){ + URL url=null; + Bitmap bitmap=null; + InputStream inputStream=null; + HttpURLConnection httpURLConnection=null; + ByteArrayOutputStream byteArrayOutputStream=null; + try { + url=new URL(imageUrl); + httpURLConnection=(HttpURLConnection) url.openConnection(); + httpURLConnection.setConnectTimeout(5*1000); + httpURLConnection.setReadTimeout(10*1000); + httpURLConnection.setDoInput(true); + httpURLConnection.setDoOutput(true); + if (httpURLConnection.getResponseCode()==HttpStatus.SC_OK) { + inputStream=httpURLConnection.getInputStream(); + byteArrayOutputStream=new ByteArrayOutputStream(); + int len=0; + byte [] buffer=new byte[1024]; + while((len=inputStream.read(buffer))!=-1){ + byteArrayOutputStream.write(buffer, 0, len); + byteArrayOutputStream.flush(); + } + byte [] imageData=byteArrayOutputStream.toByteArray(); + bitmap=BitmapFactory.decodeByteArray(imageData, 0, imageData.length); + } else { + LogUtil.i("图片请求失败"); + } + } catch (Exception e) { + }finally{ + try { + if (byteArrayOutputStream!=null) { + byteArrayOutputStream.close(); + } + if (inputStream!=null) { + inputStream.close(); + } + if (httpURLConnection!=null) { + httpURLConnection.disconnect(); + } + } catch (Exception e) { + } + } + + return bitmap; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ChattingAysnImageLoader.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ChattingAysnImageLoader.java new file mode 100644 index 0000000..34a1c78 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ChattingAysnImageLoader.java @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.widget.LinearLayout; + +import java.io.File; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; +import java.util.Stack; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ImageMsgInfoEntry; +import cn.shangyu.gdxzExpert.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + + +/** + * 缓存加载图片 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class ChattingAysnImageLoader { + + private static ChattingAysnImageLoader mImageLoader; + + private Context mContext; + private ChattingImageCallBack callBack; + public HashMap imageHeight = new HashMap(); + + private final byte[] LOCKED = new byte[0]; + + // the worker thread and a done flag so we know when to exit + private boolean mDone; + private Thread mDecodeThread; + private Stack TASK_QUEUE = null; + private Set TASK_QUEUE_INDEX = null; + + private int mScreenWidth ; + public int getmScreenWidth() { + if(mScreenWidth <= 0){ + mScreenWidth = DensityUtil.getImageWeidth(mContext, 1.0F)- DensityUtil.getDisplayMetrics(mContext, 40F); + mScreenWidth = mScreenWidth / 4; + } + return mScreenWidth; + } + + public HashMap IMG_CACHE_INDEX = null; + + + public Bitmap getImage(String key) { + //Bitmap bitMap = null; + synchronized (LOCKED) { + if(IMG_CACHE_INDEX != null && IMG_CACHE_INDEX.containsKey(key)){ + Bitmap bitmap = IMG_CACHE_INDEX.get(key); + if(bitmap != null){ + LogUtil.d("[ChattingAysnImageLoader]loading from cache " + key); + return bitmap; + }else{ + IMG_CACHE_INDEX.remove(key); + } + } + return null; + } + } + + public void removeKeyCache(String key){ + if(key != null && !"".equals(key.trim())){ + if(TASK_QUEUE_INDEX != null && TASK_QUEUE_INDEX.contains(key)){ + TASK_QUEUE_INDEX.remove(key); + LogUtil.d("[ChattingAysnImageLoader] remove task key from tsask queue"); + } + } + } + + final Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + if (msg.what == 1) { + if (callBack != null) { + callBack.onChattingImageLoaded(); + } + } else { + ToastUtil.showMessage(R.string.imgdownload_fail); + } + } + }; + + + + public ChattingAysnImageLoader(Context context) { + this.mContext = context; + checkBean(); + // 通过图片路径,图片大小 + start(); + } + + private void checkBean() { + // 初始化创建图片线程,并等待处理 + if(TASK_QUEUE == null){ + TASK_QUEUE = new Stack(); // 线程请求创建图片的队列 + } + if(TASK_QUEUE_INDEX == null){ + TASK_QUEUE_INDEX = new HashSet(); // 保存队列中正在处理的图片的key,有效防止重复添加到请求创建队列 + } + if(IMG_CACHE_INDEX == null){ + IMG_CACHE_INDEX = new HashMap(12); + } + } + + private void start() { + checkBean(); + if (mDecodeThread != null) { + return; + } + mDone = false; + Thread t = new Thread(new WorkerThread()); + t.setDaemon(true); + t.setName("image-loader"); + mDecodeThread = t; + t.start(); + } + + public void stop() { + cleanTask(); + synchronized (TASK_QUEUE) { + mDone = true; + TASK_QUEUE.notifyAll(); + } + if (mDecodeThread != null) { + try { + Thread t = mDecodeThread; + mDecodeThread = null; + LogUtil.d("[ChattingAysnImageLoader] mDecodeThread : " + mDecodeThread); + } catch (Exception ex) { + } + } + + TASK_QUEUE_INDEX = null; + IMG_CACHE_INDEX = null; + + mImageLoader = null; + } + + private class WorkerThread implements Runnable { + + // Pick off items on the queue, one by one, and compute their bitmap. + // Place the resulting bitmap in the cache, then call back by executing + // the given runnable so things can get updated appropriately. + public void run() { + while (true) { + QueueEntry queue = null; + synchronized (TASK_QUEUE) { + if (mDone) { + break; + } + if (TASK_QUEUE != null && !TASK_QUEUE.isEmpty()) { + queue = TASK_QUEUE.pop(); + } else { + try { + LogUtil.d("[ChattingAysnImageLoader] loading image wait..."); + TASK_QUEUE.wait(); + } catch (InterruptedException e) { + // ignore the exception + } + continue; + + } + } + + // do loading.. + LogUtil.d("[ChattingAysnImageLoader] loading image begin..."); + if (queue != null) { + ImageMsgInfoEntry entry = queue.infoEntry; + if (entry == null) { + continue; + } + if(TASK_QUEUE_INDEX != null && queue.isLoadThium){ + TASK_QUEUE_INDEX.remove(queue.key); + } + + // attachment pic + String imageUrl = ""; + // 加载列表图片 + if (queue.isLoadThium) { + imageUrl = entry.getThumbnailurl(); + if (imageUrl == null) { + imageUrl = entry.getPicurl(); + } + } else { + // 加载大图 + imageUrl = entry.getRemoteUrl(); + } + Bitmap bitmap = loadImageBitmap(queue,imageUrl); + + } else { + mHandler.sendEmptyMessage(0); + } + } + } + } + + public interface ChattingImageCallBack { + void onChattingImageLoaded(); + } + + /** + * 加入一个图片处理请求到图片创建队列 + * + * @param id + * @param infoEntry + * @param flag + */ + public void addTask(String id, ImageMsgInfoEntry infoEntry, boolean flag) { + LogUtil.d("[ChattingAysnImageLoader] add url " + infoEntry.toString()); + if (mDecodeThread == null) { + start(); + } + + QueueEntry entry = new QueueEntry(); + entry.infoEntry = infoEntry; + entry.isLoadThium = flag; + if (infoEntry == null || infoEntry.getId() == null) { + return; + } + String key = infoEntry.getId(); + entry.key = key; + synchronized (TASK_QUEUE) { + while (TASK_QUEUE.size() > 20) { + QueueEntry e = TASK_QUEUE.lastElement(); + TASK_QUEUE.remove(e); + TASK_QUEUE_INDEX.remove(key); + } + if (!TASK_QUEUE_INDEX.contains(key) + && !IMG_CACHE_INDEX.containsKey(key)) { + TASK_QUEUE.push(entry); + TASK_QUEUE_INDEX.add(key); + TASK_QUEUE.notify(); + } + } + + } + + public Bitmap loadImageBitmap(final QueueEntry queue, String url) { + + if (url == null || TextUtils.isEmpty(url)) { + return null; + } + try { + String extension = FileUtils.getExtension(url); + final String saveName = DemoUtils.md5(url) + extension; + LogUtil.d("this image saveName " + saveName); + if (new File(FileAccessor.getImagePathName() , saveName).exists()) { + LogUtil.d("loading from sdcard " + saveName); + return scalingImage(mContext, saveName, queue); + + } else { + if(FileAccessor.isExistExternalStore()){//存储卡在的时候才下载 +// ECMessage message = ECMessage.createECMessage(ECMessage.Type.IMAGE); +// ECFileMessageBody body = new ECFileMessageBody(); +// final String filePath = new File(FileAccessor.getImagePathName() , saveName).getAbsolutePath(); +// body.setLocalUrl(filePath); +// body.setRemoteUrl(url); +// message.setBody(body); +// SDKCoreHelper.getECChatManager().downloadMediaMessage(message, new ECChatManager.OnDownloadMessageListener() { +// +// @Override +// public void onProgress(String msgId, int totalByte, int progressByte) { +// +// } +// +// +// @Override +// public void onDownloadMessageComplete(ECError e, ECMessage message) { +// ImgInfo thumbImgInfo = ImgInfoSqlManager.getInstance().getImgInfo(queue.infoEntry.getId()); +// thumbImgInfo.setBigImgPath(saveName); +// ImgInfoSqlManager.getInstance().updateImageInfo(thumbImgInfo); +// //BitmapFactory.Options options = DemoUtils.getBitmapOptions(fileMessageBody.getLocalUrl()); +// //message.setUserData("outWidth://" + options.outWidth + ",outHeight://" + options.outHeight + ",THUMBNAIL://" + message.getMsgId()); +// scalingImage(mContext, saveName ,queue); +// } +// }); + } + } + return null; + } catch (OutOfMemoryError err) { + LogUtil.d("[ChattingAysnImageLoader]OOM:" + err.getMessage()); + return loadImageBitmap(queue, url); + } catch (Exception e) { + LogUtil.d("[ChattingAysnImageLoader]Exception:" + e.getMessage()); + e.printStackTrace(); + return null; + } + } + + private Bitmap scalingImage(Context mContext, String saveName ,QueueEntry queue) { + try { + if (saveName == null) { + return null; + } + if (!new File(FileAccessor.getImagePathName() , saveName).exists()) { + return null; + } + Bitmap bitmap = BitmapFactory.decodeFile(new File(FileAccessor.getImagePathName() , saveName).getAbsolutePath()); + if (bitmap != null) { + synchronized (LOCKED) { + if(queue.isLoadThium){ + if(IMG_CACHE_INDEX != null){ + IMG_CACHE_INDEX.put(saveName, bitmap); + } + } + } + mHandler.sendEmptyMessage(1); + } + return bitmap; + } catch (Exception e) { + LogUtil.d(e.getMessage()); + return null; + } catch (OutOfMemoryError e) { + LogUtil.d(e.getMessage()); + System.gc(); + return null; + } + } + + public int getImageHeight(String saveName) { + if (imageHeight != null && saveName != null && imageHeight.get(saveName) != null) { + return imageHeight.get(saveName); + } + return LinearLayout.LayoutParams.WRAP_CONTENT; + } + + // 队列缓存参数对象 + static class QueueEntry { + private String key; + private ImageMsgInfoEntry infoEntry; + private boolean isLoadThium; + } + + public void cleanTask() { + synchronized (TASK_QUEUE) { + TASK_QUEUE_INDEX.clear(); + TASK_QUEUE.clear(); + for (String key : IMG_CACHE_INDEX.keySet()) { + Bitmap bitmap = IMG_CACHE_INDEX.get(key); + if (bitmap != null) { + bitmap.recycle(); + bitmap = null; + } + } + IMG_CACHE_INDEX.clear(); + } + } + + public boolean ismDone() { + return mDone; + } + + public void setmDone(boolean mDone) { + this.mDone = mDone; + } + + public ChattingImageCallBack getCallBack() { + return callBack; + } + + public void setCallBack(ChattingImageCallBack callBack) { + this.callBack = callBack; + } + + public static ChattingAysnImageLoader getInstance(Context context){ + if(mImageLoader == null){ + mImageLoader = new ChattingAysnImageLoader(context); + } + + return mImageLoader; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ClipboardUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ClipboardUtils.java new file mode 100644 index 0000000..9fbcc70 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ClipboardUtils.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.ClipData; +import android.content.Context; +import android.os.Build; + +/** + *

Title: ClipboardUtils.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-6-12 + * @version 1.0 + */ +public class ClipboardUtils { + + /** + * + * @param context + * @param label User-visible label for the clip data. + * @param text The actual text in the clip. + */ + public static void copyFromEdit(Context context ,CharSequence label, CharSequence text) { + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + ((android.content.ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE)) + .setPrimaryClip(ClipData.newPlainText(label, text)); + return ; + } + + ((android.text.ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE)).setText(text); + } + + /** + * + * @param context + * @return + */ + public static CharSequence pasteToResult(Context context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + ClipData clipData = ((android.content.ClipboardManager) context + .getSystemService(Context.CLIPBOARD_SERVICE)) + .getPrimaryClip(); + if ((clipData == null) || (clipData.getItemCount() <= 0)) { + return null; + } + + ClipData.Item item = clipData.getItemAt(0); + if (item == null) { + return null; + } + return item.getText(); + } + + return ((android.text.ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE)).getText(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CommomUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CommomUtil.java new file mode 100644 index 0000000..c3c170d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CommomUtil.java @@ -0,0 +1,450 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Environment; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.view.WindowManager; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Random; + +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public final class CommomUtil { + + public static final String DEMO_ROOT_STORE = "gzcommunitymanager"; + + private static float density = -1.0F; + + /** + * 是否有外存卡 + * + * @return + */ + public static boolean isExistExternalStore() { + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + return true; + } else { + return false; + } + } + + public static int getMetricsDensity(Context context , float height) { + DisplayMetrics localDisplayMetrics = new DisplayMetrics(); + ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay().getMetrics(localDisplayMetrics); + return Math.round(height * localDisplayMetrics.densityDpi / 160.0F); + } + + /** + * 通话时间 格式00:00:00 + * + * @param duration + * @return + */ + public static String getCallDurationShow(long duration) { + if (duration / 60 == 0) { + String second = "00"; + + if (duration < 10) { + second = "0" + duration; + } else { + second = duration + ""; + } + return "00:" + second; + } else { + String minute = "00"; + String second = "00"; + String hour = "00"; + if ((duration / 60) < 10) { + minute = "0" + (duration / 60); + } else { + if ((duration / 60) > 59) { + if ((duration / 3600) < 10) { + hour = "0" + (duration / 3600); + } else { + hour = (duration / 3600) + ""; + } + + if ((duration / 60) % 60 < 10) { + minute = "0" + (duration / 60) % 60; + } else { + minute = (duration / 60) % 60 + ""; + } + + } else { + minute = (duration / 60) + ""; + } + } + if ((duration % 60) < 10) { + second = "0" + (duration % 60); + } else { + second = (duration % 60) + ""; + } + if (hour.equals("00")) { + return minute + ":" + second; + } else { + return hour + ":" + minute + ":" + second; + } + } + } + + + + + + public static final SimpleDateFormat simpleDateFormatbig = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + public static final SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); + + public static final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("MM月dd日"); + public static final SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("HH:mm"); + public static final SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("YYYY年MM月dd日"); + public static final SimpleDateFormat simpleDateFormat5 = new SimpleDateFormat("yyyy-MM-dd"); + public static final SimpleDateFormat simpleDateFormat6 = new SimpleDateFormat("yyyy.MM.dd"); + public static final SimpleDateFormat sequenceFormat = new SimpleDateFormat("yyyyMMddHHmmss"); + public static final String HOLDPLACE = nextHexString(49); + + /** The random seed */ + static final long seed = System.currentTimeMillis(); + // static final long seed=0; + + public static int K = 1; + + + /** Returns a random hexadecimal String */ + public static String nextHexString(int len) { + byte[] buff = new byte[len]; + for (int i = 0; i < len; i++) { + int n = nextInt(16); + buff[i] = (byte) ((n < 10) ? 48 + n : 87 + n); + } + return new String(buff); + } + + + /** Returns a random integer between 0 and n-1 */ + public static int nextInt(int n) { + Random rand = new Random(seed); + return Math.abs(rand.nextInt()) % n; + } + + + + + // 锟叫讹拷锟街凤拷锟角凤拷锟斤拷锟斤拷锟� + public static boolean hasFullSize(String inStr) { + if (inStr.getBytes().length != inStr.length()) { + return true; + } + return false; + } + + public static final String TACK_PIC_PATH = getExternalStorePath()+ "/" +DEMO_ROOT_STORE + "/.chatTemp"; + public static File TackPicFilePath() { + File localFile = new File(TACK_PIC_PATH , createCCPFileName() + ".jpg"); + if ((!localFile.getParentFile().exists()) + && (!localFile.getParentFile().mkdirs())) { + localFile = null; + } + return localFile; + } +// public static final String TACK_VIDEO_PATH = getExternalStorePath()+ "/" +DEMO_ROOT_STORE + "/.videoTemp"; + public static final String TACK_VIDEO_PATH = UIUtils.getContext().getExternalFilesDir("").getAbsolutePath()+ "/" +DEMO_ROOT_STORE + "/.videoTemp";//适配Android11 + public static File TackVideoFilePath() { + File localFile = new File(TACK_VIDEO_PATH , CommomUtil.createCCPFileName() + ".mp4"); + if ((!localFile.getParentFile().exists()) + && (!localFile.getParentFile().mkdirs())) { + localFile = null; + } + return localFile; + } + + /** + * /sdcard + * + * @return + */ + public static String getExternalStorePath() { + if (isExistExternalStore()) { + return Environment.getExternalStorageDirectory().getAbsolutePath(); + } + return null; + } + + + /** + * dip转化像素 + * @param context + * @param dipValue + * @return + */ + public static int dip2px(Context context, float dipValue){ + + final float scale = context.getResources().getDisplayMetrics().density; + + return (int)(dipValue * scale + 0.5f); + + } + + + + + + private static long lastClickTime; + public static boolean isInvalidClick() { + long time = System.currentTimeMillis(); + long timeD = time - lastClickTime; + if ( 0 < timeD && timeD < 1000) { + return true; + } + lastClickTime = time; + return false; + } + + + public static boolean delFile(String filePath){ + File file = new File(filePath); + if (!file.exists()) { + return true; + } + + return file.delete(); + } + + public static void delFolder(String folderPath) { + try { + delAllFile(folderPath); // 删除完里面所有内容 + String filePath = folderPath; + filePath = filePath.toString(); + File myFilePath = new File(filePath); + myFilePath.delete(); // 删除空文件夹 + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * delete all file + * @param path + * @return + */ + public static boolean delAllFile(String path) { + boolean flag = false; + File file = new File(path); + if (!file.exists()) { + return flag; + } + if (!file.isDirectory()) { + return flag; + } + String[] tempList = file.list(); + File temp = null; + for (int i = 0; i < tempList.length; i++) { + if (path.endsWith(File.separator)) { + temp = new File(path + tempList[i]); + } else { + temp = new File(path + File.separator + tempList[i]); + } + if (temp.isFile()) { + temp.delete(); + } + if (temp.isDirectory()) { + delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件 + delFolder(path + "/" + tempList[i]);// 再删除空文件夹 + flag = true; + } + } + return flag; + } + + + + + + + public static String createCCPFileName() { + Calendar c = Calendar.getInstance(); + c.setTimeInMillis(System.currentTimeMillis()); + + int y = c.get(Calendar.YEAR); + int m = c.get(Calendar.MONTH); + int d = c.get(Calendar.DAY_OF_MONTH); + int hour = c.get(Calendar.HOUR_OF_DAY); + int minute = c.get(Calendar.MINUTE); + int second = c.get(Calendar.SECOND); + return y + "-" + m + "-" + d + "-" + hour + "-" + minute + "-" + second; + } + + + + public static String interceptStringOfIndex(String str , int index) { + String intercept = str; + + if(TextUtils.isEmpty(str)) { + return str; + } + + if(str.length() > index) { + intercept = str.substring(str.length() - index , str.length()); + + } + + return intercept; + } + + /** + * 将文件生成位图 + * + * @param path + * @return + * @throws IOException + */ + public static BitmapDrawable getImageDrawable(String path) throws IOException { + // 打开文件 + File file = new File(path); + if (!file.exists()) { + return null; + } + + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + byte[] bt = new byte[1024]; + + // 得到文件的输入流 + InputStream in = new FileInputStream(file); + + // 将文件读出到输出流中 + int readLength = in.read(bt); + while (readLength != -1) { + outStream.write(bt, 0, readLength); + readLength = in.read(bt); + } + + // 转换成byte 后 再格式化成位图 + byte[] data = outStream.toByteArray(); + Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// 生成位图 + BitmapDrawable bd = new BitmapDrawable(bitmap); + + return bd; + } + + public static final int RANDOM_STRING_NONE = 0; + public static final int RANDOM_STRING_CHAR = 1; + public static final int RANDOM_STRING_NUM = 2; + // Get 6 numbers and the composition string. + public static String getCharAndNumr(int length ,int type) { + String val = ""; + Random random = new Random(); + for (int i = 0; i < length; i++) { + String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; // 输出字母还是数字 + if(type == RANDOM_STRING_CHAR) { + charOrNum = "char" ; + } else if (type == RANDOM_STRING_NUM) { + charOrNum = "num"; + } + + if ("char".equalsIgnoreCase(charOrNum)) // 字符串 + { + int choice = /*random.nextInt(2) % 2 == 0 ? 65 : 97*/97; // 取得大写字母还是小写字母 + val += (char) (choice + random.nextInt(26)); + } else if ("num".equalsIgnoreCase(charOrNum)) // 数字 + { + val += String.valueOf(random.nextInt(10)); + } + } + + return val; + } + + + + public static String CALLS_RECORD_TEMP_PATH = CommomUtil.getExternalStorePath()+ "/" + CommomUtil.DEMO_ROOT_STORE + "/callsRecordTemp"; + + /** + * @param fileName + * @param ext + * @return + */ + public static File createCallRecordFilePath(String fileName , String ext) { + File localFile = new File(CALLS_RECORD_TEMP_PATH , fileName + "." + ext); + if ((!localFile.getParentFile().exists()) + && (!localFile.getParentFile().mkdirs())) { + localFile = null; + } + + return localFile; + } + + + + + public static String remove86(String phone) { + if(TextUtils.isEmpty(phone)){ + return phone; + } + String str=phone; + if(phone.startsWith("86")) + str=phone.substring(2); + else if(phone.startsWith("+86")) + str=phone.substring(3); + return str; + } + + + public static String xmlTitle = "\n"; + public static String setUpXml(String connect,String connectPort,String lvs,String lvsport,String file,String fileport){ + StringBuilder sb=new StringBuilder(); + sb.append(xmlTitle); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(connect); + sb.append(""); + sb.append(""); + sb.append(connectPort); + sb.append(""); + sb.append(""); + sb.append(""); + + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(lvs); + sb.append(""); + sb.append(""); + sb.append(lvsport); + sb.append(""); + sb.append(""); + sb.append(""); + + + + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(file); + sb.append(""); + sb.append(""); + sb.append(fileport); + sb.append(""); + sb.append(""); + sb.append(""); + + sb.append(""); + + return sb.toString(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CoreHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CoreHandler.java new file mode 100644 index 0000000..07e1389 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CoreHandler.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.os.Handler; +import android.os.Looper; +import android.os.Message; + +/** + * com.yuntongxun.ecdemo.common.utils in ECDemo_Android + * Created by Jorstin on 2015/3/24. + */ +public class CoreHandler extends Handler { + + /** + * self-propagation messaage what + */ + private static int HANDLER_WHAT; + /** + * Uniquely identifies the message + */ + private final int mWhat; + + + private long mDelayMillis = 0L; + private final boolean mHandle; + private final HandlerCallbck mHandlerCallbck; + + /** + * + * @param looper + * @param callbck + * @param handle + */ + public CoreHandler(Looper looper , HandlerCallbck callbck , boolean handle) { + super(looper); + mWhat = createWhat(); + mHandlerCallbck = callbck; + mHandle = handle; + } + + /** + * + * @param callbck + * @param handle + */ + public CoreHandler(HandlerCallbck callbck , boolean handle) { + mWhat = createWhat(); + mHandlerCallbck = callbck; + mHandle = handle; + } + + /** + * Unique production news message what + * @return + */ + private static int createWhat() { + if(HANDLER_WHAT > 8192) { + HANDLER_WHAT = 0; + } + HANDLER_WHAT += 1; + return HANDLER_WHAT; + } + + /** + * Remove any pending posts of messages with code 'what' that are in the + * message queue. + */ + public void removeMessages(){ + removeMessages(mWhat); + } + + /** + * Check if there are any pending posts of messages with code 'what' in + * the message queue. + */ + public boolean hasMessages(){ + return hasMessages(mWhat); + } + + /** + * Sends a Message containing only the what value, to be delivered + * after the specified amount of time elapses. + */ + public void sendEmptyMessageDelayed(long delayMillis) { + mDelayMillis = delayMillis; + removeMessages(); + sendEmptyMessageDelayed(mWhat, delayMillis); + + } + + @Override + protected void finalize() throws Throwable { + removeMessages(); + super.finalize(); + } + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + if(msg.what != mWhat && mHandlerCallbck == null) { + return ; + } + + if(!mHandlerCallbck.dispatchMessage() || !mHandle) { + return ; + } + + sendEmptyMessageDelayed(mWhat, mDelayMillis); + } + + + public interface HandlerCallbck { + public abstract boolean dispatchMessage(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CrashHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CrashHandler.java new file mode 100644 index 0000000..1a5b756 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/CrashHandler.java @@ -0,0 +1,431 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.app.AlarmManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Build; +import android.os.Environment; +import android.util.Log; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.reflect.Field; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import java.util.TreeSet; + +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.splash.WelcomeUI; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.Url; + + +/** + * com.yuntongxun.ecdemo.common.utils in ECDemo_Android + * Created by Jorstin on 2015/6/17. + */ +public class CrashHandler implements Thread.UncaughtExceptionHandler { + + private final static String TAG = "UncaughtException"; + /** CrashHandler实例 */ + private static CrashHandler ourInstance = new CrashHandler(); + /** 获取CrashHandler实例 ,单例模式 */ + public static CrashHandler getInstance() { + return ourInstance; + } + /** 保证只有一个CrashHandler实例 */ + private CrashHandler() { + + } + + /** 系统默认的UncaughtException处理类 */ + private Thread.UncaughtExceptionHandler mDefaultHandler; + /** 程序的Context对象 */ + private Context mContext; + /** 使用Properties来保存设备的信息和错误堆栈信息 */ + private Properties mDeviceCrashInfo = new Properties(); + private static final String VERSION_NAME = "versionName"; + private static final String VERSION_CODE = "versionCode"; + private static final String STACK_TRACE = "STACK_TRACE"; + /** 错误报告文件的扩展名 */ + private static final String CRASH_REPORTER_EXTENSION = ".log"; + + /** + * 初始化,注册Context对象, 获取系统默认的UncaughtException处理器, 设置该CrashHandler为程序的默认处理器 + * + * @param ctx + */ + public void init(Context ctx) { + mContext = ctx; + mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler(); + Thread.setDefaultUncaughtExceptionHandler(this); + } + + public void setContext(Context mContext) { + this.mContext = mContext; + } + + /** + * 当UncaughtException发生时会转入该函数来处理 + */ + @Override + public void uncaughtException(Thread thread, Throwable ex) { + mDefaultHandler.uncaughtException(thread, ex); + if (!handleException(ex) && mDefaultHandler != null) { + // 如果用户没有处理则让系统默认的异常处理器来处理 + mDefaultHandler.uncaughtException(thread, ex); + }else { + // Sleep一会后结束程序 + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + LogUtil.e(TAG, "Error : " + e.getMessage()); + } +// restart(); + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(10); + } + } + + private void restart(){ + Intent intent = new Intent(mContext, WelcomeUI.class); + PendingIntent restartIntent = PendingIntent.getActivity( + mContext.getApplicationContext(), 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK); + //退出程序 + AlarmManager mgr = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE); + mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1秒钟后重启应用 + } + + public void restartApp(){ + Intent intent = new Intent(mContext, WelcomeUI.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + mContext.startActivity(intent); + android.os.Process.killProcess(android.os.Process.myPid()); //结束进程之前可以把你程序的注销或者退出代码放在这段代码之前 + } + + /** + * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成. 开发者可以根据自己的情况来自定义异常处理逻辑 + * @param ex + * @return true:如果处理了该异常信息;否则返回false + */ + private boolean handleException(Throwable ex) { + if (ex == null) { + LogUtil.w(TAG, "handleException --- ex==null"); + return true; + } + final String msg = ex.getLocalizedMessage(); + if (msg == null) { + return false; + } + // 使用Toast来显示异常信息 + LogUtil.e("Throwablse=="+ex+"==msg=="+msg); +// new Thread() { +// @Override +// public void run() { +// Looper.prepare(); +// ECAlertDialog buildAlert = ECAlertDialog.buildAlert(mContext, "遇到点小问题,马上回来!", +// mContext.getString(R.string.dialog_btn_confim), new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// //android.os.Process.killProcess(android.os.Process.myPid()); +// System.exit(0); +// } +// }); +// buildAlert.setTitle(R.string.app_crash_tips); +// buildAlert.setCanceledOnTouchOutside(false); +// buildAlert.show(); +// Looper.loop(); +// } +// }.start(); + // 收集设备信息 +// collectCrashDeviceInfo(mContext); + getDeviceInfo(mContext); + // 保存错误报告文件 + saveCrashInfoToFile(ex); + return true; + } + + /** + * 在程序启动时候, 可以调用该函数来发送以前没有发送的报告 + */ + public void sendPreviousReportsToServer() { + sendCrashReportsToServer(mContext); + } + + /** + * 把错误报告发送给服务器,包含新产生的和以前没发送的. + * + * @param ctx + */ + private void sendCrashReportsToServer(Context ctx) { + LogUtil.i("sendCrashReportsToServer"); + String[] crFiles = getCrashReportFiles(ctx); + if (crFiles != null && crFiles.length > 0) { + TreeSet sortedFiles = new TreeSet(); + sortedFiles.addAll(Arrays.asList(crFiles)); + for (String fileName : sortedFiles) { + File filesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/gdxzExpert/CrashLogs"); +// File cr = new File(ctx.getFilesDir(), fileName); + File cr = new File(filesDir, fileName); + postReport(cr); +// cr.delete();// 删除已发送的报告 + } + } + } + + private void postReport(final File file) { + // TODO 发送错误报告到服务器 + final String url= Url.CrashUpload; + //实例化RequestParams对象 +// RequestParams params=new RequestParams(); +// params.addBodyParameter(file.getPath().replace("/", ""), file); +// uploadMethod(params,url); + LogUtil.i("postReport="+file); + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + upLoad(url, file); + } + }).start(); + } + + /** + * 上传log日志 + * @param file + * @param url + */ + private void upLoad(String urlLoad, File mDirectory) { + // TODO Auto-generated method stub +// if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { +// String path = Environment.getExternalStorageDirectory()+ "/CrashLogs/CrashLog.log"; +// File mDirectory = new File(path) ; + if(mDirectory.exists()){ + try { + URL url = new URL(urlLoad); + HttpURLConnection connection=(HttpURLConnection)url.openConnection(); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("content-type", "text/html"); + BufferedOutputStream out=new BufferedOutputStream(connection.getOutputStream()); + + //读取文件上传到服务器 + FileInputStream fileInputStream=new FileInputStream(mDirectory); + byte[]bytes=new byte[1024]; + int numReadByte=0; + while((numReadByte=fileInputStream.read(bytes,0,1024))>0){ + out.write(bytes, 0, numReadByte); + } + out.flush(); + fileInputStream.close(); + //读取URLConnection的响应 + DataInputStream in=new DataInputStream(connection.getInputStream()); + LogUtil.i("upLoad----"+in); + mDirectory.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + }else{ + + } +// } + } + + private void uploadMethod(RequestParams params, String url) { + LogUtil.i("params=="+params.toString()+"==url=="+url); + // TODO Auto-generated method stub + HttpHelper.loadData(HttpRequest.HttpMethod.POST, url, params,new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo responseInfo) { + +// ToastUtil.showMessage("上传成功"); + Log.i("CrashHandler", "upload_success=" + responseInfo.result); + } + @Override + public void onFailure(HttpException error, String msg) { + +// ToastUtil.showMessage("上传失败"); + Log.i("CrashHandler", error.getExceptionCode() + "upload_error=" + msg); + } + }); + } + /** + * 获取错误报告文件名 + * + * @param ctx + * @return + */ + private String[] getCrashReportFiles(Context ctx) { + File filesDir ; + if (FileAccessor.isExistExternalStore()) { + filesDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/gdxzExpert/CrashLogs"); + }else{ + filesDir = ctx.getFilesDir(); + } + FilenameFilter filter = new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(CRASH_REPORTER_EXTENSION); + } + }; + return filesDir.list(filter); + } + + /** + * 保存错误信息到文件中 + * + * @param ex + * @return + */ + private String saveCrashInfoToFile(Throwable ex) { + StringBuffer mStringBuffer = new StringBuffer() ; + SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss") ; + String mTime = mSimpleDateFormat.format(new Date()) ; + mStringBuffer.append("时间:" + mTime + "\r\n") ; + for(Map.Entry entry : mLogInfo.entrySet()) { + String key = entry.getKey() ; + String value = entry.getValue() ; + mStringBuffer.append(key + "=" + value + "\n") ; + } + Writer info = new StringWriter(); + PrintWriter printWriter = new PrintWriter(info); + ex.printStackTrace(printWriter); + Throwable cause = ex.getCause(); + while (cause != null) { + cause.printStackTrace(printWriter); + cause = cause.getCause(); + } + String result = info.toString(); + printWriter.close(); + mStringBuffer.append(result) ; +// mDeviceCrashInfo.put("EXEPTION", ex.getLocalizedMessage()); +// mDeviceCrashInfo.put(STACK_TRACE, result); + try { + // long timestamp = System.currentTimeMillis(); +// Time t = new Time("GMT+8"); +// t.setToNow(); // 取得系统时间 +// int date = t.year * 10000 + t.month * 100 + t.monthDay; +// int time = t.hour * 10000 + t.minute * 100 ;//+ t.second + String fileName = "gdxzExpert-crash-" + mTime + CRASH_REPORTER_EXTENSION; + final String path; + if (FileAccessor.isExistExternalStore()) { + path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/gdxzExpert/CrashLogs"; + } else{ + path ="/gdxzExpert/crash"; + } + File dir = new File(path); + if (!dir.exists()) { + dir.mkdirs(); + } + FileOutputStream fos = new FileOutputStream(new File(dir , fileName),true); +// fos.write(result.getBytes()); + fos.write(mStringBuffer.toString().getBytes()); + fos.close(); +// } else { +// +// FileOutputStream trace = mContext.openFileOutput(fileName, +// Context.MODE_PRIVATE); +// mDeviceCrashInfo.store(trace, ""); +// trace.flush(); +// trace.close(); +// } + return fileName; + } catch (Exception e) { + LogUtil.e(TAG, "an error occured while writing report file..." + e.getMessage()); + } + return null; + } + + /** + * 收集程序崩溃的设备信息 + * + * @param ctx + */ + public void collectCrashDeviceInfo(Context ctx) { + try { + PackageManager pm = ctx.getPackageManager(); + PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), + PackageManager.GET_ACTIVITIES); + if (pi != null) { + mDeviceCrashInfo.put(VERSION_NAME, + pi.versionName == null ? "not set" : pi.versionName); + mDeviceCrashInfo.put(VERSION_CODE, "" + pi.versionCode); + } + } catch (NameNotFoundException e) { + LogUtil.e(TAG, "Error while collect package info" + e.getMessage()); + } + // 使用反射来收集设备信息.在Build类中包含各种设备信息, + // 例如: 系统版本号,设备生产商 等帮助调试程序的有用信息 + // 具体信息请参考后面的截图 + Field[] fields = Build.class.getDeclaredFields(); + for (Field field : fields) { + try { + field.setAccessible(true); + mDeviceCrashInfo.put(field.getName(), "" + field.get(null)); + } catch (Exception e) { + LogUtil.e(TAG, "Error while collect crash info" + e.getMessage()); + } + } + } + private Map mLogInfo = new HashMap() ; + public void getDeviceInfo(Context paramContext) { + try { + // 获得包管理器 + PackageManager mPackageManager = paramContext.getPackageManager() ; + // 得到该应用的信息,即主Activity + PackageInfo mPackageInfo = mPackageManager.getPackageInfo( + paramContext.getPackageName() , PackageManager.GET_ACTIVITIES) ; + if(mPackageInfo != null) { + String versionName = mPackageInfo.versionName == null ? "null" + : mPackageInfo.versionName ; + String versionCode = mPackageInfo.versionCode + "" ; + mLogInfo.put("versionName" , versionName) ; + mLogInfo.put("versionCode" , versionCode) ; + } + } + catch(NameNotFoundException e) { + e.printStackTrace() ; + } + // 反射机制 + Field[] mFields = Build.class.getDeclaredFields() ; + // 迭代Build的字段key-value 此处的信息主要是为了在服务器端手机各种版本手机报错的原因 + for(Field field : mFields) { + try { + field.setAccessible(true) ; + mLogInfo.put(field.getName() , field.get("").toString()) ; + Log.d(TAG , field.getName() + ":" + field.get("")) ; + } + catch(IllegalArgumentException e) { + e.printStackTrace() ; + } + catch(IllegalAccessException e) { + e.printStackTrace() ; + } + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DateUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DateUtil.java new file mode 100644 index 0000000..8e6d967 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DateUtil.java @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; +import java.util.TimeZone; + +/** + * 时间转换工具类 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class DateUtil { + + public static final TimeZone tz = TimeZone.getTimeZone("GMT+8:00"); + public static final SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy-MM-dd"); + + private static final long ONEDAY = 86400000; + public static final int SHOW_TYPE_SIMPLE = 0; + public static final int SHOW_TYPE_COMPLEX = 1; + public static final int SHOW_TYPE_ALL = 2; + public static final int SHOW_TYPE_CALL_LOG = 3; + public static final int SHOW_TYPE_CALL_DETAIL = 4; + + /** + * 获取当前当天日期的毫秒数 2012-03-21的毫秒数 + * + * @return + */ + public static long getCurrentDayTime() { + Date d = new Date(System.currentTimeMillis()); + String formatDate = yearFormat.format(d); + try { + return (yearFormat.parse(formatDate)).getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return 0; + } + + public static String formatDate(int year, int month, int day) { + Date d = new Date(year - 1900, month, day); + return yearFormat.format(d); + } + + public static long getDateMills(int year, int month, int day) { + //Date d = new Date(year, month, day); + // 1960 4 22 + Calendar calendar = Calendar.getInstance(Locale.CHINA); + calendar.set(year, month, day); + TimeZone tz = TimeZone.getDefault(); + calendar.setTimeZone(tz); + return calendar.getTimeInMillis(); + } + + public static String getDateString(long time, int type) { + Calendar c = Calendar.getInstance(); + c = Calendar.getInstance(tz); + c.setTimeInMillis(time); + long currentTime = System.currentTimeMillis(); + Calendar current_c = Calendar.getInstance(); + current_c = Calendar.getInstance(tz); + current_c.setTimeInMillis(currentTime); + + int currentYear = current_c.get(Calendar.YEAR); + int y = c.get(Calendar.YEAR); + int m = c.get(Calendar.MONTH) + 1; + int d = c.get(Calendar.DAY_OF_MONTH); + int hour = c.get(Calendar.HOUR_OF_DAY); + int minute = c.get(Calendar.MINUTE); + int second = c.get(Calendar.SECOND); + long t = currentTime - time; + long t2 = currentTime - getCurrentDayTime(); + String dateStr = ""; + if (t < t2 && t > 0) { + if (type == SHOW_TYPE_SIMPLE) { + dateStr = (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute); + } else if (type == SHOW_TYPE_COMPLEX) { + dateStr = "今天 " + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute); + } else if (type == SHOW_TYPE_CALL_LOG) { + dateStr = "今天 " + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute); + } else if (type == SHOW_TYPE_CALL_DETAIL) { + dateStr = "今天 "; + }else { + dateStr = (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute) + ":" + + (second < 10 ? "0" + second : second); + } + } else if (t < (t2 + ONEDAY) && t > 0) { + if (type == SHOW_TYPE_SIMPLE || type == SHOW_TYPE_CALL_DETAIL) { + dateStr = "昨天 "; + } else if (type == SHOW_TYPE_COMPLEX ) { + dateStr = "昨天 " + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute); + } else if (type == SHOW_TYPE_CALL_LOG) { + dateStr = "昨天 " + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute); + } else { + dateStr = "昨天 " + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute) + ":" + + (second < 10 ? "0" + second : second); + } + } else if (y == currentYear) { + if (type == SHOW_TYPE_SIMPLE) { + dateStr = (m < 10 ? "0" + m : m) + "/" + (d < 10 ? "0" + d : d); + } else if (type == SHOW_TYPE_COMPLEX) { + dateStr = (m < 10 ? "0" + m : m) + "月" + (d < 10 ? "0" + d : d) + + "日"; + } else if (type == SHOW_TYPE_CALL_LOG || type == SHOW_TYPE_COMPLEX) { + dateStr = (m < 10 ? "0" + m : m) + /* 月 */"/" + + (d < 10 ? "0" + d : d) + /* 日 */" " + + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute); + } else if (type == SHOW_TYPE_CALL_DETAIL) { + dateStr = y + "/" + (m < 10 ? "0" + m : m) + "/" + + (d < 10 ? "0" + d : d); + } else { + dateStr = (m < 10 ? "0" + m : m) + "月" + (d < 10 ? "0" + d : d) + + "日 " + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute) + ":" + + (second < 10 ? "0" + second : second); + } + } else { + if (type == SHOW_TYPE_SIMPLE) { + dateStr = y + "/" + (m < 10 ? "0" + m : m) + "/" + + (d < 10 ? "0" + d : d); + } else if (type == SHOW_TYPE_COMPLEX ) { + dateStr = y + "年" + (m < 10 ? "0" + m : m) + "月" + + (d < 10 ? "0" + d : d) + "日"; + } else if (type == SHOW_TYPE_CALL_LOG || type == SHOW_TYPE_COMPLEX) { + dateStr = y + /* 年 */"/" + (m < 10 ? "0" + m : m) + /* 月 */"/" + + (d < 10 ? "0" + d : d) + /* 日 */" "/* + * + (hour < 10 + * ? "0" + hour + * : hour) + ":" + * + (minute < + * 10 ? "0" + + * minute : + * minute) + */; + } else if (type == SHOW_TYPE_CALL_DETAIL) { + dateStr = y + "/" + (m < 10 ? "0" + m : m) + "/" + + (d < 10 ? "0" + d : d); + } else { + dateStr = y + "年" + (m < 10 ? "0" + m : m) + "月" + + (d < 10 ? "0" + d : d) + "日 " + + (hour < 10 ? "0" + hour : hour) + ":" + + (minute < 10 ? "0" + minute : minute) + ":" + + (second < 10 ? "0" + second : second); + } + } + return dateStr; + } + + /** + * + * @return + */ + public static long getCurrentTime() { + return System.currentTimeMillis() / 1000; + } + + public static long getActiveTimelong(String result) { + try { + Date parse = yearFormat.parse(result); + return parse.getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return System.currentTimeMillis(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DemoUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DemoUtils.java new file mode 100644 index 0000000..ee3cb02 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DemoUtils.java @@ -0,0 +1,1395 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import static cn.shangyu.gdxzExpert.utils.DownLoadUrlImage.copyFileAfterQ; +import static cn.shangyu.gdxzExpert.utils.DownLoadUrlImage.getImageContentValues; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.content.res.AssetFileDescriptor; +import android.content.res.Resources; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.media.ExifInterface; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Build; +import android.os.Vibrator; +import android.provider.MediaStore; +import android.text.TextUtils; +import android.text.format.DateFormat; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.view.PhotoBitmapDrawable; +import cn.shangyu.gdxzExpert.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +//import junit.framework.Assert; + +/** + * Created by Jorstin on 2015/3/18. + */ +public class DemoUtils { + public static final String TAG = "DemoUtils"; + private static final int MAX_DECODE_PICTURE_SIZE = 1920 * 1440; + public static boolean inNativeAllocAccessError = false; + /** 当前SDK版本号 */ + private static int mSdkint = -1; + + /** + * 计算语音文件的时间长度 + * + * @param file + * @return + */ + public static int calculateVoiceTime(String file) { + File _file = new File(file); + if (!_file.exists()) { + return 0; + } + // 650个字节就是1s + int duration = (int) Math.ceil(_file.length() / 650); + if (duration > 60) { + return 60; + } + if (duration < 1) { + return 1; + } + return duration; + } + + private static MessageDigest md = null; + + public static String md5(final String c) { + if (md == null) { + try { + md = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + } + + if (md != null) { + md.update(c.getBytes()); + return byte2hex(md.digest()); + } + return ""; + } + + public static String byte2hex(byte b[]) { + String hs = ""; + String stmp = ""; + for (int n = 0; n < b.length; n++) { + stmp = Integer.toHexString(b[n] & 0xff); + if (stmp.length() == 1) + hs = hs + "0" + stmp; + else + hs = hs + stmp; + if (n < b.length - 1) + hs = (new StringBuffer(String.valueOf(hs))).toString(); + } + + return hs.toUpperCase(); + } + + /** + * 将集合转换成字符串,用特殊字符做分隔符 + * + * @param srcList + * 转换前集合 + * @param separator + * 分隔符 + * @return + */ + public static String listToString(List srcList, String separator) { + if (srcList == null) { + return ""; + } + StringBuilder sb = new StringBuilder(""); + for (int i = 0; i < srcList.size(); ++i) + if (i == srcList.size() - 1) { + sb.append(((String) srcList.get(i)).trim()); + } else { + sb.append(((String) srcList.get(i)).trim() + separator); + } + return sb.toString(); + } + + /** + * SDK版本号 + * + * @return + */ + public static int getSdkint() { + if (mSdkint < 0) { + mSdkint = Build.VERSION.SDK_INT; + } + return mSdkint; + } + + /** + * Java文件操作 获取文件扩展名 Get the file extension, if no extension or file name + * + */ + public static String getExtensionName(String filename) { + if ((filename != null) && (filename.length() > 0)) { + int dot = filename.lastIndexOf('.'); + if ((dot > -1) && (dot < (filename.length() - 1))) { + return filename.substring(dot + 1); + } + } + return ""; + } + + /** + * Java文件操作 获取不带扩展名的文件名 + */ + public static String getFileNameNoEx(String filename) { + if ((filename != null) && (filename.length() > 0)) { + int dot = filename.lastIndexOf('.'); + if ((dot > -1) && (dot < (filename.length()))) { + return filename.substring(0, dot); + } + } + return filename; + } + + /** + * 返回文件名 + * + * @param pathName + * @return + */ + public static String getFilename(String pathName) { + File file = new File(pathName); + if (!file.exists()) { + return ""; + } + return file.getName(); + } + + /** + * 过滤字符串为空 + * + * @param str + * @return + */ + public static String nullAsNil(String str) { + if (str == null) { + return ""; + } + return str; + } + + /** + * 将字符串转换成整型,如果为空则返回默认值 + * + * @param str + * 字符串 + * @param def + * 默认值 + * @return + */ + public static int getInt(String str, int def) { + try { + if (str == null) { + return def; + } + return Integer.parseInt(str); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + return def; + } + + /** + * 删除号码中的所有非数字 + * + * @param str + * @return + */ + public static String filterUnNumber(String str) { + if (str == null) { + return null; + } + if (str.startsWith("+86")) { + str = str.substring(3, str.length()); + } + + // if (str.contains("#")) { + // + // return str.replaceAll("#", "@"); + // } + + // 只允数字 + String regEx = "[^0-9]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + // 替换与模式匹配的所有字符(即非数字的字符将被""替换) + // 对voip造成的负数号码,做处理 + if (str.startsWith("-")) { + return "-" + m.replaceAll("").trim(); + } else { + return m.replaceAll("").trim(); + } + + } + + /** + * + * @param c + * @return + */ + public static boolean characterChinese(char c) { + Character.UnicodeBlock unicodeBlock = Character.UnicodeBlock.of(c); + return ((unicodeBlock != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) + && (unicodeBlock != Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS) + && (unicodeBlock != Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A) + && (unicodeBlock != Character.UnicodeBlock.GENERAL_PUNCTUATION) + && (unicodeBlock != Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION) && (unicodeBlock != Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS)); + } + + public static String getGroupShortId(String id) { + /* + * if(TextUtils.isEmpty(id) || !id.startsWith("G")) { return id; } + * return id.substring(id.length() - 6 , id.length()); + */ + return id; + } + + public static final String PHONE_PREFIX = "+86"; + + /** + * 去除+86 + * + * @param phoneNumber + * @return + */ + public static String formatPhone(String phoneNumber) { + if (phoneNumber == null) { + return ""; + } + if (phoneNumber.startsWith(PHONE_PREFIX)) { + return phoneNumber.substring(PHONE_PREFIX.length()).trim(); + } + return phoneNumber.trim(); + } + + /** + * + * @param userData + * @return + */ + public static String getFileNameFormUserdata(String userData) { + if (TextUtils.isEmpty(userData) || "null".equals(userData)) { + return ""; + } + if (userData.contains("fileName=")) { + return userData.substring(userData.indexOf("fileName=") + + "fileName=".length(), userData.length()); + } + return userData; + + } + + static MediaPlayer mediaPlayer = null; + + public static void playNotifycationMusic(Context context, String voicePath) + throws IOException { + // paly music ... + AssetFileDescriptor fileDescriptor = context.getAssets().openFd( + voicePath); + if (mediaPlayer == null) { + mediaPlayer = new MediaPlayer(); + } + if (mediaPlayer.isPlaying()) { + mediaPlayer.stop(); + } + mediaPlayer.reset(); + mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(), + fileDescriptor.getStartOffset(), fileDescriptor.getLength()); + mediaPlayer.prepare(); + mediaPlayer.setLooping(false); + mediaPlayer.start(); + } + + /** + * @param context + * @param intent + * @param appPath + * @return + */ + public static String resolvePhotoFromIntent(Context context, Intent intent, + String appPath) { + if (context == null || intent == null || appPath == null) { + LogUtil.e(LogUtil.getLogUtilsTag(DemoUtils.class), + "resolvePhotoFromIntent fail, invalid argument"); + return null; + } + Uri uri = Uri.parse(intent.toURI()); + Cursor cursor = context.getContentResolver().query(uri, null, null, + null, null); + try { + + String pathFromUri = null; + if (cursor != null && cursor.getCount() > 0) { + cursor.moveToFirst(); + int columnIndex = cursor + .getColumnIndex(MediaStore.MediaColumns.DATA); + // if it is a picasa image on newer devices with OS 3.0 and up + if (uri.toString().startsWith( + "content://com.google.android.gallery3d")) { + // Do this in a background thread, since we are fetching a + // large image from the web + pathFromUri = saveBitmapToLocal(appPath, + createChattingImageByUri(intent.getData())); + } else { + // it is a regular local image file + pathFromUri = cursor.getString(columnIndex); + } + cursor.close(); + LogUtil.d(TAG, "photo from resolver, path: " + pathFromUri); + return pathFromUri; + } else { + + if (intent.getData() != null) { + pathFromUri = intent.getData().getPath(); + if (new File(pathFromUri).exists()) { + LogUtil.d(TAG, "photo from resolver, path: " + + pathFromUri); + return pathFromUri; + } + } + + // some devices (OS versions return an URI of com.android + // instead of com.google.android + if ((intent.getAction() != null) + && (!(intent.getAction().equals("inline-data")))) { + // use the com.google provider, not the com.android + // provider. + // Uri.parse(intent.getData().toString().replace("com.android.gallery3d","com.google.android.gallery3d")); + pathFromUri = saveBitmapToLocal(appPath, (Bitmap) intent + .getExtras().get("data")); + LogUtil.d(TAG, "photo from resolver, path: " + pathFromUri); + return pathFromUri; + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) { + cursor.close(); + } + } + + LogUtil.e(TAG, "resolve photo from intent failed "); + return null; + } + + /** + * + * @param uri + * @return + */ + public static Bitmap createChattingImageByUri(Uri uri) { + return createChattingImage(0, null, null, uri, 0.0F, 400, 800); + } + + /** + * + * @param resource + * @param path + * @param b + * @param uri + * @param dip + * @param width + * @param height + * @return + */ + public static Bitmap createChattingImage(int resource, String path, + byte[] b, Uri uri, float dip, int width, int height) { + if (width <= 0 || height <= 0) { + return null; + } + + BitmapFactory.Options options = new BitmapFactory.Options(); + int outWidth = 0; + int outHeight = 0; + int sampleSize = 0; + try { + + do { + if (dip != 0.0F) { + options.inDensity = (int) (160.0F * dip); + } + options.inJustDecodeBounds = true; + decodeMuilt(options, b, path, uri, resource); + // + outWidth = options.outWidth; + outHeight = options.outHeight; + + options.inPreferredConfig = Bitmap.Config.ARGB_8888; + if (outWidth <= width || outHeight <= height) { + sampleSize = 0; + setInNativeAlloc(options); + Bitmap decodeMuiltBitmap = decodeMuilt(options, b, path, + uri, resource); + return decodeMuiltBitmap; + } else { + options.inSampleSize = (int) Math.max(outWidth / width, + outHeight / height); + sampleSize = options.inSampleSize; + } + } while (sampleSize != 0); + + } catch (IncompatibleClassChangeError e) { + e.printStackTrace(); + throw ((IncompatibleClassChangeError) new IncompatibleClassChangeError( + "May cause dvmFindCatchBlock crash!").initCause(e)); + } catch (Throwable throwable) { + throwable.printStackTrace(); + BitmapFactory.Options catchOptions = new BitmapFactory.Options(); + if (dip != 0.0F) { + catchOptions.inDensity = (int) (160.0F * dip); + } + catchOptions.inPreferredConfig = Bitmap.Config.RGB_565; + if (sampleSize != 0) { + catchOptions.inSampleSize = sampleSize; + } + setInNativeAlloc(catchOptions); + try { + return decodeMuilt(options, b, path, uri, resource); + } catch (IncompatibleClassChangeError twoE) { + twoE.printStackTrace(); + throw ((IncompatibleClassChangeError) new IncompatibleClassChangeError( + "May cause dvmFindCatchBlock crash!").initCause(twoE)); + } catch (Throwable twoThrowable) { + twoThrowable.printStackTrace(); + } + } + + return null; + } + + /** + * save image from uri + * + * @param outPath + * @param bitmap + * @return + */ + public static String saveBitmapToLocal(String outPath, Bitmap bitmap) { + try { + String imagePath = outPath + + DemoUtils.md5(DateFormat.format("yyyy-MM-dd-HH-mm-ss", + System.currentTimeMillis()).toString()) + ".jpg"; + File file = new File(imagePath); + if (!file.exists()) { + file.createNewFile(); + } + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( + new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, + bufferedOutputStream); + bufferedOutputStream.close(); + LogUtil.d(TAG, "photo image from data, path:" + imagePath); + return imagePath; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static String saveBitmapToLocal(File file, Bitmap bitmap) { + try { + if (!file.exists()) { + file.createNewFile(); + } + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( + new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, + bufferedOutputStream); + bufferedOutputStream.close(); + LogUtil.d(TAG, + "photo image from data, path:" + file.getAbsolutePath()); + return file.getAbsolutePath(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * + * @param options + * @param data + * @param path + * @param uri + * @param resource + * @return + */ + public static Bitmap decodeMuilt(BitmapFactory.Options options, + byte[] data, String path, Uri uri, int resource) { + try { + + if (!checkByteArray(data) && TextUtils.isEmpty(path) && uri == null + && resource <= 0) { + return null; + } + + if (checkByteArray(data)) { + return BitmapFactory.decodeByteArray(data, 0, data.length, + options); + } + + if (uri != null) { + InputStream inputStream = CCPAppManager.getContext() + .getContentResolver().openInputStream(uri); + Bitmap localBitmap = BitmapFactory.decodeStream(inputStream, + null, options); + inputStream.close(); + return localBitmap; + } + + if (resource > 0) { + return BitmapFactory.decodeResource(CCPAppManager.getContext() + .getResources(), resource, options); + } + return BitmapFactory.decodeFile(path, options); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static void setInNativeAlloc(BitmapFactory.Options options) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH + && !inNativeAllocAccessError) { + try { + BitmapFactory.Options.class.getField("inNativeAlloc") + .setBoolean(options, true); + return; + } catch (Exception e) { + inNativeAllocAccessError = true; + } + } + } + + public static boolean checkByteArray(byte[] b) { + return b != null && b.length > 0; + } + + public static Bitmap getSuitableBitmap(String filePath) { + if (TextUtils.isEmpty(filePath)) { + LogUtil.e(TAG, "filepath is null or nil"); + return null; + } + + if (!new File(filePath).exists()) { + LogUtil.e(TAG, + "getSuitableBmp fail, file does not exist, filePath = " + + filePath); + return null; + } + try { + + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + Bitmap decodeFile = BitmapFactory.decodeFile(filePath, options); + if (decodeFile != null) { + decodeFile.recycle(); + } + + if ((options.outWidth <= 0) || (options.outHeight <= 0)) { + LogUtil.e(TAG, "get bitmap fail, file is not a image file = " + + filePath); + return null; + } + + int maxWidth = 1080; + int width = 0; + int height = 0; + if ((options.outWidth <= options.outHeight * 2.0D) + && options.outWidth > 480) { + height = maxWidth; + width = options.outWidth; + } + if ((options.outHeight <= options.outWidth * 2.0D) + || options.outHeight <= 480) { + width = maxWidth; + height = options.outHeight; + } + + Bitmap bitmap = extractThumbNail(filePath, width, height, false); + if (bitmap == null) { + LogUtil.e(TAG, + "getSuitableBmp fail, temBmp is null, filePath = " + + filePath); + return null; + } + int degree = readPictureDegree(filePath); + if (degree != 0) { + bitmap = degreeBitmap(bitmap, degree); + } + return bitmap; + } catch (Exception e) { + LogUtil.e(TAG, "decode bitmap err: " + e.getMessage()); + return null; + } + } + + /** + * 读取图片属性:旋转的角度 + * + * @param path + * 图片绝对路径 + * @return degree旋转的角度 + */ + public static int readPictureDegree(String path) { + int degree = 0; + try { + ExifInterface exifInterface = new ExifInterface(path); + int orientation = exifInterface.getAttributeInt( + ExifInterface.TAG_ORIENTATION, + ExifInterface.ORIENTATION_NORMAL); + switch (orientation) { + case ExifInterface.ORIENTATION_ROTATE_90: + degree = 90; + break; + case ExifInterface.ORIENTATION_ROTATE_180: + degree = 180; + break; + case ExifInterface.ORIENTATION_ROTATE_270: + degree = 270; + break; + } + } catch (IOException e) { + e.printStackTrace(); + } + return degree; + } + + /** + * + * @param src + * @param degree + * @return + */ + public static Bitmap degreeBitmap(Bitmap src, float degree) { + if (degree == 0.0F) { + return src; + } + Matrix matrix = new Matrix(); + matrix.reset(); + matrix.setRotate(degree, src.getWidth() / 2, src.getHeight() / 2); + Bitmap resultBitmap = Bitmap.createBitmap(src, 0, 0, src.getWidth(), + src.getHeight(), matrix, true); + boolean filter = true; + if (resultBitmap == null) { + LogUtil.e(TAG, "resultBmp is null: "); + filter = true; + } else { + filter = false; + } + + if (resultBitmap != src) { + src.recycle(); + } + LogUtil.d(TAG, "filter: " + filter + " degree:" + degree); + return resultBitmap; + } + + /** + * 得到指定路径图片的options + * + * @param srcPath + * @return Options {@link BitmapFactory.Options} + */ + public final static BitmapFactory.Options getBitmapOptions(String srcPath) { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(srcPath, options); + return options; + } + + /** + * 压缩发送到服务器的图片 + * + * @param origPath + * 原始图片路径 + * @param widthLimit + * 图片宽度限制 + * @param heightLimit + * 图片高度限制 + * @param format + * 图片格式 + * @param quality + * 图片压缩率 + * @param authorityDir + * 图片目录 + * @param outPath + * 图片详细目录 + * @return + */ + public static boolean createThumbnailFromOrig(String origPath, + int widthLimit, int heightLimit, Bitmap.CompressFormat format, + int quality, String authorityDir, String outPath) { + Bitmap bitmapThumbNail = extractThumbNail(origPath, widthLimit, + heightLimit, false); + if (bitmapThumbNail == null) { + return false; + } + + try { + saveImageFile(bitmapThumbNail, quality, format, authorityDir, + outPath); + return true; + } catch (IOException e) { + LogUtil.e(TAG, "create thumbnail from orig failed: " + outPath); + } + return false; + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public static Bitmap extractThumbNail(final String path, final int width, + final int height, final boolean crop) { +// Assert.assertTrue(path != null && !path.equals("") && height > 0 +// && width > 0); +/** + * 2018.11.23 v3.0.1修改容联拍照处理 + * + * */ + BitmapFactory.Options opts = new BitmapFactory.Options(); + opts.inJustDecodeBounds = true;// 不去真的解析图片,只是获取图片的头部信息,包含宽高等; + Bitmap bitmap = BitmapFactory.decodeFile(path, opts); + // 得到图片的宽度、高度; + float imgWidth = opts.outWidth; + float imgHeight = opts.outHeight; + // 分别计算图片宽度、高度与目标宽度、高度的比例;取大于等于该比例的最小整数; + int widthRatio = (int) Math.ceil(imgWidth / (float) width); + int heightRatio = (int) Math.ceil(imgHeight / (float) height); + opts.inSampleSize = 1; + if (widthRatio > 1 || widthRatio > 1) { + if (widthRatio > heightRatio) { + opts.inSampleSize = widthRatio; + } else { + opts.inSampleSize = heightRatio; + } + } + //设置好缩放比例后,加载图片进内容; + opts.inJustDecodeBounds = false; + bitmap = BitmapFactory.decodeFile(path, opts); + return bitmap; +// BitmapFactory.Options options = new BitmapFactory.Options(); +// +// try { +// options.inJustDecodeBounds = true; +// Bitmap tmp = BitmapFactory.decodeFile(path, options); +// if (tmp != null) { +// tmp.recycle(); +// tmp = null; +// } +// +// LogUtil.d(TAG, "extractThumbNail: round=" + width + "x" + height +// + ", crop=" + crop); +// final double beY = options.outHeight * 1.0 / height; +// final double beX = options.outWidth * 1.0 / width; +// LogUtil.d(TAG, "extractThumbNail: extract beX = " + beX +// + ", beY = " + beY); +// options.inSampleSize = (int) (crop ? (beY > beX ? beX : beY) +// : (beY < beX ? beX : beY)); +// if (options.inSampleSize <= 1) { +// options.inSampleSize = 1; +// } +// +// // NOTE: out of memory error +// while (options.outHeight * options.outWidth / options.inSampleSize > MAX_DECODE_PICTURE_SIZE) { +// options.inSampleSize++; +// } +// +// int newHeight = height; +// int newWidth = width; +// if (crop) { +// if (beY > beX) { +// newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth); +// } else { +// newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight); +// } +// } else { +// if (beY < beX) { +// newHeight = (int) (newWidth * 1.0 * options.outHeight / options.outWidth); +// } else { +// newWidth = (int) (newHeight * 1.0 * options.outWidth / options.outHeight); +// } +// } +// +// options.inJustDecodeBounds = false; +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { +// options.inMutable = true; +// } +// if (newWidth==0) { +// newWidth=1; +// } +// if (newHeight==0) { +// newHeight =1; +// } +// LogUtil.i(TAG, "bitmap required size=" + newWidth + "x" + newHeight +// + ", orig=" + options.outWidth + "x" + options.outHeight +// + ", sample=" + options.inSampleSize); +// Bitmap bm = BitmapFactory.decodeFile(path, options); +// setInNativeAlloc(options); +// if (bm == null) { +// Log.e(TAG, "bitmap decode failed"); +// return null; +// } +// +// LogUtil.i( +// TAG, +// "bitmap decoded size=" + bm.getWidth() + "x" +// + bm.getHeight()); +// final Bitmap scale = Bitmap.createScaledBitmap(bm, newWidth, +// newHeight, true); +// if (scale != null) { +// bm.recycle(); +// bm = scale; +// } +// +// if (crop) { +// final Bitmap cropped = Bitmap.createBitmap(bm, +// (bm.getWidth() - width) >> 1, +// (bm.getHeight() - height) >> 1, width, height); +// if (cropped == null) { +// return bm; +// } +// +// bm.recycle(); +// bm = cropped; +// LogUtil.i( +// TAG, +// "bitmap croped size=" + bm.getWidth() + "x" +// + bm.getHeight()); +// } +// return bm; + +// } catch (final OutOfMemoryError e) { +// LogUtil.e(TAG, "decode bitmap failed: " + e.getMessage()); +// options = null; +// } +// +// return null; + } + + public static void saveImageFile(Bitmap bitmap, int quality, + Bitmap.CompressFormat format, String authorityDir, String outPath) + throws IOException { + if (!TextUtils.isEmpty(authorityDir) && !TextUtils.isEmpty(outPath)) { + LogUtil.d(TAG, "saving to " + authorityDir + outPath); + File file = new File(authorityDir); + if (!file.exists()) { + file.mkdirs(); + } + File outfile = new File(file, outPath); + outfile.createNewFile(); + + try { + FileOutputStream outputStream = new FileOutputStream(outfile); + bitmap.compress(format, quality, outputStream); + outputStream.flush(); + } catch (Exception e) { + LogUtil.e(TAG, "saveImageFile fil=" + e.getMessage()); + } + } + } + + private static int mScreenWidth; + + public static int getImageMinWidth(Context context) { + if (mScreenWidth <= 0) { + mScreenWidth = DensityUtil.getImageWeidth(context, 1.0F) + - DensityUtil.getDisplayMetrics(context, 40F); + mScreenWidth = mScreenWidth / 4; + } + return mScreenWidth; + } + + public static int getImageMinWidth2(Context context) { + if (mScreenWidth <= 0) { + mScreenWidth = DensityUtil.getImageWeidth(context, 1.0F) + - DensityUtil.getDisplayMetrics(context, 40F); + mScreenWidth = mScreenWidth / 4; + } + return mScreenWidth; + } + + /** + * 获取图片被旋转的角度 + * + * @param filePath + * @return + */ + public static int getBitmapDegrees(String filePath) { + if (TextUtils.isEmpty(filePath)) { + LogUtil.d(TAG, "filePath is null or nil"); + return 0; + } + if (!new File(filePath).exists()) { + LogUtil.d(TAG, "file not exist:" + filePath); + return 0; + } + ExifInterface exifInterface = null; + try { + + if (Integer.valueOf(Build.VERSION.SDK).intValue() >= 5) { + exifInterface = new ExifInterface(filePath); + int attributeInt = -1; + if (exifInterface != null) { + attributeInt = exifInterface.getAttributeInt( + ExifInterface.TAG_ORIENTATION, -1); + } + + if (attributeInt != -1) { + switch (attributeInt) { + case ExifInterface.ORIENTATION_FLIP_VERTICAL: + case ExifInterface.ORIENTATION_TRANSPOSE: + case ExifInterface.ORIENTATION_TRANSVERSE: + return 0; + case ExifInterface.ORIENTATION_ROTATE_180: + return 180; + case ExifInterface.ORIENTATION_ROTATE_90: + return 90; + case ExifInterface.ORIENTATION_ROTATE_270: + return 270; + default: + break; + } + } + } + } catch (IOException e) { + LogUtil.e(TAG, "cannot read exif :" + e.getMessage()); + } finally { + exifInterface = null; + } + return 0; + } + + /** + * 旋转图片 + * + * @param srcPath + * @param degrees + * @param format + * @param root + * @param fileName + * @return + */ + public static boolean rotateCreateBitmapSmall(String srcPath, int degrees, + Bitmap.CompressFormat format, String root, String fileName) { + + Bitmap decodeFile = BitmapFactory.decodeFile(srcPath); + if (decodeFile == null) { + LogUtil.e(TAG, "rotate: create bitmap fialed"); + return false; + } + int width = decodeFile.getWidth(); + int height = decodeFile.getHeight(); + Matrix matrix = new Matrix(); + matrix.setRotate(degrees, width / 2.0F, height / 2.0F); + Bitmap createBitmap = Bitmap.createBitmap(decodeFile, 0, 0, width, + height, matrix, true); + decodeFile.recycle(); + try { + saveImageFile(createBitmap, 60, format, root, fileName); + return true; + } catch (Exception e) { + LogUtil.e(TAG, "create thumbnail from orig failed: " + fileName); + } + return false; + } + /** + * 旋转图片 + * + * @param srcPath + * @param degrees + * @param format + * @param root + * @param fileName + * @return + */ + public static boolean rotateCreateBitmap(String srcPath, int degrees, + Bitmap.CompressFormat format, String root, String fileName) { + + Bitmap decodeFile = BitmapFactory.decodeFile(srcPath); + if (decodeFile == null) { + LogUtil.e(TAG, "rotate: create bitmap fialed"); + return false; + } + int width = decodeFile.getWidth(); + int height = decodeFile.getHeight(); + Matrix matrix = new Matrix(); + matrix.setRotate(degrees, width , height ); + Bitmap createBitmap = Bitmap.createBitmap(decodeFile, 0, 0, width, + height, matrix, true); + decodeFile.recycle(); + try { + saveImageFile(createBitmap, 100, format, root, fileName); + return true; + } catch (Exception e) { + LogUtil.e(TAG, "create thumbnail from orig failed: " + fileName); + } + return false; + } + + /** + * 生成一张缩略图 + * + * @param bitmap + * @param paramFloat + * @return + */ + public static Bitmap processBitmap(Bitmap bitmap, float paramFloat) { +// Assert.assertNotNull(bitmap); + Bitmap resultBitmap = Bitmap.createBitmap(bitmap.getWidth(), + bitmap.getHeight(), Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(resultBitmap); + Paint paint = new Paint(); + Rect localRect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); + RectF rectF = new RectF(localRect); + paint.setAntiAlias(true); + paint.setDither(true); + paint.setFilterBitmap(true); + canvas.drawARGB(0, 0, 0, 0); + paint.setColor(-4144960); + canvas.drawRoundRect(rectF, paramFloat, paramFloat, paint); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(bitmap, localRect, localRect, paint); + bitmap.recycle(); + return resultBitmap; + } + + /** + * + * @param stream + * @param dip + * @return + */ + public static Bitmap decodeStream(InputStream stream, float dip) { + BitmapFactory.Options options = new BitmapFactory.Options(); + if (dip != 0.0F) { + options.inDensity = (int) (160.0F * dip); + } + options.inPreferredConfig = Bitmap.Config.ARGB_8888; + setInNativeAlloc(options); + try { + Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options); + return bitmap; + } catch (OutOfMemoryError e) { + options.inPreferredConfig = Bitmap.Config.RGB_565; + setInNativeAlloc(options); + try { + Bitmap bitmap = BitmapFactory.decodeStream(stream, null, + options); + return bitmap; + } catch (OutOfMemoryError e2) { + } + } + return null; + } + + public static String getLastText(String text) { + if (text == null) { + return null; + } + for (int i = text.length() - 1; i >= 0; --i) { + int j = text.charAt(i); + if ((j >= 19968) && (j <= 40869)) { + return String.valueOf(j); + } + } + return null; + } + + /** + * + * @return + */ + public static Paint newPaint() { + Paint paint = new Paint(1); + paint.setFilterBitmap(true); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); + return paint; + } + + public static Drawable getDrawable(Context context, int resid, + Bitmap defaultMask) { + return getDrawable(((BitmapDrawable) context.getResources() + .getDrawable(resid)).getBitmap(), defaultMask, newPaint()); + } + + public static Drawable getDrawable(Bitmap bitmap, Bitmap defaultMask) { + return getDrawable(bitmap, defaultMask, newPaint(), true); + } + + public static Drawable getDrawable(Bitmap photo, Bitmap mask, + Paint paramPaint) { + return getDrawable(photo, mask, paramPaint, true); + } + + /* + * + */ + public static Bitmap newBitmap(int width, int height, Bitmap.Config config) { + try { + Bitmap bitmap = Bitmap.createBitmap(width, height, config); + return bitmap; + } catch (Throwable localThrowable) { + LogUtil.e(TAG, localThrowable.getMessage()); + } + return null; + } + + public static Drawable getDrawable(Bitmap src, Bitmap mask, Paint paint, + boolean stroke) { + if (src == null) + return null; + if ((stroke) && (src.getHeight() != src.getWidth())) + try { + int maxSize = Math.max(src.getWidth(), src.getHeight()); + Bitmap bitmap = newBitmap(maxSize, maxSize, + Bitmap.Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + canvas.drawColor(-1); + canvas.drawBitmap(src, (maxSize - src.getWidth()) / 2, + (maxSize - src.getHeight()) / 2, new Paint()); + PhotoBitmapDrawable photo = new PhotoBitmapDrawable(bitmap, + mask, paint); + return photo; + } catch (Exception e) { + e.printStackTrace(); + return new PhotoBitmapDrawable(src, mask, paint); + } + return new PhotoBitmapDrawable(src, mask, paint); + } + + public static boolean checkUpdater(String serVer) { + String version = CCPAppManager.getVersion(); + return compareVersion(version, serVer) == -1; + } + + public static int compareVersion(String curVer, String serVer) { + if (curVer.equals(serVer) || serVer == null) { + return 0; + } + String[] version1Array = curVer.split("\\."); + String[] version2Array = serVer.split("\\."); + int index = 0; + int minLen = Math.min(version1Array.length, version2Array.length); + long diff = 0; + while (index < minLen + && (diff = Long.parseLong(getStringNum(version1Array[index])) + - Long.parseLong(getStringNum(version2Array[index]))) == 0) { + index++; + } + if (diff == 0) { + for (int i = index; i < version1Array.length; i++) { + if (i >= 4 || Integer.parseInt(version1Array[i]) > 0) { + // 没有新版本 + return 1; + } + } + for (int i = index; i < version2Array.length; i++) { + if (Integer.parseInt(version2Array[i]) > 0) { + // 有新版本更新 + return -1; + } + } + return 0; + } else { + return diff > 0 ? 1 : -1; + } + } + + private static String getStringNum(String str) { + String regEx = "[^0-9]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + return m.replaceAll("").trim(); + } + + public static boolean saveImage(String url) { + return saveImage(url, ".jpg"); + } + + public static boolean saveImage(String url, String ext) { + if (TextUtils.isEmpty(url)) { + return false; + } + String filePath = url; + + File dir = new File(FileAccessor.APPS_ROOT_DIR, "picture"); + if (!dir.exists()) + dir.mkdirs(); + long timeMillis = System.currentTimeMillis(); + File resultFile = new File(dir, "ecexport" + timeMillis+ext); + int result = FileUtils.copyFile( + dir.getAbsolutePath(), + "ecexport" + timeMillis, + ext, + FileUtils.readFlieToByte(filePath, 0, + FileUtils.decodeFileLength(filePath))); + if (result == 0) { + + ExportImgUtil.refreshingMediaScanner(CCPAppManager.getContext(), + "ecexport" + timeMillis + ext); + ToastUtil.showToast("图片已保存至" + dir.getAbsolutePath()); + ContentResolver localContentResolver = CCPAppManager.getContext().getContentResolver(); + ContentValues localContentValues = getImageContentValues(resultFile, System.currentTimeMillis()); + Uri uri = localContentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, localContentValues); + try { + copyFileAfterQ(CCPAppManager.getContext(), localContentResolver, resultFile, uri); + // 最后通知图库更新 + CCPAppManager.getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + ToastUtil.showToast("图片保存失败"); + return true; + } + + public static int getScreenWidth(Activity activity) { + return activity.getWindowManager().getDefaultDisplay().getWidth(); + } + + public static int getScreenHeight(Activity activity) { + return activity.getWindowManager().getDefaultDisplay().getHeight(); + } + + /** + * + * @param context + * @param id + * @return + */ + public static Drawable getDrawables(Context context, int id) { + Drawable drawable = getResources(context).getDrawable(id); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); + + return drawable; + } + + /** + * + * @Title: getResource + * @Description: TODO + * @param context + * @return Resources + */ + public static Resources getResources(Context context) { + return context.getResources(); + } + + public static DisplayImageOptions getChatDisplayImageOptions() { + return mChatDiaplayOptions; + } + + static DisplayImageOptions mChatDiaplayOptions = new DisplayImageOptions.Builder() + .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 + .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中 + .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转) + .imageScaleType(ImageScaleType.EXACTLY)// 设置图片以如何的编码方式显示 + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// + .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位 + .build(); + + public static DisplayImageOptions.Builder getChatDisplayImageOptionsBuilder() { + return new DisplayImageOptions.Builder().cacheInMemory(true)// 设置下载的图片是否缓存在内存中 + .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中 + .considerExifParams(true) // 是否考虑JPEG图像EXIF参数(旋转,翻转) + .imageScaleType(ImageScaleType.EXACTLY)// 设置图片以如何的编码方式显示 + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型// + .resetViewBeforeLoading(true);// 设置图片在下载前是否重置,复位; + } + + private static final long[] SHAKE_PATTERN = { 300L, 200L, 300L, 200L }; + private static final long[] SHAKE_MIC_PATTERN = { 300L, 200L }; + + public static String getLastwords(String srcText, String p) { + try { + String[] array = TextUtils.split(srcText, p); + int index = (array.length - 1 < 0) ? 0 : array.length - 1; + return array[index]; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * msg shake + * + * @param context + * @param isShake + */ + public static void shake(Context context, boolean isShake) { + Vibrator vibrator = (Vibrator) context + .getSystemService(Context.VIBRATOR_SERVICE); + if (vibrator == null) { + return; + } + if (isShake) { + vibrator.vibrate(SHAKE_PATTERN, -1); + return; + } + vibrator.cancel(); + } + + /** + * msg shake + * + * @param context + * @param isShake + */ + public static void shakeControlMic(Context context, boolean isShake) { + Vibrator vibrator = (Vibrator) context + .getSystemService(Context.VIBRATOR_SERVICE); + if (vibrator == null) { + return; + } + if (isShake) { + vibrator.vibrate(SHAKE_MIC_PATTERN, -1); + return; + } + vibrator.cancel(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DensityUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DensityUtil.java new file mode 100644 index 0000000..b2f92ce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DensityUtil.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.view.WindowManager; + +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * Created by Jorstin on 2015/3/18. + */ +public class DensityUtil { + + // 根据屏幕密度转换 + private static float mPixels = 0.0F; + private static float density = -1.0F; + + /** + * + * @param context + * @param pixels + * @return + */ + public static int getDisplayMetrics(Context context, float pixels) { + if (mPixels == 0.0F) + mPixels = context.getResources().getDisplayMetrics().density; + return (int) (0.5F + pixels * mPixels); + } + + + public static int getImageWeidth(Context context , float pixels) { + LogUtil.e("screen width " + context.getResources().getDisplayMetrics().widthPixels); + return context.getResources().getDisplayMetrics().widthPixels - 66 - getDisplayMetrics(context, pixels); + } + + /** + * 像素转化dip + * @param context + * @param pxValue + * @return + */ + public static int px2dip(Context context, float pxValue){ + + final float scale = context.getResources().getDisplayMetrics().density; + + return (int)(pxValue / scale + 0.5f); + + } + + /** + * dip转化像素 + * @param dipValue + * @return + */ + public static int dip2px(float dipValue){ + final float scale = Resources.getSystem().getDisplayMetrics().density; + return (int)(dipValue * scale + 0.5f); + + } + + /** + * @param context + * @param height + * @return + */ + public static int getMetricsDensity(Context context , float height) { + DisplayMetrics localDisplayMetrics = new DisplayMetrics(); + ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay().getMetrics(localDisplayMetrics); + return Math.round(height * localDisplayMetrics.densityDpi / 160.0F); + } + + + public static int fromDPToPix(Context context, int dp) { + return Math.round(getDensity(context) * dp); + } + + /** + * @param context + * @return + */ + public static float getDensity(Context context) { + if (context == null) + context = BaseApplication.getInstance().getApplicationContext(); + if (density < 0.0F) + density = context.getResources().getDisplayMetrics().density; + return density; + } + + public static int round(Context context, int paramInt) { + return Math.round(paramInt / getDensity(context)); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DialNumberMap.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DialNumberMap.java new file mode 100644 index 0000000..ea0c2e6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/DialNumberMap.java @@ -0,0 +1,78 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import java.util.HashMap; + +/** + * com.yuntongxun.ecdemo.common.utils in ECDemo_Android + * Created by Jorstin on 2015/3/21. + */ +public class DialNumberMap { + public static HashMap numberMap = new HashMap(); + static { + numberMap.put('a', 2); + numberMap.put('b', 2); + numberMap.put('c', 2); + numberMap.put('d', 3); + numberMap.put('e', 3); + numberMap.put('f', 3); + numberMap.put('g', 4); + numberMap.put('h', 4); + numberMap.put('i', 4); + numberMap.put('j', 5); + numberMap.put('k', 5); + numberMap.put('l', 5); + numberMap.put('m', 6); + numberMap.put('n', 6); + numberMap.put('o', 6); + numberMap.put('p', 7); + numberMap.put('q', 7); + numberMap.put('r', 7); + numberMap.put('s', 7); + numberMap.put('t', 8); + numberMap.put('u', 8); + numberMap.put('v', 8); + numberMap.put('w', 9); + numberMap.put('x', 9); + numberMap.put('y', 9); + numberMap.put('z', 9); + + numberMap.put('A', 2); + numberMap.put('B', 2); + numberMap.put('C', 2); + numberMap.put('D', 3); + numberMap.put('E', 3); + numberMap.put('F', 3); + numberMap.put('G', 4); + numberMap.put('H', 4); + numberMap.put('I', 4); + numberMap.put('J', 5); + numberMap.put('K', 5); + numberMap.put('L', 5); + numberMap.put('M', 6); + numberMap.put('N', 6); + numberMap.put('O', 6); + numberMap.put('P', 7); + numberMap.put('Q', 7); + numberMap.put('R', 7); + numberMap.put('S', 7); + numberMap.put('T', 8); + numberMap.put('U', 8); + numberMap.put('V', 8); + numberMap.put('W', 9); + numberMap.put('X', 9); + numberMap.put('Y', 9); + numberMap.put('Z', 9); + + + numberMap.put('0', 0); + numberMap.put('1', 1); + numberMap.put('2', 2); + numberMap.put('3', 3); + numberMap.put('4', 4); + numberMap.put('5', 5); + numberMap.put('6', 6); + numberMap.put('7', 7); + numberMap.put('8', 8); + numberMap.put('9', 9); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ECPropertiesUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ECPropertiesUtil.java new file mode 100644 index 0000000..cdca7da --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ECPropertiesUtil.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; + +import java.io.BufferedInputStream; +import java.io.InputStream; +import java.util.Properties; + +/** + * 读取头像合成所需要的坐标体系 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-9 + * @version 4.0 + */ +public class ECPropertiesUtil { + /** + * 根据Key 读取Value + * @param key + * @return + */ + public static String readData(Context mContext, String key, int resId) { + Properties props = new Properties(); + try { + InputStream in = new BufferedInputStream(mContext.getResources().openRawResource(resId)); + props.load(in); + in.close(); + String value = props.getProperty(key); + return value; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/EmoticonUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/EmoticonUtil.java new file mode 100644 index 0000000..0b5dd1c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/EmoticonUtil.java @@ -0,0 +1,423 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.text.Html.ImageGetter; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.TextUtils; +import android.text.style.ImageSpan; + +import java.lang.ref.SoftReference; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconHandler; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji.Emojicon; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji.People; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.CCPEmoji; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class EmoticonUtil { + + private static HashMap hashMap = new HashMap(); + + private final HashMap> emojiCache = new HashMap>(); + + private final HashMap emojiKeyValue = new HashMap(); + + private static EmoticonUtil mEmojiUtils; + + public static EmoticonUtil getInstace() { + if (mEmojiUtils == null) { + mEmojiUtils = new EmoticonUtil(); + } + return mEmojiUtils; + } + + /** + * @param emojiUnicode + * @param c + * @return + */ + public static Integer getEmoticonResId(String emojiUnicode, Context c) { + return c.getResources().getIdentifier("emoji_" + emojiUnicode, + "drawable", c.getPackageName()); + } + + /** + * + * @param emojiName + * @return + */ + public static String formatFaces(String emojiName) { + StringBuffer sb = new StringBuffer(); + sb.append(""); + return sb.toString(); + } + + /** + * @param c + * @return + */ + public static ImageGetter getImageGetter(final Context c) { + return new ImageGetter() { + + public Drawable getDrawable(String source) { + Integer resID=c.getResources().getIdentifier(source,"drawable", c.getPackageName()); + Drawable d = c.getResources().getDrawable(resID); + d.setBounds(0, 0, 24, 24); + return d; + } + }; + } + + public static void initEmoji() { + // HashMap> emoMap = + // EmojiParser.getInstance().getEmoMap(); + /*String[] stringArray = ECApplication.getInstance() + .getApplicationContext().getResources() + .getStringArray(R.array.emoji_code_file); + if (stringArray != null) { + initEmojiIcons(stringArray); + }*/ + + // initEmojiIcons(); + + Emojicon[] data = People.DATA; + if(data == null) { + return ; + } + for(Emojicon emojicon:data) { + if(emojicon.getEmoji() != null) { + CCPEmoji emoji = new CCPEmoji(); + emoji.setEmojiName(emojicon.getEmoji()); + emoji.setEmojiDesc(emojicon.getEmoji()); + int unicode = Character.codePointAt(emojicon.getEmoji(), 0); + if(unicode > 0xff) { + emoji.setId(EmojiconHandler.getEmojiResource(BaseApplication.getInstance().getApplicationContext(), unicode)); + emojis.add(emoji); + } + } + } + } + + private static ArrayList emojis = new ArrayList(); + + private static HashMap emojiMap = new HashMap(); + + public boolean emojiFilter(String filter) { + if(TextUtils.isEmpty(filter)) { + return false; + } + + if("emoji_custom_bg".equals(filter) + || "emoji_del_selector".equals(filter) + || "emoji_icon_selector".equals(filter) + || "emoji_item_selector".equals(filter) + || "emoji_press".equals(filter)) { + return false; + } + + return true; + } + + public ArrayList getEmojiCache() { + + return emojis; + } + + /** + * @return + */ + public static int getEmojiSize() { + return emojis.size(); + } + + /** + * + */ + public void release() { + if (emojiCache != null) { + Iterator> iter = emojiCache.values() + .iterator(); + while (iter.hasNext()) { + SoftReference sr = iter.next(); + if (sr != null && sr.get() != null) { + sr.get().recycle(); + } + } + emojiCache.clear(); + } + + emojis.clear(); + } + + /** + * The emo (local expression file name) into the corresponding Emoji + * expression Unicode coding, each UTF-16 code takes two bytes + * + * @param emo The local expression of file name for example: emoji_e415.png + * @return + */ + public static String convertUnicode(String emo) {// e403 + // 1f615 + emo = emo.substring(emo.indexOf("_") + 1); + if (emo.length() < 6) { + String d = new String(Character.toChars(Integer.parseInt(emo, 16))); + return d; + } + String[] emos = emo.split("_"); + + char[] char0 = Character.toChars(Integer.parseInt(emos[0], 16)); + char[] char1 = Character.toChars(Integer.parseInt(emos[1], 16)); + char[] emoji = new char[char0.length + char1.length]; + for (int i = 0; i < char0.length; i++) { + emoji[i] = char0[i]; + } + for (int i = char0.length; i < emoji.length; i++) { + emoji[i] = char1[i - char0.length]; + } + String s = new String(emoji); + LogUtil.d( emo + "1: " + s); + return s; + } + + /** + * The Emoji expressions into Unicode code + * @param context + * @param str + * @param textSize + * @param isReplaceLine + * @return + */ + public static SpannableString emoji2CharSequence(Context context , String str , int textSize , boolean isReplaceLine) { + + SpannableString object = null; + String key = null; + if(TextUtils.isEmpty(str)) { + return new SpannableString(""); + } + + if(textSize == -1) { + textSize = context.getResources().getDimensionPixelSize(R.dimen.ccp_button_text_size); + } else if (textSize == -2) { + textSize = context.getResources().getDimensionPixelSize(R.dimen.primary_text_size); + } + + key = str + "@" + textSize; + object = hashMap.get(key); + if(object != null) { + return object; + } + String source = str; + if(isReplaceLine) { + source = replaceLinebreak(str).toString(); + } + + source = matchEmojiUnicode(source); + + object = new SpannableString(source); + + boolean containsKeyEmoji = containsKeyEmoji(context, object, textSize); + if(containsKeyEmoji) { + hashMap.put(key, object); + } + + return object; + } + + + /** + * @param str + * @return + */ + private static CharSequence replaceLinebreak(CharSequence str) { + if(TextUtils.isEmpty(str)) { + return str; + } + + if(str.toString().contains("\n")) { + return str.toString().replace("\n", " "); + } + + return str; + } + + public static boolean containsKeyEmoji(Context context, SpannableString spannableString, int textSize) { + + if(TextUtils.isEmpty(spannableString)) { + return false; + } + + boolean isEmoji = false; + char[] charArray = spannableString.toString().toCharArray(); + int i = 0; + + while(i < charArray.length) { + + int emojiId = getEmojiId(charArray[i]) ; + + if(emojiId != -1) { + Drawable drawable = EmoticonUtil.getEmoticonDrawable(context , emojiId); + + if(drawable != null) { + drawable.setBounds(0, 0, (int)(1.3D * textSize), (int)(1.3D * textSize)); + spannableString.setSpan(new ImageSpan(drawable, 0), i, i + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + + isEmoji = true; + } + } + i ++; + } + + return isEmoji; + } + + /** + * @param context + * @param emojiId + * @return + */ + private static Drawable getEmoticonDrawable(Context context, int emojiId) { + + Drawable drawable = null; + if(context == null || emojiId == -1) { + return drawable; + } + + int identifier = context.getResources().getIdentifier( + "emoji_" + emojiId, "drawable", context.getPackageName()); + + if(identifier != 0) { + drawable = context.getResources().getDrawable(identifier); + } + return drawable; + } + + /** + * Replace the not support emoji. + * @param str + * @return + */ + public static String matchEmojiUnicode(String str) { + if(TextUtils.isEmpty(str)) { + return str; + } + char[] charArray = str.toCharArray(); + try { + for(int i = 0 ; i < charArray.length - 1 ; i ++) { + int _index = charArray[i]; + int _index_inc = charArray[i + 1]; + + if(_index == 55356) { + if ((_index_inc < 56324) || (_index_inc > 57320)) { + continue; + } + charArray[i] = '.'; + charArray[(i + 1)] = '.'; + continue; + } + + if((_index != 55357) || (_index_inc < 56343) || (_index_inc > 57024)) { + continue; + } + + charArray[i] = '.'; + charArray[(i + 1)] = '.'; + } + } catch (Exception e) { + } + + return new String(charArray); + } + + /** + * @param charStr + * @return + */ + private static int getEmojiId(char charStr) { + int i = -1; + if ((charStr < 57345) || (charStr > 58679)) { + return i; + } + if ((charStr >= 57345) && (charStr <= 57434)) { + i = charStr - 57345; + } else if ((charStr >= 57601) && (charStr <= 57690)) { + i = charStr + 'Z' - 57601; + } else if ((charStr >= 57857) && (charStr <= 57939)) { + i = charStr + '´' - 57857; + } else if ((charStr >= 58113) && (charStr <= 58189)) { + i = charStr + 'ć' - 58113; + } else if ((charStr >= 58369) && (charStr <= 58444)) { + i = charStr + 'Ŕ' - 58369; + } else if ((charStr >= 58625) && (charStr <= 58679)) { + i = charStr + 'Ơ' - 58625; + } + return i; + } + + public static void main(String[] args) { + String convertUnicode = convertUnicode("e415"); + char[] charArray = convertUnicode.toCharArray(); + int emojiId = getEmojiId(charArray[0]); + System.err.println(emojiId); + } + + + /** + * + */ + public static SpannableString getTextFormat(Context context , String format , int paddingSize) { + if(TextUtils.isEmpty(format)) { + return new SpannableString(""); + } + String strValue = replaceLinebreak(format).toString(); + switch (paddingSize) { + case -1: + paddingSize = context.getResources().getDimensionPixelSize(R.dimen.ccp_button_text_size); + break; + case -2: + paddingSize = context.getResources().getDimensionPixelSize(R.dimen.primary_text_size); + break; + default: + break; + } + String key = strValue + "@" + paddingSize; + String source = matchEmojiUnicode(strValue); + SpannableString object = hashMap.get(key); + if(object == null) { + object = new SpannableString(source); + } + boolean containsKeyEmoji = containsKeyEmoji(context, object, paddingSize); + if(containsKeyEmoji) { + hashMap.put(key, object); + } + return object; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ExportImgUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ExportImgUtil.java new file mode 100644 index 0000000..4a48dd8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ExportImgUtil.java @@ -0,0 +1,50 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.provider.MediaStore; +import android.text.TextUtils; + +import java.io.File; +import java.io.FileNotFoundException; + +/** + * com.yuntongxun.ecdemo.common.utils in ECDemo_Android Created by Jorstin on + * 2015/6/6. + */ +public class ExportImgUtil { + + private static final String TAG = "ECSDK_Demo.ExportImgUtil"; + + public static void refreshingMediaScanner(Context context, String pathName) { + if (TextUtils.isEmpty(pathName)) { + return; + } + + File dir = new File(FileAccessor.APPS_ROOT_DIR + "/picture", pathName); + // 其次把文件插入到系统图库 + try { + MediaStore.Images.Media.insertImage(context.getContentResolver(), + dir.getAbsolutePath(), pathName, null); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + Uri uri = Uri.fromFile(dir); + Intent action = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri); + context.sendBroadcast(action); + + } + + private static Uri exportToGallery(Context context, String filename) { + // Save the name and description of a video in a ContentValues map. + final ContentValues values = new ContentValues(2); + values.put(MediaStore.Video.Media.MIME_TYPE, "image/jpeg"); + values.put(MediaStore.Video.Media.DATA, filename); + // Add a new record (identified by uri) + final Uri uri = context.getContentResolver().insert( + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + return uri; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileAccessor.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileAccessor.java new file mode 100644 index 0000000..e1a4395 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileAccessor.java @@ -0,0 +1,370 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.content.SharedPreferences; +import android.os.Environment; +import android.text.TextUtils; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * 文件操作工具类 + * Created by Jorstin on 2015/3/17. + */ +public class FileAccessor { + + + public static final String TAG = FileAccessor.class.getName(); + public static String EXTERNAL_STOREPATH = getExternalStorePath(); + public static final String APPS_ROOT_DIR = UIUtils.getContext().getExternalFilesDir("").getAbsolutePath() + + "/gdxzExpert"; +// public static final String APPS_ROOT_DIR = getExternalStorePath() + "/gdxzExpert"; + public static final String EXPORT_DIR = getExternalStorePath() + "/gdxzExpert/gdxzExpert_IM"; + public static final String CAMERA_PATH = getExternalStorePath() + "/DCIM/gdxzExpert"; + public static final String TACK_PIC_PATH = getExternalStorePath()+ "/gdxzExpert/.tempchat"; + public static final String IMESSAGE_VOICE = getExternalStorePath() + "/gdxzExpert/voice"; +// public static final String IMESSAGE_IMAGE = getExternalStorePath() + "/gdxzExpert/image"; + public static final String IMESSAGE_AVATAR = getExternalStorePath() + "/gdxzExpert/avatar"; + public static final String IMESSAGE_FILE = getExternalStorePath() + "/gdxzExpert/file"; + public static final String IMESSAGE_RICH_TEXT = getExternalStorePath() + "/ECSDK_Demo/richtext"; + public static final String LOCAL_PATH = APPS_ROOT_DIR + "/config.txt"; + public static final String IMESSAGE_IMAGE = UIUtils.getContext().getExternalFilesDir("").getAbsolutePath() + + "/gdxzExpert/image";//适配android11 + + /** + * 初始化应用文件夹目录 + */ + public static void initFileAccess() { + File rootDir = new File(APPS_ROOT_DIR); + if (!rootDir.exists()) { + rootDir.mkdir(); + } + + File imessageDir = new File(IMESSAGE_VOICE); + if (!imessageDir.exists()) { + imessageDir.mkdir(); + } + + File imageDir = new File(IMESSAGE_IMAGE); + if (!imageDir.exists()) { + imageDir.mkdir(); + } + + File fileDir = new File(IMESSAGE_FILE); + if (!fileDir.exists()) { + fileDir.mkdir(); + } + File avatarDir = new File(IMESSAGE_AVATAR); + if (!avatarDir.exists()) { + avatarDir.mkdir(); + } + } + + public static String getAppKey() { + if (isExistExternalStore()) { + String content = readContentByFile(LOCAL_PATH); + if (content != null) { + try { + String result = content.split(",")[0]; + if(result != null && result.contains("appkey=")) { + return result.replace("appkey=" , ""); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return getConfig(ECPreferenceSettings.SETTINGS_APPKEY); + } + + public static String getAppToken() { + if (isExistExternalStore()) { + String content = readContentByFile(LOCAL_PATH); + if (content != null) { + try { + String result = content.split(",")[1]; + if(result != null && result.contains("apptoken=")) { + return result.replace("apptoken=" , ""); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return getConfig(ECPreferenceSettings.SETTINGS_TOKEN); + } + + private static String getConfig(ECPreferenceSettings settings) { + SharedPreferences sharedPreferences = ECPreferences.getSharedPreferences(); + String value = sharedPreferences.getString(settings.getId(), (String) settings.getDefaultValue()); + return value; + } + + public static String readContentByFile(String path) { + BufferedReader reader = null; + String line = null; + try { + File file = new File(path); + if (file.exists()) { + StringBuilder sb = new StringBuilder(); + reader = new BufferedReader(new FileReader(file)); + while ((line = reader.readLine()) != null) { + sb.append(line.trim()); + } + return sb.toString().trim(); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (reader != null) { + reader.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + return null; + } + + + /** + * 获取语音文件存储目录 + * @return + */ + public static File getVoicePathName() { + if (!isExistExternalStore()) { + ToastUtil.showMessage(R.string.media_ejected); + return null; + } + + File directory = new File(IMESSAGE_VOICE); + if (!directory.exists() && !directory.mkdirs()) { + ToastUtil.showMessage("Path to file could not be created"); + return null; + } + + return directory; + } + + /** + * 头像 + * @return + */ + public static File getAvatarPathName() { + if (!isExistExternalStore()) { + ToastUtil.showMessage(R.string.media_ejected); + return null; + } + + File directory = new File(IMESSAGE_AVATAR); + if (!directory.exists() && !directory.mkdirs()) { + ToastUtil.showMessage("Path to file could not be created"); + return null; + } + + return directory; + } + + + + /** + * 获取文件目录 + * @return + */ + public static File getFilePathName() { + if (!isExistExternalStore()) { + ToastUtil.showMessage(R.string.media_ejected); + return null; + } + + File directory = new File(IMESSAGE_FILE); + if (!directory.exists() && !directory.mkdirs()) { + ToastUtil.showMessage("Path to file could not be created"); + return null; + } + + return directory; + } + + /** + * 返回图片存放目录 + * @return + */ + public static File getImagePathName() { + if (!isExistExternalStore()) { + ToastUtil.showMessage(R.string.media_ejected); + return null; + } + + File directory = new File(IMESSAGE_IMAGE); + if (!directory.exists() && !directory.mkdirs()) { + ToastUtil.showMessage("Path to file could not be created"); + return null; + } + + return directory; + } + + /** + * 获取文件名 + * @param pathName + * @return + */ + public static String getFileName(String pathName) { + + int start = pathName.lastIndexOf("/"); + if (start != -1) { + return pathName.substring(start + 1, pathName.length()); + } + return pathName; + + } + + /** + * 外置存储卡的路径 + * @return + */ + public static String getExternalStorePath() { + if (isExistExternalStore()) { + return Environment.getExternalStorageDirectory().getAbsolutePath(); + } + return null; + } + + + public static String getFilePath(Context context,String dir) { + String directoryPath=""; + if (isExistExternalStore()) {//判断外部存储是否可用 + directoryPath =context.getExternalFilesDir(dir).getAbsolutePath(); + }else{//没外部存储就使用内部存储 + directoryPath=context.getFilesDir()+dir; + } + File file = new File(directoryPath); + if(!file.exists()){//判断文件目录是否存在 + file.mkdirs(); + } + return directoryPath; + } + + /** + * 是否有外存卡 + * @return + */ + public static boolean isExistExternalStore() { + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + return true; + } else { + return false; + } + } + + /** + * /data/data/com.ECSDK_Demo.bluetooth/files + * + * @return + */ + public static String getAppContextPath() { + return BaseApplication.getInstance().getFilesDir().getAbsolutePath(); + } + + /** + * + * @param fileName + * @return + */ + public static String getFileUrlByFileName(String fileName) { + return FileAccessor.IMESSAGE_IMAGE + File.separator + FileAccessor.getSecondLevelDirectory(fileName)+ File.separator + fileName; + } + + /** + * + * @param filePaths + */ + public static void delFiles(ArrayList filePaths) { + for(String url : filePaths) { + if(!TextUtils.isEmpty(url)) + delFile(url); + } + } + + + public static boolean delFile(String filePath){ + File file = new File(filePath); + if (file == null || !file.exists()) { + return true; + } + + return file.delete(); + } + + /** + * + * @param fileName + * @return + */ + public static String getSecondLevelDirectory(String fileName) { + if(TextUtils.isEmpty(fileName) || fileName.length() < 4) { + return null; + } + + String sub1 = fileName.substring(0, 2); + String sub2 = fileName.substring(2, 4); + return sub1 + File.separator + sub2; + } + + /** + * + * @param root + * @param srcName + * @param destName + */ + public static void renameTo(String root , String srcName , String destName) { + if(TextUtils.isEmpty(root) || TextUtils.isEmpty(srcName) || TextUtils.isEmpty(destName)){ + return; + } + + File srcFile = new File(root + srcName); + File newPath = new File(root + destName); + + if(srcFile.exists()) { + srcFile.renameTo(newPath); + } + } + + public static File getTackPicFilePath() { + File localFile = new File(getExternalStorePath()+ "/gdxzExpert/.tempchat" , "temp.jpg"); + if ((!localFile.getParentFile().exists()) + && (!localFile.getParentFile().mkdirs())) { + LogUtil.e("hhe", "SD卡不存在"); + localFile = null; + } + return localFile; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileUtils.java new file mode 100644 index 0000000..b239a43 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/FileUtils.java @@ -0,0 +1,469 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import static android.os.Environment.DIRECTORY_PICTURES; +import static anet.channel.util.Utils.getAppContext; + +import android.annotation.SuppressLint; +import android.content.ContentValues; +import android.content.Context; +import android.graphics.Bitmap; +import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.text.TextUtils; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.RandomAccessFile; +import java.text.SimpleDateFormat; +import java.util.Date; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 文件工具类 + * Created by Jorstin on 2015/3/18. + */ +public class FileUtils { + + /** + * + * @param root + * @param fileName + * @return + */ + public static String getMD5FileDir(String root , String fileName) { + // FileAccessor.IMESSAGE_IMAGE + File.separator + FileAccessor.getSecondLevelDirectory(fileNameMD5)+ File.separator; + if(TextUtils.isEmpty(root)) { + return null; + } + File file = new File(root); + if(!file.exists()) { + file.mkdirs(); + } + + File fullPath = new File(file , FileAccessor.getSecondLevelDirectory(fileName)); + if(!fullPath.exists()) { + fullPath.mkdirs(); + } + return fullPath.getAbsolutePath(); + } + @SuppressLint("NewApi") + public static Bitmap createVideoThumbnail(String filePath) { + Bitmap bitmap = null; + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + try { + // retriever.setMode(MediaMetadataRetriever.); + retriever.setDataSource(filePath); + + bitmap = retriever.getFrameAtTime(1000); + + } catch (Exception ex) { + + } finally { + try { + retriever.release(); + + } catch (Exception ex) { + } + + } + return bitmap; + + } + + /** + * 转换成单位 + * @param length + * @return + */ + public static String formatFileLength(long length) { + if (length >> 30 > 0L) { + float sizeGb = Math.round(10.0F * (float) length / 1.073742E+009F) / 10.0F; + return sizeGb + " GB"; + } + if (length >> 20 > 0L) { + return formatSizeMb(length); + } + if (length >> 9 > 0L) { + float sizekb = Math.round(10.0F * (float) length / 1024.0F) / 10.0F; + return sizekb + " KB"; + } + return length + " B"; + } + + /** + * 转换成Mb单位 + * @param length + * @return + */ + public static String formatSizeMb(long length) { + float mbSize = Math.round(10.0F * (float) length / 1048576.0F) / 10.0F; + return mbSize + " MB"; + } + + /** + * 检查SDCARD是否可写 + * @return + */ + public static boolean checkExternalStorageCanWrite() { + try { + boolean mouted = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); + if(mouted) { + boolean canWrite = new File(Environment.getExternalStorageDirectory().getAbsolutePath()).canWrite(); + if(canWrite) { + return true; + } + } + } catch (Exception e) { + } + return false; + } + + + + + /** + * 返回文件的图标 + * @param fileName + * @return + */ + public static int getFileIcon(String fileName) { + String fileType = fileName.toLowerCase(); + if(isDocument(fileType)) { + return R.drawable.file_attach_doc; + } + if(isPic(fileType)) { + return R.drawable.file_attach_img; + } + + if(isCompresseFile(fileType)) { + return R.drawable.file_attach_rar; + } + if(isTextFile(fileType)) { + return R.drawable.file_attach_txt; + } + if(isPdf(fileType)) { + return R.drawable.file_attach_pdf; + } + + if(isPPt(fileType)) { + return R.drawable.file_attach_ppt; + } + + if(isXls(fileType)) { + return R.drawable.file_attach_xls; + } + return R.drawable.file_attach_ohter; + } + + /** + * 是否图片 + * @param fileName + * @return + */ + public static boolean isPic(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".bmp") + || lowerCase.endsWith(".png") + || lowerCase.endsWith(".jpg") + || lowerCase.endsWith(".jpeg") + || lowerCase .endsWith(".gif"); + } + + /** + * 是否压缩文件 + * @param fileName + * @return + */ + public static boolean isCompresseFile(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".rar") + || lowerCase.endsWith(".zip") + || lowerCase.endsWith(".7z") + || lowerCase.endsWith("tar") + || lowerCase.endsWith(".iso"); + } + + /** + * 是否音频 + * @param fileName + * @return + */ + public static boolean isAudio(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".mp3") + || lowerCase.endsWith(".wma") + || lowerCase.endsWith(".mp4") + || lowerCase.endsWith(".rm"); + } + + /** + * 是否文档 + * @param fileName + * @return + */ + public static boolean isDocument(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".doc") + || lowerCase.endsWith(".docx") + || lowerCase .endsWith("wps"); + } + + /** + * 是否Pdf + * @param fileName + * @return + */ + public static boolean isPdf(String fileName) { + return DemoUtils.nullAsNil(fileName).toLowerCase().endsWith(".pdf"); + } + + /** + * 是否Excel + * @param fileName + * @return + */ + public static boolean isXls(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".xls") + || lowerCase.endsWith(".xlsx"); + } + + /** + * 是否文本文档 + * @param fileName + * @return + */ + public static boolean isTextFile(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".txt") + || lowerCase .endsWith(".rtf"); + } + + /** + * 是否Ppt + * @param fileName + * @return + */ + public static boolean isPPt(String fileName) { + String lowerCase = DemoUtils.nullAsNil(fileName).toLowerCase(); + return lowerCase.endsWith(".ppt") || lowerCase .endsWith(".pptx"); + } + + /** + * decode file length + * @param filePath + * @return + */ + public static int decodeFileLength(String filePath) { + if(TextUtils.isEmpty(filePath)) { + return 0; + } + File file = new File(filePath); + if(!file.exists()) { + return 0; + } + return (int)file.length(); + } + + /** + * Gets the extension of a file name, like ".png" or ".jpg". + * + * @param uri + * @return Extension including the dot("."); "" if there is no extension; + * null if uri was null. + */ + public static String getExtension(String uri) { + if (uri == null) { + return null; + } + + int dot = uri.lastIndexOf("."); + if (dot >= 0) { + return uri.substring(dot); + } else { + // No extension. + return ""; + } + } + + /** + * + * @param filePath + * @return + */ + public static boolean checkFile(String filePath) { + if(TextUtils.isEmpty(filePath) || !(new File(filePath).exists())) { + return false; + } + return true; + } + + /** + * + * @param filePath + * @param seek + * @param length + * @return + */ + public static byte[] readFlieToByte (String filePath , int seek , int length) { + if(TextUtils.isEmpty(filePath)) { + return null; + } + File file = new File(filePath); + if(!file.exists()) { + return null; + } + if(length == -1) { + length = (int)file.length(); + } + + try { + RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r"); + byte[] bs = new byte[length]; + randomAccessFile.seek(seek); + randomAccessFile.readFully(bs); + randomAccessFile.close(); + return bs; + } catch (Exception e) { + e.printStackTrace(); + LogUtil.e(LogUtil.getLogUtilsTag(FileUtils.class), "readFromFile : errMsg = " + e.getMessage()); + return null; + } + } + + public static int copyFile(File src , String filename , byte[] buffer) { + if(!src.exists()) { + return -1; + } + return copyFile(src.getAbsolutePath() , filename , buffer); + } + + + /** + * 拷贝文件 + * @param fileDir + * @param fileName + * @param buffer + * @return + */ + public static int copyFile(String fileDir ,String fileName , byte[] buffer) { + if(buffer == null) { + return -2; + } + + try { + File file = new File(fileDir); + if(!file.exists()) { + file.mkdirs(); + } + File resultFile = new File(file, fileName); + if(!resultFile.exists()) { + resultFile.createNewFile(); + } + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( + new FileOutputStream(resultFile, true)); + bufferedOutputStream.write(buffer); + bufferedOutputStream.flush(); + bufferedOutputStream.close(); + + return 0; + + } catch (Exception e) { + } + return -1; + } + + + /** + * 根据文件名和后缀 拷贝文件 + * @param fileDir + * @param fileName + * @param ext + * @param buffer + * @return + */ + public static int copyFile(String fileDir ,String fileName , String ext , byte[] buffer) { + return copyFile(fileDir, fileName + ext, buffer); + } + + + /** + * 根据后缀名判断是否是图片文件 + * + * @param type + * @return 是否是图片结果true or false + */ + public static boolean isImage(String type) { + if (type != null + && (type.equals("jpg") || type.equals("gif") + || type.equals("png") || type.equals("jpeg") + || type.equals("bmp") || type.equals("wbmp") + || type.equals("ico") || type.equals("jpe"))) { + return true; + } + return false; + } + + public static String getFileExt(String fileName){ + + if(TextUtils.isEmpty(fileName)){ + + return ""; + } + return fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()); + } + + + public static File getAppRootDirPath() { + return getAppContext().getExternalFilesDir(null).getAbsoluteFile(); + } + public static Uri uri; + public static File createImageFile(Context context, boolean isCrop) { + try { + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); + String fileName = ""; + if (isCrop) { + fileName = "IMG_"+timeStamp+"_CROP.jpg"; + } else { + fileName = "IMG_"+timeStamp+".jpg"; + } + File rootFile = new File(getAppRootDirPath() + File.separator + "capture"); + if (!rootFile.exists()) { + rootFile.mkdirs(); + } + File imgFile; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + imgFile = new File(Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES) + File.separator + fileName); + // 通过 MediaStore API 插入file 为了拿到系统裁剪要保存到的uri(因为App没有权限不能访问公共存储空间,需要通过 MediaStore API来操作) + ContentValues values = new ContentValues(); + values.put(MediaStore.Images.Media.DATA, imgFile.getAbsolutePath()); + values.put(MediaStore.Images.Media.DISPLAY_NAME, fileName); + values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); + uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + }else { + imgFile = new File(rootFile.getAbsolutePath() + File.separator + fileName); + } + return imgFile; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MediaPlayTools.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MediaPlayTools.java new file mode 100644 index 0000000..e681644 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MediaPlayTools.java @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.media.MediaPlayer.OnCompletionListener; +import android.text.TextUtils; + +import java.io.File; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * + *

Title: MediaPlayTools.java

+ *

Description: + * case R.id.start: + File file = new File(Environment.getExternalStorageDirectory(),"voiceDemo/fn_2013100916_99e9ba8bf0924f269e4e25ab1df6c726_1142.amr"); + MediaPlayTools.getInstance().playVoice(file.getAbsolutePath(), false); + break; + case R.id.puse: + + MediaPlayTools.getInstance().pause(); + break; + case R.id.resume: + + MediaPlayTools.getInstance().resume(); + break; + case R.id.stop: + + MediaPlayTools.getInstance().stop(); + break;

+ *

Copyright: Copyright (c) 2012

+ *

Company: http://www.cloopen.com

+ * @author Jorstin Chan + * @date 2013-10-16 + * @version 3.5 + */ +public class MediaPlayTools { + + private static final String TAG = "MediaPlayTools"; + + private static MediaPlayTools mInstance = null; + + /** + * The definition of the state of play + * Play error + */ + private static final int STATUS_ERROR = -1; + + /** + * Stop playing + */ + private static final int STATUS_STOP = 0; + + /** + * Voice playing + */ + private static final int STATUS_PLAYING = 1; + + /** + * Pause playback + */ + private static final int STATUS_PAUSE = 2; + + private MediaPlayer mediaPlayer = new MediaPlayer(); + private OnVoicePlayCompletionListener mListener; + + /** + * The local path voice file + */ + private String urlPath = ""; + + private int status = 0; + + public MediaPlayTools() { + + setOnCompletionListener(); + setOnErrorListener(); + } + + synchronized public static MediaPlayTools getInstance() { + if (null == mInstance) { + mInstance = new MediaPlayTools(); + } + return mInstance; + } + + /** + *

Title: play

+ *

Description: Speech interface, you can set the start position to play, + * and to select the output stream (Earpiece or Speaker)

+ * @param isEarpiece + * @param seek + */ + private void play(boolean isEarpiece , int seek) { + + int streamType = AudioManager.STREAM_MUSIC; + if(TextUtils.isEmpty(urlPath) || !new File(urlPath).exists()) { + return ; + } + + if(isEarpiece) { + streamType = AudioManager.STREAM_VOICE_CALL; + } + + if(mediaPlayer == null ) { + mediaPlayer = new MediaPlayer(); + setOnCompletionListener(); + setOnErrorListener(); + } + try { + mediaPlayer.reset(); + mediaPlayer.setAudioStreamType(streamType); + mediaPlayer.setDataSource(urlPath); + mediaPlayer.prepare(); + if(seek > 0) { + mediaPlayer.seekTo(seek); + } + mediaPlayer.start(); + } catch (Exception e) { + e.printStackTrace(); + LogUtil.v(TAG, "[MediaPlayTools - play ] playImp : fail, exception = " + e.getMessage()); + } + } + + /** + * + *

Title: play

+ *

Description:

+ * @param urlPath + * @param isEarpiece + * @param seek + * @return + * + * @see #play(boolean, int) + */ + private boolean play(String urlPath , boolean isEarpiece , int seek) { + + if(status != STATUS_STOP) { + LogUtil.e(TAG, "[MediaPlayTools - play ] startPlay error status:" + status); + return false; + } + + this.urlPath = urlPath; + + boolean result = false; + try { + play(isEarpiece, seek); + this.status = STATUS_PLAYING; + result = true; + } catch (Exception e) { + e.printStackTrace(); + + try { + play(true, seek); + result = true; + } catch (Exception e1) { + e1.printStackTrace(); + result = false; + LogUtil.v(TAG, "[MediaPlayTools - play ] startPlay File[" + this.urlPath + "] failed"); + } + + } + + return result; + + } + + /** + * Using the speaker model play audio files + *

Title: playVoice

+ *

Description:

+ * @param urlPath + * @param isEarpiece + * @return + */ + public boolean playVoice(String urlPath , boolean isEarpiece) { + + return play(urlPath, isEarpiece, 0); + } + + /** + * + *

Title: resume

+ *

Description: Recovery pause language file, from the last to suspend the position to start playing

+ * @return + */ + public boolean resume() { + + if( this.status != STATUS_PAUSE) { + + LogUtil.e(TAG, "[MediaPlayTools - resume ] resume not STATUS_PAUSE error status:" + this.status); + return false; + } + + boolean result = false; + + try { + mediaPlayer.start(); + this.status = STATUS_PLAYING ; + result = true; + } catch (IllegalStateException e) { + e.printStackTrace(); + LogUtil.e(TAG, "[MediaPlayTools - resume ] resume File[" + this.urlPath + "] ErrMsg[" + e.getStackTrace() + "]"); + this.status = STATUS_ERROR; + result = false; + } + + return result; + + } + + /** + * + *

Title: stop

+ *

Description: Stop playing audio files + * If you need to play, you will need to call + * @see MediaPlayTools + * @see MediaPlayTools#playVoice(String, boolean) + * @return + */ + public boolean stop () { + + if(status != STATUS_PLAYING && status != STATUS_PAUSE) { + + LogUtil.e(TAG, "[MediaPlayTools - stop] stop not STATUS_PLAYING or STATUS_PAUSE error status:" + this.status); + return false; + } + + boolean result = false; + try { + if(mediaPlayer != null) { + this.mediaPlayer.stop(); + this.mediaPlayer.release(); + this.mediaPlayer = null; + } + this.status = STATUS_STOP; + result = true; + } catch (IllegalStateException e) { + e.printStackTrace(); + LogUtil.v(TAG, "[MediaPlayTools - stop]stop File[" + this.urlPath + "] ErrMsg[" + e.getStackTrace() + "]"); + this.status = STATUS_ERROR; + result = false; + + } + + return result; + } + + + private boolean calling = false; + + + /** + * + *

Title: setSpeakerOn

+ *

Description: Set the output device mode (the Earpiece or Speaker) to play voice + *

+ * @param speakerOn + */ + public void setSpeakerOn(boolean speakerOn) { + + LogUtil.v(TAG, "[MediaPlayTools - setSpeakerOn] setSpeakerOn=" + speakerOn); + + if(mediaPlayer == null ) { + mediaPlayer = new MediaPlayer(); + } + + if(calling) { + // 这里需要判断当前的状态是否是正在系统电话振铃或者接听中 + + } else { + int currentPosition = mediaPlayer.getCurrentPosition(); + + stop(); + + setOnCompletionListener(); + setOnErrorListener(); + + play(urlPath, !speakerOn, currentPosition); + } + } + + + public boolean pause () { + if(this.status != STATUS_PLAYING) { + LogUtil.e(TAG, "[MediaPlayTools - pause]pause not STATUS_PLAYING error status:" + this.status); + return false; + } + + boolean result = false; + + try { + + mediaPlayer.pause(); + this.status = STATUS_PAUSE; + result = true; + + } catch (Exception e) { + e.printStackTrace(); + LogUtil.v(TAG, "[MediaPlayTools - pause] pause File[" + this.urlPath + "] ErrMsg[" + e.getStackTrace() + "]"); + result = false; + status = STATUS_ERROR; + } + + return result; + } + + + public int getStatus() { + return status; + } + + public boolean isPlaying () { + + if(this.status == STATUS_PLAYING) { + return true; + } + + return false; + } + + /** + * + *

Title: setOnCompletionListener

+ *

Description: Set the playback end of speech monitoring, + * again will play the status is set to an initial state

+ * @see MediaPlayTools#status + * {@link MediaPlayTools#STATUS_ERROR} + * {@link MediaPlayTools#STATUS_PLAYING} + * {@link MediaPlayTools#STATUS_PAUSE} + * {@link MediaPlayTools#STATUS_STOP} + */ + private void setOnCompletionListener() { + + // + mediaPlayer.setOnCompletionListener(new OnCompletionListener() { + + @Override + public void onCompletion(MediaPlayer mp) { + LogUtil.d(TAG, "[MediaPlayTools - setOnCompletionListener] Play file[" + urlPath+ "] com"); + status = STATUS_STOP; + + if(mListener != null) { + mListener.OnVoicePlayCompletion(); + } + } + }); + } + + /** + * + *

Title: setOnErrorListener

+ *

Description: Set the language player initialization error correction

+ */ + private void setOnErrorListener() { + + // + mediaPlayer.setOnErrorListener(null); + } + + public void setOnVoicePlayCompletionListener(OnVoicePlayCompletionListener l) { + mListener = l; + } + + public interface OnVoicePlayCompletionListener { + void OnVoicePlayCompletion(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypeParser.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypeParser.java new file mode 100644 index 0000000..36ae5b0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypeParser.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2008 OpenIntents.org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; +import android.content.res.XmlResourceParser; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlPullParserFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +public class MimeTypeParser { + + + public static final String TAG_MIMETYPES = "MimeTypes"; + public static final String TAG_TYPE = "type"; + + public static final String ATTR_EXTENSION = "extension"; + public static final String ATTR_MIMETYPE = "mimetype"; + public static final String ATTR_ICON = "icon"; + + private XmlPullParser mXpp; + private MimeTypes mMimeTypes; + private Resources resources; + private String packagename; + + public MimeTypeParser(Context ctx, String packagename) throws NameNotFoundException{ + this.packagename = packagename; + resources = ctx.getPackageManager().getResourcesForApplication(packagename); + } + + public MimeTypes fromXml(InputStream in) + throws XmlPullParserException, IOException { + XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); + + mXpp = factory.newPullParser(); + mXpp.setInput(new InputStreamReader(in)); + + return parse(); + } + + public MimeTypes fromXmlResource(XmlResourceParser in) + throws XmlPullParserException, IOException { + mXpp = in; + + return parse(); + } + + public MimeTypes parse() + throws XmlPullParserException, IOException { + + mMimeTypes = new MimeTypes(); + + int eventType = mXpp.getEventType(); + + while (eventType != XmlPullParser.END_DOCUMENT) { + String tag = mXpp.getName(); + + if (eventType == XmlPullParser.START_TAG) { + if (tag.equals(TAG_MIMETYPES)) { + + } else if (tag.equals(TAG_TYPE)) { + addMimeTypeStart(); + } + } else if (eventType == XmlPullParser.END_TAG) { + if (tag.equals(TAG_MIMETYPES)) { + + } + } + + eventType = mXpp.next(); + } + + return mMimeTypes; + } + + private void addMimeTypeStart() { + String extension = mXpp.getAttributeValue(null, ATTR_EXTENSION); + String mimetype = mXpp.getAttributeValue(null, ATTR_MIMETYPE); + String icon = mXpp.getAttributeValue(null, ATTR_ICON); + + if(icon != null){ + int id = resources.getIdentifier(icon.substring(1) /* to cut the @ */, null, packagename); + if(id > 0){ + mMimeTypes.put(extension, mimetype, id); + return; + } + } + + mMimeTypes.put(extension, mimetype); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypes.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypes.java new file mode 100644 index 0000000..4b9a524 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypes.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2008 OpenIntents.org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.webkit.MimeTypeMap; + +import java.util.HashMap; +import java.util.Map; + +public class MimeTypes { + + private Map mMimeTypes; + private Map mIcons; + + public MimeTypes() { + mMimeTypes = new HashMap(); + mIcons = new HashMap(); + } + + /* I think the type and extension names are switched (type contains .png, extension contains x/y), + * but maybe it's on purpouse, so I won't change it. + */ + public void put(String type, String extension, int icon){ + put(type, extension); + mIcons.put(extension, icon); + } + + public void put(String type, String extension) { + // Convert extensions to lower case letters for easier comparison + extension = extension.toLowerCase(); + + mMimeTypes.put(type, extension); + } + + public String getMimeType(String filename) { + + String extension = FileUtils.getExtension(filename); + + // Let's check the official map first. Webkit has a nice extension-to-MIME map. + // Be sure to remove the first character from the extension, which is the "." character. + if (extension.length() > 0) { + String webkitMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.substring(1)); + + if (webkitMimeType != null) { + // Found one. Let's take it! + return webkitMimeType; + } + } + + // Convert extensions to lower case letters for easier comparison + extension = extension.toLowerCase(); + + String mimetype = mMimeTypes.get(extension); + + if(mimetype==null) mimetype = "*/*"; + + return mimetype; + } + + public int getIcon(String mimetype){ + Integer iconResId = mIcons.get(mimetype); + if(iconResId == null) + return 0; // Invalid identifier + return iconResId; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypesTools.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypesTools.java new file mode 100644 index 0000000..96f41ce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/MimeTypesTools.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.res.XmlResourceParser; +import android.text.TextUtils; + + + +import org.xmlpull.v1.XmlPullParserException; + +import java.io.IOException; + +import cn.shangyu.gdxzExpert.R; + + +/** + *

Title: MimeTypesTools.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class MimeTypesTools { + + private static boolean hasLoadMimeType = false; + + public static String getMimeType(Context context, String fileName) { + if (!TextUtils.isEmpty(fileName)) { + fileName = fileName.toLowerCase(); + + MimeTypes mimeTypes = getMimeTypes(context); + String extension = FileUtils.getExtension(fileName); +// return mimeTypes.getMimeType(extension); + } + + return null; + } + + private static MimeTypes getMimeTypes(Context context) { + return loadMimeTypes(context); + } + + private static MimeTypes loadMimeTypes(Context context) { + MimeTypeParser parser = null; + XmlResourceParser xmlResourceParser = null; + if (!hasLoadMimeType) { + try { + parser = new MimeTypeParser(context, context.getPackageName()); + xmlResourceParser = context.getResources().getXml(R.xml.mimetypes); + + return parser.fromXmlResource(xmlResourceParser); + } catch (XmlPullParserException e) { + e.printStackTrace(); + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + hasLoadMimeType = true; + } + + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/NotificationUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/NotificationUtil.java new file mode 100644 index 0000000..512e2be --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/NotificationUtil.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.annotation.TargetApi; +import android.app.Notification; +import android.app.PendingIntent; +import android.content.Context; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Build.VERSION_CODES; +import androidx.core.app.NotificationCompat; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + *

Title: NotificationUtil.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class NotificationUtil { + + public static final String TAG = LogUtil.getLogUtilsTag(Notification.class); + + @TargetApi(VERSION_CODES.HONEYCOMB) + public static Notification buildNotification(Context context, int icon, + int defaults, boolean onlyVibrate, String tickerText, + String contentTitle, String contentText, Bitmap largeIcon, + PendingIntent intent) { + + if(Build.VERSION.SDK_INT > VERSION_CODES.HONEYCOMB) { + Notification.Builder builder = new Notification.Builder(context); + builder.setLights(-16711936, 300, 1000) + .setSmallIcon(icon) + .setTicker(tickerText) + .setContentTitle(contentTitle) + .setContentText(contentText) + .setContentIntent(intent); + + if(onlyVibrate) { + defaults &= Notification.DEFAULT_VIBRATE; + } + + LogUtil.d(TAG, "defaults flag " + defaults); + builder.setDefaults(defaults); + if(largeIcon != null) { + builder.setLargeIcon(largeIcon); + } + return builder.getNotification(); + } + + NotificationCompat.Builder builder = new NotificationCompat.Builder(context); + Notification notification = builder.build(); + builder.setContentIntent(intent); +// Notification notification = new Notification(); + notification.ledARGB = -16711936; + notification.ledOnMS = 300; + notification.ledOffMS = 1000; + notification.flags = (Notification.FLAG_SHOW_LIGHTS | notification.flags); + notification.icon = icon; + notification.tickerText = tickerText; + LogUtil.d(TAG, "defaults flag " + defaults); + if(onlyVibrate) { + defaults &= Notification.DEFAULT_VIBRATE; + } + notification.defaults = defaults; +// notification.setLatestEventInfo(context, contentTitle, contentText, intent); + return notification; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ResourceHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ResourceHelper.java new file mode 100644 index 0000000..730acc4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/ResourceHelper.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.drawable.Drawable; + +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 资源文件帮助类 + * Created by Jorstin on 2015/3/18. + */ +public class ResourceHelper { + + static { + density = -1.0F; + } + + private static final String TAG = LogUtil.getLogUtilsTag(ResourceHelper.class); + + private static float density; + + /** + * + * @param context + * @param ratio + * @return + */ + public static int fromDPToPix(Context context, int ratio) { + return Math.round(getDensity(context) * ratio); + } + + /** + * + * @param context + * @return + */ + public static float getDensity(Context context) { + if (context == null) { + context = CCPAppManager.getContext(); + } + if (density < 0.0F){ + density = context.getResources().getDisplayMetrics().density; + } + return density; + } + /** + * + * @param context + * @param resId + * @return + */ + public static Drawable getDrawableById(Context context , int resId) { + + if(context == null) { + LogUtil.e(TAG, "get drawable, resId " + resId + ", but context is null"); + return null; + } + + return context.getResources().getDrawable(resId); + } + + /** + * + * @param bitmap + * @param density + */ + public static Bitmap getDegreeBitmap(Bitmap bitmap , float density) { + if (density % 360.0F == 0.0F) { + return bitmap; + } + + boolean filter = true; + if(bitmap == null) { + filter = false; + } + + Matrix localMatrix = new Matrix(); + localMatrix.reset(); + localMatrix.setRotate(density, bitmap.getWidth() / 2, + bitmap.getHeight() / 2); + Bitmap resultBitmap = Bitmap.createBitmap(bitmap, 0, 0, + bitmap.getWidth(), bitmap.getHeight(), localMatrix, filter); + LogUtil.d(TAG, " degree:" + density + " , filter" + filter); + if(resultBitmap != null && resultBitmap != bitmap) { + bitmap.recycle(); + } + return resultBitmap; + } + + /** + * + * @param context + * @param resId + * @return + */ + public static ColorStateList getColorStateList(Context context , int resId) { + if(context == null) { + LogUtil.e(TAG, "get drawable, resId " + resId + ", but context is null"); + return null; + } + return context.getResources().getColorStateList(resId); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/SupportSwipeModeUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/SupportSwipeModeUtils.java new file mode 100644 index 0000000..154807c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/common/utils/SupportSwipeModeUtils.java @@ -0,0 +1,44 @@ +package cn.shangyu.gdxzExpert.ecdemo.common.utils; + +import android.content.SharedPreferences; +import android.os.Build; + +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * com.yuntongxun.ecdemo.common.utils in ECDemo_Android + * Created by Jorstin on 2015/6/23. + */ +public class SupportSwipeModeUtils { + + private static final String TAG = "ECSDK_Demo.SupportSwipeModeUtils"; + + private static int mode = 0; + + public static void switchSwipebackMode(boolean enable) { + SharedPreferences sharePreference = CCPAppManager.getSharePreference(); + boolean supportSwipe = sharePreference.getBoolean("settings_support_swipe", true); + if(supportSwipe != enable) { + sharePreference.edit().putBoolean("settings_support_swipe", enable).commit(); + } + LogUtil.d(TAG , "switchSwipebackMode, from " + supportSwipe + " to " + enable); + } + + public static boolean isEnable() { + if(DemoUtils.nullAsNil(Build.VERSION.INCREMENTAL).toLowerCase().contains("flyme") + || DemoUtils.nullAsNil(Build.DISPLAY).toLowerCase().contains("flyme")) { + return false; + } + + if(mode == 0) { + if(!CCPAppManager.getSharePreference().getBoolean("settings_support_swipe", true)) { + mode = 2; + } else { + mode = 1; + } + } + return mode == 1; + } + } diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/Compat.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/Compat.java new file mode 100644 index 0000000..c1ec65b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/Compat.java @@ -0,0 +1,59 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview; + +import android.annotation.TargetApi; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.view.MotionEvent; +import android.view.View; + +public class Compat { + + private static final int SIXTY_FPS_INTERVAL = 1000 / 60; + + public static void postOnAnimation(View view, Runnable runnable) { + if (VERSION.SDK_INT >= 16) { + postOnAnimationJellyBean(view, runnable); + } else { + view.postDelayed(runnable, SIXTY_FPS_INTERVAL); + } + } + + @TargetApi(16) + private static void postOnAnimationJellyBean(View view, Runnable runnable) { + view.postOnAnimation(runnable); + } + + public static int getPointerIndex(int action) { + if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) + return getPointerIndexHoneyComb(action); + else + return getPointerIndexEclair(action); + } + + @SuppressWarnings("deprecation") + @TargetApi(VERSION_CODES.ECLAIR) + private static int getPointerIndexEclair(int action) { + return (action & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT; + } + + @TargetApi(VERSION_CODES.HONEYCOMB) + private static int getPointerIndexHoneyComb(int action) { + return (action & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/DefaultOnDoubleTapListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/DefaultOnDoubleTapListener.java new file mode 100644 index 0000000..84853cd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/DefaultOnDoubleTapListener.java @@ -0,0 +1,98 @@ +package cn.shangyu.gdxzExpert.ecdemo.photoview; + +import android.graphics.RectF; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.widget.ImageView; + +/** + * Provided default implementation of GestureDetector.OnDoubleTapListener, to be overriden with custom behavior, if needed + *

 

+ * To be used via {@link uk.co.senab.photoview.PhotoViewAttacher#setOnDoubleTapListener(GestureDetector.OnDoubleTapListener)} + */ +public class DefaultOnDoubleTapListener implements GestureDetector.OnDoubleTapListener { + + private PhotoViewAttacher photoViewAttacher; + + /** + * Default constructor + * + * @param photoViewAttacher PhotoViewAttacher to bind to + */ + public DefaultOnDoubleTapListener(PhotoViewAttacher photoViewAttacher) { + setPhotoViewAttacher(photoViewAttacher); + } + + /** + * Allows to change PhotoViewAttacher within range of single instance + * + * @param newPhotoViewAttacher PhotoViewAttacher to bind to + */ + public void setPhotoViewAttacher(PhotoViewAttacher newPhotoViewAttacher) { + this.photoViewAttacher = newPhotoViewAttacher; + } + + @Override + public boolean onSingleTapConfirmed(MotionEvent e) { + if (this.photoViewAttacher == null) + return false; + + ImageView imageView = photoViewAttacher.getImageView(); + + if (null != photoViewAttacher.getOnPhotoTapListener()) { + final RectF displayRect = photoViewAttacher.getDisplayRect(); + + if (null != displayRect) { + final float x = e.getX(), y = e.getY(); + + // Check to see if the user tapped on the photo + if (displayRect.contains(x, y)) { + + float xResult = (x - displayRect.left) + / displayRect.width(); + float yResult = (y - displayRect.top) + / displayRect.height(); + + photoViewAttacher.getOnPhotoTapListener().onPhotoTap(imageView, xResult, yResult); + return true; + } + } + } + if (null != photoViewAttacher.getOnViewTapListener()) { + photoViewAttacher.getOnViewTapListener().onViewTap(imageView, e.getX(), e.getY()); + } + + return false; + } + + @Override + public boolean onDoubleTap(MotionEvent ev) { + if (photoViewAttacher == null) + return false; + + try { + float scale = photoViewAttacher.getScale(); + float x = ev.getX(); + float y = ev.getY(); + + if (scale < photoViewAttacher.getMediumScale()) { + photoViewAttacher.setScale(photoViewAttacher.getMediumScale(), x, y, true); + } else if (scale >= photoViewAttacher.getMediumScale() && scale < photoViewAttacher.getMaximumScale()) { + photoViewAttacher.setScale(photoViewAttacher.getMaximumScale(), x, y, true); + } else { + photoViewAttacher.setScale(photoViewAttacher.getMinimumScale(), x, y, true); + } + } catch (ArrayIndexOutOfBoundsException e) { + // Can sometimes happen when getX() and getY() is called + } + + return true; + } + + @Override + public boolean onDoubleTapEvent(MotionEvent e) { + // Wait for the confirmed onDoubleTap() instead + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/IPhotoView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/IPhotoView.java new file mode 100644 index 0000000..f69ecbf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/IPhotoView.java @@ -0,0 +1,332 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview; + +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.RectF; +import android.view.GestureDetector; +import android.view.View; +import android.widget.ImageView; + + +public interface IPhotoView { + + public static final float DEFAULT_MAX_SCALE = 3.0f; + public static final float DEFAULT_MID_SCALE = 1.75f; + public static final float DEFAULT_MIN_SCALE = 1.0f; + public static final int DEFAULT_ZOOM_DURATION = 200; + + /** + * Returns true if the PhotoView is set to allow zooming of Photos. + * + * @return true if the PhotoView allows zooming. + */ + boolean canZoom(); + + /** + * Gets the Display Rectangle of the currently displayed Drawable. The Rectangle is relative to + * this View and includes all scaling and translations. + * + * @return - RectF of Displayed Drawable + */ + RectF getDisplayRect(); + + /** + * Sets the Display Matrix of the currently displayed Drawable. The Rectangle is considered + * relative to this View and includes all scaling and translations. + * + * @param finalMatrix target matrix to set PhotoView to + * @return - true if rectangle was applied successfully + */ + boolean setDisplayMatrix(Matrix finalMatrix); + + /** + * Gets the Display Matrix of the currently displayed Drawable. The Rectangle is considered + * relative to this View and includes all scaling and translations. + * + * @return - true if rectangle was applied successfully + */ + Matrix getDisplayMatrix(); + + /** + * Use {@link #getMinimumScale()} instead, this will be removed in future release + * + * @return The current minimum scale level. What this value represents depends on the current + * {@link ImageView.ScaleType}. + */ + @Deprecated + float getMinScale(); + + /** + * @return The current minimum scale level. What this value represents depends on the current + * {@link ImageView.ScaleType}. + */ + float getMinimumScale(); + + /** + * Use {@link #getMediumScale()} instead, this will be removed in future release + * + * @return The current middle scale level. What this value represents depends on the current + * {@link ImageView.ScaleType}. + */ + @Deprecated + float getMidScale(); + + /** + * @return The current medium scale level. What this value represents depends on the current + * {@link ImageView.ScaleType}. + */ + float getMediumScale(); + + /** + * Use {@link #getMaximumScale()} instead, this will be removed in future release + * + * @return The current maximum scale level. What this value represents depends on the current + * {@link ImageView.ScaleType}. + */ + @Deprecated + float getMaxScale(); + + /** + * @return The current maximum scale level. What this value represents depends on the current + * {@link ImageView.ScaleType}. + */ + float getMaximumScale(); + + /** + * Returns the current scale value + * + * @return float - current scale value + */ + float getScale(); + + /** + * Return the current scale type in use by the ImageView. + * + * @return current ImageView.ScaleType + */ + ImageView.ScaleType getScaleType(); + + /** + * Whether to allow the ImageView's parent to intercept the touch event when the photo is scroll + * to it's horizontal edge. + * + * @param allow whether to allow intercepting by parent element or not + */ + void setAllowParentInterceptOnEdge(boolean allow); + + /** + * Use {@link #setMinimumScale(float minimumScale)} instead, this will be removed in future + * release + *

 

+ * Sets the minimum scale level. What this value represents depends on the current {@link + * ImageView.ScaleType}. + * + * @param minScale minimum allowed scale + */ + @Deprecated + void setMinScale(float minScale); + + /** + * Sets the minimum scale level. What this value represents depends on the current {@link + * ImageView.ScaleType}. + * + * @param minimumScale minimum allowed scale + */ + void setMinimumScale(float minimumScale); + + /** + * Use {@link #setMediumScale(float mediumScale)} instead, this will be removed in future + * release + *

 

+ * Sets the middle scale level. What this value represents depends on the current {@link + * ImageView.ScaleType}. + * + * @param midScale medium scale preset + */ + @Deprecated + void setMidScale(float midScale); + + /* + * Sets the medium scale level. What this value represents depends on the current {@link android.widget.ImageView.ScaleType}. + * + * @param mediumScale medium scale preset + */ + void setMediumScale(float mediumScale); + + /** + * Use {@link #setMaximumScale(float maximumScale)} instead, this will be removed in future + * release + *

 

+ * Sets the maximum scale level. What this value represents depends on the current {@link + * ImageView.ScaleType}. + * + * @param maxScale maximum allowed scale preset + */ + @Deprecated + void setMaxScale(float maxScale); + + /** + * Sets the maximum scale level. What this value represents depends on the current {@link + * ImageView.ScaleType}. + * + * @param maximumScale maximum allowed scale preset + */ + void setMaximumScale(float maximumScale); + + /** + * Register a callback to be invoked when the Photo displayed by this view is long-pressed. + * + * @param listener - Listener to be registered. + */ + void setOnLongClickListener(View.OnLongClickListener listener); + + /** + * Register a callback to be invoked when the Matrix has changed for this View. An example would + * be the user panning or scaling the Photo. + * + * @param listener - Listener to be registered. + */ + void setOnMatrixChangeListener(PhotoViewAttacher.OnMatrixChangedListener listener); + + /** + * Register a callback to be invoked when the Photo displayed by this View is tapped with a + * single tap. + * + * @param listener - Listener to be registered. + */ + void setOnPhotoTapListener(PhotoViewAttacher.OnPhotoTapListener listener); + + /** + * Returns a listener to be invoked when the Photo displayed by this View is tapped with a + * single tap. + * + * @return PhotoViewAttacher.OnPhotoTapListener currently set, may be null + */ + PhotoViewAttacher.OnPhotoTapListener getOnPhotoTapListener(); + + /** + * Register a callback to be invoked when the View is tapped with a single tap. + * + * @param listener - Listener to be registered. + */ + void setOnViewTapListener(PhotoViewAttacher.OnViewTapListener listener); + + /** + * Enables rotation via PhotoView internal functions. + * + * @param rotationDegree - Degree to rotate PhotoView to, should be in range 0 to 360 + */ + void setRotationTo(float rotationDegree); + + /** + * Enables rotation via PhotoView internal functions. + * + * @param rotationDegree - Degree to rotate PhotoView by, should be in range 0 to 360 + */ + void setRotationBy(float rotationDegree); + + /** + * Returns a callback listener to be invoked when the View is tapped with a single tap. + * + * @return PhotoViewAttacher.OnViewTapListener currently set, may be null + */ + PhotoViewAttacher.OnViewTapListener getOnViewTapListener(); + + /** + * Changes the current scale to the specified value. + * + * @param scale - Value to scale to + */ + void setScale(float scale); + + /** + * Changes the current scale to the specified value. + * + * @param scale - Value to scale to + * @param animate - Whether to animate the scale + */ + void setScale(float scale, boolean animate); + + /** + * Changes the current scale to the specified value, around the given focal point. + * + * @param scale - Value to scale to + * @param focalX - X Focus Point + * @param focalY - Y Focus Point + * @param animate - Whether to animate the scale + */ + void setScale(float scale, float focalX, float focalY, boolean animate); + + /** + * Controls how the image should be resized or moved to match the size of the ImageView. Any + * scaling or panning will happen within the confines of this {@link + * ImageView.ScaleType}. + * + * @param scaleType - The desired scaling mode. + */ + void setScaleType(ImageView.ScaleType scaleType); + + /** + * Allows you to enable/disable the zoom functionality on the ImageView. When disable the + * ImageView reverts to using the FIT_CENTER matrix. + * + * @param zoomable - Whether the zoom functionality is enabled. + */ + void setZoomable(boolean zoomable); + + /** + * Enables rotation via PhotoView internal functions. Name is chosen so it won't collide with + * View.setRotation(float) in API since 11 + * + * @param rotationDegree - Degree to rotate PhotoView to, should be in range 0 to 360 + * @deprecated use {@link #setRotationTo(float)} + */ + void setPhotoViewRotation(float rotationDegree); + + /** + * Extracts currently visible area to Bitmap object, if there is no image loaded yet or the + * ImageView is already destroyed, returns {@code null} + * + * @return currently visible area as bitmap or null + */ + Bitmap getVisibleRectangleBitmap(); + + /** + * Allows to change zoom transition speed, default value is 200 (PhotoViewAttacher.DEFAULT_ZOOM_DURATION). + * Will default to 200 if provided negative value + * + * @param milliseconds duration of zoom interpolation + */ + void setZoomTransitionDuration(int milliseconds); + + /** + * Will return instance of IPhotoView (eg. PhotoViewAttacher), can be used to provide better + * integration + * + * @return IPhotoView implementation instance if available, null if not + */ + IPhotoView getIPhotoViewImplementation(); + + /** + * Sets custom double tap listener, to intercept default given functions. To reset behavior to + * default, you can just pass in "null" or public field of PhotoViewAttacher.defaultOnDoubleTapListener + * + * @param newOnDoubleTapListener custom OnDoubleTapListener to be set on ImageView + */ + public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoView.java new file mode 100644 index 0000000..6f097a6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoView.java @@ -0,0 +1,283 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.widget.ImageView; + + +public class PhotoView extends ImageView implements IPhotoView { + + private final PhotoViewAttacher mAttacher; + + private ScaleType mPendingScaleType; + + public PhotoView(Context context) { + this(context, null); + } + + public PhotoView(Context context, AttributeSet attr) { + this(context, attr, 0); + } + + public PhotoView(Context context, AttributeSet attr, int defStyle) { + super(context, attr, defStyle); + super.setScaleType(ScaleType.MATRIX); + mAttacher = new PhotoViewAttacher(this); + + if (null != mPendingScaleType) { + setScaleType(mPendingScaleType); + mPendingScaleType = null; + } + } + + /** + * @deprecated use {@link #setRotationTo(float)} + */ + @Override + public void setPhotoViewRotation(float rotationDegree) { + mAttacher.setRotationTo(rotationDegree); + } + + @Override + public void setRotationTo(float rotationDegree) { + mAttacher.setRotationTo(rotationDegree); + } + + @Override + public void setRotationBy(float rotationDegree) { + mAttacher.setRotationBy(rotationDegree); + } + + @Override + public boolean canZoom() { + return mAttacher.canZoom(); + } + + @Override + public RectF getDisplayRect() { + return mAttacher.getDisplayRect(); + } + + @Override + public Matrix getDisplayMatrix() { + return mAttacher.getDrawMatrix(); + } + + @Override + public boolean setDisplayMatrix(Matrix finalRectangle) { + return mAttacher.setDisplayMatrix(finalRectangle); + } + + @Override + @Deprecated + public float getMinScale() { + return getMinimumScale(); + } + + @Override + public float getMinimumScale() { + return mAttacher.getMinimumScale(); + } + + @Override + @Deprecated + public float getMidScale() { + return getMediumScale(); + } + + @Override + public float getMediumScale() { + return mAttacher.getMediumScale(); + } + + @Override + @Deprecated + public float getMaxScale() { + return getMaximumScale(); + } + + @Override + public float getMaximumScale() { + return mAttacher.getMaximumScale(); + } + + @Override + public float getScale() { + return mAttacher.getScale(); + } + + @Override + public ScaleType getScaleType() { + return mAttacher.getScaleType(); + } + + @Override + public void setAllowParentInterceptOnEdge(boolean allow) { + mAttacher.setAllowParentInterceptOnEdge(allow); + } + + @Override + @Deprecated + public void setMinScale(float minScale) { + setMinimumScale(minScale); + } + + @Override + public void setMinimumScale(float minimumScale) { + mAttacher.setMinimumScale(minimumScale); + } + + @Override + @Deprecated + public void setMidScale(float midScale) { + setMediumScale(midScale); + } + + @Override + public void setMediumScale(float mediumScale) { + mAttacher.setMediumScale(mediumScale); + } + + @Override + @Deprecated + public void setMaxScale(float maxScale) { + setMaximumScale(maxScale); + } + + @Override + public void setMaximumScale(float maximumScale) { + mAttacher.setMaximumScale(maximumScale); + } + + @Override + // setImageBitmap calls through to this method + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + if (null != mAttacher) { + mAttacher.update(); + } + } + + @Override + public void setImageResource(int resId) { + super.setImageResource(resId); + if (null != mAttacher) { + mAttacher.update(); + } + } + + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + if (null != mAttacher) { + mAttacher.update(); + } + } + + @Override + public void setOnMatrixChangeListener(PhotoViewAttacher.OnMatrixChangedListener listener) { + mAttacher.setOnMatrixChangeListener(listener); + } + + @Override + public void setOnLongClickListener(OnLongClickListener l) { + mAttacher.setOnLongClickListener(l); + } + + @Override + public void setOnPhotoTapListener(PhotoViewAttacher.OnPhotoTapListener listener) { + mAttacher.setOnPhotoTapListener(listener); + } + + @Override + public PhotoViewAttacher.OnPhotoTapListener getOnPhotoTapListener() { + return mAttacher.getOnPhotoTapListener(); + } + + @Override + public void setOnViewTapListener(PhotoViewAttacher.OnViewTapListener listener) { + mAttacher.setOnViewTapListener(listener); + } + + @Override + public PhotoViewAttacher.OnViewTapListener getOnViewTapListener() { + return mAttacher.getOnViewTapListener(); + } + + @Override + public void setScale(float scale) { + mAttacher.setScale(scale); + } + + @Override + public void setScale(float scale, boolean animate) { + mAttacher.setScale(scale, animate); + } + + @Override + public void setScale(float scale, float focalX, float focalY, boolean animate) { + mAttacher.setScale(scale, focalX, focalY, animate); + } + + @Override + public void setScaleType(ScaleType scaleType) { + if (null != mAttacher) { + mAttacher.setScaleType(scaleType); + } else { + mPendingScaleType = scaleType; + } + } + + @Override + public void setZoomable(boolean zoomable) { + mAttacher.setZoomable(zoomable); + } + + @Override + public Bitmap getVisibleRectangleBitmap() { + return mAttacher.getVisibleRectangleBitmap(); + } + + @Override + public void setZoomTransitionDuration(int milliseconds) { + mAttacher.setZoomTransitionDuration(milliseconds); + } + + @Override + public IPhotoView getIPhotoViewImplementation() { + return mAttacher; + } + + @Override + public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) { + mAttacher.setOnDoubleTapListener(newOnDoubleTapListener); + } + + @Override + protected void onDetachedFromWindow() { + mAttacher.cleanup(); + super.onDetachedFromWindow(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoViewAttacher.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoViewAttacher.java new file mode 100644 index 0000000..76c6d2f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/PhotoViewAttacher.java @@ -0,0 +1,1095 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Matrix; +import android.graphics.Matrix.ScaleToFit; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnLongClickListener; +import android.view.ViewParent; +import android.view.ViewTreeObserver; +import android.view.animation.AccelerateDecelerateInterpolator; +import android.view.animation.Interpolator; +import android.widget.ImageView; +import android.widget.ImageView.ScaleType; + +import java.lang.ref.WeakReference; + +import cn.shangyu.gdxzExpert.ecdemo.photoview.gestures.OnGestureListener; +import cn.shangyu.gdxzExpert.ecdemo.photoview.gestures.VersionedGestureDetector; +import cn.shangyu.gdxzExpert.ecdemo.photoview.log.LogManager; +import cn.shangyu.gdxzExpert.ecdemo.photoview.scrollerproxy.ScrollerProxy; + +import static android.view.MotionEvent.ACTION_CANCEL; +import static android.view.MotionEvent.ACTION_DOWN; +import static android.view.MotionEvent.ACTION_UP; + +public class PhotoViewAttacher implements IPhotoView, View.OnTouchListener, + OnGestureListener, + ViewTreeObserver.OnGlobalLayoutListener { + + private static final String LOG_TAG = "PhotoViewAttacher"; + + // let debug flag be dynamic, but still Proguard can be used to remove from + // release builds + private static final boolean DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG); + + static final Interpolator sInterpolator = new AccelerateDecelerateInterpolator(); + int ZOOM_DURATION = DEFAULT_ZOOM_DURATION; + + static final int EDGE_NONE = -1; + static final int EDGE_LEFT = 0; + static final int EDGE_RIGHT = 1; + static final int EDGE_BOTH = 2; + + private float mMinScale = DEFAULT_MIN_SCALE; + private float mMidScale = DEFAULT_MID_SCALE; + private float mMaxScale = DEFAULT_MAX_SCALE; + + private boolean mAllowParentInterceptOnEdge = true; + + private static void checkZoomLevels(float minZoom, float midZoom, + float maxZoom) { + if (minZoom >= midZoom) { + throw new IllegalArgumentException( + "MinZoom has to be less than MidZoom"); + } else if (midZoom >= maxZoom) { + throw new IllegalArgumentException( + "MidZoom has to be less than MaxZoom"); + } + } + + /** + * @return true if the ImageView exists, and it's Drawable existss + */ + private static boolean hasDrawable(ImageView imageView) { + return null != imageView && null != imageView.getDrawable(); + } + + /** + * @return true if the ScaleType is supported. + */ + private static boolean isSupportedScaleType(final ScaleType scaleType) { + if (null == scaleType) { + return false; + } + + switch (scaleType) { + case MATRIX: + throw new IllegalArgumentException(scaleType.name() + + " is not supported in PhotoView"); + + default: + return true; + } + } + + /** + * Set's the ImageView's ScaleType to Matrix. + */ + private static void setImageViewScaleTypeMatrix(ImageView imageView) { + /** + * PhotoView sets it's own ScaleType to Matrix, then diverts all calls + * setScaleType to this.setScaleType automatically. + */ + if (null != imageView && !(imageView instanceof IPhotoView)) { + if (!ScaleType.MATRIX.equals(imageView.getScaleType())) { + imageView.setScaleType(ScaleType.MATRIX); + } + } + } + + private WeakReference mImageView; + + // Gesture Detectors + private GestureDetector mGestureDetector; + private cn.shangyu.gdxzExpert.ecdemo.photoview.gestures.GestureDetector mScaleDragDetector; + + // These are set so we don't keep allocating them on the heap + private final Matrix mBaseMatrix = new Matrix(); + private final Matrix mDrawMatrix = new Matrix(); + private final Matrix mSuppMatrix = new Matrix(); + private final RectF mDisplayRect = new RectF(); + private final float[] mMatrixValues = new float[9]; + + // Listeners + private OnMatrixChangedListener mMatrixChangeListener; + private OnPhotoTapListener mPhotoTapListener; + private OnViewTapListener mViewTapListener; + private OnLongClickListener mLongClickListener; + + private int mIvTop, mIvRight, mIvBottom, mIvLeft; + private FlingRunnable mCurrentFlingRunnable; + private int mScrollEdge = EDGE_BOTH; + + private boolean mZoomEnabled; + private ScaleType mScaleType = ScaleType.FIT_CENTER; + + public PhotoViewAttacher(ImageView imageView) { + mImageView = new WeakReference(imageView); + + imageView.setDrawingCacheEnabled(true); + imageView.setOnTouchListener(this); + + ViewTreeObserver observer = imageView.getViewTreeObserver(); + if (null != observer) + observer.addOnGlobalLayoutListener(this); + + // Make sure we using MATRIX Scale Type + setImageViewScaleTypeMatrix(imageView); + + if (imageView.isInEditMode()) { + return; + } + // Create Gesture Detectors... + mScaleDragDetector = VersionedGestureDetector.newInstance( + imageView.getContext(), this); + + mGestureDetector = new GestureDetector(imageView.getContext(), + new GestureDetector.SimpleOnGestureListener() { + + // forward long click listener + @Override + public void onLongPress(MotionEvent e) { + if (null != mLongClickListener) { + mLongClickListener.onLongClick(getImageView()); + } + } + }); + + mGestureDetector.setOnDoubleTapListener(new DefaultOnDoubleTapListener(this)); + + // Finally, update the UI so that we're zoomable + setZoomable(true); + } + + @Override + public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener newOnDoubleTapListener) { + if (newOnDoubleTapListener != null) + this.mGestureDetector.setOnDoubleTapListener(newOnDoubleTapListener); + else + this.mGestureDetector.setOnDoubleTapListener(new DefaultOnDoubleTapListener(this)); + } + + @Override + public boolean canZoom() { + return mZoomEnabled; + } + + /** + * Clean-up the resources attached to this object. This needs to be called when the ImageView is + * no longer used. A good example is from {@link View#onDetachedFromWindow()} or + * from {@link android.app.Activity#onDestroy()}. This is automatically called if you are using + * {@link PhotoView}. + */ + @SuppressWarnings("deprecation") + public void cleanup() { + if (null == mImageView) { + return; // cleanup already done + } + + final ImageView imageView = mImageView.get(); + + if (null != imageView) { + // Remove this as a global layout listener + ViewTreeObserver observer = imageView.getViewTreeObserver(); + if (null != observer && observer.isAlive()) { + observer.removeGlobalOnLayoutListener(this); + } + + // Remove the ImageView's reference to this + imageView.setOnTouchListener(null); + + // make sure a pending fling runnable won't be run + cancelFling(); + } + + if (null != mGestureDetector) { + mGestureDetector.setOnDoubleTapListener(null); + } + + // Clear listeners too + mMatrixChangeListener = null; + mPhotoTapListener = null; + mViewTapListener = null; + + // Finally, clear ImageView + mImageView = null; + } + + @Override + public RectF getDisplayRect() { + checkMatrixBounds(); + return getDisplayRect(getDrawMatrix()); + } + + @Override + public boolean setDisplayMatrix(Matrix finalMatrix) { + if (finalMatrix == null) + throw new IllegalArgumentException("Matrix cannot be null"); + + ImageView imageView = getImageView(); + if (null == imageView) + return false; + + if (null == imageView.getDrawable()) + return false; + + mSuppMatrix.set(finalMatrix); + setImageViewMatrix(getDrawMatrix()); + checkMatrixBounds(); + + return true; + } + + /** + * @deprecated use {@link #setRotationTo(float)} + */ + @Override + public void setPhotoViewRotation(float degrees) { + mSuppMatrix.setRotate(degrees % 360); + checkAndDisplayMatrix(); + } + + @Override + public void setRotationTo(float degrees) { + mSuppMatrix.setRotate(degrees % 360); + checkAndDisplayMatrix(); + } + + @Override + public void setRotationBy(float degrees) { + mSuppMatrix.postRotate(degrees % 360); + checkAndDisplayMatrix(); + } + + public ImageView getImageView() { + ImageView imageView = null; + + if (null != mImageView) { + imageView = mImageView.get(); + } + + // If we don't have an ImageView, call cleanup() + if (null == imageView) { + cleanup(); + Log.i(LOG_TAG, + "ImageView no longer exists. You should not use this PhotoViewAttacher any more."); + } + + return imageView; + } + + @Override + @Deprecated + public float getMinScale() { + return getMinimumScale(); + } + + @Override + public float getMinimumScale() { + return mMinScale; + } + + @Override + @Deprecated + public float getMidScale() { + return getMediumScale(); + } + + @Override + public float getMediumScale() { + return mMidScale; + } + + @Override + @Deprecated + public float getMaxScale() { + return getMaximumScale(); + } + + @Override + public float getMaximumScale() { + return mMaxScale; + } + + @Override + public float getScale() { + double sqrt = Math.sqrt((float) Math.pow(getValue(mSuppMatrix, Matrix.MSCALE_X), 2) + (float) Math.pow(getValue(mSuppMatrix, Matrix.MSKEW_Y), 2)); + return (float)sqrt; + } + + @Override + public ScaleType getScaleType() { + return mScaleType; + } + + @Override + public void onDrag(float dx, float dy) { + if (mScaleDragDetector.isScaling()) { + return; // Do not drag if we are already scaling + } + + if (DEBUG) { + LogManager.getLogger().d(LOG_TAG, + String.format("onDrag: dx: %.2f. dy: %.2f", dx, dy)); + } + + ImageView imageView = getImageView(); + mSuppMatrix.postTranslate(dx, dy); + checkAndDisplayMatrix(); + + /** + * Here we decide whether to let the ImageView's parent to start taking + * over the touch event. + * + * First we check whether this function is enabled. We never want the + * parent to take over if we're scaling. We then check the edge we're + * on, and the direction of the scroll (i.e. if we're pulling against + * the edge, aka 'overscrolling', let the parent take over). + */ + ViewParent parent = imageView.getParent(); + if (mAllowParentInterceptOnEdge && !mScaleDragDetector.isScaling()) { + if (mScrollEdge == EDGE_BOTH + || (mScrollEdge == EDGE_LEFT && dx >= 1f) + || (mScrollEdge == EDGE_RIGHT && dx <= -1f)) { + if (null != parent) + parent.requestDisallowInterceptTouchEvent(false); + } + } else { + if (null != parent) { + parent.requestDisallowInterceptTouchEvent(true); + } + } + } + + @Override + public void onFling(float startX, float startY, float velocityX, + float velocityY) { + if (DEBUG) { + LogManager.getLogger().d( + LOG_TAG, + "onFling. sX: " + startX + " sY: " + startY + " Vx: " + + velocityX + " Vy: " + velocityY); + } + ImageView imageView = getImageView(); + mCurrentFlingRunnable = new FlingRunnable(imageView.getContext()); + mCurrentFlingRunnable.fling(getImageViewWidth(imageView), + getImageViewHeight(imageView), (int) velocityX, (int) velocityY); + imageView.post(mCurrentFlingRunnable); + } + + @Override + public void onGlobalLayout() { + ImageView imageView = getImageView(); + + if (null != imageView) { + if (mZoomEnabled) { + final int top = imageView.getTop(); + final int right = imageView.getRight(); + final int bottom = imageView.getBottom(); + final int left = imageView.getLeft(); + + /** + * We need to check whether the ImageView's bounds have changed. + * This would be easier if we targeted API 11+ as we could just use + * View.OnLayoutChangeListener. Instead we have to replicate the + * work, keeping track of the ImageView's bounds and then checking + * if the values change. + */ + if (top != mIvTop || bottom != mIvBottom || left != mIvLeft + || right != mIvRight) { + // Update our base matrix, as the bounds have changed + updateBaseMatrix(imageView.getDrawable()); + + // Update values as something has changed + mIvTop = top; + mIvRight = right; + mIvBottom = bottom; + mIvLeft = left; + } + } else { + updateBaseMatrix(imageView.getDrawable()); + } + } + } + + @Override + public void onScale(float scaleFactor, float focusX, float focusY) { + if (DEBUG) { + LogManager.getLogger().d( + LOG_TAG, + String.format("onScale: scale: %.2f. fX: %.2f. fY: %.2f", + scaleFactor, focusX, focusY)); + } + + if (getScale() < mMaxScale || scaleFactor < 1f) { + mSuppMatrix.postScale(scaleFactor, scaleFactor, focusX, focusY); + checkAndDisplayMatrix(); + } + } + + @Override + public boolean onTouch(View v, MotionEvent ev) { + boolean handled = false; + + if (mZoomEnabled && hasDrawable((ImageView) v)) { + ViewParent parent = v.getParent(); + switch (ev.getAction()) { + case ACTION_DOWN: + // First, disable the Parent from intercepting the touch + // event + if (null != parent) + parent.requestDisallowInterceptTouchEvent(true); + else + Log.i(LOG_TAG, "onTouch getParent() returned null"); + + // If we're flinging, and the user presses down, cancel + // fling + cancelFling(); + break; + + case ACTION_CANCEL: + case ACTION_UP: + // If the user has zoomed less than min scale, zoom back + // to min scale + if (getScale() < mMinScale) { + RectF rect = getDisplayRect(); + if (null != rect) { + v.post(new AnimatedZoomRunnable((float) getScale(), mMinScale, + rect.centerX(), rect.centerY())); + handled = true; + } + } + break; + } + + // Try the Scale/Drag detector + if (null != mScaleDragDetector + && mScaleDragDetector.onTouchEvent(ev)) { + handled = true; + } + + // Check to see if the user double tapped + if (null != mGestureDetector && mGestureDetector.onTouchEvent(ev)) { + handled = true; + } + } + + return handled; + } + + @Override + public void setAllowParentInterceptOnEdge(boolean allow) { + mAllowParentInterceptOnEdge = allow; + } + + @Override + @Deprecated + public void setMinScale(float minScale) { + setMinimumScale(minScale); + } + + @Override + public void setMinimumScale(float minimumScale) { + checkZoomLevels(minimumScale, mMidScale, mMaxScale); + mMinScale = minimumScale; + } + + @Override + @Deprecated + public void setMidScale(float midScale) { + setMediumScale(midScale); + } + + @Override + public void setMediumScale(float mediumScale) { + checkZoomLevels(mMinScale, mediumScale, mMaxScale); + mMidScale = mediumScale; + } + + @Override + @Deprecated + public void setMaxScale(float maxScale) { + setMaximumScale(maxScale); + } + + @Override + public void setMaximumScale(float maximumScale) { + checkZoomLevels(mMinScale, mMidScale, maximumScale); + mMaxScale = maximumScale; + } + + @Override + public void setOnLongClickListener(OnLongClickListener listener) { + mLongClickListener = listener; + } + + @Override + public void setOnMatrixChangeListener(OnMatrixChangedListener listener) { + mMatrixChangeListener = listener; + } + + @Override + public void setOnPhotoTapListener(OnPhotoTapListener listener) { + mPhotoTapListener = listener; + } + + @Override + public OnPhotoTapListener getOnPhotoTapListener() { + return mPhotoTapListener; + } + + @Override + public void setOnViewTapListener(OnViewTapListener listener) { + mViewTapListener = listener; + } + + @Override + public OnViewTapListener getOnViewTapListener() { + return mViewTapListener; + } + + @Override + public void setScale(float scale) { + setScale(scale, false); + } + + @Override + public void setScale(float scale, boolean animate) { + ImageView imageView = getImageView(); + + if (null != imageView) { + setScale(scale, + (imageView.getRight()) / 2, + (imageView.getBottom()) / 2, + animate); + } + } + + @Override + public void setScale(float scale, float focalX, float focalY, + boolean animate) { + ImageView imageView = getImageView(); + + if (null != imageView) { + // Check to see if the scale is within bounds + if (scale < mMinScale || scale > mMaxScale) { + LogManager + .getLogger() + .i(LOG_TAG, + "Scale must be within the range of minScale and maxScale"); + return; + } + + if (animate) { + imageView.post(new AnimatedZoomRunnable((float) getScale(), scale, + focalX, focalY)); + } else { + mSuppMatrix.setScale(scale, scale, focalX, focalY); + checkAndDisplayMatrix(); + } + } + } + + @Override + public void setScaleType(ScaleType scaleType) { + if (isSupportedScaleType(scaleType) && scaleType != mScaleType) { + mScaleType = scaleType; + + // Finally update + update(); + } + } + + @Override + public void setZoomable(boolean zoomable) { + mZoomEnabled = zoomable; + update(); + } + + public void update() { + ImageView imageView = getImageView(); + + if (null != imageView) { + if (mZoomEnabled) { + // Make sure we using MATRIX Scale Type + setImageViewScaleTypeMatrix(imageView); + + // Update the base matrix using the current drawable + updateBaseMatrix(imageView.getDrawable()); + } else { + // Reset the Matrix... + resetMatrix(); + } + } + } + + @Override + public Matrix getDisplayMatrix() { + return new Matrix(getDrawMatrix()); + } + + public Matrix getDrawMatrix() { + mDrawMatrix.set(mBaseMatrix); + mDrawMatrix.postConcat(mSuppMatrix); + return mDrawMatrix; + } + + private void cancelFling() { + if (null != mCurrentFlingRunnable) { + mCurrentFlingRunnable.cancelFling(); + mCurrentFlingRunnable = null; + } + } + + /** + * Helper method that simply checks the Matrix, and then displays the result + */ + private void checkAndDisplayMatrix() { + if (checkMatrixBounds()) { + setImageViewMatrix(getDrawMatrix()); + } + } + + private void checkImageViewScaleType() { + ImageView imageView = getImageView(); + + /** + * PhotoView's getScaleType() will just divert to this.getScaleType() so + * only call if we're not attached to a PhotoView. + */ + if (null != imageView && !(imageView instanceof IPhotoView)) { + if (!ScaleType.MATRIX.equals(imageView.getScaleType())) { + throw new IllegalStateException( + "The ImageView's ScaleType has been changed since attaching a PhotoViewAttacher"); + } + } + } + + private boolean checkMatrixBounds() { + final ImageView imageView = getImageView(); + if (null == imageView) { + return false; + } + + final RectF rect = getDisplayRect(getDrawMatrix()); + if (null == rect) { + return false; + } + + final float height = rect.height(), width = rect.width(); + float deltaX = 0, deltaY = 0; + + final int viewHeight = getImageViewHeight(imageView); + if (height <= viewHeight) { + switch (mScaleType) { + case FIT_START: + deltaY = -rect.top; + break; + case FIT_END: + deltaY = viewHeight - height - rect.top; + break; + default: + deltaY = (viewHeight - height) / 2 - rect.top; + break; + } + } else if (rect.top > 0) { + deltaY = -rect.top; + } else if (rect.bottom < viewHeight) { + deltaY = viewHeight - rect.bottom; + } + + final int viewWidth = getImageViewWidth(imageView); + if (width <= viewWidth) { + switch (mScaleType) { + case FIT_START: + deltaX = -rect.left; + break; + case FIT_END: + deltaX = viewWidth - width - rect.left; + break; + default: + deltaX = (viewWidth - width) / 2 - rect.left; + break; + } + mScrollEdge = EDGE_BOTH; + } else if (rect.left > 0) { + mScrollEdge = EDGE_LEFT; + deltaX = -rect.left; + } else if (rect.right < viewWidth) { + deltaX = viewWidth - rect.right; + mScrollEdge = EDGE_RIGHT; + } else { + mScrollEdge = EDGE_NONE; + } + + // Finally actually translate the matrix + mSuppMatrix.postTranslate(deltaX, deltaY); + return true; + } + + /** + * Helper method that maps the supplied Matrix to the current Drawable + * + * @param matrix - Matrix to map Drawable against + * @return RectF - Displayed Rectangle + */ + private RectF getDisplayRect(Matrix matrix) { + ImageView imageView = getImageView(); + + if (null != imageView) { + Drawable d = imageView.getDrawable(); + if (null != d) { + mDisplayRect.set(0, 0, d.getIntrinsicWidth(), + d.getIntrinsicHeight()); + matrix.mapRect(mDisplayRect); + return mDisplayRect; + } + } + return null; + } + + public Bitmap getVisibleRectangleBitmap() { + ImageView imageView = getImageView(); + return imageView == null ? null : imageView.getDrawingCache(); + } + + @Override + public void setZoomTransitionDuration(int milliseconds) { + if (milliseconds < 0) + milliseconds = DEFAULT_ZOOM_DURATION; + this.ZOOM_DURATION = milliseconds; + } + + @Override + public IPhotoView getIPhotoViewImplementation() { + return this; + } + + /** + * Helper method that 'unpacks' a Matrix and returns the required value + * + * @param matrix - Matrix to unpack + * @param whichValue - Which value from Matrix.M* to return + * @return float - returned value + */ + private float getValue(Matrix matrix, int whichValue) { + matrix.getValues(mMatrixValues); + return mMatrixValues[whichValue]; + } + + /** + * Resets the Matrix back to FIT_CENTER, and then displays it.s + */ + private void resetMatrix() { + mSuppMatrix.reset(); + setImageViewMatrix(getDrawMatrix()); + checkMatrixBounds(); + } + + private void setImageViewMatrix(Matrix matrix) { + ImageView imageView = getImageView(); + if (null != imageView) { + + checkImageViewScaleType(); + imageView.setImageMatrix(matrix); + + // Call MatrixChangedListener if needed + if (null != mMatrixChangeListener) { + RectF displayRect = getDisplayRect(matrix); + if (null != displayRect) { + mMatrixChangeListener.onMatrixChanged(displayRect); + } + } + } + } + + /** + * Calculate Matrix for FIT_CENTER + * + * @param d - Drawable being displayed + */ + private void updateBaseMatrix(Drawable d) { + ImageView imageView = getImageView(); + if (null == imageView || null == d) { + return; + } + + final float viewWidth = getImageViewWidth(imageView); + final float viewHeight = getImageViewHeight(imageView); + final int drawableWidth = d.getIntrinsicWidth(); + final int drawableHeight = d.getIntrinsicHeight(); + + mBaseMatrix.reset(); + + final float widthScale = viewWidth / drawableWidth; + final float heightScale = viewHeight / drawableHeight; + + if (mScaleType == ScaleType.CENTER) { + mBaseMatrix.postTranslate((viewWidth - drawableWidth) / 2F, + (viewHeight - drawableHeight) / 2F); + + } else if (mScaleType == ScaleType.CENTER_CROP) { + float scale = Math.max(widthScale, heightScale); + mBaseMatrix.postScale(scale, scale); + mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2F, + (viewHeight - drawableHeight * scale) / 2F); + + } else if (mScaleType == ScaleType.CENTER_INSIDE) { + float scale = Math.min(1.0f, Math.min(widthScale, heightScale)); + mBaseMatrix.postScale(scale, scale); + mBaseMatrix.postTranslate((viewWidth - drawableWidth * scale) / 2F, + (viewHeight - drawableHeight * scale) / 2F); + + } else { + RectF mTempSrc = new RectF(0, 0, drawableWidth, drawableHeight); + RectF mTempDst = new RectF(0, 0, viewWidth, viewHeight); + + switch (mScaleType) { + case FIT_CENTER: + mBaseMatrix + .setRectToRect(mTempSrc, mTempDst, ScaleToFit.CENTER); + break; + + case FIT_START: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.START); + break; + + case FIT_END: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.END); + break; + + case FIT_XY: + mBaseMatrix.setRectToRect(mTempSrc, mTempDst, ScaleToFit.FILL); + break; + + default: + break; + } + } + + resetMatrix(); + } + + private int getImageViewWidth(ImageView imageView) { + if (null == imageView) + return 0; + return imageView.getWidth() - imageView.getPaddingLeft() - imageView.getPaddingRight(); + } + + private int getImageViewHeight(ImageView imageView) { + if (null == imageView) + return 0; + return imageView.getHeight() - imageView.getPaddingTop() - imageView.getPaddingBottom(); + } + + /** + * Interface definition for a callback to be invoked when the internal Matrix has changed for + * this View. + * + * @author Chris Banes + */ + public static interface OnMatrixChangedListener { + /** + * Callback for when the Matrix displaying the Drawable has changed. This could be because + * the View's bounds have changed, or the user has zoomed. + * + * @param rect - Rectangle displaying the Drawable's new bounds. + */ + void onMatrixChanged(RectF rect); + } + + /** + * Interface definition for a callback to be invoked when the Photo is tapped with a single + * tap. + * + * @author Chris Banes + */ + public static interface OnPhotoTapListener { + + /** + * A callback to receive where the user taps on a photo. You will only receive a callback if + * the user taps on the actual photo, tapping on 'whitespace' will be ignored. + * + * @param view - View the user tapped. + * @param x - where the user tapped from the of the Drawable, as percentage of the + * Drawable width. + * @param y - where the user tapped from the top of the Drawable, as percentage of the + * Drawable height. + */ + void onPhotoTap(View view, float x, float y); + } + + /** + * Interface definition for a callback to be invoked when the ImageView is tapped with a single + * tap. + * + * @author Chris Banes + */ + public static interface OnViewTapListener { + + /** + * A callback to receive where the user taps on a ImageView. You will receive a callback if + * the user taps anywhere on the view, tapping on 'whitespace' will not be ignored. + * + * @param view - View the user tapped. + * @param x - where the user tapped from the left of the View. + * @param y - where the user tapped from the top of the View. + */ + void onViewTap(View view, float x, float y); + } + + private class AnimatedZoomRunnable implements Runnable { + + private final float mFocalX, mFocalY; + private final long mStartTime; + private final float mZoomStart, mZoomEnd; + + public AnimatedZoomRunnable(final float currentZoom, final float targetZoom, + final float focalX, final float focalY) { + mFocalX = focalX; + mFocalY = focalY; + mStartTime = System.currentTimeMillis(); + mZoomStart = currentZoom; + mZoomEnd = targetZoom; + } + + @Override + public void run() { + ImageView imageView = getImageView(); + if (imageView == null) { + return; + } + + float t = interpolate(); + float scale = mZoomStart + t * (mZoomEnd - mZoomStart); + float deltaScale = scale / getScale(); + + mSuppMatrix.postScale(deltaScale, deltaScale, mFocalX, mFocalY); + checkAndDisplayMatrix(); + + // We haven't hit our target scale yet, so post ourselves again + if (t < 1f) { + Compat.postOnAnimation(imageView, this); + } + } + + private float interpolate() { + float t = 1f * (System.currentTimeMillis() - mStartTime) / ZOOM_DURATION; + t = Math.min(1f, t); + t = sInterpolator.getInterpolation(t); + return t; + } + } + + private class FlingRunnable implements Runnable { + + private final ScrollerProxy mScroller; + private int mCurrentX, mCurrentY; + + public FlingRunnable(Context context) { + mScroller = ScrollerProxy.getScroller(context); + } + + public void cancelFling() { + if (DEBUG) { + LogManager.getLogger().d(LOG_TAG, "Cancel Fling"); + } + mScroller.forceFinished(true); + } + + public void fling(int viewWidth, int viewHeight, int velocityX, + int velocityY) { + final RectF rect = getDisplayRect(); + if (null == rect) { + return; + } + + final int startX = Math.round(-rect.left); + final int minX, maxX, minY, maxY; + + if (viewWidth < rect.width()) { + minX = 0; + maxX = Math.round(rect.width() - viewWidth); + } else { + minX = maxX = startX; + } + + final int startY = Math.round(-rect.top); + if (viewHeight < rect.height()) { + minY = 0; + maxY = Math.round(rect.height() - viewHeight); + } else { + minY = maxY = startY; + } + + mCurrentX = startX; + mCurrentY = startY; + + if (DEBUG) { + LogManager.getLogger().d( + LOG_TAG, + "fling. StartX:" + startX + " StartY:" + startY + + " MaxX:" + maxX + " MaxY:" + maxY); + } + + // If we actually can move, fling the scroller + if (startX != maxX || startY != maxY) { + mScroller.fling(startX, startY, velocityX, velocityY, minX, + maxX, minY, maxY, 0, 0); + } + } + + @Override + public void run() { + if (mScroller.isFinished()) { + return; // remaining post that should not be handled + } + + ImageView imageView = getImageView(); + if (null != imageView && mScroller.computeScrollOffset()) { + + final int newX = mScroller.getCurrX(); + final int newY = mScroller.getCurrY(); + + if (DEBUG) { + LogManager.getLogger().d( + LOG_TAG, + "fling run(). CurrentX:" + mCurrentX + " CurrentY:" + + mCurrentY + " NewX:" + newX + " NewY:" + + newY); + } + + mSuppMatrix.postTranslate(mCurrentX - newX, mCurrentY - newY); + setImageViewMatrix(getDrawMatrix()); + + mCurrentX = newX; + mCurrentY = newY; + + // Post On animation + Compat.postOnAnimation(imageView, this); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/CupcakeGestureDetector.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/CupcakeGestureDetector.java new file mode 100644 index 0000000..992cdf5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/CupcakeGestureDetector.java @@ -0,0 +1,142 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.gestures; + +import android.content.Context; +import android.util.Log; +import android.view.MotionEvent; +import android.view.VelocityTracker; +import android.view.ViewConfiguration; + +public class CupcakeGestureDetector implements GestureDetector { + + protected OnGestureListener mListener; + private static final String LOG_TAG = "CupcakeGestureDetector"; + float mLastTouchX; + float mLastTouchY; + final float mTouchSlop; + final float mMinimumVelocity; + + @Override + public void setOnGestureListener(OnGestureListener listener) { + this.mListener = listener; + } + + public CupcakeGestureDetector(Context context) { + final ViewConfiguration configuration = ViewConfiguration + .get(context); + mMinimumVelocity = configuration.getScaledMinimumFlingVelocity(); + mTouchSlop = configuration.getScaledTouchSlop(); + } + + private VelocityTracker mVelocityTracker; + private boolean mIsDragging; + + float getActiveX(MotionEvent ev) { + return ev.getX(); + } + + float getActiveY(MotionEvent ev) { + return ev.getY(); + } + + public boolean isScaling() { + return false; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: { + mVelocityTracker = VelocityTracker.obtain(); + if (null != mVelocityTracker) { + mVelocityTracker.addMovement(ev); + } else { + Log.i(LOG_TAG, "Velocity tracker is null"); + } + + mLastTouchX = getActiveX(ev); + mLastTouchY = getActiveY(ev); + mIsDragging = false; + break; + } + + case MotionEvent.ACTION_MOVE: { + final float x = getActiveX(ev); + final float y = getActiveY(ev); + final float dx = x - mLastTouchX, dy = y - mLastTouchY; + + if (!mIsDragging) { + // Use Pythagoras to see if drag length is larger than + // touch slop + mIsDragging = Math.sqrt((dx * dx) + (dy * dy)) >= mTouchSlop; + } + + if (mIsDragging) { + mListener.onDrag(dx, dy); + mLastTouchX = x; + mLastTouchY = y; + + if (null != mVelocityTracker) { + mVelocityTracker.addMovement(ev); + } + } + break; + } + + case MotionEvent.ACTION_CANCEL: { + // Recycle Velocity Tracker + if (null != mVelocityTracker) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + break; + } + + case MotionEvent.ACTION_UP: { + if (mIsDragging) { + if (null != mVelocityTracker) { + mLastTouchX = getActiveX(ev); + mLastTouchY = getActiveY(ev); + + // Compute velocity within the last 1000ms + mVelocityTracker.addMovement(ev); + mVelocityTracker.computeCurrentVelocity(1000); + + final float vX = mVelocityTracker.getXVelocity(), vY = mVelocityTracker + .getYVelocity(); + + // If the velocity is greater than minVelocity, call + // listener + if (Math.max(Math.abs(vX), Math.abs(vY)) >= mMinimumVelocity) { + mListener.onFling(mLastTouchX, mLastTouchY, -vX, + -vY); + } + } + } + + // Recycle Velocity Tracker + if (null != mVelocityTracker) { + mVelocityTracker.recycle(); + mVelocityTracker = null; + } + break; + } + } + + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/EclairGestureDetector.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/EclairGestureDetector.java new file mode 100644 index 0000000..08f730c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/EclairGestureDetector.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.gestures; + +import android.annotation.TargetApi; +import android.content.Context; +import android.view.MotionEvent; + +import cn.shangyu.gdxzExpert.ecdemo.photoview.Compat; + +@TargetApi(5) +public class EclairGestureDetector extends CupcakeGestureDetector { + + private static final int INVALID_POINTER_ID = -1; + private int mActivePointerId = INVALID_POINTER_ID; + private int mActivePointerIndex = 0; + + public EclairGestureDetector(Context context) { + super(context); + } + + @Override + float getActiveX(MotionEvent ev) { + try { + return ev.getX(mActivePointerIndex); + } catch (Exception e) { + return ev.getX(); + } + } + + @Override + float getActiveY(MotionEvent ev) { + try { + return ev.getY(mActivePointerIndex); + } catch (Exception e) { + return ev.getY(); + } + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + final int action = ev.getAction(); + switch (action & MotionEvent.ACTION_MASK) { + case MotionEvent.ACTION_DOWN: + mActivePointerId = ev.getPointerId(0); + break; + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + mActivePointerId = INVALID_POINTER_ID; + break; + case MotionEvent.ACTION_POINTER_UP: + // Ignore deprecation, ACTION_POINTER_ID_MASK and + // ACTION_POINTER_ID_SHIFT has same value and are deprecated + // You can have either deprecation or lint target api warning + final int pointerIndex = Compat.getPointerIndex(ev.getAction()); + final int pointerId = ev.getPointerId(pointerIndex); + if (pointerId == mActivePointerId) { + // This was our active pointer going up. Choose a new + // active pointer and adjust accordingly. + final int newPointerIndex = pointerIndex == 0 ? 1 : 0; + mActivePointerId = ev.getPointerId(newPointerIndex); + mLastTouchX = ev.getX(newPointerIndex); + mLastTouchY = ev.getY(newPointerIndex); + } + break; + } + + mActivePointerIndex = ev + .findPointerIndex(mActivePointerId != INVALID_POINTER_ID ? mActivePointerId + : 0); + return super.onTouchEvent(ev); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/FroyoGestureDetector.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/FroyoGestureDetector.java new file mode 100644 index 0000000..07337b5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/FroyoGestureDetector.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.gestures; + +import android.annotation.TargetApi; +import android.content.Context; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; + +@TargetApi(8) +public class FroyoGestureDetector extends EclairGestureDetector { + + protected final ScaleGestureDetector mDetector; + + public FroyoGestureDetector(Context context) { + super(context); + ScaleGestureDetector.OnScaleGestureListener mScaleListener = new ScaleGestureDetector.OnScaleGestureListener() { + + @Override + public boolean onScale(ScaleGestureDetector detector) { + float scaleFactor = detector.getScaleFactor(); + + if (Float.isNaN(scaleFactor) || Float.isInfinite(scaleFactor)) + return false; + + mListener.onScale(scaleFactor, + detector.getFocusX(), detector.getFocusY()); + return true; + } + + @Override + public boolean onScaleBegin(ScaleGestureDetector detector) { + return true; + } + + @Override + public void onScaleEnd(ScaleGestureDetector detector) { + // NO-OP + } + }; + mDetector = new ScaleGestureDetector(context, mScaleListener); + } + + @Override + public boolean isScaling() { + return mDetector.isInProgress(); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + mDetector.onTouchEvent(ev); + return super.onTouchEvent(ev); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/GestureDetector.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/GestureDetector.java new file mode 100644 index 0000000..b29b36a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/GestureDetector.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.gestures; + +import android.view.MotionEvent; + +public interface GestureDetector { + + public boolean onTouchEvent(MotionEvent ev); + + public boolean isScaling(); + + public void setOnGestureListener(OnGestureListener listener); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/OnGestureListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/OnGestureListener.java new file mode 100644 index 0000000..11693dc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/OnGestureListener.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.gestures; + +public interface OnGestureListener { + + public void onDrag(float dx, float dy); + + public void onFling(float startX, float startY, float velocityX, + float velocityY); + + public void onScale(float scaleFactor, float focusX, float focusY); + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/VersionedGestureDetector.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/VersionedGestureDetector.java new file mode 100644 index 0000000..873e423 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/gestures/VersionedGestureDetector.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.ecdemo.photoview.gestures; + +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ + +import android.content.Context; +import android.os.Build; + +public final class VersionedGestureDetector { + + public static GestureDetector newInstance(Context context, + OnGestureListener listener) { + final int sdkVersion = Build.VERSION.SDK_INT; + GestureDetector detector; + + if (sdkVersion < Build.VERSION_CODES.ECLAIR) { + detector = new CupcakeGestureDetector(context); + } else if (sdkVersion < Build.VERSION_CODES.FROYO) { + detector = new EclairGestureDetector(context); + } else { + detector = new FroyoGestureDetector(context); + } + + detector.setOnGestureListener(listener); + + return detector; + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LogManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LogManager.java new file mode 100644 index 0000000..80f5b94 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LogManager.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.log; + +/** + * class that holds the {@link Logger} for this library, defaults to {@link LoggerDefault} to send logs to android {@link android.util.Log} + */ +public final class LogManager { + + private static Logger logger = new LoggerDefault(); + + public static void setLogger(Logger newLogger) { + logger = newLogger; + } + + public static Logger getLogger() { + return logger; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/Logger.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/Logger.java new file mode 100644 index 0000000..0d9bc7b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/Logger.java @@ -0,0 +1,116 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.log; + +/** + * interface for a logger class to replace the static calls to {@link android.util.Log} + */ +public interface Logger { + /** + * Send a {@link android.util.Log#VERBOSE} log message. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + */ + int v(String tag, String msg); + + /** + * Send a {@link android.util.Log#VERBOSE} log message and log the exception. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + * @param tr An exception to log + */ + int v(String tag, String msg, Throwable tr); + + /** + * Send a {@link android.util.Log#DEBUG} log message. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + */ + int d(String tag, String msg); + + /** + * Send a {@link android.util.Log#DEBUG} log message and log the exception. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + * @param tr An exception to log + */ + int d(String tag, String msg, Throwable tr); + + /** + * Send an {@link android.util.Log#INFO} log message. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + */ + int i(String tag, String msg); + + /** + * Send a {@link android.util.Log#INFO} log message and log the exception. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + * @param tr An exception to log + */ + int i(String tag, String msg, Throwable tr); + + /** + * Send a {@link android.util.Log#WARN} log message. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + */ + int w(String tag, String msg); + + /** + * Send a {@link android.util.Log#WARN} log message and log the exception. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + * @param tr An exception to log + */ + int w(String tag, String msg, Throwable tr); + + /** + * Send an {@link android.util.Log#ERROR} log message. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + */ + int e(String tag, String msg); + + /** + * Send a {@link android.util.Log#ERROR} log message and log the exception. + * + * @param tag Used to identify the source of a log message. It usually identifies + * the class or activity where the log call occurs. + * @param msg The message you would like logged. + * @param tr An exception to log + */ + int e(String tag, String msg, Throwable tr); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LoggerDefault.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LoggerDefault.java new file mode 100644 index 0000000..c8cc7bc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/log/LoggerDefault.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.log; + +import android.util.Log; + +/** + * Helper class to redirect {@link LogManager#logger} to {@link Log} + */ +public class LoggerDefault implements Logger { + + @Override + public int v(String tag, String msg) { + return Log.v(tag, msg); + } + + @Override + public int v(String tag, String msg, Throwable tr) { + return Log.v(tag, msg, tr); + } + + @Override + public int d(String tag, String msg) { + return Log.d(tag, msg); + } + + @Override + public int d(String tag, String msg, Throwable tr) { + return Log.d(tag, msg, tr); + } + + @Override + public int i(String tag, String msg) { + return Log.i(tag, msg); + } + + @Override + public int i(String tag, String msg, Throwable tr) { + return Log.i(tag, msg, tr); + } + + @Override + public int w(String tag, String msg) { + return Log.w(tag, msg); + } + + @Override + public int w(String tag, String msg, Throwable tr) { + return Log.w(tag, msg, tr); + } + + @Override + public int e(String tag, String msg) { + return Log.e(tag, msg); + } + + @Override + public int e(String tag, String msg, Throwable tr) { + return Log.e(tag, msg, tr); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/GingerScroller.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/GingerScroller.java new file mode 100644 index 0000000..3c92633 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/GingerScroller.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.scrollerproxy; + +import android.annotation.TargetApi; +import android.content.Context; +import android.widget.OverScroller; + +@TargetApi(9) +public class GingerScroller extends ScrollerProxy { + + protected final OverScroller mScroller; + private boolean mFirstScroll = false; + + public GingerScroller(Context context) { + mScroller = new OverScroller(context); + } + + @Override + public boolean computeScrollOffset() { + // Workaround for first scroll returning 0 for the direction of the edge it hits. + // Simply recompute values. + if (mFirstScroll) { + mScroller.computeScrollOffset(); + mFirstScroll = false; + } + return mScroller.computeScrollOffset(); + } + + @Override + public void fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY, + int overX, int overY) { + mScroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY, overX, overY); + } + + @Override + public void forceFinished(boolean finished) { + mScroller.forceFinished(finished); + } + + @Override + public boolean isFinished() { + return mScroller.isFinished(); + } + + @Override + public int getCurrX() { + return mScroller.getCurrX(); + } + + @Override + public int getCurrY() { + return mScroller.getCurrY(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/IcsScroller.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/IcsScroller.java new file mode 100644 index 0000000..60d79c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/IcsScroller.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.scrollerproxy; + +import android.annotation.TargetApi; +import android.content.Context; + +@TargetApi(14) +public class IcsScroller extends GingerScroller { + + public IcsScroller(Context context) { + super(context); + } + + @Override + public boolean computeScrollOffset() { + return mScroller.computeScrollOffset(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/PreGingerScroller.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/PreGingerScroller.java new file mode 100644 index 0000000..e701030 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/PreGingerScroller.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.scrollerproxy; + +import android.content.Context; +import android.widget.Scroller; + +public class PreGingerScroller extends ScrollerProxy { + + private final Scroller mScroller; + + public PreGingerScroller(Context context) { + mScroller = new Scroller(context); + } + + @Override + public boolean computeScrollOffset() { + return mScroller.computeScrollOffset(); + } + + @Override + public void fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, int maxY, + int overX, int overY) { + mScroller.fling(startX, startY, velocityX, velocityY, minX, maxX, minY, maxY); + } + + @Override + public void forceFinished(boolean finished) { + mScroller.forceFinished(finished); + } + + public boolean isFinished() { + return mScroller.isFinished(); + } + + @Override + public int getCurrX() { + return mScroller.getCurrX(); + } + + @Override + public int getCurrY() { + return mScroller.getCurrY(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/ScrollerProxy.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/ScrollerProxy.java new file mode 100644 index 0000000..a261f8a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/photoview/scrollerproxy/ScrollerProxy.java @@ -0,0 +1,48 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.ecdemo.photoview.scrollerproxy; + +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; + +public abstract class ScrollerProxy { + + public static ScrollerProxy getScroller(Context context) { + if (VERSION.SDK_INT < VERSION_CODES.GINGERBREAD) { + return new PreGingerScroller(context); + } else if (VERSION.SDK_INT < VERSION_CODES.ICE_CREAM_SANDWICH) { + return new GingerScroller(context); + } else { + return new IcsScroller(context); + } + } + + public abstract boolean computeScrollOffset(); + + public abstract void fling(int startX, int startY, int velocityX, int velocityY, int minX, int maxX, int minY, + int maxY, int overX, int overY); + + public abstract void forceFinished(boolean finished); + + public abstract boolean isFinished(); + + public abstract int getCurrX(); + + public abstract int getCurrY(); + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/AbstractSQLManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/AbstractSQLManager.java new file mode 100644 index 0000000..6ac46d6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/AbstractSQLManager.java @@ -0,0 +1,1575 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import android.content.Context; +import android.content.res.AssetManager; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.database.sqlite.SQLiteOpenHelper; +import android.util.Log; + +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; + + +/** + * 数据库访问接口 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-11 + * @version 4.0 + */ +public abstract class AbstractSQLManager { + + public static final String TAG = AbstractSQLManager.class.getName(); + + private static DatabaseHelper databaseHelper; + private static SQLiteDatabase sqliteDB; + + public AbstractSQLManager() { + + openDatabase(BaseApplication.getInstance(), + CCPAppManager.getVersionCode()); + + } + + private void openDatabase(Context context, int databaseVersion) { + + /** + * 12.4切换账号或者退出登陆 与 应用重新启动 所加载的消息数据库不一致,故修改每次都重新创建对象 + * */ +// if (databaseHelper == null) { + databaseHelper = new DatabaseHelper(context, this, databaseVersion); +// } + + // DatabaseManager.initializeInstance(databaseHelper); + if (sqliteDB == null||!sqliteDB.isOpen()) { + sqliteDB = databaseHelper.getWritableDatabase(); + } + // sqliteDB = DatabaseManager.getInstance().openDatabase(); + + + } + + public void destroy() { + try { + if (databaseHelper != null) { + databaseHelper.close(); + } + closeDB(); + } catch (Exception e) { + LogUtil.e(e.toString()); + } + } + + private void open(boolean isReadonly) { + if (sqliteDB == null) { + if (isReadonly) { + sqliteDB = databaseHelper.getReadableDatabase(); + } else { + sqliteDB = databaseHelper.getWritableDatabase();/* + * DatabaseManager. + * getInstance + * (). + * openDatabase + * () + */ + ; + } + } + } + + public final void reopen() { + closeDB(); + open(false); + LogUtil.w("[SQLiteManager] reopen this db."); + } + + private void closeDB() { + if (sqliteDB != null) { + // DatabaseManager.getInstance().closeDatabase(); + sqliteDB = null; + sqliteDB.close(); + sqliteDB = null; + } + } + + protected final SQLiteDatabase sqliteDB() { + open(false); + return sqliteDB; + } + + /** + * 创建基础表结构 + */ + static class DatabaseHelper extends SQLiteOpenHelper { + + /** 数据库名称 */ + static final String DATABASE_NAME = "ECSDK_Msg.db"; + static final String DESC = "DESC"; + static final String ASC = "ASC"; + static final String TABLES_NAME_IM_SESSION = "im_thread"; + static final String TABLES_NAME_IM_MESSAGE = "im_message"; + /** 患者列表数据库包括我的患者,专家,公益咨询等患者信息列表 */ + static final String TABLES_NAME_IM_PATIENT = "patient"; + static final String TABLES_NAME_DOWNLOAD = "download"; + // 万方 + static final String TABLES_NAME_WFDOWNLOAD = "wfdownload"; + //课件 + static final String TABLES_NAME_COURSEWARE = "courseware"; + static final String TABLES_NAME_CONTACT = "contacts"; + static final String TABLES_NAME_GROUPS = "groups"; + static final String TABLES_NAME_GROUPS_2 = "groups2"; + static final String TABLES_NAME_GROUP_MEMBERS = "group_members"; + static final String TABLES_NAME_SYSTEM_NOTICE = "system_notice"; + + private AbstractSQLManager mAbstractSQLManager; + static final String TABLES_NAME_ENDOWNLOAD = "endownload"; + public DatabaseHelper(Context context, AbstractSQLManager manager, + int version) { + //12.4 + this(context, manager, SharePrefUtil.getString(context, "USERID","") + + "_" + DATABASE_NAME, null, version); +// this(context, manager, CCPAppManager.getClientUser().getUserId() +// + "_" + DATABASE_NAME, null, version); + } + + public DatabaseHelper(Context context, AbstractSQLManager manager, + String name, CursorFactory factory, int version) { + super(context, name, factory, version); + mAbstractSQLManager = manager; + } + + @Override + public void onCreate(SQLiteDatabase db) { + createTables(db); + + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + // onTriggerUpgrade(db); + // if(oldVersion < 9) { + // onUpdateOld(db); + // } + // createTables(db); + // if(oldVersion < 9) { + // onGroupUpgrade(db); + // } + } + + private void onUpdateOld(SQLiteDatabase db) { + LogUtil.i("onUpdateOld================="); + String[] sqls = new String[] { TABLES_NAME_IM_SESSION, + TABLES_NAME_IM_MESSAGE }; + String[] dropTrigger = new String[] { "delete_obsolete_threads_im", + "im_update_thread_on_delete", + "im_update_thread_on_delete2", + "im_update_thread_on_insert", + "im_update_thread_on_insert2", + "im_update_thread_read_on_update", + "im_update_thread_on_update", "thread_update_im_on_delete" }; + for (String sql : sqls) { + db.execSQL("DROP TABLE IF EXISTS " + sql); + } + + for (String sql : dropTrigger) { + db.execSQL("DROP TRIGGER IF EXISTS " + sql); + } + } + + /** + * 更新触发器 + * + * @param db + */ + private void onTriggerUpgrade(SQLiteDatabase db) { + LogUtil.i("onTriggerUpgrade================="); + String sql = "DROP TRIGGER IF EXISTS 'im_update_thread_read_on_update'"; + String sql1 = "DROP TRIGGER IF EXISTS 'im_update_thread_on_delete'"; + LogUtil.v(TAG + ":" + sql1); + db.execSQL(sql); + db.execSQL(sql1); + + String sql2 = "DROP TRIGGER IF EXISTS 'im_update_thread_on_insert'"; + LogUtil.v(TAG + ":" + sql2); + db.execSQL(sql2); + } + + /** + * @param db + */ + private void createTables(SQLiteDatabase db) { + // 创建联系人表 + createTableForContacts(db); + // 创建Im信息表 + createTableForIMessage(db); + // 创建im会话表 + createTableForISession(db); + // 创建触发器 + createTriggerForIMessage(db); + // 创建群组表 + createTaleForIMGroups(db); + /** 创建群组成员表结构 */ + createTableGroupMembers(db); + + /** 创建群组通知消息表和触发器 */ + createTableSystemNotice(db); +// createTriggerForSystemNotice(db); + + createImgInfoTable(db); + /** 创建患者成员表结构 */ + createTablePatient(db); + /** 创建下载表结构 */ + createTableDownload(db); + /** 创建下载万方表结构 */ + createTableWFDownload(db); + /** 创建下载课件表结构 */ + createTableCoursewareDownload(db); + } + + public SQLiteDatabase getPath() { + String filePath = "WFLibrary.db"; + File jhPath = new File(filePath); + return SQLiteDatabase.openOrCreateDatabase(jhPath, null); + + } + + /** + * 创建联系人表 + * + * @param db + */ + void createTableForContacts(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_CONTACT + + " (" + ContactsColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + ContactsColumn.CONTACT_ID + + " TEXT UNIQUE ON CONFLICT ABORT, " + ContactsColumn.type + + " INTEGER, " + ContactsColumn.USERNAME + " TEXT, " + + ContactsColumn.SUBACCOUNT + " TEXT, " + + ContactsColumn.TOKEN + " TEXT, " + + ContactsColumn.SUBTOKEN + " TEXT, " + + ContactsColumn.REMARK + " TEXT " + ")"; + LogUtil.v(TAG + ":" + sql); + db.execSQL(sql); + } + + /** + * 创建患者表 + * + * @param db + */ + void createTablePatient(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_IM_PATIENT + + " (" + PatientColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + PatientColumn.UUID + " TEXT UNIQUE ON CONFLICT ABORT, " + + PatientColumn.REALNAME + " TEXT, " + PatientColumn.MOBILE + + " TEXT, " + PatientColumn.PHOTO + " TEXT, " + + PatientColumn.SEX + " INTEGER DEFAULT 0, " + + PatientColumn.NATION + " INTEGER, " + + PatientColumn.PROVID + " INTEGER, " + + PatientColumn.CITYID + " INTEGER, " + + PatientColumn.COUNTYID + " INTEGER, " + + PatientColumn.BIRTHDATE + " TEXT, " + PatientColumn.TYPE + + " TEXT " + ")"; + LogUtil.v(TAG + "患者表:" + sql); + db.execSQL(sql); + } + + /** + * 创建下载数据库 + * + * + * @param db + */ + void createTableDownload(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_DOWNLOAD + + " (" + DownladColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + DownladColumn.UUID + " TEXT UNIQUE ON CONFLICT ABORT, " + + DownladColumn.TITLE + " TEXT, " + DownladColumn.SUMMARY + + " TEXT, " + DownladColumn.TYPENAME + " TEXT, " + + DownladColumn.FILEFORMAT + " TEXT, " + + DownladColumn.STATE + " INTEGER DEFAULT 0, " + + DownladColumn.PATH + " TEXT, " + DownladColumn.FILEPATH + + " TEXT, " + DownladColumn.FILESIZE + " TEXT, " + + DownladColumn.TOTALPROGRESS + " TEXT, " + + DownladColumn.CURRENTPROGRESS + " TEXT, " + + DownladColumn.TIME + " TEXT " + ")"; + db.execSQL(sql); + } + + /** + * 创建万方下载数据库 + * + * @param db + */ + void createTableWFDownload(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_WFDOWNLOAD + + " (" + DownladColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + DownladColumn.UUID + " TEXT UNIQUE ON CONFLICT ABORT, " + + DownladColumn.TITLE + " TEXT, " + DownladColumn.SUMMARY + + " TEXT, " + DownladColumn.TYPENAME + " TEXT, " + + DownladColumn.FILEFORMAT + " TEXT, " + + DownladColumn.STATE + " INTEGER DEFAULT 0, " + + DownladColumn.PATH + " TEXT, " + DownladColumn.FILEPATH + + " TEXT, " + DownladColumn.FILESIZE + " TEXT, " + + DownladColumn.TOTALPROGRESS + " TEXT, " + + DownladColumn.CURRENTPROGRESS + " TEXT, " + + DownladColumn.TIME + " TEXT " + ")"; + + db.execSQL(sql); + } + /** + * 创建课件下载数据库 + * + * @param db + */ + void createTableCoursewareDownload(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_COURSEWARE + + " (" + DownladColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + DownladColumn.UUID + " TEXT UNIQUE ON CONFLICT ABORT, " + + DownladColumn.TITLE + " TEXT, " + + DownladColumn.SUMMARY + " TEXT, " + + DownladColumn.TYPENAME + " TEXT, " + + DownladColumn.FILEFORMAT + " TEXT, " + + DownladColumn.STATE + " INTEGER DEFAULT 0, " + + DownladColumn.PATH + " TEXT, " + + DownladColumn.FILEPATH+ " TEXT, " + + DownladColumn.FILESIZE + " TEXT, " + + DownladColumn.TOTALPROGRESS + " TEXT, " + + DownladColumn.CURRENTPROGRESS + " TEXT, " + + DownladColumn.TIME + " TEXT " + ")"; + + db.execSQL(sql); + } + /** + * IM消息表 + * + * @param db + */ + void createTableForIMessage(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_IM_MESSAGE + + " (" + IMessageColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + IMessageColumn.MESSAGE_ID + + " TEXT UNIQUE ON CONFLICT ABORT, " + + IMessageColumn.OWN_THREAD_ID + " INTEGER, " + + IMessageColumn.CREATE_DATE + " TEXT, " + + IMessageColumn.RECEIVE_DATE + " TEXT, " + + IMessageColumn.sender + " TEXT, " + IMessageColumn.BODY + + " TEXT, " + IMessageColumn.USER_DATA + " TEXT, " + + IMessageColumn.FILE_URL + " TEXT, " + + IMessageColumn.FILE_PATH + " TEXT, " + + IMessageColumn.BOX_TYPE + " INTEGER DEFAULT 0, " + + IMessageColumn.SEND_STATUS + " INTEGER DEFAULT 0, " + + IMessageColumn.MESSAGE_TYPE + " INTEGER DEFAULT 0, " + + IMessageColumn.READ_STATUS + " INTEGER DEFAULT 0, " + + IMessageColumn.VERSION + " INTEGER DEFAULT 0, " + + IMessageColumn.DURATION + " INTEGER DEFAULT 0" + ")"; + LogUtil.v(TAG + ":" + sql); + db.execSQL(sql); + } + + /** + * IM消息会话 + * + * @param db + */ + void createTableForISession(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_IM_SESSION + + " (" + IThreadColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + IThreadColumn.THREAD_ID + " TEXT, " + + IThreadColumn.CONTACT_ID + " TEXT , " + + IThreadColumn.UNREAD_COUNT + " INTEGER DEFAULT 0, " + + IThreadColumn.SNIPPET + " TEXT, " + IThreadColumn.DATE + + " TEXT, " + IThreadColumn.BOX_TYPE + + " INTEGER DEFAULT 0, " + IThreadColumn.SEND_STATUS + + " INTEGER DEFAULT 0, " + IThreadColumn.MESSAGE_TYPE + + " INTEGER DEFAULT 0, " + IThreadColumn.MESSAGE_COUNT + + " INTEGER DEFAULT 0, " + IThreadColumn.SEND_TYPE + + " TEXT " + ")"; + LogUtil.v(TAG + ":" + sql); + db.execSQL(sql); + } + + /** + * 创建群组 + * + * @param db + */ + void createTaleForIMGroups(SQLiteDatabase db) { + String sql2 = "CREATE TABLE IF NOT EXISTS " + TABLES_NAME_GROUPS_2 + + " (" + GroupColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + GroupColumn.GROUP_ID + " TEXT UNIQUE ON CONFLICT ABORT, " + + GroupColumn.GROUP_NAME + " TEXT, " + + GroupColumn.GROUP_OWNER + " TEXT, " + + GroupColumn.GROUP_DECLARED + " TEXT, " + + GroupColumn.GROUP_TYPE + " INTEGER DEFAULT 0, " + + GroupColumn.GROUP_PERMISSION + " INTEGER DEFAULT 0, " + + GroupColumn.GROUP_MEMBER_COUNTS + " INTEGER DEFAULT 0, " + + GroupColumn.GROUP_JOINED + " INTEGER DEFAULT 0, " + + GroupColumn.GROUP_ISNOTICE + " INTEGER DEFAULT 1, " + + GroupColumn.GROUP_DATE_CREATED + " TEXT, " + + GroupColumn.GROUP_Discussion + " INTEGER DEFAULT 0" + + ")"; + LogUtil.v(TAG + ":" + sql2); + db.execSQL(sql2); + } + + /** + * 创建群组成员数据库 + * + * @param db + */ + void createTableGroupMembers(SQLiteDatabase db) { + String sql = "CREATE TABLE IF NOT EXISTS " + + TABLES_NAME_GROUP_MEMBERS + " (" + GroupMembersColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + GroupMembersColumn.OWN_GROUP_ID + " TEXT, " + + GroupMembersColumn.BIRTH + " TEXT, " + + GroupMembersColumn.MAIL + " TEXT, " + + GroupMembersColumn.REMARK + " TEXT, " + + GroupMembersColumn.TEL + " TEXT, " + + GroupMembersColumn.SIGN + " TEXT, " + + GroupMembersColumn.ROLE + " INTEGER DEFAULT 1, " + + GroupMembersColumn.ISBAN + " INTEGER DEFAULT 0, " + + GroupMembersColumn.RULE + " INTEGER DEFAULT 0, " + + GroupMembersColumn.SEX + " INTEGER DEFAULT 0, " + + GroupMembersColumn.VOIPACCOUNT + " TEXT " + ")"; + LogUtil.v(TAG + ":" + sql); + db.execSQL(sql); + } + + /** + * 创建系统通知表 + * + * @param db + */ + void createTableSystemNotice(SQLiteDatabase db) { + String sql = "CREATE TABLE IF NOT EXISTS " + + TABLES_NAME_SYSTEM_NOTICE + " (" + SystemNoticeColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + SystemNoticeColumn.NOTICE_ID + + " TEXT UNIQUE ON CONFLICT ABORT, " + + SystemNoticeColumn.OWN_THREAD_ID + " INTEGER, " + + SystemNoticeColumn.ADMIN + " TEXT, " + + SystemNoticeColumn.NOTICE_VERIFYMSG + " TEXT, " + + SystemNoticeColumn.NOTICE_DECLARED + " TEXT, " + + SystemNoticeColumn.NOTICE_GROUPID + " TEXT, " + + SystemNoticeColumn.NOTICE_GROUPNAME + " TEXT, " + + SystemNoticeColumn.NOTICE_NICKNAME + " TEXT, " + + SystemNoticeColumn.NOTICE_OPERATION_STATE + " INTEGER, " + + SystemNoticeColumn.NOTICE_VERSION + " INTEGER, " + + SystemNoticeColumn.NOTICE_READ_STATUS + " INTEGER, " + + SystemNoticeColumn.NOTICE_TYPE + " INTEGER, " + + SystemNoticeColumn.NOTICE_DATECREATED + " TEXT, " + + SystemNoticeColumn.NOTICE_WHO + " TEXT " + ")"; + LogUtil.v(TAG + ":" + sql); + db.execSQL(sql); + } + + /** + * 创建IM消息会话表触发器 + * + * @param db + */ + void createTriggerForIMessage(SQLiteDatabase db) { + + LogUtil.i("createTriggerForIMessage=================" + db); + + String sql = "CREATE TRIGGER IF NOT EXISTS delete_obsolete_threads_im AFTER DELETE ON " + + TABLES_NAME_IM_MESSAGE + + " BEGIN " + + " DELETE FROM " + + TABLES_NAME_IM_SESSION + + " WHERE id = old." + + IMessageColumn.OWN_THREAD_ID + + " AND id NOT IN ( SELECT " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + ");" + " END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + sql = "CREATE TRIGGER IF NOT EXISTS im_update_thread_on_delete AFTER DELETE ON " + + TABLES_NAME_IM_MESSAGE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.MESSAGE_COUNT + + " = (SELECT COUNT(" + + TABLES_NAME_IM_MESSAGE + + ".id) FROM " + + TABLES_NAME_IM_MESSAGE + + " LEFT JOIN " + + TABLES_NAME_IM_SESSION + + " ON " + + TABLES_NAME_IM_SESSION + + ".id = " + + IMessageColumn.OWN_THREAD_ID + + " WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " AND " + + TABLES_NAME_IM_MESSAGE + + "." + + IMessageColumn.BOX_TYPE + + " != 3 ) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SNIPPET + + " = (SELECT " + + IThreadColumn.SNIPPET + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.BODY + + " AS " + + IThreadColumn.SNIPPET + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.DATE + + " = (SELECT " + + IMessageColumn.CREATE_DATE + + " FROM (SELECT " + + IMessageColumn.CREATE_DATE + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.CREATE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.BOX_TYPE + + " = (SELECT " + + IMessageColumn.BOX_TYPE + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.BOX_TYPE + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SEND_STATUS + + " = (SELECT " + + IMessageColumn.SEND_STATUS + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.SEND_STATUS + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.MESSAGE_TYPE + + " = (SELECT " + + IMessageColumn.MESSAGE_TYPE + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.MESSAGE_TYPE + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + "; " + // + "UPDATE " + TABLES_NAME_IM_SESSION + " SET " + + // IThreadColumn.SEND_TYPE + " = (SELECT " + + // IMessageColumn.USER_DATA + " FROM (SELECT " + + // IMessageColumn.RECEIVE_DATE + ", " + + // IMessageColumn.USER_DATA + ", " + + // IMessageColumn.OWN_THREAD_ID + " FROM " + + // TABLES_NAME_IM_MESSAGE + ") WHERE " + + // IMessageColumn.OWN_THREAD_ID + " = old." + + // IMessageColumn.OWN_THREAD_ID+ " ORDER BY " + + // IMessageColumn.RECEIVE_DATE + " DESC LIMIT 1) WHERE " + + // TABLES_NAME_IM_SESSION+ ".id = old." + + // IMessageColumn.OWN_THREAD_ID + "; " + + + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + sql = "CREATE TRIGGER IF NOT EXISTS im_update_thread_on_delete2 AFTER DELETE ON " + + TABLES_NAME_IM_MESSAGE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.CONTACT_ID + + " = (SELECT " + + IMessageColumn.sender + + " FROM (SELECT " + + IMessageColumn.sender + + ", " + + IMessageColumn.CREATE_DATE + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") " + + " WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.CREATE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + "; " + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + sql = "CREATE TRIGGER IF NOT EXISTS im_update_thread_on_insert AFTER INSERT ON " + + TABLES_NAME_IM_MESSAGE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.DATE + + " = new." + + IMessageColumn.CREATE_DATE + + "," + + IThreadColumn.SNIPPET + + " = new." + + IMessageColumn.BODY + + ", " + + IThreadColumn.BOX_TYPE + + "=new." + + IMessageColumn.BOX_TYPE + + "," + + IThreadColumn.SEND_STATUS + + "=new." + + IMessageColumn.SEND_STATUS + + "," + + IThreadColumn.MESSAGE_TYPE + + "=new." + + IMessageColumn.MESSAGE_TYPE + + " WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.MESSAGE_COUNT + + " = (SELECT COUNT(" + + TABLES_NAME_IM_MESSAGE + + ".id) FROM " + + TABLES_NAME_IM_MESSAGE + + " LEFT JOIN " + + TABLES_NAME_IM_SESSION + + " ON " + + TABLES_NAME_IM_SESSION + + ".id = " + + IMessageColumn.OWN_THREAD_ID + + " WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = new." + + IMessageColumn.OWN_THREAD_ID + + " AND " + + TABLES_NAME_IM_MESSAGE + + "." + + IMessageColumn.BOX_TYPE + + " != 3 ) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.UNREAD_COUNT + + " =(" + + "(SELECT " + + IThreadColumn.UNREAD_COUNT + + " FROM " + + TABLES_NAME_IM_SESSION + + " WHERE " + + IThreadColumn.ID + + " = new." + + IMessageColumn.OWN_THREAD_ID + + ")+1) " + + " WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + IMessageColumn.OWN_THREAD_ID + + " AND new." + + IMessageColumn.BOX_TYPE + " == 1 ;" + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + sql = "CREATE TRIGGER IF NOT EXISTS im_update_thread_on_insert2 AFTER INSERT ON " + + TABLES_NAME_IM_MESSAGE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.CONTACT_ID + + " = new." + + IMessageColumn.sender + + " WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + IMessageColumn.OWN_THREAD_ID + "; " + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + /* + * sql = + * "CREATE TRIGGER IF NOT EXISTS im_update_thread_read_on_update AFTER UPDATE OF " + * + IMessageColumn.READ_STATUS + " ON " + TABLES_NAME_IM_MESSAGE + * +" " + "BEGIN " + "UPDATE " + TABLES_NAME_IM_SESSION + " SET " + * + IThreadColumn.UNREAD_COUNT + " =(SELECT COUNT(*) FROM " + + * TABLES_NAME_IM_MESSAGE + " WHERE " + IMessageColumn.READ_STATUS + + * " = 0 AND " + IMessageColumn.BOX_TYPE + " = 1 AND " + + * IMessageColumn.OWN_THREAD_ID + " = old." + + * IMessageColumn.OWN_THREAD_ID + ") WHERE " + + * TABLES_NAME_IM_SESSION + ".id = old." + + * IMessageColumn.OWN_THREAD_ID + "; " + "END;"; + * LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + * db.execSQL(sql); + */ + + sql = "CREATE TRIGGER IF NOT EXISTS im_update_thread_on_update AFTER UPDATE ON " + + TABLES_NAME_IM_MESSAGE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.DATE + + " = (SELECT " + + IMessageColumn.CREATE_DATE + + " FROM (SELECT " + + IMessageColumn.CREATE_DATE + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.CREATE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SNIPPET + + " = (SELECT " + + IThreadColumn.SNIPPET + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.BODY + + " AS " + + IThreadColumn.SNIPPET + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.BOX_TYPE + + " = (SELECT " + + IMessageColumn.BOX_TYPE + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.BOX_TYPE + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SEND_STATUS + + " = (SELECT " + + IMessageColumn.SEND_STATUS + + " FROM (SELECT " + + IMessageColumn.RECEIVE_DATE + + ", " + + IMessageColumn.SEND_STATUS + + ", " + + IMessageColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_IM_MESSAGE + + ") WHERE " + + IMessageColumn.OWN_THREAD_ID + + " = old." + + IMessageColumn.OWN_THREAD_ID + + " ORDER BY " + + IMessageColumn.RECEIVE_DATE + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + IMessageColumn.OWN_THREAD_ID + "; " + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + // sql = + // "CREATE TRIGGER IF NOT EXISTS thread_update_im_on_delete AFTER DELETE ON " + // + TABLES_NAME_IM_SESSION +" " + // + "BEGIN DELETE FROM " + TABLES_NAME_IM_MESSAGE + " WHERE " + + // IMessageColumn.OWN_THREAD_ID + " = old." + IThreadColumn.ID + + // ";END;"; + // LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + // db.execSQL(sql); + + } + + /** + * 创建系统通知表触发器 + * + * @param db + */ + void createTriggerForSystemNotice(SQLiteDatabase db) { + String sql = "CREATE TRIGGER IF NOT EXISTS system_update_thread_on_delete AFTER DELETE ON " + + TABLES_NAME_SYSTEM_NOTICE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.MESSAGE_COUNT + + " = (SELECT COUNT(" + + TABLES_NAME_SYSTEM_NOTICE + + ".id) FROM " + + TABLES_NAME_SYSTEM_NOTICE + + " LEFT JOIN " + + TABLES_NAME_IM_SESSION + + " ON " + + TABLES_NAME_IM_SESSION + + ".id = " + + SystemNoticeColumn.OWN_THREAD_ID + + " WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + ") WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.UNREAD_COUNT + + " =(SELECT COUNT(*) FROM " + + TABLES_NAME_SYSTEM_NOTICE + + " WHERE " + + SystemNoticeColumn.NOTICE_READ_STATUS + + " = 0 AND " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + ") WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SNIPPET + + " = (SELECT " + + IThreadColumn.SNIPPET + + " FROM (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + ", " + + SystemNoticeColumn.NOTICE_VERIFYMSG + + " AS " + + IThreadColumn.SNIPPET + + ", " + + SystemNoticeColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_SYSTEM_NOTICE + + ") WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + " ORDER BY " + + SystemNoticeColumn.NOTICE_DATECREATED + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.DATE + + " = (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + " FROM (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + ", " + + SystemNoticeColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_SYSTEM_NOTICE + + ") WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + " ORDER BY " + + SystemNoticeColumn.NOTICE_DATECREATED + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.BOX_TYPE + + " = " +// + ECMessage.Direction.RECEIVE.ordinal() + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SEND_STATUS + + " = " +// + ECMessage.MessageStatus.SUCCESS.ordinal() + " ; " + + + + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + sql = "CREATE TRIGGER IF NOT EXISTS system_update_thread_on_insert AFTER INSERT ON " + + TABLES_NAME_SYSTEM_NOTICE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.DATE + + " = new." + + SystemNoticeColumn.NOTICE_DATECREATED + + "," + + IThreadColumn.SNIPPET + + " = new." + + SystemNoticeColumn.NOTICE_VERIFYMSG + + "," +// + IThreadColumn.BOX_TYPE +// + "=" +//// + ECMessage.Direction.RECEIVE.ordinal() +// + "," +// + IThreadColumn.SEND_STATUS +// + "=" +//// + ECMessage.MessageStatus.SUCCESS.ordinal() +// + "," + + IThreadColumn.MESSAGE_TYPE + + "=" + + GroupNoticeSqlManager.NOTICE_MSG_TYPE + + " WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.MESSAGE_COUNT + + " = (SELECT COUNT(" + + TABLES_NAME_SYSTEM_NOTICE + + ".id) FROM " + + TABLES_NAME_SYSTEM_NOTICE + + " LEFT JOIN " + + TABLES_NAME_IM_SESSION + + " ON " + + TABLES_NAME_IM_SESSION + + ".id = " + + SystemNoticeColumn.OWN_THREAD_ID + + " WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = new." + + SystemNoticeColumn.OWN_THREAD_ID + + " ) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SNIPPET + + " = (SELECT " + + IThreadColumn.SNIPPET + + " FROM (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + ", " + + SystemNoticeColumn.NOTICE_VERIFYMSG + + " AS " + + IThreadColumn.SNIPPET + + ", " + + SystemNoticeColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_SYSTEM_NOTICE + + ") WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = new." + + SystemNoticeColumn.OWN_THREAD_ID + + " ORDER BY " + + SystemNoticeColumn.NOTICE_DATECREATED + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.UNREAD_COUNT + + " =(SELECT COUNT(*) FROM " + + TABLES_NAME_SYSTEM_NOTICE + + " WHERE " + + SystemNoticeColumn.NOTICE_READ_STATUS + + " = 0 AND " + + SystemNoticeColumn.OWN_THREAD_ID + + " = new." + + SystemNoticeColumn.OWN_THREAD_ID + + ") WHERE " + + TABLES_NAME_IM_SESSION + + ".id = new." + + SystemNoticeColumn.OWN_THREAD_ID + "; " + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + sql = "CREATE TRIGGER IF NOT EXISTS system_update_thread_read_on_update AFTER UPDATE OF " + + SystemNoticeColumn.NOTICE_READ_STATUS + + " ON " + + TABLES_NAME_SYSTEM_NOTICE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.UNREAD_COUNT + + " =(SELECT COUNT(*) FROM " + + TABLES_NAME_SYSTEM_NOTICE + + " WHERE " + + SystemNoticeColumn.NOTICE_READ_STATUS + + " = 0 AND " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + ") WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + "; " + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + sql = "CREATE TRIGGER IF NOT EXISTS system_update_thread_on_update AFTER UPDATE ON " + + TABLES_NAME_SYSTEM_NOTICE + + " " + + "BEGIN " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.DATE + + " = (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + " FROM (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + ", " + + SystemNoticeColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_SYSTEM_NOTICE + + ") WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + " ORDER BY " + + SystemNoticeColumn.NOTICE_DATECREATED + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SNIPPET + + " = (SELECT " + + IThreadColumn.SNIPPET + + " FROM (SELECT " + + SystemNoticeColumn.NOTICE_DATECREATED + + ", " + + SystemNoticeColumn.NOTICE_VERIFYMSG + + " AS " + + IThreadColumn.SNIPPET + + ", " + + SystemNoticeColumn.OWN_THREAD_ID + + " FROM " + + TABLES_NAME_SYSTEM_NOTICE + + ") WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + SystemNoticeColumn.OWN_THREAD_ID + + " ORDER BY " + + SystemNoticeColumn.NOTICE_DATECREATED + + " DESC LIMIT 1) WHERE " + + TABLES_NAME_IM_SESSION + + ".id = old." + + SystemNoticeColumn.OWN_THREAD_ID + + "; " + + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.BOX_TYPE + + " = " +// + ECMessage.Direction.RECEIVE.ordinal() + + "; " + + "UPDATE " + + TABLES_NAME_IM_SESSION + + " SET " + + IThreadColumn.SEND_STATUS + + " = " +// + ECMessage.MessageStatus.SUCCESS.ordinal() + + " ; " + + "END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + + sql = "CREATE TRIGGER IF NOT EXISTS thread_update_system_on_delete AFTER DELETE ON " + + TABLES_NAME_IM_SESSION + + " " + + "BEGIN DELETE FROM " + + TABLES_NAME_SYSTEM_NOTICE + + " WHERE " + + SystemNoticeColumn.OWN_THREAD_ID + + " = old." + + IThreadColumn.ID + ";END;"; + LogUtil.d(LogUtil.getLogUtilsTag(AbstractSQLManager.class), sql); + db.execSQL(sql); + } + + public static void createImgInfoTable(SQLiteDatabase db) { + String sql = "CREATE TABLE IF NOT EXISTS " + + ImgInfoSqlManager.TABLES_NAME_IMGINFO + " ( " + + ImgInfoSqlManager.ImgInfoColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + ImgInfoSqlManager.ImgInfoColumn.MSGSVR_ID + " TEXT, " + + + ImgInfoSqlManager.ImgInfoColumn.OFFSET + " INTEGER, " + + ImgInfoSqlManager.ImgInfoColumn.TOTALLEN + " INTEGER, " + + ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH + " TEXT, " + + ImgInfoSqlManager.ImgInfoColumn.THUMBIMG_PATH + " TEXT, " + + ImgInfoSqlManager.ImgInfoColumn.CREATE_TIME + " TEXT, " + + ImgInfoSqlManager.ImgInfoColumn.MSG_LOCAL_ID + " TEXT, " + + ImgInfoSqlManager.ImgInfoColumn.STATUS + " INTEGER, " + + ImgInfoSqlManager.ImgInfoColumn.NET_TIMES + " TEXT " + + ")"; + + LogUtil.v(TAG + ":" + sql); + db.execSQL(sql); + } + } + + private static void onGroupUpgrade(SQLiteDatabase db) { + String sql3 = "insert into groups2 select * , 1 from groups "; + String sql4 = "delete from groups "; + db.execSQL(sql3); + LogUtil.v(TAG + ":" + sql3); + db.execSQL(sql4); + LogUtil.v(TAG + ":" + sql4); + } + + class BaseColumn { + public static final String ID = "ID"; + public static final String UNREAD_NUM = "unreadCount"; + } + + public class IThreadColumn extends BaseColumn { + // 会话id + public static final String THREAD_ID = "sessionId"; + // 总消息数 + public static final String MESSAGE_COUNT = "SumCount"; + // 最后一条消息发送者 + public static final String CONTACT_ID = "contactid"; + // 文本 + public static final String SNIPPET = "text"; + // 消息未读数 + public static final String UNREAD_COUNT = "unreadCount"; + // 消息的发送状态 + public static final String SEND_STATUS = "sendStatus"; + // 信箱类型 + public static final String BOX_TYPE = "boxType"; + // 消息时间 + public static final String DATE = "dateTime"; + // 消息类型 + public static final String MESSAGE_TYPE = "type"; + // 消息类型 + public static final String SEND_TYPE = "send_type"; + + } + + public class IMessageColumn extends BaseColumn { + + // 消息ID + public static final String MESSAGE_ID = "msgid"; + // 消息类型 + public static final String MESSAGE_TYPE = "msgType"; + // 会话ID + public static final String OWN_THREAD_ID = "sid"; + // 消息创建者 + public static final String sender = "sender"; + // 是否已读 + public static final String READ_STATUS = "isRead"; + // 文本 + public static final String BODY = "text"; + // 信箱类型 + public static final String BOX_TYPE = "box_type"; + // 发送状态 -1发送失败 0发送成功 1发送中 2接收成功(默认为0 接收的消息) + public static final String SEND_STATUS = "state"; + // 服务器时间 毫秒 + public static final String CREATE_DATE = "serverTime"; + // 入库本地时间 毫秒 + public static final String RECEIVE_DATE = "createdTime"; + // 用户自定义数据 + public static final String USER_DATA = "userData"; + // 下载路径 + public static final String FILE_URL = "url"; + // 文件本地路径 + public static final String FILE_PATH = "localPath"; + // 语音时间 + public static final String DURATION = "duration"; + public static final String VERSION = "version"; + // 备注 + public static final String REMARK = "remark"; + + } + + /** + * 联系人表 + */ + public class ContactsColumn extends BaseColumn { + /** 联系人账号 */ + public static final String CONTACT_ID = "contact_id"; + /** 联系人昵称 */ + public static final String USERNAME = "username"; + /** 联系人账号Token */ + public static final String TOKEN = "token"; + /** 联系人子账号 */ + public static final String SUBACCOUNT = "subAccount"; + /** 联系人子账号Token */ + public static final String SUBTOKEN = "subToken"; + /** 联系人类型 */ + public static final String type = "type"; + /** 备注 */ + public static final String REMARK = "remark"; + } + + /** + * 患者表 + */ + public class PatientColumn extends BaseColumn { + /** 患者uuid */ + public static final String UUID = "uuid"; + /** 患者姓名 */ + public static final String REALNAME = "realName"; + /** 患者手机号 */ + public static final String MOBILE = "mobile"; + /** 患者头像 */ + public static final String PHOTO = "photo"; + /** 患者性别 */ + public static final String SEX = "sex"; + /** 患者民族 */ + public static final String NATION = "nation"; + /** 省id */ + public static final String PROVID = "provId"; + /** 市id */ + public static final String CITYID = "cityId"; + /** 区县id */ + public static final String COUNTYID = "countyId"; + /** 患者生日 */ + public static final String BIRTHDATE = "birthDate"; + /** 联系人类型 */ + public static final String TYPE = "type"; + } + + /** + * 下载列表 + */ + public class DownladColumn extends BaseColumn { + /** 指南uuid */ + public static final String UUID = "uuid"; + /** 指南名称 */ + public static final String TITLE = "title"; + /** 摘要 */ + public static final String SUMMARY = "summary"; + /** 文件格式 */ + public static final String FILEFORMAT = "fileFormat"; + /** 时间 */ + public static final String TIME = "time"; + /** 下载时间 */ + public static final String CREATDATE = "create_date"; + /** 类型 */ + public static final String TYPENAME = "typeName"; + /** 路径 */ + public static final String PATH = "path"; + /** 文件大小 */ + public static final String FILESIZE = "fileSize"; + /** 本地文件路径 */ + public static final String FILEPATH = "filePath"; + /** 所有进度 */ + public static final String TOTALPROGRESS = "totalProgress"; + /** 当前进度 */ + public static final String CURRENTPROGRESS = "currentProgress"; + /** 下载状态, 0未下载,1下载中,2已下载 */ + public static final String STATE = "state"; + } + + class GroupColumn extends BaseColumn { + /** 群组ID */ + public static final String GROUP_ID = "groupid"; + /** 群组名称 */ + public static final String GROUP_NAME = "name"; + /** 群组创建者 */ + public static final String GROUP_OWNER = "owner"; + /** 群组类型 0:临时组(上限100人) 1:普通组(上限200人) 2:VIP组(上限500人) */ + public static final String GROUP_TYPE = "type"; + /** 群组公告 */ + public static final String GROUP_DECLARED = "declared"; + /** 群组创建日期 */ + public static final String GROUP_DATE_CREATED = "create_date"; + /** 群组成员数 */ + public static final String GROUP_MEMBER_COUNTS = "count"; + /** 群组群组加入权限 */ + public static final String GROUP_PERMISSION = "permission"; + /** 群组是否加入 */ + public static final String GROUP_JOINED = "joined"; + public static final String GROUP_ISNOTICE = "isnotice"; + public static final String GROUP_Discussion = "isdiscussion"; + + } + + public class GroupMembersColumn extends BaseColumn { + // 所属群组 + public static final String OWN_GROUP_ID = "group_id"; + // 是否禁言 + public static final String ISBAN = "isban"; + // 用户voip账号 + public static final String VOIPACCOUNT = "voipaccount"; + // 性别 + public static final String SEX = "sex"; + // 用户生日 + public static final String BIRTH = "birth"; + // 用户电话 + public static final String TEL = "tel"; + // 用户的签名 + public static final String SIGN = "sign"; + // 用户邮箱 + public static final String MAIL = "mail"; + // 用户的备注 + public static final String ROLE = "role"; + public static final String REMARK = "remark"; + // 是否接收群组消息 + public static final String RULE = "rule"; + } + + /** + * 群组通知接口字段 + */ + class SystemNoticeColumn extends BaseColumn { + // 对应话数据库I的 + public static final String OWN_THREAD_ID = "sid"; + // 通知消息ID + public static final String NOTICE_ID = "notice_id"; + // 通知消息验证理由 + public static final String NOTICE_VERIFYMSG = "verifymsg"; + public static final String NOTICE_DECLARED = "declared"; + // 管理员 + public static final String ADMIN = "admin"; + // 消息类型 + public static final String NOTICE_TYPE = "type"; + // 是否需要确认 + public static final String NOTICE_OPERATION_STATE = "confirm"; + // 群组ID + public static final String NOTICE_GROUPID = "groupId"; + public static final String NOTICE_GROUPNAME = "groupName"; + // 联系人账号 + public static final String NOTICE_WHO = "member"; + public static final String NOTICE_NICKNAME = "nickName"; + // 已读状态 + public static final String NOTICE_READ_STATUS = "isRead"; + public static final String NOTICE_VERSION = "version"; + // 消息时间 + public static final String NOTICE_DATECREATED = "dateCreated"; + } + + private final MessageObservable mMsgObservable = new MessageObservable(); + + protected void registerObserver(OnMessageChange observer) { + mMsgObservable.registerObserver(observer); + } + + protected void unregisterObserver(OnMessageChange observer) { + mMsgObservable.unregisterObserver(observer); + } + + protected void notifyChanged(String session) { + mMsgObservable.notifyChanged(session); + } + + protected void release() { + destroy(); + closeDB(); + databaseHelper = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/BookDownloadSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/BookDownloadSqlManager.java new file mode 100644 index 0000000..1aa1455 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/BookDownloadSqlManager.java @@ -0,0 +1,367 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 患者数据库管理 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class BookDownloadSqlManager extends AbstractSQLManager { + + private static BookDownloadSqlManager sInstance; + + public BookDownloadSqlManager() { + // TODO Auto-generated constructor stub + super(); + } + + private static BookDownloadSqlManager getInstance() { + if (sInstance == null) { + sInstance = new BookDownloadSqlManager(); + } + return sInstance; + } + + /** + * 根据uuid查询数据库是否存在此信息 + * + * @param uuid + * @return boolean + */ + public static boolean hasBookDownload(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + } + String sql = "select uuid from download where uuid = '" + uuid + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + + return false; + } + + /** + * 保存 + * + * @param List + * @return + */ + public static long insertDownload(List list, String filepath, + String currentprogress, String totalprogress, String state) { + if (list == null || list.size() == 0) { + return -1; + } + ContentValues values = null; + for (LibraryData user : list) { + values = new ContentValues(); + values.put(DownladColumn.UUID, user.getUuid()); + values.put(DownladColumn.TITLE, user.getTitle()); + values.put(DownladColumn.SUMMARY, user.getSummary()); + values.put(DownladColumn.FILEFORMAT, user.getFileFormat()); + values.put(DownladColumn.TIME, user.getUpdateTime()); + values.put(DownladColumn.TYPENAME, user.getTypeName()); + values.put(DownladColumn.PATH, user.getPath()); + values.put(DownladColumn.FILESIZE, user.getFileSize()); + values.put(DownladColumn.FILEPATH, filepath); + values.put(DownladColumn.TOTALPROGRESS, totalprogress); + values.put(DownladColumn.CURRENTPROGRESS, currentprogress); + values.put(DownladColumn.STATE, state); + getInstance().sqliteDB().update( + DatabaseHelper.TABLES_NAME_DOWNLOAD, values, + "uuid = '" + user.getUuid() + "'", null); + } + return -1; + } + + /** + * 插入数据库 + * + * @param contacts + * @return + */ + public static ArrayList insertDownload(List list) { + ArrayList rows = new ArrayList(); + try { + getInstance().sqliteDB().beginTransaction(); + for (DownloadModel c : list) { + long rowId = insertDownload(c); + if (rowId != -1L) { + rows.add(rowId); + } + } + getInstance().sqliteDB().setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + getInstance().sqliteDB().endTransaction(); + } + return rows; + } + + /** + * 插入与更新到数据库 + * + * @return + */ + public static long insertDownload(DownloadModel p) { + if (p == null || TextUtils.isEmpty(p.getUuid())) { + return -1; + } + try { + ContentValues values = p.buildContentValues(); + if (!hasBookDownload(p.getUuid())) { + return getInstance().sqliteDB().insert( + DatabaseHelper.TABLES_NAME_DOWNLOAD, null, values); + } else { + return getInstance().sqliteDB().update( + DatabaseHelper.TABLES_NAME_DOWNLOAD, values, + "uuid = '" + p.getUuid() + "'", null); + } + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 查询下载当前进度 uuid + * + * @return String + */ + public static String getDownloadCurrentProgress(String uuid) { + String currentProgress = null; + try { + String sql = "select currentProgress from download where uuid = '" + + uuid + "'"; + // StringBuilder sb = new StringBuilder("('"); + // sb.append(uuid).append("')"); + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + currentProgress = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return currentProgress; + } + + /** + * 查询下载状态 uuid + * + * @return String + */ + public static int getDownloadState(String uuid) { + int state = -1; + try { + String sql = "select state from download where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = getInstance().sqliteDB().rawQuery( + sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + state = cursor.getInt(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return state; + } + + /** + * 查询下载路径 uuid + * + * @return String + */ + public static String getDownloadFilePath(String uuid) { + String filePath = null; + try { + String sql = "select filePath from download where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = getInstance().sqliteDB().rawQuery( + sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + filePath = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return filePath; + } + + /** + * 更新下载状态 + * + * @param member + */ + public static void updateDownloadState(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.STATE, d.getState()); + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_DOWNLOAD, + values, "uuid = '" + d.getUuid() + "'", null); + } + /** + * 更新下载状态 + * + * @param member + */ + public static void updateDownloadFilePath(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.FILEPATH, d.getFilePath()); + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_DOWNLOAD, + values, "uuid = '" + d.getUuid() + "'", null); + } + /** + * 查询所有的 + * + * @return + */ + public static ArrayList getDownloadInfoList() { + ArrayList contacts = null; + try { + + Cursor cursor = getInstance().sqliteDB() + .query(DatabaseHelper.TABLES_NAME_DOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, null, null, null, + null, null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + + } + + /** + * 根据state状态,查询所有的,名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static ArrayList getDownloadInfoByState(int state) { + ArrayList contacts = null; + try { + Cursor cursor = getInstance().sqliteDB() + .query(DatabaseHelper.TABLES_NAME_DOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "state=?", + new String[] { String.valueOf(state) }, null, null, + null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 根据uuid查询名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static DownloadModel getDownloadInfo(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return null; + } + DownloadModel c = new DownloadModel(uuid); + try { + Cursor cursor = getInstance().sqliteDB() + .query(DatabaseHelper.TABLES_NAME_DOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "uuid=?", + new String[] { uuid }, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return c; + } + + public static long delDownladInfo(String uuid) { + int delete = -1; + if (!TextUtils.isEmpty(uuid)) { + String where = DownladColumn.UUID + "='" + uuid + "'"; + delete = getInstance().sqliteDB().delete( + DatabaseHelper.TABLES_NAME_DOWNLOAD, where, null); + } + LogUtil.i("delete==" + delete); + return delete; + } + + public static void reset() { + getInstance().release(); + sInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ContactSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ContactSqlManager.java new file mode 100644 index 0000000..a5c2488 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ContactSqlManager.java @@ -0,0 +1,403 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactLogic; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; + +/** + * 联系人数据库管理 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class ContactSqlManager extends AbstractSQLManager { + + private static ContactSqlManager sInstance; + private static ContactSqlManager getInstance() { + if(sInstance == null) { + sInstance = new ContactSqlManager(); + } + return sInstance; + } + + public static boolean hasContact(String contactId) { + String sql = "select contact_id from contacts where contact_id = '" + contactId + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql , null); + if(cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + return false; + } + + /** + * 插入联系人到数据库 + * @param contacts + * @return + */ + public static ArrayList insertContacts(List contacts) { + + ArrayList rows = new ArrayList(); + try { + + getInstance().sqliteDB().beginTransaction(); + for(ECContacts c : contacts) { + long rowId = insertContact(c); + if(rowId != -1L) { + rows.add(rowId); + } + } + + // 初始化系统联系人 + insertSystemNoticeContact(); + getInstance().sqliteDB().setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + getInstance().sqliteDB().endTransaction(); + } + return rows; + } + + /** + * 初始化联系人数据库 + * @return + */ + private static long insertSystemNoticeContact() { + ECContacts contacts = new ECContacts(GroupNoticeSqlManager.CONTACT_ID); + contacts.setNickname("系统通知"); + contacts.setRemark("touxiang_notice.png"); + + return insertContact(contacts); + } + + public static long updateContactPhoto(ECContacts contact) { + return insertContact(contact , 1 , true); + } + + /** + * 根据性别更新联系人信息(区分联系人头像) + * @param contact + * @param sex + * @return + */ + public static long insertContact(ECContacts contact , int sex) { + return insertContact(contact , sex , false); + } + + public static long insertContact(ECContacts contact , int sex , boolean hasPhoto) { + if(contact == null || TextUtils.isEmpty(contact.getContactid())) { + return -1; + } + try { + ContentValues values = contact.buildContentValues(); + if(!hasPhoto ) { + int index = getIntRandom(3, 0); + if(sex == 2) { + index = 4; + } + String remark = ContactLogic.CONVER_PHONTO[index]; + contact.setRemark(remark); + } + values.put(AbstractSQLManager.ContactsColumn.REMARK, contact.getRemark()); + if(!hasContact(contact.getContactid())) { + return getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_CONTACT, null, values); + } + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_CONTACT , values , "contact_id = '" + contact.getContactid() + "'" , null); + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 插入联系人到数据库 + * @param contact + * @return + */ + public static long insertContact(ECContacts contact) { + return insertContact(contact , 1); + } + + + /** + * 查询联系人名称 + * @param contactId + * @return + */ + public static ArrayList getContactName(String[] contactId) { + ArrayList contacts = null; + try { + String sql = "select username ,contact_id from contacts where contact_id in "; + StringBuilder sb = new StringBuilder("("); + for (int i = 0; i < contactId.length; i++) { + sb.append("'").append(contactId[i]).append("'"); + if (i != contactId.length - 1) { + sb.append(","); + } + } + sb.append(")"); + Cursor cursor = getInstance().sqliteDB().rawQuery( + sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + // 过滤自己的联系人账号 +// ClientUser clientUser = CCPAppManager.getClientUser(); + while (cursor.moveToNext()) { +// if (clientUser != null +// && clientUser.getUserId().equals( +// cursor.getString(0))) { +// continue; +// } + String displayName = cursor.getString(0); + String contact_id = cursor.getString(1); + if(TextUtils.isEmpty(displayName) || TextUtils.isEmpty(contact_id) || displayName.equals(contact_id)) { + continue; + } + contacts.add(displayName); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 查询联系人名称 + * @param contactId + * @return + */ + public static ArrayList getContactRemark(String[] contactId) { + ArrayList contacts = null; + try { + String sql = "select remark from contacts where contact_id in "; + StringBuilder sb = new StringBuilder("("); + for (int i = 0; i < contactId.length; i++) { + sb.append("'").append(contactId[i]).append("'"); + if (i != contactId.length - 1) { + sb.append(","); + } + } + sb.append(")"); + Cursor cursor = getInstance().sqliteDB().rawQuery( + sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + contacts.add(cursor.getString(0)); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 更新联系人名字 + * @param member + */ +// public static void updateContactName(ECGroupMember member) { +// ContentValues values = new ContentValues(); +// values.put(AbstractSQLManager.ContactsColumn.USERNAME , member.getDisplayName()); +// getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_CONTACT , values , "contact_id = '" + member.getVoipAccount() + "'" , null); +// } + + /** + * 查询联系人 + * @return + */ + public static ArrayList getContacts() { + ArrayList contacts = null; + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_CONTACT, + new String[]{ + ContactsColumn.ID, + ContactsColumn.USERNAME , + ContactsColumn.CONTACT_ID, + ContactsColumn.REMARK}, + null, null, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + // 过滤自己的联系人账号信息 +// ClientUser clientUser = CCPAppManager.getClientUser(); + while (cursor.moveToNext()) { + if(GroupNoticeSqlManager.CONTACT_ID.equals(cursor.getString(2))) { + continue; + } + ECContacts c = new ECContacts(cursor.getString(2)); + c.setNickname(cursor.getString(1)); + c.setRemark(cursor.getString(3)); + c.setId(cursor.getInt(0)); +// if(clientUser != null && clientUser.getUserId().equals(c.getContactid())) { +// continue; +// } + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + + } + + + /** + * 根据联系人ID查询联系人 + * @param rawId + * @return + */ + public static ECContacts getContact(long rawId) { + if(rawId == -1) { + return null; + } + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_CONTACT, new String[]{ContactsColumn.ID, ContactsColumn.USERNAME , ContactsColumn.CONTACT_ID , ContactsColumn.REMARK}, + "id=?", new String[]{String.valueOf(rawId)},null , null, null, null); + ECContacts c = null; + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new ECContacts(cursor.getString(2)); + c.setNickname(cursor.getString(1)); + c.setRemark(cursor.getString(3)); + c.setId(cursor.getInt(0)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * + * @param phoneNumber + * @return + */ + public static ECContacts getCacheContact(String phoneNumber) { +// if (ContactsCache.getInstance().getContacts() != null) { +// return ContactsCache.getInstance().getContacts() +// .getValueByPhone(phoneNumber); +// } + return null; + } + + /** + * 根据联系人账号查询 + * @param contactId + * @return + */ + public static ECContacts getContact(String contactId) { + if(TextUtils.isEmpty(contactId)) { + return null; + } + ECContacts c = new ECContacts(contactId); + c.setNickname(contactId); + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_CONTACT, new String[]{ContactsColumn.ID, ContactsColumn.USERNAME , ContactsColumn.CONTACT_ID , ContactsColumn.REMARK}, + "contact_id=?", new String[]{contactId},null , null, null, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new ECContacts(cursor.getString(2)); + c.setNickname(cursor.getString(1)); + c.setRemark(cursor.getString(3)); + c.setId(cursor.getInt(0)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return c; + } + + /** + * 根据昵称查询信息 + * @param nikeName + * @return + */ + public static ECContacts getContactLikeUsername(String nikeName) { + if(TextUtils.isEmpty(nikeName)) { + return null; + } + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_CONTACT, new String[]{ContactsColumn.ID, ContactsColumn.USERNAME , ContactsColumn.CONTACT_ID , ContactsColumn.REMARK}, + "username LIKE '" + nikeName + "'" , null,null , null, null, null); + ECContacts c = null; + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new ECContacts(cursor.getString(2)); + c.setNickname(cursor.getString(1)); + c.setRemark(cursor.getString(3)); + c.setId(cursor.getInt(0)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static ECContacts getContactLikeUserId(String nikeName) { + if(TextUtils.isEmpty(nikeName)) { + return null; + } + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_CONTACT, new String[]{ContactsColumn.ID, ContactsColumn.USERNAME , ContactsColumn.CONTACT_ID , ContactsColumn.REMARK}, + "username LIKE '" + nikeName + "'" , null,null , null, null, null); + ECContacts c = null; + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new ECContacts(cursor.getString(2)); + c.setNickname(cursor.getString(1)); + c.setRemark(cursor.getString(3)); + c.setId(cursor.getInt(0)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static void reset() { + getInstance().release(); + sInstance = null; + } + + public static int getIntRandom(int max, int min) { +// Assert.assertTrue(max > min); + return (new Random(System.currentTimeMillis()).nextInt(max - min + 1) + min); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ConversationSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ConversationSqlManager.java new file mode 100644 index 0000000..8abab60 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ConversationSqlManager.java @@ -0,0 +1,385 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.SQLException; +import android.text.TextUtils; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 会话消息数据库管理 + * + * @author Jorstin Chan@容联•云通讯 + * @version 4.0 + * @date 2014-12-11 + */ +public class ConversationSqlManager extends AbstractSQLManager { + + private static ConversationSqlManager instance; + + private ConversationSqlManager() { + super(); + } + + public static ConversationSqlManager getInstance() { + if (instance == null) { + instance = new ConversationSqlManager(); + } + return instance; + } + + /** + * 有患者Patient,公益咨询Consult,与朋友圈 Friends及群组 + * @return + */ + public static Cursor getConversationCursor() { + try { + //String sql = "select unreadCount, im_thread.type, sendStatus, dateTime, sessionId, text, username from im_thread,contacts where im_thread.sessionId = contacts.contact_id order by dateTime desc"; + String sql = "SELECT unreadCount, im_thread.type, sendStatus, dateTime, sessionId, text, username ,name ,im_thread.contactid ,isnotice ,send_type\n" + + " FROM im_thread \n" + + " LEFT JOIN contacts ON im_thread.sessionId = contacts.contact_id \n" + + " LEFT JOIN groups2 ON im_thread.sessionId = groups2.groupid order by dateTime desc;"; + return getInstance().sqliteDB().rawQuery(sql, null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + /** + * 查询单聊的会话消息列表,只有患者之间,没有公益咨询与专家之间 + * @return + */ + public static Cursor getConversationCursorPatient() { + try { + //String sql = "select unreadCount, im_thread.type, sendStatus, dateTime, sessionId, text, username from im_thread,contacts where im_thread.sessionId = contacts.contact_id order by dateTime desc"; + String sql = "SELECT unreadCount, im_thread.type, sendStatus, dateTime, sessionId, text, username ,im_thread.contactid ,send_type\n" + + " FROM im_thread \n" + + " LEFT JOIN contacts ON im_thread.sessionId = contacts.contact_id \n" + + " where send_type = 'Patient' order by dateTime desc;"; +// " LEFT JOIN groups2 ON im_thread.sessionId = groups2.groupid order by dateTime desc;"; + return getInstance().sqliteDB().rawQuery(sql, null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + } + + + /** + * 通过会话ID查找消息数据库主键 + * + * @param sessionId 会话ID + * @return + */ + public static long querySessionIdForBySessionId(String sessionId) { + Cursor cursor = null; + long threadId = 0; + if (sessionId != null) { + String where = IThreadColumn.THREAD_ID + " = '" + sessionId + "' "; + try { + cursor = getInstance().sqliteDB().query( + DatabaseHelper.TABLES_NAME_IM_SESSION, null, where, + null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + threadId = cursor.getLong(cursor + .getColumnIndexOrThrow(IThreadColumn.ID)); + } + } + } catch (SQLException e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + cursor = null; + } + } + } + return threadId; + } + + + /** + * 查询会话类型 + * sessionId + * @return String + */ + public static String getConversationType(String sessionId) { + String type = ""; + if (sessionId != null) { + try { + String sql = "select send_type from im_thread where sessionId in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(sessionId).append("')"); + Cursor cursor = getInstance().sqliteDB().rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + type = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return type; + } + + /** + * 生成一个新的会话消息 + * + * @param msg + * @return + */ +// public static long insertSessionRecord(ECMessage msg, String userData) { +// if (msg == null || TextUtils.isEmpty(msg.getSessionId())) { +// throw new IllegalArgumentException("insert thread table " +// + DatabaseHelper.TABLES_NAME_IM_SESSION +// + "error , that Argument ECMessage:" + msg); +// } +// long row = -1; +// ContentValues values = new ContentValues(); +// try { +// values.put(IThreadColumn.THREAD_ID, msg.getSessionId()); +// values.put(IThreadColumn.DATE, System.currentTimeMillis()); +// values.put(IThreadColumn.UNREAD_COUNT, 0); +// values.put(IThreadColumn.CONTACT_ID, msg.getForm()); +//// 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), +//// receiver_type(接收方类型 1.患者 2.专家), +//// chat_from(来源1.公益咨询 2.随访 3.vip), +//// chat_from_uuid(如果是公益咨询,则存uuid,否则0) +//// +//// 2,1,2,0 +//// 1,2,2,0 +// LogUtil.i("保存的userdata==="+userData+"==msg.getUserData()==="+msg.getUserData()); +// if (TextUtils.isEmpty(userData)) { +// String substring = msg.getUserData().substring(4, 5); +// if ("1".equals(substring)) {//1.公益咨询 +// values.put(IThreadColumn.SEND_TYPE, Constant.typeConsult); +// }else if ("2".equals(substring)) {//2.随访 +// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// }else if ("3".equals(substring)) {// 3.vip +// values.put(IThreadColumn.SEND_TYPE, Constant.typeVip); +// } +// LogUtil.i("userdata==="+substring); +// }else{ +// String substring = userData.substring(4, 5); +// if ("1".equals(substring)) {//1.公益咨询 +// values.put(IThreadColumn.SEND_TYPE, Constant.typeConsult); +// }else if ("2".equals(substring)) {//2.随访 +// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// }else if ("3".equals(substring)) {// 3.vip +// values.put(IThreadColumn.SEND_TYPE, Constant.typeVip); +// } +// LogUtil.i("userdata==="+substring); +// } +// row = getInstance().sqliteDB().insertOrThrow( +// DatabaseHelper.TABLES_NAME_IM_SESSION, null, values); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// LogUtil.e("SQLException ex" + ex.toString()); +// } finally { +// if (values != null) { +// values.clear(); +// values = null; +// } +// } +// return row; +// } + + /** + * 更新 + * @param + */ + public static void updateSessionType(String uuid, String type) { + ContentValues values = new ContentValues(); + if (TextUtils.isEmpty(uuid) || TextUtils.isEmpty(type)) { + return; + } + values.put(IThreadColumn.SEND_TYPE , type); + String where = IThreadColumn.THREAD_ID + " = '" + uuid + "' "; + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_SESSION, values, where, null); + } + /** + * 跟新的会话消息 + * + * @param msg + * @return + */ +// public static long updateSessionRecord(ECMessage msg, String userData) { +// if (msg == null || TextUtils.isEmpty(msg.getSessionId())) { +// throw new IllegalArgumentException("insert thread table " +// + DatabaseHelper.TABLES_NAME_IM_SESSION +// + "error , that Argument ECMessage:" + msg); +// } +// long row = -1; +// ContentValues values = new ContentValues(); +// +//// String conversationType = getConversationType(msg.getSessionId()); +// String patientType = PatientSqlManager.getPatientType(msg.getSessionId()); +// LogUtil.i("patientType="+patientType+"msg.getSessionId()="+msg.getSessionId()); +//// if (conversationType.equals(patientType)) { +//// return row; +//// } +// try { +//// 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), +//// receiver_type(接收方类型 1.患者 2.专家), +//// chat_from(来源1.公益咨询 2.随访 3.vip), +//// chat_from_uuid(如果是公益咨询,则存uuid,否则0) +//// +//// 2,1,2,0 +//// 1,2,2,0 +// LogUtil.i("更新保存的userdata==="+userData+"==msg.getUserData()==="+msg.getUserData()); +// if (TextUtils.isEmpty(userData)) { +// String substring = msg.getUserData().substring(4, 5); +// if ("1".equals(substring)) {//1.公益咨询 +// if (Constant.typePatient.equals(patientType) || Constant.typePatientConsult.equals(patientType)) { +// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// }else{ +// values.put(IThreadColumn.SEND_TYPE, Constant.typeConsult); +// } +// }else if ("2".equals(substring)) {//2.随访 +// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// }else if ("3".equals(substring)) {// 3.vip +// values.put(IThreadColumn.SEND_TYPE, Constant.typeVip); +// } +// LogUtil.i("userdata==="+substring); +// }else{ +// String substring = userData.substring(4, 5); +// if ("1".equals(substring)) {//1.公益咨询 +// if (Constant.typePatient.equals(patientType) || Constant.typePatientConsult.equals(patientType)) { +// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// }else{ +// values.put(IThreadColumn.SEND_TYPE, Constant.typeConsult); +// } +// }else if ("2".equals(substring)) {//2.随访 +// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// }else if ("3".equals(substring)) {// 3.vip +// values.put(IThreadColumn.SEND_TYPE, Constant.typeVip); +// } +// LogUtil.i("userdata==="+substring); +// } +// values.put(IThreadColumn.THREAD_ID, msg.getSessionId()); +// values.put(IThreadColumn.DATE, System.currentTimeMillis()); +//// values.put(IThreadColumn.UNREAD_COUNT, 0); +// values.put(IThreadColumn.CONTACT_ID, msg.getForm()); +//// values.put(IThreadColumn.SEND_TYPE, Constant.typePatient); +// +// String where = IThreadColumn.THREAD_ID + " = '" + msg.getSessionId() + "' "; +// row = getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_SESSION, values, where, null); +// } catch (SQLException ex) { +// ex.printStackTrace(); +// LogUtil.e(" printStackTrace = " + ex.toString()); +// } finally { +// if (values != null) { +// values.clear(); +// values = null; +// } +// } +// return row; +// } + + public int qureySessionUnreadCount() { + int count = 0; + String[] columnsList = {"count(" + IThreadColumn.UNREAD_COUNT + ")"}; + String where = IThreadColumn.UNREAD_COUNT + " > 0"; + Cursor cursor = null; + try { + cursor = sqliteDB().query(DatabaseHelper.TABLES_NAME_IM_SESSION, + columnsList, where, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("count(" + + IThreadColumn.UNREAD_COUNT + ")")); + } + } + } catch (Exception e) { + LogUtil.e( " qureySessionUnreadCount e = " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + cursor = null; + } + } + return count; + } + + public int qureyAllSessionUnreadCount() { + int count = 0; + String[] columnsList = {"sum(" + IThreadColumn.UNREAD_COUNT + ")"}; + Cursor cursor = null; + try { + cursor = sqliteDB().query(DatabaseHelper.TABLES_NAME_IM_SESSION, + columnsList, null, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("sum(" + + IThreadColumn.UNREAD_COUNT + ")")); + } + } + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return count; + } + + public static void delSession(String contactId) { + String where = IThreadColumn.THREAD_ID + " = '" + contactId + "' "; + LogUtil.i("delSession================="); + getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_IM_SESSION , where, null); + } + + /** + * 更新会话已读状态 + * @param id + * @return + */ + public static long setChattingSessionRead(long id) { + if(id <= 0) { + return -1; + } + ContentValues values = new ContentValues(); + try { + String where = IThreadColumn.ID + " = " + id + " and " + IThreadColumn.UNREAD_COUNT + "!=0"; + values.put(IThreadColumn.UNREAD_COUNT, 0); + return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_SESSION, values, where, null); + } catch (Exception e) { + LogUtil.e( "更新会话已读状态 e = " + e.toString()); + e.getStackTrace(); + } finally { + if (values != null) { + values.clear(); + } + } + return -1; + } + + public static void reset() { + getInstance().release(); + } + + @Override + protected void release() { + super.release(); + instance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/CoursewareBookDownloadSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/CoursewareBookDownloadSqlManager.java new file mode 100644 index 0000000..11a321d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/CoursewareBookDownloadSqlManager.java @@ -0,0 +1,392 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 患者数据库管理 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class CoursewareBookDownloadSqlManager extends AbstractSQLManager { + + private static CoursewareBookDownloadSqlManager sInstance; + static SQLiteDatabase mActivity; + + public CoursewareBookDownloadSqlManager(SQLiteDatabase mActivity) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + createTablecourseware(mActivity); + } + + private CoursewareBookDownloadSqlManager() { + super(); + } + + /** + * 创建万方下载数据库 + * + * @param db + */ + void createTablecourseware(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + + DatabaseHelper.TABLES_NAME_COURSEWARE + " (" + + DownladColumn.ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + DownladColumn.UUID + " TEXT UNIQUE ON CONFLICT ABORT, " + + DownladColumn.TITLE + " TEXT, " +// + DownladColumn.CREATDATE + " TEXT, " + + DownladColumn.SUMMARY+ " TEXT, " + + DownladColumn.TYPENAME + " TEXT, " + + DownladColumn.FILEFORMAT + " TEXT, " + + DownladColumn.STATE+ " INTEGER DEFAULT 0, " + + DownladColumn.PATH + " TEXT, " + + DownladColumn.FILEPATH + " TEXT, " + + DownladColumn.FILESIZE+ " TEXT, " + + DownladColumn.TOTALPROGRESS + " TEXT, " + + DownladColumn.CURRENTPROGRESS + " TEXT, " + + DownladColumn.TIME + " TEXT " + ")"; + + db.execSQL(sql); + } + + private static CoursewareBookDownloadSqlManager getInstance() { + if (sInstance == null) { + sInstance = new CoursewareBookDownloadSqlManager(); + } + return sInstance; + } + + /** + * 根据uuid查询数据库是否存在此信息 + * + * @param uuid + * @return boolean mActivity + */ + public static boolean hasBookDownload(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + } + String sql = "select uuid from courseware where uuid = '" + uuid + "'"; + Cursor cursor = mActivity.rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + + return false; + } + + /** + * 保存 + * + * @param List + * @return + */ + public static long insertDownload(List list, String filepath, + String currentprogress, String totalprogress, String state) { + if (list == null || list.size() == 0) { + return -1; + } + ContentValues values = null; + for (LibraryData user : list) { + values = new ContentValues(); + values.put(DownladColumn.UUID, user.getUuid()); + values.put(DownladColumn.TITLE, user.getTitle()); + values.put(DownladColumn.SUMMARY, user.getSummary()); + values.put(DownladColumn.FILEFORMAT, user.getFileFormat()); + values.put(DownladColumn.TIME, user.getUpdateTime()); + values.put(DownladColumn.TYPENAME, user.getTypeName()); + values.put(DownladColumn.PATH, user.getPath()); + values.put(DownladColumn.FILESIZE, user.getFileSize()); + values.put(DownladColumn.FILEPATH, filepath); + values.put(DownladColumn.TOTALPROGRESS, totalprogress); + values.put(DownladColumn.CURRENTPROGRESS, currentprogress); + values.put(DownladColumn.STATE, state); + mActivity.update(DatabaseHelper.TABLES_NAME_COURSEWARE, values, + "uuid = '" + user.getUuid() + "'", null); + } + return -1; + } + + /** + * 插入数据库 + * + * @param contacts + * @return + */ + public static ArrayList insertDownload(List list) { + ArrayList rows = new ArrayList(); + try { + mActivity.beginTransaction(); + for (DownloadModel c : list) { + long rowId = insertDownload(c); + if (rowId != -1L) { + rows.add(rowId); + } + } + mActivity.setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + mActivity.endTransaction(); + } + return rows; + } + + /** + * 插入与更新到数据库 + * + * @return + */ + public static long insertDownload(DownloadModel p) { + if (p == null || TextUtils.isEmpty(p.getUuid())) { + return -1; + } + try { + ContentValues values = p.buildContentValues(); + if (!hasBookDownload(p.getUuid())) { + return mActivity.insert(DatabaseHelper.TABLES_NAME_COURSEWARE, + null, values); + } else { + return mActivity.update(DatabaseHelper.TABLES_NAME_COURSEWARE, + values, "uuid = '" + p.getUuid() + "'", null); + } + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 查询下载当前进度 uuid + * + * @return String + */ + public static String getDownloadCurrentProgress(String uuid) { + String currentProgress = null; + try { + String sql = "select currentProgress from courseware where uuid = '" + + uuid + "'"; + // StringBuilder sb = new StringBuilder("('"); + // sb.append(uuid).append("')"); + Cursor cursor = mActivity.rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + currentProgress = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return currentProgress; + } + + /** + * 查询下载状态 uuid + * + * @return String + */ + public static int getDownloadState(String uuid) { + int state = -1; + try { + String sql = "select state from courseware where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = mActivity.rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + state = cursor.getInt(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return state; + } + + /** + * 查询下载路径 uuid + * + * @return String + */ + public static String getDownloadFilePath(String uuid) { + String filePath = null; + try { + String sql = "select filePath from courseware where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = mActivity.rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + filePath = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return filePath; + } + + /** + * 更新下载状态 + * + * @param member + */ + public static void updateDownloadState(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.STATE, d.getState()); + mActivity.update(DatabaseHelper.TABLES_NAME_COURSEWARE, values, + "uuid = '" + d.getUuid() + "'", null); + } + public static void updateDownloadFilePath(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.FILEPATH, d.getFilePath()); + mActivity.update(DatabaseHelper.TABLES_NAME_COURSEWARE, values, + "uuid = '" + d.getUuid() + "'", null); + } + /** + * 查询所有的 + * + * @return + */ + public static ArrayList getDownloadInfoList() { + ArrayList contacts = null; + try { + + Cursor cursor = mActivity + .query(DatabaseHelper.TABLES_NAME_COURSEWARE, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.FILEFORMAT, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, null, null, null, + null, null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setFileFormat(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + + } + + /** + * 根据state状态,查询所有的,名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static ArrayList getDownloadInfoByState(int state) { + ArrayList contacts = null; + try { + Cursor cursor = mActivity + .query(DatabaseHelper.TABLES_NAME_COURSEWARE, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.FILEFORMAT, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "state=?", + new String[] { String.valueOf(state) }, null, null, + null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setFileFormat(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 根据uuid查询名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static DownloadModel getDownloadInfo(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return null; + } + DownloadModel c = new DownloadModel(uuid); + try { + Cursor cursor = mActivity + .query(DatabaseHelper.TABLES_NAME_COURSEWARE, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "uuid=?", + new String[] { uuid }, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return c; + } + + public static long delDownladInfo(String uuid) { + int delete = -1; + if (!TextUtils.isEmpty(uuid)) { + String where = DownladColumn.UUID + "='" + uuid + "'"; + delete = mActivity.delete(DatabaseHelper.TABLES_NAME_COURSEWARE, + where, null); + } + LogUtil.i("delete==" + delete); + return delete; + } + + public static void reset() { + getInstance().release(); + sInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ECObservable.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ECObservable.java new file mode 100644 index 0000000..bff34e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ECObservable.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import java.util.ArrayList; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-13 + * @version 4.0 + */ +public abstract class ECObservable { + + protected final ArrayList mObservers = new ArrayList(); + + /** + * 注册观察者 + * @param observer + */ + public void registerObserver(T observer) { + if (observer == null) { + throw new IllegalArgumentException("The observer is null."); + } + synchronized(mObservers) { + if (mObservers.contains(observer)) { + throw new IllegalStateException("ECObservable " + observer + " is already registered."); + } + mObservers.add(observer); + } + } + + /** + * 移除观察 + * @param observer + */ + public void unregisterObserver(T observer) { + if (observer == null) { + throw new IllegalArgumentException("The observer is null."); + } + synchronized(mObservers) { + int index = mObservers.indexOf(observer); + if (index == -1) { + throw new IllegalStateException("ECObservable " + observer + " was not registered."); + } + mObservers.remove(index); + } + } + + /** + * 移除所有观察着 + */ + public void unregisterAll() { + synchronized(mObservers) { + mObservers.clear(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ENBookDownloadSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ENBookDownloadSqlManager.java new file mode 100644 index 0000000..4dec12f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ENBookDownloadSqlManager.java @@ -0,0 +1,389 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 患者数据库管理 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class ENBookDownloadSqlManager extends AbstractSQLManager { + + private static ENBookDownloadSqlManager sInstance; + + private static ENBookDownloadSqlManager getInstance() { + if (sInstance == null) { + sInstance = new ENBookDownloadSqlManager(); + } + return sInstance; + } + + static SQLiteDatabase db; + + public ENBookDownloadSqlManager(SQLiteDatabase db) { + // TODO Auto-generated constructor stub + this.db = db; + createTableWFDownload(db); + } + + public ENBookDownloadSqlManager() { + // TODO Auto-generated constructor stub + + } + + void createTableWFDownload(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + + DatabaseHelper.TABLES_NAME_ENDOWNLOAD + " (" + + DownladColumn.ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + DownladColumn.UUID + " TEXT UNIQUE ON CONFLICT ABORT, " + + DownladColumn.TITLE + " TEXT, " + + DownladColumn.SUMMARY+ " TEXT, " + + DownladColumn.TYPENAME + " TEXT, " + + DownladColumn.FILEFORMAT + " TEXT, " + + DownladColumn.STATE+ " INTEGER DEFAULT 0, " + + DownladColumn.PATH + " TEXT, " + + DownladColumn.FILEPATH + " TEXT, " + + DownladColumn.FILESIZE+ " TEXT, " + + DownladColumn.TOTALPROGRESS + " TEXT, " + + DownladColumn.CURRENTPROGRESS + " TEXT, " + + DownladColumn.TIME + " TEXT " + ")"; + + db.execSQL(sql); + } + + /** + * 根据uuid查询数据库是否存在此信息 + * + * @param uuid + * @return boolean + */ + public static boolean hasBookDownload(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + } + String sql = "select uuid from endownload where uuid = '" + uuid + "'"; + Cursor cursor = db.rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + + return false; + } + + /** + * 保存 + * + * @param List + * @return + */ + public static long insertDownload(List list, String filepath, + String currentprogress, String totalprogress, String state) { + if (list == null || list.size() == 0) { + return -1; + } + ContentValues values = null; + for (LibraryData user : list) { + values = new ContentValues(); + values.put(DownladColumn.UUID, user.getUuid()); + values.put(DownladColumn.TITLE, user.getTitle()); + values.put(DownladColumn.SUMMARY, user.getSummary()); + values.put(DownladColumn.FILEFORMAT, user.getFileFormat()); + values.put(DownladColumn.TIME, user.getUpdateTime()); + values.put(DownladColumn.TYPENAME, user.getTypeName()); + values.put(DownladColumn.PATH, user.getPath()); + values.put(DownladColumn.FILESIZE, user.getFileSize()); + values.put(DownladColumn.FILEPATH, filepath); + values.put(DownladColumn.TOTALPROGRESS, totalprogress); + values.put(DownladColumn.CURRENTPROGRESS, currentprogress); + values.put(DownladColumn.STATE, state); + db.update(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, values, "uuid = '" + + user.getUuid() + "'", null); + } + return -1; + } + + /** + * 插入数据库 + * + * @param contacts + * @return + */ + public static ArrayList insertDownload(List list) { + ArrayList rows = new ArrayList(); + try { + db.beginTransaction(); + for (DownloadModel c : list) { + long rowId = insertDownload(c); + if (rowId != -1L) { + rows.add(rowId); + } + } + db.setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + db.endTransaction(); + } + return rows; + } + + /** + * 插入与更新到数据库 + * + * @return + */ + public static long insertDownload(DownloadModel p) { + if (p == null || TextUtils.isEmpty(p.getUuid())) { + return -1; + } + try { + ContentValues values = p.buildContentValues(); + if (!hasBookDownload(p.getUuid())) { + return db.insert(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, null, + values); + } else { + return db.update(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, values, + "uuid = '" + p.getUuid() + "'", null); + } + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 查询下载当前进度 uuid + * + * @return String + */ + public static String getDownloadCurrentProgress(String uuid) { + String currentProgress = null; + try { + String sql = "select currentProgress from endownload where uuid = '" + + uuid + "'"; + // StringBuilder sb = new StringBuilder("('"); + // sb.append(uuid).append("')"); + Cursor cursor = db.rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + currentProgress = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return currentProgress; + } + + /** + * 查询下载状态 uuid + * + * @return String + */ + public static int getDownloadState(String uuid) { + int state = -1; + try { + String sql = "select state from endownload where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = db.rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + state = cursor.getInt(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return state; + } + + /** + * 查询下载路径 uuid + * + * @return String + */ + public static String getDownloadFilePath(String uuid) { + String filePath = null; + try { + String sql = "select filePath from endownload where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = db.rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + filePath = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return filePath; + } + + /** + * 更新下载状态 + * + * @param member + */ + public static void updateDownloadState(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.STATE, d.getState()); + db.update(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, values, + "uuid = '" + d.getUuid() + "'", null); + } + public static void updateDownloadFilePaht(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.FILEPATH, d.getFilePath()); + db.update(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, values, + "uuid = '" + d.getUuid() + "'", null); + } + + /** + * 查询所有的 + * + * @return + */ + public static ArrayList getDownloadInfoList() { + ArrayList contacts = null; + try { + + Cursor cursor = db + .query(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, null, null, null, + null, null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + + } + + /** + * 根据state状态,查询所有的,名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static ArrayList getDownloadInfoByState(int state) { + ArrayList contacts = null; + try { + Cursor cursor = db + .query(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "state=?", + new String[] { String.valueOf(state) }, null, null, + null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 根据uuid查询名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static DownloadModel getDownloadInfo(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return null; + } + DownloadModel c = new DownloadModel(uuid); + try { + Cursor cursor = db + .query(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "uuid=?", + new String[] { uuid }, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return c; + } + + public static long delDownladInfo(String uuid) { + int delete = -1; + if (!TextUtils.isEmpty(uuid)) { + String where = DownladColumn.UUID + "='" + uuid + "'"; + delete = db.delete(DatabaseHelper.TABLES_NAME_ENDOWNLOAD, where, + null); + } + LogUtil.i("delete==" + delete); + return delete; + } + + public static void reset() { + getInstance().release(); + sInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupMemberSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupMemberSqlManager.java new file mode 100644 index 0000000..8b5dd81 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupMemberSqlManager.java @@ -0,0 +1,392 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.text.TextUtils; + +import java.util.ArrayList; + + +/** + * 群组数据库接口 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-29 + * @version 4.0 + */ +public class GroupMemberSqlManager extends AbstractSQLManager { + + private static final String TAG = "ECDemo.GroupMemberSqlManager"; + Object mLock = new Object(); + private static GroupMemberSqlManager sInstance; + private static GroupMemberSqlManager getInstance() { + if(sInstance == null) { + sInstance = new GroupMemberSqlManager(); + } + return sInstance; + } + + private GroupMemberSqlManager() { + + } + + public static Cursor getGroupMembersByCursor(String groupId) { + String sql = "select voipaccount ,contacts.username ,contacts.remark ,role ,isban from group_members ,contacts where group_id ='" + groupId + "' and contacts.contact_id = group_members.voipaccount order by role" ; + return getInstance().sqliteDB().rawQuery(sql , null); + } + + /** + * 查询群组成员 + * @param groupId + * @return + */ +// public static ArrayList getGroupMembers(String groupId) { +// String sql = "select * from group_members where group_id ='" + groupId + "'"; +// ArrayList list = null; +// try { +// Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if(cursor != null && cursor.getCount() > 0) { +// list = new ArrayList(); +// while (cursor.moveToNext()) { +// ECGroupMember groupMember = new ECGroupMember(); +// groupMember.setBelong(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.OWN_GROUP_ID))); +// groupMember.setEmail(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.MAIL))); +// groupMember.setRemark(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.REMARK))); +// groupMember.setTel(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.TEL))); +// groupMember.setBan(cursor.getInt(cursor.getColumnIndex(GroupMembersColumn.ISBAN)) == 1?true:false); +// groupMember.setVoipAccount(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.VOIPACCOUNT))); +// //cursor.getString(cursor.getColumnIndex(GroupMembersColumn.BIRTH)); +// //cursor.getString(cursor.getColumnIndex(GroupMembersColumn.SIGN)); +// //cursor.getString(cursor.getColumnIndex(GroupMembersColumn.RULE)); +// //cursor.getString(cursor.getColumnIndex(GroupMembersColumn.SEX)); +// list.add(groupMember); +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return list; +// } + + /** + * 查询群组成员账号 + * @param groupId + * @return + */ + public static ArrayList getGroupMemberID(String groupId) { + String sql = "select voipaccount from group_members where group_id ='" + groupId + "'"; + ArrayList list = null; + try { + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + list = new ArrayList(); + while (cursor.moveToNext()) { + list.add(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.VOIPACCOUNT))); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return list; + } + + + /** + * 查询群组成员用于列表显示 + * @param groupId + * @return + */ +// public static ArrayList getGroupMemberWithName(String groupId) { +// String sql = "select voipaccount ,contacts.username ,contacts.remark ,role ,isban from group_members ,contacts where group_id ='" + groupId + "' and contacts.contact_id = group_members.voipaccount order by role" ; +// //String sql = "select voipaccount ,remark,role , isban from group_members where group_id ='" + groupId + "'" ; +// ArrayList list = null; +// try { +// Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if(cursor != null && cursor.getCount() > 0) { +// list = new ArrayList(); +// while (cursor.moveToNext()) { +// ECGroupMember groupMember = new ECGroupMember(); +// groupMember.setBelong(groupId); +// groupMember.setVoipAccount(cursor.getString(0)); +// groupMember.setDisplayName(cursor.getString(1)); +// groupMember.setRemark(cursor.getString(2)); +// groupMember.setRole(cursor.getInt(3)); +// groupMember.setBan(cursor.getInt(4) == 2 ? true : false); +// list.add(groupMember); +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return list; +// } + + /** + * 查询所有群组成员帐号 + * @param groupId + * @return + */ + public static ArrayList getGroupMemberAccounts(String groupId) { + String sql = "select * from group_members where group_id ='" + groupId + "'"; + ArrayList list = null; + try { + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + list = new ArrayList(); + while (cursor.moveToNext()) { + list.add(cursor.getString(cursor.getColumnIndex(GroupMembersColumn.VOIPACCOUNT))); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return list; + } + + /** + * 更新群组成员 + * @param members + * @return + */ +// public static ArrayList insertGroupMembers(List members) { +// +// ArrayList rows = new ArrayList(); +// if (members == null) { +// return rows; +// } +// try { +// synchronized (getInstance().mLock) { +// // Set the start transaction +// getInstance().sqliteDB().beginTransaction(); +// +// // Batch processing operation +// for (ECGroupMember member : members) { +// try { +// long row = insertGroupMember(member); +// if(row != -1) { +// rows.add(row); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// // Set transaction successful, do not set automatically +// // rolls back not submitted. +// getInstance().sqliteDB().setTransactionSuccessful(); +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// getInstance().sqliteDB().endTransaction(); +// } +// return rows; +// } + + /** + * 更新群组到数据库 + * @param member + * @return + */ +// public static long insertGroupMember(ECGroupMember member) { +// if(member == null || TextUtils.isEmpty(member.getBelong()) +// || TextUtils.isEmpty(member.getVoipAccount())) { +// return -1L; +// } +// ContentValues values = null; +// try { +// if(!ContactSqlManager.hasContact(member.getVoipAccount()) || needUpdateSexPhoto(member.getBelong() ,member.getVoipAccount() , member.getSex())) { +// updateContact(member); +// } else { +// if(!TextUtils.isEmpty(member.getDisplayName())) { +// ContactSqlManager.updateContactName(member); +// } +// } +// values = new ContentValues(); +// values.put(GroupMembersColumn.OWN_GROUP_ID, member.getBelong()); +// values.put(GroupMembersColumn.VOIPACCOUNT, member.getVoipAccount()); +// values.put(GroupMembersColumn.TEL, member.getTel()); +// values.put(GroupMembersColumn.MAIL, /*member.getEmail()*/"Jorstinchan@gmail.com"); +// values.put(GroupMembersColumn.REMARK, member.getDisplayName()); +// values.put(GroupMembersColumn.ISBAN, member.isBan() ? 2 : 1); +// values.put(GroupMembersColumn.ROLE, member.getRole()); +// values.put(GroupMembersColumn.SEX, member.getSex()); +// if(!isExitGroupMember(member.getBelong(), member.getVoipAccount())) { +// return getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_GROUP_MEMBERS, null, values); +// } else { +// return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_GROUP_MEMBERS ,values , "group_id ='" + member.getBelong() + "'" + " and voipaccount='" + member.getVoipAccount() + "'",null); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// if (values != null) { +// values.clear(); +// } +// +// } +// return -1L; +// } + +// private static void updateContact(ECGroupMember member) { +// ECContacts contacts = new ECContacts(member.getVoipAccount()); +// contacts.setNickname(member.getDisplayName()); +// ContactSqlManager.insertContact(contacts , member.getSex()); +// } + + /** + * 判断性格是否改变 + * + * @param belong + * @param userid + * @param sex + * @return + */ + public static boolean needUpdateSexPhoto(String belong, String userid, int sex) { + String sql = "select voipaccount ,sex from group_members where sex !=" + sex + " and voipaccount = '" + userid + "' and group_id='" + belong + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + cursor.moveToFirst(); + int anInt = cursor.getInt(1); + String string = cursor.getString(0); + cursor.close();; + return true; + } + return false; + } + + /** + * 是否存在该联系人 + * @param groupId + * @param member + * @return + */ + public static boolean isExitGroupMember(String groupId , String member) { + String sql = "select voipaccount from group_members where group_id ='" + groupId + "'" + " and voipaccount='" + member + "'"; + try { + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + /** + * 更新群组成员 + * @param groupId + * @param members + */ + public static void insertGroupMembers(String groupId , String[] members) { + if(TextUtils.isEmpty(groupId) || members == null || members.length <= 0 ) { + return ; + } +// for(String member :members) { +// ECGroupMember groupMember = new ECGroupMember(); +// groupMember.setBelong(groupId); +// groupMember.setVoipAccount(member); +// if(CCPAppManager.getClientUser() != null && CCPAppManager.getClientUser().getUserId().equals(member)) { +// groupMember.setRole(1); +// } else { +// groupMember.setRole(3); +// } +// groupMember.setTel(member); +// insertGroupMember(groupMember); +// } + } + + /** + * 删除群组所有成员 + * @param groupId + */ + public static void delAllMember(String groupId) { + String sqlWhere = "group_id ='" + groupId + "'"; + try { + getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_GROUP_MEMBERS, sqlWhere, null); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 删除群组成员 + * @param groupId 群组ID + * @param member 群组成员 + * @return + */ + public static void delMember(String groupId , String member) { + String sqlWhere = "group_id ='" + groupId + "'" + " and voipaccount='" + member + "'"; + try { + getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_GROUP_MEMBERS, sqlWhere, null); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 删除群组成员 + * @param groupId + * @param members + */ + public static void delMember(String groupId , String[] members) { + StringBuilder builder = new StringBuilder("in("); + for(String member : members) { + builder.append("'").append(member).append("'").append(","); + } + if(builder.toString().endsWith(",")) { + builder.replace(builder.length() - 1, builder.length(), ""); + builder.append(")"); + } else { + builder.replace(0, builder.length(), ""); + } + String sqlWhere = " group_id ='" + groupId + "'" + " and voipaccount " + builder.toString(); + try { + getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_GROUP_MEMBERS, sqlWhere, null); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 更新成员禁言状态 + * @param groupid + * @param member + * @param enabled + * @return + */ + public static long updateMemberSpeakState(String groupid , String member ,boolean enabled) { + try { + String where = GroupMembersColumn.VOIPACCOUNT + "='" + member + "' and " + GroupMembersColumn.OWN_GROUP_ID + "='" + groupid + "'"; + ContentValues values = new ContentValues(); + values.put(GroupMembersColumn.ISBAN , enabled?2:1); + return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_GROUP_MEMBERS , values , where , null); + }catch (Exception e) { + e.printStackTrace(); + return -1; + } + + } + + public static void reset() { + getInstance().release(); + } + + @Override + protected void release() { + super.release(); + sInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupNoticeSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupNoticeSqlManager.java new file mode 100644 index 0000000..1058782 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupNoticeSqlManager.java @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; + + + +import cn.shangyu.gdxzExpert.ecdemo.ui.group.DemoGroupNotice; +//import cn.shangyu.gdxzExpert.ecdemo.ui.group.GroupNoticeHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.group.NoticeSystemMessage; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 群组通知消息数据库 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-31 + * @version 4.0 + */ +public class GroupNoticeSqlManager extends AbstractSQLManager { + + public static final int NOTICE_MSG_TYPE = 1000; + public static final String CONTACT_ID = "10089"; + + private static GroupNoticeSqlManager instance; + + private GroupNoticeSqlManager() { + super(); + } + + private static GroupNoticeSqlManager getInstance() { + if (instance == null) { + instance = new GroupNoticeSqlManager(); + } + return instance; + } + + /** + * 更新群组通知消息 + * @param notice + * @return + */ + public static long insertNoticeMsg(NoticeSystemMessage notice) { + long ownThreadId = -1; + if(notice != null) { + // values.put("sid", "ec_group@yuntongxun.com"); + ContentValues buildContentValues = notice.buildContentValues(); + ownThreadId = ConversationSqlManager.querySessionIdForBySessionId(CONTACT_ID); + if (ownThreadId == 0) { + try { +// ECMessage message = ECMessage.createECMessage(ECMessage.Type.NONE); +// message.setForm(CONTACT_ID); +// message.setSessionId(CONTACT_ID); +// ownThreadId = ConversationSqlManager.insertSessionRecord(message, null); + + } catch (Exception e) { + e.printStackTrace(); + LogUtil.e(TAG + " " + e.toString()); + } + } + if(ownThreadId > 0) { + buildContentValues.put(SystemNoticeColumn.OWN_THREAD_ID, ownThreadId); + long row = getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE, null, buildContentValues); + if(row != -1) { + getInstance().notifyChanged("ec_group@yuntongxun.com"); + } + return row; + } + } + return -1; + } + + + /** + * 更新群组通知消息 + * @param notice + * @return + */ + public static long insertNoticeMsg(DemoGroupNotice notice) { + long ownThreadId = -1; + if(notice != null) { + // values.put("sid", "ec_group@yuntongxun.com"); + ContentValues buildContentValues = notice.buildContentValues(); + ownThreadId = ConversationSqlManager.querySessionIdForBySessionId(notice.getSender()); + if (ownThreadId == 0) { + try { + IMessageSqlManager.checkContact(notice.getSender(),null); +// ECMessage message = ECMessage.createECMessage(ECMessage.Type.NONE); +// message.setForm(notice.getSender()); +// message.setSessionId(notice.getSender()); +// ownThreadId = ConversationSqlManager.insertSessionRecord(message, null); + + } catch (Exception e) { + e.printStackTrace(); + LogUtil.e(TAG + " " + e.toString()); + } + } + if(ownThreadId > 0) { + buildContentValues.put(SystemNoticeColumn.OWN_THREAD_ID, ownThreadId); + long row = -1; + if(!getInstance().hasNotice(notice.getId())) { + row = getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE, null, buildContentValues); + } else { + buildContentValues.remove("notice_id"); + buildContentValues.remove("isRead"); + row = getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE , buildContentValues , "notice_id='" + notice.getId() + "'", null); + } + if(row != -1) { + getInstance().notifyChanged(notice.getSender()); + } + return row; + } + } + return -1; + } + + public boolean hasNotice(String noticeid) { + String sql = "select notice_id from " + DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE + " where notice_id='" + noticeid + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + cursor.close(); + cursor = null; + return true; + } + return false; + } + + /** + * + * @return + */ + public static int getMaxVersion() { + String sql = "select max(version) as maxVersion from " + DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE ; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql , null); + if(cursor != null && cursor.getCount() > 0) { + if(cursor.moveToFirst()) { + int maxVersion = cursor.getInt(cursor.getColumnIndex("maxVersion")); + cursor.close();; + return maxVersion; + } + } + return 0; + } + + /** + * 查询通知 + * @return + */ + public static Cursor getCursor() { + String sql = "select notice_id , verifymsg , admin , confirm , groupId , member ,dateCreated , groupName ,nickName ,type ,declared from system_notice order by dateCreated desc"; + return getInstance().sqliteDB().rawQuery(sql, null); + } + + /** + * 设置会话已读 + */ + public static void setAllSessionRead() { + ContentValues values = new ContentValues(); + values.put(SystemNoticeColumn.NOTICE_READ_STATUS, IMessageSqlManager.IMESSENGER_TYPE_READ); + String where = SystemNoticeColumn.NOTICE_READ_STATUS + " != " + IMessageSqlManager.IMESSENGER_TYPE_READ; + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE, values, where, null); + } + + /** + * 情况群组通知消息 + */ + public static void delSessions() { + getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE, null, null); + } + + public static void setSessionRead() { + + } + + public static void registerMsgObserver(OnMessageChange observer) { + getInstance().registerObserver(observer); + } + + public static void unregisterMsgObserver(OnMessageChange observer) { + getInstance().unregisterObserver(observer); + } + + public static void notifyMsgChanged(String session) { + getInstance().notifyChanged(session); + } + + public static void reset() { + getInstance().release(); + } + + @Override + protected void release() { + super.release(); + instance = null; + } + + public static long updateNoticeOperation(String id, boolean isAccept) { + ContentValues values = new ContentValues(); +// values.put("confirm" , isAccept? GroupNoticeHelper.SYSTEM_MESSAGE_THROUGH: GroupNoticeHelper.SYSTEM_MESSAGE_REFUSE); + return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_SYSTEM_NOTICE , values ,"notice_id='" + id +"'", null); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupSqlManager.java new file mode 100644 index 0000000..b4b856a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/GroupSqlManager.java @@ -0,0 +1,598 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.content.Intent; +import android.database.Cursor; +import android.text.TextUtils; + + + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-18 + * @version 4.0 + */ +public class GroupSqlManager extends AbstractSQLManager { + + Object mLock = new Object(); + private static GroupSqlManager sInstance; + private static GroupSqlManager getInstance() { + if(sInstance == null) { + sInstance = new GroupSqlManager(); + } + return sInstance; + } + + private GroupSqlManager() { + + } + + /** + * 查询群组列表 + * @return + */ + public static Cursor getGroupCursor(boolean isDiscussion ) { + String sql = null; + try { + if(!isDiscussion){ + + sql = "select groupid, name, type, count ,permission ,joined from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where isdiscussion=1 and joined =1 order by joined desc , create_date desc"; + }else { + sql = "select groupid, name, type, count ,permission ,joined from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where isdiscussion=0 and joined =1 order by joined desc , create_date desc"; + } + return getInstance().sqliteDB().rawQuery(sql, null); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + + + } + + /** + * 查询加入的群组 + * @return + */ +// public static List getJoinGroups() { +// ArrayList mArrayList = new ArrayList(); +// try { +// String sql = "select groupid, name from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where isdiscussion=0 and joined=1 order by create_date desc";; +// Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if(cursor != null && cursor.getCount() > 0) { +// while (cursor.moveToNext()) { +// ECGroup group = new ECGroup(); +// group.setGroupId(cursor.getString(0)); +// group.setName(cursor.getString(1)); +// mArrayList.add(group); +// } +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return mArrayList; +// } + + /** + * 判断是否加入 + * @param groupId + * @return + */ + public static boolean getJoinState(String groupId) { + String sql = "select groupid, joined from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where groupId = '" + groupId + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + if(cursor.moveToFirst()) { + int joind = cursor.getInt(1); + cursor.close(); + cursor = null; + return joind == 1; + } + } + return false; + } + + + + /** + * 批量更新群组 + * @param imGroups + * @param joined + * @throws android.database.SQLException + */ +// public static ArrayList insertGroupInfos(List imGroups, int joined) { +// +// ArrayList rows = new ArrayList(); +// if (imGroups == null) { +// return rows; +// } +// try { +// synchronized (getInstance().mLock) { +// // Set the start transaction +// getInstance().sqliteDB().beginTransaction(); +// +// // Batch processing operation +// for (ECGroup imGroup : imGroups) { +// try { +// long row = insertGroup(imGroup, joined == 1 , joined == -1,false); +// if(row != -1) { +// rows.add(row); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// +// // Set transaction successful, do not set automatically +// // rolls back not submitted. +// getInstance().sqliteDB().setTransactionSuccessful(); +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// getInstance().sqliteDB().endTransaction(); +// } +// return rows; +// } + + + +// public static ArrayList insertDisGroupInfos(List imGroups, int joined) { +// +// ArrayList rows = new ArrayList(); +// if (imGroups == null) { +// return rows; +// } +// try { +// synchronized (getInstance().mLock) { +// // Set the start transaction +// getInstance().sqliteDB().beginTransaction(); +// +// // Batch processing operation +//// for (ECGroup imGroup : imGroups) { +//// try { +//// long row = insertGroup(imGroup, joined == 1 , joined == -1,true); +//// if(row != -1) { +//// rows.add(row); +//// } +//// } catch (Exception e) { +//// e.printStackTrace(); +//// } +//// } +// +// // Set transaction successful, do not set automatically +// // rolls back not submitted. +// getInstance().sqliteDB().setTransactionSuccessful(); +// } +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// getInstance().sqliteDB().endTransaction(); +// } +// return rows; +// } + + + /** + * 更新群组到数据库 + * @param group + * @param join + */ +// public static long insertGroup(ECGroup group , boolean join , boolean ignoreJoin,boolean isDiscussion) { +// if(group == null || TextUtils.isEmpty(group.getGroupId())) { +// return -1L; +// } +// ContentValues values = null; +// try { +// +// values = new ContentValues(); +// values.put(GroupColumn.GROUP_ID, group.getGroupId()); +// values.put(GroupColumn.GROUP_NAME, group.getName()); +// values.put(GroupColumn.GROUP_PERMISSION, group.getPermission().ordinal()); +// values.put(GroupColumn.GROUP_ISNOTICE, group.isNotice()?1:2); +// values.put(GroupColumn.GROUP_TYPE, group.getGroupType()); +// +// if(isDiscussion){ +// values.put(GroupColumn.GROUP_Discussion, 1); +// +// } +// +// if(!TextUtils.isEmpty(group.getOwner())) { +// values.put(GroupColumn.GROUP_OWNER, group.getOwner()); +// values.put(GroupColumn.GROUP_DECLARED, group.getDeclare()); +// } +// values.put(GroupColumn.GROUP_DATE_CREATED, group.getDateCreated()); +// values.put(GroupColumn.GROUP_MEMBER_COUNTS, group.getCount()); +// if(!ignoreJoin) +// values.put(GroupColumn.GROUP_JOINED, join); +// +// if(isExitGroup(group.getGroupId())) { +// return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_GROUPS_2, values, "groupid = ?", new String[]{group.getGroupId()}); +// } +// long rowId = getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_GROUPS_2, null, values); +// return rowId; +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// if (values != null) { +// values.clear(); +// values = null; +// } +// +// } +// return -1L; +// } + + /** + * 群组是否存在 + * @param groupId + * @return + */ + public static boolean isExitGroup(String groupId) { + String sql = "select groupid from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where groupid ='" + groupId + "'"; + try { + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + public static boolean isDiscussionGroup(String groupId) { + String sql = "select groupid from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where isdiscussion=1 and groupid ='" + groupId + "'"; + try { + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + + public static void checkGroup(String contactid) { + + if(!isExitGroup(contactid)) { +// ECGroup group = new ECGroup(); +// group.setGroupId(contactid); +// group.setName(contactid); +// insertGroup(group , true , false,false); + } + } + + /** + * 更新群组信息 + * @param group + * @return + */ +// public static long updateGroup(ECGroup group) { +// if(group == null || TextUtils.isEmpty(group.getGroupId())) { +// return -1L; +// } +// ContentValues values = null; +// try { +// +// values = new ContentValues(); +// values.put(GroupColumn.GROUP_ID, group.getGroupId()); +// values.put(GroupColumn.GROUP_NAME, group.getName()); +// // values.put(GroupColumn.GROUP_PERMISSION, group.getPermission()); +// values.put(GroupColumn.GROUP_TYPE, group.getGroupType()); +// values.put(GroupColumn.GROUP_OWNER, group.getOwner()); +// values.put(GroupColumn.GROUP_DATE_CREATED, group.getDateCreated()); +// values.put(GroupColumn.GROUP_DECLARED, group.getDeclare()); +// values.put(GroupColumn.GROUP_MEMBER_COUNTS, group.getCount()); +// +// if(group.isDiscuss()){ +// values.put(GroupColumn.GROUP_Discussion, 1); +// +// } +// +// return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_GROUPS_2, values, "groupid = ?", new String[]{group.getGroupId()}); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// if (values != null) { +// values.clear(); +// values = null; +// } +// +// } +// return -1L; +// } + + /** + * 更新加入状态 + * @param groupId + * @return + */ + public static int updateUNJoin(String groupId) { + return updateJoinStatus(groupId, false); + } + + /** + * 更新群组加入状态 + * @param groupId + * @param join + * @return + */ + public static int updateJoinStatus(String groupId , boolean join) { + try { + ContentValues values = new ContentValues(); + values.put(GroupColumn.GROUP_JOINED, join ? 1:0); + return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_GROUPS_2, values, "groupid = ?", new String[]{groupId}); + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 删除群组 + * @param groupId + * @return + */ + public static int delGroup(String groupId) { + try { + Intent intent = new Intent(IMessageSqlManager.ACTION_GROUP_DEL); + intent.putExtra("group_id" , groupId); + CCPAppManager.getContext().sendBroadcast(intent); + return getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_GROUPS_2, "groupid = ?", new String[]{groupId}); + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 清空所有群组 + * @return + */ + public static int delALLGroup() { + try { + return getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_GROUPS_2, "isdiscussion=?", new String[]{"0"}); + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + public static int delALLDisGroup() { + try { + return getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_GROUPS_2, "isdiscussion=?", new String[]{"1"}); + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 查询所有的groupId; + * @return + */ + public static List getAllGroupId() { + ArrayList groupsId = new ArrayList(); + Cursor cursor = null; + try { + String sql = "select groupid from " + DatabaseHelper.TABLES_NAME_GROUPS_2; + cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor.getCount() > 0) { + while (cursor.moveToNext()) { + String groupid = cursor.getString(0); + if(TextUtils.isEmpty(groupid)) { + continue; + } + groupsId.add(groupid); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(cursor != null) { + cursor.close(); + cursor = null; + } + } + + return groupsId; + } + + /** + * 根据加入的状态查询群组 + * @param joined + * @return + */ + public static List getAllGroupIdBy(boolean joined) { + ArrayList groupsId = new ArrayList(); + Cursor cursor = null; + try { + String sql = "select groupid from "+ DatabaseHelper.TABLES_NAME_GROUPS_2 +" where isdiscussion =0 and joined = " + (joined?1:0); + cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor.getCount() > 0) { + while (cursor.moveToNext()) { + String groupid = cursor.getString(0); + if(TextUtils.isEmpty(groupid)) { + continue; + } + groupsId.add(groupid); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(cursor != null) { + cursor.close(); + cursor = null; + } + } + + return groupsId; + } + + + public static List getAllDisGroupIdBy(boolean joined) { + ArrayList groupsId = new ArrayList(); + Cursor cursor = null; + try { + String sql = "select groupid from "+ DatabaseHelper.TABLES_NAME_GROUPS_2 +" where isdiscussion =1 and joined = " + (joined?1:0); + cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor.getCount() > 0) { + while (cursor.moveToNext()) { + String groupid = cursor.getString(0); + if(TextUtils.isEmpty(groupid)) { + continue; + } + groupsId.add(groupid); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(cursor != null) { + cursor.close(); + cursor = null; + } + } + + return groupsId; + } + + + + + /** + * 查询群组详情 + * @param groupId + * @return + */ +// public static ECGroup getECGroup(String groupId) { +// try { +// String sql = "select name, type, count ,permission ,joined ,declared ,owner , isnotice from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where groupid = '" + groupId + "'"; +// Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if(cursor != null && cursor.getCount() > 0) { +// cursor.moveToFirst(); +// ECGroup group = new ECGroup(); +// group.setGroupId(groupId); +// group.setName(cursor.getString(0)); +// group.setGroupType(cursor.getInt(1)); +// group.setCount(cursor.getInt(2)); +// group.setPermission(ECGroup.Permission.values()[cursor.getInt(3)]); +// group.setDeclare(cursor.getString(5)); +// group.setOwner(cursor.getString(6)); +// group.setIsNotice(!(cursor.getInt(7) == 2)); +// return group; +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return null; +// } + + + + + public static boolean isNeedApply(String groupId) { + boolean joind = false; + try { + String sql = "select joined from "+ DatabaseHelper.TABLES_NAME_GROUPS_2+" where groupid = '" + groupId + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + cursor.moveToFirst(); + joind = cursor.getInt(0) == 1; + } + } catch (Exception e) { + e.printStackTrace(); + } + return !joind; + } + + + + public static void registerGroupObserver(OnMessageChange observer) { + getInstance().registerObserver(observer); + } + + public static void unregisterGroupObserver(OnMessageChange observer) { + getInstance().unregisterObserver(observer); + } + + public static void notifyGroupChanged(String session) { + getInstance().notifyChanged(session); + } + + public static void reset() { + getInstance().release(); + } + + @Override + protected void release() { + + super.release(); + sInstance = null; + } + + public static long updateGroupNofity(int ordinal , String groupid) { + // 群组免打扰 + ContentValues values = new ContentValues(); + values.put(GroupColumn.GROUP_ISNOTICE , ordinal); + return getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_GROUPS_2 , values, " groupid='" + groupid + "'" , null); + } + + /** + * 群组是否免打扰 + * @param groupId + * @return + */ + public static boolean isGroupNotify(String groupId) { + String sql = "select isnotice from " + DatabaseHelper.TABLES_NAME_GROUPS_2 + " where groupid='" + groupId + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + boolean isNotify = true; + if(cursor != null && cursor.getCount() > 0) { + if(cursor.moveToFirst()) { + isNotify = !(cursor.getInt(0) == 2); + } + cursor.close(); + } + return isNotify; + } + + + public static boolean isExistDiscussionGroup(){ + String sql = "select groupid from " + DatabaseHelper.TABLES_NAME_GROUPS_2 + " where isdiscussion='" + 1 + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if(cursor != null && cursor.getCount() > 0) { + + return true; + } + return false; + + + } + + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/IMessageSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/IMessageSqlManager.java new file mode 100644 index 0000000..59609f8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/IMessageSqlManager.java @@ -0,0 +1,1661 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.content.Intent; +import android.database.Cursor; +import android.database.SQLException; +import android.text.TextUtils; + +import com.lidroid.xutils.util.LogUtils; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactLogic; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * 消息数据库管理 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-11 + * @version 4.0 + */ +public class IMessageSqlManager extends AbstractSQLManager { + + /** 消息未读状态--未读 */ + static final public int IMESSENGER_TYPE_UNREAD = 0; + /** 消息未读状态--已读 */ + static final public int IMESSENGER_TYPE_READ = 1; + + static final public int IMESSENGER_BOX_TYPE_ALL = 0; + /** 信箱类型--收件箱 */ + static final public int IMESSENGER_BOX_TYPE_INBOX = 1; + static final public int IMESSENGER_BOX_TYPE_SENT = 2; + /** 信箱类型--草稿箱 */ + static final public int IMESSENGER_BOX_TYPE_DRAFT = 3; + /** 信箱类型--发件箱 */ + static final public int IMESSENGER_BOX_TYPE_OUTBOX = 4; + static final public int IMESSENGER_BOX_TYPE_FAILED = 5; + static final public int IMESSENGER_BOX_TYPE_QUEUED = 6; + + public static final String ACTION_SESSION_DEL = "com.yuntonxun.ecdemo.ACTION_SESSION_DEL"; + public static final String ACTION_GROUP_DEL = "com.yuntonxun.ecdemo.ACTION_GROUP_DEL"; + private static IMessageSqlManager instance; + + private IMessageSqlManager() { + super(); + } + + private static IMessageSqlManager getInstance() { + if (instance == null) { + instance = new IMessageSqlManager(); + } + return instance; + } + + public static void checkContact(String contactid, String userData) { + checkContact(contactid, null, userData); + } + + public static void checkContact(String contactid, String username, + String userData) { + + if (!ContactSqlManager.hasContact(contactid)) { + ECContacts c = ContactSqlManager.getCacheContact(contactid); + if (c == null) { + c = new ECContacts(contactid); + c.setNickname(contactid); + } + c.setContactid(contactid); + if (TextUtils.isEmpty(username)) { + int index = ContactSqlManager.getIntRandom(3, 0); + String remark = ContactLogic.CONVER_PHONTO[index]; + c.setRemark(remark); + } + ContactSqlManager.insertContact(c); + } + // 插入到患者数据库 + if (!PatientSqlManager.hasPatient(contactid)) { + + if (TextUtils.isEmpty(username)) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), + Constant.uuid, ""); + // 如果插入的是我自己 + if (contactid.equals(uuid)) { + String photo = SharePrefUtil.getString( + UIUtils.getContext(), Constant.photo, ""); + String realName = SharePrefUtil.getString( + UIUtils.getContext(), Constant.realName, ""); + String mobile = SharePrefUtil.getString( + UIUtils.getContext(), Constant.mobile, ""); + PatientModel p = PatientSqlManager + .getPatientInfo(contactid); + // int sex = SharePrefUtil.getInt(UIUtils.getContext(), + // "sex", 0); + p.setPhoto(photo); + p.setRealName(realName); + p.setMobile(mobile); + p.setType("Me"); + // p.setSex(sex); + PatientSqlManager.insertPatient(p, ""); + } + } + } + } + + public static long insertSysMessage(String txt, String sessionId) { + + long ownThreadId = ConversationSqlManager + .querySessionIdForBySessionId(sessionId); + ContentValues cv = new ContentValues(); + cv.put(IMessageColumn.MESSAGE_ID, UUID.randomUUID().toString()); + cv.put(IMessageColumn.MESSAGE_TYPE, 0); + cv.put(IMessageColumn.BODY, txt); +// cv.put(IMessageColumn.sender, CCPAppManager.getUserId()); + cv.put(IMessageColumn.SEND_STATUS, 1); + cv.put(IMessageColumn.OWN_THREAD_ID, ownThreadId); + cv.put(IMessageColumn.USER_DATA, "yuntongxun009" + txt); + cv.put(IMessageColumn.CREATE_DATE, System.currentTimeMillis()); + cv.put(IMessageColumn.RECEIVE_DATE, System.currentTimeMillis()); + + return getInstance().sqliteDB().insertOrThrow( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, null, cv); + } + + /** + * 更新消息到本地数据库 + * + * @param message + * 消息 + * @param boxType + * 消息保存的信箱类型 + * @return 更新的消息ID + */ +// public static long insertIMessage(ECMessage message, int boxType, +// String userData) { +// long ownThreadId = 0; +// long row = 0L; +// try { +// if (!TextUtils.isEmpty(message.getSessionId())) { +// String contactIds = message.getSessionId(); +// if (contactIds.toUpperCase().startsWith("G")) { +// GroupSqlManager.checkGroup(contactIds); +// } +// checkContact(message.getForm(), userData); +// // String type = PatientSqlManager.getPatientType(contactIds); +// // if (!TextUtils.isEmpty(type)) { +// ownThreadId = ConversationSqlManager +// .querySessionIdForBySessionId(contactIds); +// if (ownThreadId == 0) { +// try { +// ownThreadId = ConversationSqlManager +// .insertSessionRecord(message, userData); +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// } +// } else { +// /* +// * String substring = userData.substring(4, 5); if +// * ("1".equals(substring)) {//1.公益咨询 String patientType = +// * PatientSqlManager.getPatientType(contactIds); if +// * (Constant.typePatient.equals(patientType)) { +// * ConversationSqlManager.updateSessionRecord(message, +// * userData); } }else if ("2".equals(substring)) {//2.随访 +// * ConversationSqlManager.updateSessionRecord(message, +// * userData); }else if ("3".equals(substring)) {// 3.vip +// * +// * } +// */ +//// ConversationSqlManager.updateSessionRecord(message, +//// userData); +// } +// // } +// if (ownThreadId > 0) { +// int isread = IMESSENGER_TYPE_UNREAD; +// if (boxType == IMESSENGER_BOX_TYPE_OUTBOX +// || boxType == IMESSENGER_BOX_TYPE_DRAFT) { +// isread = IMESSENGER_TYPE_READ; +// } +// ContentValues values = new ContentValues(); +// if (boxType == IMESSENGER_BOX_TYPE_DRAFT) { +// try { // 草稿箱只保存文本 +// values.put(IMessageColumn.OWN_THREAD_ID, +// ownThreadId); +//// values.put(IMessageColumn.sender, message.getForm()); +//// values.put(IMessageColumn.MESSAGE_ID, +//// message.getMsgId()); +//// values.put(IMessageColumn.MESSAGE_TYPE, message +//// .getType().ordinal()); +//// values.put(IMessageColumn.SEND_STATUS, message +//// .getMsgStatus().ordinal()); +// values.put(IMessageColumn.READ_STATUS, isread); +// values.put(IMessageColumn.BOX_TYPE, boxType); +//// values.put(IMessageColumn.BODY, +//// ((ECTextMessageBody) message.getBody()) +//// .getMessage()); +//// values.put(IMessageColumn.USER_DATA, +//// message.getUserData()); +// values.put(IMessageColumn.RECEIVE_DATE, +// System.currentTimeMillis()); +//// values.put(IMessageColumn.CREATE_DATE, +//// message.getMsgTime()); +// +// row = getInstance().sqliteDB().insertOrThrow( +// DatabaseHelper.TABLES_NAME_IM_MESSAGE, +// null, values); +// } catch (SQLException e) { +// LogUtil.e(TAG + " " + e.toString()); +// } finally { +// values.clear(); +// } +// } else { +//// int ordinal = message.getType().ordinal(); +// +// try { +// values.put(IMessageColumn.OWN_THREAD_ID, +// ownThreadId); +//// values.put(IMessageColumn.MESSAGE_ID, +//// message.getMsgId()); +//// values.put(IMessageColumn.SEND_STATUS, message +//// .getMsgStatus().ordinal()); +// values.put(IMessageColumn.READ_STATUS, isread); +// values.put(IMessageColumn.BOX_TYPE, boxType); +// +//// values.put(IMessageColumn.USER_DATA, +//// message.getUserData()); +// values.put(IMessageColumn.RECEIVE_DATE, +// System.currentTimeMillis()); +//// values.put(IMessageColumn.CREATE_DATE, +//// message.getMsgTime()); +//// values.put(IMessageColumn.sender, message.getForm()); +//// values.put(IMessageColumn.MESSAGE_TYPE, message +//// .getType().ordinal()); +//// +//// if (message.getType() == Type.VIDEO +//// && message.getDirection() == Direction.RECEIVE) { +//// +//// ECVideoMessageBody videoBody = (ECVideoMessageBody) message +//// .getBody(); +//// values.put(IMessageColumn.BODY, +//// videoBody.getLength() + ""); +//// } +//// +//// if (message.getType() == Type.IMAGE +//// && message.getDirection() == Direction.RECEIVE) { +//// values.put(IMessageColumn.BODY, +//// message.getUserData()); +//// } +// putValues(message, values); +// LogUtil.d(TAG,"[insertIMessage] " + values.toString()); +// IMessageSqlManager instance2 = getInstance(); +// SQLiteDatabase sqliteDB2 = instance2.sqliteDB(); +// row = sqliteDB2.insertOrThrow(DatabaseHelper.TABLES_NAME_IM_MESSAGE,null, values); +//// row = getInstance().sqliteDB().insertOrThrow( +//// DatabaseHelper.TABLES_NAME_IM_MESSAGE, +//// null, values); +// } catch (SQLException e) { +// e.printStackTrace(); +// LogUtil.e(TAG + " " + e.toString()); +// } finally { +// values.clear(); +// } +// } +// getInstance().notifyChanged(contactIds); +// // 调用红点提示 +// // 公益咨询中历史咨询红点提示 +// String substring =""; +//// String substring = message.getUserData().substring(4, 5); +// if ("1".equals(substring)) {// 1.公益咨询 +// // String patientType = +// // PatientSqlManager.getPatientType(contactIds); +// // if (Constant.typeConsult.equals(patientType)) { +// // } +// if (PublicServiceActivity.getInstance() != null) { +// PublicServiceActivity.getInstance() +// .showPublicRedUnCount(); +// } +// } +// // 首页红点动态提示 +// if (HomeFragment.getInstance() != null) { +// HomeFragment.getInstance().showRedUnCount(); +// } +// // EvenBusEvent busEvent = new EvenBusEvent(); +// // // busEvent.setmMsg("新的消息。。"); +// // busEvent.setmType(substring); +// // EventBus.getDefault().post(busEvent); +// +// } +// } +// } catch (Exception e) { +// LogUtil.e(e.getMessage()); +// } +// return row; +// } + + /** + * + * @return + */ + public static int getMaxVersion() { + String sql = "select max(version) as maxVersion from " + + DatabaseHelper.TABLES_NAME_IM_MESSAGE; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + int maxVersion = cursor.getInt(cursor + .getColumnIndex("maxVersion")); + cursor.close(); + ; + return maxVersion; + } + } + return 0; + } + +// public static ECMessage getLastECMessage() { +// int maxVersion = getMaxVersion(); +// String sql = "select im_message.* ,im_thread.sessionId from im_message ,im_thread where version = " +// + maxVersion + " and im_message.sid=im_thread.id"; +// Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if (cursor != null && cursor.getCount() > 0) { +// if (cursor.moveToFirst()) { +//// ECMessage ecMessage = packageMessage(cursor); +// String sessionid = cursor.getString(cursor +// .getColumnIndexOrThrow(IThreadColumn.THREAD_ID)); +//// ecMessage.setSessionId(sessionid); +// cursor.close(); +//// if (ecMessage != null) { +//// return ecMessage; +//// } +// } +// } +// return null; +// } + + /** + * 更新消息的状态 + * + * @param msgId + * @param sendStatu + * @return + */ + public static int setIMessageSendStatus(String msgId, int sendStatu) { + return setIMessageSendStatus(msgId, sendStatu, 0); + } + + /** + * 更新文件的下载状态 + * + * @param msg + * @return + */ +// public static int updateIMessageDownload(ECMessage msg) { +// if (msg == null || TextUtils.isEmpty(msg.getMsgId())) { +// return -1; +// } +// int row = -1; +// ContentValues values = new ContentValues(); +// try { +// String where = IMessageColumn.MESSAGE_ID + " = '" + msg.getMsgId() +// + "'"; +// ECFileMessageBody msgBody = (ECFileMessageBody) msg.getBody(); +// values.put(IMessageColumn.FILE_PATH, msgBody.getLocalUrl()); +// values.put(IMessageColumn.USER_DATA, msg.getUserData()); +// if (msg.getType() == Type.VOICE) { +// int voiceTime = DemoUtils.calculateVoiceTime(msgBody +// .getLocalUrl()); +// values.put(IMessageColumn.DURATION, voiceTime); +// } +// row = getInstance().sqliteDB().update( +// DatabaseHelper.TABLES_NAME_IM_MESSAGE, values, where, null); +// // notifyChanged(msgId); +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// e.getStackTrace(); +// } finally { +// if (values != null) { +// values.clear(); +// values = null; +// } +// } +// return row; +// } + + /** + * 设置Im消息发送状态 + * + * @param msgId + * 消息ID + * @param sendStatu + * 发送状态 + * @return + */ + public static int setIMessageSendStatus(String msgId, int sendStatu, + int duration) { + int row = 0; + ContentValues values = new ContentValues(); + try { + String where = IMessageColumn.MESSAGE_ID + " = '" + msgId + + "' and " + IMessageColumn.SEND_STATUS + "!=" + sendStatu; + values.put(IMessageColumn.SEND_STATUS, sendStatu); + if (duration > 0) { + values.put(IMessageColumn.DURATION, duration); + } + row = getInstance().sqliteDB().update( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, values, where, null); + // notifyChanged(msgId); + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + e.getStackTrace(); + } finally { + if (values != null) { + values.clear(); + values = null; + } + } + return row; + } + + /** + * 根据不同的消息类型将数据保存到数据库 + * + * @param message + * @param values + */ +// private static void putValues(ECMessage message, ContentValues values) { +// if (message.getType() == ECMessage.Type.TXT) { +// values.put(IMessageColumn.BODY, +// ((ECTextMessageBody) message.getBody()).getMessage()); +// } else { +// ECFileMessageBody body = (ECFileMessageBody) message.getBody(); +// values.put(IMessageColumn.FILE_PATH, body.getLocalUrl()); +// values.put(IMessageColumn.FILE_URL, body.getRemoteUrl()); +// if (message.getType() == ECMessage.Type.VOICE) { +// ECVoiceMessageBody Voicebody = (ECVoiceMessageBody) message +// .getBody(); +// values.put(IMessageColumn.DURATION, Voicebody.getDuration()); +// } +// +// } +// } +// private static void putValues(ECMessage message, ContentValues values) { +// if (message.getType() == Type.TXT) { +// // 文本 +// values.put(IMessageColumn.BODY, +// ((ECTextMessageBody) message.getBody()).getMessage()); +// } else if (message.getType() == Type.LOCATION) { +// // 地理位置 +// values.put(IMessageColumn.BODY, message.getBody().toString()); +// } else if (message.getType() == Type.CALL) { +// // 呼叫类型 +// ECCallMessageBody callBody = (ECCallMessageBody) message.getBody(); +// values.put(IMessageColumn.BODY, callBody.getCallText()); +// } else { +// // 富文本 +// if (message.getType() == Type.RICH_TEXT) { +// ECPreviewMessageBody body = (ECPreviewMessageBody) message +// .getBody(); +// values.put(IMessageColumn.FILE_URL, body.getUrl()); +// values.put(IMessageColumn.BODY, body.getTitle()); +// } else { +// // 其他文件类型的 +// ECFileMessageBody body = (ECFileMessageBody) message.getBody(); +// values.put(IMessageColumn.FILE_PATH, body.getLocalUrl()); +// values.put(IMessageColumn.FILE_URL, body.getRemoteUrl()); +// if (message.getType() == Type.VOICE) { +// ECVoiceMessageBody VoiceBody = (ECVoiceMessageBody) message +// .getBody(); +// values.put(IMessageColumn.DURATION, VoiceBody.getDuration()); +// } +// +// } +// } +// } + /** + * + * @param threadId + * @param lastTime + * @return + */ +// public static ArrayList queryIMessageListAfter(long threadId, +// String lastTime) { +// ArrayList al = null; +// Cursor cursor = null; +// StringBuffer sb = new StringBuffer(); +// if (lastTime != null && !lastTime.equals("") && !lastTime.equals("0")) { +// sb.append(IMessageColumn.CREATE_DATE + " > ").append(lastTime); +// } else { +// sb.append("1=1"); +// } +// sb.append(" and " + IMessageColumn.OWN_THREAD_ID + " = ").append( +// threadId); +// sb.append(" and " + IMessageColumn.BOX_TYPE + " != 3"); +// try { +// cursor = getInstance().sqliteDB().query(false, +// DatabaseHelper.TABLES_NAME_IM_MESSAGE, null, sb.toString(), +// null, null, null, IMessageColumn.RECEIVE_DATE + " asc", +// null); +// if (cursor != null) { +// if (cursor.getCount() == 0) { +// return null; +// } +// al = new ArrayList(); +// while (cursor.moveToNext()) { +// +// long id = cursor.getLong(cursor +// .getColumnIndex(IMessageColumn.ID)); +// String sender = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.sender)); +// String msgId = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.MESSAGE_ID)); +// long ownThreadId = cursor +// .getLong(cursor +// .getColumnIndexOrThrow(IMessageColumn.OWN_THREAD_ID)); +// long createDate = cursor.getLong(cursor +// .getColumnIndexOrThrow(IMessageColumn.CREATE_DATE)); +// long receiveDate = cursor +// .getLong(cursor +// .getColumnIndexOrThrow(IMessageColumn.RECEIVE_DATE)); +// String userData = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.USER_DATA)); +// int read = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.READ_STATUS)); +// int boxType = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.BOX_TYPE)); +// int msgType = cursor +// .getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.MESSAGE_TYPE)); +// int sendStatus = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.SEND_STATUS)); +// +// ECMessage ecMessage = null; +// if (msgType == Type.TXT.ordinal()) { +// String content = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.BODY)); +// ecMessage = ECMessage +// .createECMessage(Type.TXT); +// ECTextMessageBody textBody = new ECTextMessageBody( +// content); +// ecMessage.setBody(textBody); +// } else { +// /* +// * String fileUrl = +// * cursor.getString(cursor.getColumnIndexOrThrow +// * (IMessageColumn.FILE_URL)); String fileLocalPath = +// * cursor +// * .getString(cursor.getColumnIndexOrThrow(IMessageColumn +// * .FILE_PATH)); +// * +// * if (msgType == ECMessage.Type.VOICE.ordinal()) { int +// * duration = +// * cursor.getInt(cursor.getColumnIndexOrThrow( +// * IMessageColumn.DURATION)); ECVoiceMessageBody +// * voiceBody = new ECVoiceMessageBody(new +// * File(fileLocalPath), 0); +// * voiceBody.setRemoteUrl(fileUrl); +// * ecMessage.setBody(voiceBody); ecMessage = +// * ECMessage.createECMessage(ECMessage.Type.VOICE); } +// * else if (msgType == ECMessage.Type.IMAGE.ordinal() || +// * msgType == ECMessage.Type.FILE.ordinal()) { +// * ECFileMessageBody fileBody = new } else { continue; } +// */ +// } +// ecMessage.setId(id); +// ecMessage.setForm(sender); +// ecMessage.setMsgId(msgId); +// ecMessage.setMsgTime(createDate); +// ecMessage.setUserData(userData); +// ecMessage.setDirection(getMessageDirect(boxType)); +// al.add(0, ecMessage); +// } +// } +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// e.printStackTrace(); +// } finally { +// if (cursor != null) { +// cursor.close(); +// cursor = null; +// } +// } +// return al; +// } + + public static void deleteChattingMessage(long sessionId) { + LogUtil.i("删除。。。"); + while (true) { +// ArrayList iMessageList = IMessageSqlManager +// .queryIMessageList(sessionId, 50, null); +// if (iMessageList != null && !iMessageList.isEmpty()) { +// for (ECMessage detail : iMessageList) { +// delSingleMsg(detail.getMsgId()); +// } +// continue; +// } + return; + } + } + + public static void _deleteChattingMessage(long sessionId) { +// ArrayList iMessageList = IMessageSqlManager +// .queryIMessageList(sessionId, 0, null); +// if (iMessageList != null && !iMessageList.isEmpty()) { +// ArrayList fileList = new ArrayList(); +// for (ECMessage detail : iMessageList) { +// if (detail.getType() != Type.TXT) { +// ECFileMessageBody body = (ECFileMessageBody) detail +// .getBody(); +// if (!TextUtils.isEmpty(body.getLocalUrl())) { +// if (body.getLocalUrl().startsWith("THUMBNAIL://")) { +// ImgInfo imgInfo = ImgInfoSqlManager.getInstance() +// .getImgInfo(detail.getMsgId()); +// if (imgInfo != null) { +// ImgInfoSqlManager.getInstance().delImgInfo( +// imgInfo.getMsglocalid()); +// if (TextUtils.isEmpty(FileAccessor +// .getImagePathName() +// + "/" +// + imgInfo.getThumbImgPath())) { +// continue; +// } +// if (!new File(FileAccessor.getImagePathName() +// + "/" + imgInfo.getThumbImgPath()) +// .exists()) { +// continue; +// } +// fileList.add(FileAccessor.getImagePathName() +// + "/" + imgInfo.getBigImgPath()); +// fileList.add(FileAccessor.getImagePathName() +// + "/" + imgInfo.getThumbImgPath()); +// } +// } else if (detail.getUserData() != null +// && detail.getUserData().indexOf("THUMBNAIL://") != -1) { +// String userData = detail.getUserData(); +// int start = userData.indexOf("THUMBNAIL://"); +// if (start != -1) { +// String thumbnail = userData.substring(start); +// fileList.add(ImgInfoSqlManager.getInstance() +// .getThumbUrlAndDel(thumbnail)); +// } +// } else { +// fileList.add(body.getLocalUrl()); +// } +// } +// } +// } +// int rows = IMessageSqlManager.deleteMulitMsgs(iMessageList); +// if (rows > 0 && !fileList.isEmpty()) { +// FileAccessor.delFiles(fileList); +// } +// } + } + + public static void delSingleMsg(String id) { +// ECMessage msg = getMsg(id); +// if (msg == null) { +// return; +// } + delMessage(id); +// if (msg.getType() != Type.TXT) { +// ArrayList fileList = new ArrayList(); +// ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); +// if (!TextUtils.isEmpty(body.getLocalUrl())) { +// if (body.getLocalUrl().startsWith("THUMBNAIL://")) { +// ImgInfo imgInfo = ImgInfoSqlManager.getInstance() +// .getImgInfo(msg.getMsgId()); +// if (imgInfo != null) { +// ImgInfoSqlManager.getInstance().delImgInfo( +// imgInfo.getMsglocalid()); +// if (TextUtils.isEmpty(FileAccessor.getImagePathName() +// + "/" + imgInfo.getThumbImgPath())) { +// return; +// } +// if (!new File(FileAccessor.getImagePathName() + "/" +// + imgInfo.getThumbImgPath()).exists()) { +// return; +// } +// fileList.add(FileAccessor.getImagePathName() + "/" +// + imgInfo.getBigImgPath()); +// fileList.add(FileAccessor.getImagePathName() + "/" +// + imgInfo.getThumbImgPath()); +// +// } +// +// } else if (msg.getUserData() != null +// && msg.getUserData().indexOf("THUMBNAIL://") != -1) { +// String userData = msg.getUserData(); +// int start = userData.indexOf("THUMBNAIL://"); +// if (start != -1) { +// String thumbnail = userData.substring(start +// + "THUMBNAIL://".length()); +// ImgInfo imgInfo = ImgInfoSqlManager.getInstance() +// .getImgInfo(thumbnail); +// if (imgInfo != null) { +// ImgInfoSqlManager.getInstance().delImgInfo( +// imgInfo.getMsglocalid()); +// if (TextUtils.isEmpty(FileAccessor +// .getImagePathName() +// + "/" +// + imgInfo.getThumbImgPath())) { +// return; +// } +// if (!new File(FileAccessor.getImagePathName() + "/" +// + imgInfo.getThumbImgPath()).exists()) { +// return; +// } +// fileList.add(FileAccessor.getImagePathName() + "/" +// + imgInfo.getBigImgPath()); +// fileList.add(FileAccessor.getImagePathName() + "/" +// + imgInfo.getThumbImgPath()); +// +// } +// } +// } else { +// fileList.add(body.getLocalUrl()); +// } +// } +// FileAccessor.delFiles(fileList); +// } + } + + public static void delMessage(String id) { + LogUtil.d(TAG, "[delMessage] msgid = " + id); + getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_IM_MESSAGE, + "msgid='" + id + "'", null); + } + + /** + * 删除会话 + * + * @param contactId + */ + public static void deleteChattingMessage(String contactId) { + long sessionId = ConversationSqlManager + .querySessionIdForBySessionId(contactId); + deleteChattingMessage(sessionId); + ConversationSqlManager.getInstance().delSession(contactId); + } + + public static Cursor queryIMessageCursor(long threadId, int limit) { + + String sql = "SELECT * FROM " + DatabaseHelper.TABLES_NAME_IM_MESSAGE + + " WHERE " + IMessageColumn.OWN_THREAD_ID + "= " + threadId + + " ORDER BY " + IMessageColumn.RECEIVE_DATE + " ASC LIMIT " + + limit + " offset " + "(SELECT count(*) FROM " + + DatabaseHelper.TABLES_NAME_IM_MESSAGE + " WHERE " + + IMessageColumn.OWN_THREAD_ID + "= " + threadId + " ) -" + + limit; + LogUtils.i("getCursor threadId:" + threadId + " limit:" + limit + + " [" + sql + "]"); + return getInstance().sqliteDB().rawQuery(sql, null); + } + + /** + * IM分页查询 + * + * @param num + * @param lastTime + * @return + */ +// public static ArrayList queryIMessageList(long threadId, +// int num, String lastTime) { +// ArrayList al = null; +// Cursor cursor = null; +// StringBuffer sb = new StringBuffer(); +// if (lastTime != null && !lastTime.equals("") && !lastTime.equals("0")) { +// sb.append(IMessageColumn.CREATE_DATE + " < ").append(lastTime); +// } else { +// sb.append("1=1"); +// } +// // if (threadId != 0) { +// sb.append(" and " + IMessageColumn.OWN_THREAD_ID + " = ").append( +// threadId); +// // } +// sb.append(" and " + IMessageColumn.BOX_TYPE + " != " +// + Direction.DRAFT.ordinal()); +// try { +// cursor = getInstance().sqliteDB().query(false, +// DatabaseHelper.TABLES_NAME_IM_MESSAGE, null, sb.toString(), +// null, null, null, IMessageColumn.RECEIVE_DATE + " desc", +// num == 0 ? null : String.valueOf(num)); +// if (cursor != null) { +// if (cursor.getCount() == 0) { +// return null; +// } +// al = new ArrayList(); +// while (cursor.moveToNext()) { +// +// ECMessage ecMessage = packageMessage(cursor); +// if (ecMessage == null) { +// continue; +// } +// al.add(0, ecMessage); +// } +// } +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// e.printStackTrace(); +// } finally { +// if (cursor != null) { +// cursor.close(); +// cursor = null; +// } +// } +// return al; +// +// } + + /** + * IM分页查询 + * + * @param num + * @param version + * @return + */ +// public static ArrayList queryIMessageVersionList(long threadId, +// int num, String version) { +// ArrayList al = null; +// Cursor cursor = null; +// StringBuffer sb = new StringBuffer(); +// if (version != null && !version.equals("") && !version.equals("0")) { +// sb.append(IMessageColumn.ID + " < ").append(version); +// } else { +// sb.append("1=1"); +// } +// // if (threadId != 0) { +// sb.append(" and " + IMessageColumn.OWN_THREAD_ID + " = ").append( +// threadId); +// // } +//// sb.append(" and " + IMessageColumn.BOX_TYPE + " != " +//// + Direction.DRAFT.ordinal()); +// try { +// cursor = getInstance().sqliteDB().query(false, +// DatabaseHelper.TABLES_NAME_IM_MESSAGE, null, sb.toString(), +// null, null, null, IMessageColumn.RECEIVE_DATE + " desc", +// num == 0 ? null : String.valueOf(num)); +// if (cursor != null) { +// if (cursor.getCount() == 0) { +// return null; +// } +// al = new ArrayList(); +// while (cursor.moveToNext()) { +// +// ECMessage ecMessage = packageMessage(cursor); +// if (ecMessage == null) { +// continue; +// } +// al.add(0, ecMessage); +// } +// } +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// e.printStackTrace(); +// } finally { +// if (cursor != null) { +// cursor.close(); +// cursor = null; +// } +// } +// return al; +// +// } + + /** + * 组装消息 + * + * @param cursor + * @return + */ +// public static ECMessage packageMessage(Cursor cursor) { +// long id = cursor.getLong(cursor.getColumnIndex(IMessageColumn.ID)); +// String sender = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.sender)); +// String msgId = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.MESSAGE_ID)); +// // long ownThreadId = +// // cursor.getLong(cursor.getColumnIndexOrThrow(IMessageColumn.OWN_THREAD_ID)); +// long createDate = cursor.getLong(cursor +// .getColumnIndexOrThrow(IMessageColumn.CREATE_DATE)); +// int version = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.VERSION)); +// String userData = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.USER_DATA)); +// int read = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.READ_STATUS)); +// int boxType = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.BOX_TYPE)); +// int msgType = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.MESSAGE_TYPE)); +// int sendStatus = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.SEND_STATUS)); +// +// ECMessage ecMessage = ECMessage.createECMessage(ECMessage.Type.NONE); +// if (msgType == ECMessage.Type.TXT.ordinal()) { +// String content = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.BODY)); +// ecMessage.setType(ECMessage.Type.TXT); +// ECTextMessageBody textBody = new ECTextMessageBody(content); +// ecMessage.setBody(textBody); +// } else { +// String fileUrl = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.FILE_URL)); +// String fileLocalPath = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.FILE_PATH)); +// +// if (msgType == ECMessage.Type.VOICE.ordinal()) { +// ecMessage.setType(ECMessage.Type.VOICE); +// int duration = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.DURATION)); +// ECVoiceMessageBody voiceBody = new ECVoiceMessageBody(new File( +// fileLocalPath), 0); +// voiceBody.setRemoteUrl(fileUrl); +// ecMessage.setBody(voiceBody); +// voiceBody.setDuration(duration); +// } else if (msgType == ECMessage.Type.IMAGE.ordinal() +// || msgType == ECMessage.Type.VIDEO.ordinal() +// || msgType == ECMessage.Type.FILE.ordinal()) { +// ECFileMessageBody fileBody = new ECFileMessageBody(); +// if (msgType == ECMessage.Type.FILE.ordinal()) { +// ecMessage.setType(ECMessage.Type.FILE); +// } else if (msgType == ECMessage.Type.IMAGE.ordinal()) { +// fileBody = new ECImageMessageBody(); +// ecMessage.setType(ECMessage.Type.IMAGE); +// } else { +// fileBody = new ECVideoMessageBody(); +// ecMessage.setType(ECMessage.Type.VIDEO); +// } +// fileBody.setLocalUrl(fileLocalPath); +// fileBody.setRemoteUrl(fileUrl); +// fileBody.setFileName(DemoUtils +// .getFileNameFormUserdata(userData)); +// ecMessage.setBody(fileBody); +// } else { +// return null; +// } +// } +// ecMessage.setId(id); +// ecMessage.setForm(sender); +// ecMessage.setMsgId(msgId); +// ecMessage.setMsgTime(createDate); +// ecMessage.setUserData(userData); +// ecMessage.setVersion(version); +// if (sendStatus == ECMessage.MessageStatus.SENDING.ordinal()) { +// ecMessage.setMsgStatus(ECMessage.MessageStatus.SENDING); +// } else if (sendStatus == ECMessage.MessageStatus.RECEIVE.ordinal() +// || sendStatus == 4) { +// // sendStatus == 4 兼容以前版本 +// ecMessage.setMsgStatus(ECMessage.MessageStatus.RECEIVE); +// } else if (sendStatus == ECMessage.MessageStatus.SUCCESS.ordinal()) { +// ecMessage.setMsgStatus(ECMessage.MessageStatus.SUCCESS); +// } else if (sendStatus == ECMessage.MessageStatus.FAILED.ordinal()) { +// ecMessage.setMsgStatus(ECMessage.MessageStatus.FAILED); +// } +// ecMessage.setDirection(getMessageDirect(boxType)); +// return ecMessage; +// } +// public static ECMessage packageMessage(Cursor cursor) { +// long id = cursor.getLong(cursor.getColumnIndex(IMessageColumn.ID)); +// String sender = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.sender)); +// String msgId = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.MESSAGE_ID)); +// // long ownThreadId = +// // cursor.getLong(cursor.getColumnIndexOrThrow(IMessageColumn.OWN_THREAD_ID)); +// long createDate = cursor.getLong(cursor +// .getColumnIndexOrThrow(IMessageColumn.CREATE_DATE)); +// int version = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.VERSION)); +// String userData = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.USER_DATA)); +// int read = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.READ_STATUS)); +// int boxType = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.BOX_TYPE)); +// int msgType = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.MESSAGE_TYPE)); +// int sendStatus = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.SEND_STATUS)); +// +//// ECMessage ecMessage = ECMessage.createECMessage(Type.NONE); +// if (msgType == Type.TXT.ordinal() +// || msgType == Type.NONE.ordinal()) { +// String content = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.BODY)); +// ecMessage.setType(Type.TXT); +// ECTextMessageBody textBody = new ECTextMessageBody(content); +// ecMessage.setBody(textBody); +// } else if (msgType == Type.CALL.ordinal()) { +// String content = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.BODY)); +// ECCallMessageBody body = new ECCallMessageBody(content); +// ecMessage.setType(Type.CALL); +// ecMessage.setBody(body); +// } else if (msgType == Type.LOCATION.ordinal()) { +// String content = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.BODY)); +// ecMessage.setType(Type.LOCATION); +// +// String lon; +// String lat; +// try { +// JSONObject jsonObject = new JSONObject(content); +// lon = jsonObject.getString("lon"); +// lat = jsonObject.getString("lat"); +// ECLocationMessageBody textBody = new ECLocationMessageBody( +// Double.parseDouble(lat), Double.parseDouble(lon)); +// textBody.setTitle(jsonObject.getString("title")); +// ecMessage.setBody(textBody); +// } catch (JSONException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// +// else { +// String fileUrl = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.FILE_URL)); +// String fileLocalPath = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.FILE_PATH)); +// +// if (msgType == Type.VOICE.ordinal()) { +// ecMessage.setType(Type.VOICE); +// int duration = cursor.getInt(cursor +// .getColumnIndexOrThrow(IMessageColumn.DURATION)); +// ECVoiceMessageBody voiceBody = new ECVoiceMessageBody(new File( +// fileLocalPath), 0); +// voiceBody.setRemoteUrl(fileUrl); +// ecMessage.setBody(voiceBody); +// voiceBody.setDuration(duration); +// } else if (msgType == Type.IMAGE.ordinal() +// || msgType == Type.VIDEO.ordinal() +// || msgType == Type.FILE.ordinal()) { +// ECFileMessageBody fileBody = new ECFileMessageBody(); +// if (msgType == Type.FILE.ordinal()) { +// ecMessage.setType(Type.FILE); +// } else if (msgType == Type.IMAGE.ordinal()) { +// fileBody = new ECImageMessageBody(); +// ecMessage.setType(Type.IMAGE); +// } else { +// fileBody = new ECVideoMessageBody(); +// ecMessage.setType(Type.VIDEO); +// } +// fileBody.setLocalUrl(fileLocalPath); +// fileBody.setRemoteUrl(fileUrl); +// fileBody.setFileName(DemoUtils.getFileNameFormUserdata(userData)); +// ecMessage.setBody(fileBody); +// } else if (msgType == Type.RICH_TEXT.ordinal()) { +// { +// ECPreviewMessageBody body = new ECPreviewMessageBody(); +// ecMessage.setType(Type.RICH_TEXT); +// String content = cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.BODY)); +// body.setTitle(content); +// body.setLocalUrl(cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.FILE_PATH))); +// body.setUrl(cursor.getString(cursor +// .getColumnIndexOrThrow(IMessageColumn.FILE_URL))); +// ecMessage.setBody(body); +// } +// // return null; +// } +// } +// ecMessage.setId(id); +// ecMessage.setFrom(sender); +// ecMessage.setMsgId(msgId); +// ecMessage.setMsgTime(createDate); +// ecMessage.setUserData(userData); +// if (sendStatus == ECMessage.MessageStatus.SENDING.ordinal()) { +// ecMessage.setMsgStatus(ECMessage.MessageStatus.SENDING); +// } else if (sendStatus == ECMessage.MessageStatus.RECEIVE.ordinal() +// || sendStatus == 4) { +// // sendStatus == 4 兼容以前版本 +// ecMessage.setMsgStatus(ECMessage.MessageStatus.RECEIVE); +// } else if (sendStatus == ECMessage.MessageStatus.SUCCESS.ordinal()) { +// ecMessage.setMsgStatus(ECMessage.MessageStatus.SUCCESS); +// } else if (sendStatus == ECMessage.MessageStatus.FAILED.ordinal()) { +// ecMessage.setMsgStatus(ECMessage.MessageStatus.FAILED); +// } +// ecMessage.setDirection(getMessageDirect(boxType)); +// +// return ecMessage; +// } + /** + * + * @param //删除本地图片 + */ + public static void deleteLocalFileAfterFire(String msgId) { + + if (TextUtils.isEmpty(msgId)) { + return; + } + String text = ""; + String sql = "select * from " + DatabaseHelper.TABLES_NAME_IM_MESSAGE + + " where msgid = '" + msgId + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + text = cursor.getString(cursor.getColumnIndex("localPath")); + cursor.close(); + cursor = null; + + } + } + + if (!TextUtils.isEmpty(text)) { + + File file = new File(text); + if (file != null && file.exists()) { + file.delete(); + } + } + + } + + public static long deleteAllBySession(String sessionId) { + long l = ConversationSqlManager.querySessionIdForBySessionId(sessionId); + if (l > 0) { + CCPAppManager.getContext().sendBroadcast( + new Intent(ACTION_SESSION_DEL)); + return getInstance().sqliteDB().delete( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, + IMessageColumn.OWN_THREAD_ID + " = " + l, null); + } + return -1; + } + + public static void getAllFileMessageBySession(String sessionId) { + + } + + /** + * 返回消息的类型,发送、接收、草稿 + * + * @param type + * 消息类型 + * @return + */ +// public static Direction getMessageDirect(int type) { +// if (type == Direction.SEND.ordinal()) { +// return Direction.SEND; +// } else if (type == Direction.RECEIVE.ordinal()) { +// return Direction.RECEIVE; +// } else { +// return Direction.DRAFT; +// } +// } + + /** + * 根据会话ID查询会话消息的数据量 + * + * @param threadId + * 当前会话ID + * @return 会话总数 + */ + public static int getTotalCount(long threadId) { + String sql = "SELECT COUNT(*) FROM " + + DatabaseHelper.TABLES_NAME_IM_MESSAGE + " WHERE " + "sid" + + "=" + threadId; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + int count = 0; + if (cursor.moveToLast()) { + count = cursor.getInt(0); + } + cursor.close(); + return count; + } + + public static Cursor getNullCursor() { + return getInstance().sqliteDB().query( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, null, "msgid=?", + new String[] { "-1" }, null, null, null); + } + +// public static int deleteMulitMsgs(List msgs) { +// List rowIds = new ArrayList(); +// for (ECMessage detail : msgs) { +// rowIds.add(detail.getId()); +// } +// +// return deleteMulitMsg(rowIds); +// } + + /** + * + * @param rowIds + * @return + */ + public static int deleteMulitMsg(List rowIds) { + if (rowIds == null || rowIds.isEmpty()) { + LogUtil.d(TAG, "ignore delete , rowIds empty"); + return 0; + } + + StringBuilder where = new StringBuilder(IMessageColumn.ID + " IN ("); + int lenght = where.length(); + for (long rowId : rowIds) { + + if (where.length() > lenght) { + where.append(","); + } + where.append(rowId); + } + + where.append(")"); + LogUtil.d(TAG, "executeSql where " + where); + + int row = 0; + try { + row = getInstance().sqliteDB().delete( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, where.toString(), + null); + } catch (Exception e) { + e.printStackTrace(); + } + return row; + } + + /** + * 分页加载查询数据 + * + * @param threadId + * @param limit + * @return + */ + public static Cursor getCursor(long threadId, int limit) { + String sql = "SELECT * FROM " + DatabaseHelper.TABLES_NAME_IM_MESSAGE + + " WHERE " + "sid" + "= " + threadId + " ORDER BY " + + "serverTime" + " ASC LIMIT " + limit + " offset " + + "(SELECT count(*) FROM " + + DatabaseHelper.TABLES_NAME_IM_MESSAGE + " WHERE " + "sid" + + "= " + threadId + " ) -" + limit; + LogUtil.d(TAG, "getCursor sid:" + threadId + " limit:" + limit + " [" + + sql + "]"); + return getInstance().sqliteDB().rawQuery(sql, null); + } + + /** + * 查询会话所有的图片 + * + * @param session + * @return + */ + public static List getImageMessageIdSession(long session) { + String sql = "select msgid from " + + DatabaseHelper.TABLES_NAME_IM_MESSAGE + " where " + + IMessageColumn.OWN_THREAD_ID + " = " + session + + " and msgType="+" "; +// + Type.IMAGE.ordinal(); + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + List msgids = null; + if (cursor != null && cursor.getCount() > 0) { + msgids = new ArrayList(); + while (cursor.moveToNext()) { + msgids.add(cursor.getString(0)); + LogUtil.i("图片地址ID = "+cursor.getString(0)); + } + cursor.close(); + } + + return msgids; + } + + /** + * 查询所有未读数 + * + * @return + */ + public static int qureyAllSessionUnreadCount() { + int count = 0; + String[] columnsList = { "sum(" + IThreadColumn.UNREAD_COUNT + ")" }; + Cursor cursor = null; + try { + cursor = getInstance().sqliteDB().query( + DatabaseHelper.TABLES_NAME_IM_SESSION, columnsList, null, + null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("sum(" + + IThreadColumn.UNREAD_COUNT + ")")); + } + } + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + cursor = null; + } + } + return count; + } + + /** + * + * getUnByTypeUnreadCount 根据send_type查找未读个数 + * + * @param type + * @return int + */ + public static int getUnByTypeUnreadCount(String type) { + String sql = "SELECT sum(" + IThreadColumn.UNREAD_COUNT+ ") FROM im_thread WHERE send_type in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(type).append("')"); + int count = 0; + Cursor cursor = null; + try { + cursor = getInstance().sqliteDB().rawQuery(sql + sb.toString(),null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("sum(" + + IThreadColumn.UNREAD_COUNT + ")")); + + } + } + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return count; + } + /** + * + * getUnByTypeUnreadCount 根据send_type删除未读个数 + * + * @param type + * @return int + */ + public static int UnreadCount(String type) { + + ContentValues values = new ContentValues(); + try { + String where = "send_type in ('"+type+"')"; + values.put(IThreadColumn.UNREAD_COUNT, 0); + int update = getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_SESSION, values, where, null); + return update; + } catch (Exception e) { + LogUtil.e( "更新会话已读状态 e = " + e.toString()); + e.getStackTrace(); + } finally { + if (values != null) { + values.clear(); + } + } + return -1; + + } + + + /** + * 根据id与type getBySessionIdUnreadCount + * + * @param sessionId + * @param type + * @return int + */ + public static int getBySessionIdUnreadCount(String sessionId, String type) { + String sql = "SELECT sum(" + IThreadColumn.UNREAD_COUNT + + ") FROM im_thread WHERE "; + StringBuilder sb = new StringBuilder("sessionId = '"); + sb.append(sessionId).append("' AND send_type in ('"); + sb.append(type).append("')"); + int count = 0; + Cursor cursor = null; + try { + cursor = getInstance().sqliteDB().rawQuery(sql + sb.toString(), + null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("sum(" + + IThreadColumn.UNREAD_COUNT + ")")); + } + } + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return count; + } + + public static int getUnNotifyUnreadCount() { + String sql = "SELECT sum(" + + IThreadColumn.UNREAD_COUNT + + ") FROM im_thread \n" + + " inner JOIN groups2 ON im_thread.sessionId = groups2.groupid and isnotice == 2"; + int count = 0; + Cursor cursor = null; + try { + cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("sum(" + + IThreadColumn.UNREAD_COUNT + ")")); + } + } + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + } + } + return count; + } + + /** + * 通过联系着查找会话ID + * + * @param contactId + * @return + */ + public static long querySessionIdForByContactId(String contactId) { + Cursor cursor = null; + long threadId = 0; + if (contactId != null) { + String where = IThreadColumn.CONTACT_ID + " = '" + contactId + "' "; + try { + cursor = getInstance().sqliteDB().query( + DatabaseHelper.TABLES_NAME_IM_SESSION, null, where, + null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + threadId = cursor.getLong(cursor + .getColumnIndexOrThrow(IThreadColumn.ID)); + } + } + } catch (SQLException e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + cursor = null; + } + } + } + return threadId; + } + + /** + * 消息重发 + * + * @param rowid + * @param detail + * @return + */ +// public static int changeResendMsg(long rowid, ECMessage detail) { +// +// if (detail == null || TextUtils.isEmpty(detail.getMsgId()) +// || rowid == -1) { +// return -1; +// } +// +// String where = IMessageColumn.ID + "=" + rowid + " and " +// + IMessageColumn.SEND_STATUS + " = " +// + ECMessage.MessageStatus.FAILED.ordinal(); +// ContentValues values = null; +// try { +// values = new ContentValues(); +// values.put(IMessageColumn.MESSAGE_ID, detail.getMsgId()); +// values.put(IMessageColumn.SEND_STATUS, detail.getMsgStatus() +// .ordinal()); +// values.put(IMessageColumn.USER_DATA, detail.getUserData()); +// return getInstance().sqliteDB().update( +// DatabaseHelper.TABLES_NAME_IM_MESSAGE, values, where, null); +// +// } catch (Exception e) { +// e.printStackTrace(); +// throw new SQLException(e.getMessage()); +// } finally { +// if (values != null) { +// values.clear(); +// values = null; +// } +// } +// } + + /** + * 查询某一会话所有信息条数 + * + * @return + */ + public static int qureyIMCountForSession(long threadId) { + int count = 0; + String[] columnsList = { "count(*)" }; + String where = IMessageColumn.OWN_THREAD_ID + " = " + threadId + + " and " + IMessageColumn.BOX_TYPE + " != 3"; + Cursor cursor = null; + try { + cursor = getInstance().sqliteDB().query( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, columnsList, where, + null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + count = cursor.getInt(cursor.getColumnIndex("count(*)")); + } + } + } catch (Exception e) { + LogUtil.e(TAG + " " + e.toString()); + } finally { + if (cursor != null) { + cursor.close(); + cursor = null; + } + } + return count; + } + + /** + * 查询下载失败的图片消息 + * + * @return + */ +// public static List getDowndFailMsg() { +// String sql = "select * from " + DatabaseHelper.TABLES_NAME_IM_MESSAGE +// + " where msgType=" + Type.IMAGE.ordinal() +// + " and box_type=2 and userData is null"; +// Cursor cursor = null; +// +// List al = null; +// try { +// cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if (cursor != null && cursor.getCount() > 0) { +// al = new ArrayList(); +// while (cursor.moveToNext()) { +// ECMessage ecMessage = packageMessage(cursor); +// if (ecMessage == null) { +// continue; +// } +// al.add(0, ecMessage); +// } +// } +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// e.printStackTrace(); +// } finally { +// if (cursor != null) { +// cursor.close(); +// cursor = null; +// } +// } +// return al; +// } + +// public static ECMessage getMsg(String id) { +// String sql = "select * from " + DatabaseHelper.TABLES_NAME_IM_MESSAGE +// + " where msgid = '" + id + "'"; +// Cursor cursor = null; +// try { +// cursor = getInstance().sqliteDB().rawQuery(sql, null); +// if (cursor != null && cursor.getCount() > 0) { +// if (cursor.moveToFirst()) { +// return packageMessage(cursor); +// } +// } +// } catch (Exception e) { +// LogUtil.e(TAG + " " + e.toString()); +// e.printStackTrace(); +// } finally { +// if (cursor != null) { +// cursor.close(); +// cursor = null; +// } +// } +// return null; +// } + + public static void registerMsgObserver(OnMessageChange observer) { + getInstance().registerObserver(observer); + } + + public static void unregisterMsgObserver(OnMessageChange observer) { + getInstance().unregisterObserver(observer); + } + + public static void notifyMsgChanged(String session) { + getInstance().notifyChanged(session); + } + + public static void reset() { + getInstance().release(); + } + + @Override + protected void release() { + super.release(); + instance = null; + } + + /** + * 是否是阅后即焚消息 + * + * @return + */ + /* + * public static boolean isFireMsg(String msgId) { String sql = + * "select * from "+ + * DatabaseHelper.TABLES_NAME_IM_MESSAGE+" where msgid = '" + msgId + "'"; + * Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); if(cursor + * != null && cursor.getCount() > 0) { if(cursor.moveToFirst()) { String + * text=cursor.getString(cursor.getColumnIndex("text")); cursor.close(); + * cursor = null; return "fireMessage".equals(text); } } return false; } + */ + + public static void updateMsgReadStatus(String msgId, boolean isRead) { + try { + ContentValues values = new ContentValues(); + values.put(IMessageColumn.READ_STATUS, isRead ? 1 : 0); + getInstance().sqliteDB().update( + DatabaseHelper.TABLES_NAME_IM_MESSAGE, values, "msgid = ?", + new String[] { msgId }); + + } catch (Exception e) { + e.printStackTrace(); + } finally { + LogUtil.e("刷新ui"); + + } + + } + + public static String getMsgReadStatus(String msgId) { + String sql = "select * from " + DatabaseHelper.TABLES_NAME_IM_MESSAGE + + " where msgid = '" + msgId + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + if (cursor.moveToFirst()) { + String text = cursor.getString(cursor.getColumnIndex("isRead")); + cursor.close(); + cursor = null; + return text; + } + } + return "0"; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ImgInfoSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ImgInfoSqlManager.java new file mode 100644 index 0000000..8a38dc0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/ImgInfoSqlManager.java @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.BitmapFactory.Options; +import android.text.TextUtils; + +import com.lidroid.xutils.util.LogUtils; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileUtils; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImgInfo; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import top.zibin.luban.Luban; + + +/** + * 图片保存 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class ImgInfoSqlManager extends AbstractSQLManager { + + public HashMap imgThumbCache = new HashMap(20); + private static int column_index = 1; + + public static ImgInfoSqlManager mInstance; + public static ImgInfoSqlManager getInstance() { + if(mInstance == null) { + mInstance = new ImgInfoSqlManager(); + } + return mInstance; + } + + static final String TABLES_NAME_IMGINFO = "imginfo"; + + + public List getViewImageInfos(List msgids) { + StringBuilder where = new StringBuilder(); + if(msgids != null && !msgids.isEmpty()) { + where.append(" where " + ImgInfoColumn.MSG_LOCAL_ID + " IN ("); + for(int i = 0; i < msgids.size() ; i++) { + if(msgids.get(i) == null) { + continue ; + } + String id = msgids.get(i); + where.append("'" + id + "'"); + if(i != msgids.size() - 1) { + where.append(","); + } + } + where.append(") "); + } + LogUtil.i("图片地址 where = "+where.toString()); + String sql = "select id , msglocalid ,bigImgPath , thumbImgPath from " + TABLES_NAME_IMGINFO + where.toString() + " ORDER BY id ,msglocalid ASC"; + Cursor cursor = sqliteDB().rawQuery(sql , null); + List urls = null; + if(cursor !=null && cursor.getCount() > 0) { + LogUtil.i("图片地址 where getCount() = "+cursor.getCount()); + urls = new ArrayList(); + while(cursor.moveToNext()) { + urls.add(new ViewImageInfo(cursor)); + } + } + return urls; + } + + public String getAllmsgid() { + return null; + } + + public class ImgInfoColumn extends BaseColumn { + + public static final String MSGSVR_ID = "msgSvrId"; + public static final String OFFSET = "offset"; + public static final String TOTALLEN ="totalLen"; + public static final String BIG_IMGPATH = "bigImgPath"; + public static final String THUMBIMG_PATH = "thumbImgPath"; + public static final String CREATE_TIME = "createtime"; + public static final String STATUS = "status"; + public static final String MSG_LOCAL_ID = "msglocalid"; + public static final String NET_TIMES = "nettimes"; + + } + + private ImgInfoSqlManager() { + Cursor cursor = sqliteDB().query(TABLES_NAME_IMGINFO, null, null, null, null, null, ImgInfoColumn.ID + " ASC "); + if ((cursor.getCount() > 0) && (cursor.moveToLast())) { + column_index = 1 + cursor.getInt(cursor.getColumnIndex(ImgInfoColumn.ID)); + } + cursor.close(); + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "loading new img id:" + column_index); + } + + public long insertImageInfo(ImgInfo imgInfo) { + if(imgInfo == null) { + LogUtil.i("imgInfo = NULL"); + return -1; + } +// ContentValues buildContentValues = imgInfo.buildContentValues(); +// if(buildContentValues.size() == 0) { +// LogUtil.i("buildContentValues.size() == 0"); +// return -1; +// } + try { +// return sqliteDB().insert(TABLES_NAME_IMGINFO, null, buildContentValues); + } catch (Exception e) { + LogUtil.i("insert imgInfo error = " + e.getMessage() ); +// LogToFileUtils.write("insert imgInfo error = " + e.getMessage());//写入日志 + } + return -1; + } + + /** + * + * @param imgInfo + * @return + */ + public long updateImageInfo(ImgInfo imgInfo) { + if(imgInfo == null) { + return -1; + } + ContentValues buildContentValues = imgInfo.buildContentValues(); + if(buildContentValues.size() == 0) { + return -1; + } + try { + String where = ImgInfoColumn.ID + " = " + imgInfo.getId(); + return sqliteDB().update(TABLES_NAME_IMGINFO, buildContentValues, where, null); + } catch (Exception e) { + LogUtil.e(TAG, "insert imgInfo error = " + e.getMessage()); + } + return -1; + } + + /** + * + * @param filePath + * @return + */ + public ImgInfo createImgInfo(String filePath, Context context) { + + if(!FileUtils.checkFile(filePath) || FileAccessor.getImagePathName() == null) { + return null; + } + + int bitmapDegrees = DemoUtils.getBitmapDegrees(filePath); + String fileNameMD5 = DemoUtils.md5(System.currentTimeMillis() + filePath); + String bigFileFullName = fileNameMD5 + ".jpg"; + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "original img path = " + filePath); + LogUtil.i("bigFileFullName = "+bigFileFullName); + + Options bitmapOptions = DemoUtils.getBitmapOptions(filePath); + String authorityDir = FileAccessor.getImagePathName().getAbsolutePath(); + if((FileUtils.decodeFileLength(filePath) > 204800) + || (bitmapOptions != null && (((bitmapOptions.outHeight > 1080) || (bitmapOptions.outWidth > 1080))))) { + File file = new File(authorityDir+File.separator+fileNameMD5); + if(!file.exists()) { + file.mkdirs(); + } + try { + List files=Luban.with(context).load(filePath).setTargetDir(authorityDir).get(); + String fileneme=files.get(0).getName(); + FileAccessor.renameTo(authorityDir+File.separator, fileneme, bigFileFullName); + } catch (IOException e) { + e.printStackTrace(); + } +// if(!DemoUtils.createThumbnailFromOrig(filePath, 1080, 1080, Bitmap.CompressFormat.JPEG, 100, FileAccessor.getImagePathName().getAbsolutePath(), fileNameMD5)) { +// return null; +// } + + } else { + // file size small. + FileUtils.copyFile(authorityDir, fileNameMD5 , ".jpg", FileUtils.readFlieToByte(filePath, 0, FileUtils.decodeFileLength(filePath))); + } +// if((FileUtils.decodeFileLength(filePath) > 2097152)) +// { +// if(bitmapDegrees != 0 && !DemoUtils.rotateCreateBitmapSmall(authorityDir +File.separator+ bigFileFullName, bitmapDegrees, Bitmap.CompressFormat.JPEG, authorityDir, bigFileFullName)) { +// return null; +// } +// } +// else{ +// if(bitmapDegrees != 0 && !DemoUtils.rotateCreateBitmap(authorityDir +File.separator+ bigFileFullName, bitmapDegrees, Bitmap.CompressFormat.JPEG, authorityDir, bigFileFullName)) { +// return null; +// } +// } + + LogUtil.d( "insert: compressed bigImgPath = " + bigFileFullName); + String thumbName = DemoUtils.md5(fileNameMD5 + System.currentTimeMillis()); +// File file = new File(authorityDir); +// if(!file.exists()) { +// file.mkdirs(); +// } +// if(!DemoUtils.createThumbnailFromOrig(authorityDir +File.separator+ bigFileFullName, 100, 100, Bitmap.CompressFormat.JPEG, 100, authorityDir, thumbName)) { +// return null; +// } + LogUtil.d( "insert: thumbName = " + thumbName); + ImgInfo imgInfo = new ImgInfo(); + column_index += 1; +// imgInfo.setId(column_index); + imgInfo.setBigImgPath(bigFileFullName); + imgInfo.setThumbImgPath(bigFileFullName); +// imgInfo.setCreatetime((int) DateUtil.getCurrentTime()); +// imgInfo.setTotalLen(FileUtils.decodeFileLength(filePath)); +// LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "insert: compress img size = " + imgInfo.getTotalLen()); + return imgInfo; + } + + /** + * + * @param filePath + * @return + */ + public ImgInfo createGIFImgInfo(String filePath) { + + if(!FileUtils.checkFile(filePath) || FileAccessor.getImagePathName() == null) { + return null; + } + String fileNameMD5 = DemoUtils.md5(System.currentTimeMillis() + filePath); + String bigFileFullName = fileNameMD5 + ".gif"; + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "original img path = " + filePath); + String authorityDir = FileAccessor.getImagePathName().getAbsolutePath(); + FileUtils.copyFile(authorityDir, fileNameMD5 , ".gif", FileUtils.readFlieToByte(filePath, 0, FileUtils.decodeFileLength(filePath))); + LogUtil.d(TAG, "insert: compressed bigImgPath = " + bigFileFullName); + String thumbName = DemoUtils.md5(fileNameMD5 + System.currentTimeMillis()); + File file = new File(authorityDir); + if(!file.exists()) { + file.mkdirs(); + } + if(!DemoUtils.createThumbnailFromOrig(authorityDir +File.separator+ bigFileFullName, 100, 100, Bitmap.CompressFormat.JPEG, 100, authorityDir, thumbName)) { + return null; + } + LogUtil.d(TAG, "insert: thumbName = " + thumbName); + ImgInfo imgInfo = new ImgInfo(); + column_index += 1; +// imgInfo.setId(column_index); + imgInfo.setBigImgPath(bigFileFullName); + imgInfo.setThumbImgPath(thumbName); +// imgInfo.setCreatetime((int) DateUtil.getCurrentTime()); +// imgInfo.setTotalLen(FileUtils.decodeFileLength(filePath)); + imgInfo.isGif = true; +// LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "insert: compress img size = " + imgInfo.getTotalLen()); + return imgInfo; + } + + /** + * 接收图片生成缩略图 + * @param msg + * @return + */ +// public ImgInfo getThumbImgInfo(ECMessage msg) { +// ECImageMessageBody body = (ECImageMessageBody) msg.getBody(); +// +// if(TextUtils.isEmpty(body.getLocalUrl()) || !new File(body.getLocalUrl()).exists()) { +// LogUtil.i("接收图片生成缩略图 body.getLocalUrl() = " + body.getLocalUrl()); +// LogUtil.i("接收图片生成缩略图 body.getLocalUrl() = " + new File(body.getLocalUrl()).exists()); +// return null; +// } +// LogUtil.i("接收图片生成缩略图 insert: thumbName = " + body.getFileName()); +// ImgInfo imgInfo = new ImgInfo(); +// column_index += 1; +// imgInfo.setId(column_index); +// if(!TextUtils.isEmpty(body.getThumbnailFileUrl())) { +// LogUtil.i("接收图片生成缩略图1"); +//// LogToFileUtils.write("接收图片生成缩略图 body.getRemoteUrl() = "+body.getRemoteUrl());//写入日志 +// imgInfo.setBigImgPath(body.getRemoteUrl()); +// imgInfo.setThumbImgPath(new File(body.getLocalUrl()).getName()); +// } else { +// imgInfo.setBigImgPath(new File(body.getLocalUrl()).getName()); +// String filePath = body.getLocalUrl(); +// String imageName = filePath.substring(filePath.lastIndexOf("/") + 1); +// String thumbName = DemoUtils.md5((imageName + System.currentTimeMillis())); +// String thumbNameDir = FileAccessor.getImagePathName().getAbsolutePath(); +// if(!DemoUtils.createThumbnailFromOrig(filePath, 100, 100, Bitmap.CompressFormat.JPEG, 100, thumbNameDir, thumbName)) { +//// LogToFileUtils.write("接收图片生成缩略图 thumbName = ");//写入日志 +// return null; +// } +// imgInfo.setThumbImgPath(thumbName); +//// LogToFileUtils.write("接收图片生成缩略图 thumbName = "+thumbName);//写入日志 +// LogUtil.i("接收图片生成缩略图 thumbName = "+thumbName); +// } +// +// imgInfo.isGif = body.getRemoteUrl().endsWith(".gif"); +// imgInfo.setMsglocalid(msg.getMsgId()); +// imgInfo.setCreatetime((int)DateUtil.getCurrentTime()); +// imgInfo.setTotalLen(FileUtils.decodeFileLength(body.getLocalUrl())); +// LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "insert: compress img size = " + imgInfo.getTotalLen()); +// return imgInfo; +// } +// /** +// * 接收图片生成缩略图 +// * @return +// */ +// public ImgInfo getThumbImgInfo2(ECMessage msg) { +// +// ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); +// if(TextUtils.isEmpty(body.getLocalUrl()) || !new File(body.getLocalUrl()).exists()) { +// return null; +// } +// String filePath = body.getLocalUrl(); +// String imageName = filePath.substring(filePath.lastIndexOf("/") + 1); +// String thumbName = DemoUtils.md5((imageName + System.currentTimeMillis())); +// String thumbNameDir = FileUtils.getMD5FileDir(FileAccessor.IMESSAGE_IMAGE, thumbName); +// File file = new File(thumbNameDir); +// if(!file.exists()) { +// file.mkdirs(); +// } +// if(!DemoUtils.createThumbnailFromOrig(filePath, 100, 100, Bitmap.CompressFormat.JPEG, 100, thumbNameDir, thumbName)) { +// return null; +// } +// LogUtil.d(TAG, "insert: thumbName = " + thumbName); +// ImgInfo imgInfo = new ImgInfo(); +// column_index += 1; +// imgInfo.setId(column_index); +// imgInfo.setBigImgPath(imageName); +// imgInfo.setThumbImgPath(thumbName); +// imgInfo.setMsglocalid(msg.getMsgId()); +// imgInfo.setCreatetime((int)DateUtil.getCurrentTime()); +// imgInfo.setTotalLen(FileUtils.decodeFileLength(body.getLocalUrl())); +// LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "insert: compress img size = " + imgInfo.getTotalLen()); +// return imgInfo; +// } + + public String getThumbUrlAndDel(String fileName) { + if(TextUtils.isEmpty(fileName)) { + return null; + } + if(fileName.trim().startsWith("THUMBNAIL://")) { + String fileId = fileName.substring("THUMBNAIL://".length()); + String imgName = getImgInfo(fileId).getThumbImgPath(); + if(imgName == null) { + return null; + } + String fileUrlByFileName = FileAccessor.getImagePathName() + "/" + imgName; + delImgInfo(fileId); + return fileUrlByFileName; + } + return null; + } + + public Bitmap getThumbBitmap(String fileName , float scale) { + if(TextUtils.isEmpty(fileName)) { + return null; + } + if(fileName.trim().startsWith("THUMBNAIL://")) { + String fileId = fileName.substring("THUMBNAIL://".length()); + LogUtils.i("ImgInfoSqlManager MsgId = "+fileId); + String imgName = getImgInfo(fileId).getThumbImgPath(); + if(imgName == null) { + return null; + } + String fileUrlByFileName = FileAccessor.getImagePathName() + "/" + imgName;; + //String fileUrlByFileName = FileAccessor.getFileUrlByFileName(imgName); + Bitmap bitmap = imgThumbCache.get(fileUrlByFileName); + if(bitmap == null || bitmap.isRecycled()) { + Options options = new Options(); + float density = 160.0F * scale; + options.inDensity = (int)density; + bitmap = BitmapFactory.decodeFile(fileUrlByFileName, options); + if (bitmap != null){ + bitmap.setDensity((int)density); + bitmap = Bitmap.createScaledBitmap(bitmap, (int)(scale * bitmap.getWidth()), (int)(scale * bitmap.getHeight()), true); + imgThumbCache.put(fileUrlByFileName, bitmap); + LogUtil.d(TAG, "cached file " + fileName); + } + } + + if(bitmap != null) { + return DemoUtils.processBitmap(bitmap, /*bitmap.getWidth() / 15*/0); + } + + } + return null; + } + + /** + * + * @param msgId + * @return + */ + public ImgInfo getImgInfo(String msgId) { + LogUtils.i("msgId = "+msgId); + ImgInfo imgInfo = new ImgInfo(); + String where = ImgInfoColumn.MSG_LOCAL_ID + "='" + msgId + "'"; + Cursor cursor = sqliteDB().query(TABLES_NAME_IMGINFO, null, where, null, null, null, null); + if(cursor.getCount() != 0) { + cursor.moveToFirst(); +// imgInfo.setCursor(cursor); + } + cursor.close(); + return imgInfo; + } + + public ImgInfo getImgInfo(int id) { + LogUtils.i("msgId = "+id); + ImgInfo imgInfo = new ImgInfo(); + String where = ImgInfoColumn.ID + "=" + id ; + Cursor cursor = sqliteDB().query(TABLES_NAME_IMGINFO, null, where, null, null, null, null); + if(cursor.getCount() != 0) { + cursor.moveToFirst(); + imgInfo.setCursor(cursor); + } + cursor.close(); + return imgInfo; + } + + + + public long delImgInfo(String msgId) { + String where = ImgInfoColumn.MSG_LOCAL_ID + "='" + msgId + "'"; + return getInstance().sqliteDB().delete(TABLES_NAME_IMGINFO ,where, null); + } + + public static void reset() { + getInstance().release(); + } + + @Override + protected void release() { + super.release(); + mInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MeetingSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MeetingSqlManager.java new file mode 100644 index 0000000..6329fa3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MeetingSqlManager.java @@ -0,0 +1,16 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +/** + * com.yuntongxun.ecdemo.storage in ECDemo_Android + * Created by Jorstin on 2015/7/15. + */ +public class MeetingSqlManager extends AbstractSQLManager { + + private static MeetingSqlManager sInstance = new MeetingSqlManager(); + + private static MeetingSqlManager getInstance() { + return sInstance; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MessageObservable.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MessageObservable.java new file mode 100644 index 0000000..5d682a6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/MessageObservable.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-13 + * @version 4.0 + */ +public class MessageObservable extends ECObservable { + + /** + * 分发数据库改变通知 + * @param session + */ + public void notifyChanged(String session) { + synchronized(mObservers) { + for (int i = mObservers.size() - 1; i >= 0; i--) { + mObservers.get(i).onChanged(session); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/OnMessageChange.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/OnMessageChange.java new file mode 100644 index 0000000..a76ff9b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/OnMessageChange.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.storage; + +/** + * Created by Jorstin on 2015/3/18. + */ +public interface OnMessageChange { + /** + * 数据库改变 + */ + public void onChanged(String sessionId); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/PatientSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/PatientSqlManager.java new file mode 100644 index 0000000..efa5009 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/PatientSqlManager.java @@ -0,0 +1,594 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.activity.MyPatientActivity; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +/** + * 患者数据库管理 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class PatientSqlManager extends AbstractSQLManager { + + private static PatientSqlManager sInstance; + private static PatientSqlManager getInstance() { + + if(sInstance == null) { + sInstance = new PatientSqlManager(); + } + + return sInstance; + } + + + /** + * 根据uuid查询数据库是否存在此信息//接收患者消息使用的cursor + * @param uuid + * @return + * boolean + */ + public static boolean hasPatient(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + } + String sql = "select uuid from patient where uuid = '" + uuid + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql , null); + LogUtil.i("cursor.getCount() = "+cursor.getCount()); + if(cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + return false; + } + /** + *2019.11.13 患者列表使用的cursor,患者列表过多 + * */ + public static boolean hasPatient1(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + } + String sql = "select uuid from patient where uuid = '" + uuid + "'"; + Cursor cursor = null; + try{ + cursor = getInstance().sqliteDB().rawQuery(sql , null); + if(cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + }catch (Exception e){ + + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + return false; + } + public static boolean isPatient(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + + } + String sql = "select * from patient where uuid = '" + uuid + "'COLLATE NOCASE"+ " and (type = '" + Constant.typePatient + "' OR "+"type = '" + Constant.typePatientConsult + "')"; + +// String sql = "select * from patient where uuid = '" + uuid + "' and type = '" + Constant.typePatient + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql , null); + if(cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + return false; + } +// public static boolean isPatient(String uuid) { +// return UserInfoHelper.isPatient(uuid, SessionTypeEnum.P2P); +// } + + /** + * 查询患者列表里是我的患者的个数 + * sizePatient + * + * @return + * long + */ + public static long sizePatient() { + long num = 0; + String sql = "select count(1) from patient where type = '" + Constant.typePatient + "'"; + Cursor cursor = getInstance().sqliteDB().rawQuery(sql , null); + if(cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + num = cursor.getLong(0); + } + cursor.close(); + return num; + } + return num; + } + /** + * 保存患者list + * + * @param List + * @return + */ + public static long insertPatientList(List list, String type) { + if(list == null || list.size() == 0) { + return -1; + } + // LogUtil.i(TAG, sizePatient()+"患者个数。"); + ContentValues values = null; + try { + for (PatientData user : list) { + values = new ContentValues(); + + values.put(PatientColumn.UUID, Constant.Patient_AppKey+user.getUuid()); + if (StringUtil.isEmpty(user.nickname)){ + values.put(PatientColumn.REALNAME, user.getRealName()); + }else { + values.put(PatientColumn.REALNAME, user.nickname); + } + values.put(PatientColumn.MOBILE, user.getMobile()); + values.put(PatientColumn.PHOTO, user.getPhoto()); + values.put(PatientColumn.SEX, user.getSex()); + values.put(PatientColumn.NATION, user.getNation()); + values.put(PatientColumn.TYPE, type); + try { + if(!hasPatient1(Constant.Patient_AppKey+user.getUuid())) { + getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_IM_PATIENT, null, values); + }else{ + String ctype = getPatientType(Constant.Patient_AppKey+user.getUuid()); + if (!TextUtils.isEmpty(ctype) && Constant.typeConsult.equals(ctype) || Constant.typePatientConsult.equals(ctype)) { + values.put(PatientColumn.TYPE, Constant.typePatientConsult); + } + LogUtil.i(TAG,"ctype="+ctype+"tttype=="+values.get(PatientColumn.TYPE)); + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_PATIENT , values , "uuid = '" + Constant.Patient_AppKey+user.getUuid() + "'" , null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return -1; + } + + /** + * 插入患者到数据库 + * @param contacts + * @return + */ + public static ArrayList insertPatient(List list) { + ArrayList rows = new ArrayList(); + try { + + getInstance().sqliteDB().beginTransaction(); + for(PatientModel c : list) { + long rowId = insertPatient(c, Constant.typePatient); + if(rowId != -1L) { + rows.add(rowId); + } + } + // 初始化系统联系人 + insertSystemNoticeContact(); + getInstance().sqliteDB().setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + getInstance().sqliteDB().endTransaction(); + } + return rows; + } + + /** + * 保存患者PatientModel + * + * @param pm + * @return + */ + public long insertContact(PatientModel pm) { + if(pm == null) { + return -1; + } + ContentValues buildContentValues = pm.buildContentValues(); + if(buildContentValues.size() == 0) { + return -1; + } + try { + return sqliteDB().insert(DatabaseHelper.TABLES_NAME_IM_PATIENT, null, buildContentValues); + } catch (Exception e) { + LogUtil.e(TAG, "insert insertPatient error = " + e.getMessage()); + } + return -1; + } + + /** + * 插入与更新联系人到数据库 + * @param typeConsult + * @return + */ + public static long insertPatient(PatientModel p, String type) { + if(p == null || TextUtils.isEmpty(p.getUuid())) { + return -1; + } + try { + ContentValues values = p.buildContentValues(); + if(!hasPatient1(p.getUuid())) { + return getInstance().sqliteDB().insert(DatabaseHelper.TABLES_NAME_IM_PATIENT, null, values); + }else{ + String ctype = getPatientType(p.getUuid()); + if (!TextUtils.isEmpty(ctype)) { + if (!TextUtils.isEmpty(type)) { + if (Constant.typePatient.equals(type)){ + if (Constant.typePatientConsult.equals(ctype) || Constant.typeConsult.equals(ctype)) { + p.setType(Constant.typePatientConsult); + values.put(PatientColumn.TYPE, Constant.typePatientConsult); + } + }else if (Constant.typeConsult.equals(type)) { + if (Constant.typePatient.equals(ctype) || Constant.typePatientConsult.equals(ctype)){ + p.setType(Constant.typePatientConsult); + values.put(PatientColumn.TYPE, Constant.typePatientConsult); + } + }else if (Constant.typePatientConsult.equals(type)) { + if (Constant.typePatientConsult.equals(ctype)){ + p.setType(Constant.typePatientConsult); + values.put(PatientColumn.TYPE, Constant.typePatientConsult); + } + } + } + + } + } + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_PATIENT , values , "uuid = '" + p.getUuid() + "'" , null); + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + + /** + * 查询患者头像 + * @param String[] + * @return ArrayList + */ + public static ArrayList getPatientPhoto(String[] uuid) { + ArrayList contacts = null; + try { + String sql = "select photo from patient where uuid in "; + StringBuilder sb = new StringBuilder("("); + for (int i = 0; i < uuid.length; i++) { + sb.append("'").append(uuid[i]).append("'"); + if (i != uuid.length - 1) { + sb.append(","); + } + } + sb.append(")"); + Cursor cursor = getInstance().sqliteDB().rawQuery( + sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + String displayName = cursor.getString(0); + contacts.add(displayName); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 查询患者头像 + * uuid + * @return String + */ + public static String getPatientPhoto(String uuid) { + String photo = null; + try { + String sql = "select photo from patient where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = getInstance().sqliteDB().rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + photo = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return photo; + } + /** + * 查询患者类型 + * uuid + * @return String + */ + public static String getPatientType(String uuid) { + String type = null; + try { + String sql = "select type from patient where uuid = '" + uuid + "'"; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + // + sb.toString() + Cursor cursor = getInstance().sqliteDB().rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + type = cursor.getString(0); + } + cursor.close(); + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + return type; + } + + /** + * 查询话患者名称 + * @param String[] + * @return ArrayList + */ + public static ArrayList getPatientName(String[] uuid) { + ArrayList contacts = null; + try { + String sql = "select realName from patient where uuid in "; + StringBuilder sb = new StringBuilder("("); + for (int i = 0; i < uuid.length; i++) { + sb.append("'").append(uuid[i]).append("'"); + if (i != uuid.length - 1) { + sb.append(","); + } + } + sb.append(")"); + Cursor cursor = getInstance().sqliteDB().rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + contacts.add(cursor.getString(0)); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + /** + * 查询话患者名称 + * uuid + * @return String + */ + public static String getPatientName(String uuid) { + String name = null; + try { + String sql = "select realName from patient where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = getInstance().sqliteDB().rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + name = cursor.getString(0); + } + cursor.close(); + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return name; + } + + /** + * 更新患者名字 + * @param member + */ + public static void updateContactName(PatientModel member) { + ContentValues values = new ContentValues(); + values.put(AbstractSQLManager.PatientColumn.REALNAME , member.getRealName()); + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_PATIENT , values , "uuid = '" + member.getUuid() + "'" , null); + } + /** + * 更新患者leixing + * @param member + */ + public static void updatePatientType(String uuid, String type) { + ContentValues values = new ContentValues(); + values.put(PatientColumn.TYPE , type); + getInstance().sqliteDB().update(DatabaseHelper.TABLES_NAME_IM_PATIENT , values , "uuid = '" + uuid + "'" , null); + } + + /** + * 查询所有的患者信息,返回uuid,name,mobile,photoL的list + * @return + */ + public static ArrayList getPatientInfoList(String type) { + ArrayList contacts = null; + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_IM_PATIENT, + new String[]{ + PatientColumn.ID, + PatientColumn.UUID, + PatientColumn.REALNAME, + PatientColumn.MOBILE, + PatientColumn.PHOTO}, + PatientColumn.TYPE+" like ?", new String[]{"%" + type + "%"}, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + PatientModel c = new PatientModel(cursor.getString(0)); + c.setUuid(cursor.getString(1)); + c.setRealName(cursor.getString(2)); + c.setMobile(cursor.getString(3)); + c.setPhoto(cursor.getString(4)); + contacts.add(c); + } + cursor.close(); + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + + } + + /** + * 初始化系统通知数据库 + * @return + */ + private static long insertSystemNoticeContact() { + PatientModel contacts = new PatientModel(GroupNoticeSqlManager.CONTACT_ID); + contacts.setRealName("系统通知"); + contacts.setPhoto("touxiang_notice.png"); + contacts.setType(Constant.typeSystem); + + return insertPatient(contacts, Constant.typeSystem); + } + + /** + * 根据uuid查询姓名与头像 + * @param contactId + * @return + */ + public static PatientModel getPatientInfo(String uuid) { + if(TextUtils.isEmpty(uuid)) { + return null; + } + PatientModel c = new PatientModel(uuid); + try { + Cursor cursor = getInstance().sqliteDB().query(DatabaseHelper.TABLES_NAME_IM_PATIENT, + new String[]{ + PatientColumn.ID, + PatientColumn.REALNAME, + PatientColumn.PHOTO, + PatientColumn.MOBILE, + PatientColumn.TYPE + }, + "uuid=?COLLATE NOCASE", new String[]{uuid},null , null, null, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new PatientModel(cursor.getString(0)); + c.setRealName(cursor.getString(1)); + c.setPhoto(cursor.getString(2)); + c.setMobile(cursor.getString(3)); + c.setType(cursor.getString(4)+""); + } + cursor.close(); + } + if(cursor != null &&!cursor.isClosed()) + cursor.close(); + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return c; + } + + public static long delPatientInfo(String uuid) { + String patientUuid = Constant.Patient_AppKey+uuid; + String ctype = getPatientType(patientUuid); + if (Constant.typePatientConsult.equals(ctype) || Constant.typeConsult.equals(ctype)) { + updatePatientType(patientUuid, Constant.typeConsult); + } + String where = PatientColumn.UUID + "='" + patientUuid + "' and " + PatientColumn.TYPE + "='" + Constant.typePatient + "'"; + int delete = getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_IM_PATIENT ,where, null); + LogUtil.i(TAG, delete+"==delete"+"ctype="+ctype); + if (!TextUtils.isEmpty(ctype) && !Constant.typeConsult.equals(ctype) + && !Constant.typePatientConsult.equals(ctype) && Constant.typePatient.equals(ctype)) { + IMessageSqlManager.deleteChattingMessage(patientUuid); + + LogUtil.i(TAG, "deletectype="+ctype); + } + if (Constant.typePatientConsult.equals(ctype) || Constant.typeConsult.equals(ctype)) { + LogUtil.i(TAG, "updateSessionType="+ctype); + ConversationSqlManager.updateSessionType(patientUuid, Constant.typeConsult); + }else { + ConversationSqlManager.delSession(patientUuid); + } + if (MyPatientActivity.getInstance() != null) { + MyPatientActivity.getInstance().notifyChange(); + } + return delete; + } + + /** + * 删除type的患者 + * delAllPatientInfo + * + * @param type + * @return + * long + */ + public static long delAllPatientInfo(String type) { + // delete from tablename where 1=1 + String where = PatientColumn.TYPE + "='" + type + "'"; + int delete = -1; + if (getInstance() != null) { + try { + if(isTableExists(DatabaseHelper.TABLES_NAME_IM_PATIENT)) + { + + delete = getInstance().sqliteDB().delete(DatabaseHelper.TABLES_NAME_IM_PATIENT ,where, null); + } + + } + catch (Exception e) + { + + } + } + // ConversationSqlManager.getInstance().delSession(contactId); + return delete; + } + public static boolean isTableExists(String tableName) { + + + Cursor cursor = getInstance().sqliteDB().rawQuery("select DISTINCT tbl_name from sqlite_master where tbl_name = '"+tableName+"'", null); + + + if(cursor!=null) { + + if(cursor.getCount()>0) { + + cursor.close(); + + return true; + + } + + cursor.close(); + + } + + return false; + + } + + public static void reset() { + getInstance().release(); + sInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/WFBookDownloadSqlManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/WFBookDownloadSqlManager.java new file mode 100644 index 0000000..61a4b77 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/WFBookDownloadSqlManager.java @@ -0,0 +1,394 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.content.ContentValues; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.text.TextUtils; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 患者数据库管理 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class WFBookDownloadSqlManager extends AbstractSQLManager { + + private static WFBookDownloadSqlManager sInstance; + static SQLiteDatabase mActivity; + + public WFBookDownloadSqlManager(SQLiteDatabase mActivity) { + // TODO Auto-generated constructor stub + this.mActivity = mActivity; + createTableWFDownload(mActivity); + } + + private WFBookDownloadSqlManager() { + super(); + } + + /** + * 创建万方下载数据库 + * + * @param db + */ + void createTableWFDownload(SQLiteDatabase db) { + + String sql = "CREATE TABLE IF NOT EXISTS " + + DatabaseHelper.TABLES_NAME_WFDOWNLOAD + + " (" + + DownladColumn.ID + + " INTEGER PRIMARY KEY AUTOINCREMENT, " + + DownladColumn.UUID + + " TEXT UNIQUE ON CONFLICT ABORT, " + + DownladColumn.TITLE + + " TEXT, " + // + DownladColumn.CREATDATE + " TEXT, " + + DownladColumn.SUMMARY + " TEXT, " + DownladColumn.TYPENAME + + " TEXT, " + DownladColumn.FILEFORMAT + " TEXT, " + + DownladColumn.STATE + " INTEGER DEFAULT 0, " + + DownladColumn.PATH + " TEXT, " + DownladColumn.FILEPATH + + " TEXT, " + DownladColumn.FILESIZE + " TEXT, " + + DownladColumn.TOTALPROGRESS + " TEXT, " + + DownladColumn.CURRENTPROGRESS + " TEXT, " + + DownladColumn.TIME + " TEXT " + ")"; + + db.execSQL(sql); + } + + private static WFBookDownloadSqlManager getInstance() { + if (sInstance == null) { + sInstance = new WFBookDownloadSqlManager(); + } + return sInstance; + } + + /** + * 根据uuid查询数据库是否存在此信息 + * + * @param uuid + * @return boolean mActivity + */ + public static boolean hasBookDownload(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return false; + } + String sql = "select uuid from wfdownload where uuid = '" + uuid + "'"; + Cursor cursor = mActivity.rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + cursor.close(); + return true; + } + + return false; + } + + /** + * 保存 + * + * @param List + * @return + */ + public static long insertDownload(List list, String filepath, + String currentprogress, String totalprogress, String state) { + if (list == null || list.size() == 0) { + return -1; + } + ContentValues values = null; + for (LibraryData user : list) { + values = new ContentValues(); + values.put(DownladColumn.UUID, user.getUuid()); + values.put(DownladColumn.TITLE, user.getTitle()); + values.put(DownladColumn.SUMMARY, user.getSummary()); + values.put(DownladColumn.FILEFORMAT, user.getFileFormat()); + values.put(DownladColumn.TIME, user.getUpdateTime()); + values.put(DownladColumn.TYPENAME, user.getTypeName()); + values.put(DownladColumn.PATH, user.getPath()); + values.put(DownladColumn.FILESIZE, user.getFileSize()); + values.put(DownladColumn.FILEPATH, filepath); + values.put(DownladColumn.TOTALPROGRESS, totalprogress); + values.put(DownladColumn.CURRENTPROGRESS, currentprogress); + values.put(DownladColumn.STATE, state); + mActivity.update(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, values, + "uuid = '" + user.getUuid() + "'", null); + } + return -1; + } + + /** + * 插入数据库 + * + * @param contacts + * @return + */ + public static ArrayList insertDownload(List list) { + ArrayList rows = new ArrayList(); + try { + mActivity.beginTransaction(); + for (DownloadModel c : list) { + long rowId = insertDownload(c); + if (rowId != -1L) { + rows.add(rowId); + } + } + mActivity.setTransactionSuccessful(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + mActivity.endTransaction(); + } + return rows; + } + + /** + * 插入与更新到数据库 + * + * @return + */ + public static long insertDownload(DownloadModel p) { + if (p == null || TextUtils.isEmpty(p.getUuid())) { + return -1; + } + try { + ContentValues values = p.buildContentValues(); + if (!hasBookDownload(p.getUuid())) { + return mActivity.insert(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, + null, values); + } else { + return mActivity.update(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, + values, "uuid = '" + p.getUuid() + "'", null); + } + } catch (Exception e) { + e.printStackTrace(); + } + return -1; + } + + /** + * 查询下载当前进度 uuid + * + * @return String + */ + public static String getDownloadCurrentProgress(String uuid) { + String currentProgress = null; + try { + String sql = "select currentProgress from wfdownload where uuid = '" + + uuid + "'"; + // StringBuilder sb = new StringBuilder("('"); + // sb.append(uuid).append("')"); + Cursor cursor = mActivity.rawQuery(sql, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + currentProgress = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return currentProgress; + } + + /** + * 查询下载状态 uuid + * + * @return String + */ + public static int getDownloadState(String uuid) { + int state = -1; + try { + String sql = "select state from wfdownload where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = mActivity.rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + state = cursor.getInt(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return state; + } + + /** + * 查询下载路径 uuid + * + * @return String + */ + public static String getDownloadFilePath(String uuid) { + String filePath = null; + try { + String sql = "select filePath from wfdownload where uuid in "; + StringBuilder sb = new StringBuilder("('"); + sb.append(uuid).append("')"); + Cursor cursor = mActivity.rawQuery(sql + sb.toString(), null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + filePath = cursor.getString(0); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return filePath; + } + + /** + * 更新下载状态 + * + * @param member + */ + public static void updateDownloadState(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.STATE, d.getState()); + mActivity.update(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, values, + "uuid = '" + d.getUuid() + "'", null); + } + public static void updateDownloadFilePath(DownloadModel d) { + ContentValues values = new ContentValues(); + values.put(DownladColumn.FILEPATH, d.getFilePath()); + mActivity.update(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, values, + "uuid = '" + d.getUuid() + "'", null); + } + /** + * 查询所有的 + * + * @return + */ + public static ArrayList getDownloadInfoList() { + ArrayList contacts = null; + try { + + Cursor cursor = mActivity + .query(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, null, null, null, + null, null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + + } + + /** + * 根据state状态,查询所有的,名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static ArrayList getDownloadInfoByState(int state) { + ArrayList contacts = null; + try { + Cursor cursor = mActivity + .query(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "state=?", + new String[] { String.valueOf(state) }, null, null, + null, null); + if (cursor != null && cursor.getCount() > 0) { + contacts = new ArrayList(); + while (cursor.moveToNext()) { + DownloadModel c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + contacts.add(c); + } + cursor.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + return contacts; + } + + /** + * 根据uuid查询名称,时间,url路径,本地路径,当前进度,下载状态 + * + * @param uuid + * @return + */ + public static DownloadModel getDownloadInfo(String uuid) { + if (TextUtils.isEmpty(uuid)) { + return null; + } + DownloadModel c = new DownloadModel(uuid); + try { + Cursor cursor = mActivity + .query(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, + new String[] { DownladColumn.UUID, + DownladColumn.TITLE, DownladColumn.TIME, + DownladColumn.PATH, DownladColumn.FILEPATH, + DownladColumn.CURRENTPROGRESS, + DownladColumn.STATE }, "uuid=?", + new String[] { uuid }, null, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + while (cursor.moveToNext()) { + c = new DownloadModel(cursor.getString(0)); + c.setTitle(cursor.getString(1)); + c.setTime(cursor.getString(2)); + c.setPath(cursor.getString(3)); + c.setFilePath(cursor.getString(4)); + c.setCurrentProgress(cursor.getString(5)); + c.setState(cursor.getInt(6)); + } + cursor.close(); + } + return c; + } catch (Exception e) { + e.printStackTrace(); + } + return c; + } + + public static long delDownladInfo(String uuid) { + int delete = -1; + if (!TextUtils.isEmpty(uuid)) { + String where = DownladColumn.UUID + "='" + uuid + "'"; + delete = mActivity.delete(DatabaseHelper.TABLES_NAME_WFDOWNLOAD, + where, null); + } + LogUtil.i("delete==" + delete); + return delete; + } + + public static void reset() { + getInstance().release(); + sInstance = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/_DatabaseManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/_DatabaseManager.java new file mode 100644 index 0000000..41880d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/storage/_DatabaseManager.java @@ -0,0 +1,50 @@ +package cn.shangyu.gdxzExpert.ecdemo.storage; + +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * com.yuntongxun.ecdemo.storage in ECDemo_Android + * Created by Jorstin on 2015/4/17. + */ +public class _DatabaseManager { + private AtomicInteger mOpenCounter = new AtomicInteger(); + + private static _DatabaseManager instance; + private static AbstractSQLManager.DatabaseHelper mDatabaseHelper; + private SQLiteDatabase mDatabase; + + public static synchronized void initializeInstance(SQLiteOpenHelper helper) { + if (instance == null) { + instance = new _DatabaseManager(); + mDatabaseHelper = (AbstractSQLManager.DatabaseHelper) helper; + } + } + + public static synchronized _DatabaseManager getInstance() { + if (instance == null) { + throw new IllegalStateException(_DatabaseManager.class.getSimpleName() + + " is not initialized, call initializeInstance(..) method first."); + } + + return instance; + } + + public synchronized SQLiteDatabase openDatabase() { + if(mOpenCounter.incrementAndGet() == 1) { + // Opening new database + mDatabase = mDatabaseHelper.getWritableDatabase(); + } + return mDatabase; + } + + public synchronized void closeDatabase() { + if(mOpenCounter.decrementAndGet() == 0) { + // Closing database + mDatabase.close(); + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ActivityTransition.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ActivityTransition.java new file mode 100644 index 0000000..b351054 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ActivityTransition.java @@ -0,0 +1,15 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * com.yuntongxun.ecdemo.ui in ECDemo_Android + * Created by Jorstin on 2015/6/26. + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({java.lang.annotation.ElementType.TYPE}) +public @interface ActivityTransition { + int value(); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/BaseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/BaseFragment.java new file mode 100644 index 0000000..cfa8830 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/BaseFragment.java @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.media.AudioManager; +import android.os.Bundle; +import androidx.fragment.app.FragmentActivity; +import android.view.KeyEvent; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.AudioManagerTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 自定义BaseFragment,处理上下音量键按下事件 + * Created by Jorstin on 2015/3/18. + */ +public abstract class BaseFragment extends CCPFragment { + + /**当前CCPFragment所承载的FragmentActivity实例*/ + private FragmentActivity mActionBarActivity; + private AudioManager mAudioManager; + + /**AudioManager.STREAM_MUSIC类型的音量最大值*/ + private int mMusicMaxVolume; + + /** + * 设置ActionBarActivity实例 + * @param activity + */ + public void setActionBarActivity(FragmentActivity activity) { + this.mActionBarActivity = activity; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mAudioManager = AudioManagerTools.getInstance().getAudioManager(); + mMusicMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + } + + /** + * 自定义页面方法,处理上下音量键按下事件 + * @param keyCode + * @param event + */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + if ((event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) + && mAudioManager != null) { + int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + if (streamVolume >= mMusicMaxVolume) { + LogUtil.d(LogUtil.getLogUtilsTag(BaseFragment.class), + "has set the max volume"); + return true; + } + int mean = mMusicMaxVolume / 7; + if (mean == 0) { + mean = 1; + } + mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, + streamVolume + mean, AudioManager.FLAG_PLAY_SOUND + | AudioManager.FLAG_SHOW_UI); + return true; + } + if ((event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) + && mAudioManager != null) { + int streamVolume = mAudioManager .getStreamVolume(AudioManager.STREAM_MUSIC); + int mean = mMusicMaxVolume / 7; + if (mean == 0) { + mean = 1; + } + mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, + streamVolume - mean, AudioManager.FLAG_PLAY_SOUND + | AudioManager.FLAG_SHOW_UI); + return true; + } + + return super.onKeyDown(keyCode, event); + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityBase.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityBase.java new file mode 100644 index 0000000..d6b21bb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityBase.java @@ -0,0 +1,534 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.media.AudioManager; +import android.os.IBinder; +import androidx.fragment.app.FragmentActivity; +import android.text.SpannableString; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.FrameLayout; +import android.widget.LinearLayout; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.base.CCPLayoutListenerView; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.AudioManagerTools; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.EmoticonUtil; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarView; +import cn.shangyu.gdxzExpert.ecdemo.view.VerticalImageSpan; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 界面处理 + * Created by Jorstin on 2015/3/17. + */ +public abstract class CCPActivityBase { + + private FragmentActivity mActionBarActivity; + + private AudioManager mAudioManager ; + + /** + * CCPActivity root view + */ + private View mContentView; + + private LayoutInflater mLayoutInflater; + + /** + * CCPActivity root View container + */ + private FrameLayout mContentFrameLayout; + + /** + * Manager dialog. + */ + private List mAppDialogCache ; + + /** + * The volume of music + */ + private int mMusicMaxVolume; + public View mBaseLayoutView; + private View mTransLayerView; + + public CharSequence mTitleText; + /** + * The client mute, do not accept message Notification + */ + private VerticalImageSpan mMuteIcon; + + /** + * 标题 + */ + private View mTopBarView; + /** + * Whether the mute of receive new message + */ + private boolean isMute = false; + + public void init(Context context , FragmentActivity activity) { + mActionBarActivity = activity; + onInit(); + + mAudioManager = AudioManagerTools.getInstance().getAudioManager(); + mMusicMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + + int layoutId = getLayoutId(); + mLayoutInflater = LayoutInflater.from(mActionBarActivity); + mBaseLayoutView = mLayoutInflater.inflate(R.layout.ccp_activity, null); + mTransLayerView = mBaseLayoutView.findViewById(R.id.ccp_trans_layer); + LinearLayout mRootView = (LinearLayout) mBaseLayoutView.findViewById(R.id.ccp_root_view); + mContentFrameLayout = (FrameLayout) mBaseLayoutView.findViewById(R.id.ccp_content_fl); + + if(getTitleLayout() != -1) { + mTopBarView = mLayoutInflater.inflate(getTitleLayout() , null); + mRootView.addView(mTopBarView, + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + } + + if (layoutId != -1) { + + mContentView = getContentLayoutView(); + if(mContentView == null) { + mContentView = mLayoutInflater.inflate(getLayoutId(), null); + } + mRootView.addView(mContentView, LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.MATCH_PARENT); + } + + dealContentView(mBaseLayoutView); + + CCPLayoutListenerView listenerView = (CCPLayoutListenerView) mActionBarActivity.findViewById(R.id.ccp_content_fl); + if (listenerView != null && mActionBarActivity.getWindow().getAttributes().softInputMode != WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) { + listenerView.setOnSizeChangedListener(new CCPLayoutListenerView.OnCCPViewSizeChangedListener() { + + @Override + public void onSizeChanged(int w, int h, int oldw, int oldh) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "oldh - h = " + (oldh - h)); + } + }); + + } + } + + + /** + * hideTitleView + */ + public final void hideTitleView() { + LogUtil.d(LogUtil.getLogUtilsTag(ECSuperActivity.class), "hideTitleView hasTitle :" + (mTopBarView != null? true: false)); + if(mTopBarView != null) { + mTopBarView.setVisibility(View.GONE); + } + } + + /** + * showTitleView + */ + public final void showTitleView() { + LogUtil.d(LogUtil.getLogUtilsTag(ECSuperActivity.class), "showTitleView hasTitle :" + (mTopBarView != null? true: false)); + if(mTopBarView != null) { + mTopBarView.setVisibility(View.VISIBLE); + } + } + + + /** + * isTitleShowing + * @return + */ + public final boolean isTitleShowing() { + LogUtil.d(LogUtil.getLogUtilsTag(ECSuperActivity.class), "isTitleShowing hasTitle :" + (mTopBarView != null? true: false)); + if(mTopBarView == null) { + return false; + } + + return mTopBarView.getVisibility() == View.VISIBLE; + } + + /** + * The height of acitonBar + * @return + */ + public final int getActionBarHeight() { + if(mTopBarView == null) { + return 0; + } + + return mTopBarView.getHeight(); + } + + /** + * + * @return + */ + public View getActivityLayoutView() { + return mContentView; + } + + public View getContentView() { + return mBaseLayoutView; + } + + /** + * + * @param visiable + */ + public void setActionBarVisiable(int visiable) { + if(mTopBarView == null) { + return ; + } + if(visiable == View.VISIBLE) { + showTitleView(); + return ; + } + hideTitleView(); + } + + /** + * + * @return + */ + public FragmentActivity getFragmentActivity() { + return mActionBarActivity; + } + + + /** + * + * @param contentDescription + */ + public final void setActionContentDescription(CharSequence contentDescription) { + if(TextUtils.isEmpty(contentDescription)) { + return; + } + String description = mActionBarActivity.getString(R.string.common_enter_activity) + contentDescription; + mActionBarActivity.getWindow().getDecorView().setContentDescription(description); + } + + + /** + * + */ + public void toggleSoftInput() { + final FragmentActivity activity = mActionBarActivity; + // Display the soft keyboard + InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = activity.getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + inputMethodManager.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS); + } + } + } + + /** + * hide input method. + */ + public void hideSoftKeyboard(View view) { + if (view == null) { + return; + } + + + InputMethodManager inputMethodManager = (InputMethodManager) mActionBarActivity.getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + IBinder localIBinder = view.getWindowToken(); + if (localIBinder != null) + inputMethodManager.hideSoftInputFromWindow(localIBinder, 0); + } + } + + /** + * hide inputMethod + */ + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) mActionBarActivity.getSystemService(Context.INPUT_METHOD_SERVICE); + if(inputMethodManager != null ) { + View localView = mActionBarActivity.getCurrentFocus(); + if(localView != null && localView.getWindowToken() != null ) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + + public final void setRootConsumeWatcher(CCPLayoutListenerView layoutListenerView) { + if (!(this.mContentFrameLayout instanceof CCPLayoutListenerView)) { + return; + } + ((CCPLayoutListenerView) this.mContentFrameLayout).setRootConsumeWatcher(); + } + + /** + * + * @return + */ + public int getStreamMaxVolume() { + return mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + } + + /** + * + * @return + */ + public int getStreamVolume() { + return mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + } + + /** + * 设置ActionBar标题 + * @param title + */ + public final void setActionBarTitle(CharSequence title) { + if(mTopBarView == null) { + return; + } + + mTitleText = title; + if(mTopBarView instanceof TopBarView) { + ((TopBarView) mTopBarView ).setTitle(title!= null ?title.toString():""); + } + setActionContentDescription(title); + } + + /** + * + * @return + */ + public final CharSequence getActionBarTitle() { + return mTitleText; + } + + /** + * + * @return + */ + public final TopBarView getTitleBar() { + return (TopBarView)mTopBarView; + } + + + /** + * + * @param keyCode + * @param event + * @return + */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + + if((event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) + && mAudioManager != null) { + int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + + if(streamVolume >= mMusicMaxVolume) { + LogUtil.d(LogUtil.getLogUtilsTag(BaseFragment.class), "has set the max volume"); + return true; + } + + int mean = mMusicMaxVolume / 7; + if(mean == 0) { + mean = 1; + } + + mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, + streamVolume + mean, AudioManager.FLAG_PLAY_SOUND + | AudioManager.FLAG_SHOW_UI); + } + if((event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) + && mAudioManager != null) { + int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + int mean = mMusicMaxVolume / 7; + if(mean == 0) { + mean = 1; + } + + mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, + streamVolume - mean, AudioManager.FLAG_PLAY_SOUND + | AudioManager.FLAG_SHOW_UI); + return true; + } + return false; + } + + /** + * + * @param keyCode + * @param event + * @return + */ + public boolean onKeyUp(int keyCode, KeyEvent event) { + + if(keyCode == KeyEvent.KEYCODE_MENU && event.getAction() == KeyEvent.ACTION_UP) { + /*if(mOverFlowAction != null && mOverFlowAction.isEnabled()) { + callMenuCallback(mOverFlowMenuItem, mOverFlowAction); + return true; + }*/ + } + return false; + } + + public void onResume(){ + + } + + public void onPause(){ + + } + + /** + * + */ + public void onDestroy() { + releaseDialogList(); + mAudioManager = null; + mTopBarView = null; + } + + /** + * + */ + private void releaseDialogList() { + if(mAppDialogCache == null) { + return; + } + + for(Dialog dialog : mAppDialogCache) { + if(dialog == null || !dialog.isShowing()) { + continue; + } + dialog.dismiss(); + } + mAppDialogCache.clear(); + mAppDialogCache = null; + } + + + /** + * 子类重载该方法自定义标题布局文件 + * @return + */ + public int getTitleLayout() { + return R.layout.ec_title_view_base; + } + + public TopBarView getTopBarView() { + if(mTopBarView instanceof TopBarView) { + return (TopBarView) mTopBarView; + } + return null; + } + + protected abstract void onInit(); + + /** + * The sub Activity implement, set the Ui Layout + * @return + */ + protected abstract int getLayoutId(); + protected abstract View getContentLayoutView(); + protected abstract String getClassName(); + + /** + * + */ + protected abstract void dealContentView(View contentView); + + public void addDialog(Dialog dialog) { + if(dialog == null) { + return; + } + + if(mAppDialogCache == null) { + mAppDialogCache = new ArrayList(); + } + mAppDialogCache.add(dialog); + } + + /** + * + */ + protected SpannableString buildActionTitle() { + int dimensionPixelSize = mActionBarActivity.getResources().getDimensionPixelSize(R.dimen.BigTextSize); + + int mutIndex = 0; + String format = "%s"; + if(isMute) { + format = format + " #"; + mutIndex += 2; + } + + SpannableString spannableString = EmoticonUtil.getTextFormat(mActionBarActivity, String.format(format, new Object[]{mTitleText}), dimensionPixelSize); + if(isMute) { + if(mMuteIcon == null) { + mMuteIcon = getTitleIconTips(dimensionPixelSize, R.drawable.chat_mute_notify_title_icon); + } + int length = spannableString.length() - mutIndex + 1; + spannableString.setSpan(mMuteIcon, length, length + 1, SpannableStringBuilder.SPAN_POINT_MARK); + } + return spannableString; + } + + /** + * + * @param padding + * @param iconRes + * @return + */ + private VerticalImageSpan getTitleIconTips(int padding , int iconRes) { + Drawable drawable = mActionBarActivity.getResources().getDrawable(iconRes); + drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); + VerticalImageSpan imageSpan = new VerticalImageSpan(drawable); + imageSpan.setPadding((drawable.getIntrinsicHeight() - padding) / 2); + return imageSpan; + } + + /** + * + * @param mute + */ + public CharSequence setMute(boolean mute) { + isMute = mute; + return buildActionTitle(); + } + + + /** + * + */ + public final void invalidateActionMenu() { + mActionBarActivity.supportInvalidateOptionsMenu(); + } + + public void setScreenEnable(boolean screenEnable) { + + } + + public void onStart() { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityImpl.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityImpl.java new file mode 100644 index 0000000..51d65e2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPActivityImpl.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.view.View; + +/** + * Created by Jorstin on 2015/3/18. + */ +public class CCPActivityImpl extends CCPActivityBase { + + final private ECSuperActivity mActivity; + + public CCPActivityImpl(ECSuperActivity activity) { + mActivity = activity; + } + + @Override + protected void onInit() { + mActivity.onActivityInit(); + } + + @Override + protected int getLayoutId() { + return mActivity.getLayoutId(); + } + + public int getTitleLayout() { + return mActivity.getTitleLayout(); + } + + @Override + protected View getContentLayoutView() { + return null; + } + + @Override + protected String getClassName() { + return mActivity.getClass().getName(); + } + + @Override + protected void dealContentView(View contentView) { + mActivity.onBaseContentViewAttach(contentView); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragment.java new file mode 100644 index 0000000..cf6d53d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragment.java @@ -0,0 +1,347 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.SpannableString; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarView; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + + +/** + * 应用页面View基类,每个View 必须要继承与该类并实现相应的方法 + * Created by Jorstin on 2015/3/18. + */ +public abstract class CCPFragment extends Fragment { + + private static final String TAG = "gdxzExpert.CCPFragment"; + + /**广播拦截器*/ + private InternalReceiver internalReceiver; + /**当前页面是否可以销毁*/ + private boolean isFinish = false; + /** + * 初始化应用ActionBar + */ + private CCPActivityBase mBaseActivity = new CCPFragmentImpl(this); +// public SwipeBackLayout mSwipeBackLayout; + + final Handler mSupperHandler = new Handler() { + + @Override + public void dispatchMessage(Message msg) { + // TODO Auto-generated method stub + super.dispatchMessage(msg); + } + + }; + + private ECAlertDialog buildAlert; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mBaseActivity.init(getActivity().getBaseContext(), getActivity()); + onFragmentInit(); + abstracrRegist(); + } + + public void abstracrRegist() { + registerReceiver(new String[]{SDKCoreHelper.ACTION_KICK_OFF}); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + this.mBaseActivity.setRootConsumeWatcher(null); + return mBaseActivity.mBaseLayoutView; + } + + @Override + public void onDetach() { + super.onDetach(); + try { + // 注销广播监听器 + getActivity().unregisterReceiver(internalReceiver); + } catch (Exception e) { + } + } + + public void onDestroy() { + super.onDestroy(); + this.mBaseActivity.onDestroy(); + } + + /** + * 处理按钮按下事件 + * @param keyCode + * @param event + * @return + */ + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(mBaseActivity.onKeyDown(keyCode, event)) { + return true; + } + if((event.getKeyCode() == KeyEvent.KEYCODE_BACK) + && event.getAction() == KeyEvent.ACTION_DOWN) { + finish(); + return true; + } + return false; + } + + /** + * 注册广播Action,子类如果需要监听广播可以调用 + * 该方法传入相应事件的Action + * @param actionArray + */ + protected final void registerReceiver(String[] actionArray) { + if (actionArray == null) { + return; + } + IntentFilter intentfilter = new IntentFilter(); + for (String action : actionArray) { + intentfilter.addAction(action); + } + //intentfilter.addAction(CASIntent.ACTION_SERVICE_DESTORY); + //intentfilter.addAction(CASIntent.ACTION_FORCE_DEACTIVE); + if (internalReceiver == null) { + internalReceiver = new InternalReceiver(); + } + getActivity().registerReceiver(internalReceiver, intentfilter); + } + + /** + * 返回一个Handler 主线程 + * @return + */ + public Handler getSupperHandler() { + return mSupperHandler; + } + + public boolean isFinish() { + return isFinish; + } + + public void setIsFinish(boolean isFinish) { + this.isFinish = isFinish; + } + + /** + * 重载页面关闭方法 + */ + public void finish() { + if(getActivity() == null) { + return; + } + if(isFinish) { + getActivity().finish(); + return; + } + + getActivity().getSupportFragmentManager().popBackStack(); + } + + @Override + public void onResume() { + long currentTimeMillis = System.currentTimeMillis(); + super.onResume(); + this.mBaseActivity.onResume(); + LogUtil.d(TAG, "KEVIN MMActivity onResume:" + (System.currentTimeMillis() - currentTimeMillis)); + } + + public void onStart() { + this.mBaseActivity.onStart(); + super.onStart(); + } + + public final void setScreenEnable(boolean screenEnable) { + this.mBaseActivity.setScreenEnable(screenEnable); + } + + + @Override + public void onPause() { + long currentTimeMillis = System.currentTimeMillis(); + super.onPause(); + this.mBaseActivity.onPause(); + LogUtil.d(TAG, "KEVIN MMActivity onPause:" + (System.currentTimeMillis() - currentTimeMillis)); + } + + /** + * 查找 View + * @param paramInt + * @return + */ + public final View findViewById(int paramInt) { + return getView().findViewById(paramInt); + } + + /** + * 如果子界面需要拦截处理注册的广播 + * 需要实现该方法 + * @param context + * @param intent + */ + protected void handleReceiver(Context context, Intent intent) { + // 广播处理 + // 广播处理 + if(intent == null ) { + return ; + } + if(SDKCoreHelper.ACTION_KICK_OFF.equals(intent.getAction())) { + String kickoffText = intent.getStringExtra("kickoffText"); + handlerKickOff(kickoffText); + } + } + + public void handlerKickOff(String kickoffText) { + if (getActivity().isFinishing()) { + return; + } + buildAlert = ECAlertDialog.buildAlert(getActivity(), kickoffText,getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { +// ECNotificationManager.getInstance().forceCancelNotification(); + restartAPP(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + + public void restartAPP() { + if (buildAlert.isShowing()) { + buildAlert.dismiss(); + } +// ECDevice.unInitial(); + //注销账号,清除该账号的所有文件, + DataCleanManager.cleanApplicationData(getActivity()); + // 把IS_OPEN_MAIN_PAGER键, 在缓存中存储一个true.保存后不需要进入引导页 +// SharePrefUtil.saveIsFirstBoolean(getActivity(), Constant.SP_IS_FIRST_NAME, true); +// ECNotificationManager.getInstance().forceCancelNotification(); + Intent intent = new Intent(getActivity(), LoginNewActivity.class); + + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + AppManager.getAppManager().finishAllActivity(); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + /** + * 每个页面需要实现该方法返回一个该页面所对应的资源ID + * @return 页面资源ID + */ + protected abstract int getLayoutId(); + + /** + * 如果需要自定义页面标题,则需要重载该方法 + * @return + */ + public int getTitleLayoutId() { + return R.layout.ec_title_view_base; + } + + protected void onFragmentInit() { + + } + + public void onBaseContentViewAttach(View contentView) { + + } + + public TopBarView getTopBarView() { + return mBaseActivity.getTopBarView(); + } + /** + * + * @param mute + */ + public SpannableString setNewMessageMute(boolean mute) { + mBaseActivity.setMute(mute); + return mBaseActivity.buildActionTitle(); + } + /** + * 设置ActionBar标题 + * @param resid + */ + public void setActionBarTitle(int resid) { + mBaseActivity.setActionBarTitle(getString(resid)); + } + + /** + * 设置ActionBar标题 + * @param text + */ + public void setActionBarTitle(CharSequence text) { + mBaseActivity.setActionBarTitle(text); + } + + /** + * 返回ActionBar 标题 + * @return + */ + public final CharSequence getActionBarTitle() { + return mBaseActivity.getActionBarTitle(); + } + + + public void toggleSoftInput() { + mBaseActivity.toggleSoftInput(); + } + + public void hideSoftKeyboard() { + mBaseActivity.hideSoftKeyboard(); + } + + /** + * 自定义应用全局广播处理器,方便全局拦截广播并进行分发 + * @author 容联•云通讯 + * @date 2014-12-4 + * @version 4.0 + */ + private class InternalReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if(intent == null || intent.getAction() == null) { + return ; + } + handleReceiver(context, intent); + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragmentImpl.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragmentImpl.java new file mode 100644 index 0000000..a7ef449 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPFragmentImpl.java @@ -0,0 +1,46 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.view.View; + +/** + * com.yuntongxun.ecdemo.ui in ECDemo_Android + * Created by Jorstin on 2015/6/16. + */ +public class CCPFragmentImpl extends CCPActivityBase { + final private CCPFragment mFragment; + + public CCPFragmentImpl(CCPFragment fragment) { + mFragment = fragment; + } + + @Override + protected void onInit() { + mFragment.onFragmentInit(); + } + + @Override + protected int getLayoutId() { + return mFragment.getLayoutId(); + } + + @Override + protected View getContentLayoutView() { + return null; + } + + @Override + protected String getClassName() { + return mFragment.getClass().getName(); + } + + @Override + protected void dealContentView(View contentView) { + mFragment.onBaseContentViewAttach(contentView); + } + + @Override + public int getTitleLayout() { + return mFragment.getTitleLayoutId(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPListAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPListAdapter.java new file mode 100644 index 0000000..d06eff5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/CCPListAdapter.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.Context; +import android.database.Cursor; +import android.widget.BaseAdapter; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.ecdemo.storage.OnMessageChange; + +/** + * 定义抽象适配器,继承扩展不同的消息 + * Created by Jorstin on 2015/3/18. + */ +public abstract class CCPListAdapter extends BaseAdapter implements OnMessageChange { + + /**数据Cursor*/ + private Cursor mCursor; + /**数据缓存*/ + private Map mData ; + /**适配器使用数据类型*/ + protected T t; + /**上下文对象*/ + protected Context mContext; + /**数据总数*/ + protected int mCount; + /**数据改变回调接口*/ + protected OnCursorChangeListener mOnCursorChangeListener; + + /** + * 构造方法 + * @param ctx + * @param t + */ + public CCPListAdapter(Context ctx , T t) { + mContext = ctx; + this.t = t; + this.mCount = -1; + } + + protected void setCursor(Cursor cursor) { + mCursor = cursor; + this.mCount = -1; + } + + public void initCache() { + if(mData != null) { + return ; + } + mData = new HashMap(); + } + + /** + * 返回一个数据类型Cursor + * @return + */ + protected Cursor getCursor() { + if(mCursor == null) { + initCursor(); +// Assert.assertNotNull(mCursor); + } + return mCursor; + } + + public void setOnCursorChangeListener(OnCursorChangeListener listener) { + this.mOnCursorChangeListener = listener; + } + + public void resetListener() { + this.mOnCursorChangeListener = null; + } + + /*** + * 关闭数据库 + */ + public void closeCursor() { + if(mData != null) { + mData.clear(); + } + if(mCursor != null) { + mCursor.close(); + } + mCount = -1; + } + + @Override + public int getCount() { + if(mCount < 0) { + mCount = getCursor().getCount(); + } + return mCount; + } + + @Override + public T getItem(int position) { + if(position < 0 || !getCursor().moveToPosition(position)) { + return null; + } + + if(mData == null) { + return getItem(this.t, getCursor()); + } + + T _t = mData.get(Integer.valueOf(position)); + if(_t == null) { + _t = getItem(null, getCursor()); + } + mData.put(Integer.valueOf(position), _t); + return _t; + } + + @Override + public long getItemId(int position) { + + return 0; + + } + + @Override + public void onChanged(String sessionId) { + if(mOnCursorChangeListener != null) { + mOnCursorChangeListener.onCursorChangeBefore(); + } + closeCursor(); + notifyChange(); + + if(mOnCursorChangeListener == null) { + return ; + } + mOnCursorChangeListener.onCursorChangeAfter(); + } + + protected abstract void notifyChange(); + protected abstract void initCursor(); + + protected abstract T getItem(T t , Cursor cursor); + + + + public interface OnListAdapterCallBackListener { + void OnListAdapterCallBack(); + } + + + public interface OnCursorChangeListener { + void onCursorChangeBefore(); + void onCursorChangeAfter(); + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ContactListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ContactListFragment.java new file mode 100644 index 0000000..2cfd6df --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ContactListFragment.java @@ -0,0 +1,314 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.app.Activity; +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactLogic; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactSelectListActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +/** + * 通讯录界面 + * Created by Jorstin on 2015/3/18. + */ +public class ContactListFragment extends TabFragment { + + /**当前联系人列表类型(查看、联系人选择)*/ + public static final int TYPE_NORMAL = 1; + public static final int TYPE_SELECT = 2; + public static final int TYPE_NON_GROUP = 3; + /**当前选择联系人位置*/ + public static ArrayList positions = new ArrayList(); + /**列表类型*/ + private int mType; + private ListView mListView; + private ContactsAdapter mAdapter; + private OnContactClickListener mClickListener; + /**选择群组*/ + private View mGroupCardItem; +// ECHandlerHelper mHandlerHelper = new ECHandlerHelper(); + + + // 设置联系人点击事件通知 + private final AdapterView.OnItemClickListener onItemClickListener + = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + + int headerViewsCount = mListView.getHeaderViewsCount(); + if(position < headerViewsCount) { + return; + } + int _position = position - headerViewsCount; + + if(mAdapter == null || mAdapter.getItem(_position) == null) { + return ; + } + + if(mType != TYPE_NORMAL) { + // 如果是选择联系人模式 + Integer object = Integer.valueOf(_position); + if(positions.contains(object)) { + positions.remove(object); + } else { + positions.add(object); + } + notifyClick(positions.size()); + mAdapter.notifyDataSetChanged(); + return ; + } + + + ECContacts contacts = mAdapter.getItem(_position); + if(contacts == null || contacts.getId() == -1) { + ToastUtil.showMessage(R.string.contact_none); + return ; + } +// Intent intent = new Intent(getActivity(), ContactDetailActivity.class); +// intent.putExtra(ContactDetailActivity.RAW_ID, contacts.getId()); +// startActivity(intent); + } + }; + + final private View.OnClickListener mSelectGroupClickListener + = new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (mClickListener != null) { + mClickListener.onSelectGroupClick(); + } + } + }; + + /** + * Create a new instance of ContactListFragment, providing "type" + * as an argument. + */ + public static ContactListFragment newInstance(int type) { + ContactListFragment f = new ContactListFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("type", type); + f.setArguments(args); + + return f; + } + + /** + * 选择的联系人 + */ + public String getChatuser() { + StringBuilder selectUser = new StringBuilder(); + for(Integer position : positions) { + ECContacts item = mAdapter.getItem(position); + if(item != null ) { + selectUser.append(item.getContactid()).append(","); + } + } + + if(selectUser.length() > 0) { + selectUser.substring(0, selectUser.length() - 1); + } + return selectUser.toString(); + } + + /** + * When creating, retrieve this instance's number from its arguments. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mType = getArguments() != null ? getArguments().getInt("type") : TYPE_NORMAL; + if(positions == null ) { + positions = new ArrayList(); + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + if (!(activity instanceof ContactSelectListActivity) || mType == TYPE_NORMAL) { + return; + } + try { + mClickListener = (OnContactClickListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnContactClickListener"); + } + } + + private void notifyClick(int count) { + if(mClickListener != null) { + mClickListener.onContactClick(count); + } + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if(mListView != null && mGroupCardItem != null) { + mListView.removeHeaderView(mGroupCardItem); + mListView.setAdapter(null); + } + mListView = (ListView) findViewById(R.id.address_contactlist); + View emptyView = findViewById(R.id.empty_tip_tv); + mListView.setEmptyView(emptyView); + + mListView.setOnItemClickListener(onItemClickListener); + if(mType == TYPE_SELECT) { + mGroupCardItem = View.inflate(getActivity(), R.layout.group_card_item, null); + View startGroup = mGroupCardItem.findViewById(R.id.card_item_tv); + if (startGroup != null) { + startGroup.setOnClickListener(mSelectGroupClickListener); + } + mListView.addHeaderView(mGroupCardItem); + } + +// mHandlerHelper.getTheadHandler().post(new Runnable() { +// +// @Override +// public void run() { +// final ArrayList contacts = ContactSqlManager.getContacts(); +// getActivity().runOnUiThread(new Runnable() { +// +// @Override +// public void run() { +// mAdapter = new ContactsAdapter(getActivity()); +// mListView.setAdapter(mAdapter); +// +// mAdapter.setData(contacts); +// findViewById(R.id.loading_tips_area).setVisibility(View.GONE); +// } +// }); +// } +// }); + + } + + @Override + protected void onTabFragmentClick() { + + } + + @Override + protected void onReleaseTabUI() { + + } + + @Override + protected int getLayoutId() { + return R.layout.contacts_activity; + } + + + + class ContactsAdapter extends ArrayAdapter { + + Context mContext; + public ContactsAdapter(Context context) { + super(context, 0); + mContext = context; + } + + + public void setData(List data) { + setNotifyOnChange(false); + clear(); + setNotifyOnChange(true); + if (data != null) { + for (ECContacts appEntry : data) { + add(appEntry); + } + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + View view; + ViewHolder mViewHolder; + if(convertView == null || convertView.getTag() == null) { + view = View.inflate(mContext, R.layout.contact_list_item, null); + + mViewHolder = new ViewHolder(); + mViewHolder.mAvatar = (ImageView) view.findViewById(R.id.avatar_iv); + mViewHolder.name_tv = (TextView) view.findViewById(R.id.name_tv); + mViewHolder.account = (TextView) view.findViewById(R.id.account); + mViewHolder.checkBox = (CheckBox) view.findViewById(R.id.contactitem_select_cb); + + view.setTag(mViewHolder); + } else { + view = convertView; + mViewHolder = (ViewHolder) view.getTag(); + } + + ECContacts contacts = getItem(position); + if(contacts != null) { + mViewHolder.mAvatar.setImageBitmap(ContactLogic.getPhoto(contacts.getRemark())); + mViewHolder.name_tv.setText(contacts.getNickname()); + mViewHolder.account.setText(contacts.getContactid()); + } + + if(mType != TYPE_NORMAL) { + mViewHolder.checkBox.setVisibility(View.VISIBLE); + if(mViewHolder.checkBox.isEnabled() && positions != null ) { + mViewHolder.checkBox.setChecked(positions.contains(position)); + } else { + mViewHolder.checkBox.setChecked(false); + } + } else { + mViewHolder.checkBox.setVisibility(View.GONE); + } + + return view; + } + + class ViewHolder { + /**头像*/ + ImageView mAvatar; + /**名称*/ + TextView name_tv; + /**账号*/ + TextView account; + /**选择状态*/ + CheckBox checkBox; + + } + } + + @Override + public void onDetach() { + super.onDetach(); + if(positions != null) { + positions.clear(); + positions = null; + } + } + + public interface OnContactClickListener { + void onContactClick(int count); + void onSelectGroupClick(); + } + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationAdapter.java new file mode 100644 index 0000000..4ebec4e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationAdapter.java @@ -0,0 +1,328 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DateUtil; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ResourceHelper; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ConversationSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupMemberSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.Conversation; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactLogic; + +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.Url; + + +/** + * @author 容联•云通讯 + * @date 2014-12-8 + * @version 4.0 + */ +public class ConversationAdapter extends CCPListAdapter { + + private OnListAdapterCallBackListener mCallBackListener; + int padding; + private ColorStateList[] colorStateLists ; + /** + * @param ctx + */ + public ConversationAdapter(Context ctx , OnListAdapterCallBackListener listener) { + super(ctx, new Conversation()); + mCallBackListener = listener; + padding = ctx.getResources().getDimensionPixelSize(R.dimen.OneDPPadding); + colorStateLists = new ColorStateList[]{ + ResourceHelper.getColorStateList(ctx, R.color.normal_text_color), + ResourceHelper.getColorStateList(ctx, R.color.ccp_list_textcolor_three) + }; + } + + + @Override + protected Conversation getItem(Conversation t, Cursor cursor) { + Conversation conversation = new Conversation(); + conversation.setCursor(cursor); + if(conversation.getUsername() != null && conversation.getUsername().endsWith("@priategroup.com")) { + ArrayList member = GroupMemberSqlManager.getGroupMemberID(conversation.getSessionId()); + if(member != null) { + ArrayList contactName = ContactSqlManager.getContactName(member.toArray(new String[]{})); + if(contactName != null && !contactName.isEmpty()) { + String chatroomName = DemoUtils.listToString(contactName, ","); + conversation.setUsername(chatroomName); + } + } + } + return conversation; + } + + /** + * 会话时间 + * @param conversation + * @return + */ + protected final CharSequence getConversationTime(Conversation conversation) { +// if(conversation.getSendStatus() == ECMessage.MessageStatus.SENDING.ordinal()) { +// return mContext.getString(R.string.conv_msg_sending); +// } + if(conversation.getDateTime() <= 0) { + return ""; + } + return DateUtil.getDateString(conversation.getDateTime(), + DateUtil.SHOW_TYPE_CALL_LOG).trim(); + } + + /** + * 根据消息类型返回相应的主题描述 + * @param conversation + * @return + */ + protected final CharSequence getConversationSnippet(Conversation conversation) { + if(conversation == null) { + return ""; + } + if(GroupNoticeSqlManager.CONTACT_ID.equals(conversation.getSessionId())) { + return "GroupNoticeHelper.getNoticeContent(conversation.getContent())"; + } + + String fromNickName = ""; +// if (conversation.getSessionId().toUpperCase().startsWith("G")) { +// if(conversation.getContactId() != null && CCPAppManager.getClientUser() != null +// && !conversation.getContactId().equals(CCPAppManager.getClientUser().getUserId())) { +// ECContacts contact = ContactSqlManager.getContact(conversation.getContactId()); +// if (contact != null && contact.getNickname() != null) { +// fromNickName = contact.getNickname() + ": "; +// } else { +// fromNickName = conversation.getContactId() + ": "; +// } +// } +// } + +// if(conversation.getMsgType() == ECMessage.Type.VOICE.ordinal()) { +// return fromNickName + mContext.getString(R.string.app_voice); +// } else if(conversation.getMsgType() == ECMessage.Type.FILE.ordinal()) { +// return fromNickName + mContext.getString(R.string.app_file); +// } else if(conversation.getMsgType() == ECMessage.Type.IMAGE.ordinal()) { +// return fromNickName + mContext.getString(R.string.app_pic); +// } else if(conversation.getMsgType() == ECMessage.Type.VIDEO.ordinal()) { +// return fromNickName + mContext.getString(R.string.app_video); +// } + return fromNickName + conversation.getContent(); + } + + /** + * 根据消息发送状态处理 + * @param context + * @param conversation + * @return + */ + public static Drawable getChattingSnippentCompoundDrawables(Context context , Conversation conversation) { +// if(conversation.getSendStatus() == ECMessage.MessageStatus.FAILED.ordinal()) { +// return DemoUtils.getDrawables(context, R.drawable.msg_state_failed); +// } else if (conversation.getSendStatus() == ECMessage.MessageStatus.SENDING.ordinal()) { +// return DemoUtils.getDrawables(context, R.drawable.msg_state_sending); +// } else { + return null; +// } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + View view; + ViewHolder mViewHolder; + if(convertView == null || convertView.getTag() == null) { + view = View.inflate(mContext , R.layout.conversation_item, null); + + mViewHolder = new ViewHolder(); + mViewHolder.conversation_item = (LinearLayout) view.findViewById(R.id.conversation_item_ll); + mViewHolder.user_avatar = (ImageView) view.findViewById(R.id.avatar_iv); + mViewHolder.prospect_iv = (ImageView) view.findViewById(R.id.avatar_prospect_iv); + mViewHolder.nickname_tv = (EmojiconTextView) view.findViewById(R.id.nickname_tv); + mViewHolder.tipcnt_tv = (TextView) view.findViewById(R.id.tipcnt_tv); + mViewHolder.update_time_tv = (TextView) view.findViewById(R.id.update_time_tv); + mViewHolder.last_msg_tv = (EmojiconTextView) view.findViewById(R.id.last_msg_tv); + mViewHolder.image_input_text = (ImageView) view.findViewById(R.id.image_input_text); + mViewHolder.image_mute = (ImageView) view.findViewById(R.id.image_mute); + view.setTag(mViewHolder); + } else { + view = convertView; + mViewHolder = (ViewHolder) view.getTag(); + } + + Conversation conversation = getItem(position); + if(conversation != null) { + //只显示我的患者的消息 + LogUtil.i("消息分类==="+conversation.getType()+"=uuid=="+conversation.getSessionId()); + //从患者数据库查询键 + PatientModel Pm = PatientSqlManager.getPatientInfo(conversation.getSessionId()); + if (Pm.getRealName() == null) { + ConversationSqlManager.delSession(conversation.getSessionId()); + notifyChange(); + } + if (Constant.typePatient.equals(conversation.getType())) { + + if(!TextUtils.isEmpty(Pm.getNickName())){ + mViewHolder.nickname_tv.setText(Pm.getNickName()); + }else if(TextUtils.isEmpty(Pm.getRealName())) { + mViewHolder.nickname_tv.setText(Pm.getMobile()); + } else { + mViewHolder.nickname_tv.setText(Pm.getRealName()); + } + LogUtil.i("NickName = "+Pm.getNickName()+".RealName = "+Pm.getRealName()); + handleDisplayNameTextColor(mViewHolder.nickname_tv , conversation.getSessionId()); + mViewHolder.last_msg_tv.setText(getConversationSnippet(conversation)); + mViewHolder.last_msg_tv.setCompoundDrawables(getChattingSnippentCompoundDrawables(mContext, conversation), null, null, null); + // 未读提醒设置 + setConversationUnread(mViewHolder, conversation); + mViewHolder.image_input_text.setVisibility(View.GONE); + mViewHolder.update_time_tv.setText(getConversationTime(conversation)); + if(conversation.getSessionId().toUpperCase().startsWith("G")) { + Bitmap bitmap = ContactLogic.getChatroomPhoto(conversation.getSessionId()); + if(bitmap != null) { + mViewHolder.user_avatar.setImageBitmap(bitmap); + mViewHolder.user_avatar.setPadding(padding, padding, padding, padding); + mViewHolder.user_avatar.setBackgroundColor(Color.parseColor("#d5d5d5")); + } else { + mViewHolder.user_avatar.setImageResource(R.drawable.group_head); + mViewHolder.user_avatar.setPadding(0, 0, 0, 0); + mViewHolder.user_avatar.setBackgroundDrawable(null); + } + } else { + mViewHolder.user_avatar.setBackgroundDrawable(null); + if(conversation.getSessionId().equals(GroupNoticeSqlManager.CONTACT_ID)) { + mViewHolder.user_avatar.setImageResource(R.drawable.ic_launcher); + } else { + //设置用户头像 +// ECContacts contact = ContactSqlManager.getContact(conversation.getSessionId()); + LogUtil.i("conversationAdapter.RealName==="+Pm.getRealName()+"=conversationAdapter.getPhoto=="+Pm.getPhoto()); + String userid = SharePrefUtil.getString(mContext, Constant.USERID, ""); + //如果是我自己,则用我的头像 + String photo; + if (userid.equals(conversation.getSessionId())) { + photo = SharePrefUtil.getString(mContext, Constant.photo, ""); + }else{ + photo = Pm.getPhoto(); + } + if (!TextUtils.isEmpty(photo)) { + photo = Url.urlHtml + photo; + } + LogUtil.i("conversationAdapter-touxiangUrl=="+photo); + ImageLoader.getInstance().displayImage(photo, mViewHolder.user_avatar, + ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// mViewHolder.user_avatar.setImageBitmap(ContactLogic.getPhoto(photo)); + } + } + mViewHolder.image_mute.setVisibility(isNotice(conversation)? View.GONE :View.VISIBLE); + } + }else { + + } + return view; + } + + private void handleDisplayNameTextColor(EmojiconTextView textView, String contactId) { + if(ContactLogic.isCustomService(contactId)) { + textView.setTextColor(colorStateLists[1]); + } else { + textView.setTextColor(colorStateLists[0]); + } + } + + /** + * 设置未读图片显示规则 + * @param mViewHolder + * @param conversation + */ + private void setConversationUnread(ViewHolder mViewHolder, Conversation conversation) { + String msgCount = conversation.getUnreadCount() > 100 ? "..." : String.valueOf(conversation.getUnreadCount()); + mViewHolder.tipcnt_tv.setText(msgCount); + if(conversation.getUnreadCount() == 0) { + mViewHolder.tipcnt_tv.setVisibility(View.GONE); + mViewHolder.prospect_iv.setVisibility(View.GONE); + } else if (conversation.isNotice()) { + mViewHolder.tipcnt_tv.setVisibility(View.VISIBLE); + mViewHolder.prospect_iv.setVisibility(View.GONE); + } else { + mViewHolder.prospect_iv.setVisibility(View.GONE); + mViewHolder.tipcnt_tv.setVisibility(View.VISIBLE); + } + } + + static class ViewHolder { + public LinearLayout conversation_item; + ImageView user_avatar; + TextView tipcnt_tv; + ImageView prospect_iv; + EmojiconTextView nickname_tv; + TextView update_time_tv; + EmojiconTextView last_msg_tv; + ImageView image_input_text; + ImageView image_mute; + } + + @Override + protected void initCursor() { + notifyChange(); + } + + @Override + public void notifyChange() { + if(mCallBackListener != null) { + mCallBackListener.OnListAdapterCallBack(); + } + /** + * + * + * 注意 + */ + //查询会话消息,里面包含群组与单聊,会话 +// Cursor cursor = ConversationSqlManager.getConversationCursor(); + Cursor cursor = ConversationSqlManager.getConversationCursorPatient(); + setCursor(cursor); + super.notifyDataSetChanged(); + } + + private boolean isNotice(Conversation conversation) { + if(conversation.getSessionId().toLowerCase().startsWith("g")) { + return conversation.isNotice(); + } + return true; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationListFragment.java new file mode 100644 index 0000000..91aab49 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ConversationListFragment.java @@ -0,0 +1,612 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.MylanFollowActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.ZengshuBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.CustomerServiceHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.Conversation; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactLogic; +import cn.shangyu.gdxzExpert.ecdemo.view.NetWarnBannerView; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + +/** + * 会话界面 + * Created by Jorstin on 2015/3/18. + */ +public class ConversationListFragment extends TabFragment implements CCPListAdapter.OnListAdapterCallBackListener { + + private static final String TAG = "gdxzExpert.ConversationListFragment"; + + + /**会话消息列表ListView*/ + private ListView mListView; + private NetWarnBannerView mBannerView; + private ConversationAdapter mAdapter; + private OnUpdateMsgUnreadCountsListener mAttachListener; + private ECProgressDialog mPostingdialog; + public static final int URL_PATH = 200; + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + switch (msg.what){ + case URL_PATH: + ZengshuBean zengshuBean = GsonTools.fromGsonToBean(resultData, ZengshuBean.class); + showFuliZengshuDailog(zengshuBean); + break; + } + + } + }; + }; + private void showFuliZengshuDailog(ZengshuBean bean1) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_fulizengshu, null); + TextView tv_rennum = layout.findViewById(R.id.tv_rennum); + TextView tv_bennum = layout.findViewById(R.id.tv_bennum); + ImageView iv_fuli_close = layout.findViewById(R.id.iv_fuli_close); + Button btn_canyu = layout.findViewById(R.id.btn_canyu); + tv_rennum.setText(bean1.getData().getPatient_num()+""); + tv_bennum.setText(bean1.getData().getBook_num()+""); + final Dialog dialog = new AlertDialog.Builder( + getActivity()).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + iv_fuli_close.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_canyu.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(getActivity(), MyQrCodeActivity.class); + startActivity(intent); + dialog.dismiss(); + } + }); + + } + final private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View visew, int position, + long id) { + + if(mAdapter != null) { + int headerViewsCount = mListView.getHeaderViewsCount(); + if(position < headerViewsCount) { + return; + } + int _position = position - headerViewsCount; + + if(mAdapter == null || mAdapter.getItem(_position) == null) { + return ; + } + + + Conversation conversation = mAdapter.getItem(_position); + if(GroupNoticeSqlManager.CONTACT_ID.equals(conversation.getSessionId())) { +// Intent intent = new Intent(getActivity() , GroupNoticeActivity.class); +// startActivity(intent); + return ; + } + + + if(ContactLogic.isCustomService(conversation.getSessionId())) { + showProcessDialog(); + dispatchCustomerService(conversation.getSessionId()); + return ; + } + String name = PatientSqlManager.getPatientName(conversation.getSessionId()); + LogUtil.i("conversation.getSessionId()=="+conversation.getSessionId()+","+name); + CCPAppManager.startChattingAction(getActivity() , conversation.getSessionId() , name, "2,1,2,0", null, 0); + } + } + }; + private Button bt_mylan; + private ImageView bt_yingxiongbang; + + /** + * 处理在线客服界面请求 + * @param sessionId + */ + private void dispatchCustomerService(String sessionId) { + CustomerServiceHelper.startService(sessionId, new CustomerServiceHelper.OnStartCustomerServiceListener() { + @Override + public void onServiceStart(String event) { + dismissPostingDialog(); + CCPAppManager.startCustomerServiceAction(getActivity() , event); + } + +// @Override +// public void onError(ECError error) { +// dismissPostingDialog(); +// } + }); + } + + private final AdapterView.OnItemLongClickListener mOnLongClickListener = new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + if(mAdapter != null) { + int headerViewsCount = mListView.getHeaderViewsCount(); + if (position < headerViewsCount) { + return false; + } + int _position = position - headerViewsCount; + + if (mAdapter == null || mAdapter.getItem(_position) == null) { + return false; + } + Conversation conversation = mAdapter.getItem(_position); + final int itemPosition = position; + String[] menu = buildMenu(conversation); + ECListDialog dialog = new ECListDialog(getActivity() , /*new String[]{getString(R.string.main_delete)}*/menu); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + handleContentMenuClick(itemPosition ,position); + } + }); + String Username = PatientSqlManager.getPatientName(conversation.getSessionId()); + dialog.setTitle(Username); + dialog.show(); + return true; + } + return false; + } + }; + + private String[] buildMenu(Conversation conversation) { + if(conversation != null && conversation.getSessionId() != null) { +// if(conversation.getSessionId().toLowerCase().startsWith("g")) { +// ECGroup ecGroup = GroupSqlManager.getECGroup(conversation.getSessionId()); +// if(ecGroup == null || !GroupSqlManager.getJoinState(ecGroup.getGroupId())) { +// return new String[]{getString(R.string.main_delete)}; +// } +// if(ecGroup.isNotice()) { +// return new String[]{getString(R.string.main_delete) ,getString(R.string.menu_mute_notify)}; +// } +// return new String[]{getString(R.string.main_delete) ,getString(R.string.menu_notify)}; +// } + } + return new String[]{getString(R.string.main_delete)}; + } + + @Override + protected void onTabFragmentClick() { + + } + + @Override + protected void onReleaseTabUI() { + + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + initView(); +// registerReceiver(new String[]{GroupService.ACTION_SYNC_GROUP, IMessageSqlManager.ACTION_SESSION_DEL}); + } + + @Override + public void onResume() { + super.onResume(); + updateConnectState(); + IMessageSqlManager.registerMsgObserver(mAdapter); + mAdapter.notifyChange(); + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mAttachListener = (OnUpdateMsgUnreadCountsListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + " must implement OnUpdateMsgUnreadCountsListener"); + } + } + + @Override + public void onPause() { + super.onPause(); + IMessageSqlManager.unregisterMsgObserver(mAdapter); + } + + /** + * + */ + private void initView() { + if(mListView != null) { + mListView.setAdapter(null); + + if(mBannerView != null) { + mListView.removeHeaderView(mBannerView); + } + } + + mListView = (ListView) findViewById(R.id.main_chatting_lv); + View mEmptyView = findViewById(R.id.empty_conversation_tv); + mListView.setEmptyView(mEmptyView); + mListView.setDrawingCacheEnabled(false); + mListView.setScrollingCacheEnabled(false); + + mListView.setOnItemLongClickListener(mOnLongClickListener); + mListView.setOnItemClickListener(mItemClickListener); + mBannerView = new NetWarnBannerView(getActivity()); + mBannerView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + reTryConnect(); + } + }); + mListView.addHeaderView(mBannerView); + mAdapter = new ConversationAdapter(getActivity() , this); + mListView.setAdapter(mAdapter); + registerForContextMenu(mListView); + + bt_mylan = (Button) findViewById(R.id.bt_mylan); + bt_yingxiongbang = (ImageView) findViewById(R.id.bt_yingxiongbang); + + if (Constant.from==1){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_yingxiongbang + ); + bt_yingxiongbang.setVisibility(View.VISIBLE); + }else if (Constant.from==2){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_yingxiongbang + ); + bt_yingxiongbang.setVisibility(View.VISIBLE); + } +// if ( Constant.HERO2019==1){ +// bt_yingxiongbang.setVisibility(View.VISIBLE); +// }else { +// bt_yingxiongbang.setVisibility(View.GONE); +// } + if (Constant.isMaiLanExpert==1){ + bt_mylan.setVisibility(View.VISIBLE); + } + bt_mylan.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), MylanFollowActivity.class); +// Intent intent = new Intent(getActivity(), MylanFollow_upProjectActivity.class); + startActivity(intent); + } + }); + bt_yingxiongbang.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (Constant.from==2){ + getUrl_path(); + }else { + Intent intent =new Intent(getActivity(), NewsDetailActivity.class); + intent.putExtra("url", Constant.url_path); + intent.putExtra("title", Constant.zengshuName); + startActivity(intent); + } + +// Intent intent = new Intent(getActivity(), HeroListActivity.class); +// startActivity(intent); + } + }); + } + private final ReentrantLock lock = new ReentrantLock(); + private void getUrl_path() { + final Map param = new HashMap<>(); + LogUtil.i("url_path = "+ Url.url_path+ Constant.url_path); + param.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName() ); +// LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(getActivity(), "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(Url.url_path+ Constant.url_path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = URL_PATH; + message.obj = new String(result); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("数据异常,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + + } + private void reTryConnect() { +// ECDevice.ECConnectState connectState = SDKCoreHelper.getConnectState(); +// if(connectState == null || connectState == ECDevice.ECConnectState.CONNECT_FAILED) { +// SDKCoreHelper.init(getActivity()); +// } +// LogUtil.d(TAG, "reTryConnectState connect :" + connectState.name()); + updateConnectState(); + } + + public void notifyChange(){ + mAdapter.notifyChange(); + } + + //3.4.8修改 + public void updateConnectState() { + if(!isAdded()) { + return; + } +// ECDevice.ECConnectState connect = SDKCoreHelper.getConnectState(); +// if(connect == ECDevice.ECConnectState.CONNECTING) { +// mBannerView.setNetWarnText(getString(R.string.connecting_server)); +//// mBannerView.reconnect(true); +// mBannerView.hideWarnBannerView(); +// } else if (connect == ECDevice.ECConnectState.CONNECT_FAILED) { +//// ToastUtil.showMessage("自动重连"); +// mBannerView.setNetWarnText(getString(R.string.connect_server_error)); +// ClientUser clientUser = new ClientUser(SharePrefUtil.getString(getActivity(), Constant.USERID, "")); +// clientUser.setAppKey(Constant.AppKey); +// clientUser.setAppToken(Constant.AppToken); +// clientUser.setUserName(SharePrefUtil.getString(getActivity(), Constant.realName, "")); +// LogUtil.i("重连 realName = "+ SharePrefUtil.getString(getActivity(), Constant.realName, "")); +// clientUser.setLoginAuthType(ECInitParams.LoginAuthType.NORMAL_AUTH); +// // clientUser.setPassword(pass); +// CCPAppManager.setClientUser(clientUser); +// SDKCoreHelper.init(getActivity(), ECInitParams.LoginMode.FORCE_LOGIN); +// +// ECDevice.ECConnectState connect1 = SDKCoreHelper.getConnectState(); +// if (connect1 == ECDevice.ECConnectState.CONNECT_FAILED){ +// mBannerView.reconnect(false); +// } else if (connect1 == ECDevice.ECConnectState.CONNECT_SUCCESS||connect1 == ECDevice.ECConnectState.CONNECTING) { +// mBannerView.hideWarnBannerView(); +// } +// LogUtil.d(TAG, "updateConnectState connect1 :" + connect1.name()); +// } else if (connect == ECDevice.ECConnectState.CONNECT_SUCCESS) { +// mBannerView.hideWarnBannerView(); +// } +// LogUtil.d(TAG, "updateConnectState connect :" + connect.name()); + } + /* public void updateConnectState() { + if(!isAdded()) { + return; + } + ECDevice.ECConnectState connect = SDKCoreHelper.getConnectState(); + if(connect == ECDevice.ECConnectState.CONNECTING) { + mBannerView.setNetWarnText(getString(R.string.connecting_server)); + mBannerView.reconnect(true); +// mBannerView.hideWarnBannerView(); + } else if (connect == ECDevice.ECConnectState.CONNECT_FAILED) { + mBannerView.setNetWarnText(getString(R.string.connect_server_error)); + mBannerView.reconnect(false); + } else if (connect == ECDevice.ECConnectState.CONNECT_SUCCESS) { + mBannerView.hideWarnBannerView(); + } + LogUtil.d(TAG, "updateConnectState connect :" + connect.name()); + }*/ + + private Boolean handleContentMenuClick(int convresion ,int position) { + if(mAdapter != null) { + int headerViewsCount = mListView.getHeaderViewsCount(); + if (convresion < headerViewsCount) { + return false; + } + int _position = convresion - headerViewsCount; + + if (mAdapter == null || mAdapter.getItem(_position) == null) { + return false; + } + final Conversation conversation = mAdapter.getItem(_position); + switch (position) { + case 0: + showProcessDialog(); +// ECHandlerHelper handlerHelper = new ECHandlerHelper(); +// handlerHelper.postRunnOnThead(new Runnable() { +// @Override +// public void run() { +// IMessageSqlManager.deleteChattingMessage(conversation.getSessionId()); +// ToastUtil.showMessage(R.string.clear_msg_success); +// ConversationListFragment.this.getActivity().runOnUiThread(new Runnable() { +// @Override +// public void run() { +// dismissPostingDialog(); +// mAdapter.notifyChange(); +// } +// }); +// } +// }); + break; + case 1: + showProcessDialog(); + final boolean notify = GroupSqlManager.isGroupNotify(conversation.getSessionId()); +// ECGroupOption option = new ECGroupOption(); +// option.setGroupId(conversation.getSessionId()); +// option.setRule(notify ? ECGroupOption.Rule.SILENCE :ECGroupOption.Rule.NORMAL); +// GroupService.setGroupMessageOption(option, new GroupService.GroupOptionCallback() { +// @Override +// public void onComplete(String groupId) { +// if(mAdapter != null) { +// mAdapter.notifyChange(); +// } +// ToastUtil.showMessage(notify? R.string.new_msg_mute_notify : R.string.new_msg_notify); +// dismissPostingDialog(); +// } +// +// @Override +// public void onError(ECError error) { +// dismissPostingDialog(); +// ToastUtil.showMessage("设置失败"); +// } +// }); + break; + default: + break; + } + } + return null; + } + + @Override + protected int getLayoutId() { + return R.layout.conversation; + } + + @Override + public void OnListAdapterCallBack() { + if(mAttachListener != null) { + mAttachListener.OnUpdateMsgUnreadCounts(); + } + } + + public interface OnUpdateMsgUnreadCountsListener { + void OnUpdateMsgUnreadCounts(); + } + + @Override + protected void handleReceiver(Context context, Intent intent) { + super.handleReceiver(context, intent); +// if(GroupService.ACTION_SYNC_GROUP.equals(intent.getAction()) +// || IMessageSqlManager.ACTION_SESSION_DEL.equals(intent.getAction())) { +// if(mAdapter != null) { +// mAdapter.notifyChange(); +// } +// } + } + + void showProcessDialog() { + mPostingdialog = new ECProgressDialog(ConversationListFragment.this.getActivity(), R.string.login_posting_submit); + mPostingdialog.show(); + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if(mPostingdialog == null || !mPostingdialog.isShowing()) { + return ; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/DiscussionListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/DiscussionListFragment.java new file mode 100644 index 0000000..6ee8c81 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/DiscussionListFragment.java @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui; + + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.ListView; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; + + +/** + * 讨论组列表界面 + * + * @author 容联•云通讯 + * @date 2014-12-4 + * @version 4.0 + */ +public class DiscussionListFragment extends TabFragment + { + + /** 讨论组列表 */ + private ListView mListView; + /** 讨论组列表信息适配器 */ +// private GroupAdapter mGroupAdapter; + private boolean sync = false; + + boolean isDiscussion = false; + /** + * 讨论组列表点击事件 + */ +// private final AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { +// +// @Override +// public void onItemClick(AdapterView parent, View view, int position, +// long id) { +// if (mGroupAdapter != null) { +// DemoGroup dGroup = mGroupAdapter.getItem(position); +// if (dGroup.isJoin()) { +//// startChattingAction(Context context , String contactid , String username, String type, String patientUuid, int state) +//// CCPAppManager.startChattingAction(getActivity(), +//// dGroup.getGroupId(), dGroup.getName(), null, null, 0); +// return; +// } +// Intent intent = new Intent(getActivity(), +// ApplyWithGroupPermissionActivity.class); +//// intent.putExtra(GroupInfoActivity.GROUP_ID, dGroup.getGroupId()); +// startActivity(intent); +// } +// } +// +// }; + + private boolean isRefresh=false; + + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if (mListView != null) { + mListView.setAdapter(null); + } + mListView = (ListView) getActivity().findViewById(R.id.group_list_dis); + TextView emptyView = (TextView) getActivity().findViewById(R.id.empty_tip_tv_dis); + emptyView.setText(R.string.main_empty_dis); + + + mListView.setEmptyView(emptyView); +// mListView.setOnItemClickListener(onItemClickListener); +// mGroupAdapter = new GroupAdapter(getActivity()); +// mListView.setAdapter(mGroupAdapter); + + getActivity().findViewById(R.id.loading_tips_area).setVisibility(View.GONE); + + + } + + public void onDisGroupFragmentVisible(boolean visible) { + + if(visible&&isVisible()&&!isRefresh){ +// onSyncGroup(); + } + } + + + + @Override + public void onResume() { + super.onResume(); +// GroupSqlManager.registerGroupObserver(mGroupAdapter); +// mGroupAdapter.notifyChange(); + + registerReceiver(new String[] { + getActivity().getPackageName() + ".inited", + IMessageSqlManager.ACTION_GROUP_DEL }); + + if (!sync) { +// GroupService.syncDiscussionGroup(this); + sync = true; + } + } + + @Override + public void onPause() { + super.onPause(); +// GroupSqlManager.unregisterGroupObserver(mGroupAdapter); + + + + + } + + @Override + protected void handleReceiver(Context context, Intent intent) { + if (intent.getAction().equals( + new String[] { getActivity().getPackageName() + ".inited" })) { +// GroupService.syncGroup(this); + } else if (IMessageSqlManager.ACTION_GROUP_DEL.equals(intent + .getAction())) { +// onSyncGroup(); + } + } + + + +// public class GroupAdapter extends CCPListAdapter { +// int padding; +// +// /** +// * @param ctx +// */ +// public GroupAdapter(Context ctx) { +// super(ctx, new DemoGroup()); +// padding = ctx.getResources().getDimensionPixelSize( +// R.dimen.OneDPPadding); +// } +// +// @Override +// public View getView(int position, View convertView, ViewGroup parent) { +// View view = null; +// ViewHolder mViewHolder = null; +// if (convertView == null || convertView.getTag() == null) { +// view = View.inflate(mContext, R.layout.group_item, null); +// +// mViewHolder = new ViewHolder(); +// mViewHolder.groupitem_avatar_iv = (ImageView) view +// .findViewById(R.id.groupitem_avatar_iv); +// mViewHolder.group_name = (EmojiconTextView) view +// .findViewById(R.id.group_name); +// mViewHolder.group_id = (TextView) view +// .findViewById(R.id.group_id); +// mViewHolder.join_state = (TextView) view +// .findViewById(R.id.join_state); +// view.setTag(mViewHolder); +// } else { +// view = convertView; +// mViewHolder = (ViewHolder) view.getTag(); +// } +// +// DemoGroup group = getItem(position); +// if (group != null) { +// Bitmap bitmap = ContactLogic.getChatroomPhoto(""); +// if (bitmap != null) { +// mViewHolder.groupitem_avatar_iv.setImageBitmap(bitmap); +// mViewHolder.groupitem_avatar_iv.setPadding(padding, +// padding, padding, padding); +// +// } else { +// mViewHolder.groupitem_avatar_iv +// .setImageResource(R.drawable.group_head); +// mViewHolder.groupitem_avatar_iv.setPadding(0, 0, 0, 0); +// } +//// mViewHolder.group_name.setText(TextUtils.isEmpty(group +//// .getName()) ? group.getGroupId() : group.getName()); +//// mViewHolder.group_id.setText(getString( +//// R.string.str_dis_id_fmt, +//// DemoUtils.getGroupShortId(group.getGroupId()))); +// mViewHolder.join_state.setText(group.isJoin() ? "已加入" : ""); +// mViewHolder.join_state +// .setVisibility(group.isJoin() ? View.VISIBLE +// : View.GONE); +// } +// +// return view; +// } +// +// @Override +// protected void notifyChange() { +// Cursor cursor = GroupSqlManager.getGroupCursor(false); +// setCursor(cursor); +// super.notifyDataSetChanged(); +// } +// +// @Override +// protected void initCursor() { +// notifyChange(); +// } +// +// @Override +// protected DemoGroup getItem(DemoGroup t, Cursor cursor) { +// DemoGroup group = new DemoGroup(); +// group.setCursor(cursor); +// return group; +// } +// +// class ViewHolder { +// ImageView groupitem_avatar_iv; +// EmojiconTextView group_name; +// TextView group_id; +// TextView join_state; +// } +// +// } + +// @Override +// public void onSyncGroup() { +// mGroupAdapter.notifyChange(); +// isRefresh=true; +// } +// +// @Override +// public void onSyncGroupInfo(String groupId) { +// +// } +// +// @Override +// public void onGroupDel(String groupId) { +// onSyncGroup(); +// } + +// @Override +// public void onError(ECError error) { +// } + + + +// @Override +// public void onUpdateGroupAnonymitySuccess(String groupId, +// boolean isAnonymity) { +// +// } + + + + @Override + protected void onTabFragmentClick() { + // TODO Auto-generated method stub + + } + + + + @Override + protected void onReleaseTabUI() { + // TODO Auto-generated method stub + + } + + + + @Override + protected int getLayoutId() { + // TODO Auto-generated method stub + return R.layout.groups_activity_discussion; + } + + + + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECFragmentActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECFragmentActivity.java new file mode 100644 index 0000000..e5744f5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECFragmentActivity.java @@ -0,0 +1,288 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.annotation.TargetApi; +import android.content.ComponentName; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; +import android.os.Bundle; +import androidx.fragment.app.FragmentActivity; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.AnimatorUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.MethodInvoke; +import cn.shangyu.gdxzExpert.ecdemo.common.SDKVersionUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.SwipeActivityManager; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.SupportSwipeModeUtils; +import cn.shangyu.gdxzExpert.ecdemo.view.SwipeBackLayout; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * com.yuntongxun.ecdemo.ui in ECDemo_Android + * Created by Jorstin on 2015/6/19. + */ +public class ECFragmentActivity extends FragmentActivity + implements SwipeActivityManager.SwipeListener , SwipeBackLayout.OnSwipeGestureDelegate{ + + private static final String TAG = "gdxzExpert.ECFragmentActivity"; + + public SwipeBackLayout mSwipeBackLayout; + public boolean mOnDragging; + private WindowAnimation mAnimation = new WindowAnimation(); + private void onStartActivityAction(Intent intent) { + if(intent == null) { + super.overridePendingTransition(R.anim.slide_right_in, R.anim.slide_left_out); + return ; + } + String className = null; + ComponentName component = intent.getComponent(); + if(component != null) { + className = component.getClassName(); + if (!(className.startsWith(component.getPackageName()))) { + className = component.getPackageName() + component.getClassName(); + } + } else { + return ; + } + if((0x2 & MethodInvoke.getTransitionValue(className)) != 0) { + super.overridePendingTransition(mAnimation.openEnter, mAnimation.openExit); + return ; + } + + if((0x4 & MethodInvoke.getTransitionValue(className)) != 0) { + MethodInvoke.startTransitionNotChange(this); + return ; + } + MethodInvoke.startTransitionPopin(this); + } + + public boolean onActivityCreate() { + if(isSupperSwipe()) { + ViewGroup viewGroup = (ViewGroup)getWindow().getDecorView(); + mSwipeBackLayout = (SwipeBackLayout) LayoutInflater.from(this).inflate( + R.layout.swipeback_layout, viewGroup , false); + mSwipeBackLayout.init(); + getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + getWindow().getDecorView().setBackgroundDrawable(null); + ViewGroup childAtView = (ViewGroup)viewGroup.getChildAt(0); + childAtView.setBackgroundResource(R.drawable.transparent); + viewGroup.removeView(childAtView); + mSwipeBackLayout.addView(childAtView); + mSwipeBackLayout.setContentView(childAtView); + viewGroup.addView(this.mSwipeBackLayout); + mSwipeBackLayout.setSwipeGestureDelegate(this); + return true; + } + + return false; + } + + @Override + protected void onPause() { + super.onPause(); + if(mSwipeBackLayout != null) { + mSwipeBackLayout.setEnableGesture(false); + } + if(!isFinishing()) { + SwipeActivityManager.pushCallback(this); + } + } + + @Override + protected void onResume() { + super.onResume(); + SwipeActivityManager.popCallback(this); + if(mSwipeBackLayout != null) { + mSwipeBackLayout.setEnableGesture(true); + mSwipeBackLayout.mScrolling = false; + } + } + + private boolean isSupperSwipe() { + if(/*SDKVersionUtils.isSmallerVersion(19) &&*/ SupportSwipeModeUtils.isEnable()) { + if(isEnableSwipe()) { + return true; + } + } + return false; + } + + + protected boolean isEnableSwipe() { + return true; + } + + @Override + public void onScrollParent(float scrollPercent) { + LogUtil.v(TAG , "on swipe " + scrollPercent + " ,duration " + Long.valueOf(240L)); + View decorView = getWindow().getDecorView(); + if ((decorView instanceof ViewGroup) && (((ViewGroup)decorView).getChildCount() > 0)) { + decorView = ((ViewGroup)decorView).getChildAt(0); + } + if(Float.compare(1.0F, scrollPercent) <= 0) { + AnimatorUtils.startViewAnimation(decorView , 0.0F); + return ; + } + AnimatorUtils.startViewAnimation(decorView , -1.0F * decorView.getWidth() / 4 * (1.0F - scrollPercent)); + } + + @Override + public void notifySettle(boolean open, int speed) { + LogUtil.v(TAG, "on settle " + open + ", speed " + speed); + View decorView = getWindow().getDecorView(); + if ((decorView instanceof ViewGroup) && (((ViewGroup)decorView).getChildCount() > 0)) { + decorView = ((ViewGroup)decorView).getChildAt(0); + } + long duration = 120L; + if(speed <= 0) { + duration = 240L; + } + if(open) { + AnimatorUtils.updateViewAnimation(decorView , duration , 0.0F, null); + return; + } + AnimatorUtils.updateViewAnimation(decorView, duration, -1 * decorView.getWidth() / 4, null); + } + + @Override + public boolean isEnableGesture() { + return false; + } + + @Override + public void onSwipeBack() { + if (!(isFinishing())) { + finish(); + } + mOnDragging = false; + } + + @Override + public void onDragging() { + mOnDragging = true; + } + + @Override + public void onCancel() { + mOnDragging = false; + } + + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if(isSupperSwipe() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && mSwipeBackLayout.isSwipeBacking() ) { + LogUtil.d(TAG , "IS SwipeBack ING, ignore KeyBack Event"); + return true; + } + return super.dispatchKeyEvent(event); + } + + @Override + public void finish() { + super.finish(); + if(isEnableSwipe()) { + SwipeActivityManager.notifySwipe(1.0F); + } + super.overridePendingTransition(mAnimation.closeEnter, mAnimation.closeExit); + if((0x2 & MethodInvoke.getAnnotationValue(super.getClass())) == 0) { + return ; + } + if ((0x4 & MethodInvoke.getAnnotationValue(super.getClass())) != 0) { + MethodInvoke.startTransitionNotChange(this); + return ; + } + MethodInvoke.startTransitionPopout(this); + + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + return ; + } + super.onSaveInstanceState(outState); + } + + @Override + protected void onStart() { + super.onStart(); + } + + @Override + protected void onStop() { + super.onStop(); + } + + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + @Override + public void startActivities(Intent[] intents) { + super.startActivities(intents); + onStartActivityAction(null); + } + + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + @Override + public void startActivities(Intent[] intents, Bundle bundle) { + super.startActivities(intents, bundle); + onStartActivityAction(null); + } + + @Override + public void startActivity(Intent intent) { + super.startActivity(intent); + onStartActivityAction(intent); + } + + @Override + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public void startActivity(Intent intent, Bundle bundle) { + super.startActivity(intent, bundle); + onStartActivityAction(intent); + } + + @Override + public void startActivityForResult(Intent intent, int requestCode) { + super.startActivityForResult(intent, requestCode); + onStartActivityAction(intent); + } + + @Override + @TargetApi(Build.VERSION_CODES.JELLY_BEAN) + public void startActivityForResult(Intent intent, int requestCode, Bundle options) { + super.startActivityForResult(intent, requestCode, options); + onStartActivityAction(intent); + } + + + public static class WindowAnimation { + public static int activityOpenEnterAnimation; + public static int activityOpenExitAnimation; + public static int activityCloseEnterAnimation; + public static int activityCloseExitAnimation; + + public int openEnter = activityOpenEnterAnimation; + public int openExit = activityOpenExitAnimation; + public int closeEnter = activityCloseEnterAnimation; + public int closeExit = activityCloseExitAnimation; + + static { + if(!(SDKVersionUtils.isSmallerVersion(19) && SupportSwipeModeUtils.isEnable())) { + activityOpenEnterAnimation = R.anim.slide_right_in; + activityOpenExitAnimation = R.anim.slide_left_out; + activityCloseEnterAnimation = R.anim.slide_left_in; + activityCloseExitAnimation = R.anim.slide_right_out; + } else { + activityOpenEnterAnimation = R.anim.pop_in; + activityOpenExitAnimation = R.anim.anim_not_change; + activityCloseEnterAnimation = R.anim.anim_not_change; + activityCloseExitAnimation = R.anim.pop_out; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECSuperActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECSuperActivity.java new file mode 100644 index 0000000..f789357 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/ECSuperActivity.java @@ -0,0 +1,498 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.app.Activity; +import android.app.KeyguardManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.Rect; +import android.os.Bundle; +import android.os.PowerManager; +import androidx.fragment.app.FragmentActivity; +import android.text.SpannableString; +import android.view.GestureDetector; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MotionEvent; +import android.view.View; + +import java.util.Set; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.ActivityTaskUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.CrashHandler; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarView; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + + +/** + * Created by Jorstin on 2015/3/17. + */ +@ActivityTransition(0) +public abstract class ECSuperActivity extends ECFragmentActivity implements GestureDetector.OnGestureListener{ + + private static final String TAG = ECSuperActivity.class.getSimpleName(); + /** + * 初始化应用ActionBar + */ + private CCPActivityBase mBaseActivity = new CCPActivityImpl(this); + /** + * 初始化广播接收器 + */ + private InternalReceiver internalReceiver; + private GestureDetector mGestureDetector = null; + private boolean mIsHorizontalScrolling = false; + private int mScrollLimit = 0; + private boolean mIsChildScrolling = false; + private int mMinExitScrollX = 0; + + /**屏幕资源*/ + private KeyguardManager.KeyguardLock mKeyguardLock = null; + private KeyguardManager mKeyguardManager = null; + private PowerManager.WakeLock mWakeLock; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mBaseActivity.init(getBaseContext(), this); + onActivityInit(); + LogUtil.d(TAG, "checktask onCreate:" + super.getClass().getSimpleName() + "#0x" + + super.hashCode() + ", taskid:" + getTaskId() + ", task:" + new ActivityTaskUtils(this)); + abstracrRegist(); + + onActivityCreate(); + } + + + + /** + * 唤醒屏幕资源 + */ + protected void enterIncallMode() { + if (!(mWakeLock.isHeld())) { + // wake up screen + // BUG java.lang.RuntimeException: WakeLock under-locked + mWakeLock.setReferenceCounted(false); + mWakeLock.acquire(); + } + mKeyguardLock = this.mKeyguardManager.newKeyguardLock(""); + mKeyguardLock.disableKeyguard(); + } + + /** + * 初始化资源 + */ + protected void initProwerManager() { + mWakeLock = ((PowerManager) getSystemService(Context.POWER_SERVICE)).newWakeLock( + PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP , "CALL_ACTIVITY#" + super.getClass().getName()); + mKeyguardManager = ((KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE)); + } + + /** + * 释放资源 + */ + protected void releaseWakeLock() { + try { + if (this.mWakeLock.isHeld()) { + if (this.mKeyguardLock != null) { + this.mKeyguardLock.reenableKeyguard(); + this.mKeyguardLock = null; + } + this.mWakeLock.release(); + } + return; + } catch (Exception e) { + LogUtil.e(TAG, e.toString()); + } + } + + /********************************************************/ + + + protected final void registerReceiver(String[] actionArray) { + if (actionArray == null) { + return; + } + IntentFilter intentfilter = new IntentFilter(); + intentfilter.addAction(SDKCoreHelper.ACTION_KICK_OFF); + for (String action : actionArray) { + intentfilter.addAction(action); + } + if (internalReceiver == null) { + internalReceiver = new InternalReceiver(); + } + registerReceiver(internalReceiver, intentfilter); + } + + /*@Override + public boolean dispatchTouchEvent(MotionEvent ev) { + + try{ + if(ev.getAction() == MotionEvent.ACTION_DOWN) { + reset(); + } + if(!isEnableRightSlideGesture()) { + return super.dispatchTouchEvent(ev); + } + Set views = getReturnInvalidAreaView(); + if(views != null && views.size() > 0) { + Iterator iterator = views.iterator(); + while (iterator.hasNext()) { + View view = iterator.next(); + if(view != null) { + Rect invalidArea = getReturnInvalidArea(view); + if(invalidArea != null && invalidArea.contains((int)ev.getX() , (int)ev.getY())) { + reset(); + mIsChildScrolling = true; + return super.dispatchTouchEvent(ev); + } + } + } + } + + if(mGestureDetector == null) { + mGestureDetector = new GestureDetector(this, this); + } + boolean handler = mGestureDetector.onTouchEvent(ev); + if ((ev.getAction() == MotionEvent.ACTION_UP) || (ev.getAction() == MotionEvent.ACTION_CANCEL)) { + reset(); + if (this.mIsChildScrolling == true) { + this.mIsChildScrolling = false; + } + } + if(handler) { + ev.setAction(MotionEvent.ACTION_CANCEL); + } + boolean dispatchTouchEvent = super.dispatchTouchEvent(ev); + return handler | dispatchTouchEvent; + } catch (Exception e) { + e.printStackTrace(); + } + return false; + }*/ + + /** + * The sub Activity implement, set the Ui Layout + * @return + */ + protected abstract int getLayoutId(); + /** + * 子类重载该方法自定义标题布局文件 + * @return + */ + public int getTitleLayout() { + return R.layout.ec_title_view_base; + } + + protected void onActivityInit() { + // CCPAppManager.setContext(this); + } + + /** + * 如果子界面需要拦截处理注册的广播 + * 需要实现该方法 + * @param context + * @param intent + */ + protected void handleReceiver(Context context, Intent intent) { + // 广播处理 + if(intent == null ) { + return ; + } + if(SDKCoreHelper.ACTION_KICK_OFF.equals(intent.getAction())) { + finish(); + } + } + + public void onBaseContentViewAttach(View contentView) { + setContentView(contentView); + } + + public FragmentActivity getActionBarActivityContext() { + return mBaseActivity.getFragmentActivity(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + return super.onCreateOptionsMenu(menu); + } + + @Override + protected void onPause() { + super.onPause(); + mBaseActivity.onPause(); + } + + @Override + protected void onResume() { + // HSCoreService + super.onResume(); + //崩溃处理 + CrashHandler.getInstance().setContext(this); + mBaseActivity.onResume(); + } + + + @Override + protected void onStop() { + super.onStop(); + } + + @Override + protected void onDestroy() { + LogUtil.d(TAG, "checktask onCreate:" + super.getClass().getSimpleName() + "#0x" + + super.hashCode() + ", taskid:" + getTaskId() + ", task:" + new ActivityTaskUtils(this)); + super.onDestroy(); + mBaseActivity.onDestroy(); + try { + unregisterReceiver(internalReceiver); + } catch (Exception e) { + } + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(mBaseActivity.onKeyDown(keyCode, event)) { + return true; + } + return super.onKeyDown(keyCode, event); + } + + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + if(mBaseActivity.onKeyUp(keyCode, event)) { + return true; + } + return super.onKeyUp(keyCode, event); + } + + + public void toggleSoftInput() { + mBaseActivity.toggleSoftInput(); + } + + public void hideSoftKeyboard() { + mBaseActivity.hideSoftKeyboard(); + } + + + /** + * 跳转 + * @param clazz + * @param intent + */ + protected void startCCPActivity(Class clazz , Intent intent) { + intent.setClass(this, clazz); + startActivity(intent); + } + + + // Internal calss. + private class InternalReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if(intent == null || intent.getAction() == null ) { + return ; + } + handleReceiver(context, intent); + } + } + + public Activity getActivitContext() { + if(getParent() != null) { + return getParent(); + } + return null; + } + + public TopBarView getTopBarView() { + return mBaseActivity.getTopBarView(); + } + + /** + * 设置ActionBar标题 + * @param resid + */ + public void setActionBarTitle(int resid) { + mBaseActivity.setActionBarTitle(getString(resid)); + } + + /** + * 设置ActionBar标题 + * @param text + */ + public void setActionBarTitle(CharSequence text) { + mBaseActivity.setActionBarTitle(text); + } + + /** + * 返回ActionBar 标题 + * @return + */ + public final CharSequence getActionBarTitle() { + return mBaseActivity.getActionBarTitle(); + } + + /** + * #getLayoutId() + * @return + */ + public View getActivityLayoutView() { + return mBaseActivity.getActivityLayoutView(); + } + + /** + * + */ + public final void showTitleView() { + mBaseActivity.showTitleView(); + } + + /** + * + */ + public final void hideTitleView() { + mBaseActivity.hideTitleView(); + } + + public boolean isEnableRightSlideGesture() { + return true; + } + + protected Set getReturnInvalidAreaView() { + return null; + } + + private Rect getReturnInvalidArea(View view) { + if (view == null) + return null; + int[] location = new int[2]; + view.getLocationOnScreen(location); + Rect rect = new Rect(); + rect.left = location[0]; + rect.top = location[1]; + rect.right = (rect.left + view.getRight() - view.getLeft()); + rect.bottom = (rect.top + view.getBottom() - view.getTop()); + return rect; + } + + private void reset() { + this.mIsHorizontalScrolling = false; + this.mScrollLimit = 0; + } + + private boolean isCannotHorizontalScroll() { + return (this.mScrollLimit >= 5); + } + + @Override + public boolean onDown(MotionEvent e) { + return false; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + return false; + } + + @Override + public void onShowPress(MotionEvent e) { + + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + return false; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + if (!(isEnableRightSlideGesture())) { + return false; + } + if (isCannotHorizontalScroll()) { + return false; + } + if ((!(this.mIsHorizontalScrolling)) && (Math.abs(2.0F * distanceY) > Math.abs(distanceX))) { + this.mScrollLimit = (1 + this.mScrollLimit); + return false; + } + this.mIsHorizontalScrolling = true; + if(e1 == null || e2 == null) { + return false; + } + float f1 = 0.0F; + if (!(this.mIsChildScrolling)) { + if(e1 != null) { + f1 = e1.getX(); + } + float f2 = 0.0F; + if (e2 != null) { + f2 = e2.getX(); + } + if (f1 - f2 < getMinExitScrollX()) + { + this.mScrollLimit = 5; + close(); + return true; + } + } + return false; + } + + /** + * + * @param mute + */ + public SpannableString setNewMessageMute(boolean mute) { + mBaseActivity.setMute(mute); + return mBaseActivity.buildActionTitle(); + } + + @Override + public void onLongPress(MotionEvent e) { + + } + + public void abstracrRegist() { + registerReceiver(new String[]{SDKCoreHelper.ACTION_KICK_OFF}); + } + + private int getMinExitScrollX() { + if (this.mMinExitScrollX == 0) { + this.mMinExitScrollX = (int) (getResources().getInteger(R.integer.min_exit_scroll_factor) * getWidthPixels() / 100.0F); + this.mMinExitScrollX = (-this.mMinExitScrollX); + } + return this.mMinExitScrollX; + } + + public int getWidthPixels() { + return getResources().getDisplayMetrics().widthPixels; + } + + public void close() { + finish(); + } + private ECProgressDialog mPostingdialog; + public void showCommonProcessDialog(String tips) { + mPostingdialog = new ECProgressDialog(this, R.string.progress_common); + mPostingdialog.show(); + } + + /** + * 关闭对话框 + */ + public void dismissCommonPostingDialog() { + if (mPostingdialog == null || !mPostingdialog.isShowing()) { + return; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/GroupListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/GroupListFragment.java new file mode 100644 index 0000000..c7efaf6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/GroupListFragment.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.group.GroupService; + + +/** + * 群组界面 + * @author 容联•云通讯 + * @date 2014-12-4 + * @version 4.0 + */ +public class GroupListFragment extends TabFragment implements GroupService.Callback{ + + /**群组列表*/ + private ListView mListView; + /**群组列表信息适配器*/ +// private GroupAdapter mGroupAdapter; + public static boolean sync = false; + + boolean isDiscussion=false; + + private boolean isRefresh=false; + /** + * 群组列表点击事件 + */ + private final AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { +// if(mGroupAdapter != null) { +//// DemoGroup dGroup = mGroupAdapter.getItem(position); +//// if(dGroup.isJoin()) { +//// CCPAppManager.startChattingAction(getActivity() , dGroup.getGroupId() , dGroup.getName(), null, null, 0); +//// return ; +//// } +//// Intent intent = new Intent(getActivity() , ApplyWithGroupPermissionActivity.class); +//// intent.putExtra(GroupInfoActivity.GROUP_ID, dGroup.getGroupId()); +//// startActivity(intent); +// } + } + + }; + + @Override + protected void onTabFragmentClick() { + + } + + @Override + protected void onReleaseTabUI() { + + } + + @Override + protected int getLayoutId() { + + return R.layout.groups_activity; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if(mListView != null) { + mListView.setAdapter(null); + } + mListView = (ListView) findViewById(R.id.group_list); + View emptyView = findViewById(R.id.empty_tip_tv); + mListView.setEmptyView(emptyView); + mListView.setOnItemClickListener(onItemClickListener); +// mGroupAdapter = new GroupAdapter(getActivity()); +// mListView.setAdapter(mGroupAdapter); + + findViewById(R.id.loading_tips_area).setVisibility(View.GONE); + + registerReceiver(new String[]{getActivity().getPackageName() + ".inited" , IMessageSqlManager.ACTION_GROUP_DEL}); + } + @Override + public void onResume() { + super.onResume(); +// GroupSqlManager.registerGroupObserver(mGroupAdapter); +// mGroupAdapter.notifyChange(); + + if(!sync) { + GroupService.syncGroup(this); + sync = true; + } + } + + @Override + public void onPause() { + super.onPause(); +// GroupSqlManager.unregisterGroupObserver(mGroupAdapter); + + } + + @Override + protected void handleReceiver(Context context, Intent intent) { + super.handleReceiver(context, intent); + if(intent.getAction().equals(new String[]{getActivity().getPackageName()+".inited"})){ + GroupService.syncGroup(this); + } else if (IMessageSqlManager.ACTION_GROUP_DEL.equals(intent.getAction())) { + onSyncGroup(); + } + } + + public void onGroupFragmentVisible(boolean visible) { + + if(visible&&isVisible()&&!isRefresh){ + onSyncGroup(); + } + } + +// public class GroupAdapter extends CCPListAdapter { +// int padding; +// /** +// * @param ctx +// */ +// public GroupAdapter(Context ctx) { +// super(ctx, new DemoGroup()); +// padding = ctx.getResources().getDimensionPixelSize(R.dimen.OneDPPadding); +// } +// +// @Override +// public View getView(int position, View convertView, ViewGroup parent) { +// View view = null; +// ViewHolder mViewHolder = null; +// if(convertView == null || convertView.getTag() == null) { +// view = View.inflate(mContext , R.layout.group_item, null); +// +// mViewHolder = new ViewHolder(); +// mViewHolder.groupitem_avatar_iv = (ImageView) view.findViewById(R.id.groupitem_avatar_iv); +// mViewHolder.group_name = (EmojiconTextView) view.findViewById(R.id.group_name); +// mViewHolder.group_id = (TextView) view.findViewById(R.id.group_id); +// mViewHolder.join_state = (TextView) view.findViewById(R.id.join_state); +// view.setTag(mViewHolder); +// } else { +// view = convertView; +// mViewHolder = (ViewHolder) view.getTag(); +// } +// +// DemoGroup group = getItem(position); +// if(group != null) { +// Bitmap bitmap = ContactLogic.getChatroomPhoto(group.getGroupId()); +// if(bitmap != null) { +// mViewHolder.groupitem_avatar_iv.setImageBitmap(bitmap); +// mViewHolder.groupitem_avatar_iv.setPadding(padding, padding, padding, padding); +// +// } else { +// mViewHolder.groupitem_avatar_iv.setImageResource(R.drawable.group_head); +// mViewHolder.groupitem_avatar_iv.setPadding(0, 0, 0, 0); +// } +// mViewHolder.group_name.setText(TextUtils.isEmpty(group.getName()) ? group.getGroupId() : group.getName()); +// mViewHolder.group_id.setText(getString(R.string.str_group_id_fmt, DemoUtils.getGroupShortId(group.getGroupId()))); +// mViewHolder.join_state.setText(group.isJoin() ?"已加入" :""); +// mViewHolder.join_state.setVisibility(group.isJoin()? View.VISIBLE:View.GONE); +// } +// +// return view; +// } +// +// @Override +// protected void notifyChange() { +// Cursor cursor = GroupSqlManager.getGroupCursor(true); +// setCursor(cursor); +// super.notifyDataSetChanged(); +// } +// +// @Override +// protected void initCursor() { +// notifyChange(); +// } +// +// @Override +// protected DemoGroup getItem(DemoGroup t, Cursor cursor) { +// DemoGroup group = new DemoGroup(); +// group.setCursor(cursor); +// return group; +// } +// +// +// class ViewHolder { +// ImageView groupitem_avatar_iv; +// EmojiconTextView group_name; +// TextView group_id; +// TextView join_state; +// } +// +// } + + + @Override + public void onSyncGroup() { +// mGroupAdapter.notifyChange(); + isRefresh=true; + } + + @Override + public void onSyncGroupInfo(String groupId) { + + } + + @Override + public void onGroupDel(String groupId) { + onSyncGroup(); + } + +// @Override +// public void onError(ECError error) { +// } + + @Override + public void onUpdateGroupAnonymitySuccess(String groupId, + boolean isAnonymity) { + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/LauncherActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/LauncherActivity.java new file mode 100644 index 0000000..8cca3d7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/LauncherActivity.java @@ -0,0 +1,1024 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.View; +import android.widget.AdapterView; + +import java.io.InvalidClassException; +import java.util.ArrayList; +import java.util.HashMap; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.ViewPager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.CrashHandler; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.CustomerServiceHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.MobileContactActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.MobileContactSelectActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.group.BaseSearch; +import cn.shangyu.gdxzExpert.ecdemo.ui.group.ECDiscussionActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.group.GroupNoticeActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.settings.SettingsActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widge.pickerview.OverflowAdapter.OverflowItem; +import cn.shangyu.gdxzExpert.widge.pickerview.OverflowHelper; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + +/** + * 主界面(消息会话界面、联系人界面、群组界面) + */ +@ActivityTransition(3) +public class LauncherActivity extends ECFragmentActivity implements + View.OnClickListener, + ConversationListFragment.OnUpdateMsgUnreadCountsListener { + + private static final String TAG = "LauncherActivity"; + /** + * 当前ECLauncherUI 实例 + */ + public static LauncherActivity mLauncherUI; + + /** + * 当前ECLauncherUI实例产生个数 + */ + public static int mLauncherInstanceCount = 0; + + /** + * 当前主界面RootView + */ + public View mLauncherView; + + /** + * LauncherUI 主界面导航控制View ,包含三个View Tab按钮 + */ +// private CCPLauncherUITabView mLauncherUITabView; + /** + * 三个TabView所对应的三个页面的适配器 + */ +// private CCPCustomViewPager mCustomViewPager; + + /** + * 沟通、联系人、群组适配器 + */ + public LauncherViewPagerAdapter mLauncherViewPagerAdapter; + + private OverflowHelper mOverflowHelper; + + /** + * 当前显示的TabView Fragment + */ + private int mCurrentItemPosition = -1; + + /** + * 会话界面(沟通) + */ + private static final int TAB_CONVERSATION = 0; + + /** + * 通讯录界面(联系人) + */ + private static final int TAB_ADDRESS = 1; + + /** + * 群组界面 + */ + private static final int TAB_GROUP = 2; + private static final int TAB_DISCUSSION_GROUP = 3; + + /** + * {@link CCPLauncherUITabView} 是否已经被初始化 + */ + private boolean mTabViewInit = false; + + /** + * 缓存三个TabView + */ + private final HashMap mTabViewCache = new HashMap(); + private OverflowItem[] mItems; + + @Override + protected void onCreate(Bundle savedInstanceState) { + int pid = android.os.Process.myPid(); + if (mLauncherUI != null) { + LogUtil.i(LogUtil.getLogUtilsTag(LauncherActivity.class), + "finish last LauncherUI"); + mLauncherUI.finish(); + } + mLauncherUI = this; + mLauncherInstanceCount++; + super.onCreate(savedInstanceState); + initWelcome(); + mOverflowHelper = new OverflowHelper(this); + // 设置页面默认为竖屏 + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); +// ECContentObservers.getInstance().initContentObserver(); + } + + @Override + protected boolean isEnableSwipe() { + return false; + } + + private boolean mInit = false; + + private Runnable initRunnable = new Runnable() { + @Override + public void run() { + mInit = false; + initLauncherUIView(); + } + }; + + private void initWelcome() { + if (!mInit) { + mInit = true; + setContentView(R.layout.welcome); + + // 程序启动开始创建一个splash用来初始化程序基本数据 +// ECHandlerHelper.postDelayedRunnOnUI(initRunnable, 3000); + } + } + + /** + * 初始化主界面UI视图 + */ + private void initLauncherUIView() { + mLauncherView = getLayoutInflater().inflate(R.layout.main_tab, null); + setContentView(mLauncherView); + + mTabViewInit = true; +// mCustomViewPager = (CCPCustomViewPager) findViewById(R.id.pager); +// mCustomViewPager.setOffscreenPageLimit(4); +// +// if (mLauncherUITabView != null) { +// mLauncherUITabView.setOnUITabViewClickListener(null); +// mLauncherUITabView.setVisibility(View.VISIBLE); +// } +// mLauncherUITabView = (CCPLauncherUITabView) findViewById(R.id.laucher_tab_top); +// mCustomViewPager.setSlideEnabled(true); +// mLauncherViewPagerAdapter = new LauncherViewPagerAdapter(this, +// mCustomViewPager); +// mLauncherUITabView +// .setOnUITabViewClickListener(mLauncherViewPagerAdapter); + + findViewById(R.id.btn_plus).setOnClickListener(this); + ctrlViewTab(0); + + Intent intent = getIntent(); + if (intent != null && intent.getIntExtra("launcher_from", -1) == 1) { + // 检测从登陆界面过来,判断是不是第一次安装使用 + checkFirstUse(); + } + + // 如果是登陆过来的 + doInitAction(); + } + + private void settingPersionInfo() { +// if (IMChattingHelper.getInstance().mServicePersonVersion == 0 +// && CCPAppManager.getClientUser().getpVersion() == 0) { +// Intent settingAction = new Intent(this, +// SettingPersionInfoActivity.class); +// settingAction.putExtra("from_regist", true); +// startActivityForResult(settingAction, 0x2a); +// return; +// } + } + + /** + * 检测离线消息 + */ + private void checkOffineMessage() { +// if (SDKCoreHelper.getConnectState() != ECDevice.ECConnectState.CONNECT_SUCCESS) { +// return; +// } +// ECHandlerHelper handlerHelper = new ECHandlerHelper(); +// handlerHelper.postDelayedRunnOnThead(new Runnable() { +// @Override +// public void run() { +// boolean result = IMChattingHelper.isSyncOffline(); +// if (!result) { +// ECHandlerHelper.postRunnOnUI(new Runnable() { +// @Override +// public void run() { +// disPostingLoading(); +// } +// }); +// IMChattingHelper.checkDownFailMsg(); +// } +// } +// }, 1000); + } + + private boolean isFirstUse() { + boolean firstUse = ECPreferences.getSharedPreferences().getBoolean( + ECPreferenceSettings.SETTINGS_FIRST_USE.getId(), + ((Boolean) ECPreferenceSettings.SETTINGS_FIRST_USE + .getDefaultValue()).booleanValue()); + return firstUse; + } + + private void checkFirstUse() { + boolean firstUse = isFirstUse(); + + // Display the welcome message? + if (firstUse) { +// if (IMChattingHelper.isSyncOffline()) { +// mPostingdialog = new ECProgressDialog(this, +// R.string.tab_loading); +// mPostingdialog.setCanceledOnTouchOutside(false); +// mPostingdialog.setCancelable(false); +// mPostingdialog.show(); +// } + // Don't display again this dialog + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_FIRST_USE, Boolean.FALSE, + true); + } catch (Exception e) { + /** NON BLOCK **/ + } + } + } + + /** + * 根据TabFragment Index 查找Fragment + * + * @param tabIndex + * @return + */ + public final BaseFragment getTabView(int tabIndex) { + LogUtil.d(LogUtil.getLogUtilsTag(LauncherActivity.class), + "get tab index " + tabIndex); + if (tabIndex < 0) { + return null; + } + + if (mTabViewCache.containsKey(Integer.valueOf(tabIndex))) { + return (BaseFragment) mTabViewCache.get(Integer.valueOf(tabIndex)); + } + + BaseFragment mFragment = null; + switch (tabIndex) { + case TAB_CONVERSATION: + mFragment = (TabFragment) Fragment.instantiate(this, + ConversationListFragment.class.getName(), null); + break; + case TAB_ADDRESS: + mFragment = (TabFragment) Fragment + .instantiate(this, + MobileContactActivity.MobileContactFragment.class + .getName(), null); + break; + case TAB_GROUP: + + + mFragment = (TabFragment) Fragment.instantiate(this, + GroupListFragment.class.getName(), null); + break; + case TAB_DISCUSSION_GROUP: + + mFragment = (TabFragment) Fragment.instantiate(this, + DiscussionListFragment.class.getName(), null); + break; + + default: + break; + } + + if (mFragment != null) { + mFragment.setActionBarActivity(this); + } + mTabViewCache.put(Integer.valueOf(tabIndex), mFragment); + return mFragment; + } + + /** + * 根据提供的子Fragment index 切换到对应的页面 + * + * @param index + * 子Fragment对应的index + */ + public void ctrlViewTab(int index) { + + LogUtil.d(LogUtil.getLogUtilsTag(LauncherActivity.class), + "change tab to " + index + ", cur tab " + mCurrentItemPosition + + ", has init tab " + mTabViewInit + + ", tab cache size " + mTabViewCache.size()); + if ((!mTabViewInit || index < 0) + || (mLauncherViewPagerAdapter != null && index > mLauncherViewPagerAdapter + .getCount() - 1)) { + return; + } + + if (mCurrentItemPosition == index) { + return; + } + mCurrentItemPosition = index; + +// if (mLauncherUITabView != null) { +// mLauncherUITabView.doChangeTabViewDisplay(mCurrentItemPosition); +// } +// +// if (mCustomViewPager != null) { +// mCustomViewPager.setCurrentItem(mCurrentItemPosition, false); +// } + + } + /** + * 根据底层库是否支持voip加载相应的子菜单 + */ + void initOverflowItems() { + if (mItems == null) { + if (SDKCoreHelper.getInstance().isSupportMedia()) { + mItems = new OverflowItem[7]; + mItems[0] = new OverflowItem( + getString(R.string.main_plus_inter_phone)); + mItems[1] = new OverflowItem( + getString(R.string.main_plus_meeting_voice)); + mItems[2] = new OverflowItem( + getString(R.string.main_plus_meeting_video)); + mItems[3] = new OverflowItem( + getString(R.string.main_plus_groupchat)); + mItems[4] = new OverflowItem( + getString(R.string.main_plus_querygroup)); + + mItems[5] = new OverflowItem( + getString(R.string.create_discussion)); + + + + mItems[6] = new OverflowItem( + getString(R.string.main_plus_settings)); + + } else { + mItems = new OverflowItem[4]; + mItems[0] = new OverflowItem( + getString(R.string.main_plus_groupchat)); + mItems[1] = new OverflowItem( + getString(R.string.main_plus_querygroup)); + + + mItems[2] = new OverflowItem( + getString(R.string.create_discussion)); + + + mItems[3] = new OverflowItem( + getString(R.string.main_plus_settings)); + + + } + } + + } + + @Override + public boolean onMenuOpened(int featureId, Menu menu) { + controlPlusSubMenu(); + return false; + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + LogUtil.d(LogUtil.getLogUtilsTag(LauncherActivity.class), " onKeyDown"); + + if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) + && event.getAction() == KeyEvent.ACTION_UP) { + // dismiss PlusSubMenuHelper + if (mOverflowHelper != null && mOverflowHelper.isOverflowShowing()) { + mOverflowHelper.dismiss(); + return true; + } + } + + // 这里可以进行设置全局性的menu菜单的判断 + if ((event.getKeyCode() == KeyEvent.KEYCODE_BACK) + && event.getAction() == KeyEvent.ACTION_DOWN) { + doTaskToBackEvent(); + } + + try { + + return super.dispatchKeyEvent(event); + } catch (Exception e) { + LogUtil.e(LogUtil.getLogUtilsTag(LauncherActivity.class), + "dispatch key event catch exception " + e.getMessage()); + } + + return false; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (internalReceiver != null) { + unregisterReceiver(internalReceiver); + } + } + + @Override + protected void onResume() { + LogUtil.i(LogUtil.getLogUtilsTag(LauncherActivity.class), + "onResume start"); + super.onResume(); + CrashHandler.getInstance().setContext(this); + + boolean fullExit = ECPreferences.getSharedPreferences().getBoolean( + ECPreferenceSettings.SETTINGS_FULLY_EXIT.getId(), false); + if (fullExit) { +// try { +//// ECHandlerHelper.removeCallbacksRunnOnUI(initRunnable); +//// ECPreferences.savePreference( +//// ECPreferenceSettings.SETTINGS_FULLY_EXIT, false, true); +//// ContactsCache.getInstance().stop(); +//// CCPAppManager.setClientUser(null); +//// ECDevice.unInitial(); +// finish(); +// android.os.Process.killProcess(android.os.Process.myPid()); +// return; +// } catch (InvalidClassException e) { +// e.printStackTrace(); +// } + } +// if (mLauncherUITabView == null) { +// String account = getAutoRegistAccount(); +// if (TextUtils.isEmpty(account)) { +// startActivity(new Intent(this, LoginActivity.class)); +// +// finish(); +// return; +// } +// // 注册第一次登陆同步消息 +// registerReceiver(new String[] { +// IMChattingHelper.INTENT_ACTION_SYNC_MESSAGE, +// SDKCoreHelper.ACTION_SDK_CONNECT }); +// ClientUser user = new ClientUser("").from(account); +// CCPAppManager.setClientUser(user); +// if (!ContactSqlManager.hasContact(user.getUserId())) { +// ECContacts contacts = new ECContacts(); +// contacts.setClientUser(user); +// ContactSqlManager.insertContact(contacts); +// } +// +// if (SDKCoreHelper.getConnectState() != ECDevice.ECConnectState.CONNECT_SUCCESS +// && !SDKCoreHelper.isKickOff()) { +// +// ContactsCache.getInstance().load(); +// +// if(!TextUtils.isEmpty(getAutoRegistAccount())){ +// SDKCoreHelper.init(this); +// } +// } +// // 初始化主界面Tab资源 +// if (!mInit) { +// initLauncherUIView(); +// } +// } + OnUpdateMsgUnreadCounts(); + } + + public void handlerKickOff(String kickoffText) { + if (isFinishing()) { + return; + } + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, kickoffText, + getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { +// ECNotificationManager.getInstance() +// .forceCancelNotification(); + restartAPP(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + + public void restartAPP() { + +// ECDevice.unInitial(); + Intent intent = new Intent(this, LauncherActivity.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + android.os.Process.killProcess(android.os.Process.myPid()); + } + + /** + * 检查是否需要自动登录 + * + * @return + */ + private String getAutoRegistAccount() { + SharedPreferences sharedPreferences = ECPreferences + .getSharedPreferences(); + ECPreferenceSettings registAuto = ECPreferenceSettings.SETTINGS_REGIST_AUTO; + String registAccount = sharedPreferences.getString(registAuto.getId(), + (String) registAuto.getDefaultValue()); + return registAccount; + } + + private void controlPlusSubMenu() { + if (mOverflowHelper == null) { + return; + } + + if (mOverflowHelper.isOverflowShowing()) { + mOverflowHelper.dismiss(); + return; + } + + if(mItems == null) { + initOverflowItems(); + } + + mOverflowHelper.setOverflowItems(mItems); + mOverflowHelper + .setOnOverflowItemClickListener(mOverflowItemCliclListener); + mOverflowHelper.showAsDropDown(findViewById(R.id.btn_plus)); + } + + @Override + protected void onPause() { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "KEVIN Launcher onPause"); + super.onPause(); + } + + /** + * 返回隐藏到后台 + */ + public void doTaskToBackEvent() { + moveTaskToBack(true); + + } + + @Override + public void OnUpdateMsgUnreadCounts() { + int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); + int notifyUnreadCount = IMessageSqlManager.getUnNotifyUnreadCount(); + int count = unreadCount; + if (unreadCount >= notifyUnreadCount) { + count = unreadCount - notifyUnreadCount; + } +// if (mLauncherUITabView != null) { +// mLauncherUITabView.updateMainTabUnread(count); +// } + } + + /** + * TabView 页面适配器 + * + * @author 容联•云通讯 + * @version 4.0 + * @date 2014-12-4 + */ + private class LauncherViewPagerAdapter extends FragmentStatePagerAdapter + implements ViewPager.OnPageChangeListener + { + /** + * + */ + private int mClickTabCounts; + private GroupListFragment mGroupListFragment; + private DiscussionListFragment mDissListFragment; + + private final ViewPager mViewPager; + private final ArrayList mTabs = new ArrayList(); + + final class TabInfo { + private final String tag; + private final Class clss; + private final Bundle args; + + TabInfo(String _tag, Class _class, Bundle _args) { + tag = _tag; + clss = _class; + args = _args; + } + } + + public LauncherViewPagerAdapter(FragmentActivity fm, ViewPager pager) { + super(fm.getSupportFragmentManager()); + mViewPager = pager; + mViewPager.setAdapter(this); + mViewPager.setOnPageChangeListener(this); + } + + public void addTab(String tabSpec, Class clss, Bundle args) { + String tag = tabSpec; + + TabInfo info = new TabInfo(tag, clss, args); + mTabs.add(info); + notifyDataSetChanged(); + } + + @Override + public int getCount() { + return 4; + } + + @Override + public Fragment getItem(int position) { + return mLauncherUI.getTabView(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class), + "onPageScrollStateChanged state = " + state); + + if (state != ViewPager.SCROLL_STATE_IDLE + || mGroupListFragment == null) { + return; + } + if (mGroupListFragment != null) { + mGroupListFragment.onGroupFragmentVisible(true); + mGroupListFragment = null; + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, + int positionOffsetPixels) { + LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class), + "onPageScrolled " + position + " " + positionOffset + " " + + positionOffsetPixels); +// if (mLauncherUITabView != null) { +// mLauncherUITabView.doTranslateImageMatrix(position, +// positionOffset); +// } +// if (positionOffset != 0.0F&&position==CCPLauncherUITabView.TAB_VIEW_THIRD) { +// if (mGroupListFragment == null) { +// mGroupListFragment = (GroupListFragment) getTabView(CCPLauncherUITabView.TAB_VIEW_THIRD); +// mGroupListFragment.onGroupFragmentVisible(true); +// } +// } +// if (positionOffset != 0.0F&&position==CCPLauncherUITabView.TAB_VIEW_FOUR) { +// if (mDissListFragment == null) { +// mDissListFragment = (DiscussionListFragment) getTabView(CCPLauncherUITabView.TAB_VIEW_FOUR); +// mDissListFragment.onDisGroupFragmentVisible(true); +// } +// } + + + } + + @Override + public void onPageSelected(int position) { + LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class), + "onPageSelected"); +// if (mLauncherUITabView != null) { +// mLauncherUITabView.doChangeTabViewDisplay(position); +// mCurrentItemPosition = position; +// } + } + +// @Override +// public void onTabClick(int tabIndex) { +// if (tabIndex == mCurrentItemPosition) { +// LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class), +// "on click same index " + tabIndex); +// // Perform a rolling +// TabFragment item = (TabFragment) getItem(tabIndex); +// item.onTabFragmentClick(); +// return; +// } +// +// mClickTabCounts += mClickTabCounts; +// LogUtil.d(LogUtil.getLogUtilsTag(LauncherViewPagerAdapter.class), +// "onUITabView Click count " + mClickTabCounts); +// mViewPager.setCurrentItem(tabIndex); +// } + + } + + /** + * 网络注册状态改变 + * + * @param connect + */ +// public void onNetWorkNotify(ECDevice.ECConnectState connect) { +// BaseFragment tabView = getTabView(TAB_CONVERSATION); +// if (tabView instanceof ConversationListFragment && tabView.isAdded()) { +// ((ConversationListFragment) tabView).updateConnectState(); +// } +// } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.btn_plus) { + controlPlusSubMenu(); + } + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + + Intent actionIntent = intent; + String userName = actionIntent.getStringExtra("Main_FromUserName"); + String mSession = actionIntent.getStringExtra("Main_Session"); + ECContacts contacts = ContactSqlManager + .getContactLikeUsername(userName); + if (contacts != null) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), + "[onNewIntent] userName = " + userName + " , contact_id " + + contacts.getContactid()); + + if (GroupNoticeSqlManager.CONTACT_ID + .equals(contacts.getContactid())) { + Intent noticeintent = new Intent(this, + GroupNoticeActivity.class); + startActivity(noticeintent); + return; + } + + Intent chatIntent = new Intent(this, ChattingActivity.class); + String recipinets; + String username; +// if (!TextUtils.isEmpty(mSession) && mSession.startsWith("g")) { +// ECGroup ecGroup = GroupSqlManager.getECGroup(mSession); +// if (ecGroup == null) { +// return; +// } +// recipinets = mSession; +// username = ecGroup.getName(); +// } else { + recipinets = contacts.getContactid(); + username = contacts.getNickname(); +// } +// startActivity(chatIntent); + +// CCPAppManager.startChattingAction(this, recipinets, username); + return; + } + } + + private final AdapterView.OnItemClickListener mOverflowItemCliclListener = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + controlPlusSubMenu(); + + OverflowItem overflowItem= mItems[position]; + String title=overflowItem.getTitle(); + + if (getString(R.string.main_plus_inter_phone).equals(title)) { +// // 实时对讲 +// startActivity(new Intent(LauncherActivity.this, +// InterPhoneListActivity.class)); + } else if (getString(R.string.main_plus_meeting_voice).equals(title)) { +// // 语音会议 +// startActivity(new Intent(LauncherActivity.this, +// MeetingListActivity.class)); + } else if (getString(R.string.main_plus_groupchat).equals(title)) { + // 创建群组 +// startActivity(new Intent(LauncherActivity.this, +// CreateGroupActivity.class)); + } else if (getString(R.string.main_plus_querygroup).equals(title)) { + // 群组搜索 + startActivity(new Intent(LauncherActivity.this,BaseSearch.class)); + } else if (getString(R.string.main_plus_mcmessage).equals(title)) { + handleStartServiceEvent(); + + } else if (getString(R.string.main_plus_settings).equals(title)) { + // 设置; + startActivity(new Intent(LauncherActivity.this,SettingsActivity.class)); + + + } else if (getString(R.string.main_plus_meeting_video).equals(title)) { +// startActivity(new Intent(LauncherActivity.this, +// VideoconferenceConversation.class)); + + }else if(getString(R.string.create_discussion).equals(title)){ + + Intent intent=new Intent(LauncherActivity.this, MobileContactSelectActivity.class); + intent.putExtra("is_discussion", true); + intent.putExtra("isFromCreateDiscussion", true); + intent.putExtra("group_select_need_result", true); + + startActivity(intent); + + + } + else if(getString(R.string.query_discussion).equals(title)){ + + Intent intent=new Intent(LauncherActivity.this, ECDiscussionActivity.class); + intent.putExtra("is_discussion", true); + + startActivity(intent); + + } + } + + }; + + /** + * 在线客服 + */ + private void handleStartServiceEvent() { + showProcessDialog(); + CustomerServiceHelper.startService("KF4008818600668603", + new CustomerServiceHelper.OnStartCustomerServiceListener() { +// @Override +// public void onError(ECError error) { +// dismissPostingDialog(); +// } + + @Override + public void onServiceStart(String event) { + dismissPostingDialog(); + CCPAppManager.startCustomerServiceAction( + LauncherActivity.this, event); + } + }); + } + + private InternalReceiver internalReceiver; + + /** + * 注册广播 + * + * @param actionArray + */ + protected final void registerReceiver(String[] actionArray) { + if (actionArray == null) { + return; + } + IntentFilter intentfilter = new IntentFilter(); + for (String action : actionArray) { + intentfilter.addAction(action); + } + if (internalReceiver == null) { + internalReceiver = new InternalReceiver(); + } + registerReceiver(internalReceiver, intentfilter); + } + + private class InternalReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + if (intent == null || TextUtils.isEmpty(intent.getAction())) { + return; + } + LogUtil.d(TAG, "[onReceive] action:" + intent.getAction()); + if (IMChattingHelper.INTENT_ACTION_SYNC_MESSAGE.equals(intent + .getAction())) { + disPostingLoading(); + } else if (SDKCoreHelper.ACTION_SDK_CONNECT.equals(intent + .getAction())) { + doInitAction(); + // tetstMesge(); + BaseFragment tabView = getTabView(TAB_CONVERSATION); + if (tabView != null + && tabView instanceof ConversationListFragment) { + ((ConversationListFragment) tabView).updateConnectState(); + } + } else if (SDKCoreHelper.ACTION_KICK_OFF.equals(intent.getAction())) { + String kickoffText = intent.getStringExtra("kickoffText"); + handlerKickOff(kickoffText); + } + } + } + + private boolean mInitActionFlag; + + /** + * 处理一些初始化操作 + */ + private void doInitAction() { +// if (SDKCoreHelper.getConnectState() == ECDevice.ECConnectState.CONNECT_SUCCESS +// && !mInitActionFlag) { + + // 检测当前的版本 + SDKCoreHelper.SoftUpdate mSoftUpdate = SDKCoreHelper.mSoftUpdate; + if (mSoftUpdate != null) { + if (DemoUtils.checkUpdater(mSoftUpdate.version)) { + boolean force = mSoftUpdate.force; + showUpdaterTips(mSoftUpdate.desc , force); + if (force) { + return; + } + } + } + + IMChattingHelper.getInstance().getPersonInfo(); + settingPersionInfo(); + // 检测离线消息 + checkOffineMessage(); + mInitActionFlag = true; +// } + } + + private void disPostingLoading() { + if (mPostingdialog != null && mPostingdialog.isShowing()) { + mPostingdialog.dismiss(); + } + } + + ECAlertDialog showUpdaterTipsDialog = null; + + private void showUpdaterTips(String updateDesc ,final boolean force) { + if (showUpdaterTipsDialog != null) { + return; + } + String negativeText = getString(force ? R.string.settings_logout : R.string.update_next); + String msg = getString(R.string.new_update_version); + if(!TextUtils.isEmpty(updateDesc)) { + msg = updateDesc; + } + showUpdaterTipsDialog = ECAlertDialog.buildAlert(this, msg, + negativeText, getString(R.string.app_update), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + showUpdaterTipsDialog = null; + if (force) { + try { + ECPreferences + .savePreference( + ECPreferenceSettings.SETTINGS_FULLY_EXIT, + true, true); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + restartAPP(); + } + } + }, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + CCPAppManager.startUpdater(LauncherActivity.this); + // restartAPP(); + showUpdaterTipsDialog = null; + } + }); + + showUpdaterTipsDialog.setTitle(R.string.app_tip); + showUpdaterTipsDialog.setDismissFalse(); + showUpdaterTipsDialog.setCanceledOnTouchOutside(false); + showUpdaterTipsDialog.setCancelable(false); + showUpdaterTipsDialog.show(); + } + + private ECProgressDialog mPostingdialog; + + void showProcessDialog() { + mPostingdialog = new ECProgressDialog(LauncherActivity.this, + R.string.login_posting_submit); + mPostingdialog.show(); + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if (mPostingdialog == null || !mPostingdialog.isShowing()) { + return; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SDKCoreHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SDKCoreHelper.java new file mode 100644 index 0000000..e43687e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SDKCoreHelper.java @@ -0,0 +1,413 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.Context; +import android.os.Handler; + +import cn.shangyu.gdxzExpert.activity.MyPatientActivity; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ConversationSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupMemberSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ImgInfoSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; + +/** + * Created by Jorstin on 2015/3/17. + */ +public class SDKCoreHelper { + + public static final String TAG = "SDKCoreHelper"; + public static final String ACTION_LOGOUT = "cn.shangyu.gdxzExpert.ECDemo_logout"; + public static final String ACTION_SDK_CONNECT = "cn.shangyu.gdxzExpert.Intent_Action_SDK_CONNECT"; + public static final String ACTION_KICK_OFF = "cn.shangyu.gdxzExpert.Intent_ACTION_KICK_OFF"; + private static SDKCoreHelper sInstance; + private Context mContext; +// private ECDevice.ECConnectState mConnect = ECDevice.ECConnectState.CONNECT_FAILED; +// private ECInitParams mInitParams; +// private ECInitParams.LoginMode mMode = ECInitParams.LoginMode.FORCE_LOGIN; + /** 初始化错误 */ + public static final int ERROR_CODE_INIT = -3; + + public static final int WHAT_SHOW_PROGRESS = 0x101A; + public static final int WHAT_CLOSE_PROGRESS = 0x101B; + private boolean mKickOff = false; +// private ECNotifyOptions mOptions; + public static SoftUpdate mSoftUpdate; + + private Handler handler; + + private SDKCoreHelper() { + initNotifyOptions(); + } + + /* + * private void initOptions() { mOptions = new ECNotifyOptions(); + * mOptions.enable = true; mOptions.mNewMsgShake = + * ECPreferences.getSharedPreferences + * ().getBoolean(ECPreferenceSettings.SETTINGS_NEW_MSG_SHAKE.getId(), true); + * mOptions.mNewMsgSound = + * ECPreferences.getSharedPreferences().getBoolean(ECPreferenceSettings + * .SETTINGS_NEW_MSG_SOUND.getId(), true); mOptions.clazz = + * MainActivity.class; } + */ + + public static SDKCoreHelper getInstance() { + if (sInstance == null) { + sInstance = new SDKCoreHelper(); + } + return sInstance; + } + + public synchronized void setHandler(final Handler handler) { + this.handler = handler; + } + + public static boolean isKickOff() { + return getInstance().mKickOff; + } + + public static void init(Context ctx) { +// init(ctx, ECInitParams.LoginMode.AUTO); + } + +// public static void init(Context ctx, ECInitParams.LoginMode mode) { +// getInstance().mKickOff = false; +// LogUtils.i("[init] start regist.."); +// ctx = BaseApplication.getInstance().getApplicationContext(); +// getInstance().mMode = mode; +// getInstance().mContext = ctx; +// // 判断SDK是否已经初始化,没有初始化则先初始化SDK +// if (!ECDevice.isInitialized()) { +// getInstance().mConnect = ECDevice.ECConnectState.CONNECTING; +// // ECSDK.setNotifyOptions(getInstance().mOptions); +// ECDevice.initial(ctx, getInstance()); +// postConnectNotify(); +// return; +// } +// LogUtils.i( " SDK has inited , then regist.."); +// // 已经初始化成功,直接进行注册 +// getInstance().onInitialized(); +// } + + public static void setSoftUpdate(String version, String desc, boolean mode) { + mSoftUpdate = new SoftUpdate(version, desc, mode); + } + + private void initNotifyOptions() { +// if (mOptions == null) { +// mOptions = new ECNotifyOptions(); +// } +// // 设置新消息是否提醒 +// mOptions.setNewMsgNotify(true); +// // 设置状态栏通知图标 +// mOptions.setIcon(R.drawable.ic_launcher); +// // 设置是否启用勿扰模式(不会声音/震动提醒) +// mOptions.setSilenceEnable(false); +// // 设置勿扰模式时间段(开始小时/开始分钟-结束小时/结束分钟) +// // 小时采用24小时制 +// // 如果设置勿扰模式不启用,则设置勿扰时间段无效 +// // 当前设置晚上11点到第二天早上8点之间不提醒 +// mOptions.setSilenceTime(23, 0, 8, 0); +// // 设置是否震动提醒(如果处于免打扰模式则设置无效,没有震动) +// mOptions.enableShake(true); +// // 设置是否声音提醒(如果处于免打扰模式则设置无效,没有声音) +// mOptions.enableSound(true); + } + +// @Override +// public void onInitialized() { +// LogUtil.d(TAG, "ECSDK is ready"); +// +// // 设置消息提醒 +// ECDevice.setNotifyOptions(mOptions); +// // 设置接收VoIP来电事件通知Intent +// // 呼入界面activity、开发者需修改该类 +// // Intent intent = new Intent(getInstance().mContext, +// // VoIPCallActivity.class); +// // PendingIntent pendingIntent = PendingIntent.getActivity( +// // getInstance().mContext, 0, intent, +// // PendingIntent.FLAG_UPDATE_CURRENT); +// // ECDevice.setPendingIntent(pendingIntent); +// +// // 设置SDK注册结果回调通知,当第一次初始化注册成功或者失败会通过该引用回调 +// // 通知应用SDK注册状态 +// // 当网络断开导致SDK断开连接或者重连成功也会通过该设置回调 +// ECDevice.setOnChatReceiveListener(IMChattingHelper.getInstance()); +// ECDevice.setOnDeviceConnectListener(this); +// +// // if(ECDevice.getECMeetingManager() != null) { +// // ECDevice.getECMeetingManager().setOnMeetingListener(MeetingMsgReceiver.getInstance()); +// // } +// +// ClientUser clientUser = CCPAppManager.getClientUser(); +// if (mInitParams == null || mInitParams.getInitParams() == null +// || mInitParams.getInitParams().isEmpty()) { +// mInitParams = ECInitParams.createParams(); +// } +// mInitParams.reset(); +// // 如:VoIP账号/手机号码/.. +// mInitParams.setUserid(clientUser.getUserId()); +// // appkey +// mInitParams.setAppKey(Constant.AppKey); +// // mInitParams.setAppKey(/*clientUser.getAppKey()*/"ff8080813d823ee6013d856001000029"); +// // appToken +// mInitParams.setToken(Constant.AppToken); +// // mInitParams.setToken(/*clientUser.getAppToken()*/"d459711cd14b443487c03b8cc072966e"); +// // ECInitParams.LoginMode.FORCE_LOGIN +// mInitParams.setMode(getInstance().mMode); +// +// // 如果有密码(VoIP密码,对应的登陆验证模式是) +// // ECInitParams.LoginAuthType.PASSWORD_AUTH +// if (!TextUtils.isEmpty(clientUser.getPassword())) { +// mInitParams.setPwd(clientUser.getPassword()); +// } +// +// // 设置登陆验证模式(是否验证密码/如VoIP方式登陆) +// if (clientUser.getLoginAuthType() != null) { +// mInitParams.setAuthType(clientUser.getLoginAuthType()); +// } +// LogUtil.i("账号:"+clientUser.getUserName()); +// LogUtil.i("密码:"+clientUser.getPassword()); +// LogUtil.i("appToken:"+clientUser.getAppToken()); +// LogUtil.i("appKey:"+clientUser.getAppKey()); +// if (!mInitParams.validate()) { +//// LogToFileUtils.write(R.string.regist_params_error);//写入日志 +//// LogToFileUtils.write("账号:"+clientUser.getUserName());//写入日志 +//// LogToFileUtils.write("密码:"+clientUser.getPassword());//写入日志 +//// LogToFileUtils.write("appToken:"+clientUser.getAppToken());//写入日志 +//// LogToFileUtils.write("appKey:"+clientUser.getAppKey());//写入日志 +//// ToastUtil.showMessage(R.string.regist_params_error); +// Intent failIntent = new Intent(ACTION_SDK_CONNECT); +// failIntent.putExtra("error", -1); +// mContext.sendBroadcast(failIntent); +// return; +// } +// +// ECDevice.login(mInitParams); +// +// } + +// @Override +// public void onConnect() { +// // Deprecated +// } + +// @Override +// public void onDisconnect(ECError error) { +// // SDK与云通讯平台断开连接 +// // Deprecated +//// LogUtil.d(TAG, error.errorMsg); +// } + +// @Override +// public void onConnectState(ECDevice.ECConnectState state, ECError error) { +// if (state == ECDevice.ECConnectState.CONNECT_FAILED&& error.errorCode == SdkErrorCode.SDK_KICKED_OFF) { +// try { +// ECPreferences.savePreference( +// ECPreferenceSettings.SETTINGS_REGIST_AUTO, "", true); +// } catch (InvalidClassException e) { +// e.printStackTrace(); +// } +// mKickOff = true; +// // 失败,账号异地登陆 +// Intent intent = new Intent(ACTION_KICK_OFF); +// intent.putExtra("kickoffText", error.errorMsg); +// mContext.sendBroadcast(intent); +// if (MainActivity.mMainActivity != null) { +// MainActivity.mMainActivity.handlerKickOff(error.errorMsg); +// ECNotificationManager.getInstance().showKickoffNotification( +// mContext, error.errorMsg); +// } +// } +// getInstance().mConnect = state; +// Intent intent = new Intent(ACTION_SDK_CONNECT); +// intent.putExtra("error", error.errorCode); +// mContext.sendBroadcast(intent); +// postConnectNotify(); +// //登陆 +//// if(state == ECDevice.ECConnectState.CONNECT_SUCCESS) { +////// ToastUtil.showMessage("登陆成功"); +//// +//// +//// } +//// if(state == ECDevice.ECConnectState.CONNECT_FAILED ){ +//// if(error.errorCode == SdkErrorCode.SDK_KICKED_OFF) { +//// Log.i("","==帐号异地登陆"); +//// } +//// else +//// { +//// Log.i("","==其他登录失败,错误码:"+ error.errorCode); +//// } +//// return ; +//// } +// +// } + + /** + * 当前SDK注册状态 + * + * @return + */ +// public static ECDevice.ECConnectState getConnectState() { +// return getInstance().mConnect; +// } + +// @Override +// public void onLogout() { +// getInstance().mConnect = ECDevice.ECConnectState.CONNECT_FAILED; +// if (mInitParams != null && mInitParams.getInitParams() != null) { +// mInitParams.getInitParams().clear(); +// } +// mInitParams = null; +// if (mContext==null){ +// mContext = UIUtils.getContext(); +// } +// mContext.sendBroadcast(new Intent(ACTION_LOGOUT)); +// } + +// @Override +// public void onError(Exception exception) { +// //在初始化错误的方法中打印错误原因 +// LogUtil.e(TAG,"ECSDK couldn't start: " + exception.getLocalizedMessage()); +// Intent intent = new Intent(ACTION_SDK_CONNECT); +// intent.putExtra("error", ERROR_CODE_INIT); +// mContext.sendBroadcast(intent); +// ECDevice.unInitial(); +// } + + /** + * 状态通知 + */ + private static void postConnectNotify() { + if (getInstance().mContext instanceof MyPatientActivity) { +// ((MyPatientActivity) getInstance().mContext) +// .onNetWorkNotify(getConnectState()); + } + } + + public static void logout(boolean isNotice) { +// ECDevice.NotifyMode notifyMode = (isNotice) ? ECDevice.NotifyMode.IN_NOTIFY +// : ECDevice.NotifyMode.NOT_NOTIFY; +// ECDevice.logout(notifyMode, getInstance()); + release(); + } + + public static void release() { + getInstance().mKickOff = false; + IMChattingHelper.getInstance().destroy(); + ContactSqlManager.reset(); + PatientSqlManager.reset(); + ConversationSqlManager.reset(); + GroupMemberSqlManager.reset(); + GroupNoticeSqlManager.reset(); + GroupSqlManager.reset(); + IMessageSqlManager.reset(); + ImgInfoSqlManager.reset(); + } + + /** + * IM聊天功能接口 + * + * @return + */ +// public static ECChatManager getECChatManager() { +// ECChatManager ecChatManager = ECDevice.getECChatManager(); +// LogUtil.d(TAG, "ecChatManager :" + ecChatManager); +// return ecChatManager; +// } + + /** + * 群组聊天接口 + * + * @return + */ +// public static ECGroupManager getECGroupManager() { +// return ECDevice.getECGroupManager(); +// } +// +// public static ECDeskManager getECDeskManager() { +// return ECDevice.getECDeskManager(); +// } + + /** + * VoIP呼叫接口 + * + * @return + */ + // public static ECVoIPCallManager getVoIPCallManager() { + // return ECDevice.getECVoIPCallManager(); + // } + // + // public static ECVoIPSetupManager getVoIPSetManager() { + // return ECDevice.getECVoIPSetupManager(); + // } + + public static class SoftUpdate { + public String version; + public String desc; + public boolean force; + + public SoftUpdate(String version, String desc, boolean force) { + this.version = version; + this.force = force; + this.desc = desc; + } + } + + /** + * + * @return返回底层so库 是否支持voip及会议功能 true 表示支持 false表示不支持 请在sdk初始化完成之后调用 + */ + public boolean isSupportMedia() { + +// return ECDevice.isSupportMedia(); + return false; + } + + public static boolean hasFullSize(String inStr) { + if (inStr.getBytes().length != inStr.length()) { + return true; + } + return false; + } + + /* + * public void onReceiveVideoMeetingMsg(ECVideoMeetingMsg msg) { + * + * LogUtil .e(TAG, + * "[onReceivevideomsg ] Receive video phone message , id :" + + * msg.getMeetingNo() + ",type=" + msg.getMsgType()); Bundle b = new + * Bundle(); b.putParcelable("VideoConferenceMsg", msg); + * + * // sendTarget(VideoconferenceBaseActivity.KEY_VIDEO_RECEIVE_MESSAGE, b); + * + * } long t = 0; + * + * public void sendTarget(int what, Object obj) { t = + * System.currentTimeMillis(); while (handler == null && + * (System.currentTimeMillis() - t < 3500)) { + * + * try { Thread.sleep(80L); } catch (InterruptedException e) { } } + * + * if (handler == null) { LogUtil .w(TAG, + * "[RLVoiceHelper] handler is null, activity maybe destory, wait..."); + * return; } + * + * Message msg = Message.obtain(handler); msg.what = what; msg.obj = obj; + * msg.sendToTarget(); } + */ + + /** + * 判断服务是否自动重启 + * + * @return 是否自动重启 + */ + public static boolean isUIShowing() { + return true; +// return ECDevice.isInitialized(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SettingItem.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SettingItem.java new file mode 100644 index 0000000..591278a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/SettingItem.java @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.InsetDrawable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.CheckedTextView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +/** + * 设置选项 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-27 + * @version 4.0 + */ +public class SettingItem extends RelativeLayout { + + /** 切换按钮 */ + public static final int ACCESSORY_TYPE_CHECKBOX = 2; + + /** Item内容区域 */ + private LinearLayout mContent; + /** 标题View */ + private TextView mTitle; + /** 概要View */ + private TextView mSummary; + /** 切换View */ + private CheckedTextView mCheckedTextView; + private TextView mNewUpdate; + /** 分割线 */ + private View mDividerView; + /** 附加类型 */ + private int mAccessoryType; + /** 是否显示分割线 */ + private boolean mShowDivider; + /** 标题 */ + private String mTitleText; + /** 概要文字 */ + private String mSummaryText; + private int[] mInsetDrawableRect = { 0, 0, 0, 0 }; + + /** + * @param context + * @param attrs + */ + public SettingItem(Context context, AttributeSet attrs) { + super(context, attrs); + LayoutInflater.from(context).inflate(R.layout.detaillist_item, this, + true); + + mContent = (LinearLayout) findViewById(R.id.content); + mTitle = (TextView) findViewById(android.R.id.title); + mSummary = (TextView) findViewById(android.R.id.summary); + mNewUpdate = (TextView) findViewById(R.id.text_tv_one); + mCheckedTextView = (CheckedTextView) findViewById(R.id.accessory_checked); + mDividerView = findViewById(R.id.item_bottom_divider); + + TypedArray localTypedArray = context.obtainStyledAttributes(attrs, + R.styleable.setting_info); + setTitleText(localTypedArray + .getString(R.styleable.setting_info_item_titleText)); + setDetailText(localTypedArray + .getString(R.styleable.setting_info_item_detailText)); + setAccessoryType(localTypedArray.getInt( + R.styleable.setting_info_item_accessoryType, 0)); + setShowDivider(localTypedArray.getBoolean( + R.styleable.setting_info_item_showDivider, true)); + localTypedArray.recycle(); + + mNewUpdate.setVisibility(View.GONE); + } + + /** + * @param showDivider + */ + private void setShowDivider(boolean showDivider) { + mShowDivider = showDivider; + View dividerView = mDividerView; + dividerView.setVisibility(mShowDivider ? View.VISIBLE : View.GONE); + } + + /** + * 设置标题信息 + * + * @param text + */ + public void setTitleText(String text) { + mTitleText = text; + if (text == null) { + mTitle.setText(""); + return; + } + mTitle.setText(mTitleText); + mTitle.setTextColor(getResources().getColor(R.color.text_color)); + } + + public void setCheckText(String text) { + if (text == null) { + mCheckedTextView.setText(""); + return; + } + mCheckedTextView.setText(text); + } + + /** + * @param text + * + */ + public void setDetailText(String text) { + mSummaryText = text; + if (text == null) { + mSummary.setText(""); + mSummary.setVisibility(View.GONE); + return; + } + mSummary.setText(mSummaryText); + mSummary.setVisibility(View.VISIBLE); + } + + @SuppressWarnings("deprecation") + private void setSettingBackground(int resid) { + int[] rect = new int[4]; + rect[0] = getPaddingLeft(); + rect[1] = getPaddingTop(); + rect[2] = getPaddingRight(); + rect[3] = getPaddingBottom(); + if (isInsetDrawable()) { + setBackgroundDrawable(new InsetDrawable(getContext().getResources() + .getDrawable(resid), mInsetDrawableRect[0], + mInsetDrawableRect[1], mInsetDrawableRect[2], + mInsetDrawableRect[3])); + } else { + setBackgroundResource(resid); + } + setPadding(rect[0], rect[1], rect[2], rect[3]); + } + + /** + * 是否显示版本更新 + * + * @param visibility + */ + public void setNewUpdateVisibility(boolean visibility) { + if (mNewUpdate != null) { + mNewUpdate.setVisibility(visibility ? View.VISIBLE : View.GONE); + } + } + + /** + * + * @return + */ + private boolean isInsetDrawable() { + for (int i = 0; i < mInsetDrawableRect.length; i++) { + if (mInsetDrawableRect[i] <= 0) { + continue; + } + return true; + } + return false; + } + + /** + * + * @param accessoryType + */ + private void setAccessoryType(int accessoryType) { + if (accessoryType == ACCESSORY_TYPE_CHECKBOX) { + mAccessoryType = ACCESSORY_TYPE_CHECKBOX; + mCheckedTextView.setCheckMarkDrawable(getContext().getResources() + .getDrawable(R.drawable.icon_switch)); + mCheckedTextView.setCompoundDrawablesWithIntrinsicBounds(null, + null, null, null); + setSettingBackground(0); + return; + } + } + + /** + * 返回切换按钮 + * + * @return + */ + public CheckedTextView getCheckedTextView() { + return mCheckedTextView; + } + + /** + * 是否处于选中状态 + * + * @return + */ + public boolean isChecked() { + if (mAccessoryType == ACCESSORY_TYPE_CHECKBOX) { + return mCheckedTextView.isChecked(); + } + return true; + } + + /** + * 设置状态 + * + * @param checked + */ + public void setChecked(boolean checked) { + if (mAccessoryType != ACCESSORY_TYPE_CHECKBOX) { + return; + } + mCheckedTextView.setChecked(checked); + } + + public void toggle() { + if (mAccessoryType != ACCESSORY_TYPE_CHECKBOX) { + return; + } + mCheckedTextView.toggle(); + } + + @Override + public void setEnabled(boolean enabled) { + // TODO Auto-generated method stub + super.setEnabled(enabled); + mCheckedTextView.setEnabled(enabled); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/TabFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/TabFragment.java new file mode 100644 index 0000000..0f341a3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/TabFragment.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui; + +import android.view.KeyEvent; + +/** + * 自定义三个TabView 的Fragment ,将三个TabView共同属性方法 + * 统一处理 + * 三个TabView 滑动页面需要继承该基类, + * Created by Jorstin on 2015/3/18. + */ +public abstract class TabFragment extends BaseFragment { + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){ + return false; + } + + return super.onKeyDown(keyCode, event); + } + + + @Override + public void onDestroy() { + onReleaseTabUI(); + super.onDestroy(); + } + + /** + * 当前TabFragment被点击 + */ + protected abstract void onTabFragmentClick(); + + /** + * 当前TabFragment被释放 + */ + protected abstract void onReleaseTabUI(); + + @Override + public int getTitleLayoutId() { + return -1; + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/Capability.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/Capability.java new file mode 100644 index 0000000..89c23c6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/Capability.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class Capability { + + /**插件ID*/ + private int id; + /**插件名称*/ + private String capabilityName; + /**插件图标*/ + private int icon; + /** + * @return the id + */ + public int getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + /** + * @return the capabilityName + */ + public String getCapabilityName() { + return capabilityName; + } + /** + * @param capabilityName the capabilityName to set + */ + public void setCapabilityName(String capabilityName) { + this.capabilityName = capabilityName; + } + /** + * @return the icon + */ + public int getIcon() { + return icon; + } + /** + * @param icon the icon to set + */ + public void setIcon(int icon) { + this.icon = icon; + } + + public Capability(String capabilityName, int icon) { + super(); + this.capabilityName = capabilityName; + this.icon = icon; + } + + + + /** + * + */ + public Capability() { + super(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingActivity.java new file mode 100644 index 0000000..5b0fd60 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingActivity.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.graphics.PixelFormat; +import android.os.Bundle; +import android.view.KeyEvent; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.CrashHandler; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECFragmentActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class ChattingActivity extends ECFragmentActivity implements + ChattingFragment.OnChattingAttachListener { + + private static final String TAG = "ECSDK_Demo.ChattingActivity"; + public ChattingFragment mChattingFragment; + private MyReceiver myReceiver; + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + LogUtil.d(TAG, "chatting ui dispatch key event :" + event); + if (mChattingFragment != null + && mChattingFragment.onKeyDown(event.getKeyCode(), event)) { + return true; + } + return super.dispatchKeyEvent(event); + } + + @Override + protected void onResume() { + super.onResume(); + CrashHandler.getInstance().setContext(this); + + IntentFilter filter1 = new IntentFilter(); + + filter1.addAction("com.yuntongxun.ecdemo.removemember"); + filter1.addAction(SDKCoreHelper.ACTION_KICK_OFF); + + registerReceiver(myReceiver, filter1); + + } + + @Override + protected void onPause() { + // TODO Auto-generated method stub + super.onPause(); + unregisterReceiver(myReceiver); + } + + public class MyReceiver extends BroadcastReceiver + { + // 可用Intent的getAction()区分接收到的不同广播 + @Override + public void onReceive(Context arg0, Intent intent) + { + if(intent==null){ + return; + } + if (intent.getAction().equals(SDKCoreHelper.ACTION_KICK_OFF) + || intent.getAction().equals( + "com.yuntongxun.ecdemo.removemember")) + finish(); + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + LogUtil.d(TAG, "onCreate"); + super.onCreate(null); + getWindow().setFormat(PixelFormat.TRANSPARENT); + + myReceiver = new MyReceiver(); + String recipients = getIntent().getStringExtra( + ChattingFragment.RECIPIENTS); + if (recipients == null) { + finish(); + LogUtil.e(TAG, "recipients is null !!"); + return; + } + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); + setContentView(R.layout.chattingui_activity_container); + mChattingFragment = new ChattingFragment(); + Bundle bundle = getIntent().getExtras(); + bundle.putBoolean(ChattingFragment.FROM_CHATTING_ACTIVITY, true); + mChattingFragment.setArguments(bundle); + getSupportFragmentManager().beginTransaction() + .add(R.id.ccp_root_view, mChattingFragment).commit(); + onActivityCreate(); + + if (isChatToSelf(recipients) || isPeerChat(recipients)) { +// AppPanelControl.setShowVoipCall(false); + } + + } + +// @Override +// public boolean onKeyDown(int keyCode, KeyEvent event) { +// LogUtil.d(TAG, "chatting ui on key down, " + keyCode + ", " + event); +// +// if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0&&CCPChattingFooter2.isRecodering) { +// // do nothing. +// return true; +// } +// return super.onKeyDown(keyCode, event); +// } + + + + + + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + LogUtil.d(TAG, "chatting ui on key up"); + return super.onKeyUp(keyCode, event); + } + + public boolean isPeerChat() { + if (mChattingFragment != null) { + return mChattingFragment.isPeerChat(); + } + return false; + } + + public boolean isChatToSelf(String sessionId) { + +// String userId = CCPAppManager.getUserId(); +// return sessionId != null +// && (sessionId.equalsIgnoreCase(userId) ? true : false); + return false; + } + + public boolean isPeerChat(String sessionId) { + + return sessionId.toLowerCase().startsWith("g"); + } + + @Override + public void onChattingAttach() { + LogUtil.d(TAG, "onChattingAttach"); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingFragment.java new file mode 100644 index 0000000..61a8de1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingFragment.java @@ -0,0 +1,3942 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.Manifest; +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.AudioManager; +import android.media.ToneGenerator; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.os.Vibrator; +import android.provider.MediaStore; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.AnimationUtils; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InvalidClassException; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GroupChatSelectPatientActivity; +import cn.shangyu.gdxzExpert.activity.GroupSelectParentActivity; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.activity.PatientEditActivity; +import cn.shangyu.gdxzExpert.activity.PatientTeachActivity; +import cn.shangyu.gdxzExpert.activity.PhotoAlbumActivity; +import cn.shangyu.gdxzExpert.activity.QuckMessageActivity; +import cn.shangyu.gdxzExpert.activity.VideoTeachActivity; +import cn.shangyu.gdxzExpert.bean.ListOutPatientBean; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.StopOutPatientListBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.ecdemo.ECAsyncTask; +import cn.shangyu.gdxzExpert.ecdemo.RichTextBean; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.BitmapUtil; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.EmoticonUtil; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileUtils; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ConversationSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ImgInfoSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.CCPFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.ECPullDownView; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.OnListViewBottomListener; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.OnListViewTopListener; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.OnRefreshAdapterDataListener; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImgInfo; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.CCPChattingFooter2; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.SmileyPanel; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.AtSomeoneUI; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ContactLogic; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android Created by Jorstin on + * 2015/6/16. + */ +public class ChattingFragment extends CCPFragment implements + View.OnClickListener, AbsListView.OnScrollListener, + IMChattingHelper.OnMessageReportCallback, + CustomerServiceHelper.OnCustomerServiceListener { + + public static final String TAG = "gdxzExpert.ChattingFragment"; + private static final int WHAT_ON_COMPUTATION_TIME = 10000; + /** request code for tack pic */ + public static final int REQUEST_CODE_TAKE_PICTURE = 0x3; + public static final int REQUEST_CODE_LOAD_IMAGE = 0x4; +// public static final int REQUEST_CODE_LOAD_IMAGE = 102; + public static final int REQUEST_CODE_IMAGE_CROP = 0x5; + /** 查看名片 */ + public static final int REQUEST_VIEW_CARD = 0x6; + /** 选择回复联系人 */ + public static final int SELECT_AT_SOMONE = 0xD4; + + /** 会话ID,数据库主键 */ + public final static String THREAD_ID = "thread_id"; + /** 联系人账号 */ + public final static String RECIPIENTS = "recipients"; + /** 联系人名称 */ + public final static String CONTACT_USER = "contact_user"; + /** 患者uuid */ + public final static String PATIENT_UUID = "patientUuid"; + /** 聊天的分类,有患者Patient,公益咨询Consult,与朋友圈 Friends */ + public final static String CONTACT_TYPE = "contact_type"; + public final static String FROM_CHATTING_ACTIVITY = "from_chatting_activity"; + public final static String CUSTOMER_SERVICE = "is_customer_service"; + /** + * 公益咨询的状态咨询状态(1.未回答2.已回答3.已关闭) + */ + public final static String CONSULT_STATE = "state"; + public final static String isFriend = "isFriend"; + /** 按键振动时长 */ + public static final int TONE_LENGTH_MS = 200; + /** 音量值 */ + private static final float TONE_RELATIVE_VOLUME = 100.0F; + /** 待发送的语音文件最短时长 */ + private static final int MIX_TIME = 1000; + /** 聊天界面消息适配器 */ + private ChattingListAdapter2 mChattingAdapter; + /** 界面消息下拉刷新 */ + // private RefreshableView mPullDownView; + // private long mPageCount; + /** 历史聊天纪录消息显示View */ + private ListView mListView; + private View mListViewHeadView; + /** 聊天界面附加聊天控件面板 */ + private CCPChattingFooter2 mChattingFooter; + /** 选择图片拍照路径 */ + private String mFilePath; + /** 会话ID */ + private long mThread = -1; + /** 会话联系人账号 */ + private String mRecipients; + /** 联系人名称 */ + private String mUsername; + /** 联系人类型 */ + private String mType; + /** 患者uuid */ + private String patientUuid; + /** 计算当前录音时长 */ + private long computationTime = -1L; + /** 当前语言录制文件的时间长度 */ + private int mVoiceRecodeTime = 0; + /** 是否使用边录制便传送模式发送语音 */ + private boolean isRecordAndSend = false; + /** 手机震动API */ + private Vibrator mVibrator; + private ToneGenerator mToneGenerator; + /** 录音剩余时间Toast提示 */ + private Toast mRecordTipsToast; +// private ECHandlerHelper mHandlerHelper = new ECHandlerHelper(); + private Handler mHandler = new Handler(Looper.getMainLooper()); + private Handler mVoiceHandler; + private Looper mChattingLooper; + /** IM聊天管理工具 */ +// private ECChatManager mChatManager; + /** 聊天底部导航控件通知回调 */ + private OnChattingFooterImpl mChattingFooterImpl = new OnChattingFooterImpl( + (ChattingActivity) getActivity()); + /** 聊天功能插件接口实现 */ + private OnOnChattingPanelImpl mChattingPanelImpl = new OnOnChattingPanelImpl(); + private ECPullDownView mECPullDownView; + /** 是否查看消息模式 */ + private boolean isViewMode = false; + private View mMsgLayoutMask; + public boolean mAtsomeone = false; + /** 在线客服 */ + private boolean mCustomerService = false; + private OnChattingAttachListener mAttachListener; + // 关闭会话 + final String loadUrl = Url.getcloseConsult; + private String uuid; + private LinearLayout ll_chatting_empty; + private ImageView iv_chatting_empty; + private TextView tv_chatting_empty; + + private static ChattingFragment instance; + private int chatType = 0; + private boolean flag = true;//判断是否在当前页面 + private boolean isfriend; + private TextView tv_groupname; + private TextView tv_name1; + private static int REQUESTCODE_OK = 202; + Handler groupandler = new Handler() { + public void handleMessage(Message msg) { + int i = msg.what; + if (i==222){ + setIsFinish(true); + hideSoftKeyboard(); + Intent intent = new Intent(); + getActivity().setResult(102, intent); + finish(); + }else { + ToastUtil.showMessage("发送失败"); + } + if(pd!=null) + pd.dismiss(); + }; + }; + private CustomProgressDialog pd; + private String richtextUuid; + private boolean videoKepu; + private boolean outInfo; + private boolean havestopout; + private boolean haveutlist; + private ECAlertDialog dilaog2; + + public static ChattingFragment getInstance() { + return instance; + } + + @Override + protected int getLayoutId() { + if(CommonUtil.BigModule()) + { + return R.layout.chatting_activity_big; + } + else + { + return R.layout.chatting_activity; + } + + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mAttachListener = (OnChattingAttachListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnChattingAttachListener"); + } + } + + private ChattingActivity getChattingActivity() { + if (getActivity() instanceof ChattingActivity) { + return (ChattingActivity) getActivity(); + } + throw new RuntimeException(getActivity().toString() + + " must implement OnChattingAttachListener"); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + instance = this; + // 初始化联系人信息 + initActivityState(savedInstanceState); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(getTopBarView()).init(); + } + + @Override + public final View onCreateView(LayoutInflater inflater, + ViewGroup container, Bundle savedInstanceState) { + View contentView = super.onCreateView(inflater, container, + savedInstanceState); + ViewGroup.LayoutParams layoutParams = contentView.getLayoutParams(); + if (layoutParams == null) { + layoutParams = new ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + } + contentView.setLayoutParams(layoutParams); + return contentView; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + LogUtil.d(TAG, "onActivityCreated"); + super.onActivityCreated(savedInstanceState); + // 初始化界面资源 + initView(); + +// queryUIMessage(); + + // 初始化IM聊天工具API +// mChatManager = SDKCoreHelper.getECChatManager(); +// HandlerThread thread = new HandlerThread("ChattingVoiceRecord", +// android.os.Process.THREAD_PRIORITY_BACKGROUND); +// thread.start(); + + // Get the HandlerThread's Looper and use it for our Handler +// mChattingLooper = thread.getLooper(); +// mVoiceHandler = new Handler(mChattingLooper); +// mVoiceHandler.post(new Runnable() { +// +// @Override +// public void run() { +// doEmojiPanel(); +// } +// }); + + + + + registerReceiver(new String[] { IMessageSqlManager.ACTION_GROUP_DEL }); + + //判断是否有停诊信息 + getStopOut(); + //判断是否有出诊信息 + getOutList(); + } + + private void getOutList() { + final Map map = new HashMap<>(); + + map.put("patient_user_uuid",patientUuid); + map.put("page","1"); + map.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+ SharePrefUtil.getString(getActivity(), "uuid", "")+","+ UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.listOutPatient); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("listOutPatient = "+result); + Gson gson1 = new Gson(); + ListOutPatientBean fromJson = gson1.fromJson(result, ListOutPatientBean.class); + if (fromJson!=null&&fromJson.getData().getList().size()>0){ + haveutlist = true; + } +// if ("200".equals(code)){ +// groupandler.sendEmptyMessage(222); +// }else +// groupandler.sendEmptyMessage(223); + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + } + + private void getStopOut() { + + final Map map = new HashMap<>(); + + map.put("patient_user_uuid",patientUuid); + map.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+ SharePrefUtil.getString(getActivity(), "uuid", "")+","+ UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.stopOutPatientList); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("stopOutPatientList = "+result); + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + Gson gson2 = new Gson(); + StopOutPatientListBean fromJson = gson2.fromJson(result, StopOutPatientListBean.class); + if (fromJson!=null&&fromJson.getData().size()>0){ + havestopout = true; + } +// if ("200".equals(code)){ +// groupandler.sendEmptyMessage(222); +// }else +// groupandler.sendEmptyMessage(223); + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + + private void queryUIMessage() { + mListView.post(new Runnable() { + + @Override + public void run() { +// if (mChattingAdapter.getCount() < 18) { +// mECPullDownView.setIsCloseTopAllowRefersh(true); +// mECPullDownView.setTopViewInitialize(false); +// } + mListView.clearFocus(); + mChattingAdapter.notifyChange(); +// mListView.setSelection(mChattingAdapter.getCount()); + } + }); + } + + @Override + public void onDestroy() { + super.onDestroy(); + +// AppPanelControl.setShowVoipCall(true); + if (mCustomerService) { + CustomerServiceHelper.addCustomerServiceListener(null); + CustomerServiceHelper.finishService(mRecipients); + } + if (mChattingLooper != null) { + mChattingLooper.quit(); + mChattingLooper = null; + } + if (mChattingFooter != null) { + mChattingFooter.onDestory(); + mChattingFooter = null; + } + +// if (mHandlerHelper != null) { +// mHandlerHelper.getTheadHandler().removeCallbacksAndMessages(null); +// mHandlerHelper = null; +// } + if (mVoiceHandler != null) { + mVoiceHandler.removeCallbacksAndMessages(null); + mVoiceHandler = null; + } + if (mHandler != null) { + mHandler.removeCallbacksAndMessages(null); + mHandler = null; + } + if (mListView != null) { + mListView.setOnItemLongClickListener(null); + mListView.setOnItemClickListener(null); + } + if (mChattingAdapter != null) { + mChattingAdapter.onDestory(); + mListView.setAdapter(null); + } +// mChatManager = null; + mOnItemLongClickListener = null; + mOnListViewBottomListener = null; + mOnListViewTopListener = null; + mOnRefreshAdapterDataListener = null; + if (mChattingFooterImpl != null) { + mChattingFooterImpl.release(); + mChattingFooterImpl = null; + } + mChattingPanelImpl = null; + mECPullDownView = null; + setChattingContactId(""); + IMChattingHelper.setOnMessageReportCallback(null); + System.gc(); + } + + /** + * 初始化聊天界面资源 + */ + private void initView() { + mListView = (ListView) findViewById(R.id.chatting_history_lv); + mListView.setTranscriptMode(ListView.TRANSCRIPT_MODE_NORMAL); + mListView.setItemsCanFocus(false); + mListView.setOnScrollListener(this); + mListView.setKeepScreenOn(true); + mListView.setStackFromBottom(false); + mListView.setFocusable(false); + mListView.setFocusableInTouchMode(false); + mListView.setOnItemLongClickListener(mOnItemLongClickListener); + mListView.setOnItemClickListener(mOnItemClickListener); + registerForContextMenu(mListView); + + mListViewHeadView = getChattingActivity().getLayoutInflater().inflate( + R.layout.chatting_list_header, null); + mListView.addHeaderView(mListViewHeadView); + mListView.setOnTouchListener(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + hideSoftKeyboard(); + if (mChattingFooter != null) { + // After the input method you can use the record button. + // mGroudChatRecdBtn.setEnabled(true); + // mChatFooter.setMode(1); + mChattingFooter.hideBottomPanel(); + } + return false; + } + }); + + mMsgLayoutMask = findViewById(R.id.message_layout_mask); + mMsgLayoutMask.setOnTouchListener(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + hideMsgLayoutMask(); + mListView.setSelection(mListView.getCount() - 1); + return true; + } + }); + /************************************************************************************************************/ + mECPullDownView = (ECPullDownView) findViewById(R.id.chatting_pull_down_view); + mECPullDownView.setTopViewInitialize(true); + mECPullDownView.setIsCloseTopAllowRefersh(false); + mECPullDownView.setHasbottomViewWithoutscroll(false); + mECPullDownView + .setOnRefreshAdapterDataListener(mOnRefreshAdapterDataListener); + mECPullDownView.setOnListViewTopListener(mOnListViewTopListener); + mECPullDownView.setOnListViewBottomListener(mOnListViewBottomListener); + + // 初始化聊天功能面板 + mChattingFooter = (CCPChattingFooter2) findViewById(R.id.nav_footer); + patientUuid = getActivity().getIntent().getStringExtra(PATIENT_UUID); +// Log.d("gdxzname","patientUuid0 "+patientUuid); + tv_groupname = (TextView) findViewById(R.id.tv_groupname); + tv_name1 = (TextView) findViewById(R.id.tv_name1); +// tv_groupname.setMovementMethod(ScrollingMovementMethod.getInstance()); + ScrollView rl_sendgroup1 = (ScrollView) findViewById(R.id.rl_sendgroup1); + + if (!StringUtil.isEmpty(patientUuid)&&patientUuid.contains(",")){//群发,多个患者uuid + rl_sendgroup1.setVisibility(View.VISIBLE); + mECPullDownView.setVisibility(View.GONE); + ImageButton mChattingModeButton = (ImageButton) mChattingFooter.findViewById(R.id.chatting_mode_btn); + mChattingModeButton.setVisibility(View.GONE); + tv_groupname.setText(mUsername); + String[] split = null; + split= mUsername.split(","); + if (split.length==1){ + split = mUsername.split(","); + } + tv_name1.setText("消息将发送给"+split.length+"位患者:"); + if(CommonUtil.BigModule()) + { + getTopBarView().setGroupButtonBig(); + } + else + { + getTopBarView().setGroupButton(); + } + + }else { + patientUuid = ""; +// Log.d("gdxzname","patientUuid1 "+patientUuid); + } + // 注册聊天面板状态回调通知、包含录音按钮按钮下放开等录音操作 + mChattingFooter.setOnChattingFooterLinstener(mChattingFooterImpl); + // 注册聊天面板附加功能(图片、拍照、文件)被点击回调通知 + mChattingFooter.setOnChattingPanelClickListener(mChattingPanelImpl); + // 注册一个聊天面板文本输入框改变监听 + mChattingFooter.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + LogUtil.d(TAG, "[onTextChanged]"); + String text = String.valueOf(s); + String value = text.substring(start, start + count); + if (("@".equals(value) && isPeerChat()) + && !text.equals(mChattingFooter.getLastContent()) + && !mChattingFooter.isSetAtSomeoneing()) { + mChattingFooter.setLastContent(text); + mChattingFooter.setInsertPos(start + 1); + boolean handler = (text == null || start < 0 || text + .length() < start); + if (!handler) { + Intent action = new Intent(); + action.setClass(getChattingActivity(), + AtSomeoneUI.class); + action.putExtra(AtSomeoneUI.EXTRA_GROUP_ID, mRecipients); +// action.putExtra(AtSomeoneUI.EXTRA_CHAT_USER, +// CCPAppManager.getClientUser().getUserId()); + startActivityForResult(action, 212); + } + return; + } else if (!text.equals(mChattingFooter.getLastContent())) { + mChattingFooter.setLastContent(text); + } + } + + @Override + public void afterTextChanged(Editable s) { + + } + }); + + // mChattingAdapter = new ChattingListAdapter(getChattingActivity()); + LogUtil.i(TAG, "mThread=" + mThread); +// mChattingAdapter = new ChattingListAdapter2(getActivity(),ECMessage.createECMessage(ECMessage.Type.NONE), mRecipients, +// mThread, isPublicServiceClose,isfriend); +// mListView.setAdapter(mChattingAdapter); + // 空的布局 + ll_chatting_empty = (LinearLayout) findViewById(R.id.ll_chatting_empty); + iv_chatting_empty = (ImageView) findViewById(R.id.iv_chatting_empty); + tv_chatting_empty = (TextView) findViewById(R.id.tv_chatting_empty); + ll_chatting_empty.setVisibility(View.GONE); + // 处理空 + if (mThread <= 0) { + if (mType.contains("2,1,1,")) { + if (isPublicServiceClose || 3 == consult_state) { + // 处理空 + if (mThread <= 0) { + tv_chatting_empty.setText(getResources().getString( + R.string.close_public_service_empty)); + mListView.setEmptyView(ll_chatting_empty); + } + } + } else if (Constant.openPublicService == consult_state) {// 表示抢答了公益咨询 + if (TextUtils.isEmpty(mUsername)) { + mUsername = ""; + } + setShower(getResources().getString(R.string.open_public_service, mUsername)); + } + } + + } + + private void hideBottom() { + // 隐藏键盘 + hideSoftKeyboard(); + if (mChattingFooter != null) { + // 隐藏更多的聊天功能面板 + mChattingFooter.hideBottomPanel(); + } + } + + private Animation mAnimation; + private int consult_state = 0; + + private void showMsgLayoutMask() { + if (isViewMode && !mMsgLayoutMask.isShown()) { + if (mAnimation == null) { + mAnimation = AnimationUtils.loadAnimation( + getChattingActivity(), R.anim.buttomtip_in); + } + mMsgLayoutMask.setVisibility(View.VISIBLE); + mMsgLayoutMask.startAnimation(mAnimation); + mAnimation.start(); + } + } + + private void hideMsgLayoutMask() { + if (mMsgLayoutMask != null && mMsgLayoutMask.isShown()) { + mMsgLayoutMask.setVisibility(View.GONE); + } + } + + /** + * 读取聊天界面联系人会话参数信息 + * + * @param savedInstanceState + */ + private void initActivityState(Bundle savedInstanceState) { + Intent intent = getActivity().getIntent(); + mRecipients = intent.getStringExtra(RECIPIENTS); + mUsername = intent.getStringExtra(CONTACT_USER); + // 聊天类型 + mType = intent.getStringExtra(CONTACT_TYPE); + if (TextUtils.isEmpty(mType)) { + mType = ""; + } + // 患者uuid + patientUuid = intent.getStringExtra(PATIENT_UUID); + + if (TextUtils.isEmpty(patientUuid)) { + patientUuid = ""; + + } + + isfriend = intent.getBooleanExtra(isFriend, true); + consult_state = intent.getIntExtra(CONSULT_STATE, 0); + if (consult_state == 6) { + handleSendTextMessage("我们成为好友啦"); + consult_state = 0; + } + if (TextUtils.isEmpty(mRecipients)) { + ToastUtil.showMessage("联系人账号不存在"); + finish(); + return; + } + mCustomerService = ContactLogic.isCustomService(mRecipients); + + // 如果姓名为空 + if (mUsername == null) { + PatientModel contact = PatientSqlManager + .getPatientInfo(mRecipients); + // ECContacts contact = ContactSqlManager.getContact(mRecipients); + if (contact != null) { + // mUsername = contact.getNickname(); + mUsername = contact.getRealName(); + } else { + // mUsername = mRecipients; + mUsername = "随访患者"; + } + } + LogUtil.i("mUsername" + mUsername); + if (!isPeerChat()) { + IMessageSqlManager.checkContact(mRecipients, mUsername); + } + // 云通讯扩展字段,传输内容及格式:send_type(发送方类型 1.患者 2.专家), + // receiver_type(接收方类型 1.患者 2.专家), + // chat_from(来源1.公益咨询 2.随访 3.vip), + // chat_from_uuid(如果是公益咨询,则存uuid,否则0) + // 2,1,1,uuid + if (mType.contains("2,1,1,")) { + String actionBtn = getString(R.string.icon_closeMesg); +// getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, +// R.drawable.btn_style_brown, null, actionBtn, mUsername, +// null, this); + // getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + // "关闭\n会话", mUsername, this); + // 获取公益咨询的uuid + chatType = 1; + uuid = mType.substring(6); + // 保存关闭的uuid + isPublicServiceClose = SharePrefUtil.getBoolean(getActivity(),uuid, false); + if (isPublicServiceClose || 3 == consult_state) { + getTopBarView().setRightBtnEnable(false); + getTopBarView().setRightGone(); + } + // if (3 == consult_state) { + // getTopBarView().setRightBtnEnable(false); + // getTopBarView().setRightGone(); + // } + } else { + getTopBarView().setTopBarToStatus( + 1, + R.drawable.topbar_back_bt, + isPeerChat() ? R.drawable.actionbar_facefriend_icon + : R.drawable.actionbar_particular_icon, mUsername, + this); + } + setActionBarTitle(mUsername); + +// mThread = ConversationSqlManager.querySessionIdForBySessionId(mRecipients); + // mPageCount = IMessageSqlManager.qureyIMCountForSession(mThread); + + } + + /** + * 是否群组 + * + * @return + */ + public boolean isPeerChat() { + + return mRecipients != null && mRecipients.startsWith("g"); + } + + /** + * 返回聊天消息适配器 + * + * @return the mChattingAdapter + */ + public ChattingListAdapter2 getChattingAdapter() { + return mChattingAdapter; + } + + public CCPChattingFooter2 getChattingFooter() { + return mChattingFooter; + } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { + View topView = mListView.getChildAt(mListView + .getFirstVisiblePosition()); + if ((topView != null) && (topView.getTop() == 0)) { + LogUtil.d(LogUtil.getLogUtilsTag(ChattingActivity.class), + "doLoadingView auto pull"); + mECPullDownView.startTopScroll(); + } + } + } + + private boolean mHandlerDelChar = false; + private String fileName; + private String filePath; + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { + LogUtil.d(TAG,"keycode back , chatfooter mode: "+ mChattingFooter.getMode()); + if (!mChattingFooter.isButtomPanelNotVisibility()) { + hideBottom(); + return true; + } + setIsFinish(true); + } else if (keyCode == KeyEvent.KEYCODE_DEL) { + if (event.getAction() == KeyEvent.ACTION_DOWN) { + mHandlerDelChar = !(mChattingFooter.getCharAtCursor() != (char) (8197)); + } + if (event.getAction() == KeyEvent.ACTION_UP && mHandlerDelChar) { + mHandlerDelChar = false; + CCPChattingFooter2 footer = this.mChattingFooter; + int selectionStart = footer.getSelectionStart(); + String text = footer.getLastText().substring(0, selectionStart); + int atIndex = text.lastIndexOf('@'); + if (atIndex < text.length() && atIndex >= 0) { + String subStartText = text.substring(0, atIndex); + String subSecondText = footer.getLastText().substring( + selectionStart); + StringBuilder sb = new StringBuilder(); + sb.append(subStartText).append(subSecondText); + footer.setLastText(sb.toString()); + footer.mEditText.setSelection(atIndex); + } + } + } + return super.onKeyDown(keyCode, event); + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, + int visibleItemCount, int totalItemCount) { + + LogUtil.d(TAG, "[onScroll] firstVisibleItem :" + firstVisibleItem + + " ,visibleItemCount:" + visibleItemCount + + " ,totalItemCount:" + totalItemCount); + isViewMode = !((firstVisibleItem + visibleItemCount) == totalItemCount); + if (mECPullDownView != null) { + if (!mChattingAdapter.isLimitCount()) { + mECPullDownView.setIsCloseTopAllowRefersh(false); + } else { + mECPullDownView.setIsCloseTopAllowRefersh(true); + } + } + if (!isViewMode) + hideMsgLayoutMask(); + } + + @Override + public void onResume() { + super.onResume(); + flag = true; + mChattingFooter.switchChattingPanel(SmileyPanel.APP_PANEL_NAME_DEFAULT); + if (patientUuid.contains(",")){//群发,多个患者uuid +// mChattingFooter.initSmileyPanel();//添加表情 + }else { + mChattingFooter.initSmileyPanel();//添加表情 + } +// IMChattingHelper.setOnMessageReportCallback(this); +// if (mCustomerService) { +// CustomerServiceHelper.addCustomerServiceListener(this); +// } + // 将所有的未读消息设置为已读 +// setChattingSessionRead(); + +// mChattingAdapter.onResume(); + + checkPreviewImage(); + setChattingContactId(mRecipients); +// ECNotificationManager.getInstance().forceCancelNotification(); + + initSettings(mRecipients); + if (isPeerChat() && !GroupSqlManager.getJoinState(mRecipients)) { + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, + mUsername, this); + mChattingFooter.setVisibility(View.GONE); + return; + } + mChattingFooter.setVisibility(View.VISIBLE); + + // 判断是否是公益咨询的关闭会话 + if (mType.contains("2,1,1,")) { + if (isPublicServiceClose) { + getChattingFooter().setVisibility(View.GONE); + getChattingFooter().goneChatFooterPanel(); + // 处理空 + if (mThread <= 0) { + tv_chatting_empty.setText(getResources().getString( + R.string.close_public_service_empty)); + mListView.setEmptyView(ll_chatting_empty); + } + } else if (Constant.openPublicService == consult_state) {// 表示抢答了公益咨询 + if (TextUtils.isEmpty(mUsername)) { + mUsername = ""; + } + setShower(getResources().getString( + R.string.open_public_service, mUsername)); + } + } + if (3 == consult_state) { + getChattingFooter().setVisibility(View.GONE); + getChattingFooter().goneChatFooterPanel(); + // 处理空 + if (mThread <= 0) { + mListView.setEmptyView(ll_chatting_empty); + } + } + LogUtil.i("mType==" + mType + "isPublicServiceClose===" + + isPublicServiceClose); + if (!StringUtil.isEmpty(patientUuid)&&patientUuid.contains(",")){ + getTopBarView().setTitle("群发消息"); + if(CommonUtil.BigModule()) + { + getTopBarView().setTitle("群发消息",23); + } + } + } + + /** + * @param mRecipients + */ + private void initSettings(String mRecipients) { + if (isPeerChat()) { +// ECGroup ecGroup = GroupSqlManager.getECGroup(mRecipients); +// if (ecGroup != null) { +// setActionBarTitle(ecGroup.getName() != null ? ecGroup.getName() +// : ecGroup.getGroupId()); +// SpannableString charSequence = setNewMessageMute(!ecGroup +// .isNotice()); +// if (charSequence != null) { +// getTopBarView().setTitle(charSequence); +// } +// } + } + } + + @Override + public void onPause() { + super.onPause(); + stopPlayVoice(); + setChattingContactId(""); + } + + /** + * 保存当前的聊天界面所对应的联系人、方便来消息屏蔽通知 + */ + private void setChattingContactId(String contactid) { + try { + ECPreferences.savePreference(ECPreferenceSettings.SETTING_CHATTING_CONTACTID, contactid, + true); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + /** + * 检查是否有预览带发送图片 + */ + private void checkPreviewImage() { + + LogUtil.i("mFilePath = "+mFilePath); + boolean previewImage = ECPreferences.getSharedPreferences().getBoolean( + ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED.getId(), + (Boolean) ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED + .getDefaultValue()); + + if (previewImage) { + + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED, + Boolean.FALSE, true); + + if (patientUuid.contains(",")){ +// List list = new ArrayList<>(); +// String[] split = patientUuid.split(","); +// for (int j = 0;j paths; + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + LogUtil.d(TAG, "onActivityResult: requestCode=" + requestCode + + ", resultCode=" + resultCode + ", data=" + data); + if (requestCode == REQUESTCODE_OK&& resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + + return; + } + patientUuid = data.getStringExtra("uuid"); + + mUsername = data.getStringExtra("name"); + tv_groupname.setText(mUsername.substring(0,mUsername.length()-1)); + String[] split = null; + split= mUsername.split(","); + if (split.length==1){ + split = mUsername.split(","); + } + tv_name1.setText("消息将发送给"+split.length+"位患者:"); + } + // If there's no data (because the user didn't select a picture and + // just hit BACK, for example), there's nothing to do.aaaa + if (data != null) { + if (requestCode == 69) { + if (data.getStringExtra("message") != "") { + String mess = data.getStringExtra("message"); + mChattingFooter.mEditText.setText(mess);// 聊天输入框 + } + } + if(requestCode == 70){ + imagUrl = data.getStringExtra("imagUrl"); + LogUtil.i("imagUrl",imagUrl); + url = data.getStringExtra("url"); + title = data.getStringExtra("title"); + content = data.getStringExtra("content"); + videoKepu = data.getBooleanExtra("video",false); + richtextUuid = data.getStringExtra("uuid"); + if (patientUuid.contains(",")) + { + if (pd==null){ + pd = new CustomProgressDialog(getActivity(), "请稍候"); + } + pd.show(); + } + new ParseHtmlTask(UIUtils.getContext()).execute(); + } + } + if (requestCode == 0x2a || requestCode == SELECT_AT_SOMONE) { + if (data == null) { + return; + } + } else if (resultCode != ChattingActivity.RESULT_OK) { + LogUtil.d("onActivityResult: bail due to resultCode=" + resultCode); + return; + } + + // if(data != null && 0x2a == requestCode) { + // handleAttachUrl(data.getStringExtra("choosed_file_path")); + // return ; + // } + + if (requestCode == REQUEST_CODE_TAKE_PICTURE + || requestCode == REQUEST_CODE_LOAD_IMAGE) { + if (requestCode == REQUEST_CODE_LOAD_IMAGE) { + // mFilePath = DemoUtils.resolvePhotoFromIntent( + // getChattingActivity(), data, + // FileAccessor.IMESSAGE_IMAGE); + if (data == null) { + return; + } + paths = (ArrayList) data + .getSerializableExtra("photos"); + // return; + } + if (TextUtils.isEmpty(mFilePath)) { + return; + } + File file = new File(mFilePath); + if (file == null || !file.exists()) { + return; + } + if (requestCode == REQUEST_CODE_TAKE_PICTURE) { + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH, + file.getAbsolutePath(), true); + Intent intent = new Intent(getChattingActivity(), + ImagePreviewActivity.class); + startActivityForResult(intent, REQUEST_CODE_IMAGE_CROP); + + } catch (InvalidClassException e1) { + e1.printStackTrace(); + } + } + return; + } + if (requestCode == REQUEST_VIEW_CARD && data != null) { +// boolean exit = data.getBooleanExtra(GroupInfoActivity.EXTRA_QUEIT, +// false); + boolean exit =false; + if (exit) { + finish(); + return; + } +// boolean reload = data.getBooleanExtra( +// GroupInfoActivity.EXTRA_RELOAD, false); +// if (reload) { +// mThread = mChattingAdapter.setUsername(mRecipients); +// queryUIMessage(); +// } + } + + if (requestCode == SELECT_AT_SOMONE) { + String selectUser = data + .getStringExtra(AtSomeoneUI.EXTRA_SELECT_CONV_USER); + if (TextUtils.isEmpty(selectUser)) { + mChattingFooter.setAtSomebody(""); + LogUtil.d(TAG, "@ [nobody]"); + return; + } + LogUtil.d(TAG, "@ " + selectUser); + ECContacts contact = ContactSqlManager.getContact(selectUser); + if (contact == null) { + return; + } + if (TextUtils.isEmpty(contact.getNickname())) { + contact.setNickname(contact.getContactid()); + } + mChattingFooter.setAtSomebody(contact.getNickname()); + postSetAtSome(); + return; + } + if (requestCode == GlobalConstant.ACTIVITY_FOR_RESULT_VIDEORECORD) { + + handleVideoRecordSend(data); + + } + + } + + private void handleVideoRecordSend(Intent data) { + if (data.hasExtra("file_name")) { + Bundle extras = data.getExtras(); + if (extras != null) { + fileName = extras.getString("file_name"); + } + } + + if (data.hasExtra("file_url")) { + Bundle extras = data.getExtras(); + if (extras != null) { + filePath = extras.getString("file_url"); + } + } + File f = new File(filePath); + if (!f.exists()) { + return; + } + handleSendVideoAttachMessage(f.length(), filePath); + + } + + /** + * 处理@某人 + */ + private void postSetAtSome() { + String atSomebody = mChattingFooter.getAtSomebody(); + if (!TextUtils.isEmpty(atSomebody)) { + String text = mChattingFooter.getLastText(); + int someInsertPosition = mChattingFooter.getInsertPos(); + if (someInsertPosition > text.length()) { + someInsertPosition = text.length(); + } + String message = text.substring(0, someInsertPosition) + atSomebody + + (char) (8197) + + text.substring(someInsertPosition, text.length()); + int selectoin = 1 + someInsertPosition + atSomebody.length(); + mChattingFooter.setLastContent(message); + mChattingFooter.setLastText(message, selectoin, false); + mChattingFooter.setLastContent(null); + toggleSoftInput(); + } + + } + + /** + * 处理附件 + * + * @param path + */ + private void handleAttachUrl(final String path) { + File file = new File(path); + if (!file.exists()) { + return; + } + final long length = file.length(); + if (length > (10 * 1048576.0F)) { + ToastUtil.showMessage("文件大小超过限制,最大不能超过10M"); + return; + } + ECAlertDialog buildAlert = ECAlertDialog.buildAlert( + getActivity(), + getString(R.string.plugin_upload_attach_size_tip, + FileUtils.formatFileLength(length)), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + handleSendFileAttachMessage(length, path); + } + }); + + buildAlert.setTitle(R.string.app_tip); + buildAlert.show(); + } + + /** + * 处理文本发送方法事件通知 + * + * @param text + */ + private void handleSendTextMessage(CharSequence text) { + if (patientUuid.contains(",")){ +// List list = new ArrayList<>(); +// String[] split = patientUuid.split(","); +// for (int i = 0;i map = new HashMap<>(); + map.put("msg_type",msg_type); + if("7".equals(msg_type)||"8".equals(msg_type)) + { + map.put("doctor_id",SharePrefUtil.getString(getActivity(),"doctor_id","")); + } + if (StringUtil.isEmpty(mFilePath1)){ + map.put("msg_content",msg_content); + } + map.put("patient_user_uuid",patientUuid); + map.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+ SharePrefUtil.getString(getActivity(), "uuid", "")+","+ UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + if(!StringUtil.isEmpty(mFilePath1)){ + FileInputStream fileInputStream = new FileInputStream(mFilePath1); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(mFilePath1,opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream, + null, opts); + String s = Base64Util.BitmaptoBase64(bitmap); + map.put("msg_content",s); + } + + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); +// LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); +// LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.addGroupSendMsg); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + if ("200".equals(code)){ + groupandler.sendEmptyMessage(222); + }else + groupandler.sendEmptyMessage(223); + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + /** + * 处理发送名片消息,新增,根据发送文件进行修改 + * + * @param + * @param + */ + private void handleSendCardMessage(CharSequence text) { + if (TextUtils.isEmpty(text)) { + return; + } +// // 组建一个待发送的附件ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.FILE); +// // 设置接收者 +// msg.setTo(mRecipients); +// // 创建附件消息体 +// ECFileMessageBody msgBody = new ECFileMessageBody(); +// // 设置附件名 +// msgBody.setFileName("ssssssssssssssssssssssssurnal.rl"); +// // 设置附件扩展名 +// msgBody.setFileExt("log"); +// // 设置附件本地路径 +// msgBody.setLocalUrl("/storage/emulated/0/360Log/NetErrorAnalysisLog/20160115_NetErrorAnalysis.log"); +// // 设置附件长度 +// msgBody.setLength(31); +// +// msgBody.setRemoteUrl("http://182.92.67.209:8081/gdxz/expert/2016-01-13/dc522b2941d248dd84ddb3231f49b6e3.jpg"); +// msg.setBody(msgBody); +// +// try { +// // 调用发送API +// // 发送消息,该函数见上 +// long rowId = -1; +// if (mCustomerService) { +// rowId = CustomerServiceHelper.sendMCMessage(msg); +// } else { +// rowId = IMChattingHelper.sendECMessage(msg); +// } +// // 通知列表刷新 +// msg.setId(rowId); +// notifyIMessageListView(msg); +// } catch (Exception e) { +// } + } + + /** + * 不允许发送空白消息 + */ + private void canotSendEmptyMessage() { + + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(getActivity(), + R.string.chatting_empty_message_cant_be_sent, + R.string.dialog_btn_confim, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mChattingFooter.setEditTextNull(); + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + /** + * 处理发送附件消息 + * + * @param length + * @param pathName + */ + private void handleSendFileAttachMessage(long length, String pathName) { + + if (TextUtils.isEmpty(pathName)) { + return; + } + // 组建一个待发送的附件ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.FILE); +// // 设置接收者 +// msg.setTo(mRecipients); +// // 创建附件消息体 +// ECFileMessageBody msgBody = new ECFileMessageBody(); +// // 设置附件名 +// msgBody.setFileName(DemoUtils.getFilename(pathName)); +// // 设置附件扩展名 +// msgBody.setFileExt(DemoUtils.getExtensionName(pathName)); +// // 设置附件本地路径 +// msgBody.setLocalUrl(pathName); +// // 设置附件长度 +// msgBody.setLength(length); +// msg.setBody(msgBody); +// msg.setUserData(mType); + try { + // 调用发送API + // 发送消息,该函数见上 + long rowId = -1; +// if (mCustomerService) { +// rowId = CustomerServiceHelper.sendMCMessage(msg); +// } else { +// rowId = IMChattingHelper.sendECMessage(msg); +// } +// // 通知列表刷新 +// msg.setId(rowId); +// notifyIMessageListView(msg); + } catch (Exception e) { + } + } + + private void handleSendVideoAttachMessage(long length, String pathName) { + sendMessageWX("", 3); + if (TextUtils.isEmpty(pathName)) { + return; + } + // 组建一个待发送的附件ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.VIDEO); +// +// // 新添加 +// msg.setForm(CCPAppManager.getClientUser().getUserId()); +// msg.setSessionId(mRecipients); +// msg.setDirection(ECMessage.Direction.SEND); +// msg.setMsgTime(System.currentTimeMillis()); +// +// // 设置接收者 +// msg.setTo(mRecipients); +// // 创建附件消息体 +// ECVideoMessageBody msgBody = new ECVideoMessageBody(); +// // 设置附件名 +// msgBody.setFileName(DemoUtils.getFilename(pathName)); +// // 设置附件扩展名 +// msgBody.setFileExt(DemoUtils.getExtensionName(pathName)); +// // 设置附件本地路径 +// msgBody.setLocalUrl(pathName); +// // 设置附件长度 +// msgBody.setLength(length); +// // 扩展附件名称、对方可以用此名称界面显示 +// msg.setUserData("fileName=" + msgBody.getFileName()); +// msg.setBody(msgBody); + // msg.setUserData(mType); + try { + // 调用发送API + // 发送消息,该函数见上 + long rowId = -1; +// if (mCustomerService) { +// rowId = CustomerServiceHelper.sendMCMessage(msg); +// } else { +// rowId = IMChattingHelper.sendECMessage(msg); +// } +// // 通知列表刷新 +// msg.setId(rowId); +// notifyIMessageListView(msg); + } catch (Exception e) { + } + } + + /** + * 处理发送图片消息 + * + * @param imgInfo + */ + public void handleSendImageMessage(ImgInfo imgInfo, String id) { + + sendMessageWX("", 4); + String fileName = imgInfo.getBigImgPath(); + String fileUrl = FileAccessor.getImagePathName() + "/" + fileName; + if (new File(fileUrl).exists()) { + // 组建一个待发送的ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.IMAGE); +// // 设置接收者 +// if (StringUtil.isEmpty(id)){ +// msg.setTo(mRecipients); +// }else +// msg.setTo(Constant.Patient_AppKey+id); +// +// LogUtil.i("setTo = "+ Constant.Patient_AppKey+id); +// // 设置附件包体(图片也是相当于附件) +// ECImageMessageBody msgBody = new ECImageMessageBody(); +// +// // 设置附件名 +// msgBody.setFileName(fileName); +// // 设置附件扩展名 +// msgBody.setFileExt(DemoUtils.getExtensionName(fileName)); +// // 设置附件本地路径 +// msgBody.setLocalUrl(fileUrl); +// msg.setBody(msgBody); +// msg.setUserData(mType); +// try { +// long rowId; +// if (mCustomerService) { +// rowId = CustomerServiceHelper +// .sendImageMessage(imgInfo, msg); +// } else { +// rowId = IMChattingHelper.sendImageMessage(imgInfo, msg); +// } +// // 通知列表刷新 +// msg.setId(rowId); +// notifyIMessageListView(msg); +// } catch (Exception e) { +// } + } + +// if (patientUuid.contains(",")){ +// String[] split = patientUuid.split(","); +// for (int i = 0;i 0) { +// ECMessage item = mChattingAdapter.getItem(mChattingAdapter +// .getCount() - 1); +// if (item != null) { +// lastTime = item.getMsgTime(); +// } +// } + return lastTime; + } + + /** + * 文件上传发送者不在群组内 文件上传接受者被禁言 消息发送报告 + */ +// @Override +// public void onMessageReport(ECError error, ECMessage message) { +// if (mChattingAdapter != null) { +// mChattingAdapter.notifyChange(); +// } +// if (error == null) { +// return; +// } +// if ((SdkErrorCode.SPEAK_LIMIT_FILE == error.errorCode || SdkErrorCode.SPEAK_LIMIT_TEXT == error.errorCode)) { +// // 成员被禁言 +// showAlertTips(R.string.sendmsg_error_15032); +// return; +// } +// if ((SdkErrorCode.NON_GROUPMEMBER == error.errorCode)) { +// // 文件上传发送者不在群组内 +// showAlertTips(R.string.sendmsg_error_16072); +// return; +// } +// +// if (SdkErrorCode.SDK_TEXT_LENGTH_LIMIT == error.errorCode) { +// // 文本长度超过限制 +// showAlertTips(R.string.sendmsg_error_170001); +// } +// +// } + + private void showAlertTips(int message) { + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(getActivity(), + message, R.string.dialog_btn_confim, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + public boolean checkUserThread() { + ChattingListAdapter2 forceAdapter = mChattingAdapter; + if (forceAdapter == null) { + return false; + } + if (mThread <= 0 || mThread != forceAdapter.getThread()) { + mThread = forceAdapter.setUsername(mRecipients); + } + forceAdapter.notifyChange(); + return true; + } + + /** + * 收到新的Push消息 + */ +// @Override +// public void onPushMessage(String sid, List msgs) { +// +// if (!mRecipients.equals(sid)) { +// return; +// } +// +// if (!checkUserThread()) { +// return; +// } +// showMsgLayoutMask(); +// // 当前是否正在查看消息 +// if (!isViewMode) +// mListView.setSelection(mListView.getCount() - 1); +// LogUtil.i("更新所有的未读消息"); +// if (flag){ +// setChattingSessionRead(); +// } +// +// } + + /** + * 更新所有的未读消息 + */ + private void setChattingSessionRead() { + ConversationSqlManager.setChattingSessionRead(mThread); + int patientUnreadCount = IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient); + LogUtil.i("patientUnreadCount = "+patientUnreadCount); + String brand = Build.BRAND; + if ("Xiaomi".equals(brand)){ + //小米不需要原生角标 + }else { +// if (patientUnreadCount>0){ +// BadgeCountUtils.setBadgeCount(UIUtils.getContext(),patientUnreadCount); +// }else +// BadgeCountUtils.removeBadge(UIUtils.getContext()); +// setBadgeNum(patientUnreadCount, UIUtils.getContext()); + } + + } + + @Override + public void onStop() { + super.onStop(); + flag = false; + LogUtil.i("flag = "+flag); + } + + /** + * 设置角标 + */ + public void setBadgeNum(int num, Context context) { + try { + Bundle bunlde = new Bundle(); + bunlde.putString("package", "cn.shangyu.gdxzExpert"); + bunlde.putString("class", "cn.shangyu.gdxzExpert.activity.MainActivity"); + bunlde.putInt("badgenumber", num); + context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bunlde); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 给予客户端震动提示 + */ + protected void readyOperation() { + computationTime = -1L; + mRecordTipsToast = null; + playTone(ToneGenerator.TONE_PROP_BEEP, TONE_LENGTH_MS); + new Handler().postDelayed(new Runnable() { + + @Override + public void run() { + stopTone(); + } + }, TONE_LENGTH_MS); + vibrate(50L); + } + + private Object mToneGeneratorLock = new Object(); + + // 初始化 + private void initToneGenerator() { + AudioManager mAudioManager = (AudioManager) getActivity() + .getSystemService(Context.AUDIO_SERVICE); + if (mToneGenerator == null) { + try { + int streamVolume = mAudioManager + .getStreamVolume(AudioManager.STREAM_MUSIC); + int streamMaxVolume = mAudioManager + .getStreamMaxVolume(AudioManager.STREAM_MUSIC); + int volume = (int) (TONE_RELATIVE_VOLUME * (streamVolume / streamMaxVolume)); + mToneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, + volume); + + } catch (RuntimeException e) { + LogUtil.d("Exception caught while creating local tone generator: " + + e); + mToneGenerator = null; + } + } + } + + /** + * 停止播放声音 + */ + public void stopTone() { + if (mToneGenerator != null) + mToneGenerator.stopTone(); + } + + /** + * 播放提示音 + * + * @param tone + * @param durationMs + */ + public void playTone(int tone, int durationMs) { + synchronized (mToneGeneratorLock) { + initToneGenerator(); + if (mToneGenerator == null) { + LogUtil.d("playTone: mToneGenerator == null, tone: " + tone); + return; + } + + // Start the new tone (will stop any playing tone) + mToneGenerator.startTone(tone, durationMs); + } + } + + /** + * 手机震动 + * + * @param milliseconds + */ + public synchronized void vibrate(long milliseconds) { + Vibrator mVibrator = (Vibrator) getActivity().getSystemService( + Context.VIBRATOR_SERVICE); + if (mVibrator == null) { + return; + } + mVibrator.vibrate(milliseconds); + } + + public void showTakeStyle(final Context ctx) { + // 直接拍照,去掉视频 + if (patientUuid.contains(",")){ + handleTackPicture(); + }else { + ECListDialog dialog = new ECListDialog(ctx, R.array.take_chat_arr); + + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + LogUtil.d("onDialogItemClick", "position " + position); + + if (position == 0) { + + handleTackPicture(); + + } else if (position == 1) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + handleVideoRecord(); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + handleVideoRecord(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + handleVideoRecord(); + } + + } + } + }); + dialog.setTitle(R.string.take_title); + dialog.show(); + } +// + + } + + private void handleTackPicture() { + if (!FileAccessor.isExistExternalStore()) { + return; + } + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + File file = FileAccessor.getTackPicFilePath(); + if (file != null) { + /** + * 2018.11.24改 + * */ + Uri uri = getUriForFile(getActivity(),file); +// Uri uri = Uri.fromFile(file); + if (uri != null) { + intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + } + mFilePath = file.getAbsolutePath(); + } + startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE); + } + + /** + * 打开相机 + * 兼容7.0 + * + * @param + * @param + * @param + */ + public static void startActionCapture(Activity activity, File file, int requestCode) { + if (activity == null) { + return; + } + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + intent.putExtra(MediaStore.EXTRA_OUTPUT, getUriForFile(activity, file)); + activity.startActivityForResult(intent, requestCode); + } + + + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + + + + /** + * + */ + private void scrollListViewToLast() { + if (mListView != null) { + mListView.postDelayed(new Runnable() { + + @Override + public void run() { + int lastVisiblePosition = mListView + .getLastVisiblePosition(); + int count = mListView.getCount() - 1; + LogUtil.v(LogUtil.TAG + "ChattingFooterEventImpl", + "last visible/adapter=" + lastVisiblePosition + "/" + + count); + /* + * if(lastVisiblePosition > count - 1) { + * mListView.setSelectionFromTop(count - 1, 0); } else { + * mListView.setSelection(count); } + */ + + if (mListView.getCount() <= 1) { + SmoothScrollToPosition.setSelection(mListView, count, + true); + return; + } + SmoothScrollToPosition.setSelectionFromTop(mListView, + count - 1, 0, true); + } + }, 10L); + } + } + + private void handleSelectImageIntent() { + // Intent i = new Intent(Intent.ACTION_PICK, + // MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + // startActivityForResult(i, REQUEST_CODE_LOAD_IMAGE); + Intent intent = new Intent(getChattingActivity(), + PhotoAlbumActivity.class); + if (patientUuid.contains(",")){//群发消息,只能发一张图片 +// intent.putExtra("photonum", "1"); + intent.putExtra("photonum", "0"); + intent.putExtra("maxphotonum",1); + intent.putExtra("issendgroup",1); + }else { + intent.putExtra("photonum", "-1"); + + } + startActivityForResult(intent, REQUEST_CODE_LOAD_IMAGE); + } + + /** + * 消息重发 + * + * @param msg + * @param position + */ +// public void doResendMsgRetryTips(final ECMessage msg, final int position) { +// ECAlertDialog buildAlert = ECAlertDialog.buildAlert(getActivity(), +// R.string.chatting_resend_content, null, +// +// new DialogInterface.OnClickListener() { +// +// @Override +// public void onClick(DialogInterface dialog, int which) { +// resendMsg(msg, position); +// } +// }); +// buildAlert.setTitle(R.string.chatting_resend_title); +// buildAlert.show(); +// } + + private void keepScreenOnState(boolean screenOn) { + if (mListView != null) { + mListView.setKeepScreenOn(screenOn); + } + } + + /** + * @param msg + * @param position + */ +// protected void resendMsg(ECMessage msg, int position) { +// if (msg == null || position < 0 +// || mChattingAdapter.getItem(position) == null) { +// LogUtil.d(TAG, "ignore resend msg , msg " + msg + " , position " +// + position); +// return; +// } +// ECMessage message = mChattingAdapter.getItem(position); +// message.setTo(mRecipients); +// long rowid = IMChattingHelper.reSendECMessage(message); +// if (rowid != -1) { +// mChattingAdapter.notifyDataSetChanged(); +// } +// } + + /** + * 聊天插件功能实现 + */ + private class OnOnChattingPanelImpl implements CCPChattingFooter2.OnChattingPanelClickListener { + /** + * 图片 + * */ + @Override + public void OnTakingPictureRequest() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + showTakeStyle(getActivity()); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + showTakeStyle(getActivity()); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + showTakeStyle(getActivity()); + } + + hideBottomPanel(); + } + + /** + * 拍摄 + * */ + @Override + public void OnSelectImageReuqest() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + handleSelectImageIntent(); + hideBottomPanel(); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + handleSelectImageIntent(); + hideBottomPanel(); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + handleSelectImageIntent(); + hideBottomPanel(); + } + + } + + /** + * 快捷回复 + * */ + @Override + public void OnSelectFileRequest() { + // + // startActivityForResult(new Intent(getActivity(), + // FileExplorerActivity.class), 0x2a); + // hideBottomPanel(); + // startActivityForResult(new Intent(getActivity(), + // QuckMessageActivity.class),0x2a); + Intent intent = new Intent(getChattingActivity(), + QuckMessageActivity.class); + startActivityForResult(intent, 69); + } + + // protected void onActivityResult(int requestCode, int resultCode, + // Intent data) { + // // TODO Auto-generated method stub + // if(requestCode == 0x2a && data != null){ + // if(data.getStringExtra("message") != ""){ + // + // } + // } + // super.onActivityResult(requestCode, resultCode, data); + // } + // @Override + // public void OnSelectFileRequest() { + // // + // // startActivityForResult(new Intent(getActivity(), + // // FileExplorerActivity.class), 0x2a); + // // hideBottomPanel(); + // } + + private void hideBottomPanel() { + mChattingFooter.hideBottomPanel(); + } + + @Override + public void OnSelectVoiceRequest() { + + handleVoiceCall(); + hideBottomPanel(); + + } + /** + * 患教 + * */ + @Override + public void OnSelectVideoRequest() { +// handleVideoCall(); +// hideBottomPanel(); + //点击患教—弹框选择是“图文科普”还是“视频科普” +// 图文科普:搜索+最新最热排序【默认是最新】 +// 视频科普:视频种类选择(默认为乙肝)+搜索(只针对当前选择的种类视频搜索)+最新最热排序【默认是最新】 + delVisit(); +// Intent intent=new Intent(getChattingActivity(), PatientTeachActivity.class); +// startActivityForResult(intent, 70); + + } + + /** + * 停/出诊公告 + * */ + @Override + public void OnOutPatientRequest() { + + if (havestopout||haveutlist){ + dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "您是否发送您的出/停诊公告?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + title = SharePrefUtil.getString(UIUtils.getContext(), "realName", "") + "医生门诊详情"; +// url = Url.urlOutpatient + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + url = Url.urlOutpatientnew + SharePrefUtil.getString(UIUtils.getContext(), "uuid", ""); + content = "肝胆相照®肝胆病在线公共服务平台"; + imagUrl = "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png"; + videoKepu = true; + outInfo= true; + if (patientUuid.contains(",")) + { + if (pd==null){ + pd = new CustomProgressDialog(getActivity(), "请稍候"); + } + pd.show(); + } + new ParseHtmlTask(UIUtils.getContext()).execute(); + dilaog2.dismiss(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + + }else { + dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "您未添加出/停诊信息,是否添加?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startActivity(new Intent(getActivity(), OutofPatientNoticeActivity.class)); + dilaog2.dismiss(); + setIsFinish(true); + hideSoftKeyboard(); + finish(); + } + }); +// dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + + + } + + @Override + public void OnShoppingClick() { + showPopupWindow(); + } + + @Override + public void OnHospitalClick() { + String multi_point_status=SharePrefUtil.getString(getActivity(),"multi_point_status",""); + if("1".equals(multi_point_status)) + { + addGroupSendMsg("8", SharePrefUtil.getString(UIUtils.getContext(), "netphoto", ""),""); + } + else + { + addGroupSendMsg("7", SharePrefUtil.getString(UIUtils.getContext(), "netphoto", ""),""); + } + + } + } + private void showPopupWindow() { + final ECListDialog dialog = new ECListDialog(getActivity(), getActivity().getResources().getStringArray(R.array.chat_menu_shop)); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + senddetail(); + dialog.dismiss(); + } else { + + dialog.dismiss(); + + } + } + }); + + dialog.setTitleColor(getActivity().getResources().getColor(R.color.top_title)); + dialog.show(); + + } + private void senddetail() + { + ECAlertDialog dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "您是否发送该商品详情?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + addGroupSendMsg("6","",""); + dialog.dismiss(); + } + }); + + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + + public void delVisit() { + final ECListDialog dialog = new ECListDialog(getActivity(), new String[] { "图文科普", + "视频科普" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + Intent intent=new Intent(getChattingActivity(), PatientTeachActivity.class); + startActivityForResult(intent, 70); + dialog.dismiss(); + } else { + Intent intent=new Intent(getChattingActivity(), VideoTeachActivity.class); + startActivityForResult(intent, 70); + dialog.dismiss(); + + } + } + }); +// dialog.setTitle("温馨提示"); + dialog.setTitleColor(getActivity().getResources().getColor(R.color.top_title)); + dialog.show(); + } + /** + * 聊天功能面板(发送、录音、切换输入选项) + */ + private class OnChattingFooterImpl implements + CCPChattingFooter2.OnChattingFooterLinstener { + + ChattingActivity mActivity; + protected String mAmrPathName; + /** 保存当前的录音状态 */ + public int mRecordState = RECORD_IDLE; + /** 语音录制空闲 */ + public static final int RECORD_IDLE = 0; + /** 语音录制中 */ + public static final int RECORD_ING = 1; + /** 语音录制结束 */ + public static final int RECORD_DONE = 2; + /** 待发的ECMessage消息 */ +// private ECMessage mPreMessage; + /** 同步锁 */ + Object mLock = new Object(); + + public OnChattingFooterImpl(ChattingActivity ctx) { + mActivity = ctx; + } + + @Override + public void OnVoiceRcdInitReuqest() { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(getActivity(),Manifest.permission.RECORD_AUDIO)) { + //有访问录音 + sendVoice(); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 +// sendVoice(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO}); + } + + }else { + sendVoice(); + } + + + + } + + private void sendVoice() { + mAmrPathName = DemoUtils.md5(String.valueOf(System + .currentTimeMillis())) + ".amr"; + if (FileAccessor.getVoicePathName() == null) { + ToastUtil.showMessage("Path to file could not be created"); + mAmrPathName = null; + return; + } + keepScreenOnState(true); + if (getRecordState() != RECORD_ING) { + setRecordState(RECORD_ING); + + // 手指按下按钮,按钮给予振动或者声音反馈 + readyOperation(); + // 显示录音提示框 + mChattingFooter.showVoiceRecordWindow(findViewById( + R.id.chatting_bg_ll).getHeight() + - mChattingFooter.getHeight()); + +// final ECChatManager chatManager = SDKCoreHelper +// .getECChatManager(); +// if (chatManager == null) { +// return; +// } + mVoiceHandler.post(new Runnable() { + + @SuppressWarnings("deprecation") + @Override + public void run() { +// try { +// ECMessage message = ECMessage.createECMessage(ECMessage.Type.VOICE); +// message.setTo(mRecipients); +// ECVoiceMessageBody messageBody = new ECVoiceMessageBody( +// new File(FileAccessor.getVoicePathName(), +// mAmrPathName), 0); +// message.setBody(messageBody); +// mPreMessage = message; +// // 仅录制语音消息,录制完成后需要调用发送接口发送消息 +// chatManager +// .startVoiceRecording( +// message, +// new ECChatManager.OnRecordTimeoutListener() { +// @Override +// public void onRecordingTimeOut( +// long duration) { +// LogUtil.d(TAG, +// "onRecordingTimeOut"); +// // 如果语音录制超过最大60s长度,则发送 +// doProcesOperationRecordOver(false); +// } +// +// @Override +// public void onRecordingAmplitude( +// double amplitude) { +// // 显示声音振幅 +// if (mChattingFooter != null +// && getRecordState() == RECORD_ING) { +// mChattingFooter +// .showVoiceRecording(); +// mChattingFooter +// .displayAmplitude(amplitude); +// } +// } +// +// }); +// } catch (Exception e) { +// LogUtil.e(TAG, "请检查录音权限是否被禁止"); +// e.printStackTrace(); +// } + } + }); + } + } + + @Override + public void OnVoiceRcdStartRequest() { + // SDK完成初始化底层音频设备、开始采集音频数据 + mHandler.removeMessages(WHAT_ON_COMPUTATION_TIME); + mHandler.sendEmptyMessageDelayed(WHAT_ON_COMPUTATION_TIME, + TONE_LENGTH_MS); + } + + @Override + public void OnVoiceRcdCancelRequest() { + handleMotionEventActionUp(true); + } + + @Override + public void OnVoiceRcdStopRequest() { + handleMotionEventActionUp(false); + } + + @Override + public void OnSendTextMessageRequest(final CharSequence text) { + if (text != null + && text.toString().trim().startsWith("starttest://")) { + + handleTest(text.toString().substring("starttest://".length())); + return; + } else if (text != null + && text.toString().trim().startsWith("endtest://")) { + debugeTest = false; + return; + } + if (patientUuid.contains(",")) + { + if (pd==null){ + pd = new CustomProgressDialog(getActivity(), "请稍候"); + } + pd.show(); + new Thread(new Runnable() { + @Override + public void run() { + handleSendTextMessage(text); + } + }).start(); + } + else + { + handleSendTextMessage(text); + } + + + } + + @Override + public void OnUpdateTextOutBoxRequest(CharSequence text) { + + } + + @Override + public void OnSendCustomEmojiRequest(int emojiid, String emojiName) { + + } + + @Override + public void OnEmojiDelRequest() { + + } + + @Override + public void OnInEditMode() { + scrollListViewToLast(); + } + + @Override + public void onPause() { + stopPlayVoice(); + } + + @Override + public void onResume() { + + } + + @Override + public void release() { + mActivity = null; +// mPreMessage = null; + mLock = null; + } + + /** + * 处理Button 按钮按下抬起事件 + * + * @param doCancle + * 是否取消或者停止录制 + */ + private void handleMotionEventActionUp(final boolean doCancle) { + keepScreenOnState(false); + if (getRecordState() == RECORD_ING) { + doVoiceRecordAction(doCancle); + } + } + + /** + * 处理语音录制结束事件 + * + * @param doCancle + * 是否取消或者停止录制 + */ + private void doVoiceRecordAction(boolean doCancle) { + final boolean cancleVoice = doCancle; +// if (mChatManager != null) { +// mVoiceHandler.post(new Runnable() { +// +// @Override +// public void run() { +// // 停止或者取消普通模式语音 +// LogUtil.d(LogUtil.getLogUtilsTag(getClass()), +// "handleMotionEventActionUp stop normal record"); +// mChatManager +// .stopVoiceRecording(new ECChatManager.OnStopVoiceRecordingListener() { +// @Override +// public void onRecordingComplete() { +// LogUtil.d(TAG, "onRecordingComplete"); +// doProcesOperationRecordOver(cancleVoice); +// } +// }); +// } +// }); +// } + + /* + * ECChatManager manager = ECDevice.getECChatManager(); + * manager.stopVoiceRecording(new + * ECChatManager.OnStopVoiceRecordingListener() { + * + * @Override public void onRecordingComplete() { // 语音录制完成、调用上传消息接口 + * // 同上 } }); + */ + } + + /** + * 处理录音结束消息是否发送逻辑 + * + * @param cancle + * 是否取消发送 + */ + protected void doProcesOperationRecordOver(boolean cancle) { + if (getRecordState() == RECORD_ING) { + // 当前是否有正在录音的操作 + + // 定义标志位判断当前所录制的语音文件是否符合发送条件 + // 只有当录制的语音文件的长度超过1s才进行发送语音 + boolean isVoiceToShort = false; + File amrPathFile = new File(FileAccessor.getVoicePathName(), + mAmrPathName); + if (amrPathFile.exists()) { + mVoiceRecodeTime = DemoUtils.calculateVoiceTime(amrPathFile + .getAbsolutePath()); + if (!isRecordAndSend) { + if (mVoiceRecodeTime * 1000 < MIX_TIME) { + isVoiceToShort = true; + } + } + } else { + isVoiceToShort = true; + } + // 设置录音空闲状态 + setRecordState(RECORD_IDLE); + if (mChattingFooter != null) { + if (isVoiceToShort && !cancle) { + // 提示语音文件长度太短 + mChattingFooter.tooShortPopuWindow(); + return; + } + // 关闭语音录制对话框 + mChattingFooter.dismissPopuWindow(); + } + +// if (!cancle && mPreMessage != null) { +// if (!isRecordAndSend) { +// // 如果当前的录音模式为非Chunk模式 +// sendMessageWX("", 2); +// try { +// ECVoiceMessageBody body = (ECVoiceMessageBody) mPreMessage +// .getBody(); +// body.setDuration(mVoiceRecodeTime); +// long rowId; +// mPreMessage.setUserData(mType); +// if (mCustomerService) { +// rowId = CustomerServiceHelper +// .sendMCMessage(mPreMessage); +// } else { +// rowId = IMChattingHelper +// .sendECMessage(mPreMessage); +// } +// mPreMessage.setId(rowId); +// notifyIMessageListView(mPreMessage); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// return; +// } + + // 删除语音文件 + amrPathFile.deleteOnExit(); + // 重置语音时间长度统计 + mVoiceRecodeTime = 0; + } + } + + public int getRecordState() { + synchronized (mLock) { + return mRecordState; + } + } + + public void setRecordState(int state) { + synchronized (mLock) { + this.mRecordState = state; + } + } + + } + + private void stopPlayVoice() { + if (mChattingAdapter != null) { + // 停止播放语音 + mChattingAdapter.onPause(); +// mChattingAdapter.notifyDataSetChanged(); + } + } + + public void handleVideoCall() { + ECContacts contact = ContactSqlManager.getContact(mRecipients); + + if (contact == null) { + return; + } + // CCPAppManager.callVoIPAction(getActivity(), CallType.VIDEO, + // contact.getNickname(), contact.getContactid(),false); + + } + + public void handleVoiceCall() { + ECContacts contact = ContactSqlManager.getContact(mRecipients); + if (contact == null) { + return; + } + // CCPAppManager.callVoIPAction(getActivity(), CallType.VOICE, + // contact.getNickname(), contact.getContactid(),false); + + } + + // 调用系统打开视频 + private void handleVideoRecord() { + Intent intent = new Intent(); + intent.setClass(getActivity(), VideoRecordActivity.class); + startActivityForResult(intent, + GlobalConstant.ACTIVITY_FOR_RESULT_VIDEORECORD); + } + + public class ChattingAsyncTask extends ECAsyncTask { + + private String id; + /** + * @param context + * @param s + */ + public ChattingAsyncTask(Context context, String s) { + super(context); + this.id = s; + } + + @Override + protected Object doInBackground(Object... params) { + ImgInfo createImgInfo; + if (((String) params[0]).endsWith(".gif")) { + createImgInfo = ImgInfoSqlManager.getInstance() + .createGIFImgInfo((String) params[0]); + } else { + createImgInfo = ImgInfoSqlManager.getInstance().createImgInfo( + (String) params[0],(Context)params[1]); + } + return createImgInfo; + } + + @Override + protected void onPostExecute(Object result) { + if (result instanceof ImgInfo) { + ImgInfo imgInfo = (ImgInfo) result; + handleSendImageMessage(imgInfo,id); + } + } + + } + + public void setFinish(String uuid) { + LogUtil.i("关闭。。" + uuid + "=uuid==" + mRecipients); + String mUuid = mRecipients; + if (mRecipients.contains("#")) { + mUuid = mRecipients.split("#")[1]; + } + if (!TextUtils.isEmpty(uuid) && mUuid.equals(uuid)) { + setIsFinish(true); + hideSoftKeyboard(); + this.finish(); + } + } + + @Override + public void onClick(View v) { + + switch (v.getId()) { + case R.id.btn_left: + setIsFinish(true); + hideSoftKeyboard(); + finish(); + break; + case R.id.btn_right: + + if (!isPeerChat()) { + // 如果是点对点聊天 + // ECContacts contact = + // ContactSqlManager.getContact(mRecipients); + // Intent intent = new Intent(getActivity(), + // ContactDetailActivity.class); + // intent.putExtra(ContactDetailActivity.RAW_ID, + // contact.getId()); + // startActivityForResult(intent, REQUEST_VIEW_CARD); + // 患者详情页面 + Intent intent = new Intent(UIUtils.getContext(), + BigPatientActivity.class); + intent.putExtra("realName", mUsername); + intent.putExtra("isFriend",isfriend ); + String uuid = mRecipients; + if (mRecipients.contains("#")) { + String[] split = mRecipients.split("#"); + uuid = split[1]; + } + intent.putExtra("patientUuid", uuid); + startActivity(intent);// 启动患者详情界面 + + return; + } + // 群组聊天室 +// Intent intent = new Intent(getActivity(), GroupInfoActivity.class); +// intent.putExtra(GroupInfoActivity.GROUP_ID, mRecipients); +// startActivityForResult(intent, REQUEST_VIEW_CARD); + break; + case R.id.btn_right2://右上角图标2,卡片管理 + Intent intent2 = new Intent(getActivity(), PatientEditActivity.class); + String uuid2 = mRecipients; + if (mRecipients.contains("#")) { + String[] split = mRecipients.split("#"); + uuid2 = split[1]; + } + intent2.putExtra("patientUuid", uuid2); + startActivity(intent2); + break; + case R.id.btn_right3://右上角图标3,选择群发患者 + choosePatient(); + break; + case R.id.btn_middle: + if (mListView != null) { +// getTopBarView().post(new Runnable() { +// @Override +// public void run() { +// mListView.setSelection(mChattingAdapter.getCount()); +// } +// }); + } + break; + case R.id.text_right: + if(CommonUtil.BigModule()) + { + choosePatient(); + return; + } + RequestParams params = new RequestParams(); + params.addBodyParameter("uuid", uuid); + LogUtil.i("关闭:" + "loadUrl:" + loadUrl + ",Uuid:" + uuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + // BaseBean bean = + // GsonTools.fromGsonToBean(info.result,BaseBean.class); + + JSONObject objs; + String retcode = ""; + String message = ""; + try { + objs = new JSONObject(info.result); + retcode = objs.getString("code"); + message = objs.getString("message"); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showToast("关闭失败,请重试"); + } + if ("1".equals(retcode)) { + String closeText = "您已关闭会话,谢谢您的回答!"; + if (isAdded()) { + closeText = getResources().getString( + R.string.close_public_service); + } + ToastUtil.showToast(closeText); + mChattingFooter.goneChatFooterPanel(); + mChattingFooter.setVisibility(View.GONE); + getTopBarView().setRightBtnEnable(false); + // 保存关闭的uuid + SharePrefUtil.saveBoolean(UIUtils.getContext(), + uuid, true); + setTimeShower(closeText); + } else { + ToastUtil.showToast(message); + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + ToastUtil.showToast("关闭会话失败,请重试"); + } + }); + break; + default: + break; + } + } + private void choosePatient() { + final ECListDialog dialog = new ECListDialog(getActivity(), new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(getActivity(), + GroupChatSelectPatientActivity.class); + startActivityForResult(intent, REQUESTCODE_OK); + dialog.dismiss(); + } else { + + Intent intent = new Intent(getActivity(), + GroupSelectParentActivity.class); + startActivityForResult(intent, REQUESTCODE_OK); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(getActivity().getResources().getColor(R.color.top_title)); + dialog.show(); + } + /** + * 设置标签 setTimeShower + * + * @param text + * void + */ + public void setTimeShower(String text) { + mChattingAdapter.setTimeShower(text); + mChattingAdapter.notifyChange(); + } + + /** + * 设置已经抢答公益咨询 setShower + * + * @param text + * void + */ + public void setShower(String text) { + if (iv_chatting_empty != null && tv_chatting_empty != null + && ll_chatting_empty != null) { + iv_chatting_empty.setVisibility(View.GONE); + tv_chatting_empty.setText(text); + mListView.setEmptyView(ll_chatting_empty); + } + mChattingAdapter.notifyChange(); + } + + private OnRefreshAdapterDataListener mOnRefreshAdapterDataListener = new OnRefreshAdapterDataListener() { + + @Override + public void refreshData() { + if (getActivity() == null || getActivity().isFinishing()) { + return; + } + int size = mChattingAdapter.increaseCount(); +// mChattingAdapter.checkTimeShower(); +// mChattingAdapter.notifyChange(); +// int count = mChattingAdapter.getCount() - size; + + mListView.setSelectionFromTop( + size + 1, + mListViewHeadView.getHeight() + + mECPullDownView.getTopViewHeight()); + } + + }; + + private OnListViewBottomListener mOnListViewBottomListener = new OnListViewBottomListener() { + + @Override + public boolean getIsListViewToBottom() { + View lastChildAt = mListView + .getChildAt(mListView.getChildCount() - 1); + if (lastChildAt == null) { + return false; + } + if ((lastChildAt.getBottom() <= mListView.getHeight()) + && mListView.getLastVisiblePosition() == mListView + .getAdapter().getCount() - 1) { + return true; + } + return false; + } + }; + + private OnListViewTopListener mOnListViewTopListener = new OnListViewTopListener() { + + @Override + public boolean getIsListViewToTop() { + View topChildAt = mListView.getChildAt(mListView + .getFirstVisiblePosition()); + return ((topChildAt != null) && (topChildAt.getTop() == 0)); + } + }; + + private AdapterView.OnItemClickListener mOnItemClickListener = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + LogUtil.v("ppppppppppp" + position); + + } + + }; + + private AdapterView.OnItemLongClickListener mOnItemLongClickListener = new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + final int itemPosition = position; + if (mChattingAdapter != null) { + int headerViewsCount = mListView.getHeaderViewsCount(); + if (itemPosition < headerViewsCount) { + return false; + } + int _position = itemPosition - headerViewsCount; + +// if (mChattingAdapter == null +// || mChattingAdapter.getItem(_position) == null) { +// return false; +// } +// ECMessage item = mChattingAdapter.getItem(_position); + String title = mUsername; + int arrRes = R.array.chat_menu_left; +// item.setSessionId(mRecipients); +// if (item.getDirection() == ECMessage.Direction.SEND) { +// // title = CCPAppManager.getClientUser().getUserName(); +// title = "我"; +// if (isVail(item)) { +// arrRes = R.array.chat_menu; +// } else { +// arrRes = R.array.chat_menu_no_back; +// } +// } + ECListDialog dialog; +// if (item.getType() == ECMessage.Type.TXT) { +// // 文本有复制功能 +// dialog = new ECListDialog(getActivity(), arrRes); +// } else { + arrRes = R.array.chat_menu_left5; +// if (item.getDirection() == ECMessage.Direction.SEND) { +// +// if (isVail(item)) { +// arrRes = R.array.chat_menu_left4; +// } else { +// arrRes = R.array.chat_menu_left5; +// } +// +// } + dialog = new ECListDialog(getActivity(), arrRes); + // dialog = new ECListDialog(getActivity(), + // new String[] { getString(R.string.menu_del) }); + } +// final int arrFial = arrRes; +// String[] resarr = getResources().getStringArray(arrFial); +// dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { +// @Override +// public void onDialogItemClick(Dialog d, int position) { +// handleContentMenuClick(itemPosition, position, arrFial); +// } +// }); +// dialog.setTitle(null);// 标题 +// dialog.show(); +// return true; +// } + return false; + } + }; + +// private boolean isVail(ECMessage msg) { +// +// if (msg == null) { +// return false; +// } +// +// long time = System.currentTimeMillis(); +// return time - msg.getMsgTime() <= 1000 * 120; +// } + + private Boolean handleContentMenuClick(int convresion, int position, int arr) { + if (mChattingAdapter != null) { + int headerViewsCount = mListView.getHeaderViewsCount(); + if (convresion < headerViewsCount) { + return false; + } + int _position = convresion - headerViewsCount; + +// if (mChattingAdapter == null|| mChattingAdapter.getItem(_position) == null) { +// return false; +// } +// final ECMessage msg = mChattingAdapter.getItem(_position); +// msg.setSessionId(mRecipients); + + String[] resarr = getResources().getStringArray(arr); + String i = resarr[position]; + if ("删除".endsWith(i)) { +// doDelMsgTips(msg, _position); + + } else if ("撤回".endsWith(i)) { + +// ECChatManager chatManager = SDKCoreHelper.getECChatManager(); +// if (chatManager == null || msg == null) { +// return null; +// } +// if (msg.getDirection() == ECMessage.Direction.SEND) { +// +// chatManager.revokeMessage(msg,new ECChatManager.OnRevokeMessageListener() { +// @Override +// public void onRevokeMessage(ECError error, +// ECMessage message) { +// if (error.errorCode == SdkErrorCode.REQUEST_SUCCESS) { +// ToastUtil.showMessage("撤回成功"); +// IMessageSqlManager.insertSysMessage( +// "你撤回了一条消息", mRecipients); +// IMessageSqlManager.delSingleMsg(msg.getMsgId()); +// mChattingAdapter.notifyChange(); +// } else { +// ToastUtil.showMessage("撤回失败" +// + error.errorCode); +// } +// } +// }); +// +// } + + } else if ("复制消息".endsWith(i)) { + + try { +// if (msg.getType() == ECMessage.Type.TXT) { +// ECTextMessageBody body = (ECTextMessageBody) msg +// .getBody(); +// ClipboardUtils.copyFromEdit(getActivity(), +// getString(R.string.app_pic), body.getMessage()); +// ToastUtil.showMessage(R.string.app_copy_ok); +// } + } catch (Exception e) { + LogUtil.e(TAG, "clip.setText error "); + } + + } + // switch (position) { + // case 0: // 删除 + // doDelMsgTips(msg, _position); + // + // break; + // case 1: // 复制 + // try { + // if (msg.getType() == ECMessage.Type.TXT) { + // ECTextMessageBody body = (ECTextMessageBody) msg + // .getBody(); + // ClipboardUtils.copyFromEdit(getActivity(), + // getString(R.string.app_pic), body.getMessage()); + // ToastUtil.showMessage(R.string.app_copy_ok); + // } + // } catch (Exception e) { + // LogUtil.e(TAG, "clip.setText error "); + // } + // break; + // default: + // break; + // } + } + return null; + } + + /** + * + * @param msg + * @param position + */ +// public void doDelMsgTips(final ECMessage msg, final int position) { +// ECAlertDialog buildAlert = ECAlertDialog.buildAlert(getActivity(), +// R.string.app_delete_tips, null, +// new DialogInterface.OnClickListener() { +// +// @Override +// public void onClick(DialogInterface dialog, int which) { +// mHandlerHelper.postRunnOnThead(new Runnable() { +// @Override +// public void run() { +// IMessageSqlManager.delSingleMsg(msg.getMsgId()); +// getActivity().runOnUiThread(new Runnable() { +// @Override +// public void run() { +// mChattingAdapter.notifyChange(); +// } +// }); +// } +// }); +// } +// }); +// buildAlert.setTitle("提示"); +// buildAlert.show(); +// } + + public static class SmoothScrollToPosition { + public static void setSelectionFromTop(ListView listview, int position, + int y, boolean smooth) { + if (listview == null) { + return; + } + LogUtil.i(TAG, "setSelectionFromTop position " + position + + " smooth " + smooth); + listview.setItemChecked(position, true); + listview.setSelectionFromTop(position, y); + } + + public static void setSelection(ListView listview, int position, + boolean smooth) { + if (listview == null) { + return; + } + LogUtil.i(TAG, "setSelection position " + position + " smooth " + + smooth); + listview.setItemChecked(position, true); + listview.setSelection(position); + } + } + + // 消息备份到后台 + + // public void PushIm(final Object obj, final String type) { String content + // = null; if ("1".equals(type)) { content = obj.toString(); } else if + // ("2".equals(type)) { try { content = + // Base64Util.FiletoBase64((String)obj); } catch (Exception e) { // TODO + // Auto-generated catch block e.printStackTrace(); } } else if + // ("4".equals(type)) { content = Base64Util.BitmaptoBase64((Bitmap)obj); } + // else{ content = Base64Util.ObjtoBase64(obj); } final String c = content; + // LogUtil.i("obj:"+obj+" type:"+type+"\n编码的content:"+content); + // + // final String loadUrl = Url.getpushIM; final String receiveUuid = + // "0e729a84c3824fcda974b262be0b270b"; final String sendUuid = + // SharePrefUtil.getString(getApplicationContext(), "uuid", ""); // + // RequestParams params = new RequestParams(); // + // params.addBodyParameter("sendUuid", sendUuid); // + // params.addBodyParameter("receiveUuid", receiveUuid); // + // params.addBodyParameter("type", type);//消息类型,1:文本消息,2:语音消息,4:图片消息; // + // params.addBodyParameter("sendType", "2");//发送方类型 1.患者 2.专家必填 // + // params.addBodyParameter("receiveType", "1");//接收方类型 1.患者 2.专家 // + // params.addBodyParameter("content", content); // + // params.addBodyParameter("chatFrom", "2");//来源(1.公益咨询 2.随访 3.vip) // + // DemoUtils.loadData(HttpMethod.POST, loadUrl, params, new + // RequestCallBack() { // // @Override // public void + // onSuccess(ResponseInfo info) { // // + // LogUtil.i("消息发送成功:"+"sendUuid:"+sendUuid+",receiveUuid:"+receiveUuid); // + // // } // // @Override // public void onFailure(HttpException arg0, String + // arg1) { // // + // LogUtil.v("消息发送成失败:"+"sendUuid:"+sendUuid+",receiveUuid:"+receiveUuid); + // // } // }); + // LogUtil.i("消息发送:sendUuid:"+sendUuid+",receiveUuid:"+receiveUuid); new + // Thread(new Runnable() { + // + // @Override public void run() { // TODO Auto-generated method stub try { + // List parameters = new + // ArrayList(); BasicNameValuePair value01 = new + // BasicNameValuePair("sendUuid",sendUuid); BasicNameValuePair value02 = new + // BasicNameValuePair("receiveUuid", receiveUuid); BasicNameValuePair + // value03 = new BasicNameValuePair("type", + // type);//消息类型,1:文本消息,2:语音消息,4:图片消息; BasicNameValuePair value04 = new + // BasicNameValuePair("sendType", "2");//发送方类型 1.患者 2.专家必填 + // BasicNameValuePair value05 = new BasicNameValuePair("receiveType", + // "1");//接收方类型 1.患者 2.专家 BasicNameValuePair value06 = new + // BasicNameValuePair("content", c); BasicNameValuePair value07 = new + // BasicNameValuePair("chatFrom", "2");//来源(1.公益咨询 2.随访 3.vip) + // parameters.add(value01); parameters.add(value02); + // parameters.add(value03); parameters.add(value04); + // parameters.add(value05); parameters.add(value06); + // parameters.add(value07); HttpResult httpResult = + // HttpHelper.post(loadUrl,parameters);// 请求网络 String str = + // httpResult.getString();// str为服务器返回的json串 + // + // if (TextUtils.isEmpty(str)) { LogUtil.i("发送消息失败str"+str); return; } + // Message msg = Message.obtain(); msg.obj = str; JSONObject objs = new + // JSONObject(str); String retcode = objs.getString("code"); String message + // = objs.getString("message"); + // LogUtil.i("发送消息str:"+str+",retcode:"+retcode+",message:"+message); + // + // } catch (Exception e) { // TODO Auto-generated catch block + // e.printStackTrace(); LogUtil.i("发送消息失败:"+e.toString()); } } }).start(); } + + // 1:文本消息,2:语音消息,3:视频消息,4:图片消息,5:位置消息,6:文件,26:指令消息 + public void sendMessageWX(final String content, final int type) { + + if (StringUtil.isEmpty(patientUuid)) { + patientUuid = mRecipients; + + if (mRecipients.contains("#")) { + String[] split = mRecipients.split("#"); + patientUuid = split[1]; + + } + } + if (patientUuid.contains("#")) { + String[] split = mRecipients.split("#"); + patientUuid = split[1]; +// Log.d("gdxzname","patientUuid7 "+patientUuid); + } + final String uuids = SharePrefUtil.getString(getActivity(), "uuid", ""); + new Thread(new Runnable() { + + @Override + public void run() { + try { + List parameters = new ArrayList(); + BasicNameValuePair value01 = new BasicNameValuePair( + "expert_uuid", uuids);// + BasicNameValuePair value02 = new BasicNameValuePair( + "patient_uuid", patientUuid);// + BasicNameValuePair value03 = new BasicNameValuePair( + "content", content);// + BasicNameValuePair value04 = new BasicNameValuePair("type", + type + "");// + BasicNameValuePair value05 = new BasicNameValuePair( + "chatType", chatType + "");// + BasicNameValuePair value06 = new BasicNameValuePair( + "consult_uuid", uuid);//appId + BasicNameValuePair value07 = new BasicNameValuePair( + "appId", "wxa4132ef4701ac5e4");// + parameters.add(value01); + parameters.add(value02); + parameters.add(value03); + parameters.add(value04); + parameters.add(value05); + parameters.add(value06); + parameters.add(value07); + HttpResult httpResult = HttpHelper.post(Url.getpushChat, + parameters);// 请求网络 + String str = httpResult.getString();// str为服务器返回的json串 + } catch (Exception e) { + e.printStackTrace(); + // handler.sendEmptyMessage(ERROR); + } + } + }).start(); + } + + /**************************** 在线客服 ****************************/ + @Override + public void onServiceStart(String event) { + ToastUtil.showMessage("开启咨询[" + event + "]"); + } + + @Override + public void onServiceFinish(String even) { + + } + +// @Override +// public void onError(ECError error) { +// +// } + + /**************************** 在线客服 ****************************/ + + /******************************************* DEBUGE START *********************************************/ + private void handleTest(final String count) { + if (TextUtils.isEmpty(count) || count.trim().length() == 0) { + ToastUtil.showMessage("测试协议失败,测试消息条数必须大于0"); + return; + } + final String text = getString(R.string.app_test_message); + // final String text = getTestText(); + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(getActivity(), + "是否开始发送" + count + "条测试消息\n[" + text + "]?", + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { +// mHandlerHelper.postRunnOnThead(new Runnable() { +// @Override +// public void run() { +// debugeTest = true; +// doStartTest(count, text); +// } +// }); + mChattingFooter.setEditText("endtest://"); + } + }); + buildAlert.setTitle("开发模式"); + buildAlert.show(); + + } + + private boolean debugeTest = false; + private boolean isPublicServiceClose = false; + + private void doStartTest(String count, final String text) { + try { + final int num = Integer.parseInt(count); +// ECHandlerHelper handlerHelper = new ECHandlerHelper(); +// handlerHelper.postRunnOnThead(new Runnable() { +// @Override +// public void run() { +// ToastUtil.showMessage("开始测试."); +// for (int i = 0; i < num && debugeTest; i++) { +// try { +// ToastUtil.showMessage("正在发送第[" + (i + 1) + "]条测试消息"); +// final String pretext = "[第" + (i + 1) + "条]\n" +// + text; +// getActivity().runOnUiThread(new Runnable() { +// @Override +// public void run() { +// handleSendTextMessage(pretext); +// } +// }); +// Thread.sleep(10); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// mHandler.post(new Runnable() { +// @Override +// public void run() { +// mChattingFooter.setEditTextNull(); +// ToastUtil.showMessage("测试结束..."); +// } +// }); +// } +// }); + } catch (Exception e) { + } + } + + public static String getTestText() { + return "肝胆相照"; + } + + /******************************************* DEBUGE END *********************************************/ + + public interface OnChattingAttachListener { + void onChattingAttach(); + } + + private ECProgressDialog mPostingdialog; + + public void showProcessDialog() { + if (mPostingdialog != null && mPostingdialog.isShowing()) { + return; + } + mPostingdialog = new ECProgressDialog(getActivity(), + R.string.downloading); + mPostingdialog.show(); + } + + /** + * 关闭对话框 + */ + public void dismissPostingDialog() { + if (mPostingdialog == null || !mPostingdialog.isShowing()) { + return; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + + ToastUtil.showMessage("下载完成,再次点击即可播放"); + } + RichTextBean richTextBean; + public String imagUrl; + public String url; + public String title; + public String content; + public class ParseHtmlTask extends ECAsyncTask { + + public ParseHtmlTask(Context context) { + super(context); + } + + @Override + protected Object doInBackground(Object[] params) { + + try { + richTextBean = new RichTextBean(); + richTextBean.setUrl(url); + richTextBean.setPicUrl(imagUrl); + richTextBean.setTitle(title); + richTextBean.setDesc(content); + } catch (Exception e) { + e.printStackTrace(); + } + return richTextBean; + } + + @Override + protected void onPostExecute(Object o) { + + if (o != null && o instanceof RichTextBean) { + RichTextBean bean = (RichTextBean) o; + handleSendMessage(bean); + } + } + } + private void handleSendMessage(final RichTextBean bean) { + ImageLoader.getInstance().loadImage(bean.getPicUrl(), + new ImageLoadingListener() { + @Override + public void onLoadingStarted(String s, View view) { + + } + + @Override + public void onLoadingCancelled(String s, View view) { + + } + + @Override + public void onLoadingFailed(String imageUri, View view, + FailReason failReason) { + if (videoKepu){ + if (outInfo){ + addGroupSendMsg("5","",""); + }else + addGroupSendMsg("4",richtextUuid,""); + }else { + addGroupSendMsg("3",richtextUuid,""); + } + // TODO Auto-generated method stub +// IMChattingHelper.getInstance() +// .handleSendRichTextMessage(bean, mRecipients,mType,getActivity()); + } + + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + BitmapUtil.saveBitmapToLocalSDCard(loadedImage,bean.getPicUrl(),getActivity()); + if (patientUuid.contains(",")) { +// List list = new ArrayList<>(); +// String[] split = patientUuid.split(","); +// for (int j = 0; j < split.length; j++) { +// if (!StringUtil.isEmpty(split[j])&&!list.contains(split[j])) { +// list.add(split[j]); +// IMChattingHelper.getInstance().handleSendRichTextMessage(bean, Constant.Patient_AppKey+split[j], mType, getActivity()); +// } +// } + //添加群发记录富文本 + if (videoKepu){ + if (outInfo){ + addGroupSendMsg("5","",""); + }else + addGroupSendMsg("4",richtextUuid,""); + }else { + addGroupSendMsg("3",richtextUuid,""); + } + + }else { + LogUtil.i("mType = "+mType); + IMChattingHelper.getInstance().handleSendRichTextMessage(bean, mRecipients, mType, getActivity()); + } + } + }); + + } + private void needreport(String number,String belogn) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("group_message"); + rbens.setNumber(number); + rbens.setBelong(belogn); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(getActivity(), ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + getActivity().startService(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListAdapter2.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListAdapter2.java new file mode 100644 index 0000000..451889f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListAdapter2.java @@ -0,0 +1,420 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.content.res.ColorStateList; +import android.database.Cursor; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; + +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.MediaPlayTools; +import cn.shangyu.gdxzExpert.ecdemo.storage.AbstractSQLManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ConversationSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.BaseChattingRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ChattingRowType; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ChattingSystemRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DescriptionRxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DescriptionTxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.FileRxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.FileTxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.IChattingRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImageRxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImageTxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.RichTextRxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.RichTextTxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.VoiceRxRow; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.VoiceTxRow; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android Created by Jorstin on + * 2015/4/8. + */ +public class ChattingListAdapter2 { + + private boolean isFriend = true; + protected View.OnClickListener mOnClickListener; + /** 当前语音播放的Item */ + public int mVoicePosition = -1; + /** 需要显示时间的Item position */ + private ArrayList mShowTimePosition; + /** 初始化所有类型的聊天Item 集合 */ + private HashMap mRowItems; + /** 时间显示控件的垂直Padding */ + private int mVerticalPadding; + /** 时间显示控件的横向Padding */ + private int mHorizontalPadding; + /** 消息联系人名称显示颜色 */ + private ColorStateList[] mChatNameColor; + private String mUsername; + private long mThread = -1; + private int mMsgCount = 18; + private int mTotalCount = mMsgCount; + private boolean showCustomTimer = false; + private String showCustomText = null; + +// public ChattingListAdapter2(Context ctx, ECMessage ecMessage, String user) { +// this(ctx, ecMessage, user, -1, false); +// } + + /** + * 构造方法 + * + * @param ctx + * @param ecMessage + * @param isPublicServiceClose + */ +// public ChattingListAdapter2(Context ctx, ECMessage ecMessage, String user, +// long thread, boolean isClose) { +// super(ctx, ecMessage); +// mUsername = user; +// mThread = thread; +// showCustomTimer = isClose;// 公益咨询是否关闭 +// mRowItems = new HashMap(); +// mShowTimePosition = new ArrayList(); +// initRowItems(); +// +// // 初始化聊天消息点击事件回调 +// mOnClickListener = new ChattingListClickListener( +// (ChattingActivity) mContext, null); +// mVerticalPadding = mContext.getResources().getDimensionPixelSize( +// R.dimen.SmallestPadding); +// mHorizontalPadding = mContext.getResources().getDimensionPixelSize( +// R.dimen.LittlePadding); +// mChatNameColor = new ColorStateList[] { +// mContext.getResources().getColorStateList(R.color.white), +// mContext.getResources().getColorStateList( +// R.color.chatroom_user_displayname_color) }; +// +// } +// public ChattingListAdapter2(Context ctx, ECMessage ecMessage, String user, +// long thread, boolean isClose,boolean isFriend) { +// super(ctx, ecMessage); +// mUsername = user; +// mThread = thread; +// this.isFriend = isFriend; +// showCustomTimer = isClose;// 公益咨询是否关闭 +// mRowItems = new HashMap(); +// mShowTimePosition = new ArrayList(); +// initRowItems(); +// +// // 初始化聊天消息点击事件回调 +// mOnClickListener = new ChattingListClickListener( +// (ChattingActivity) mContext, null); +// mVerticalPadding = mContext.getResources().getDimensionPixelSize( +// R.dimen.SmallestPadding); +// mHorizontalPadding = mContext.getResources().getDimensionPixelSize( +// R.dimen.LittlePadding); +// mChatNameColor = new ColorStateList[] { +// mContext.getResources().getColorStateList(R.color.white), +// mContext.getResources().getColorStateList( +// R.color.chatroom_user_displayname_color) }; +// +// } + public long setUsername(String username) { + this.mUsername = username; + mThread = ConversationSqlManager + .querySessionIdForBySessionId(mUsername); + return mThread; + } + + public long getThread() { + return mThread; + } + + public int increaseCount() { + if (isLimitCount()) { + return 0; + } + mMsgCount += 18; + if (mMsgCount <= mTotalCount) { + return 18; + } + return mTotalCount % 18; + } + + public boolean isLimitCount() { + return mTotalCount < mMsgCount; + } + + + protected void notifyChange() { + this.mTotalCount = IMessageSqlManager.qureyIMCountForSession(mThread); + // 初始化一个空的数据列表 +// setCursor(IMessageSqlManager.queryIMessageCursor(mThread, mMsgCount)); + Cursor cursor = IMessageSqlManager.queryIMessageCursor(mThread, mMsgCount); + if(cursor.moveToFirst()){//判断数据表里有数据 + while(cursor.moveToNext()){//遍历数据表中的数据 + String ID = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.ID)); + String MESSAGE_ID = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.MESSAGE_ID)); + String OWN_THREAD_ID = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.OWN_THREAD_ID)); + String CREATE_DATE = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.CREATE_DATE)); + String RECEIVE_DATE = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.RECEIVE_DATE)); + String sender = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.sender)); + String BODY = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.BODY)); + String USER_DATA = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.USER_DATA)); + String FILE_URL = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.FILE_URL)); + String FILE_PATH = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.FILE_PATH)); + String SEND_STATUS = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.SEND_STATUS)); + String MESSAGE_TYPE = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.MESSAGE_TYPE)); + String READ_STATUS = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.READ_STATUS)); + String VERSION = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.VERSION)); + String DURATION = cursor.getString(cursor.getColumnIndex(AbstractSQLManager.IMessageColumn.DURATION)); + LogUtils.i("ID = "+ID); + LogUtils.i("MESSAGE_ID = "+MESSAGE_ID); + LogUtils.i("OWN_THREAD_ID = "+OWN_THREAD_ID); + LogUtils.i("CREATE_DATE = "+CREATE_DATE); + LogUtils.i("RECEIVE_DATE = "+RECEIVE_DATE); + LogUtils.i("sender = "+sender); + LogUtils.i("BODY = "+BODY); + LogUtils.i("USER_DATA = "+USER_DATA); + LogUtils.i("FILE_URL = "+FILE_URL); + LogUtils.i("FILE_PATH = "+FILE_PATH); + LogUtils.i("SEND_STATUS = "+SEND_STATUS); + LogUtils.i("MESSAGE_TYPE = "+MESSAGE_TYPE); + LogUtils.i("READ_STATUS = "+READ_STATUS); + LogUtils.i("VERSION = "+VERSION); + LogUtils.i("DURATION = "+DURATION); + } + cursor.close(); + } + +// super.notifyDataSetChanged(); + } + + + protected void initCursor() { + // 初始化一个空的数据列表 + if (mThread > 0) { + notifyChange(); + return; + } +// setCursor(IMessageSqlManager.getNullCursor()); + } + +// @Override +// protected ECMessage getItem(ECMessage ecMessage, Cursor cursor) { +// return IMessageSqlManager.packageMessage(cursor); +// } + + public View getView(int position, View convertView, ViewGroup parent) { +// ECMessage item = getItem(position); +// LogUtils.i("ChattingListAdapter2 item.getMsgId = "+item.getMsgId()); +// if (item == null) { +// return null; +// } +// boolean showTimer = false; +// if (position == 0) { +// showTimer = true; +// } +// if (position != 0) { +// ECMessage previousItem = getItem(position - 1); +// +// if (mShowTimePosition.contains(item.getMsgId()) +// || (item.getMsgTime() - previousItem.getMsgTime() >= 180000L)) { +// showTimer = true; +// +// } +// } +// +// int messageType = ChattingsRowUtils.getChattingMessageType(item,item.getUserData()); +// LogUtils.i("getUserData = "+item.getUserData()+",messageType = "+messageType); +// BaseChattingRow chattingRow = getBaseChattingRow(messageType,item.getDirection() == ECMessage.Direction.SEND); +// View chatView = chattingRow.buildChatView( +// LayoutInflater.from(mContext), convertView); +// BaseHolder baseHolder = (BaseHolder) chatView.getTag(); +// +// if (showTimer) { +// baseHolder.getChattingTime().setVisibility(View.VISIBLE); +// baseHolder.getChattingTime().setBackgroundResource( +// R.drawable.chat_tips_bg); +// +// baseHolder.getChattingTime().setText( +// DateUtil.getDateString(item.getMsgTime(), +// DateUtil.SHOW_TYPE_CALL_LOG).trim()); +// +// baseHolder.getChattingTime().setTextColor(mChatNameColor[0]); +// baseHolder.getChattingTime().setPadding(mHorizontalPadding, +// mVerticalPadding, mHorizontalPadding, mVerticalPadding); +// } else if (showCustomTimer && position == getCount() - 1) {// 设置自定义标签 +// baseHolder.getChattingTime().setVisibility(View.VISIBLE); +// baseHolder.getChattingTime().setBackgroundResource( +// R.drawable.chat_tips_bg); +// if (!TextUtils.isEmpty(showCustomText)) { +// baseHolder.getChattingTime().setText(showCustomText); +// } else { +// baseHolder.getChattingTime().setText( +// mContext.getResources().getString( +// R.string.close_public_service)); +// } +// baseHolder.getChattingTime().setTextColor(mChatNameColor[0]); +// baseHolder.getChattingTime().setPadding(mHorizontalPadding, +// mVerticalPadding, mHorizontalPadding, mVerticalPadding); +// } else { +// baseHolder.getChattingTime().setVisibility(View.GONE); +// baseHolder.getChattingTime().setShadowLayer(0.0F, 0.0F, 0.0F, 0); +// baseHolder.getChattingTime().setBackgroundResource(0); +// } +// if(messageType==110){ +// baseHolder.getChattingTime().setVisibility(View.VISIBLE); +// } +// chattingRow.buildChattingBaseData(mContext, baseHolder, item, position,isFriend); +// +// if (baseHolder.getChattingUser() != null +// && baseHolder.getChattingUser().getVisibility() == View.VISIBLE) { +// baseHolder.getChattingUser().setTextColor(mChatNameColor[1]); +// baseHolder.getChattingUser().setShadowLayer(0.0F, 0.0F, 0.0F, 0); +// } +// return chatView; + return null; + } + + /** + * 消息类型数 + */ + + public int getViewTypeCount() { + return ChattingRowType.values().length; + } + + /** + * 返回消息的类型ID + + public int getItemViewType(int position) { +// ECMessage message = getItem(position); +// return getBaseChattingRow( +// ChattingsRowUtils.getChattingMessageType(message, +// message.getUserData()), +// message.getDirection() == ECMessage.Direction.SEND) +// .getChatViewType(); + return 0; + } + + public void checkTimeShower() { + if (getCount() > 0) { +// ECMessage item = getItem(0); +// if (item != null) { +// mShowTimePosition.add(item.getMsgId()); +// } + } + } + + /** + * 设置标签 setTimeShower + * + * @param text + * void + */ + public void setTimeShower(String text) { + if (!TextUtils.isEmpty(text)) { + showCustomTimer = true; + showCustomText = text; + } + // if (showCustomTimer && !TextUtils.isEmpty(showCustomText)) {//设置自定义标签 + // baseHolder.getChattingTime().setVisibility(View.VISIBLE); + // baseHolder.getChattingTime().setBackgroundResource(R.drawable.chat_tips_bg); + // baseHolder.getChattingTime().setText(showCustomText); + // baseHolder.getChattingTime().setTextColor(mChatNameColor[0]); + // baseHolder.getChattingTime().setPadding(mHorizontalPadding, + // mVerticalPadding, mHorizontalPadding, mVerticalPadding); + // } + } + + /** + * 初始化不同的聊天Item View + */ + void initRowItems() { + mRowItems.put(Integer.valueOf(1), new ImageRxRow(1)); + mRowItems.put(Integer.valueOf(2), new ImageTxRow(2)); + mRowItems.put(Integer.valueOf(3), new FileRxRow(3)); + mRowItems.put(Integer.valueOf(4), new FileTxRow(4)); + mRowItems.put(Integer.valueOf(5), new VoiceRxRow(5)); + mRowItems.put(Integer.valueOf(6), new VoiceTxRow(6)); + mRowItems.put(Integer.valueOf(7), new DescriptionRxRow(7)); + mRowItems.put(Integer.valueOf(8), new DescriptionTxRow(8)); + mRowItems.put(Integer.valueOf(9), new ChattingSystemRow(9)); + // mRowItems.put(Integer.valueOf(10), new LocationRxRow(10)); + // mRowItems.put(Integer.valueOf(11), new LocationTxRow(11)); + // mRowItems.put(Integer.valueOf(12), new CallRxRow(12)); + // mRowItems.put(Integer.valueOf(13), new CallTxRow(13)); + mRowItems.put(Integer.valueOf(14), new RichTextTxRow(14)); + mRowItems.put(Integer.valueOf(15), new RichTextRxRow(15)); + // mRowItems.put(Integer.valueOf(16), new RedPacketRxRow(16)); + // mRowItems.put(Integer.valueOf(17), new RedPacketTxRow(17)); + // mRowItems.put(Integer.valueOf(18), new RedPacketAckRxRow(18)); + // mRowItems.put(Integer.valueOf(19), new RedPacketAckTxRow(19)); + } + + /** + * 根据消息类型返回相对应的消息Item + * + * @param rowType + * @param isSend + * @return + */ + public BaseChattingRow getBaseChattingRow(int rowType, boolean isSend) { + StringBuilder builder = new StringBuilder("C").append(rowType); + if (rowType == 110) { + builder.append("T"); + } else { + if (isSend) { + builder.append("T"); + } else { + builder.append("R"); + } + } + + ChattingRowType fromValue = ChattingRowType.fromValue(builder.toString()); + IChattingRow iChattingRow = mRowItems.get(fromValue.getId().intValue()); + return (BaseChattingRow) iChattingRow; + } + + /** + * 当前语音播放的位置 + * + * @param position + */ + public void setVoicePosition(int position) { + mVoicePosition = position; + } + + /** + * @return the mOnClickListener + */ + public View.OnClickListener getOnClickListener() { + return mOnClickListener; + } + + /** + * + */ + public void onPause() { + mVoicePosition = -1; + MediaPlayTools.getInstance().stop(); + } + +// public void onResume() { +// super.notifyDataSetChanged(); +// } + + /** + * + */ + public void onDestory() { + ImageLoader.getInstance().clearMemoryCache(); + if (mShowTimePosition != null) { + mShowTimePosition.clear(); + mShowTimePosition = null; + } + if (mRowItems != null) { + mRowItems.clear(); + mRowItems = null; + } + mOnClickListener = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListClickListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListClickListener.java new file mode 100644 index 0000000..e4a668e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingListClickListener.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.content.Intent; +import android.view.View; + +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.VideoDetilActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ViewHolderTag; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +/** + * 处理聊天消息点击事件响应 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class ChattingListClickListener implements View.OnClickListener { + + /** 聊天界面 */ + private ChattingActivity mContext; + + public ChattingListClickListener(ChattingActivity activity, String userName) { + mContext = activity; + } + + @Override + public void onClick(View v) { + ViewHolderTag holder = (ViewHolderTag) v.getTag(); +// ECMessage iMessage = holder.detail; +// switch (holder.type) { +// case ViewHolderTag.TagType.TAG_VIEW_FILE: +// ECFileMessageBody body = (ECFileMessageBody) holder.detail.getBody(); +// String ext = body.getRemoteUrl(); +// if (ext != null && ext.contains("consult#")) { +// /** +// * 其实这里应该为封装的json +// */ +// LogUtil.i("ext = "+ext); +// String[] arrExt = ext.split("#"); +// Intent intent = new Intent(mContext, PublicServiceDetailsActivity.class); +// intent.putExtra("realName", arrExt[1]); +// intent.putExtra("photo", arrExt[2]); +// intent.putExtra("content", arrExt[3]); +// intent.putExtra("patientUuid", arrExt[4]); +// intent.putExtra("mobile", arrExt[5]); +// intent.putExtra("sex", arrExt[6]); +// intent.putExtra("birthDate", arrExt[7]); +// intent.putExtra("consultUuid", arrExt[8]); +// if (arrExt.length>11){ +// intent.putExtra("drungtype", arrExt[10]); +// intent.putExtra("createDate", arrExt[11]); +// } +// intent.putExtra("isCloseAnswer", true); +// mContext.startActivity(intent); +// } else { +// +// CCPAppManager.doViewFilePrevieIntent(mContext,body.getLocalUrl()); +// } +// +// break; +// +// case ViewHolderTag.TagType.TAG_VOICE: +// if (iMessage == null) { +// return; +// } +// MediaPlayTools instance = MediaPlayTools.getInstance(); +// final ChattingListAdapter2 adapterForce = mContext.mChattingFragment +// .getChattingAdapter(); +// if (instance.isPlaying()) { +// instance.stop(); +// } +// if (adapterForce.mVoicePosition == holder.position) { +// adapterForce.mVoicePosition = -1; +// adapterForce.notifyDataSetChanged(); +// return; +// } +// +// instance.setOnVoicePlayCompletionListener(new MediaPlayTools.OnVoicePlayCompletionListener() { +// +// @Override +// public void OnVoicePlayCompletion() { +// adapterForce.mVoicePosition = -1; +// adapterForce.notifyDataSetChanged(); +// } +// }); +// ECVoiceMessageBody voiceBody = (ECVoiceMessageBody) holder.detail +// .getBody(); +// String fileLocalPath = voiceBody.getLocalUrl(); +// instance.playVoice(fileLocalPath, false); +// adapterForce.setVoicePosition(holder.position); +// adapterForce.notifyDataSetChanged(); +// +// break; +// +// case ViewHolderTag.TagType.TAG_VIEW_PICTURE: +// if (iMessage != null) { +// +// List msgids = IMessageSqlManager +// .getImageMessageIdSession(mContext.mChattingFragment +// .getmThread()); +// if (msgids == null || msgids.isEmpty()) { +// return; +// } +// int position = 0; +// ArrayList urls = (ArrayList) ImgInfoSqlManager +// .getInstance().getViewImageInfos(msgids); +// msgids.clear(); +// +// if (urls == null || urls.isEmpty()) { +// return; +// } +// for (int i = 0; i < urls.size(); i++) { +// LogUtil.i("图片地址Url = "+urls.get(i)); +// if (urls.get(i) != null&& urls.get(i).getMsgLocalId().equals(iMessage.getMsgId())) { +// position = i; +// break; +// } +// } +// String urlsurls=urls.toString(); +// CCPAppManager.startChattingImageViewAction(mContext, position,urls); +// } +// break; +// +// case ViewHolderTag.TagType.TAG_RESEND_MSG: +// mContext.mChattingFragment.doResendMsgRetryTips(iMessage, +// holder.position); +// break; +// case ViewHolderTag.TagType.TAG_IM_RICH_TEXT: +// doClickRichTextAction(iMessage); +// break; +// +// default: +// break; +// } + } + +// private void doClickRichTextAction(ECMessage iMessage) { +// ECPreviewMessageBody body=(ECPreviewMessageBody)iMessage.getBody(); +// String url=body.getUrl(); +// if(!CheckUtil.isVailUrl(url)){ +// return; +// } +// startWebActivity(url); +// } + private void startWebActivity(String url){ + Intent intent; + if (!StringUtil.isEmpty(url)&&url.contains("video")){ + intent = new Intent(mContext, VideoDetilActivity.class); + }else { + intent = new Intent(mContext, NewsDetailActivity.class); + } + LogUtil.i("url = "+url); +// Intent intent = new Intent(mContext, VideoDetilActivity.class); + if (!StringUtil.isEmpty(url)&&url.contains("outpatient_details")||!StringUtil.isEmpty(url)&&url.contains("wxPatient/index.htm#/outPatient")){ + intent.putExtra("title", "门诊详情"); + }else + { + intent.putExtra("title", "患教详情"); + intent.putExtra("need_inside_share", "no"); + } + + intent.putExtra("url", url); + mContext.startActivity(intent); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingsRowUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingsRowUtils.java new file mode 100644 index 0000000..fd79f7f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ChattingsRowUtils.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-11 + * @version 4.0 + */ +public class ChattingsRowUtils { + + /** + * + * @param type + * @return + */ +// public static int getChattingMessageType(ECMessage.Type type) { +// +// if (type == ECMessage.Type.TXT) { +// +// return 2000; +// } else if (type == ECMessage.Type.VOICE) { +// return 60; +// } else if (type == ECMessage.Type.FILE) { +// return 1024; +// } else if (type == ECMessage.Type.IMAGE) { +// return 200; +// } else if (type == ECMessage.Type.VIDEO) { +// return 1024; +// } +// return 0; +// } + +// public static int getChattingMessageType(ECMessage msg, String data) { +// ECMessage.Type type = msg.getType(); +// if (type == ECMessage.Type.TXT) { +// if (!TextUtils.isEmpty(data) && data.startsWith("yuntongxun009")) { +// return 110; +// } +// +// return 2000; +// } else if (type == ECMessage.Type.VOICE) { +// return 60; +// } else if (type == ECMessage.Type.FILE) { +// return 1024; +// } else if (type == ECMessage.Type.IMAGE) { +// return 200; +// } else if (type == ECMessage.Type.VIDEO) { +// return 1024; +// } else if (type == ECMessage.Type.LOCATION) { +// return 2200; +// } else if (type == ECMessage.Type.CALL) { +// return 2400; +// } else if (type == ECMessage.Type.RICH_TEXT) { +// return 2600; +// } +// return 2000; +// } + + /** + * + * @param iMessage + * @return + */ +// public static Integer getMessageRowType(ECMessage iMessage) { +// ECMessage.Type type = iMessage.getType(); +// ECMessage.Direction direction = iMessage.getDirection(); +// if (type == ECMessage.Type.TXT) { +// if (direction == ECMessage.Direction.RECEIVE) { +// return ChattingRowType.DESCRIPTION_ROW_RECEIVED.getId(); +// } +// return ChattingRowType.DESCRIPTION_ROW_TRANSMIT.getId(); +// } else if (type == ECMessage.Type.VOICE) { +// if (direction == ECMessage.Direction.RECEIVE) { +// return ChattingRowType.VOICE_ROW_RECEIVED.getId(); +// } +// return ChattingRowType.VOICE_ROW_RECEIVED.getId(); +// } else if (type == ECMessage.Type.FILE || type == ECMessage.Type.VIDEO) { +// if (direction == ECMessage.Direction.RECEIVE) { +// return ChattingRowType.FILE_ROW_RECEIVED.getId(); +// } +// return ChattingRowType.FILE_ROW_RECEIVED.getId(); +// } else if (type == ECMessage.Type.IMAGE) { +// if (direction == ECMessage.Direction.RECEIVE) { +// return ChattingRowType.IMAGE_ROW_RECEIVED.getId(); +// } +// return ChattingRowType.IMAGE_ROW_RECEIVED.getId(); +// } +// return -1; +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/CustomerServiceHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/CustomerServiceHelper.java new file mode 100644 index 0000000..6b26c1e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/CustomerServiceHelper.java @@ -0,0 +1,206 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android + * Created by Jorstin on 2015/6/16. + */ +public class CustomerServiceHelper { + + private static final String TAG = "gdxzExpert.CustomerServiceHelper"; + private static CustomerServiceHelper ourInstance = new CustomerServiceHelper(); + + private OnCustomerServiceListener mCustomerServiceListener; + /**全局处理所有的IM消息发送回调*/ +// private MessageListener mListener; + public static CustomerServiceHelper getInstance() { + return ourInstance; + } + + private CustomerServiceHelper() { +// mListener = new MessageListener(); + } + + public static void startService(String event , final OnStartCustomerServiceListener listener) { + if(!initECDeskManager()) { + return ; + } + +// getInstance().mDeskManager.startConsultation(event, new ECDeskManager.OnStartConsultationListener() { +// @Override +// public void onStartConsultation(ECError e, String agent) { +// if (SdkErrorCode.REQUEST_SUCCESS == e.errorCode) { +// OnStartCustomerServiceListener callback = listener; +// // 成功 +// if (callback != null) { +// callback.onServiceStart(agent); +// } +// return; +// } +// onRequestError(e , listener); +// } +// +// }); + } + + /** + * 开启咨询 + * @param event + */ + public static void startService(String event) { + startService(event, getInstance().mCustomerServiceListener); + } + + /** + * 发送ECMessage 消息 + * @param msg + */ +// public static long sendMCMessage(ECMessage msg) { +// initECDeskManager(); +// // 获取一个聊天管理器 +// ECDeskManager manager = getInstance().mDeskManager; +// String userData = null; +// if(manager != null) { +// // 调用接口发送IM消息 +// msg.setMsgTime(System.currentTimeMillis()); +// manager.sendtoDeskMessage(msg, getInstance().mListener); +// //防止消息分类覆盖 +// userData = msg.getUserData(); +// // 保存发送的消息到数据库 +// if(msg.getType() == ECMessage.Type.FILE && msg.getBody() instanceof ECFileMessageBody) { +// ECFileMessageBody fileMessageBody = (ECFileMessageBody) msg.getBody(); +// msg.setUserData("fileName=" + fileMessageBody.getFileName()); +// } +// } else { +// msg.setMsgStatus(ECMessage.MessageStatus.FAILED); +// } +// return IMessageSqlManager.insertIMessage(msg, ECMessage.Direction.SEND.ordinal(), userData); +// } + + /** + * + * @param imgInfo + * @param message + * @return + */ +// public static long sendImageMessage(ImgInfo imgInfo , ECMessage message) { +// +// ECDeskManager manager = getInstance().mDeskManager; +// if(manager != null) { +// // 调用接口发送IM消息 +// manager.sendtoDeskMessage(message, getInstance().mListener); +// +// if(TextUtils.isEmpty(message.getMsgId())) { +// return -1; +// } +// //防止消息分类覆盖 +// String userData = message.getUserData(); +// imgInfo.setMsglocalid(message.getMsgId()); +// BitmapFactory.Options options = DemoUtils.getBitmapOptions(new File(FileAccessor.IMESSAGE_IMAGE, imgInfo.getThumbImgPath()).getAbsolutePath()); +// message.setUserData("outWidth://" + options.outWidth + ",outHeight://" + options.outHeight + ",THUMBNAIL://" + message.getMsgId() + ",PICGIF://" + imgInfo.isGif); +// long row = IMessageSqlManager.insertIMessage(message, ECMessage.Direction.SEND.ordinal(), userData); +// if(row != -1) { +// return ImgInfoSqlManager.getInstance().insertImageInfo(imgInfo); +// } +// } +// return -1; +// +// } + + private static boolean initECDeskManager() { +// if(getInstance().mDeskManager == null) { +// getInstance().mDeskManager = SDKCoreHelper.getECDeskManager(); +// } +// if(getInstance().mDeskManager == null) { +// LogUtil.e(TAG, "SDK not ready."); +// return false; +// } + return true; + } + + + public static void finishService(String event) { + if(!initECDeskManager()) { + return ; + } +// ECDeskManager manager = getInstance().mDeskManager; +// manager.finishConsultation(event, new ECDeskManager.OnFinishConsultationListener() { +// @Override +// public void onFinishConsultation(ECError e, String agent) { +// if (SdkErrorCode.REQUEST_SUCCESS == e.errorCode) { +// OnCustomerServiceListener listener = getInstance().mCustomerServiceListener; +// // 成功 +// if (listener != null) { +// listener.onServiceFinish(agent); +// } +// return; +// } +// onRequestError(e); +// } +// +// }); + } + + public static void addCustomerServiceListener(OnCustomerServiceListener listener) { + getInstance().mCustomerServiceListener = listener; + } + +// public static void onRequestError(ECError error) { +// onRequestError(error , getInstance().mCustomerServiceListener); +// } +// +// public static void onRequestError(ECError error , OnStartCustomerServiceListener listener) { +// if(error == null || error.errorCode == SdkErrorCode.REQUEST_SUCCESS) { +// return ; +// } +// ToastUtil.showMessage("请求错误[" + error.errorCode + "]"); +// if(listener != null) { +// listener.onError(error); +// } +// } + + + public interface OnStartCustomerServiceListener { + void onServiceStart(String event); +// void onError(ECError error); + } + + public interface OnCustomerServiceListener extends OnStartCustomerServiceListener{ + void onServiceFinish(String even); +// void onMessageReport(ECError error, ECMessage message); + } + +// private class MessageListener implements ECDeskManager.OnSendDeskMessageListener { +// +// @Override +// public void onSendMessageComplete(ECError error, ECMessage message) { +// if(message == null) { +// return ; +// } +// // 处理ECMessage的发送状态 +// if(message != null) { +// if(message.getType() == ECMessage.Type.VOICE) { +// try { +// DemoUtils.playNotifycationMusic(CCPAppManager.getContext(), "sound/voice_message_sent.mp3"); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// IMessageSqlManager.setIMessageSendStatus(message.getMsgId(), message.getMsgStatus().ordinal()); +// IMessageSqlManager.notifyMsgChanged(message.getSessionId()); +// OnCustomerServiceListener serviceListener = getInstance().mCustomerServiceListener; +// if(serviceListener != null) { +// serviceListener.onMessageReport(error , message); +// } +// return ; +// } +// } +// +// @Override +// public void onProgress(String msgId ,int total, int progress) { +// // 处理发送文件IM消息的时候进度回调 +// LogUtil.d(TAG , "[MessageListener - onProgress] msgId:" +msgId + " ,total:" + total + " ,progress:" + progress); +// } +// +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/GlobalConstant.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/GlobalConstant.java new file mode 100644 index 0000000..4d63212 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/GlobalConstant.java @@ -0,0 +1,8 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +public class GlobalConstant { + + + public static final int ACTIVITY_FOR_RESULT_VIDEORECORD=0x9; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/HackyViewPager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/HackyViewPager.java new file mode 100644 index 0000000..70eae11 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/HackyViewPager.java @@ -0,0 +1,38 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.content.Context; +import androidx.viewpager.widget.ViewPager; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android + * Created by Jorstin on 2015/3/31. + */ +public class HackyViewPager extends ViewPager { + private static final String TAG = "HackyViewPager"; + + public HackyViewPager(Context context) { + super(context); + } + + public HackyViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + try { + return super.onInterceptTouchEvent(ev); + } catch (IllegalArgumentException e) { + LogUtil.e(TAG, "hacky viewpager error1"); + return false; + } catch (ArrayIndexOutOfBoundsException e) { + LogUtil.e(TAG, "hacky viewpager error2"); + return false; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/IMChattingHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/IMChattingHelper.java new file mode 100644 index 0000000..85791ef --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/IMChattingHelper.java @@ -0,0 +1,1092 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.content.Context; + +import java.util.HashMap; + +import cn.shangyu.gdxzExpert.ecdemo.RichTextBean; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-12 + * @version 4.0 + */ +public class IMChattingHelper { + + private static final String TAG = "gdxzExpert.IMChattingHelper"; + public static final String INTENT_ACTION_SYNC_MESSAGE = "com.yuntongxun.ecdemo_sync_message"; + public static final String GROUP_PRIVATE_TAG = "@priategroup.com"; + private static HashMap syncMessage = new HashMap(); + private static IMChattingHelper sInstance; + private static ECAlertDialog dilaog2; + private boolean isSyncOffline = false; + + public static IMChattingHelper getInstance() { + if (sInstance == null) { + sInstance = new IMChattingHelper(); + } + return sInstance; + } + + /** 云通讯SDK聊天功能接口 */ +// private ECChatManager mChatManager; + /** 全局处理所有的IM消息发送回调 */ + private ChatManagerListener mListener; + /** 是否是同步消息 */ + private boolean isFirstSync = false; + + private IMChattingHelper() { +// mChatManager = SDKCoreHelper.getECChatManager(); + mListener = new ChatManagerListener(); + } + + private void checkChatManager() { +// mChatManager = SDKCoreHelper.getECChatManager(); + } + + /** + * 消息发送报告 + */ + private OnMessageReportCallback mOnMessageReportCallback; + private String noTxtUserData; + + /** + * 发送ECMessage 消息 + * + * @param msg + */ +// public static long sendECMessage(ECMessage msg) { +// getInstance().checkChatManager(); +// // 获取一个聊天管理器 +// ECChatManager manager = getInstance().mChatManager; +// String userData = null; +// if (manager != null) { +// // 调用接口发送IM消息 +// +// boolean isShowChatName = ECPreferences.getSharedPreferences().getBoolean(ECPreferenceSettings.SETTINGS_SHOW_CHATTING_NAME.getId(),false); +// +// msg.setMsgTime(System.currentTimeMillis()); +// manager.sendMessage(msg, getInstance().mListener); +// // 防止消息分类覆盖 +// userData = msg.getUserData(); +// // 保存发送的消息到数据库 +// // if((msg.getType() == Type.FILE || msg.getType() == Type.VIDEO ) +// // && msg.getBody() instanceof ECFileMessageBody) { +// // ECFileMessageBody fileMessageBody = (ECFileMessageBody) +// // msg.getBody(); +// // msg.setUserData("fileName=" + fileMessageBody.getFileName()); +// // } +// // 保存发送的消息到数据库 +// if (msg.getType() == Type.FILE&& msg.getBody() instanceof ECFileMessageBody) { +// ECFileMessageBody fileMessageBody = (ECFileMessageBody) msg.getBody(); +// msg.setUserData("fileName=" + fileMessageBody.getFileName()); +// } +// } else { +// msg.setMsgStatus(ECMessage.MessageStatus.FAILED); +// } +// long insertIMessage = IMessageSqlManager.insertIMessage(msg, Direction.SEND.ordinal(), userData); +// return insertIMessage; +// } + + public void destroy() { + if (syncMessage != null) { + syncMessage.clear(); + } + mListener = null; +// mChatManager = null; + isFirstSync = false; + sInstance = null; + } + /** + * 发送链接分享 + * @param bean + * @param to + */ + public void handleSendRichTextMessage(RichTextBean bean, String to, String userdate, Context context) { + // 组建一个待发送的ECMessage +// ECMessage msg = ECMessage.createECMessage(Type.RICH_TEXT); +// // 设置消息接收者 +// msg.setTo(to); +// // 创建一个文本消息体,并添加到消息对象中 +// ECPreviewMessageBody msgBody = new ECPreviewMessageBody(); +// msgBody.setTitle(bean.getTitle()); +// if (bean.getDesc()==null) { +// bean.setDesc("患教学堂"); +// } +// +// msgBody.setDescContent(bean.getDesc()); +// File file =new File(FileAccessor.getFilePath(context, "/ECSDK_Demo/richtext")+"/" + DemoUtils.md5(bean.getPicUrl())+".jpg"); +// if(file!=null&&file.exists()&&file.length()!=0){ +// String imagePath = FileAccessor.getFilePath(context, "/ECSDK_Demo/richtext")+"/" + DemoUtils.md5(bean.getPicUrl())+".jpg"; +// msgBody.setLocalUrl(imagePath); +// msgBody.setRemoteUrl(imagePath); +// }else { +// msgBody.setLocalUrl(FileAccessor.IMESSAGE_RICH_TEXT + "/" + DemoUtils.md5(bean.getPicUrl()) + ".jpg"); +// msgBody.setRemoteUrl(FileAccessor.IMESSAGE_RICH_TEXT + "/" + DemoUtils.md5(bean.getPicUrl()) + ".jpg"); +// } +// msgBody.setUrl(bean.getUrl()); +//// msgBody.setRemoteUrl(bean.getPicUrl()); +// msg.setBody(msgBody); +// msg.setUserData(userdate); +// try { +// // 发送消息,该函数见上 +// long rowId = -1; +// rowId = sendECMessage(msg); +// // 通知列表刷新 +// msg.setId(rowId); +// if(ChattingFragment.getInstance()!=null) +// ChattingFragment.getInstance().notifyIMessageListView(msg); +// } catch (Exception e) { +// e.printStackTrace(); +// ToastUtil.showMessage("提交失败,请重试"); +// } + + } + + /** + * 消息重发 + * + * @param msg + * @return + */ +// public static long reSendECMessage(ECMessage msg) { +// ECChatManager manager = getInstance().mChatManager; +// if (manager != null) { +// // 调用接口发送IM消息 +// String oldMsgId = msg.getMsgId(); +// manager.sendMessage(msg, getInstance().mListener); +// if (msg.getType() == Type.IMAGE) { +// ImgInfo imgInfo = ImgInfoSqlManager.getInstance().getImgInfo( +// oldMsgId); +// if (imgInfo == null +// || TextUtils.isEmpty(imgInfo.getBigImgPath())) { +// return -1; +// } +// String bigImagePath = new File(FileAccessor.getImagePathName(), +// imgInfo.getBigImgPath()).getAbsolutePath(); +// imgInfo.setMsglocalid(msg.getMsgId()); +// ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); +// body.setLocalUrl(bigImagePath); +// BitmapFactory.Options options = DemoUtils +// .getBitmapOptions(new File(FileAccessor.IMESSAGE_IMAGE, +// imgInfo.getThumbImgPath()).getAbsolutePath()); +// msg.setUserData("outWidth://" + options.outWidth +// + ",outHeight://" + options.outHeight + ",THUMBNAIL://" +// + msg.getMsgId()); +// ImgInfoSqlManager.getInstance().updateImageInfo(imgInfo); +// } +// // 保存发送的消息到数据库 +// return IMessageSqlManager.changeResendMsg(msg.getId(), msg); +// } +// return -1; +// } + +// public static long sendImageMessage(ImgInfo imgInfo, ECMessage message) { +// +// ECChatManager manager = getInstance().mChatManager; +// if (manager != null) { +// // 调用接口发送IM消息 +// manager.sendMessage(message, getInstance().mListener); +// String sssss=message.getMsgId(); +// if (TextUtils.isEmpty(message.getMsgId())) { +// return -1; +// } +// imgInfo.setMsglocalid(message.getMsgId()); +// BitmapFactory.Options options = DemoUtils +// .getBitmapOptions(new File(FileAccessor.IMESSAGE_IMAGE, +// imgInfo.getThumbImgPath()).getAbsolutePath()); +// // 防止消息分类覆盖 +// String userData = message.getUserData(); +// message.setUserData("outWidth://" + options.outWidth +// + ",outHeight://" + options.outHeight + ",THUMBNAIL://" +// + message.getMsgId() + ",PICGIF://" + imgInfo.isGif); +// long row = IMessageSqlManager.insertIMessage(message, +// Direction.SEND.ordinal(), userData); +// if (row != -1) { +// return ImgInfoSqlManager.getInstance().insertImageInfo(imgInfo); +// } +// } +// return -1; +// +// } + + public void getPersonInfo() { + LogUtil.d(TAG, "[getPersonInfo] currentVersion :"); +// final ClientUser clientUser = CCPAppManager.getClientUser(); +// if (clientUser == null) { +// return; +// } +// LogUtil.d(TAG, +// "[getPersonInfo] currentVersion :" + clientUser.getpVersion() +// + " ,ServerVersion: " + mServicePersonVersion); +// if (clientUser.getpVersion() < mServicePersonVersion) { +// ECDevice.getPersonInfo(clientUser.getUserId(), +// new ECChatManager.OnGetPersonInfoListener() { +// @Override +// public void onGetPersonInfoComplete(ECError e, +// PersonInfo p) { +// if (e.errorCode == SdkErrorCode.REQUEST_SUCCESS +// && p != null) { +// clientUser.setpVersion(p.getVersion()); +// clientUser.setSex(p.getSex().ordinal() + 1); +// clientUser.setUserName(p.getNickName()); +// clientUser.setSignature(p.getSign()); +// if (!TextUtils.isEmpty(p.getBirth())) { +// clientUser.setBirth(DateUtil +// .getActiveTimelong(p.getBirth())); +// } +// String newVersion = clientUser.toString(); +// LogUtil.d(TAG, +// "[得到个人信息getPersonInfo -result] ClientUser :" +// + newVersion); +// try { +// ECPreferences +// .savePreference( +// ECPreferenceSettings.SETTINGS_REGIST_AUTO, +// newVersion, true); +// } catch (InvalidClassException e1) { +// e1.printStackTrace(); +// } +// } +// +// } +// }); +// } + } + + private class ChatManagerListener { + +// @Override +// public void onSendMessageComplete(ECError error, ECMessage message) { +// +// if (message == null) { +// return; +// } +// // 处理ECMessage的发送状态 +// if (message != null) { +// if (message.getType() == Type.VOICE) { +// try { +// DemoUtils.playNotifycationMusic(CCPAppManager.getContext(), +// "sound/voice_message_sent.mp3"); +// +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// IMessageSqlManager.setIMessageSendStatus(message.getMsgId(), +// message.getMsgStatus().ordinal()); +// IMessageSqlManager.notifyMsgChanged(message.getSessionId()); +// if (mOnMessageReportCallback != null) { +// mOnMessageReportCallback.onMessageReport(error, message); +// } +// return; +// } +// } +// +// @Override +// public void onProgress(String msgId, int total, int progress) { +// // 处理发送文件IM消息的时候进度回调 +// LogUtil.d(TAG, "[IMChattingHelper - onProgress] msgId:" + msgId +// + " ,total:" + total + " ,progress:" + progress); +// } + + } + + public static void setOnMessageReportCallback( + OnMessageReportCallback callback) { + getInstance().mOnMessageReportCallback = callback; + } + + public interface OnMessageReportCallback { +// void onMessageReport(ECError error, ECMessage message); +// +// void onPushMessage(String sessionId, List msgs); + } + + private int getMaxVersion() { + int maxVersion = IMessageSqlManager.getMaxVersion(); + int maxVersion1 = GroupNoticeSqlManager.getMaxVersion(); + return maxVersion > maxVersion1 ? maxVersion : maxVersion1; + } + +// /** +// * 收到新的IM文本和附件消息 +// */ +// @Override +// public void OnReceivedMessage(ECMessage msg) { +// LogUtil.d(TAG, "[OnReceivedMessage] show notice true"); +// if (msg == null) { +// return; +// } +// postReceiveMessage(msg, true); +// } +// +// /** +// * 处理接收消息 +// * +// * @param msg +// * @param showNotice +// */ +// private synchronized void postReceiveMessage(ECMessage msg, +// boolean showNotice) { +// // 接收到的IM消息,根据IM消息类型做不同的处理 +// // IM消息类型:ECMessage.Type +// String userData = null; +// if (msg.getType() != Type.TXT) { +// ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); +// FileAccessor.initFileAccess(); +// if (!TextUtils.isEmpty(body.getRemoteUrl())) { +// boolean thumbnail = false; +// +// String fileExt = DemoUtils.getExtensionName(body.getRemoteUrl()); +// if (msg.getType() == Type.VOICE) { +// body.setLocalUrl(new File(FileAccessor.getVoicePathName(), DemoUtils.md5(String.valueOf(System.currentTimeMillis())) + ".amr").getAbsolutePath()); +// } else if (msg.getType() == Type.IMAGE) { +// ECImageMessageBody imageBody = (ECImageMessageBody) body; +// //模拟接收微信图片无扩展名 +//// imageBody.setRemoteUrl("http://dcsvip1imapp.cloopen.net:8888/56032/aaf98f89516bf50b015174e9d5ea1110/2020-04-27/10-35/1587954905411822131"); +//// imageBody.setThumbnailFileUrl("http://dcsvip1imapp.cloopen.net:8888/56032/aaf98f89516bf50b015174e9d5ea1110/2020-04-27/10-35/1587954905411822131_thum"); +// fileExt = DemoUtils.getExtensionName(body.getRemoteUrl()); +// thumbnail = !TextUtils.isEmpty(imageBody.getThumbnailFileUrl()); +// String remoteUrl = imageBody.getRemoteUrl();//大图 +// String thumbnailFileUrl = imageBody.getThumbnailFileUrl();//缩略图 +// LogUtil.i("remoteUrl = "+remoteUrl); +// LogUtil.i("thumbnailFileUrl = "+thumbnailFileUrl); +// LogUtil.i("fileExt = "+fileExt); +// if (fileExt.contains("net:8888")){ +// fileExt = "jpg"; +// } +// if (remoteUrl.contains(":0")){ +// //http://:0/56032/8a48b5514fba2f87014fca72dec021e4/2019-09-24/18-17/1569320233439725917.jpg +// //http://dcsvip1imapp.cloopen.net:8888/56032/8a48b5514fba2f87014fca72dec021e4/2019-09-24/18-17/1569320233439725917.jpg +// //http://dcsvip1imapp.cloopen.net:8888/56031/aaf98f89516bf50b015174e9d5ea1110/2020-03-17/16-32/1584433966485595294.jpg +// //http://dcsvip1imapp.cloopen.net:8888/56031/aaf98f89516bf50b015174e9d5ea1110/2020-04-27/11-20/1587957638460662460 +// String replace = remoteUrl.replace(":0", "dcsvip1imapp.cloopen.net:8888"); +// String replace1 = thumbnailFileUrl.replace(":0", "dcsvip1imapp.cloopen.net:8888"); +// imageBody.setRemoteUrl(replace); +// imageBody.setThumbnailFileUrl(replace1); +// } +//// +// imageBody.setLocalUrl(new File(FileAccessor.getImagePathName(), DemoUtils.md5(thumbnail ? imageBody.getThumbnailFileUrl() : imageBody.getRemoteUrl()) + "." + fileExt).getAbsolutePath()); +//// +//// imageBody.setLocalUrl(new File(FileAccessor.getImagePathName(), DemoUtils.md5(imageBody.getRemoteUrl())).getAbsolutePath()); +// +// } else { +// body.setLocalUrl(new File(FileAccessor.getFilePathName(), DemoUtils.md5(String.valueOf(System.currentTimeMillis())) + "." + fileExt).getAbsolutePath()); +// +// } +// if (syncMessage != null) { +// syncMessage.put(msg.getMsgId(), new SyncMsgEntry(showNotice, thumbnail, msg)); +// } +// if (mChatManager != null) { +// if (thumbnail) { +// mChatManager.downloadThumbnailMessage(msg, this); +// } else { +// mChatManager.downloadMediaMessage(msg, this); +// } +// } +// if (TextUtils.isEmpty(body.getFileName())&& !TextUtils.isEmpty(body.getRemoteUrl())) { +// body.setFileName(FileAccessor.getFileName(body.getRemoteUrl())); +// } +// +// +// // 防止消息分类覆盖 +// userData = msg.getUserData(); +// noTxtUserData = msg.getUserData(); +// if (msg.getType() == Type.IMAGE&& msg.getDirection() == Direction.RECEIVE) { +// msg.setUserData(msg.getUserData()); +// } else { +// msg.setUserData("fileName=" + body.getFileName()); +// +// } +// if (IMessageSqlManager.insertIMessage(msg, msg.getDirection().ordinal(), userData) > 0) { +// return; +// } +// } else { +// LogUtil.e(TAG, "ECMessage fileUrl: null"); +// } +// } +// LogUtil.i(TAG, "文本消息usedata=====" + msg.getUserData()); +// // 防止消息分类覆盖 +// userData = msg.getUserData(); +// +// // 这位系统推送的消息账号 +// +// String sessionId = msg.getSessionId(); +// if (Constant.SystemID.equals(sessionId) +// || Constant.YanzhengID.equals(sessionId) +// || Constant.OrderID.equals(sessionId) +// || Constant.PatientApplyID.equals(sessionId) +// || Constant.PublicID.equals(sessionId)) { +// showNotification(msg, userData); +// return; +// } +// if (IMessageSqlManager.insertIMessage(msg,msg.getDirection().ordinal(), userData) <= 0) { +// return; +// } +// if (mOnMessageReportCallback != null) { +// ArrayList msgs = new ArrayList(); +// msgs.add(msg); +// mOnMessageReportCallback.onPushMessage(msg.getSessionId(), msgs); +// } +// // 是否状态栏提示 +// showNotification(msg, userData); +// +// +// } +// +// +// private static void showNotification(ECMessage msg, String showUserData) { +// if (checkNeedNotification(msg.getSessionId())) { +// ECNotificationManager.getInstance().forceCancelNotification(); +// String lastMsg = ""; +// if (msg.getType() == Type.TXT) { +// lastMsg = ((ECTextMessageBody) msg.getBody()).getMessage(); +// } +// // 此是根据账号查询联系人,但是有的患者不是专家联系人时候需要考虑,故注销 +// // ECContacts contact = ContactSqlManager.getContact(msg.getForm()); +// PatientModel contact = PatientSqlManager.getPatientInfo(msg +// .getForm()); +// // 此时的姓名应该是患者的姓名 +// String fromUserName; +// if (contact == null) { +// return; +// // fromUserName = msg.getForm(); +// } else { +// fromUserName = contact.getRealName(); +// } +// String noticeName = "随访消息"; +// // 这位系统推送的消息账号 +// // ********************************************************************************************* +// boolean isSystem = false; +// String sessionId = msg.getSessionId(); +// String formSessionId = msg.getForm(); +// String sssss=msg.getUserData(); +// if(msg.getUserData().contains("type")){ +// try { +// JSONObject objs = new JSONObject(msg.getUserData()); +// String type = objs.getString("type"); +// LogUtil.i("userDataBean.type===" + type); +// if (Constant.TYPE_FIVE.equals(type)) {// 患者解除医生 +// JSONObject userDataJson = objs.getJSONObject("userData"); +// if (userDataJson != null) { +// String uuid = userDataJson.getString("uuid"); +// +// noticeName = "验证消息"; +// // 从数据库里删除该患者 +// PatientSqlManager.delPatientInfo(uuid); +// if (MyPatientActivity.getInstance() != null) { +// MyPatientActivity.getInstance().notifyChange(); +// } +// if (ChattingFragment.getInstance() != null) { +// ChattingFragment.getInstance().setFinish(uuid); +// } +// } +// +// +// +// +// } else if (Constant.TYPE_SIX.equals(type)) {// 订单 +// noticeName = "订单消息"; +// } else if (Constant.TYPE_SEVEN.equals(type)) {// 系统消息 +// noticeName = "系统消息"; +// } else if (Constant.TYPE_EIGHT.equals(type)) {// 患者申请随访患者 +// noticeName = "验证消息"; +// SharePrefUtil.saveBoolean(CCPAppManager.getContext(), +// "isHaveNewPatient", true); +// // 首页红点动态提示,这个是进行显示是否有新的患者申请 +// if (HomeFragment.getInstance() != null) { +// HomeFragment.getInstance().showNewPatientRed(); +// } +// }else if (Constant.TYPE_LOGOUT.equals(type)){ +// LogUtil.i("发送退出广播"); +// noticeName = "系统消息"; +// Intent intent = new Intent(); +// intent.setAction("GDXZEXPERTEXIT"); +// intent.setComponent( new ComponentName( "cn.shangyu.gdxzExpert" , +// "cn.shangyu.gdxzExpert.utils.ExitReceiver") ); +// intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES); +// CCPAppManager.getContext().sendBroadcast(intent); +// return; +// } +// SharePrefUtil.saveBoolean(CCPAppManager.getContext(), +// "isHaveSysMsg", true); +// if (MainActivity.mMainActivity != null) { +// MainActivity.mMainActivity.showSysMsg(); +// } +// isSystem = true; +// } catch (JSONException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// // +// } else { +// // 不是系统消息 +// if (TextUtils.isEmpty(fromUserName)) {// 姓名为空 +// String userData = msg.getUserData(); +// if (!TextUtils.isEmpty(msg.getSessionId())) { +// // 账号不为空,进行联网根据id请求患者详情 +// getInstance().getPatientInfo(PatientDetailUrl, msg); +// +// } else {// 账号为空则不提示 +// /* +// * fromUserName = "系统消息"; String userData = +// * msg.getUserData(); if (!TextUtils.isEmpty(userData) +// * && userData.length() > 6) { String substring = +// * userData.substring(4, 5); if ("1".equals(substring)) +// * {//1.公益咨询 fromUserName = "公益消息"; }else if +// * ("2".equals(substring)) {//2.随访 fromUserName = +// * "随访消息"; }else if ("3".equals(substring)) {// 3.vip +// * fromUserName = "随访消息"; }else { +// * +// * } } +// */ +// return; +// } +// } else {// 姓名不为空根据类型进行分类 +// String userData = msg.getUserData(); +// if (!TextUtils.isEmpty(userData) && userData.length() > 6) { +// String substring = userData.substring(4, 5); +// if ("1".equals(substring)) {// 1.公益咨询 +// noticeName = "公益消息"; +// } else if ("2".equals(substring)) {// 2.随访 +// noticeName = "随访消息"; +// } else if ("3".equals(substring)) {// 3.vip +// noticeName = "随访消息"; +// } else if (!TextUtils.isEmpty(showUserData)&& showUserData.length() > 6) { +// if ("1".equals(substring)) {// 1.公益咨询 +// noticeName = "公益消息"; +// } else if ("2".equals(substring)) {// 2.随访 +// noticeName = "随访消息"; +// } else if ("3".equals(substring)) {// 3.vip +// noticeName = "随访消息"; +// } else { +// noticeName = "随访消息"; +// } +// } +// } +// } +// } +// +// ECNotificationManager.getInstance() +// .showCustomNewMessageNotification( +// CCPAppManager.getContext(), +// lastMsg, +// // 通知栏上发送者,此为联系人的姓名,此时应该是根据患者查询患者姓名,要考虑公益咨询,与专家之间。 +// fromUserName, msg.getSessionId(), msg.getForm(), +// msg.getType().ordinal(), showUserData, noticeName, +// isSystem,sssss); +// +// +// +// } +// } + + public static String PatientDetailUrl = Url.getpatientDetail; + + /** + * 请求服务器。获取患者详情 getPatientList + * + * @param loadUrl + * void + */ +// private void getPatientInfo(String loadUrl, final ECMessage msg) { +// final String patientUuid; +// if (msg.getForm().contains("#")) { +// patientUuid = msg.getForm().split("#")[1]; +// } else { +// patientUuid = msg.getForm(); +// } +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("patientUuid", patientUuid);// 患者uuid +// LogUtil.i(TAG, "patientUuid==" + patientUuid + "=url=" + loadUrl); +// HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// LogUtil.i(TAG, "response_json---" + info.result); +// SharePrefUtil.saveString(UIUtils.getContext(), +// patientUuid, info.result); +// processData(info.result, msg, patientUuid); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("getPatientInfo数据请求失败了: " + arg1); +// } +// }); +// } +// +// /** +// * 解析并处理数据 +// * +// * @param result +// * @param msg +// * @param patientUuid +// */ +// private void processData(String result, ECMessage msg, String patientUuid) { +// PatientDetailBean bean = GsonTools.fromGsonToBean(result, +// PatientDetailBean.class); +// // 数据为空 +// if (bean.data == null) { +// return; +// } +// PatientModel patientModel = new PatientModel(Constant.Patient_AppKey +// + patientUuid); +// String realName = bean.data.realName; +// String photo = bean.data.photo; +// String mobile = bean.data.mobile; +// if (!StringUtil.isEmpty(realName)) { +// patientModel.setRealName(realName); +// } +// if (!StringUtil.isEmpty(photo)) { +// patientModel.setPhoto(photo); +// } +// if (!StringUtil.isEmpty(mobile)) { +// patientModel.setMobile(mobile); +// } +// String userData = msg.getUserData(); +// +// String type = null; +// String noticeName = "随访消息"; +// if (!TextUtils.isEmpty(userData) && userData.length() > 6) { +// String substring = userData.substring(4, 5); +// if ("1".equals(substring)) {// 1.公益咨询 +// type = Constant.typeConsult; +// noticeName = "公益消息"; +// } else if ("2".equals(substring)) {// 2.随访 +// // type = Constant.typePatient; +// noticeName = "随访消息"; +// } else if ("3".equals(substring)) {// 3.vip +// // type = Constant.typeVip; +// noticeName = "随访消息"; +// } else { +// noticeName = "随访消息"; +// } +// } +// patientModel.setType(type); +// LogUtil.i(TAG, "patientModel=" + patientModel.toString()); +// PatientSqlManager.insertPatient(patientModel, type); +// +// String lastMsg = ""; +// if (msg.getType() == Type.TXT) { +// lastMsg = ((ECTextMessageBody) msg.getBody()).getMessage(); +// } + + // PatientModel contact = PatientSqlManager.getPatientInfo(patientUuid); + // //此时的姓名应该是患者的姓名 + // String fromUserName; + // if(contact == null) { + // return ; + // // fromUserName = msg.getForm(); + // }else{ + // fromUserName = contact.getRealName(); + // } + +// ECNotificationManager.getInstance().showCustomNewMessageNotification( +// CCPAppManager.getContext(), lastMsg, +// // 通知栏上发送者,此为联系人的姓名,此时应该是根据患者查询患者姓名,要考虑公益咨询,与专家之间。 +// realName, msg.getSessionId(), msg.getForm(), +// msg.getType().ordinal(), msg.getUserData(), noticeName, false,msg.getUserData()); +// } + + public static void checkDownFailMsg() { + getInstance().postCheckDownFailMsg(); + } + + private void postCheckDownFailMsg() { + LogUtil.i("执行了postCheckDownFailMsg"); +// List downdFailMsg = IMessageSqlManager.getDowndFailMsg(); +// if (downdFailMsg == null || downdFailMsg.isEmpty()) { +// return; +// } +// for (ECMessage msg : downdFailMsg) { +// ECImageMessageBody body = (ECImageMessageBody) msg.getBody(); +// body.setThumbnailFileUrl(body.getRemoteUrl() + "_thum"); +// if (syncMessage != null) { +// syncMessage.put(msg.getMsgId(), new SyncMsgEntry(false, true, +// msg)); +// } +// if (mChatManager != null) { +// mChatManager.downloadThumbnailMessage(msg, this); +// } +// } + + } + + /** + * 是否需要状态栏通知 + * + * @param contactId + */ + public static boolean checkNeedNotification(String contactId) { + + /** + * 2018.12.13 + * 单聊无状态栏通知修改 + * */ + String currentChattingContactId = + ECPreferences.getSharedPreferences().getString( + ECPreferenceSettings.SETTING_CHATTING_CONTACTID.getId(), + (String) + ECPreferenceSettings.SETTING_CHATTING_CONTACTID.getDefaultValue()); + if(contactId == null) { + return true; + } + // 当前聊天 + if(contactId.equals(currentChattingContactId)) { + return false; + } + /****************************************************/ + + // 群组免打扰 + if (contactId.toUpperCase().startsWith("G")) { + return GroupSqlManager.isGroupNotify(contactId); + } + return true; + } +// +// @Override +// public void OnReceiveGroupNoticeMessage(ECGroupNoticeMessage notice) { +// if (notice == null) { +// return; +// } +// +// // 接收到的群组消息,根据群组消息类型做不同处理 +// // 群组消息类型:ECGroupMessageType +// GroupNoticeHelper.insertNoticeMessage(notice, +// new GroupNoticeHelper.OnPushGroupNoticeMessageListener() { +// +// @Override +// public void onPushGroupNoticeMessage(DemoGroupNotice system) { +// IMessageSqlManager +// .notifyMsgChanged(GroupNoticeSqlManager.CONTACT_ID); +// +// ECMessage msg = ECMessage +// .createECMessage(Type.TXT); +// msg.setSessionId(system.getSender()); +// msg.setForm(system.getSender()); +// ECTextMessageBody tx = new ECTextMessageBody(system +// .getContent()); +// msg.setBody(tx); +// // 是否状态栏提示 +// showNotification(msg, null); +// } +// }); +// +// } +// +// private int mHistoryMsgCount = 0; +// +// @Override +// public void onOfflineMessageCount(int count) { +// mHistoryMsgCount = count; +// } +// +// @Override +// public int onGetOfflineMessage() { +// // 获取全部的离线历史消息 +// return ECDevice.SYNC_OFFLINE_MSG_ALL; +// } +// +// private ECMessage mOfflineMsg = null; +// +// @Override +// public void onReceiveOfflineMessage(List msgs) { +// // 离线消息的处理可以参考 void OnReceivedMessage(ECMessage msg)方法 +// // 处理逻辑完全一样 +// // 参考 IMChattingHelper.java +// LogUtil.d(TAG, "[onReceiveOfflineMessage] show notice false"); +// if (msgs != null && !msgs.isEmpty() && !isFirstSync) +// isFirstSync = true; +// for (ECMessage msg : msgs) { +// mOfflineMsg = msg; +// postReceiveMessage(msg, false); +// } +// } +// +// @Override +// public void onReceiveOfflineMessageCompletion() { +// if (mOfflineMsg == null) { +// return; +// } +// // SDK离线消息拉取完成之后会通过该接口通知应用 +// // 应用可以在此做类似于Loading框的关闭,Notification通知等等 +// // 如果已经没有需要同步消息的请求时候,则状态栏开始提醒 +// ECMessage lastECMessage = mOfflineMsg; +// try { +// if (lastECMessage != null && mHistoryMsgCount > 0 && isFirstSync) { +// showNotification(lastECMessage, lastECMessage.getUserData()); +// // lastECMessage.setSessionId(lastECMessage.getTo().startsWith("G")?lastECMessage.getTo():lastECMessage.getForm()); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// isFirstSync = isSyncOffline = false; +// // 无需要同步的消息 +// CCPAppManager.getContext().sendBroadcast(new Intent(INTENT_ACTION_SYNC_MESSAGE)); +// mOfflineMsg = null; +// } +// +// public int mServicePersonVersion = 0; +// +// @Override +// public void onServicePersonVersion(int version) { +// mServicePersonVersion = version; +// } +// +// /** +// * 客服消息 +// * +// * @param msg +// */ +// @Override +// public void onReceiveDeskMessage(ECMessage msg) { +// LogUtil.d(TAG, "[onReceiveDeskMessage] show notice true"); +// OnReceivedMessage(msg); +// } +// +// @Override +// public void onSoftVersion(String version, int sUpdateMode) { +// // SDKCoreHelper.setSoftUpdate(version , sUpdateMode); +// } +// +// public static boolean isSyncOffline() { +// return getInstance().isSyncOffline; +// } +// +// /** +// * 下载 +// */ +// @Override +// public void onDownloadMessageComplete(ECError e, ECMessage message) { +// //图片没加载e.errorCode = 502,SyncMsgEntry userData = 1,2,2,0,171273,171251 +// LogUtil.i("e.errorCode = "+e.errorCode); +// LogUtil.i("errorCode getUserData= "+message.getUserData());//这个1,2,2,0正常 +//// ECFileMessageBody body = (ECFileMessageBody) message.getBody(); +//// ECImageMessageBody imageBody = (ECImageMessageBody) body; +//// LogUtil.i("errorCode remoteUrl = "+imageBody.getRemoteUrl()); +//// LogUtil.i("errorCode getThumbnailFileUrl = "+imageBody.getThumbnailFileUrl()); +//// boolean thumbnail = !TextUtils.isEmpty(imageBody.getThumbnailFileUrl()); +//// ArrayList list = null; +//// +//// syncMessage.put(message.getMsgId(), new SyncMsgEntry(false,thumbnail , message)); +// +// if (e.errorCode == SdkErrorCode.REQUEST_SUCCESS) { +// if (message == null) +// return; +// // 处理发送文件IM消息的时候进度回调 +// LogUtil.d(TAG,"[onDownloadMessageComplete] msgId:" + message.getMsgId()); +// postDowloadMessageResult(message); +// +// if (message.getType() == Type.VIDEO +// && mOnMessageReportCallback != null +// && message.getDirection() == Direction.RECEIVE +// && mOnMessageReportCallback instanceof ChattingFragment) { +// +// ((ChattingFragment) mOnMessageReportCallback) +// .dismissPostingDialog(); +// } +// } else if(e.errorCode == 502){//微信端发送无扩展名图片没加载e.errorCode = 502 +// if (message == null) +// return; +// // 处理发送文件IM消息的时候进度回调 +// LogUtil.d(TAG,"[onDownloadMessageComplete] msgId:502" + message.getMsgId()); +// postDowloadMessageResult(message); +// +// if (message.getType() == Type.VIDEO +// && mOnMessageReportCallback != null +// && message.getDirection() == Direction.RECEIVE +// && mOnMessageReportCallback instanceof ChattingFragment) { +// +// ((ChattingFragment) mOnMessageReportCallback) +// .dismissPostingDialog(); +// } +// /** +// * 如果code = 171251,,建立socket失败或发送接收数据错误 +// * */ +// }else if (e.errorCode==171251){ +// if (message == null) +// return; +// // 处理发送文件IM消息的时候进度回调 +// LogUtil.d(TAG,"[onDownloadMessageComplete] msgId:" + message.getMsgId()); +// postDowloadMessageResult(message); +// +// if (message.getType() == Type.VIDEO +// && mOnMessageReportCallback != null +// && message.getDirection() == Direction.RECEIVE +// && mOnMessageReportCallback instanceof ChattingFragment) { +// +// ((ChattingFragment) mOnMessageReportCallback) +// .dismissPostingDialog(); +// } +// +//// if (list==null){ +//// list = new ArrayList<>(); +//// } +//// list.add(message); +//// Gson gson = new Gson(); +//// String jsonStr=gson.toJson(list); //将List转换成Json +//// SharePrefUtil.saveString(UIUtils.getContext(),"171251",jsonStr); +// }else { +// // 重试下载3次 +// SyncMsgEntry remove = syncMessage.remove(message.getMsgId()); +// if (remove == null) { +// return; +// } +// LogUtil.d(TAG,"[onDownloadMessageComplete] download fail , retry :"+ remove.retryCount); +// retryDownload(remove); +// } +// } +// +// @Override +// public void onProgress(String msgId, int totalByte, int progressByte) { +// // 处理发送文件IM消息的时候进度回调 +// LogUtil.d(TAG, "[IMChattingHelper - onProgress] msgId: " + msgId +// + " , totalByte: " + totalByte + " , progressByte:" +// + progressByte); +// } + + /** + * 重试下载3次 + * + * @param entry + */ + private void retryDownload(SyncMsgEntry entry) { +// if (entry == null || entry.msg == null || entry.isRetryLimit()) { +// return; +// } + entry.increase(); + // download .. +// if (mChatManager != null) { +// if (entry.thumbnail) { +// mChatManager.downloadThumbnailMessage(entry.msg, this); +// } else { +// mChatManager.downloadMediaMessage(entry.msg, this); +// } +// } +// syncMessage.put(entry.msg.getMsgId(), entry); + } + +// private synchronized void postDowloadMessageResult(ECMessage message) { +// if (message == null) { +// return; +// } +// +// LogUtil.i(" postDowloadMessageResult==getUserData===" +// + message.getUserData()); +// if (message.getType() == Type.VOICE) { +// ECVoiceMessageBody voiceBody = (ECVoiceMessageBody) message +// .getBody(); +// voiceBody.setDuration(DemoUtils.calculateVoiceTime(voiceBody +// .getLocalUrl())); +// } else if (message.getType() == Type.IMAGE) { +// ImgInfo thumbImgInfo = ImgInfoSqlManager.getInstance().getThumbImgInfo(message); +// if (thumbImgInfo == null) { +// return; +// } +// //缩略图存入数据库 +// ImgInfoSqlManager.getInstance().insertImageInfo(thumbImgInfo); +// String bigImg = thumbImgInfo.getBigImgPath(); +// LogUtil.i("缩略图存入数据库 bigImg = "+bigImg); +//// LogToFileUtils.write("缩略图存入数据库 bigImg = "+bigImg);//写入日志 +// BitmapFactory.Options options = DemoUtils.getBitmapOptions(new File(FileAccessor.getImagePathName(),thumbImgInfo.getThumbImgPath()).getAbsolutePath()); +// +// message.setUserData("outWidth://" + options.outWidth +// + ",outHeight://" + options.outHeight + ",THUMBNAIL://" +// + message.getMsgId() + ",PICGIF://" + thumbImgInfo.isGif); +// } +// if (IMessageSqlManager.updateIMessageDownload(message) <= 0) { +// return; +// } +// if (mOnMessageReportCallback != null) { +// mOnMessageReportCallback.onMessageReport(null, message); +// } +// boolean showNotice = true; +// SyncMsgEntry remove = syncMessage.remove(message.getMsgId()); +// if (remove != null) { +// showNotice = remove.showNotice; +// if (mOnMessageReportCallback != null && remove.msg != null) { +// ArrayList msgs = new ArrayList(); +// msgs.add(remove.msg); +// mOnMessageReportCallback.onPushMessage( +// remove.msg.getSessionId(), msgs); +// } +// } +// if (showNotice) +// showNotification(message, noTxtUserData); +// } + + public class SyncMsgEntry { + // 是否是第一次初始化同步消息 + boolean showNotice = false; + boolean thumbnail = false; + + // 重试下载次数 + private int retryCount = 1; +// ECMessage msg; + +// public SyncMsgEntry(boolean showNotice, boolean thumbnail, +// ECMessage message) { +// this.showNotice = showNotice; +// this.msg = message; +// this.thumbnail = thumbnail; +// } + + public void increase() { + retryCount++; + } + + public boolean isRetryLimit() { + return retryCount >= 3; + } + } + +// @Override +// public void onReceiveMessageNotify(ECMessageNotify msg) { +// if (msg.getNotifyType() == NotifyType.DELETE) { +// ECMessageDeleteNotify deleteMsg = (ECMessageDeleteNotify) msg; +// IMessageSqlManager.updateMsgReadStatus(msg.getMsgId(), true); +// IMessageSqlManager.deleteLocalFileAfterFire(msg.getMsgId()); +// if (mOnMessageReportCallback != null) { +// mOnMessageReportCallback.onMessageReport(null, null); +// } +// }else if(msg.getNotifyType() == NotifyType.REVOKE){ +// ECMessageRevokeNotify revokeNotify = (ECMessageRevokeNotify)msg; +// if(revokeNotify!=null){ +// if(!revokeNotify.getRevoker().equalsIgnoreCase(CCPAppManager.getUserId())) { +// IMessageSqlManager.insertSysMessage("对方撤回了一条消息",revokeNotify.getSessionId()); +// } +// } +// IMessageSqlManager.delSingleMsg(revokeNotify.getMsgId()); +// if (mOnMessageReportCallback != null) { +// mOnMessageReportCallback.onMessageReport(null, null); +// } +// } +// CCPAppManager.getContext().sendBroadcast( +// new Intent(IMessageSqlManager.ACTION_SESSION_DEL)); +// +// +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryActivity.java new file mode 100644 index 0000000..da7e029 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryActivity.java @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.ProgressBar; + +import java.io.File; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ChattingAysnImageLoader; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * 图片预览大图 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class ImageGalleryActivity extends ECSuperActivity implements View.OnClickListener{ + + + + private Bitmap mThumbnailBitmap; + + private ChattingAysnImageLoader mAsynImageDownload; + + private ImageMsgInfoEntry mMsgEntry; + + private ImageView mImageView; + private ProgressBar mpProgressBar; + + private String mImageUrl; + + /** + * + */ + private boolean mFullscreen = true; + + /** + * keys for extras and icicles + */ + public final static String CHATTING_MESSAGE = "ccp@chatting_message"; + + + final private ChattingAysnImageLoader.ChattingImageCallBack mChattingImageCallBack + = new ChattingAysnImageLoader.ChattingImageCallBack() { + + @Override + public void onChattingImageLoaded() { + if (null != mMsgEntry.getRemoteUrl() && !TextUtils.isEmpty(mMsgEntry.getRemoteUrl())) {// load + String saveName = DemoUtils.md5(mMsgEntry.getRemoteUrl()) + ".jpg"; + LogUtil.d("this image saveName " + saveName); + if (new File(FileAccessor.getImagePathName() , saveName).exists()) { + System.gc(); + Drawable fromPath = Drawable.createFromPath(FileAccessor.getImagePathName()+"/"+saveName); + if(fromPath == null){ + finish(); + } + if(mAsynImageDownload != null && mMsgEntry != null){ + mAsynImageDownload.removeKeyCache(mMsgEntry.getId()); + } + LogUtil.d("loading from sdcard " + saveName + ".jpg"); + if(fromPath != null && mImageView != null){ + mImageView.setImageDrawable(fromPath); + mpProgressBar.setVisibility(View.GONE); + } + }else{ + mpProgressBar.setVisibility(View.VISIBLE); + } + } + } + }; + + + private final Handler mHandlerCallbck = new Handler() { + + @Override + public void dispatchMessage(Message msg) { + super.dispatchMessage(msg); + mFullscreen = !mFullscreen; + setTitleFooterVisible(mFullscreen); + } + + }; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + + // Bring up the softkeyboard so the user can immediately enter msg. This + // call won't do anything on devices with a hard keyboard. + getWindow().setSoftInputMode( + WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE + | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); + + mAsynImageDownload = ChattingAysnImageLoader.getInstance(this); + LogUtil.d(LogUtil.getLogUtilsTag(ImageGalleryActivity.class) ,"load is " + mAsynImageDownload.toString()); + + Bundle mBundle = getIntent().getExtras(); + if (mBundle != null) { + Object o = mBundle .getParcelable(CHATTING_MESSAGE); + if (o != null && o instanceof ImageMsgInfoEntry) { + mMsgEntry = (ImageMsgInfoEntry) o; + } + } + + if (mMsgEntry == null) { + finish(); + return ; + } + if(mThumbnailBitmap == null){ + mThumbnailBitmap = BitmapFactory.decodeFile(FileAccessor.getImagePathName() + "/" + mMsgEntry.getThumbnailurl()); + } + + // Initialize members for UI elements. + initResourceRefs(); + + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, "1 / 1", this); + setActionBarTitle("1 / 1"); + setTitleFooterVisible(true); + } + + @Override + public void onBaseContentViewAttach(View contentView) { + View activityLayoutView = getActivityLayoutView(); + ((ViewGroup) activityLayoutView.getParent()).removeView(activityLayoutView); + ((ViewGroup) getWindow().getDecorView()).addView(activityLayoutView , 1); + + } + + /** + * + * @param request + */ + private void requestStatusbars(boolean request) { + if(request) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); + return ; + } + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "request custom title"); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + /** + * Full screen, hidden actionBar + * @param visible + */ + void setTitleFooterVisible(boolean visible) { + if(visible) { + requestStatusbars(false); + showTitleView(); + return ; + } + + requestStatusbars(true); + hideTitleView(); + } + + /** + * + */ + private void initResourceRefs() { + mImageView = (ImageView) findViewById(R.id.image_photo); + mImageView.setOnClickListener(this); + mpProgressBar = (ProgressBar) findViewById(R.id.footLoading); + mImageView.setAdjustViewBounds(true); + + // 查看大图是否已经在本地 + + + + mImageUrl = mMsgEntry.getPicurl(); + if (null != mImageUrl && !TextUtils.isEmpty(mImageUrl) && !mImageUrl.startsWith("http")) {// load + Drawable drawable = null; + if (new File(FileAccessor.getImagePathName() , mImageUrl).exists()) { + System.gc(); + drawable = Drawable.createFromPath(FileAccessor.getImagePathName()+"/"+mImageUrl); + mThumbnailBitmap = BitmapFactory.decodeFile(FileAccessor.getImagePathName() + "/" + mMsgEntry.getThumbnailurl()); + if (drawable == null) { + finish(); + } + LogUtil.d("loading from sdcard " + mImageUrl); + mImageView.setImageDrawable(drawable); + mpProgressBar.setVisibility(View.GONE); + } + // 本地文件已经损坏 + } else { + String thumbnailurl = mMsgEntry.getThumbnailurl(); + if(new File(thumbnailurl).exists()) { + mImageView.setImageBitmap(BitmapFactory.decodeFile(thumbnailurl)); + return ; + } + mImageView.setImageBitmap(mThumbnailBitmap); + mAsynImageDownload.addTask(null, mMsgEntry, false); + mpProgressBar.setVisibility(View.VISIBLE); + } + + } + + /* (non-Javadoc) + * @see com.hisun.cas.ui.CASActivity#onResume() + */ + @Override + protected void onResume() { + if(mAsynImageDownload != null){ + mAsynImageDownload.setCallBack(mChattingImageCallBack); + } + super.onResume(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if(mImageView != null && mImageView.getDrawable() != null ){ + Bitmap bitmap = ((BitmapDrawable)mImageView.getDrawable()).getBitmap(); + mImageView.setImageDrawable(null); + if(bitmap != null){ + bitmap.recycle(); + bitmap = null; + } + } + + mImageView = null; + mpProgressBar = null; + //mAsynImageDownload.stop(); + + System.gc(); + } + + @Override + protected int getLayoutId() { + + return R.layout.slide_image; + } + + @Override + public void onClick(View v) { + mHandlerCallbck.sendEmptyMessageDelayed(1, 350L); + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + + default: + break; + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryFragment.java new file mode 100644 index 0000000..66a2001 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGalleryFragment.java @@ -0,0 +1,332 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.Manifest; +import android.app.Dialog; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.Gravity; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.ImageLoadingProgressListener; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.nostra13.universalimageloader.utils.DiskCacheUtils; + +import java.io.File; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.photoview.PhotoView; +import cn.shangyu.gdxzExpert.ecdemo.photoview.PhotoViewAttacher; +import cn.shangyu.gdxzExpert.ecdemo.storage.ImgInfoSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.CCPFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImgInfo; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.ECListDialog; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android + * Created by Jorstin on 2015/3/30. + */ +public class ImageGalleryFragment extends CCPFragment { + + private static final String TAG = "ImageGalleryFragment"; + + @Override + protected int getLayoutId() { + return R.layout.image_grallery_fragment; + } + + private String mImageUrl; + private String mImageUrlnew; + private PhotoView mImageView; + private LinearLayout progressBar; + private TextView mProgress; + private ViewImageInfo mEntry; + private Bitmap mThumbnailBitmap; + + private X5WebView webView; + private File imgCacheFile; + private String mCacheImageUrl; + private FrameLayout mViewContainer; + private FrameLayout mSuccessLayout; + private LinearLayout mFailLayout; + private boolean isGif = false; + + public static ImageGalleryFragment newInstance(String imageUrl) { + final ImageGalleryFragment f = new ImageGalleryFragment(); + + final Bundle args = new Bundle(); + args.putString("url", imageUrl); + f.setArguments(args); + + return f; + } + + public static ImageGalleryFragment newInstance(ViewImageInfo entry) { + final ImageGalleryFragment f = new ImageGalleryFragment(); + final Bundle args = new Bundle(); + args.putParcelable("entry", entry); + f.setArguments(args); + + return f; + } + + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mEntry = getArguments() != null ? getArguments().getParcelable("entry") : null; + } + + + @Override + public int getTitleLayoutId() { + return -1; + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + mViewContainer = (FrameLayout) findViewById(R.id.image_container); + mSuccessLayout = (FrameLayout) findViewById(R.id.image_gallery_download_success); + mFailLayout = (LinearLayout) findViewById(R.id.image_gallery_download_fail); + mImageView = (PhotoView) findViewById(R.id.image); + mImageView.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + ECListDialog dialog = new ECListDialog(getActivity() , new String[]{"保存到手机"}); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + handleDialogItemClick(position); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + handleDialogItemClick(position); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + handleDialogItemClick(position); + } + + } + }); + dialog.show(); + return false; + } + }); + mImageView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() { + + @Override + public void onPhotoTap(View arg0, float arg1, float arg2) { + getActivity().finish(); + } + }); + + initWebView(); + + progressBar = (LinearLayout) findViewById(R.id.loading); + mProgress = (TextView) findViewById(R.id.uploading_tv); + if (mEntry == null) { + finish(); + return ; + } + if(mThumbnailBitmap == null){ + if(mEntry.getThumbnailurl()==null) + return; + mThumbnailBitmap = BitmapFactory.decodeFile(FileAccessor.getImagePathName() + "/" + mEntry.getThumbnailurl()); + isGif = mEntry.getThumbnailurl().endsWith(".gif"); + } + + // 查看大图是否已经在本地 + mImageUrl = mEntry.getPicurl(); + mImageUrlnew= mEntry.getPicurl(); + LogUtil.i("mImageUrl = "+mImageUrl); + if (null != mImageUrl && !TextUtils.isEmpty(mImageUrl) && !mImageUrl.startsWith("http")) { + // load 本地 + mImageUrl = "file://" + FileAccessor.getImagePathName() + "/"+ mImageUrl; + } else if(StringUtil.isEmpty(mImageUrl)){ + // 下载 + mImageUrl = mEntry.getThumbnailurl(); + }else { + mImageUrl = mEntry.getPicurl(); + } + if(!isGif) { + isGif = mImageUrl.endsWith(".gif"); + } + mEntry.setIsGif(isGif); + final DisplayImageOptions.Builder imageOptionsBuilder = DemoUtils.getChatDisplayImageOptionsBuilder(); + imageOptionsBuilder.showImageOnLoading(new BitmapDrawable(mThumbnailBitmap)); + + LogUtil.i("Thumbnailurl = "+mEntry.getThumbnailurl()); + + ImageLoader.getInstance().displayImage(mImageUrl, mImageView, imageOptionsBuilder.build(), new SimpleImageLoadingListener() { + @Override + public void onLoadingStarted(String imageUri, View view) { + progressBar.setVisibility(View.VISIBLE); + mImageView.setImageBitmap(mThumbnailBitmap); + } + + + @Override + public void onLoadingFailed(String imageUri, View view, FailReason failReason) { + mImageView.setImageBitmap(mThumbnailBitmap); + String message = null; + switch (failReason.getType()) { + case IO_ERROR: + case UNKNOWN: + case DECODING_ERROR: + break ; + case NETWORK_DENIED: + message = "网络有问题,无法下载"; + break; + case OUT_OF_MEMORY: + message = "图片太大无法显示"; + break; + } + if (message != null) { + Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); + } + progressBar.setVisibility(View.GONE); + mEntry.setIsDownload(false); + mSuccessLayout.setVisibility(View.GONE); + mFailLayout.setVisibility(View.VISIBLE); + } + + @Override + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { + LogUtil.i("imageUri = "+imageUri); + mSuccessLayout.setVisibility(View.VISIBLE); + mFailLayout.setVisibility(View.GONE); + mEntry.setIsDownload(true); + progressBar.setVisibility(View.GONE); + imgCacheFile = DiskCacheUtils.findInCache(imageUri, ImageLoader.getInstance().getDiskCache()); + if (imgCacheFile != null) { + if (isGif || loadedImage.getHeight() > DemoUtils.getScreenHeight(getActivity())) { + mCacheImageUrl = "file://" + imgCacheFile.getAbsolutePath(); + + mImageView.setVisibility(View.GONE); + showImgInWebView(mCacheImageUrl); + } else { + mImageView.setImageBitmap(loadedImage); + } + + if (imageUri.startsWith("http")) { + ImgInfo thumbimginfo = ImgInfoSqlManager.getInstance().getImgInfo(mEntry.getIndex()); + if(thumbimginfo != null && mCacheImageUrl != null) { + thumbimginfo.setBigImgPath(mCacheImageUrl.substring(mCacheImageUrl.lastIndexOf("/"))); + ImgInfoSqlManager.getInstance().updateImageInfo(thumbimginfo); + } + } + LogUtil.i("mCacheImageUrl = "+mCacheImageUrl); + } + } + }, new ImageLoadingProgressListener() { + @Override + public void onProgressUpdate(String s, View view, int current, int total) { + mProgress.setText((int)(current * 100f / total) + " %"); + } + }); + } + + + private void initWebView() { + X5WebView.initHardwareAccelerate(getActivity()); + webView = (X5WebView) findViewById(R.id.web_gif); + webView.setBackgroundColor(0); + } + + private void handleDialogItemClick(int position) { + switch (position) { + case 0: + try { + if(imgCacheFile==null) + { + Toast.makeText(getContext(), "图片保存成功", + Toast.LENGTH_SHORT).show(); + new DownLoadUrlImage(mEntry.getPicurl(), getContext()); + } + if(mEntry != null && mEntry.isGif()) { + DemoUtils.saveImage(imgCacheFile.getAbsolutePath(),".gif"); + return; + } + LogUtil.i("imgCacheFile.Path="+imgCacheFile.getAbsolutePath()); + DemoUtils.saveImage(imgCacheFile.getAbsolutePath()); + } catch (Exception e) { + LogUtil.e(TAG, "onContextItemSelected error "); + } + break; + default: + break; + } + } + + @Override + public void onDestroyView() { + super.onDestroyView(); + if(mImageView != null) { + mImageView.setImageDrawable(null); + ImageLoader.getInstance().cancelDisplayTask(mImageView); + } + mImageView = null; + if(mViewContainer != null) { + mViewContainer.removeView(webView); + } + if(webView != null) { + webView.removeAllViews(); + webView.destroy(); + webView = null; + } + } + + /** + * 使用WebView加载GIF图片和大图 + * + * @param s + */ + private void showImgInWebView(final String s) { + if (webView != null) { + webView.loadDataWithBaseURL("", "
\"\"
".replace("img_url", s), "text/html", "utf-8", ""); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGralleryPagerActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGralleryPagerActivity.java new file mode 100644 index 0000000..4cacd77 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageGralleryPagerActivity.java @@ -0,0 +1,408 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.SpannableString; +import android.text.style.RelativeSizeSpan; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentStatePagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.utils.DiskCacheUtils; + +import java.io.File; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android Created by Jorstin on + * 2015/3/30. + */ +public class ImageGralleryPagerActivity extends ECSuperActivity implements + View.OnClickListener { + + private static final String TAG = "ImageGralleryPagerActivity"; + + private static final String STATE_POSITION = "STATE_POSITION"; + public static final String EXTRA_IMAGE_INDEX = "image_index"; + public static final String EXTRA_IMAGE_URLS = "image_urls"; + + private boolean mFullscreen = true; + private HackyViewPager mPager; + private int pagerPosition; + private TextView indicator; + private List urls; + + @Override + protected int getLayoutId() { + return R.layout.image_grallery_container; + } + + @Override + protected boolean isEnableSwipe() { + // TODO Auto-generated method stub + return false; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, + "1 / 1", this); + pagerPosition = getIntent().getIntExtra(EXTRA_IMAGE_INDEX, 0); + urls = getIntent().getParcelableArrayListExtra(EXTRA_IMAGE_URLS); + boolean download=getIntent().getBooleanExtra("download", false); + if(download){ + findViewById(R.id.imagebrower_layout_pagelayout).setVisibility(View.GONE); + } + if (urls == null || urls.isEmpty()) { + finish(); + return; + } + if (pagerPosition > urls.size()) { + pagerPosition = 0; + } + + setActionBarTitle(pagerPosition + "/" + + (urls != null ? urls.size() : 0)); + mPager = (HackyViewPager) findViewById(R.id.pager); + final ImagePagerAdapter mAdapter = new ImagePagerAdapter(getSupportFragmentManager(), urls); + mPager.setAdapter(mAdapter); + indicator = (TextView) findViewById(R.id.indicator); + findViewById(R.id.imagebrower_iv_save).setOnClickListener( + new View.OnClickListener() { + /* + * (non-Javadoc) + * + * @see + * android.view.View.OnClickListener#onClick(android.view + * .View) + */ + @Override + public void onClick(View v) { + if (mAdapter != null) { + ViewImageInfo viewImageInfo = urls.get(mPager + .getCurrentItem()); + if (viewImageInfo == null + || !viewImageInfo.isDownload()) { + ToastUtil + .showMessage(R.string.save_img_waite_download); + return; + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(ImageGralleryPagerActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + try { + File file; +// // 由于不是聊天的图片查看无法下载保存 + String llll= viewImageInfo.getPicurl(); + String picurl = llll.toLowerCase();//大写转小写 + LogUtil.i("picurl = "+picurl); +// //3.4.8版本 + if (picurl.contains("http")||picurl.contains(Url.urlHtml)||picurl.contains(".jpg")||picurl.contains(".png")|| + picurl.contains(".gif")||picurl.contains(".jpeg")||picurl.contains(".tga")||picurl.contains(".bmp")||picurl.contains("dcsvip1imapp.cloopen.net:8888")) { + file = DiskCacheUtils.findInCache(viewImageInfo.getPicurl(), ImageLoader.getInstance().getDiskCache()); + }else { + file = new File(FileAccessor.getImagePathName(), viewImageInfo.getPicurl()); + + } + + if (viewImageInfo != null&& viewImageInfo.isGif()) { + DemoUtils.saveImage(file.getAbsolutePath(),".gif"); + return; + } + if(file!=null) + { + DemoUtils.saveImage(file.getAbsolutePath()); + } + else + { + Toast.makeText(getBaseContext(), "图片保存成功", + Toast.LENGTH_SHORT).show(); + new DownLoadUrlImage(viewImageInfo.getPicurl(), getApplicationContext()); +// file = new File(FileAccessor.getImagePathName() ,viewImageInfo.getPicurl()); +// DemoUtils.saveImage(file.getAbsolutePath()); + } + +// File file = new File(FileAccessor.getImagePathName() ,viewImageInfo.getPicurl()); +// if(viewImageInfo != null && viewImageInfo.isGif()) { +// DemoUtils.saveImage(file.getAbsolutePath(),".gif"); +// return; +// } +// DemoUtils.saveImage(file.getAbsolutePath()); + + } catch (Exception e) { + LogUtil.e(TAG, e.toString()); + } + } else { + EasyWindow.with(ImageGralleryPagerActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(ImageGralleryPagerActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + try { + File file; +// // 由于不是聊天的图片查看无法下载保存 + String llll= viewImageInfo.getPicurl(); + String picurl = llll.toLowerCase();//大写转小写 + LogUtil.i("picurl = "+picurl); +// //3.4.8版本 + if (picurl.contains("http")||picurl.contains(Url.urlHtml)||picurl.contains(".jpg")||picurl.contains(".png")||picurl.contains(".gif")||picurl.contains(".jpeg")||picurl.contains(".tga")||picurl.contains(".bmp")||picurl.contains("dcsvip1imapp.cloopen.net:8888")) { +// 3.4.8版本修改 +// if (viewImageInfo.getPicurl().contains(Url.urlHtml)) { + file = DiskCacheUtils.findInCache(viewImageInfo.getPicurl(), ImageLoader.getInstance().getDiskCache()); + } +// else if(picurl.contains("http")) +// { +// file = new File(FileAccessor.getImagePathName(), System.currentTimeMillis()+""); +// } + else { + file = new File(FileAccessor.getImagePathName(), viewImageInfo.getPicurl()); + + } + + if (viewImageInfo != null&& viewImageInfo.isGif()) { + DemoUtils.saveImage(file.getAbsolutePath(),".gif"); + return; + } + DemoUtils.saveImage(file.getAbsolutePath()); + +// File file = new File(FileAccessor.getImagePathName() ,viewImageInfo.getPicurl()); +// if(viewImageInfo != null && viewImageInfo.isGif()) { +// DemoUtils.saveImage(file.getAbsolutePath(),".gif"); +// return; +// } +// DemoUtils.saveImage(file.getAbsolutePath()); + + } catch (Exception e) { + LogUtil.e(TAG, e.toString()); + } + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + try { + File file; +// // 由于不是聊天的图片查看无法下载保存 + String llll= viewImageInfo.getPicurl(); + String picurl = llll.toLowerCase();//大写转小写 + LogUtil.i("picurl = "+picurl); +// //3.4.8版本 + if (picurl.contains("http")||picurl.contains(Url.urlHtml)||picurl.contains(".jpg")||picurl.contains(".png")||picurl.contains(".gif")||picurl.contains(".jpeg")||picurl.contains(".tga")||picurl.contains(".bmp")||picurl.contains("dcsvip1imapp.cloopen.net:8888")) { +// 3.4.8版本修改 +// if (viewImageInfo.getPicurl().contains(Url.urlHtml)) { + file = DiskCacheUtils.findInCache(viewImageInfo.getPicurl(), ImageLoader.getInstance().getDiskCache()); + } +// else if(picurl.contains("http")) +// { +// file = new File(FileAccessor.getImagePathName(), System.currentTimeMillis()+""); +// } + else { + file = new File(FileAccessor.getImagePathName(), viewImageInfo.getPicurl()); + + } + + if (viewImageInfo != null&& viewImageInfo.isGif()) { + DemoUtils.saveImage(file.getAbsolutePath(),".gif"); + return; + } + DemoUtils.saveImage(file.getAbsolutePath()); + +// File file = new File(FileAccessor.getImagePathName() ,viewImageInfo.getPicurl()); +// if(viewImageInfo != null && viewImageInfo.isGif()) { +// DemoUtils.saveImage(file.getAbsolutePath(),".gif"); +// return; +// } +// DemoUtils.saveImage(file.getAbsolutePath()); + + } catch (Exception e) { + LogUtil.e(TAG, e.toString()); + } + } + + + } + } + }); + // 更新下标 + mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrollStateChanged(int arg0) { + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + } + + @Override + public void onPageSelected(int arg0) { + initIndicatorIndex(arg0); + } + + }); + if (savedInstanceState != null) { + pagerPosition = savedInstanceState.getInt(STATE_POSITION); + } + + mPager.setCurrentItem(pagerPosition); + initIndicatorIndex(pagerPosition); + setTitleFooterVisible(true); + } + + private void initIndicatorIndex(int arg0) { + CharSequence text = getString(R.string.viewpager_indicator, arg0 + 1, + mPager.getAdapter().getCount()); + SpannableString spannableString = new SpannableString(text); + spannableString.setSpan(new RelativeSizeSpan(1.5F), 0, text.toString() + .indexOf("/"), SpannableString.SPAN_PRIORITY); + indicator.setText(spannableString); + } + + @Override + public void onClick(View v) { + mHandlerCallbck.sendEmptyMessageDelayed(1, 350L); + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + + default: + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (urls != null) { + urls.clear(); + urls = null; + } + if (mHandlerCallbck != null) { + mHandlerCallbck.removeCallbacksAndMessages(null); + } + mPager = null; + System.gc(); + + } + + private final Handler mHandlerCallbck = new Handler() { + + @Override + public void dispatchMessage(Message msg) { + super.dispatchMessage(msg); + mFullscreen = !mFullscreen; + setTitleFooterVisible(mFullscreen); + } + + }; + + @Override + public void onBaseContentViewAttach(View contentView) { + View activityLayoutView = getActivityLayoutView(); + ((ViewGroup) activityLayoutView.getParent()) + .removeView(activityLayoutView); + ((ViewGroup) getWindow().getDecorView()).addView(activityLayoutView, 1); + + } + + /** + * + * @param request + */ + private void requestStatusbars(boolean request) { + if (request) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + return; + } + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "request custom title"); + getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + /** + * Full screen, hidden actionBar + * + * @param visible + */ + void setTitleFooterVisible(boolean visible) { + if (visible) { + requestStatusbars(false); + showTitleView(); + return; + } + + requestStatusbars(true); + hideTitleView(); + } + + @SuppressLint("MissingSuperCall") + @Override + public void onSaveInstanceState(Bundle outState) { + outState.putInt(STATE_POSITION, mPager.getCurrentItem()); + } + + private class ImagePagerAdapter extends FragmentStatePagerAdapter { + + public List fileList; + + public ImagePagerAdapter(FragmentManager fm,List fileList) { + super(fm); + this.fileList = fileList; + } + + @Override + public int getCount() { + return fileList == null ? 0 : fileList.size(); + } + + @Override + public Fragment getItem(int position) { + ViewImageInfo url = fileList.get(position); + return ImageGalleryFragment.newInstance(url); + } + + } + + @Override + public boolean isEnableRightSlideGesture() { + return false; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageMsgInfoEntry.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageMsgInfoEntry.java new file mode 100644 index 0000000..ff2f612 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImageMsgInfoEntry.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class ImageMsgInfoEntry implements Parcelable{ + + // 消息ID + private String id; + // 消息图片url + private String picurl; + private String remoteUrl; + // 消息图片缩略图url + private String thumbnailurl; + // 图片类型 + private String pictype; + // 图片MD5校验值 + private String picmd5; + // 图片大小,单位为字节 + private String picsize; + + + /** + * @return the id + */ + public String getId() { + return id; + } + + /** + * @param id + * the id to set + */ + public void setId(String id) { + this.id = id; + } + + + /** + * @return the picurl + */ + public String getPicurl() { + return picurl; + } + + /** + * @param picurl + * the picurl to set + */ + public void setPicurl(String picurl) { + this.picurl = picurl; + } + + /** + * @return the thumbnailurl + */ + public String getThumbnailurl() { + return thumbnailurl; + } + + /** + * @param thumbnailurl + * the thumbnailurl to set + */ + public void setThumbnailurl(String thumbnailurl) { + this.thumbnailurl = thumbnailurl; + } + + /** + * @return the pictype + */ + public String getPictype() { + return pictype; + } + + /** + * @param pictype + * the pictype to set + */ + public void setPictype(String pictype) { + this.pictype = pictype; + } + + /** + * @return the picmd5 + */ + public String getPicmd5() { + return picmd5; + } + + /** + * @param picmd5 + * the picmd5 to set + */ + public void setPicmd5(String picmd5) { + this.picmd5 = picmd5; + } + + /** + * @return the picsize + */ + public String getPicsize() { + return picsize; + } + + /** + * @param picsize + * the picsize to set + */ + public void setPicsize(String picsize) { + this.picsize = picsize; + } + + /** + * @return the remoteUrl + */ + public String getRemoteUrl() { + return remoteUrl; + } + + /** + * @param remoteUrl the remoteUrl to set + */ + public void setRemoteUrl(String remoteUrl) { + this.remoteUrl = remoteUrl; + } + + /** + * + * @param id + * @param remoteUrl + * @param thumbnailurl + * @param picurl + */ + public ImageMsgInfoEntry(String id, String remoteUrl, String thumbnailurl, + String picurl) { + super(); + this.id = id; + this.picurl = picurl; + this.remoteUrl = remoteUrl; + this.thumbnailurl = thumbnailurl; + } + + public ImageMsgInfoEntry(String msgId) { + this.id = msgId; + } + + private ImageMsgInfoEntry(Parcel in) { + this.id = in.readString(); + this.picurl = in.readString(); + this.thumbnailurl = in.readString(); + this.pictype = in.readString(); + this.picmd5 = in.readString(); + this.picsize = in.readString(); + this.remoteUrl = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + + @Override + public ImageMsgInfoEntry createFromParcel(Parcel in) { + return new ImageMsgInfoEntry(in); + } + + @Override + public ImageMsgInfoEntry[] newArray(int size) { + return new ImageMsgInfoEntry[size]; + } + + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.id); + dest.writeString(this.picurl); + dest.writeString(this.thumbnailurl); + dest.writeString(this.pictype); + dest.writeString(this.picmd5); + dest.writeString(this.picsize); + dest.writeString(this.remoteUrl); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImagePreviewActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImagePreviewActivity.java new file mode 100644 index 0000000..6a290e6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ImagePreviewActivity.java @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + + +import android.app.Activity; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; + +import java.io.InvalidClassException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.CoreHandler; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.photoview.PhotoView; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarView; + + +/** + * 图片预览 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class ImagePreviewActivity extends Activity implements View.OnClickListener{ + + private static final String TAG = "ECDemo.ImagePreviewActivity"; + private TopBarView mTopBarView; + private PhotoView mImageView; + private Bitmap bitmap; + + private CoreHandler mCoreHandler = new CoreHandler(new CoreHandler.HandlerCallbck() { + @Override + public boolean dispatchMessage() { + mImageView.setImageBitmap(bitmap); + mImageView.invalidate(); + mTopBarView.setRightBtnEnable(true); + return false; + } + }, false); + +// @Override +// protected int getLayoutId() { +// return R.layout.image_preview_activity; +// } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.image_preview_activity); + + mTopBarView = findViewById(R.id.mtopview); + mTopBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_brown, null, + getString(R.string.dialog_ok_button), + getString(R.string.app_title_image_preview), null, this); + mTopBarView.setRightBtnEnable(false); + + initViewUI(); + } + + private void initViewUI() { + final String path = ECPreferences.getSharedPreferences(). + getString(ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH.getId(), + (String) ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH.getDefaultValue()); + if(TextUtils.isEmpty(path)) { + finish(); + return ; + } + mImageView = (PhotoView) findViewById(R.id.image); + bitmap = DemoUtils.getSuitableBitmap(path); + mCoreHandler.sendEmptyMessageDelayed(200); +// ECHandlerHelper handlerHelper = new ECHandlerHelper(); +// handlerHelper.postRunnOnThead(new Runnable() { +// +// @Override +// public void run() { + +// } +// }); + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if(bitmap != null && !bitmap.isRecycled()) { + bitmap.recycle(); + bitmap = null; + } + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: +// hideSoftKeyboard(); + setResult(0x5); + finish(); + break; + case R.id.text_right: + try { + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_PREVIEW_SELECTED, Boolean.TRUE, true); + setResult(RESULT_OK); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + finish(); + break; + default: + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/MsgInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/MsgInfo.java new file mode 100644 index 0000000..cfe0d5a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/MsgInfo.java @@ -0,0 +1,9 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android + * Created by Jorstin on 2015/6/18. + */ +public class MsgInfo { + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/VideoRecordActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/VideoRecordActivity.java new file mode 100644 index 0000000..52edaa3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/VideoRecordActivity.java @@ -0,0 +1,477 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.annotation.SuppressLint; +import android.content.Intent; +import android.graphics.Bitmap; +import android.hardware.Camera; +import android.hardware.Camera.CameraInfo; +import android.media.MediaRecorder; +import android.media.MediaRecorder.OnErrorListener; +import android.media.MediaRecorder.OnInfoListener; +import android.net.Uri; +import android.os.Bundle; +import android.os.SystemClock; +import android.util.Log; +import android.view.SurfaceHolder; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.Chronometer; +import android.widget.ImageView; +import android.widget.Toast; +import android.widget.VideoView; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.MimeTypesTools; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; + + +public class VideoRecordActivity extends ECSuperActivity implements + OnClickListener, SurfaceHolder.Callback, OnInfoListener, + OnErrorListener { + private static final String TAG = "VideoRecordActivity"; + private VideoView mVideoView; + private Button btn_switch; + private int frontCamera = 0;// 0是backCamera 1是frontCamera + private MediaRecorder mediaRecorder; + private Button btn_start; + private View btn_retry; + private File tempFile; + private Chronometer chronometer; + private ImageView btn_send; + private View btn_play; + private Camera mCamera; + private SurfaceHolder mSurfaceHolder; + private ImageView imageview; + private Button btn_stop; + private boolean isPlaying; + + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_green, null, + getString(R.string.video_send), + getString(R.string.video_record), null, this); + + initViews(); + + } + + @Override + protected void onResume() { + Log.v(TAG, "in onResume"); + super.onResume(); + if (!initCamera()) + finish(); + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + stopRecording(); + } + + @Override + protected void onStop() { + super.onStop(); + } + + @SuppressLint("NewApi") + private boolean initCamera() { + + try { + if (frontCamera == 0) { + mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK); + } else { + mCamera = Camera.open(CameraInfo.CAMERA_FACING_FRONT); + } + Camera.Parameters camParams = mCamera.getParameters(); + mCamera.lock(); + mSurfaceHolder = mVideoView.getHolder(); + mSurfaceHolder.addCallback(this); + mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); + mCamera.setDisplayOrientation(90); + } catch (RuntimeException re) { + Log.v(TAG, "Could not initialize the Camera"); + re.printStackTrace(); + return false; + } + return true; + } + + private void initViews() { + btn_stop = (Button) findViewById(R.id.stop); + btn_stop.setOnClickListener(this); + btn_switch = (Button) findViewById(R.id.switch_btn); + btn_switch.setOnClickListener(this); + imageview = (ImageView) findViewById(R.id.imageview); + mVideoView = (VideoView) findViewById(R.id.surface_video_record); + + mSurfaceHolder = mVideoView.getHolder(); + mSurfaceHolder.addCallback(this); + mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); + + chronometer = (Chronometer) findViewById(R.id.chronometer); + btn_play = findViewById(R.id.btn_play); + btn_play.setOnClickListener(this); + btn_retry = findViewById(R.id.btn_retry); + btn_retry.setOnClickListener(this); + btn_start = (Button) findViewById(R.id.start); + btn_start.setOnClickListener(this); + btn_send = getTopBarView().getRightButton(); + + + btn_send.setEnabled(false); + + } + + @SuppressLint("NewApi") + @Override + public void surfaceCreated(SurfaceHolder holder) { + if (mCamera == null) + initCamera(); + try { + mCamera.setPreviewDisplay(mSurfaceHolder); + mCamera.startPreview(); + } catch (IOException e) { + Log.v(TAG, "Could not start the preview"); + e.printStackTrace(); + } + } + + @Override + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + Log.v(TAG, "surfaceChanged: Width x Height = " + width + "x" + height); + } + + @Override + public void surfaceDestroyed(SurfaceHolder holder) { + if (mCamera != null) { + mCamera.stopPreview(); + releaseCamera(); + } + Log.v(TAG, "surfaceDestroyed "); + } + + @SuppressLint("NewApi") + public void startRecording() { + + if (mediaRecorder == null) + initRecorder(); + mediaRecorder.setOnInfoListener(this); + mediaRecorder.setOnErrorListener(this); + mediaRecorder.start(); //??? + } + + @SuppressLint("NewApi") + private void initRecorder() { + if (mCamera == null) + initCamera(); + + mVideoView.setVisibility(View.VISIBLE); + imageview.setVisibility(View.GONE); + btn_start.setVisibility(View.VISIBLE); + btn_retry.setVisibility(View.INVISIBLE); + + mCamera.stopPreview(); + mediaRecorder = new MediaRecorder(); + mCamera.unlock(); + mediaRecorder.setCamera(mCamera); + + // init + mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); + if (frontCamera == 1) { + mediaRecorder.setOrientationHint(270); + } else { + mediaRecorder.setOrientationHint(90);// 视频旋转 + } + mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); + // other work + tempFile = CommomUtil.TackVideoFilePath(); + // 设置视频编码方式 + mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); + // 设置音频编码方式 + mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); + mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024); + mediaRecorder.setVideoSize(640, 480); + mediaRecorder.setOutputFile(tempFile.getPath()); + mediaRecorder.setMaxDuration(30000); + mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); + // prepare + try { + mediaRecorder.prepare(); + } catch (IllegalStateException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public void stopRecording() { + if (mediaRecorder != null) { + mediaRecorder.setOnErrorListener(null); + mediaRecorder.setOnInfoListener(null); + try { + mediaRecorder.stop(); + } catch (RuntimeException stopException) { + // This can happen if the recorder has already stopped. + Log.e(TAG, "Got IllegalStateException in stopRecording"); + } + } + releaseRecorder(); + + if (mCamera != null) { + mCamera.stopPreview(); + releaseCamera(); + } + + } + + private void releaseCamera() { + if (mCamera != null) { + mCamera.release(); + mCamera = null; + } + } + + private void releaseRecorder() { + if (mediaRecorder != null) { + mediaRecorder.release(); + mediaRecorder = null; + } + } + + @SuppressLint("NewApi") + @Override + public void onClick(View v) { + switch (v.getId()) { + + case R.id.switch_btn: { + + flipit(); + break; + } + case R.id.btn_left: + hideSoftKeyboard(); + stopRecording(); + finish(); + + break; + case R.id.text_right: + + if (btn_send.isEnabled()) { + handleVideoSend(); + } + break; + + case R.id.btn_play: { + if (tempFile != null) { + + snedFilePrevieIntent(tempFile.getAbsolutePath()); + } + break; + } + + case R.id.start: { + // 开始拍摄 按钮从开始拍摄 切到停止拍摄 + startRecording(); + btn_switch.setVisibility(View.INVISIBLE); + btn_start.setVisibility(View.INVISIBLE); + btn_stop.setVisibility(View.VISIBLE); + // 重置其他 + btn_play.setVisibility(View.INVISIBLE); + chronometer.setBase(SystemClock.elapsedRealtime()); + // to do + chronometer.start(); + btn_send.setEnabled(false); + } + break; + case R.id.stop: { + // 点击停止拍摄 状态切换到重新拍照 和预览 + stopRecording(); + + btn_retry.setVisibility(View.VISIBLE); + btn_stop.setVisibility(View.INVISIBLE); + + mVideoView.setVisibility(View.GONE); + btn_switch.setVisibility(View.INVISIBLE); + btn_play.setVisibility(View.VISIBLE); + btn_send.setEnabled(true); + + chronometer.stop(); + imageview.setVisibility(View.VISIBLE); + if (tempFile == null) + return; + + Bitmap createVideoThumbnail = FileUtils + .createVideoThumbnail(tempFile.getAbsolutePath()); + if (createVideoThumbnail != null) { + imageview.setImageBitmap(createVideoThumbnail); + // saveBitmapFile(createVideoThumbnail); + } + + break; + } + case R.id.btn_retry: { + if (isPlaying) { + return; + } + + // 切换回预览 + mVideoView.setMediaController(null); + imageview.setVisibility(View.GONE); + mVideoView.setVisibility(View.VISIBLE); + btn_switch.setVisibility(View.VISIBLE); + btn_start.setVisibility(View.VISIBLE); + btn_play.setVisibility(View.INVISIBLE); + btn_stop.setVisibility(View.INVISIBLE); + btn_retry.setVisibility(View.INVISIBLE); + if (mCamera == null) + initCamera(); + try { + mCamera.setPreviewDisplay(mSurfaceHolder); + mCamera.startPreview(); + } catch (IOException e) { + Log.v(TAG, "Could not start the preview"); + e.printStackTrace(); + } + break; + } + } + + } + + private void handleVideoSend() { + + if(tempFile==null){ + return; + } + + Intent intent = new Intent(); + intent.putExtra("file_name", tempFile.getName()); + intent.putExtra("file_url", tempFile.getAbsolutePath()); + setResult(RESULT_OK, intent); + finish(); + } + + @Override + protected int getLayoutId() { + return R.layout.layout_chat_videorecord; + } + + @SuppressLint("NewApi") + public void flipit() { + // mCamera is the Camera object + if (mCamera == null) { + return; + } + if (Camera.getNumberOfCameras() >= 2) { + btn_switch.setEnabled(false); + if (mCamera != null) { + mCamera.stopPreview(); + mCamera.release(); + mCamera = null; + } + // "which" is just an integer flag + switch (frontCamera) { + case 0: + mCamera = Camera.open(CameraInfo.CAMERA_FACING_FRONT); + frontCamera = 1; + break; + case 1: + mCamera = Camera.open(CameraInfo.CAMERA_FACING_BACK); + frontCamera = 0; + break; + } + try { + // Camera.Parameters parameters = mCamera.getParameters(); + mCamera.lock(); + mCamera.setDisplayOrientation(90); + // mCamera.setParameters(parameters); + mCamera.setPreviewDisplay(mVideoView.getHolder()); + mCamera.startPreview(); + } catch (IOException exception) { + mCamera.release(); + mCamera = null; + } + btn_switch.setEnabled(true); + } + } + + @Override + public void onInfo(MediaRecorder mr, int what, int extra) { + Log.i(TAG, "got a recording event"); + if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) { + Log.i(TAG, "...max duration reached"); + stopRecording(); + + btn_retry.setVisibility(View.VISIBLE); + btn_stop.setVisibility(View.INVISIBLE); + + mVideoView.setVisibility(View.GONE); + btn_switch.setVisibility(View.INVISIBLE); + btn_play.setVisibility(View.VISIBLE); + btn_send.setEnabled(true); + + chronometer.stop(); + if (tempFile == null) + return; + + imageview.setVisibility(View.VISIBLE); + Bitmap createVideoThumbnail = FileUtils + .createVideoThumbnail(tempFile.getAbsolutePath()); + if (createVideoThumbnail != null) { + imageview.setImageBitmap(createVideoThumbnail); + } + } + } + + @Override + public void onError(MediaRecorder mr, int what, int extra) { + Log.e(TAG, "got a recording error"); + stopRecording(); + Toast.makeText(this, + "Recording error has occurred. Stopping the recording", + Toast.LENGTH_SHORT).show(); + } + + void snedFilePrevieIntent(String fileName) { + String type = ""; + try { + Intent intent = new Intent(); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.setAction(Intent.ACTION_VIEW); + type = MimeTypesTools + .getMimeType(getApplicationContext(), fileName); + File file = new File(fileName); + intent.setDataAndType(Uri.fromFile(file), type); + startActivity(intent); + } catch (Exception e) { + } + } + + public void saveBitmapFile(Bitmap bitmap) { + File file = new File("/mnt/sdcard/aa.jpg");// 将要保存图片的路径 + try { + BufferedOutputStream bos = new BufferedOutputStream( + new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); + bos.flush(); + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ViewImageInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ViewImageInfo.java new file mode 100644 index 0000000..934aeb0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/ViewImageInfo.java @@ -0,0 +1,142 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting; + +import android.database.Cursor; +import android.os.Parcel; +import android.os.Parcelable; + +import cn.shangyu.gdxzExpert.ecdemo.storage.ImgInfoSqlManager; + +/** + * com.yuntongxun.ecdemo.ui.chatting in ECDemo_Android + * Created by Jorstin on 2015/4/17. + */ +public class ViewImageInfo implements Parcelable { + + + public static final Creator CREATOR + = new Creator() { + public ViewImageInfo createFromParcel(Parcel in) { + return new ViewImageInfo(in); + } + + public ViewImageInfo[] newArray(int size) { + return new ViewImageInfo[size]; + } + }; + + + private int index; + private String msgLocalId; + private String thumbnailurl; + private String picurl; + private boolean isDownload = false; + private boolean isGif = false; + + public ViewImageInfo(int index , String thumb , String url) { + this.index = index; + this.thumbnailurl = thumb; + this.picurl = url; + checkGif(); + } + + private ViewImageInfo(Parcel in) { + this.index = in.readInt(); + this.msgLocalId = in.readString(); + this.thumbnailurl = in.readString(); + this.picurl = in.readString(); + this.isDownload = (in.readByte() != 0); + this.isGif = (in.readByte() != 0); + + } + + public ViewImageInfo(String thumb , String url) { + this(0, thumb, url); + } + + public ViewImageInfo(Cursor cursor) { + setCursor(cursor); + } + + public int getIndex() { + return index; + } + + public String getThumbnailurl() { + return thumbnailurl; + } + + public void setThumbnailurl(String thumbnailurl) { + this.thumbnailurl = thumbnailurl; + checkGif(); + } + + public String getPicurl() { + return picurl; + } + + public void setPicurl(String picurl) { + this.picurl = picurl; + checkGif(); + } + + private void checkGif() { + if(!isGif && this.thumbnailurl != null) { + isGif = this.thumbnailurl.endsWith(".gif"); + } + if(!isGif && this.picurl != null) { + isGif = this.picurl.endsWith(".gif"); + } + } + + public String getMsgLocalId() { + return msgLocalId; + } + + public void setMsgLocalId(String msgLocalId) { + this.msgLocalId = msgLocalId; + } + + public void setCursor(Cursor cursor) { + this.index = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.ID)); + this.picurl = cursor.getString(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH)); + this.msgLocalId = cursor.getString(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.MSG_LOCAL_ID)); + this.thumbnailurl = cursor.getString(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.THUMBIMG_PATH)); + } + + public boolean isDownload() { + return isDownload; + } + + public void setIsDownload(boolean isDownload) { + this.isDownload = isDownload; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(this.index); + dest.writeString(this.msgLocalId); + dest.writeString(this.thumbnailurl); + dest.writeString(this.picurl); + dest.writeByte((byte) (this.isDownload ? 1 : 0)); + dest.writeByte((byte) (this.isGif ? 1 : 0)); + } + + public boolean isGif() { + return isGif; + } + + public void setIsGif(boolean isGif) { + this.isGif = isGif; + } + + @Override + public String toString() { + return "ViewImageInfo [picurl=" + picurl + "]"; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/ECPullDownView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/ECPullDownView.java new file mode 100644 index 0000000..6ca48cf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/ECPullDownView.java @@ -0,0 +1,403 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; +import android.graphics.Color; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.AccelerateInterpolator; +import android.widget.FrameLayout; +import android.widget.Scroller; + +import cn.shangyu.gdxzExpert.R; + +/** + * com.yuntongxun.ecdemo.ui.chatting.base in ECDemo_Android + * Created by Jorstin on 2015/4/17. + */ +public class ECPullDownView extends FrameLayout implements GestureDetector.OnGestureListener { + + + private static final String TAG = "ECPullDownView"; + private static int timeInterval = 400; + private static final int bAI = Color.parseColor("#00000000"); + private GestureDetector mGestureDetector; + private Scroller mScroller; + private int scrollType; + private int bottomViewInitializeVisibility = View.INVISIBLE; + private int topViewInitializeVisibility = View.INVISIBLE; + private boolean bAD = false; + private boolean bAH = false; + private boolean bAJ = false; + private int topViewHeightCurrentPotion = -2147483648; + private int bAL = this.bgColor; + private OnRefreshAdapterDataListener mOnRefreshAdapterDataListener; + private int topViewHeight; + private int bottomViewHeight; + private boolean isScrollToTop = false; + private boolean isScrollFarTop = false; + private boolean isMoveTop = false; + private boolean isMoveDown = false; + private boolean isScrollStoped = false; + private boolean isFristTouch = true; + private boolean isHideTopView = false; + private boolean isCloseTopAllowRefersh = true; + private boolean hasbottomViewWithoutscroll = true; + private OnListViewBottomListener mOnListViewBottomListener; + private OnListViewTopListener mOnListViewTopListener; + private View topView; + private View bottomView; + private int bgColor = Color.parseColor("#ffffffff"); + private Context context; + + private Handler mHandler = new Handler(){ + public void handleMessage(android.os.Message msg) { + super.handleMessage(msg); + switch (scrollType) { + case 0: + if(mOnRefreshAdapterDataListener != null){ + mOnRefreshAdapterDataListener.refreshData(); + } + if(topView.getVisibility() != View.VISIBLE){ + break; + } + scrollTo(0, topViewHeight); + break; + case 1: + if(bottomView.getVisibility() != View.VISIBLE){ + break; + } + scrollTo(0, bottomViewHeight); + break; + + } + startScroll(); + }; + }; + + public ECPullDownView(Context context) { + this(context,null); + } + + public ECPullDownView(Context context, AttributeSet attrs) { + this(context, attrs,0); + } + + public ECPullDownView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + this.mScroller = new Scroller(context, new AccelerateInterpolator()); + this.mGestureDetector = new GestureDetector(this); + // this.adQ = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + this.context = context; + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, + int bottom) { + if (!this.bAD){ + View localView2 = inflate(this.context, R.layout.loading_view, null); + View localView1 = inflate(this.context, R.layout.loading_view, null); + addView(localView2, 0, new LayoutParams(-1, -2)); + addView(localView1, new LayoutParams(-1, -2)); + this.bAD = true; + } + int m = getChildCount(); + int j = 0; + int i = 0; + while (true){ + if (j >= m){ + this.topView = getChildAt(0); + this.bottomView = getChildAt(-1 + getChildCount()); + this.topView.setVisibility(View.INVISIBLE); + this.bottomView.setVisibility(View.INVISIBLE); + this.topViewHeight = this.topView.getHeight(); + this.bottomViewHeight = this.bottomView.getHeight(); + this.topViewHeightCurrentPotion = this.topViewHeight; + if ((!this.isHideTopView) && (this.topViewHeight != 0)){ + this.isHideTopView = true; + scrollTo(0, this.topViewHeight); + } + return; + } + View localView3 = getChildAt(j); + int k = localView3.getMeasuredHeight(); + if (localView3.getVisibility() != View.GONE){ + localView3.layout(0, i, localView3.getMeasuredWidth(), i + k); + i += k; + } + j++; + } + } + + public final int getTopViewHeight(){ + return this.topViewHeight; + } + + public final void startTopScroll(){ + if (!this.isCloseTopAllowRefersh){ + if (this.topView.getVisibility() == View.INVISIBLE){ + this.mScroller.startScroll(0, getScrollY(), 0, -getScrollY() + this.topViewHeight, 200); + } + if (this.topView.getVisibility() == View.VISIBLE){ + this.mScroller.startScroll(0, getScrollY(), 0, -getScrollY(), 200); + } + this.scrollType = 0; + this.isScrollStoped = true; + this.isFristTouch = false; + }else{ + this.mScroller.startScroll(0, getScrollY(), 0, -getScrollY() + this.topViewHeight, 200); + } + postInvalidate(); + } + + + public final void setOnRefreshAdapterDataListener(OnRefreshAdapterDataListener paramcs) { + this.mOnRefreshAdapterDataListener = paramcs; + } + + public final void setOnListViewTopListener(OnListViewTopListener paramei) { + this.mOnListViewTopListener = paramei; + } + + public final void setOnListViewBottomListener(OnListViewBottomListener parames) { + this.mOnListViewBottomListener = parames; + } + + + public final void setIsCloseTopAllowRefersh(boolean paramBoolean) { + this.isCloseTopAllowRefersh = paramBoolean; + } + + public final void setHasbottomViewWithoutscroll(boolean paramBoolean) { + this.hasbottomViewWithoutscroll = paramBoolean; + } + + public final void setTopViewInitialize(boolean paramBoolean) { + int i; + if (!paramBoolean) { + i = View.INVISIBLE; + } else { + i = View.VISIBLE; + } + this.topViewInitializeVisibility = i; + if (this.topView != null) { + this.topView.setVisibility(topViewInitializeVisibility); + } + } + + @Override + protected void onScrollChanged(int paramInt1, int paramInt2, int paramInt3, int paramInt4) { + super.onScrollChanged(paramInt1, paramInt2, paramInt3, paramInt4); + if (this.bAJ){ + if (this.topViewHeightCurrentPotion == -2147483648){ + this.topViewHeightCurrentPotion = this.topViewHeight; + } + if ((paramInt2 > this.topViewHeightCurrentPotion) || (this.bAL == bAI)){ + if ((paramInt2 > this.topViewHeightCurrentPotion) && (this.bAL != this.bgColor)){ + setBackgroundColor(this.bgColor); + this.bAL = this.bgColor; + } + }else{ + // setBackgroundResource(2130838685); + this.bAL = bAI; + } + } + } + + + + @Override + public boolean onDown(MotionEvent e) { + if (!this.mScroller.isFinished()){ + this.mScroller.abortAnimation(); + } + this.isMoveTop = true; + return false; + } + + @Override + public void onShowPress(MotionEvent e) {} + + @Override + public boolean onSingleTapUp(MotionEvent e) { + return false; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, + float distanceY) { + int i = -1; + int j = 1; + if (distanceY <= 0.0F){ + this.isMoveDown = false; + }else{ + this.isMoveDown = true; + } + int k; + + if (((!this.isMoveDown) || (!this.isScrollFarTop)) && + ((this.isMoveDown) || (getScrollY() - this.topViewHeight <= 0) || (!this.isScrollFarTop))){ + + if (((this.isMoveDown) || (!this.isScrollToTop)) && + ((!this.isMoveDown) || (getScrollY() - this.topViewHeight >= 0) || (!this.isScrollToTop))){ + j = 0; + }else{ + k = (int)(0.5D * distanceY); + if (k != 0){ + i = k; + }else if (distanceY > 0.0F){ + i = j; + } + if (i + getScrollY() > this.topViewHeight) + i = this.topViewHeight - getScrollY(); + scrollBy(0, i); + return true; + } + }else{ + k = (int)(0.5D * distanceY); + if (k != 0){ + i = k; + }else if (distanceY > 0.0F){ + i = j; + } + if ((i + getScrollY() < this.topViewHeight) && (!this.isMoveDown)) + i = this.topViewHeight - getScrollY(); + scrollBy(0, i); + return true; + } + return false; + } + + @Override + public void onLongPress(MotionEvent e) { + // TODO Auto-generated method stub + + } + + public final void nh(String paramString){ + this.bgColor = Color.parseColor(paramString); + this.bAL = this.bgColor; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + return false; + } + + private void startScroll() { + if (getScrollY() - this.topViewHeight < 0){ + if (!this.isCloseTopAllowRefersh){ + if (this.topView.getVisibility() == View.INVISIBLE){ + this.mScroller.startScroll(0, getScrollY(), 0, -getScrollY() + this.topViewHeight, 200); + } + if (this.topView.getVisibility() == View.VISIBLE){ + this.mScroller.startScroll(0, getScrollY(), 0, -getScrollY(), 200); + } + this.scrollType = 0; + this.isScrollStoped = true; + this.isFristTouch = false; + }else{ + this.mScroller.startScroll(0, getScrollY(), 0, -getScrollY() + this.topViewHeight, 200); + } + postInvalidate(); + } + if (getScrollY() > this.bottomViewHeight){ + if (!this.hasbottomViewWithoutscroll){ + if (this.bottomView.getVisibility() == View.INVISIBLE) + this.mScroller.startScroll(0, getScrollY(), 0, this.bottomViewHeight - getScrollY(), 200); + if (this.bottomView.getVisibility() == View.VISIBLE) + this.mScroller.startScroll(0, getScrollY(), 0, this.bottomViewHeight - getScrollY() + this.bottomViewHeight, 200); + this.scrollType = 1; + this.isScrollStoped = true; + this.isFristTouch = false; + } else{ + this.mScroller.startScroll(0, getScrollY(), 0, this.bottomViewHeight - getScrollY(), 200); + } + postInvalidate(); + } + this.isMoveTop = false; + this.isMoveDown = false; + } + + @Override + public boolean dispatchTouchEvent(MotionEvent paramMotionEvent) { + boolean bool = true; + if (this.isFristTouch ){ + if (this.mOnListViewTopListener != null){ + this.isScrollToTop = this.mOnListViewTopListener.getIsListViewToTop(); + }else{ + this.isScrollToTop = false; + } + if (this.mOnListViewBottomListener != null){ + this.isScrollFarTop = this.mOnListViewBottomListener.getIsListViewToBottom(); + }else{ + this.isScrollFarTop = false; + } + if (this.topViewInitializeVisibility == View.VISIBLE){ + if (!this.isCloseTopAllowRefersh){ + this.topView.setVisibility(View.VISIBLE); + }else{ + this.topView.setVisibility(View.INVISIBLE); + } + } + if (this.bottomViewInitializeVisibility == 0){ + if (!this.hasbottomViewWithoutscroll){ + this.bottomView.setVisibility(View.VISIBLE); + }else{ + this.bottomView.setVisibility(View.INVISIBLE); + } + } + if (paramMotionEvent.getAction() != MotionEvent.ACTION_UP) { + if (paramMotionEvent.getAction() != MotionEvent.ACTION_CANCEL){ + if (!this.mGestureDetector.onTouchEvent(paramMotionEvent)){ + bool = super.dispatchTouchEvent(paramMotionEvent); + } else { + paramMotionEvent.setAction(MotionEvent.ACTION_CANCEL); + this.bAH = bool; + bool = super.dispatchTouchEvent(paramMotionEvent); + } + }else{ + startScroll(); + } + }else{ + startScroll(); + bool = super.dispatchTouchEvent(paramMotionEvent); + } + } + return bool; + + } + + @Override + public void computeScroll() { + super.computeScroll(); + if (!this.mScroller.computeScrollOffset()){ + if (this.isScrollStoped){ + this.isScrollStoped = false; + this.mHandler.sendEmptyMessageDelayed(0, timeInterval); + } + }else{ + scrollTo(this.mScroller.getCurrX(), this.mScroller.getCurrY()); + postInvalidate(); + } + isFristTouch = this.mScroller.isFinished(); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()){ + case MotionEvent.ACTION_UP: + if (getScrollY() - this.topViewHeight < 0){ + this.isScrollToTop = true; + } + if (getScrollY() > this.bottomViewHeight){ + this.isScrollFarTop = true; + } + startScroll(); + } + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconEditText.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconEditText.java new file mode 100644 index 0000000..07c2f5e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconEditText.java @@ -0,0 +1,95 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputConnection; +import android.widget.EditText; + +import cn.shangyu.gdxzExpert.R; + +public class EmojiconEditText extends EditText { + private int mEmojiconSize; + private int mEmojiconTextSize; + private boolean mUseSystemDefault = false; + public InputConnection miInputConnection; + + public EmojiconEditText(Context context) { + super(context); + mEmojiconSize = (int) getTextSize(); + mEmojiconTextSize = (int) getTextSize(); + } + + public EmojiconEditText(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public EmojiconEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(attrs); + } + + private void init(AttributeSet attrs) { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon); + mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize()); + mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false); + a.recycle(); + mEmojiconTextSize = (int) getTextSize(); + setText(getText()); + } + + @Override + protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { + updateText(); + } + + /** + * Set the size of emojicon in pixels. + */ + public void setEmojiconSize(int pixels) { + mEmojiconSize = pixels; + + updateText(); + } + + private void updateText() { + EmojiconHandler.addEmojis(getContext(), getText(), mEmojiconSize, mEmojiconTextSize, mUseSystemDefault); + } + + /** + * Set whether to use system default emojicon + */ + public void setUseSystemDefault(boolean useSystemDefault) { + mUseSystemDefault = useSystemDefault; + } + + + @Override + public InputConnection onCreateInputConnection(EditorInfo outAttrs) { + + miInputConnection = super.onCreateInputConnection(outAttrs); + return miInputConnection; + } + + public InputConnection getInputConnection() { + return miInputConnection; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconHandler.java new file mode 100644 index 0000000..b26d5f8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconHandler.java @@ -0,0 +1,127 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; +import android.text.Spannable; +import android.util.SparseIntArray; + +public final class EmojiconHandler { + private EmojiconHandler() { + } + + private static final SparseIntArray sEmojisMap = new SparseIntArray(846); + private static final SparseIntArray sSoftbanksMap = new SparseIntArray(471); + + private static boolean isSoftBankEmoji(char c) { + return ((c >> 12) == 0xe); + } + + public static int getEmojiResource(Context context, int codePoint) { + return sEmojisMap.get(codePoint); + } + + private static int getSoftbankEmojiResource(char c) { + return sSoftbanksMap.get(c); + } + + /** + * Convert emoji characters of the given Spannable to the according emojicon. + * + * @param context + * @param text + * @param emojiSize + */ + public static void addEmojis(Context context, Spannable text, int emojiSize, int textSize) { + addEmojis(context, text, emojiSize, textSize, 0, -1, false); + } + + /** + * Convert emoji characters of the given Spannable to the according emojicon. + * + * @param context + * @param text + * @param emojiSize + * @param index + * @param length + */ + public static void addEmojis(Context context, Spannable text, int emojiSize, int textSize, int index, int length) { + addEmojis(context, text, emojiSize, textSize, index, length, false); + } + + /** + * Convert emoji characters of the given Spannable to the according emojicon. + * + * @param context + * @param text + * @param emojiSize + * @param useSystemDefault + */ + public static void addEmojis(Context context, Spannable text, int emojiSize, int textSize, boolean useSystemDefault) { + addEmojis(context, text, emojiSize, textSize, 0, -1, useSystemDefault); + } + + /** + * Convert emoji characters of the given Spannable to the according emojicon. + * + * @param context + * @param text + * @param emojiSize + * @param index + * @param length + * @param useSystemDefault + */ + public static void addEmojis(Context context, Spannable text, int emojiSize, int textSize, int index, int length, boolean useSystemDefault) { + if (useSystemDefault) { + return; + } + + int textLength = text.length(); + int textLengthToProcessMax = textLength - index; + int textLengthToProcess = length < 0 || length >= textLengthToProcessMax ? textLength : (length+index); + + // remove spans throughout all text + EmojiconSpan[] oldSpans = text.getSpans(0, textLength, EmojiconSpan.class); + for (int i = 0; i < oldSpans.length; i++) { + text.removeSpan(oldSpans[i]); + } + + int skip; + for (int i = index; i < textLengthToProcess; i += skip) { + skip = 0; + int icon = 0; + char c = text.charAt(i); + if (isSoftBankEmoji(c)) { + icon = getSoftbankEmojiResource(c); + skip = icon == 0 ? 0 : 1; + } + + if (icon == 0) { + int unicode = Character.codePointAt(text, i); + skip = Character.charCount(unicode); + + if (unicode > 0xff) { + icon = getEmojiResource(context, unicode); + } + + } + + if (icon > 0) { + text.setSpan(new EmojiconSpan(context, icon, emojiSize, textSize), i, i + skip, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecents.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecents.java new file mode 100644 index 0000000..7b8d0ed --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecents.java @@ -0,0 +1,26 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; + +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji.Emojicon; + + +public interface EmojiconRecents { + public void addRecentEmoji(Context context, Emojicon emojicon); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecentsManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecentsManager.java new file mode 100644 index 0000000..92378fb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconRecentsManager.java @@ -0,0 +1,139 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; +import android.content.SharedPreferences; + +import java.util.ArrayList; +import java.util.StringTokenizer; + +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji.Emojicon; + + +public class EmojiconRecentsManager extends ArrayList { + private static final String DELIMITER = ","; + private static final String PREFERENCE_NAME = "emojicon"; + private static final String PREF_RECENTS = "recent_emojis"; + private static final String PREF_PAGE = "recent_page"; + + private static final Object LOCK = new Object(); + private static EmojiconRecentsManager sInstance; + private static int maximumSize = 40; + + private Context mContext; + + private EmojiconRecentsManager(Context context) { + mContext = context.getApplicationContext(); + loadRecents(); + } + + public static EmojiconRecentsManager getInstance(Context context) { + if (sInstance == null) { + synchronized (LOCK) { + if (sInstance == null) { + sInstance = new EmojiconRecentsManager(context); + } + } + } + return sInstance; + } + + public int getRecentPage() { + return getPreferences().getInt(PREF_PAGE, 0); + } + + public void setRecentPage(int page) { + getPreferences().edit().putInt(PREF_PAGE, page).commit(); + } + + public void push(Emojicon object) { + // FIXME totally inefficient way of adding the emoji to the adapter + // TODO this should be probably replaced by a deque + if (contains(object)) { + super.remove(object); + } + add(0, object); + } + + @Override + public boolean add(Emojicon object) { + boolean ret = super.add(object); + + while (this.size() > EmojiconRecentsManager.maximumSize) { + super.remove(0); + } + + saveRecents(); + return ret; + } + + @Override + public void add(int index, Emojicon object) { + super.add(index, object); + + if (index == 0) { + while (this.size() > EmojiconRecentsManager.maximumSize) { + super.remove(EmojiconRecentsManager.maximumSize); + } + } else { + while (this.size() > EmojiconRecentsManager.maximumSize) { + super.remove(0); + } + } + + saveRecents(); + } + + @Override + public boolean remove(Object object) { + boolean ret = super.remove(object); + saveRecents(); + return ret; + } + + private SharedPreferences getPreferences() { + return mContext.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE); + } + + private void loadRecents() { + SharedPreferences prefs = getPreferences(); + String str = prefs.getString(PREF_RECENTS, ""); + StringTokenizer tokenizer = new StringTokenizer(str, EmojiconRecentsManager.DELIMITER); + while (tokenizer.hasMoreTokens()) { + add(Emojicon.fromChars(tokenizer.nextToken())); + } + } + + private void saveRecents() { + StringBuilder str = new StringBuilder(); + int c = size(); + for (int i = 0; i < c; i++) { + Emojicon e = get(i); + str.append(e.getEmoji()); + if (i < (c - 1)) { + str.append(EmojiconRecentsManager.DELIMITER); + } + } + SharedPreferences prefs = getPreferences(); + prefs.edit().putString(PREF_RECENTS, str.toString()).commit(); + } + + public static void setMaximumSize(int maximumSize) { + EmojiconRecentsManager.maximumSize = maximumSize; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconSpan.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconSpan.java new file mode 100644 index 0000000..9d58558 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconSpan.java @@ -0,0 +1,92 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.text.style.DynamicDrawableSpan; + +import java.lang.ref.WeakReference; + +class EmojiconSpan extends DynamicDrawableSpan { + + private final Context mContext; + + private final int mResourceId; + + private final int mSize; + + private final int mTextSize; + + private int mHeight; + + private int mWidth; + + private int mTop; + + private Drawable mDrawable; + + private WeakReference mDrawableRef; + + public EmojiconSpan(Context context, int resourceId, int size, int textSize) { + super(DynamicDrawableSpan.ALIGN_BASELINE); + mContext = context; + mResourceId = resourceId; + mWidth = mHeight = mSize = size; + mTextSize = textSize; + } + + public Drawable getDrawable() { + if (mDrawable == null) { + try { + mDrawable = mContext.getResources().getDrawable(mResourceId); + mHeight = mSize; + mWidth = mHeight * mDrawable.getIntrinsicWidth() / mDrawable.getIntrinsicHeight(); + mTop = (mTextSize - mHeight) / 2; + mDrawable.setBounds(0, mTop, mWidth, mTop + mHeight); + } catch (Exception e) { + // swallow + } + } + return mDrawable; + } + + @Override + public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { + //super.draw(canvas, text, start, end, x, top, y, bottom, paint); + Drawable b = getCachedDrawable(); + canvas.save(); + + int transY = bottom - b.getBounds().bottom; + if (mVerticalAlignment == ALIGN_BASELINE) { + transY = top + ((bottom - top) / 2) - ((b.getBounds().bottom - b.getBounds().top) / 2) - mTop; + } + + canvas.translate(x, transY); + b.draw(canvas); + canvas.restore(); + } + + private Drawable getCachedDrawable() { + if (mDrawableRef == null || mDrawableRef.get() == null) { + mDrawableRef = new WeakReference(getDrawable()); + } + return mDrawableRef.get(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconTextView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconTextView.java new file mode 100644 index 0000000..c18c251 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/EmojiconTextView.java @@ -0,0 +1,89 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; + +import android.content.Context; +import android.content.res.TypedArray; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +public class EmojiconTextView extends TextView { + private int mEmojiconSize; + private int mEmojiconTextSize; + private int mTextStart = 0; + private int mTextLength = -1; + private boolean mUseSystemDefault = false; + + public EmojiconTextView(Context context) { + super(context); + init(null); + } + + public EmojiconTextView(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public EmojiconTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(attrs); + } + + private void init(AttributeSet attrs) { + mEmojiconTextSize = (int) getTextSize(); + if (attrs == null) { + mEmojiconSize = (int) getTextSize(); + } else { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon); + mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize()); + mTextStart = a.getInteger(R.styleable.Emojicon_emojiconTextStart, 0); + mTextLength = a.getInteger(R.styleable.Emojicon_emojiconTextLength, -1); + mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false); + a.recycle(); + } + setText(getText()); + } + + @Override + public void setText(CharSequence text, BufferType type) { + if (!TextUtils.isEmpty(text)) { + SpannableStringBuilder builder = new SpannableStringBuilder(text); + EmojiconHandler.addEmojis(getContext(), builder, mEmojiconSize, mEmojiconTextSize, mTextStart, mTextLength, mUseSystemDefault); + text = builder; + } + super.setText(text, type); + } + + /** + * Set the size of emojicon in pixels. + */ + public void setEmojiconSize(int pixels) { + mEmojiconSize = pixels; + super.setText(getText()); + } + + /** + * Set whether to use system default emojicon + */ + public void setUseSystemDefault(boolean useSystemDefault) { + mUseSystemDefault = useSystemDefault; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewBottomListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewBottomListener.java new file mode 100644 index 0000000..f17494c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewBottomListener.java @@ -0,0 +1,5 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; +public abstract interface OnListViewBottomListener +{ + public abstract boolean getIsListViewToBottom(); +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewTopListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewTopListener.java new file mode 100644 index 0000000..ee74278 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnListViewTopListener.java @@ -0,0 +1,5 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; +public abstract interface OnListViewTopListener +{ + public abstract boolean getIsListViewToTop(); +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnRefreshAdapterDataListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnRefreshAdapterDataListener.java new file mode 100644 index 0000000..21f0bea --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/OnRefreshAdapterDataListener.java @@ -0,0 +1,5 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base; +public abstract interface OnRefreshAdapterDataListener +{ + public abstract void refreshData(); +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Emojicon.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Emojicon.java new file mode 100644 index 0000000..b222b7b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Emojicon.java @@ -0,0 +1,88 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji; + +import java.io.Serializable; + +public class Emojicon implements Serializable { + private static final long serialVersionUID = 1L; + private int icon; + private char value; + private String emoji; + + private Emojicon() { + } + + public static Emojicon fromResource(int icon, int value) { + Emojicon emoji = new Emojicon(); + emoji.icon = icon; + emoji.value = (char) value; + return emoji; + } + + public static Emojicon fromCodePoint(int codePoint) { + Emojicon emoji = new Emojicon(); + emoji.emoji = newString(codePoint); + return emoji; + } + + public static Emojicon fromChar(char ch) { + Emojicon emoji = new Emojicon(); + emoji.emoji = Character.toString(ch); + return emoji; + } + + public static Emojicon fromChars(String chars) { + Emojicon emoji = new Emojicon(); + emoji.emoji = chars; + return emoji; + } + + public Emojicon(String emoji) { + this.emoji = emoji; + } + + public char getValue() { + return value; + } + + public int getIcon() { + return icon; + } + + public String getEmoji() { + return emoji; + } + + @Override + public boolean equals(Object o) { + return o instanceof Emojicon && emoji.equals(((Emojicon) o).emoji); + } + + @Override + public int hashCode() { + return emoji.hashCode(); + } + + public static final String newString(int codePoint) { + if (Character.charCount(codePoint) == 1) { + return String.valueOf(codePoint); + } else { + return new String(Character.toChars(codePoint)); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Nature.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Nature.java new file mode 100644 index 0000000..c9fc854 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Nature.java @@ -0,0 +1,138 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji; + +public class Nature { + public static final Emojicon[] DATA = new Emojicon[]{ + Emojicon.fromCodePoint(0x1f436), + Emojicon.fromCodePoint(0x1f43a), + Emojicon.fromCodePoint(0x1f431), + Emojicon.fromCodePoint(0x1f42d), + Emojicon.fromCodePoint(0x1f439), + Emojicon.fromCodePoint(0x1f430), + Emojicon.fromCodePoint(0x1f438), + Emojicon.fromCodePoint(0x1f42f), + Emojicon.fromCodePoint(0x1f428), + Emojicon.fromCodePoint(0x1f43b), + Emojicon.fromCodePoint(0x1f437), + Emojicon.fromCodePoint(0x1f43d), + Emojicon.fromCodePoint(0x1f42e), + Emojicon.fromCodePoint(0x1f417), + Emojicon.fromCodePoint(0x1f435), + Emojicon.fromCodePoint(0x1f412), + Emojicon.fromCodePoint(0x1f434), + Emojicon.fromCodePoint(0x1f411), + Emojicon.fromCodePoint(0x1f418), + Emojicon.fromCodePoint(0x1f43c), + Emojicon.fromCodePoint(0x1f427), + Emojicon.fromCodePoint(0x1f426), + Emojicon.fromCodePoint(0x1f424), + Emojicon.fromCodePoint(0x1f425), + Emojicon.fromCodePoint(0x1f423), + Emojicon.fromCodePoint(0x1f414), + Emojicon.fromCodePoint(0x1f40d), + Emojicon.fromCodePoint(0x1f422), + Emojicon.fromCodePoint(0x1f41b), + Emojicon.fromCodePoint(0x1f41d), + Emojicon.fromCodePoint(0x1f41c), + Emojicon.fromCodePoint(0x1f41e), + Emojicon.fromCodePoint(0x1f40c), + Emojicon.fromCodePoint(0x1f419), + Emojicon.fromCodePoint(0x1f41a), + Emojicon.fromCodePoint(0x1f420), + Emojicon.fromCodePoint(0x1f41f), + Emojicon.fromCodePoint(0x1f42c), + Emojicon.fromCodePoint(0x1f433), + Emojicon.fromCodePoint(0x1f40b), + Emojicon.fromCodePoint(0x1f404), + Emojicon.fromCodePoint(0x1f40f), + Emojicon.fromCodePoint(0x1f400), + Emojicon.fromCodePoint(0x1f403), + Emojicon.fromCodePoint(0x1f405), + Emojicon.fromCodePoint(0x1f407), + Emojicon.fromCodePoint(0x1f409), + Emojicon.fromCodePoint(0x1f40e), + Emojicon.fromCodePoint(0x1f410), + Emojicon.fromCodePoint(0x1f413), + Emojicon.fromCodePoint(0x1f415), + Emojicon.fromCodePoint(0x1f416), + Emojicon.fromCodePoint(0x1f401), + Emojicon.fromCodePoint(0x1f402), + Emojicon.fromCodePoint(0x1f432), + Emojicon.fromCodePoint(0x1f421), + Emojicon.fromCodePoint(0x1f40a), + Emojicon.fromCodePoint(0x1f42b), + Emojicon.fromCodePoint(0x1f42a), + Emojicon.fromCodePoint(0x1f406), + Emojicon.fromCodePoint(0x1f408), + Emojicon.fromCodePoint(0x1f429), + Emojicon.fromCodePoint(0x1f43e), + Emojicon.fromCodePoint(0x1f490), + Emojicon.fromCodePoint(0x1f338), + Emojicon.fromCodePoint(0x1f337), + Emojicon.fromCodePoint(0x1f340), + Emojicon.fromCodePoint(0x1f339), + Emojicon.fromCodePoint(0x1f33b), + Emojicon.fromCodePoint(0x1f33a), + Emojicon.fromCodePoint(0x1f341), + Emojicon.fromCodePoint(0x1f343), + Emojicon.fromCodePoint(0x1f342), + Emojicon.fromCodePoint(0x1f33f), + Emojicon.fromCodePoint(0x1f33e), + Emojicon.fromCodePoint(0x1f344), + Emojicon.fromCodePoint(0x1f335), + Emojicon.fromCodePoint(0x1f334), + Emojicon.fromCodePoint(0x1f332), + Emojicon.fromCodePoint(0x1f333), + Emojicon.fromCodePoint(0x1f330), + Emojicon.fromCodePoint(0x1f331), + Emojicon.fromCodePoint(0x1f33c), + Emojicon.fromCodePoint(0x1f310), + Emojicon.fromCodePoint(0x1f31e), + Emojicon.fromCodePoint(0x1f31d), + Emojicon.fromCodePoint(0x1f31a), + Emojicon.fromCodePoint(0x1f311), + Emojicon.fromCodePoint(0x1f312), + Emojicon.fromCodePoint(0x1f313), + Emojicon.fromCodePoint(0x1f314), + Emojicon.fromCodePoint(0x1f315), + Emojicon.fromCodePoint(0x1f316), + Emojicon.fromCodePoint(0x1f317), + Emojicon.fromCodePoint(0x1f318), + Emojicon.fromCodePoint(0x1f31c), + Emojicon.fromCodePoint(0x1f31b), + Emojicon.fromCodePoint(0x1f319), + Emojicon.fromCodePoint(0x1f30d), + Emojicon.fromCodePoint(0x1f30e), + Emojicon.fromCodePoint(0x1f30f), + Emojicon.fromCodePoint(0x1f30b), + Emojicon.fromCodePoint(0x1f30c), + Emojicon.fromCodePoint(0x1f320), + Emojicon.fromChar((char) 0x2b50), + Emojicon.fromChar((char) 0x2600), + Emojicon.fromChar((char) 0x26c5), + Emojicon.fromChar((char) 0x2601), + Emojicon.fromChar((char) 0x26a1), + Emojicon.fromChar((char) 0x2614), + Emojicon.fromChar((char) 0x2744), + Emojicon.fromChar((char) 0x26c4), + Emojicon.fromCodePoint(0x1f300), + Emojicon.fromCodePoint(0x1f301), + Emojicon.fromCodePoint(0x1f308), + Emojicon.fromCodePoint(0x1f30a), + }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Objects.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Objects.java new file mode 100644 index 0000000..367ca00 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Objects.java @@ -0,0 +1,252 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji; + +public class Objects { + public static final Emojicon[] DATA = new Emojicon[]{ + Emojicon.fromCodePoint(0x1f38d), + Emojicon.fromCodePoint(0x1f49d), + Emojicon.fromCodePoint(0x1f38e), + Emojicon.fromCodePoint(0x1f392), + Emojicon.fromCodePoint(0x1f393), + Emojicon.fromCodePoint(0x1f38f), + Emojicon.fromCodePoint(0x1f386), + Emojicon.fromCodePoint(0x1f387), + Emojicon.fromCodePoint(0x1f390), + Emojicon.fromCodePoint(0x1f391), + Emojicon.fromCodePoint(0x1f383), + Emojicon.fromCodePoint(0x1f47b), + Emojicon.fromCodePoint(0x1f385), + Emojicon.fromCodePoint(0x1f384), + Emojicon.fromCodePoint(0x1f381), + Emojicon.fromCodePoint(0x1f38b), + Emojicon.fromCodePoint(0x1f389), + Emojicon.fromCodePoint(0x1f38a), + Emojicon.fromCodePoint(0x1f388), + Emojicon.fromCodePoint(0x1f38c), + Emojicon.fromCodePoint(0x1f52e), + Emojicon.fromCodePoint(0x1f3a5), + Emojicon.fromCodePoint(0x1f4f7), + Emojicon.fromCodePoint(0x1f4f9), + Emojicon.fromCodePoint(0x1f4fc), + Emojicon.fromCodePoint(0x1f4bf), + Emojicon.fromCodePoint(0x1f4c0), + Emojicon.fromCodePoint(0x1f4bd), + Emojicon.fromCodePoint(0x1f4be), + Emojicon.fromCodePoint(0x1f4bb), + Emojicon.fromCodePoint(0x1f4f1), + Emojicon.fromChar((char) 0x260e), + Emojicon.fromCodePoint(0x1f4de), + Emojicon.fromCodePoint(0x1f4df), + Emojicon.fromCodePoint(0x1f4e0), + Emojicon.fromCodePoint(0x1f4e1), + Emojicon.fromCodePoint(0x1f4fa), + Emojicon.fromCodePoint(0x1f4fb), + Emojicon.fromCodePoint(0x1f508), + Emojicon.fromCodePoint(0x1f509), + Emojicon.fromCodePoint(0x1f50a), + Emojicon.fromCodePoint(0x1f507), + Emojicon.fromCodePoint(0x1f514), + Emojicon.fromCodePoint(0x1f515), + Emojicon.fromCodePoint(0x1f4e2), + Emojicon.fromCodePoint(0x1f4e3), + Emojicon.fromChar((char) 0x23f3), + Emojicon.fromChar((char) 0x231b), + Emojicon.fromChar((char) 0x23f0), + Emojicon.fromChar((char) 0x231a), + Emojicon.fromCodePoint(0x1f513), + Emojicon.fromCodePoint(0x1f512), + Emojicon.fromCodePoint(0x1f50f), + Emojicon.fromCodePoint(0x1f510), + Emojicon.fromCodePoint(0x1f511), + Emojicon.fromCodePoint(0x1f50e), + Emojicon.fromCodePoint(0x1f4a1), + Emojicon.fromCodePoint(0x1f526), + Emojicon.fromCodePoint(0x1f506), + Emojicon.fromCodePoint(0x1f505), + Emojicon.fromCodePoint(0x1f50c), + Emojicon.fromCodePoint(0x1f50b), + Emojicon.fromCodePoint(0x1f50d), + Emojicon.fromCodePoint(0x1f6c1), + Emojicon.fromCodePoint(0x1f6c0), + Emojicon.fromCodePoint(0x1f6bf), + Emojicon.fromCodePoint(0x1f6bd), + Emojicon.fromCodePoint(0x1f527), + Emojicon.fromCodePoint(0x1f529), + Emojicon.fromCodePoint(0x1f528), + Emojicon.fromCodePoint(0x1f6aa), + Emojicon.fromCodePoint(0x1f6ac), + Emojicon.fromCodePoint(0x1f4a3), + Emojicon.fromCodePoint(0x1f52b), + Emojicon.fromCodePoint(0x1f52a), + Emojicon.fromCodePoint(0x1f48a), + Emojicon.fromCodePoint(0x1f489), + Emojicon.fromCodePoint(0x1f4b0), + Emojicon.fromCodePoint(0x1f4b4), + Emojicon.fromCodePoint(0x1f4b5), + Emojicon.fromCodePoint(0x1f4b7), + Emojicon.fromCodePoint(0x1f4b6), + Emojicon.fromCodePoint(0x1f4b3), + Emojicon.fromCodePoint(0x1f4b8), + Emojicon.fromCodePoint(0x1f4f2), + Emojicon.fromCodePoint(0x1f4e7), + Emojicon.fromCodePoint(0x1f4e5), + Emojicon.fromCodePoint(0x1f4e4), + Emojicon.fromChar((char) 0x2709), + Emojicon.fromCodePoint(0x1f4e9), + Emojicon.fromCodePoint(0x1f4e8), + Emojicon.fromCodePoint(0x1f4ef), + Emojicon.fromCodePoint(0x1f4eb), + Emojicon.fromCodePoint(0x1f4ea), + Emojicon.fromCodePoint(0x1f4ec), + Emojicon.fromCodePoint(0x1f4ed), + Emojicon.fromCodePoint(0x1f4ee), + Emojicon.fromCodePoint(0x1f4e6), + Emojicon.fromCodePoint(0x1f4dd), + Emojicon.fromCodePoint(0x1f4c4), + Emojicon.fromCodePoint(0x1f4c3), + Emojicon.fromCodePoint(0x1f4d1), + Emojicon.fromCodePoint(0x1f4ca), + Emojicon.fromCodePoint(0x1f4c8), + Emojicon.fromCodePoint(0x1f4c9), + Emojicon.fromCodePoint(0x1f4dc), + Emojicon.fromCodePoint(0x1f4cb), + Emojicon.fromCodePoint(0x1f4c5), + Emojicon.fromCodePoint(0x1f4c6), + Emojicon.fromCodePoint(0x1f4c7), + Emojicon.fromCodePoint(0x1f4c1), + Emojicon.fromCodePoint(0x1f4c2), + Emojicon.fromChar((char) 0x2702), + Emojicon.fromCodePoint(0x1f4cc), + Emojicon.fromCodePoint(0x1f4ce), + Emojicon.fromChar((char) 0x2712), + Emojicon.fromChar((char) 0x270f), + Emojicon.fromCodePoint(0x1f4cf), + Emojicon.fromCodePoint(0x1f4d0), + Emojicon.fromCodePoint(0x1f4d5), + Emojicon.fromCodePoint(0x1f4d7), + Emojicon.fromCodePoint(0x1f4d8), + Emojicon.fromCodePoint(0x1f4d9), + Emojicon.fromCodePoint(0x1f4d3), + Emojicon.fromCodePoint(0x1f4d4), + Emojicon.fromCodePoint(0x1f4d2), + Emojicon.fromCodePoint(0x1f4da), + Emojicon.fromCodePoint(0x1f4d6), + Emojicon.fromCodePoint(0x1f516), + Emojicon.fromCodePoint(0x1f4db), + Emojicon.fromCodePoint(0x1f52c), + Emojicon.fromCodePoint(0x1f52d), + Emojicon.fromCodePoint(0x1f4f0), + Emojicon.fromCodePoint(0x1f3a8), + Emojicon.fromCodePoint(0x1f3ac), + Emojicon.fromCodePoint(0x1f3a4), + Emojicon.fromCodePoint(0x1f3a7), + Emojicon.fromCodePoint(0x1f3bc), + Emojicon.fromCodePoint(0x1f3b5), + Emojicon.fromCodePoint(0x1f3b6), + Emojicon.fromCodePoint(0x1f3b9), + Emojicon.fromCodePoint(0x1f3bb), + Emojicon.fromCodePoint(0x1f3ba), + Emojicon.fromCodePoint(0x1f3b7), + Emojicon.fromCodePoint(0x1f3b8), + Emojicon.fromCodePoint(0x1f47e), + Emojicon.fromCodePoint(0x1f3ae), + Emojicon.fromCodePoint(0x1f0cf), + Emojicon.fromCodePoint(0x1f3b4), + Emojicon.fromCodePoint(0x1f004), + Emojicon.fromCodePoint(0x1f3b2), + Emojicon.fromCodePoint(0x1f3af), + Emojicon.fromCodePoint(0x1f3c8), + Emojicon.fromCodePoint(0x1f3c0), + Emojicon.fromChar((char) 0x26bd), + Emojicon.fromChar((char) 0x26be), + Emojicon.fromCodePoint(0x1f3be), + Emojicon.fromCodePoint(0x1f3b1), + Emojicon.fromCodePoint(0x1f3c9), + Emojicon.fromCodePoint(0x1f3b3), + Emojicon.fromChar((char) 0x26f3), + Emojicon.fromCodePoint(0x1f6b5), + Emojicon.fromCodePoint(0x1f6b4), + Emojicon.fromCodePoint(0x1f3c1), + Emojicon.fromCodePoint(0x1f3c7), + Emojicon.fromCodePoint(0x1f3c6), + Emojicon.fromCodePoint(0x1f3bf), + Emojicon.fromCodePoint(0x1f3c2), + Emojicon.fromCodePoint(0x1f3ca), + Emojicon.fromCodePoint(0x1f3c4), + Emojicon.fromCodePoint(0x1f3a3), + Emojicon.fromChar((char) 0x2615), + Emojicon.fromCodePoint(0x1f375), + Emojicon.fromCodePoint(0x1f376), + Emojicon.fromCodePoint(0x1f37c), + Emojicon.fromCodePoint(0x1f37a), + Emojicon.fromCodePoint(0x1f37b), + Emojicon.fromCodePoint(0x1f378), + Emojicon.fromCodePoint(0x1f379), + Emojicon.fromCodePoint(0x1f377), + Emojicon.fromCodePoint(0x1f374), + Emojicon.fromCodePoint(0x1f355), + Emojicon.fromCodePoint(0x1f354), + Emojicon.fromCodePoint(0x1f35f), + Emojicon.fromCodePoint(0x1f357), + Emojicon.fromCodePoint(0x1f356), + Emojicon.fromCodePoint(0x1f35d), + Emojicon.fromCodePoint(0x1f35b), + Emojicon.fromCodePoint(0x1f364), + Emojicon.fromCodePoint(0x1f371), + Emojicon.fromCodePoint(0x1f363), + Emojicon.fromCodePoint(0x1f365), + Emojicon.fromCodePoint(0x1f359), + Emojicon.fromCodePoint(0x1f358), + Emojicon.fromCodePoint(0x1f35a), + Emojicon.fromCodePoint(0x1f35c), + Emojicon.fromCodePoint(0x1f372), + Emojicon.fromCodePoint(0x1f362), + Emojicon.fromCodePoint(0x1f361), + Emojicon.fromCodePoint(0x1f373), + Emojicon.fromCodePoint(0x1f35e), + Emojicon.fromCodePoint(0x1f369), + Emojicon.fromCodePoint(0x1f36e), + Emojicon.fromCodePoint(0x1f366), + Emojicon.fromCodePoint(0x1f368), + Emojicon.fromCodePoint(0x1f367), + Emojicon.fromCodePoint(0x1f382), + Emojicon.fromCodePoint(0x1f370), + Emojicon.fromCodePoint(0x1f36a), + Emojicon.fromCodePoint(0x1f36b), + Emojicon.fromCodePoint(0x1f36c), + Emojicon.fromCodePoint(0x1f36d), + Emojicon.fromCodePoint(0x1f36f), + Emojicon.fromCodePoint(0x1f34e), + Emojicon.fromCodePoint(0x1f34f), + Emojicon.fromCodePoint(0x1f34a), + Emojicon.fromCodePoint(0x1f34b), + Emojicon.fromCodePoint(0x1f352), + Emojicon.fromCodePoint(0x1f347), + Emojicon.fromCodePoint(0x1f349), + Emojicon.fromCodePoint(0x1f353), + Emojicon.fromCodePoint(0x1f351), + Emojicon.fromCodePoint(0x1f348), + Emojicon.fromCodePoint(0x1f34c), + Emojicon.fromCodePoint(0x1f350), + Emojicon.fromCodePoint(0x1f34d), + Emojicon.fromCodePoint(0x1f360), + Emojicon.fromCodePoint(0x1f346), + Emojicon.fromCodePoint(0x1f345), + Emojicon.fromCodePoint(0x1f33d), + }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/People.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/People.java new file mode 100644 index 0000000..286ff19 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/People.java @@ -0,0 +1,211 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji; + +public class People { + public static final Emojicon[] DATA = new Emojicon[]{ + Emojicon.fromCodePoint(0x1f604), + Emojicon.fromCodePoint(0x1f603), + Emojicon.fromCodePoint(0x1f600), + Emojicon.fromCodePoint(0x1f60a), + Emojicon.fromChar((char) 0x263a), + Emojicon.fromCodePoint(0x1f609), + Emojicon.fromCodePoint(0x1f60d), + Emojicon.fromCodePoint(0x1f618), + Emojicon.fromCodePoint(0x1f61a), + Emojicon.fromCodePoint(0x1f617), + Emojicon.fromCodePoint(0x1f619), + Emojicon.fromCodePoint(0x1f61c), + Emojicon.fromCodePoint(0x1f61d), + Emojicon.fromCodePoint(0x1f61b), + Emojicon.fromCodePoint(0x1f633), + Emojicon.fromCodePoint(0x1f601), + Emojicon.fromCodePoint(0x1f614), + Emojicon.fromCodePoint(0x1f60c), + Emojicon.fromCodePoint(0x1f612), + Emojicon.fromCodePoint(0x1f61e), + Emojicon.fromCodePoint(0x1f623), + Emojicon.fromCodePoint(0x1f622), + Emojicon.fromCodePoint(0x1f602), + Emojicon.fromCodePoint(0x1f62d), + Emojicon.fromCodePoint(0x1f62a), + Emojicon.fromCodePoint(0x1f625), + Emojicon.fromCodePoint(0x1f630), + Emojicon.fromCodePoint(0x1f605), + Emojicon.fromCodePoint(0x1f613), + Emojicon.fromCodePoint(0x1f629), + Emojicon.fromCodePoint(0x1f62b), + Emojicon.fromCodePoint(0x1f628), + Emojicon.fromCodePoint(0x1f631), + Emojicon.fromCodePoint(0x1f620), + Emojicon.fromCodePoint(0x1f621), + Emojicon.fromCodePoint(0x1f624), + Emojicon.fromCodePoint(0x1f616), + Emojicon.fromCodePoint(0x1f606), + Emojicon.fromCodePoint(0x1f60b), + Emojicon.fromCodePoint(0x1f637), + Emojicon.fromCodePoint(0x1f60e), + Emojicon.fromCodePoint(0x1f634), + Emojicon.fromCodePoint(0x1f635), + Emojicon.fromCodePoint(0x1f632), + Emojicon.fromCodePoint(0x1f61f), + Emojicon.fromCodePoint(0x1f626), + Emojicon.fromCodePoint(0x1f627), + Emojicon.fromCodePoint(0x1f608), + Emojicon.fromCodePoint(0x1f47f), + Emojicon.fromCodePoint(0x1f62e), + Emojicon.fromCodePoint(0x1f62c), + Emojicon.fromCodePoint(0x1f610), + Emojicon.fromCodePoint(0x1f615), + Emojicon.fromCodePoint(0x1f62f), + Emojicon.fromCodePoint(0x1f636), + Emojicon.fromCodePoint(0x1f607), + Emojicon.fromCodePoint(0x1f60f), + Emojicon.fromCodePoint(0x1f611), + Emojicon.fromCodePoint(0x1f472), + Emojicon.fromCodePoint(0x1f473), + Emojicon.fromCodePoint(0x1f46e), + Emojicon.fromCodePoint(0x1f477), + Emojicon.fromCodePoint(0x1f482), + Emojicon.fromCodePoint(0x1f476), + Emojicon.fromCodePoint(0x1f466), + Emojicon.fromCodePoint(0x1f467), + Emojicon.fromCodePoint(0x1f468), + Emojicon.fromCodePoint(0x1f469), + Emojicon.fromCodePoint(0x1f474), + Emojicon.fromCodePoint(0x1f475), + Emojicon.fromCodePoint(0x1f471), + Emojicon.fromCodePoint(0x1f47c), + Emojicon.fromCodePoint(0x1f478), + Emojicon.fromCodePoint(0x1f63a), + Emojicon.fromCodePoint(0x1f638), + Emojicon.fromCodePoint(0x1f63b), + Emojicon.fromCodePoint(0x1f63d), + Emojicon.fromCodePoint(0x1f63c), + Emojicon.fromCodePoint(0x1f640), + Emojicon.fromCodePoint(0x1f63f), + Emojicon.fromCodePoint(0x1f639), + Emojicon.fromCodePoint(0x1f63e), + Emojicon.fromCodePoint(0x1f479), + Emojicon.fromCodePoint(0x1f47a), + Emojicon.fromCodePoint(0x1f648), + Emojicon.fromCodePoint(0x1f649), + Emojicon.fromCodePoint(0x1f64a), + Emojicon.fromCodePoint(0x1f480), + Emojicon.fromCodePoint(0x1f47d), + Emojicon.fromCodePoint(0x1f4a9), + Emojicon.fromCodePoint(0x1f525), + Emojicon.fromChar((char) 0x2728), + Emojicon.fromCodePoint(0x1f31f), + Emojicon.fromCodePoint(0x1f4ab), + Emojicon.fromCodePoint(0x1f4a5), + Emojicon.fromCodePoint(0x1f4a2), + Emojicon.fromCodePoint(0x1f4a6), + Emojicon.fromCodePoint(0x1f4a7), + Emojicon.fromCodePoint(0x1f4a4), + Emojicon.fromCodePoint(0x1f4a8), + Emojicon.fromCodePoint(0x1f442), + Emojicon.fromCodePoint(0x1f440), + Emojicon.fromCodePoint(0x1f443), + Emojicon.fromCodePoint(0x1f445), + Emojicon.fromCodePoint(0x1f444), + Emojicon.fromCodePoint(0x1f44d), + Emojicon.fromCodePoint(0x1f44e), + Emojicon.fromCodePoint(0x1f44c), + Emojicon.fromCodePoint(0x1f44a), + Emojicon.fromChar((char) 0x270a), + Emojicon.fromChar((char) 0x270c), + Emojicon.fromCodePoint(0x1f44b), + Emojicon.fromChar((char) 0x270b), + Emojicon.fromCodePoint(0x1f450), + Emojicon.fromCodePoint(0x1f446), + Emojicon.fromCodePoint(0x1f447), + Emojicon.fromCodePoint(0x1f449), + Emojicon.fromCodePoint(0x1f448), + Emojicon.fromCodePoint(0x1f64c), + Emojicon.fromCodePoint(0x1f64f), + Emojicon.fromChar((char) 0x261d), + Emojicon.fromCodePoint(0x1f44f), + Emojicon.fromCodePoint(0x1f4aa), + Emojicon.fromCodePoint(0x1f6b6), + Emojicon.fromCodePoint(0x1f3c3), + Emojicon.fromCodePoint(0x1f483), + Emojicon.fromCodePoint(0x1f46b), + Emojicon.fromCodePoint(0x1f46a), + Emojicon.fromCodePoint(0x1f46c), + Emojicon.fromCodePoint(0x1f46d), + Emojicon.fromCodePoint(0x1f48f), + Emojicon.fromCodePoint(0x1f491), + Emojicon.fromCodePoint(0x1f46f), + Emojicon.fromCodePoint(0x1f646), + Emojicon.fromCodePoint(0x1f645), + Emojicon.fromCodePoint(0x1f481), + Emojicon.fromCodePoint(0x1f64b), + Emojicon.fromCodePoint(0x1f486), + Emojicon.fromCodePoint(0x1f487), + Emojicon.fromCodePoint(0x1f485), + Emojicon.fromCodePoint(0x1f470), + Emojicon.fromCodePoint(0x1f64e), + Emojicon.fromCodePoint(0x1f64d), + Emojicon.fromCodePoint(0x1f647), + Emojicon.fromCodePoint(0x1f3a9), + Emojicon.fromCodePoint(0x1f451), + Emojicon.fromCodePoint(0x1f452), + Emojicon.fromCodePoint(0x1f45f), + Emojicon.fromCodePoint(0x1f45e), + Emojicon.fromCodePoint(0x1f461), + Emojicon.fromCodePoint(0x1f460), + Emojicon.fromCodePoint(0x1f462), + Emojicon.fromCodePoint(0x1f455), + Emojicon.fromCodePoint(0x1f454), + Emojicon.fromCodePoint(0x1f45a), + Emojicon.fromCodePoint(0x1f457), + Emojicon.fromCodePoint(0x1f3bd), + Emojicon.fromCodePoint(0x1f456), + Emojicon.fromCodePoint(0x1f458), + Emojicon.fromCodePoint(0x1f459), + Emojicon.fromCodePoint(0x1f4bc), + Emojicon.fromCodePoint(0x1f45c), + Emojicon.fromCodePoint(0x1f45d), + Emojicon.fromCodePoint(0x1f45b), + Emojicon.fromCodePoint(0x1f453), + Emojicon.fromCodePoint(0x1f380), + Emojicon.fromCodePoint(0x1f302), + Emojicon.fromCodePoint(0x1f484), + Emojicon.fromCodePoint(0x1f49b), + Emojicon.fromCodePoint(0x1f499), + Emojicon.fromCodePoint(0x1f49c), + Emojicon.fromCodePoint(0x1f49a), + Emojicon.fromChar((char) 0x2764), + Emojicon.fromCodePoint(0x1f494), + Emojicon.fromCodePoint(0x1f497), + Emojicon.fromCodePoint(0x1f493), + Emojicon.fromCodePoint(0x1f495), + Emojicon.fromCodePoint(0x1f496), + Emojicon.fromCodePoint(0x1f49e), + Emojicon.fromCodePoint(0x1f498), + Emojicon.fromCodePoint(0x1f48c), + Emojicon.fromCodePoint(0x1f48b), + Emojicon.fromCodePoint(0x1f48d), + Emojicon.fromCodePoint(0x1f48e), + Emojicon.fromCodePoint(0x1f464), + Emojicon.fromCodePoint(0x1f465), + Emojicon.fromCodePoint(0x1f4ac), + Emojicon.fromCodePoint(0x1f463), + Emojicon.fromCodePoint(0x1f4ad), + }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Places.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Places.java new file mode 100644 index 0000000..070dc09 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Places.java @@ -0,0 +1,123 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji; + +public class Places { + public static final Emojicon[] DATA = new Emojicon[]{ + Emojicon.fromCodePoint(0x1f3e0), + Emojicon.fromCodePoint(0x1f3e1), + Emojicon.fromCodePoint(0x1f3eb), + Emojicon.fromCodePoint(0x1f3e2), + Emojicon.fromCodePoint(0x1f3e3), + Emojicon.fromCodePoint(0x1f3e5), + Emojicon.fromCodePoint(0x1f3e6), + Emojicon.fromCodePoint(0x1f3ea), + Emojicon.fromCodePoint(0x1f3e9), + Emojicon.fromCodePoint(0x1f3e8), + Emojicon.fromCodePoint(0x1f492), + Emojicon.fromChar((char) 0x26ea), + Emojicon.fromCodePoint(0x1f3ec), + Emojicon.fromCodePoint(0x1f3e4), + Emojicon.fromCodePoint(0x1f307), + Emojicon.fromCodePoint(0x1f306), + Emojicon.fromCodePoint(0x1f3ef), + Emojicon.fromCodePoint(0x1f3f0), + Emojicon.fromChar((char) 0x26fa), + Emojicon.fromCodePoint(0x1f3ed), + Emojicon.fromCodePoint(0x1f5fc), + Emojicon.fromCodePoint(0x1f5fe), + Emojicon.fromCodePoint(0x1f5fb), + Emojicon.fromCodePoint(0x1f304), + Emojicon.fromCodePoint(0x1f305), + Emojicon.fromCodePoint(0x1f303), + Emojicon.fromCodePoint(0x1f5fd), + Emojicon.fromCodePoint(0x1f309), + Emojicon.fromCodePoint(0x1f3a0), + Emojicon.fromCodePoint(0x1f3a1), + Emojicon.fromChar((char) 0x26f2), + Emojicon.fromCodePoint(0x1f3a2), + Emojicon.fromCodePoint(0x1f6a2), + Emojicon.fromChar((char) 0x26f5), + Emojicon.fromCodePoint(0x1f6a4), + Emojicon.fromCodePoint(0x1f6a3), + Emojicon.fromChar((char) 0x2693), + Emojicon.fromCodePoint(0x1f680), + Emojicon.fromChar((char) 0x2708), + Emojicon.fromCodePoint(0x1f4ba), + Emojicon.fromCodePoint(0x1f681), + Emojicon.fromCodePoint(0x1f682), + Emojicon.fromCodePoint(0x1f68a), + Emojicon.fromCodePoint(0x1f689), + Emojicon.fromCodePoint(0x1f69e), + Emojicon.fromCodePoint(0x1f686), + Emojicon.fromCodePoint(0x1f684), + Emojicon.fromCodePoint(0x1f685), + Emojicon.fromCodePoint(0x1f688), + Emojicon.fromCodePoint(0x1f687), + Emojicon.fromCodePoint(0x1f69d), + Emojicon.fromCodePoint(0x1f68b), + Emojicon.fromCodePoint(0x1f683), + Emojicon.fromCodePoint(0x1f68e), + Emojicon.fromCodePoint(0x1f68c), + Emojicon.fromCodePoint(0x1f68d), + Emojicon.fromCodePoint(0x1f699), + Emojicon.fromCodePoint(0x1f698), + Emojicon.fromCodePoint(0x1f697), + Emojicon.fromCodePoint(0x1f695), + Emojicon.fromCodePoint(0x1f696), + Emojicon.fromCodePoint(0x1f69b), + Emojicon.fromCodePoint(0x1f69a), + Emojicon.fromCodePoint(0x1f6a8), + Emojicon.fromCodePoint(0x1f693), + Emojicon.fromCodePoint(0x1f694), + Emojicon.fromCodePoint(0x1f692), + Emojicon.fromCodePoint(0x1f691), + Emojicon.fromCodePoint(0x1f690), + Emojicon.fromCodePoint(0x1f6b2), + Emojicon.fromCodePoint(0x1f6a1), + Emojicon.fromCodePoint(0x1f69f), + Emojicon.fromCodePoint(0x1f6a0), + Emojicon.fromCodePoint(0x1f69c), + Emojicon.fromCodePoint(0x1f488), + Emojicon.fromCodePoint(0x1f68f), + Emojicon.fromCodePoint(0x1f3ab), + Emojicon.fromCodePoint(0x1f6a6), + Emojicon.fromCodePoint(0x1f6a5), + Emojicon.fromChar((char) 0x26a0), + Emojicon.fromCodePoint(0x1f6a7), + Emojicon.fromCodePoint(0x1f530), + Emojicon.fromChar((char) 0x26fd), + Emojicon.fromCodePoint(0x1f3ee), + Emojicon.fromCodePoint(0x1f3b0), + Emojicon.fromChar((char) 0x2668), + Emojicon.fromCodePoint(0x1f5ff), + Emojicon.fromCodePoint(0x1f3aa), + Emojicon.fromCodePoint(0x1f3ad), + Emojicon.fromCodePoint(0x1f4cd), + Emojicon.fromCodePoint(0x1f6a9), + Emojicon.fromChars("\ud83c\uddef\ud83c\uddf5"), + Emojicon.fromChars("\ud83c\uddf0\ud83c\uddf7"), + Emojicon.fromChars("\ud83c\udde9\ud83c\uddea"), + Emojicon.fromChars("\ud83c\udde8\ud83c\uddf3"), + Emojicon.fromChars("\ud83c\uddfa\ud83c\uddf8"), + Emojicon.fromChars("\ud83c\uddeb\ud83c\uddf7"), + Emojicon.fromChars("\ud83c\uddea\ud83c\uddf8"), + Emojicon.fromChars("\ud83c\uddee\ud83c\uddf9"), + Emojicon.fromChars("\ud83c\uddf7\ud83c\uddfa"), + Emojicon.fromChars("\ud83c\uddec\ud83c\udde7"), + }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Symbols.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Symbols.java new file mode 100644 index 0000000..3164a37 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/base/emoji/Symbols.java @@ -0,0 +1,234 @@ +/* + * Copyright 2014 Hieu Rocker + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.emoji; + +public class Symbols { + public static final Emojicon[] DATA = new Emojicon[]{ + Emojicon.fromChars("\u0031\u20e3"), + Emojicon.fromChars("\u0032\u20e3"), + Emojicon.fromChars("\u0033\u20e3"), + Emojicon.fromChars("\u0034\u20e3"), + Emojicon.fromChars("\u0035\u20e3"), + Emojicon.fromChars("\u0036\u20e3"), + Emojicon.fromChars("\u0037\u20e3"), + Emojicon.fromChars("\u0038\u20e3"), + Emojicon.fromChars("\u0039\u20e3"), + Emojicon.fromChars("\u0030\u20e3"), + Emojicon.fromCodePoint(0x1f51f), + Emojicon.fromCodePoint(0x1f522), + Emojicon.fromChars("\u0023\u20e3"), + Emojicon.fromCodePoint(0x1f523), + Emojicon.fromChar((char) 0x2b06), + Emojicon.fromChar((char) 0x2b07), + Emojicon.fromChar((char) 0x2b05), + Emojicon.fromChar((char) 0x27a1), + Emojicon.fromCodePoint(0x1f520), + Emojicon.fromCodePoint(0x1f521), + Emojicon.fromCodePoint(0x1f524), + Emojicon.fromChar((char) 0x2197), + Emojicon.fromChar((char) 0x2196), + Emojicon.fromChar((char) 0x2198), + Emojicon.fromChar((char) 0x2199), + Emojicon.fromChar((char) 0x2194), + Emojicon.fromChar((char) 0x2195), + Emojicon.fromCodePoint(0x1f504), + Emojicon.fromChar((char) 0x25c0), + Emojicon.fromChar((char) 0x25b6), + Emojicon.fromCodePoint(0x1f53c), + Emojicon.fromCodePoint(0x1f53d), + Emojicon.fromChar((char) 0x21a9), + Emojicon.fromChar((char) 0x21aa), + Emojicon.fromChar((char) 0x2139), + Emojicon.fromChar((char) 0x23ea), + Emojicon.fromChar((char) 0x23e9), + Emojicon.fromChar((char) 0x23eb), + Emojicon.fromChar((char) 0x23ec), + Emojicon.fromChar((char) 0x2935), + Emojicon.fromChar((char) 0x2934), + Emojicon.fromCodePoint(0x1f197), + Emojicon.fromCodePoint(0x1f500), + Emojicon.fromCodePoint(0x1f501), + Emojicon.fromCodePoint(0x1f502), + Emojicon.fromCodePoint(0x1f195), + Emojicon.fromCodePoint(0x1f199), + Emojicon.fromCodePoint(0x1f192), + Emojicon.fromCodePoint(0x1f193), + Emojicon.fromCodePoint(0x1f196), + Emojicon.fromCodePoint(0x1f4f6), + Emojicon.fromCodePoint(0x1f3a6), + Emojicon.fromCodePoint(0x1f201), + Emojicon.fromCodePoint(0x1f22f), + Emojicon.fromCodePoint(0x1f233), + Emojicon.fromCodePoint(0x1f235), + Emojicon.fromCodePoint(0x1f234), + Emojicon.fromCodePoint(0x1f232), + Emojicon.fromCodePoint(0x1f250), + Emojicon.fromCodePoint(0x1f239), + Emojicon.fromCodePoint(0x1f23a), + Emojicon.fromCodePoint(0x1f236), + Emojicon.fromCodePoint(0x1f21a), + Emojicon.fromCodePoint(0x1f6bb), + Emojicon.fromCodePoint(0x1f6b9), + Emojicon.fromCodePoint(0x1f6ba), + Emojicon.fromCodePoint(0x1f6bc), + Emojicon.fromCodePoint(0x1f6be), + Emojicon.fromCodePoint(0x1f6b0), + Emojicon.fromCodePoint(0x1f6ae), + Emojicon.fromCodePoint(0x1f17f), + Emojicon.fromChar((char) 0x267f), + Emojicon.fromCodePoint(0x1f6ad), + Emojicon.fromCodePoint(0x1f237), + Emojicon.fromCodePoint(0x1f238), + Emojicon.fromCodePoint(0x1f202), + Emojicon.fromChar((char) 0x24c2), + Emojicon.fromCodePoint(0x1f6c2), + Emojicon.fromCodePoint(0x1f6c4), + Emojicon.fromCodePoint(0x1f6c5), + Emojicon.fromCodePoint(0x1f6c3), + Emojicon.fromCodePoint(0x1f251), + Emojicon.fromChar((char) 0x3299), + Emojicon.fromChar((char) 0x3297), + Emojicon.fromCodePoint(0x1f191), + Emojicon.fromCodePoint(0x1f198), + Emojicon.fromCodePoint(0x1f194), + Emojicon.fromCodePoint(0x1f6ab), + Emojicon.fromCodePoint(0x1f51e), + Emojicon.fromCodePoint(0x1f4f5), + Emojicon.fromCodePoint(0x1f6af), + Emojicon.fromCodePoint(0x1f6b1), + Emojicon.fromCodePoint(0x1f6b3), + Emojicon.fromCodePoint(0x1f6b7), + Emojicon.fromCodePoint(0x1f6b8), + Emojicon.fromChar((char) 0x26d4), + Emojicon.fromChar((char) 0x2733), + Emojicon.fromChar((char) 0x2747), + Emojicon.fromChar((char) 0x274e), + Emojicon.fromChar((char) 0x2705), + Emojicon.fromChar((char) 0x2734), + Emojicon.fromCodePoint(0x1f49f), + Emojicon.fromCodePoint(0x1f19a), + Emojicon.fromCodePoint(0x1f4f3), + Emojicon.fromCodePoint(0x1f4f4), + Emojicon.fromCodePoint(0x1f170), + Emojicon.fromCodePoint(0x1f171), + Emojicon.fromCodePoint(0x1f18e), + Emojicon.fromCodePoint(0x1f17e), + Emojicon.fromCodePoint(0x1f4a0), + Emojicon.fromChar((char) 0x27bf), + Emojicon.fromChar((char) 0x267b), + Emojicon.fromChar((char) 0x2648), + Emojicon.fromChar((char) 0x2649), + Emojicon.fromChar((char) 0x264a), + Emojicon.fromChar((char) 0x264b), + Emojicon.fromChar((char) 0x264c), + Emojicon.fromChar((char) 0x264d), + Emojicon.fromChar((char) 0x264e), + Emojicon.fromChar((char) 0x264f), + Emojicon.fromChar((char) 0x2650), + Emojicon.fromChar((char) 0x2651), + Emojicon.fromChar((char) 0x2652), + Emojicon.fromChar((char) 0x2653), + Emojicon.fromChar((char) 0x26ce), + Emojicon.fromCodePoint(0x1f52f), + Emojicon.fromCodePoint(0x1f3e7), + Emojicon.fromCodePoint(0x1f4b9), + Emojicon.fromCodePoint(0x1f4b2), + Emojicon.fromCodePoint(0x1f4b1), +// Emoji.fromChar((char)0x00a9), +// Emoji.fromChar((char)0x00ae), + Emojicon.fromChar((char) 0xe24e), + Emojicon.fromChar((char) 0xe24f), + + Emojicon.fromChar((char) 0x2122), + Emojicon.fromChar((char) 0x274c), + Emojicon.fromChar((char) 0x203c), + Emojicon.fromChar((char) 0x2049), + Emojicon.fromChar((char) 0x2757), + Emojicon.fromChar((char) 0x2753), + Emojicon.fromChar((char) 0x2755), + Emojicon.fromChar((char) 0x2754), + Emojicon.fromChar((char) 0x2b55), + Emojicon.fromCodePoint(0x1f51d), + Emojicon.fromCodePoint(0x1f51a), + Emojicon.fromCodePoint(0x1f519), + Emojicon.fromCodePoint(0x1f51b), + Emojicon.fromCodePoint(0x1f51c), + Emojicon.fromCodePoint(0x1f503), + Emojicon.fromCodePoint(0x1f55b), + Emojicon.fromCodePoint(0x1f567), + Emojicon.fromCodePoint(0x1f550), + Emojicon.fromCodePoint(0x1f55c), + Emojicon.fromCodePoint(0x1f551), + Emojicon.fromCodePoint(0x1f55d), + Emojicon.fromCodePoint(0x1f552), + Emojicon.fromCodePoint(0x1f55e), + Emojicon.fromCodePoint(0x1f553), + Emojicon.fromCodePoint(0x1f55f), + Emojicon.fromCodePoint(0x1f554), + Emojicon.fromCodePoint(0x1f560), + Emojicon.fromCodePoint(0x1f555), + Emojicon.fromCodePoint(0x1f556), + Emojicon.fromCodePoint(0x1f557), + Emojicon.fromCodePoint(0x1f558), + Emojicon.fromCodePoint(0x1f559), + Emojicon.fromCodePoint(0x1f55a), + Emojicon.fromCodePoint(0x1f561), + Emojicon.fromCodePoint(0x1f562), + Emojicon.fromCodePoint(0x1f563), + Emojicon.fromCodePoint(0x1f564), + Emojicon.fromCodePoint(0x1f565), + Emojicon.fromCodePoint(0x1f566), + Emojicon.fromChar((char) 0x2716), + Emojicon.fromChar((char) 0x2795), + Emojicon.fromChar((char) 0x2796), + Emojicon.fromChar((char) 0x2797), + Emojicon.fromChar((char) 0x2660), + Emojicon.fromChar((char) 0x2665), + Emojicon.fromChar((char) 0x2663), + Emojicon.fromChar((char) 0x2666), + Emojicon.fromCodePoint(0x1f4ae), + Emojicon.fromCodePoint(0x1f4af), + Emojicon.fromChar((char) 0x2714), + Emojicon.fromChar((char) 0x2611), + Emojicon.fromCodePoint(0x1f518), + Emojicon.fromCodePoint(0x1f517), + Emojicon.fromChar((char) 0x27b0), + Emojicon.fromChar((char) 0x3030), + Emojicon.fromChar((char) 0x303d), + Emojicon.fromCodePoint(0x1f531), + Emojicon.fromChar((char) 0x25fc), + Emojicon.fromChar((char) 0x25fb), + Emojicon.fromChar((char) 0x25fe), + Emojicon.fromChar((char) 0x25fd), + Emojicon.fromChar((char) 0x25aa), + Emojicon.fromChar((char) 0x25ab), + Emojicon.fromCodePoint(0x1f53a), + Emojicon.fromCodePoint(0x1f532), + Emojicon.fromCodePoint(0x1f533), + Emojicon.fromChar((char) 0x26ab), + Emojicon.fromChar((char) 0x26aa), + Emojicon.fromCodePoint(0x1f534), + Emojicon.fromCodePoint(0x1f535), + Emojicon.fromCodePoint(0x1f53b), + Emojicon.fromChar((char) 0x2b1c), + Emojicon.fromChar((char) 0x2b1b), + Emojicon.fromCodePoint(0x1f536), + Emojicon.fromCodePoint(0x1f537), + Emojicon.fromCodePoint(0x1f538), + Emojicon.fromCodePoint(0x1f539), + }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/BaseHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/BaseHolder.java new file mode 100644 index 0000000..c500919 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/BaseHolder.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ChattingRowType; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class BaseHolder { + + /** + * row type {@link ChattingRowType} + */ + protected int type; + + /** + * for upload message . + */ + protected ProgressBar progressBar; + protected ImageView chattingAvatar; + protected TextView chattingTime; + protected TextView chattingUser; + protected CheckBox checkBox; + /** + * The file Im message transmission state, success or failure or sending + * @see SQLiteManager#IMESSENGER_STATUS_SUCCEED + * @see SQLiteManager#IMESSENGER_STATUS_SENT + * @see SQLiteManager#IMESSENGER_STATUS_SENDING + * @see SQLiteManager#IMESSENGER_STATUS_FAIL + */ + protected ImageView uploadState; + protected View baseView; + protected View clickAreaView; + protected View chattingMaskView; + + public BaseHolder(int type) { + this.type = type; + } + + /** + * @param baseView + */ + public BaseHolder(View baseView) { + super(); + this.baseView = baseView; + } + + public void initBaseHolder(View baseView) { + this.baseView = baseView; + chattingTime = (TextView) baseView.findViewById(R.id.chatting_time_tv); + chattingAvatar = (ImageView) baseView.findViewById(R.id.chatting_avatar_iv); + clickAreaView = baseView.findViewById(R.id.chatting_click_area); + uploadState = (ImageView) baseView.findViewById(R.id.chatting_state_iv); + } + + /** + * + * @param edit + */ + public void setEditMode(boolean edit) { + int visibility = edit? View.VISIBLE:View.GONE; + if(checkBox != null && checkBox.getVisibility() != visibility) { + checkBox.setVisibility(visibility); + } + + if(chattingMaskView != null && chattingMaskView.getVisibility() != visibility) { + chattingMaskView.setVisibility(visibility); + } + + } + + /** + * @return the baseView + */ + public View getBaseView() { + return baseView; + } + + /** + * @return the type + */ + public int getType() { + return type; + } + + /** + * @return the progressBar + */ + public ProgressBar getUploadProgressBar() { + return progressBar; + } + + /** + * @return the chattingAvatar + */ + public ImageView getChattingAvatar() { + return chattingAvatar; + } + + /** + * @return the chattingTime + */ + public TextView getChattingTime() { + return chattingTime; + } + + /** + * @param chattingTime the chattingTime to set + */ + public void setChattingTime(TextView chattingTime) { + this.chattingTime = chattingTime; + } + + /** + * @return the chattingUser + */ + public TextView getChattingUser() { + return chattingUser; + } + + /** + * @return the checkBox + */ + public CheckBox getCheckBox() { + return checkBox; + } + + /** + * @return the uploadState + */ + public ImageView getUploadState() { + return uploadState; + } + + /** + * @return the clickAreaView + */ + public View getClickAreaView() { + return clickAreaView; + } + + /** + * @return the chattingMaskView + */ + public View getChattingMaskView() { + return chattingMaskView; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/DescriptionViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/DescriptionViewHolder.java new file mode 100644 index 0000000..b17bbe4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/DescriptionViewHolder.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class DescriptionViewHolder extends BaseHolder { + + public View chattingContent; + /** + * TextView that display IMessage description. + */ + private EmojiconTextView descTextView; + + /** + * @param type + */ + public DescriptionViewHolder(int type) { + super(type); + + } + + public BaseHolder initBaseHolder(View baseView , boolean receive) { + super.initBaseHolder(baseView); + + chattingTime = (TextView) baseView.findViewById(R.id.chatting_time_tv); + chattingUser = (TextView) baseView.findViewById(R.id.chatting_user_tv); + descTextView = (EmojiconTextView) baseView.findViewById(R.id.chatting_content_itv); + checkBox = (CheckBox) baseView.findViewById(R.id.chatting_checkbox); + chattingMaskView = baseView.findViewById(R.id.chatting_maskview); + chattingContent = baseView.findViewById(R.id.chatting_content_area); + if(receive) { + type = 7; + return this; + } + + uploadState = (ImageView) baseView.findViewById(R.id.chatting_state_iv); + progressBar = (ProgressBar) baseView.findViewById(R.id.uploading_pb); + type = 8; + return this; + } + + /** + * {@link CCPTextView} Display imessage text + * @return + */ + public EmojiconTextView getDescTextView() { + if(descTextView == null) { + descTextView = (EmojiconTextView) getBaseView().findViewById(R.id.chatting_content_itv); + } + return descTextView; + } + + /** + * + * @return + */ + public ImageView getChattingState() { + if(uploadState == null) { + uploadState = (ImageView) getBaseView().findViewById(R.id.chatting_state_iv); + } + return uploadState; + } + + /** + * + * @return + */ + public ProgressBar getUploadProgressBar() { + if(progressBar == null) { + progressBar = (ProgressBar) getBaseView().findViewById(R.id.uploading_pb); + } + return progressBar; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/FileRowViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/FileRowViewHolder.java new file mode 100644 index 0000000..f8bbfe2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/FileRowViewHolder.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.view.View; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class FileRowViewHolder extends BaseHolder { + + public TextView contentTv; + public ImageView ivVideoMp4; + + public FrameLayout fl; + public Button buPlayVideo; + /** + * @param type + */ + public FileRowViewHolder(int type) { + super(type); + + } + + public BaseHolder initBaseHolder(View baseView , boolean receive) { + super.initBaseHolder(baseView); + + chattingTime = (TextView) baseView.findViewById(R.id.chatting_time_tv); + chattingUser = ((TextView) baseView.findViewById(R.id.chatting_user_tv)); + checkBox = ((CheckBox) baseView.findViewById(R.id.chatting_checkbox)); + chattingMaskView = baseView.findViewById(R.id.chatting_maskview); + uploadState = ((ImageView) baseView.findViewById(R.id.chatting_state_iv)); + contentTv = ((TextView) baseView.findViewById(R.id.chatting_content_itv)); + + ivVideoMp4=(ImageView) baseView.findViewById(R.id.iv_file_mp4); + fl=(FrameLayout) baseView.findViewById(R.id.fl_chatting_video); + buPlayVideo=(Button) baseView.findViewById(R.id.btn_play_video); + if(receive) { + type = 3; + return this; + } + +// progressBar = (ProgressBar) baseView.findViewById(R.id.uploading_pb); + type = 4; + return this; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/ImageRowViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/ImageRowViewHolder.java new file mode 100644 index 0000000..1794950 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/ImageRowViewHolder.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class ImageRowViewHolder extends BaseHolder { + + public ImageView chattingContentIv; + public View uploadingView; + public TextView uploadingText; + public ImageView maskView; + public ImageView mGifIcon; + + /** + * @param type + */ + public ImageRowViewHolder(int type) { + super(type); + } + + /* (non-Javadoc) + * @see com.hisun.cas.model.BaseHolder#initBaseHolder(android.view.View) + */ + public BaseHolder initBaseHolder(View baseView , boolean receive) { + super.initBaseHolder(baseView); + + chattingTime = (TextView) baseView.findViewById(R.id.chatting_time_tv); + chattingContentIv = (ImageView) baseView.findViewById(R.id.chatting_content_iv); + checkBox = (CheckBox) baseView.findViewById(R.id.chatting_checkbox); + chattingMaskView = baseView.findViewById(R.id.chatting_maskview); + uploadingView = baseView.findViewById(R.id.uploading_view); + mGifIcon = (ImageView) baseView.findViewById(R.id.img_gif); + + if(receive) { + chattingUser = (TextView) baseView.findViewById(R.id.chatting_user_tv); + progressBar = (ProgressBar) baseView.findViewById(R.id.downloading_pb); + type = 1; + } else { + progressBar = (ProgressBar) baseView.findViewById(R.id.uploading_pb); + uploadingText = (TextView) baseView.findViewById(R.id.uploading_tv); + chattingUser = (TextView) baseView.findViewById(R.id.chatting_user_tv); + type = 2; + } + maskView = (ImageView) baseView.findViewById(R.id.chatting_content_mask_iv); + + return this; + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/RichTextViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/RichTextViewHolder.java new file mode 100644 index 0000000..cc573f3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/RichTextViewHolder.java @@ -0,0 +1,101 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; + +public class RichTextViewHolder extends BaseHolder { + + public View chattingContent; + /** + * TextView that display IMessage description. + */ + public EmojiconTextView descTextView; + + public RelativeLayout relativeLayout; + + public ImageView imageView; + + public TextView tvUrl; + public TextView readTv; + + /** + * @param type + */ + public RichTextViewHolder(int type) { + super(type); + + } + + public BaseHolder initBaseHolder(View baseView, boolean receive) { + super.initBaseHolder(baseView); + + chattingTime = (TextView) baseView.findViewById(R.id.chatting_time_tv); + chattingUser = (TextView) baseView.findViewById(R.id.chatting_user_tv); + descTextView = (EmojiconTextView) baseView + .findViewById(R.id.tv_location); + checkBox = (CheckBox) baseView.findViewById(R.id.chatting_checkbox); + chattingMaskView = baseView.findViewById(R.id.chatting_maskview); + chattingContent = baseView.findViewById(R.id.chatting_content_area); + relativeLayout = (RelativeLayout) baseView + .findViewById(R.id.re_location); + imageView = (ImageView) baseView.findViewById(R.id.iv_rich); + tvUrl = (TextView) baseView.findViewById(R.id.tv_pre_content); + if (!receive) { + readTv = (TextView) baseView.findViewById(R.id.tv_read_unread); + } + if (receive) { + type = 15; + return this; + } + + uploadState = (ImageView) baseView.findViewById(R.id.chatting_state_iv); + progressBar = (ProgressBar) baseView.findViewById(R.id.uploading_pb); + type = 14; + return this; + } + + /** + * {@link CCPTextView} Display imessage text + * + * @return + */ + public EmojiconTextView getDescTextView() { + if (descTextView == null) { + descTextView = (EmojiconTextView) getBaseView().findViewById( + R.id.chatting_content_itv); + } + return descTextView; + } + + /** + * + * @return + */ + public ImageView getChattingState() { + if (uploadState == null) { + uploadState = (ImageView) getBaseView().findViewById( + R.id.chatting_state_iv); + } + return uploadState; + } + + /** + * + * @return + */ + public ProgressBar getUploadProgressBar() { + if (progressBar == null) { + progressBar = (ProgressBar) getBaseView().findViewById( + R.id.uploading_pb); + } + return progressBar; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/SystemViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/SystemViewHolder.java new file mode 100644 index 0000000..aac3ba4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/SystemViewHolder.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.widget.TextView; + +/** + *

Title: ChattingSystemViewHolder.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-8-4 + * @version 1.0 + */ +public class SystemViewHolder extends BaseHolder { + + public TextView mSystemView; + /** + * @param type + */ + public SystemViewHolder(int type) { + super(type); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/VoiceRowViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/VoiceRowViewHolder.java new file mode 100644 index 0000000..bd564d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/holder/VoiceRowViewHolder.java @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder; + +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.CCPAnimImageView; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class VoiceRowViewHolder extends BaseHolder { + + public TextView contentTv; + public TextView voicePlayAnim; + public CCPAnimImageView voiceAnim; + public RelativeLayout voicePlayFrameLayout; + public CCPAnimImageView voiceLoading; + public ProgressBar voiceSending; + public TextView voiceSendigBG; + + /** + * @param type + */ + public VoiceRowViewHolder(int type) { + super(type); + + } + + public BaseHolder initBaseHolder(View baseView , boolean receive) { + super.initBaseHolder(baseView); + + chattingTime = ((TextView) baseView.findViewById(R.id.chatting_time_tv)); + chattingUser = ((TextView) baseView.findViewById(R.id.chatting_user_tv)); + voicePlayAnim = ((TextView) baseView.findViewById(R.id.chatting_voice_play_anim_tv)); + checkBox = ((CheckBox) baseView.findViewById(R.id.chatting_checkbox)); + chattingMaskView = baseView.findViewById(R.id.chatting_maskview); + uploadState = ((ImageView) baseView.findViewById(R.id.chatting_state_iv)); + contentTv = ((TextView) baseView.findViewById(R.id.chatting_content_itv)); + voicePlayFrameLayout = baseView.findViewById(R.id.chatting_voice_play_content); + voiceAnim = ((CCPAnimImageView) baseView.findViewById(R.id.chatting_voice_anim)); + voiceAnim.restBackground(); + + if (receive) { + type = 5; + voiceAnim.setVoiceFrom(true); + voiceLoading = ((CCPAnimImageView) baseView.findViewById(R.id.chatting_voice_loading)); + voiceLoading.setVoiceFrom(true); + voiceLoading.restBackground(); + return this; + } + + voiceSending = ((ProgressBar) baseView.findViewById(R.id.chatting_voice_sending)); + progressBar = ((ProgressBar) baseView.findViewById(R.id.uploading_pb)); + voiceSendigBG = ((TextView) baseView.findViewById(R.id.chatting_voice_sending_bg)); + voiceAnim.setVoiceFrom(false); + type = 6; + return this; + } + + /** + * + * @param holder + * @param uploadVisibility + * @param playVisibility + * @param receive + */ + private static void uploadVoiceStatus(VoiceRowViewHolder holder , int uploadVisibility , int playVisibility , boolean receive) { + holder.uploadState.setVisibility(View.GONE); + holder.contentTv.setVisibility(playVisibility); + holder.voicePlayFrameLayout.setVisibility(playVisibility); + + if(receive) { + holder.voiceLoading.setVisibility(uploadVisibility); + return; + } + holder.voiceSendigBG.setVisibility(uploadVisibility); + } + +// public static void initVoiceRow(VoiceRowViewHolder holder , ECMessage detail , int position , ChattingActivity activity , boolean receive) { +// if(holder == null) { +// return ; +// } +// +// ECVoiceMessageBody vBody = (ECVoiceMessageBody) detail.getBody(); +// int duration = vBody.getDuration(); +// if(duration < 1) { +// duration = 1; +// } +// +// holder.voiceAnim.setVisibility(View.GONE); +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, ViewHolderTag.TagType.TAG_VOICE, position, holder.type, receive); +// holder.voicePlayAnim.setTag(holderTag); +// holder.voicePlayAnim.setOnClickListener(activity.mChattingFragment.getChattingAdapter().getOnClickListener()); +// +// ChattingListAdapter2 adapterForce = activity.mChattingFragment.getChattingAdapter(); +// if(adapterForce.mVoicePosition == position) { +// uploadVoiceStatus(holder, View.GONE, View.VISIBLE, receive); +// holder.voiceAnim.setVisibility(View.VISIBLE); +// holder.voiceAnim.startVoiceAnimation(); +// holder.voiceAnim.setWidth(DensityUtil.fromDPToPix(activity, getTimeWidth(duration))); +// holder.contentTv.setTextColor(Color.parseColor("#7390A0")); +// holder.contentTv.setShadowLayer(2.0F, 1.2F, 1.2F, Color.parseColor("#ffffffff")); +// holder.contentTv.setVisibility(View.VISIBLE); +// holder.contentTv.setText(activity.getString(R.string.fmt_time_length, duration)); +// +// holder.voicePlayAnim.setWidth(DensityUtil.fromDPToPix(activity, getTimeWidth(duration))); +// return ; +// } else { +// holder.voiceAnim.stopVoiceAnimation(); +// holder.voiceAnim.setVisibility(View.GONE); +// +// } +// +// +// if(detail.getMsgStatus() == ECMessage.MessageStatus.SUCCESS) { +// holder.contentTv.setTextColor(Color.parseColor("#7390A0")); +// holder.contentTv.setShadowLayer(2.0F, 1.2F, 1.2F, Color.parseColor("#ffffffff")); +// holder.contentTv.setVisibility(View.VISIBLE); +// holder.contentTv.setText(activity.getString(R.string.fmt_time_length, duration)); +// +// holder.voiceAnim.setWidth(DensityUtil.fromDPToPix(activity, getTimeWidth(duration))); +// holder.voicePlayAnim.setWidth(DensityUtil.fromDPToPix(activity, getTimeWidth(duration))); +// +// uploadVoiceStatus(holder, View.GONE, View.VISIBLE, receive); +// } else { +// holder.contentTv.setShadowLayer(0.0F, 0.0F, 0.0F, 0); +// +// if(detail.getMsgStatus() == ECMessage.MessageStatus.FAILED) { +// uploadVoiceStatus(holder, View.GONE, View.VISIBLE, receive); +// holder.contentTv.setVisibility(View.GONE); +// } else { +// uploadVoiceStatus(holder, View.VISIBLE, View.GONE, receive); +// } +// holder.voiceAnim.setWidth(80); +// holder.voicePlayAnim.setWidth(80); +// +// } +// +// if(!receive) { +// holder.voiceAnim.setBackgroundResource(R.drawable.chatto_bg); +// holder.voicePlayAnim.setBackgroundResource(R.drawable.chatto_bg); +// } else { +// holder.voiceAnim.setBackgroundResource(R.drawable.chatfrom_bg); +// holder.voicePlayAnim.setBackgroundResource(R.drawable.chatfrom_bg); +// } +// +// holder.contentTv.setBackgroundColor(0); +// +// +// +// } + + /** + * @param time + * @return + */ + public static int getTimeWidth(int time) { + if (time <= 2) + return 80; + if (time < 10) + return (80 + 9 * (time - 2)); + if (time < 60) + return (80 + 9 * (7 + time / 10)); + return 204; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/BaseChattingRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/BaseChattingRow.java new file mode 100644 index 0000000..1c0ba14 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/BaseChattingRow.java @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.text.TextUtils; +import android.view.View; + +import java.util.HashMap; + +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.BaseHolder; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + *

Title: BaseChattingRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public abstract class BaseChattingRow implements IChattingRow { + + public static final String TAG = LogUtil.getLogUtilsTag(BaseChattingRow.class); + private HashMap hashMap = new HashMap(); + int mRowType; + + public BaseChattingRow(int type) { + mRowType = type; + } + + /** + * 处理消息的发送状态设置 + * @param position 消息的列表所在位置 + * @param holder 消息ViewHolder + * @param l + */ +// protected static void getMsgStateResId(int position , BaseHolder holder , ECMessage msg , View.OnClickListener l){ +// if(msg != null && msg.getDirection() == ECMessage.Direction.SEND) { +// ECMessage.MessageStatus msgStatus = msg.getMsgStatus(); +// if(msgStatus == ECMessage.MessageStatus.FAILED) { +// holder.getUploadState().setImageResource(R.drawable.msg_state_failed_resend); +// holder.getUploadState().setVisibility(View.VISIBLE); +// if(holder.getUploadProgressBar() != null) { +// holder.getUploadProgressBar().setVisibility(View.GONE); +// } +// } else if (msgStatus == ECMessage.MessageStatus.SUCCESS || msgStatus == ECMessage.MessageStatus.RECEIVE) { +// holder.getUploadState().setImageResource(0); +// holder.getUploadState().setVisibility(View.GONE); +// if(holder.getUploadProgressBar() != null) { +// holder.getUploadProgressBar().setVisibility(View.GONE); +// } +// +// } else if (msgStatus == ECMessage.MessageStatus.SENDING) { +// holder.getUploadState().setImageResource(0); +// holder.getUploadState().setVisibility(View.GONE); +// if(holder.getUploadProgressBar() != null) { +// holder.getUploadProgressBar().setVisibility(View.VISIBLE); +// } +// +// } else { +// if(holder.getUploadProgressBar() != null) { +// holder.getUploadProgressBar().setVisibility(View.GONE); +// } +// LogUtil.d(TAG, "getMsgStateResId: not found this state"); +// } +// +// ViewHolderTag holderTag = ViewHolderTag.createTag(msg, ViewHolderTag.TagType.TAG_RESEND_MSG , position); +// holder.getUploadState().setTag(holderTag); +// holder.getUploadState().setOnClickListener(l); +// } +// } + + /** + * + * @param contextMenu + * @param targetView + * @param detail + * @return + */ +// public abstract boolean onCreateRowContextMenu(ContextMenu contextMenu , View targetView , ECMessage detail); + + + /** + * + * @param baseHolder + * @param displayName + */ + public static void setDisplayName(BaseHolder baseHolder , String displayName) { + if(baseHolder == null || baseHolder.getChattingUser() == null) { + return ; + } + + if(TextUtils.isEmpty(displayName)) { + baseHolder.getChattingUser().setVisibility(View.GONE); + return ; + } + baseHolder.getChattingUser().setText(displayName); + baseHolder.getChattingUser().setVisibility(View.VISIBLE); + } + +// protected abstract void buildChattingData(Context context , BaseHolder baseHolder , ECMessage detail , int position); +// +// @Override +// public void buildChattingBaseData(Context context, BaseHolder baseHolder, ECMessage detail, int position) { +// +// // 处理其他使用逻辑 +// buildChattingData(context, baseHolder, detail, position); +// setContactPhoto(baseHolder , detail); +// if(((ChattingActivity) context).isPeerChat() && detail.getDirection() == ECMessage.Direction.RECEIVE) { +// +// PatientModel contact = PatientSqlManager.getPatientInfo(detail.getForm()); +//// ECContacts contact = ContactSqlManager.getContact(detail.getForm()); +//// if(contact != null) { +//// if(TextUtils.isEmpty(contact.getNickname())) { +//// contact.setNickname(contact.getContactid()); +//// } +//// setDisplayName(baseHolder, contact.getNickname()); +//// } else { +//// setDisplayName(baseHolder, detail.getForm()); +//// } +// if(contact != null) { +// if(TextUtils.isEmpty(contact.getRealName())) { +// contact.setRealName(contact.getMobile()); +// } +// setDisplayName(baseHolder, contact.getRealName()); +// } else { +// setDisplayName(baseHolder, "随访患者"); +// } +// } +// setContactPhotoClickListener(context ,baseHolder , detail,true); +// } +// @Override +// public void buildChattingBaseData(Context context, BaseHolder baseHolder, ECMessage detail, int position, boolean isFriend) { +// +// // 处理其他使用逻辑 +// LogUtils.i("isFriend = "+isFriend); +// buildChattingData(context, baseHolder, detail, position); +// setContactPhoto(baseHolder , detail); +// if(((ChattingActivity) context).isPeerChat() && detail.getDirection() == ECMessage.Direction.RECEIVE) { +// +// PatientModel contact = PatientSqlManager.getPatientInfo(detail.getForm()); +//// ECContacts contact = ContactSqlManager.getContact(detail.getForm()); +//// if(contact != null) { +//// if(TextUtils.isEmpty(contact.getNickname())) { +//// contact.setNickname(contact.getContactid()); +//// } +//// setDisplayName(baseHolder, contact.getNickname()); +//// } else { +//// setDisplayName(baseHolder, detail.getForm()); +//// } +// if(contact != null) { +// if(TextUtils.isEmpty(contact.getRealName())) { +// contact.setRealName(contact.getMobile()); +// } +// setDisplayName(baseHolder, contact.getRealName()); +// } else { +// setDisplayName(baseHolder, "随访患者"); +// } +// } +// setContactPhotoClickListener(context ,baseHolder , detail,isFriend); +// } +// private void setContactPhotoClickListener(final Context context , BaseHolder baseHolder, final ECMessage detail, final boolean isFriend) { +// if(baseHolder.getChattingAvatar() != null && detail != null) { +// baseHolder.getChattingAvatar().setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// +// if (TextUtils.isEmpty(detail.getForm())) { +// return; +// } +// String name = PatientSqlManager.getPatientName(detail.getForm()); +// if (TextUtils.isEmpty(name)) { +// return; +// } +// String USERID = SharePrefUtil.getString(context, Constant.USERID, ""); +// //说明点击的是我的头像 +// if (USERID.equals(detail.getForm())) { +// return; +// } +// //患者详情页面 +// Intent intent = new Intent(context, PatientActivity.class); +// intent.putExtra("realName", name); +// String uuid = null; +// if (detail.getForm().contains("#")) { +// String[] split = detail.getForm().split("#"); +// uuid = split[1]; +// }else{ +// uuid = detail.getForm(); +// } +// intent.putExtra("patientUuid", uuid); +// intent.putExtra("isFriend", isFriend); +// context.startActivity(intent);//启动患者详情界面 +// } +// }); +// +// baseHolder.getChattingAvatar().setOnLongClickListener(new View.OnLongClickListener() { +// @Override +// public boolean onLongClick(View v) { +// if(context instanceof ChattingActivity) { +// final ChattingActivity activity = (ChattingActivity) context; +// if(activity.isPeerChat() && !activity.mChattingFragment.mAtsomeone) { +// activity.mChattingFragment.mAtsomeone = true; +// // 群组 +// ECContacts contact = ContactSqlManager.getContact(detail.getForm()); +// if(contact != null) { +// if(TextUtils.isEmpty(contact.getNickname() )) { +// contact.setNickname(contact.getContactid()); +// } +// activity.mChattingFragment.getChattingFooter().setLastText(activity.mChattingFragment.getChattingFooter().getLastText() + "@" + contact.getNickname() + (char)(8197)); +// activity.mChattingFragment.getChattingFooter().setMode(1); +// v.postDelayed(new Runnable() { +// @Override +// public void run() { +// activity.mChattingFragment.mAtsomeone = false; +// } +// },2000L); +// } +// } +// } +// +// return true; +// } +// }); +// } +// } + + + /** + * 添加用户头像 + * @param baseHolder + * @param detail + */ +// private void setContactPhoto(BaseHolder baseHolder, ECMessage detail) { +// if(baseHolder.getChattingAvatar() != null) { +// try { +// if (TextUtils.isEmpty(detail.getForm())) { +// return; +// } +// String userUin = ""; +//// LogUtil.i("baseChattingRow=detail.getForm()="+detail.getForm()); +// if (hashMap.containsKey(detail.getForm())) { +// userUin = hashMap.get(detail.getForm()); +// +// } else { +//// userUin = ContactSqlManager.getContact(detail.getForm()) +//// .getRemark(); +// //如果是我自己 +// String userid = SharePrefUtil.getString(UIUtils.getContext(), Constant.USERID, ""); +// if (userid.equals(detail.getForm())) { +// userUin = SharePrefUtil.getString(UIUtils.getContext(), Constant.photo, ""); +// }else { +// //从患者数据库取头像url +// String uuid = detail.getForm(); +//// if (detail.getForm().contains("#")) { +//// String[] split = detail.getForm().split("#"); +//// uuid = split[1]; +//// }else{ +//// uuid = detail.getForm(); +//// } +// userUin = PatientSqlManager.getPatientPhoto(uuid); +// LogUtil.i("baseChattingRow=userUin="+userUin+"uuid="+uuid); +// } +// if (!TextUtils.isEmpty(userUin)) { +// userUin = Url.urlHtml + userUin; +// } +// ImageLoader.getInstance().displayImage(userUin, baseHolder.getChattingAvatar(), +// ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray)); +// return; +// } +// LogUtil.i("聊天BaseChattingRow-touxiangUrl=="+userUin+"=="+ ContactLogic.getPhoto(userUin)); +// baseHolder.getChattingAvatar().setImageBitmap( +// ContactLogic.getPhoto(userUin)); +// } catch (Exception e) { +// } +// } +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/CCPEmoji.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/CCPEmoji.java new file mode 100644 index 0000000..3fdb1bd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/CCPEmoji.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class CCPEmoji { + + /** + * Expression corresponding resource picture ID + */ + private int id; + + /** + * Expression resources corresponding text description + */ + private String EmojiDesc; + + /** + * File name expression resources + */ + private String EmojiName; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id=id; + } + + public String getEmojiDesc() { + return EmojiDesc; + } + + public void setEmojiDesc(String emojiDesc) { + EmojiDesc = emojiDesc; + } + + public String getEmojiName() { + return EmojiName; + } + + public void setEmojiName(String emojiName) { + EmojiName = emojiName; + } + + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingRowType.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingRowType.java new file mode 100644 index 0000000..f1f3c8d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingRowType.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +/** + *

+ * Title: ChatRowType.java + *

+ *

+ * Description: + *

+ *

+ * Copyright: Copyright (c) 2014 + *

+ *

+ * Company: Beijing Speedtong Information Technology Co.,Ltd + *

+ * + * @author Jorstin Chan + * @date 2014-4-16 + * @version 1.0 + */ +public enum ChattingRowType { + + /** + * display a image of message received + */ + IMAGE_ROW_RECEIVED("C200R", Integer.valueOf(1)), + + /** + * display a image of message transmitted + */ + IMAGE_ROW_TRANSMIT("C200T", Integer.valueOf(2)), + + /** + * display a file of message received + */ + FILE_ROW_RECEIVED("C1024R", Integer.valueOf(3)), + + /** + * display a file of message transmitted + */ + FILE_ROW_TRANSMIT("C1024T", Integer.valueOf(4)), + + /** + * display a voice of message received + */ + VOICE_ROW_RECEIVED("C60R", Integer.valueOf(5)), + + /** + * display a voice of message transmitted + */ + VOICE_ROW_TRANSMIT("C60T", Integer.valueOf(6)), + + /** + * Display text of message received + */ + DESCRIPTION_ROW_RECEIVED("C2000R", Integer.valueOf(7)), + + /** + * Display text of message transmitted + */ + DESCRIPTION_ROW_TRANSMIT("C2000T", Integer.valueOf(8)), + + /** + * chatting item for system .such as time + */ + CHATTING_SYSTEM("C110T", Integer.valueOf(9)), + + LOCATION_ROW_RECEIVED("C2200R", Integer.valueOf(10)), + + LOCATION_ROW_TRANSMIT("C2200T", Integer.valueOf(11)), CALL_ROW_RECEIVED( + "C2400R", Integer.valueOf(12)), CALL_ROW_TO("C2400T", Integer + .valueOf(13)), + + RICH_TEXT_ROW_TO("C2600T", Integer.valueOf(14)), RICH_TEXT_ROW_RECEIVED( + "C2600R", Integer.valueOf(15)), + /** + * redpacket recieve + */ + REDPACKET_ROW_RECEIVED("C7000R", Integer.valueOf(16)), + + /** + * redpacket send + */ + REDPACKE_ROW_TO("C7000T", Integer.valueOf(17)), + /** + * redpacket ack + */ + REDPACKE_ROW_ACK_RECEIVED("C8000R", Integer.valueOf(18)), REDPACKE_ROW_ACK_TO( + "C8000T", Integer.valueOf(19)); + + private final Integer mId; + private final Object mDefaultValue; + + /** + * Constructor of ChattingRowType. + * + * @param id + * The unique identifier of the setting + * @param defaultValue + * The default value of the setting + */ + private ChattingRowType(Object defaultValue, Integer id) { + this.mId = id; + this.mDefaultValue = defaultValue; + } + + /** + * Method that returns the unique identifier of the setting. + * + * @return the mId + */ + public Integer getId() { + return this.mId; + } + + /** + * Method that returns the default value of the setting. + * + * @return Object The default value of the setting + */ + public Object getDefaultValue() { + return this.mDefaultValue; + } + + /** + * Method that returns an instance of + * {@link cn.shangyu.gdxzExpert.ecdemo.common.utils.ECPreferenceSettings} + * from its. unique identifier + * + * @param value + * The unique identifier + * @return CCPPreferenceSettings The navigation sort mode + */ + public static ChattingRowType fromValue(String value) { + ChattingRowType[] values = values(); + int cc = values.length; + for (int i = 0; i < cc; i++) { + if (values[i].mDefaultValue.equals(value)) { + return values[i]; + } + } + return null; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingSystemRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingSystemRow.java new file mode 100644 index 0000000..9cd2c02 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ChattingSystemRow.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.BaseHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.SystemViewHolder; + + +/** + *

Title: ChattingSystem.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-5-10 + * @version 1.0 + */ +public class ChattingSystemRow extends BaseChattingRow { + + public ChattingSystemRow(int type) { + super(type); + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + // we have a don't have a converView so we'll have to create a new one + if (convertView == null || convertView.getTag() == null || ((BaseHolder)convertView.getTag()).getType() != mRowType) { + convertView = inflater.inflate(R.layout.chatting_item_system, null); + + // use the view holder pattern to save of already looked up subviews + SystemViewHolder holder = new SystemViewHolder(mRowType); + holder.setChattingTime((TextView) convertView.findViewById(R.id.chatting_time_tv)); + holder.mSystemView = (TextView) convertView.findViewById(R.id.chatting_content_itv); + convertView.setTag(holder); + } + return convertView; + } +// +// @Override +// public void buildChattingData(Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// +// SystemViewHolder holder = (SystemViewHolder) baseHolder; +// // actually setup the view +// ECMessage iMessage = detail; +// if(iMessage != null) { +// ECTextMessageBody textBody = (ECTextMessageBody) iMessage.getBody(); +// holder.mSystemView.setText(textBody.getMessage()); +// holder.mSystemView.invalidate(); +// } +// } + + + @Override + public int getChatViewType() { + + return ChattingRowType.CHATTING_SYSTEM.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// +// return false; +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ContactStorageLogic.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ContactStorageLogic.java new file mode 100644 index 0000000..f6c20d7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ContactStorageLogic.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class ContactStorageLogic { + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/Conversation.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/Conversation.java new file mode 100644 index 0000000..49a7ff3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/Conversation.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.database.Cursor; +import android.text.TextUtils; + +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.contact.ECContacts; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-13 + * @version 4.0 + */ +public class Conversation { + + private String sessionId; + private int msgType; + private long dateTime; + private int sendStatus; + private int unreadCount; + private String content; + private String username; + private String contactId; + private String type; + private boolean isNotice; + /** + * @return the sessionId + */ + public String getSessionId() { + return sessionId; + } + /** + * @param sessionId the sessionId to set + */ + public void setSessionId(String sessionId) { + this.sessionId = sessionId; + } + /** + * @return the type消息会话来源的类型 + */ + public String getType() { + return type; + } + /** + * @param type消息会话来源的类型 + */ + public void setType(String type) { + this.type = type; + } + + /** + * @return the msgType + */ + public int getMsgType() { + return msgType; + } + /** + * @param msgType the msgType to set + */ + public void setMsgType(int msgType) { + this.msgType = msgType; + } + /** + * @return the dateTime + */ + public long getDateTime() { + return dateTime; + } + /** + * @param dateTime the dateTime to set + */ + public void setDateTime(long dateTime) { + this.dateTime = dateTime; + } + /** + * @return the sendStatus + */ + public int getSendStatus() { + return sendStatus; + } + /** + * @param sendStatus the sendStatus to set + */ + public void setSendStatus(int sendStatus) { + this.sendStatus = sendStatus; + } + /** + * @return the unreadCount + */ + public int getUnreadCount() { + return unreadCount; + } + /** + * @param unreadCount the unreadCount to set + */ + public void setUnreadCount(int unreadCount) { + this.unreadCount = unreadCount; + } + /** + * @return the content + */ + public String getContent() { + return content; + } + /** + * @param content the content to set + */ + public void setContent(String content) { + this.content = content; + } + /** + * @return the username + */ + public String getUsername() { + return username; + } + /** + * @param username the username to set + */ + public void setUsername(String username) { + this.username = username; + } + + public String getContactId() { + return contactId; + } + + public void setContactId(String contactId) { + this.contactId = contactId; + } + + public boolean isNotice() { + return isNotice; + } + + public void setIsNotice(boolean isNotice) { + this.isNotice = isNotice; + } + + //unreadCount, im_thread.type, sendStatus, dateTime, sessionId, text, username ,im_thread.contactid ,send_type + public void setCursor(Cursor cursor) { + this.unreadCount = cursor.getInt(0); + this.msgType = cursor.getInt(1); + this.sendStatus = cursor.getInt(2); + this.dateTime = cursor.getLong(3); + this.sessionId = cursor.getString(4); + this.content = cursor.getString(5); + this.username = cursor.getString(6); + + //去掉群组 +// if(this.sessionId.toLowerCase().startsWith("g")) { +// this.username = cursor.getString(7); +// } + if(this.username == null && !this.sessionId.toUpperCase().startsWith("G")) { + ECContacts contacts = ContactSqlManager.getCacheContact(sessionId); + if(contacts != null) { + username = contacts.getNickname(); + } else { + username = sessionId; + } + } + if(TextUtils.isEmpty(this.username)) { + this.username = sessionId; + } +// this.contactId = cursor.getString(8); + this.contactId = cursor.getString(7); +// this.isNotice = !(cursor.getInt(9) == 2); +// this.type = cursor.getString(10); + this.type = cursor.getString(8); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ConversationItem.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ConversationItem.java new file mode 100644 index 0000000..9cd3e75 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ConversationItem.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +/** + * 会话Item + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class ConversationItem { + + public CharSequence mUsername; + public CharSequence mTimeDescribe; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionRxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionRxRow.java new file mode 100644 index 0000000..56d8d36 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionRxRow.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.DescriptionViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + + +/** + *

Title: DescriptionRxRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class DescriptionRxRow extends BaseChattingRow { + + + public DescriptionRxRow(int type){ + super(type); + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null ) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_from); + + + //use the view holder pattern to save of already looked up subviews + DescriptionViewHolder holder = new DescriptionViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, true)); + } + return convertView; + } + +// @Override +// public void buildChattingData(final Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// +// DescriptionViewHolder holder = (DescriptionViewHolder) baseHolder; +// ECMessage message = detail; +// if(message != null) { +// ECTextMessageBody textBody = (ECTextMessageBody) message.getBody(); +// holder.getDescTextView().setText(textBody.getMessage()); +// holder.getDescTextView().setMovementMethod(LinkMovementMethod.getInstance()); +// } +// } + + @Override + public int getChatViewType() { + + return ChattingRowType.DESCRIPTION_ROW_RECEIVED.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// +// return false; +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionTxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionTxRow.java new file mode 100644 index 0000000..6d9b16d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DescriptionTxRow.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.BaseHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.DescriptionViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + + +/** + * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class DescriptionTxRow extends BaseChattingRow{ + + public DescriptionTxRow(int type){ + super(type); + } + + /* (non-Javadoc) + * @see com.hisun.cas.model.im.ChattingRow#buildChatView(android.view.LayoutInflater, android.view.View) + */ + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null || ((BaseHolder)convertView.getTag()).getType() != mRowType) { + + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_to); + + //use the view holder pattern to save of already looked up subviews + DescriptionViewHolder holder = new DescriptionViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, false)); + } + return convertView; + } + +// @Override +// public void buildChattingData(Context context, BaseHolder baseHolder, +// ECMessage msg, int position) { +// DescriptionViewHolder holder = (DescriptionViewHolder) baseHolder; +// if(msg != null) { +// ECTextMessageBody textBody = (ECTextMessageBody) msg.getBody(); +// holder.getDescTextView().setText(textBody.getMessage()); +// holder.getDescTextView().setMovementMethod(LinkMovementMethod.getInstance()); +// OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment.getChattingAdapter().getOnClickListener(); +// getMsgStateResId(position, holder, msg, onClickListener); + + // ((ChattingActivity) context).registerForContextMenu(holder.getDescTextView()); +// } +// } + + + @Override + public int getChatViewType() { + return ChattingRowType.DESCRIPTION_ROW_TRANSMIT.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// +// return false; +// } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DownloadModel.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DownloadModel.java new file mode 100644 index 0000000..91dc633 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/DownloadModel.java @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.content.ContentValues; +import android.database.Cursor; + +import cn.shangyu.gdxzExpert.ecdemo.storage.AbstractSQLManager; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-13 + * @version 4.0 + */ +public class DownloadModel { + + private String uuid; + private String title; + private String summary; + private String fileFormat; + private int state; + private String time; + private String create_date; + /** + * 对应 source + */ + private String typeName; + private String path; + private String fileSize; + private String filePath; + /** + * 对应creator + */ + private String totalProgress; + /** + * 对应keywords + */ + private String currentProgress; + + public DownloadModel(String uuid) { + // TODO Auto-generated constructor stub + this.uuid = uuid; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getFileFormat() { + return fileFormat; + } + + public void setFileFormat(String fileFormat) { + this.fileFormat = fileFormat; + } + + public int getState() { + return state; + } + + public void setState(int state) { + this.state = state; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public String getTypeName() { + return typeName; + } + + public void setTypeName(String typeName) { + this.typeName = typeName; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getFileSize() { + return fileSize; + } + + public void setFileSize(String fileSize) { + this.fileSize = fileSize; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public String getTotalProgress() { + return totalProgress; + } + + public void setTotalProgress(String totalProgress) { + this.totalProgress = totalProgress; + } + + public String getCurrentProgress() { + return currentProgress; + } + + public void setCurrentProgress(String currentProgress) { + this.currentProgress = currentProgress; + } + + public void setCursor(Cursor cursor) { + this.uuid = cursor.getString(0); + this.title = cursor.getString(1); + this.summary = cursor.getString(2); + this.typeName = cursor.getString(3); + this.fileFormat = cursor.getString(4); + this.state = cursor.getInt(5); + this.path = cursor.getString(6); + this.filePath = cursor.getString(7); + this.fileSize = cursor.getString(8); + this.totalProgress = cursor.getString(9); + this.currentProgress = cursor.getString(10); + this.time = cursor.getString(11); + } + + public ContentValues buildContentValues() { + ContentValues values = new ContentValues(); + values.put(AbstractSQLManager.DownladColumn.UUID, this.uuid); + values.put(AbstractSQLManager.DownladColumn.TITLE, this.title); + values.put(AbstractSQLManager.DownladColumn.SUMMARY, this.summary); + values.put(AbstractSQLManager.DownladColumn.TYPENAME, this.typeName); + values.put(AbstractSQLManager.DownladColumn.FILEFORMAT, this.fileFormat); + values.put(AbstractSQLManager.DownladColumn.STATE, this.state); + values.put(AbstractSQLManager.DownladColumn.PATH, this.path); + values.put(AbstractSQLManager.DownladColumn.FILEPATH, this.filePath); + values.put(AbstractSQLManager.DownladColumn.FILESIZE, this.fileSize); + values.put(AbstractSQLManager.DownladColumn.TOTALPROGRESS, + this.totalProgress); + values.put(AbstractSQLManager.DownladColumn.CURRENTPROGRESS, + this.currentProgress); + values.put(AbstractSQLManager.DownladColumn.TIME, this.time); + return values; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileRxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileRxRow.java new file mode 100644 index 0000000..db74794 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileRxRow.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.FileRowViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + + +/** + *

Title: FileRxRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class FileRxRow extends BaseChattingRow{ + + private String imageUrl; + + public FileRxRow(int type) { + super(type); + } + + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null || convertView.getTag() == null) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_file_from); + + //use the view holder pattern to save of already looked up subviews + FileRowViewHolder holder = new FileRowViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, true)); + } + return convertView; + } + +// @Override +// public void buildChattingData(final Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// final FileRowViewHolder holder = (FileRowViewHolder) baseHolder; +// OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment +// .getChattingAdapter().getOnClickListener(); +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, +// ViewHolderTag.TagType.TAG_VIEW_FILE, position); +// if (detail != null) { +// ECMessage msg = detail; +// ECFileMessageBody body = (ECFileMessageBody) msg.getBody(); +//// try { +//// imageUrl = body.getRemoteUrl().split("#")[9]; +//// } catch (Exception e) { +//// // TODO Auto-generated catch block +//// e.printStackTrace(); +//// } +//// ImageLoader.getInstance().loadImage(imageUrl, ImageOptions.getImageOptions(R.drawable.default_news_iv), new ImageLoadingListener() { +//// +//// @Override +//// public void onLoadingStarted(String arg0, View arg1) { +//// // TODO Auto-generated method stub +//// +//// } +//// +//// @Override +//// public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { +//// // TODO Auto-generated method stub +//// +//// } +//// +//// @Override +//// public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { +//// // TODO Auto-generated method stub +//// //Drawable drawable= context.getResources().getDrawable(R.drawable.attachment_icon); +//// BitmapDrawable drawable= new BitmapDrawable(context.getResources(), arg2); +//// /// 这一步必须要做,否则不会显示. +//// drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); +//// holder.contentTv.setCompoundDrawables(drawable,null,null,null); +//// } +//// +//// @Override +//// public void onLoadingCancelled(String arg0, View arg1) { +//// // TODO Auto-generated method stub +//// +//// } +//// }); +// +// +// holder.contentTv.setText(body.getFileName()); +// String fileName = ""; +// String userData = msg.getUserData(); +// +// if (TextUtils.isEmpty(userData)) { +// } else { +// fileName = userData.substring(userData.indexOf("fileName=") +// + "fileName=".length(), userData.length()); +// +// } +// if ("mp4".equals(FileUtils.getFileExt(fileName))) { +// holder.contentTv.setVisibility(View.GONE); +// holder.contentTv.setTag(null); +// holder.contentTv.setOnClickListener(null); +// holder.fl.setVisibility(View.VISIBLE); +// +// holder.ivVideoMp4.setVisibility(View.VISIBLE); +// holder.buPlayVideo.setOnClickListener(onClickListener); +// holder.buPlayVideo.setTag(holderTag); +// Bitmap createVideoThumbnail = FileUtils +// .createVideoThumbnail(body.getLocalUrl()); +// if (createVideoThumbnail != null) { +// holder.ivVideoMp4.setImageBitmap(createVideoThumbnail); +// +// } +// } else { +// holder.contentTv.setVisibility(View.VISIBLE); +// holder.ivVideoMp4.setVisibility(View.GONE); +// holder.fl.setVisibility(View.GONE); +// holder.buPlayVideo.setTag(null); +// holder.buPlayVideo.setOnClickListener(null); +// holder.contentTv.setTag(holderTag); +// holder.contentTv.setOnClickListener(onClickListener); +// } +// +// getMsgStateResId(position, holder, detail, onClickListener); +// +// } +// } + + @Override + public int getChatViewType() { + return ChattingRowType.FILE_ROW_RECEIVED.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileTxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileTxRow.java new file mode 100644 index 0000000..8f4355d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/FileTxRow.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.FileRowViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + + +/** + * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class FileTxRow extends BaseChattingRow { + + private String imageUrl; + + public FileTxRow(int type) { + super(type); + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null || convertView.getTag() == null) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_file_to); + + //use the view holder pattern to save of already looked up subviews + FileRowViewHolder holder = new FileRowViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, false)); + } + return convertView; + } + + +// @Override +// public void buildChattingData(final Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// +// final FileRowViewHolder holder = (FileRowViewHolder) baseHolder; +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, +// ViewHolderTag.TagType.TAG_VIEW_FILE, position); +// OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment +// .getChattingAdapter().getOnClickListener(); +// if (detail != null) { +// ECMessage message = detail; +// String userData = message.getUserData(); +// ECFileMessageBody fileBody = (ECFileMessageBody) message.getBody(); +//// try { +//// imageUrl = fileBody.getRemoteUrl().split("#")[9]; +//// } catch (Exception e) { +//// // TODO Auto-generated catch block +//// e.printStackTrace(); +//// } +//// ImageLoader.getInstance().loadImage(imageUrl, ImageOptions.getImageOptions(R.drawable.default_news_iv), new ImageLoadingListener() { +//// @Override +//// public void onLoadingStarted(String arg0, View arg1) { +//// // TODO Auto-generated method stub +//// } +//// +//// @Override +//// public void onLoadingFailed(String arg0, View arg1, FailReason arg2) { +//// // TODO Auto-generated method stub +//// +//// } +//// +//// @Override +//// public void onLoadingComplete(String arg0, View arg1, Bitmap arg2) { +//// // TODO Auto-generated method stub +//// //Drawable drawable= context.getResources().getDrawable(R.drawable.attachment_icon); +//// BitmapDrawable drawable= new BitmapDrawable(context.getResources(), arg2); +//// /// 这一步必须要做,否则不会显示. +//// drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); +//// holder.contentTv.setCompoundDrawables(drawable,null,null,null); +//// } +//// +//// @Override +//// public void onLoadingCancelled(String arg0, View arg1) { +//// // TODO Auto-generated method stub +//// +//// } +//// }); +// +// +// +// +// String fileName = ""; +// if (TextUtils.isEmpty(userData)) { +// holder.contentTv.setText(fileBody.getFileName()); +// } else { +// fileName = userData.substring(userData.indexOf("fileName=") +// + "fileName=".length(), userData.length()); +// holder.contentTv.setText(fileName); +// } +// +// if ("mp4".equals(FileUtils.getFileExt(fileName))) { +// holder.contentTv.setVisibility(View.GONE); +// holder.contentTv.setTag(null); +// holder.contentTv.setOnClickListener(null); +// holder.fl.setVisibility(View.VISIBLE); +// +// holder.ivVideoMp4.setVisibility(View.VISIBLE); +// holder.buPlayVideo.setOnClickListener(onClickListener); +// holder.buPlayVideo.setTag(holderTag); +// Bitmap createVideoThumbnail = FileUtils +// .createVideoThumbnail(fileBody.getLocalUrl()); +// if (createVideoThumbnail != null) { +// holder.ivVideoMp4.setImageBitmap(createVideoThumbnail); +// +// } +// } else { +// holder.contentTv.setVisibility(View.VISIBLE); +// holder.ivVideoMp4.setVisibility(View.GONE); +// holder.fl.setVisibility(View.GONE); +// holder.buPlayVideo.setTag(null); +// holder.buPlayVideo.setOnClickListener(null); +// holder.contentTv.setTag(holderTag); +// holder.contentTv.setOnClickListener(onClickListener); +// } +// getMsgStateResId(position, holder, detail, onClickListener); +// +// } +// } + + @Override + public int getChatViewType() { + + return ChattingRowType.FILE_ROW_TRANSMIT.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/IChattingRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/IChattingRow.java new file mode 100644 index 0000000..7e052b1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/IChattingRow.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + + +/** + *

Title: ChattingRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-16 + * @version 1.0 + */ +public interface IChattingRow { + + /** + * Get a View that displays the data at the specified position in the data set + * @param convertView + * @return + */ + View buildChatView(LayoutInflater inflater, View convertView); + + /** + * + * @param context + * @param detail + */ +// void buildChattingBaseData(Context context, BaseHolder baseHolder, ECMessage detail, int position); + +// void buildChattingBaseData(Context context, BaseHolder baseHolder, ECMessage detail, int position, boolean isFriend); + + /** + * @return + */ + int getChatViewType(); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageRxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageRxRow.java new file mode 100644 index 0000000..efd5c81 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageRxRow.java @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.ImageRowViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + + +/** + *

Title: ImageRxRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class ImageRxRow extends BaseChattingRow { + + public ImageRxRow(int type){ + super(type); + } + + + @Override + public View buildChatView(LayoutInflater inflater , View convertView) { + + //we have a don't have a converView so we'll have to create a new one + if (convertView == null) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_from_picture); + + //use the view holder pattern to save of already looked up subviews + ImageRowViewHolder holder = new ImageRowViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, true)); + + } + //actually setup the view + return convertView; + } + +// @Override +// public void buildChattingData(Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// +// final ImageRowViewHolder holder = (ImageRowViewHolder) baseHolder; +// String userData = detail.getUserData(); +// LogUtil.i("ImageRxRow userData = "+userData); +// ImgInfo imgInfo3213 = ImgInfoSqlManager.getInstance().getImgInfo(detail.getMsgId()); +// LogUtil.i("ImageRxRow imgInfo3213.getBigImgPath(); = "+imgInfo3213.getBigImgPath()); +// //正常图片:outWidth://120,outHeight://90,THUMBNAIL://1585702024835|1603,PICGIF://false +// //异常:1,2,2,0 +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, ViewHolderTag.TagType.TAG_VIEW_PICTURE ,position); +// View.OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment.getChattingAdapter().getOnClickListener(); +// holder.chattingContentIv.setTag(holderTag); +// holder.chattingContentIv.setOnClickListener(onClickListener); +// holder.chattingContentIv.setImageBitmap(null); +// if(TextUtils.isEmpty(userData)) { +// return ; +// } +// int start = userData.indexOf("THUMBNAIL://"); +// int gif = userData.indexOf(",PICGIF://"); +// boolean isGif = userData.contains("PICGIF://true"); +// if(start != -1) { +// String thumbnail; +// if(gif == -1) { +// thumbnail = userData.substring(start); +// } else { +// thumbnail = userData.substring(start , gif); +// } +// LogUtils.i("ImageRxRow thumbnail = "+thumbnail); +// Bitmap thumbBitmap = ImgInfoSqlManager.getInstance().getThumbBitmap(thumbnail, 2); +// LogUtils.i("ImageRxRow detail.getMsgId() = "+detail.getMsgId()); +// +// final ImgInfo imgInfo = ImgInfoSqlManager.getInstance().getImgInfo(detail.getMsgId()); +// DisplayImageOptions.Builder optionsBuilder = DemoUtils.getChatDisplayImageOptionsBuilder(); +// optionsBuilder.showImageOnLoading(new BitmapDrawable(thumbBitmap)); +// try { +// if(imgInfo != null && !TextUtils.isEmpty(imgInfo.getBigImgPath())) { +// +// if(imgInfo.getBigImgPath().startsWith("http:")) { +// ImageLoader.getInstance().displayImage(imgInfo.getBigImgPath(), holder.chattingContentIv, optionsBuilder.build() ,new SimpleImageLoadingListener(){ +// @Override +// public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { +// super.onLoadingComplete(imageUri, view, loadedImage); +// if(imageUri.startsWith("http:")) { +// File imgCacheFile = DiskCacheUtils.findInCache(imageUri, ImageLoader.getInstance().getDiskCache()); +// if(imgCacheFile != null) { +// imgInfo.setBigImgPath(imgCacheFile.getAbsolutePath().substring(imgCacheFile.getAbsolutePath().lastIndexOf("/"))); +// ImgInfoSqlManager.getInstance().updateImageInfo(imgInfo); +// } +// } +// } +// }); +// } else { +// ImageLoader.getInstance().displayImage("file://" + FileAccessor.getImagePathName() + "/"+ imgInfo.getBigImgPath(), holder.chattingContentIv, optionsBuilder.build()); +// } +// } +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// } +// +// if(isGif) { +// boolean showGif = detail.getMsgStatus() == ECMessage.MessageStatus.SUCCESS || detail.getMsgStatus() == ECMessage.MessageStatus.RECEIVE; +// if(holder.mGifIcon != null) { +// holder.mGifIcon.setVisibility(!showGif ? View.GONE : View.VISIBLE); +// } +// }else { +// holder.mGifIcon.setVisibility(View.GONE); +// } +// //2020.4.1出现图片缩略图不显示的情况 +// int startWidth = userData.indexOf("outWidth://"); +// int startHeight = userData.indexOf(",outHeight://"); +// FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) holder.chattingContentIv.getLayoutParams(); +// if ("1,2,2,0".equals(detail.getUserData())){ +// LogUtils.i("startWidth = "+startWidth); +// LogUtils.i("startHeight = "+startHeight); +// LogUtils.i("start = "+start); +// } +// +// if(startWidth != -1 && startHeight != -1 && start != -1) { +// int imageMinWidth = ResourceHelper.fromDPToPix(context, isGif ? 200:100); +// int width = DemoUtils.getInt(userData.substring(startWidth + "outWidth://".length(), startHeight) , imageMinWidth); +// int height = DemoUtils.getInt(userData.substring(startHeight + ",outHeight://".length(), start - 1) , imageMinWidth); +// holder.chattingContentIv.setMinimumWidth(imageMinWidth); +// params.width = imageMinWidth; +// int _height = height * imageMinWidth /width; +// if(_height > ResourceHelper.fromDPToPix(context , 230)) { +// _height = ResourceHelper.fromDPToPix(context , 230); +// holder.chattingContentIv.setScaleType(ImageView.ScaleType.CENTER_CROP); +// } +// if(width != 0) { +// holder.chattingContentIv.setMinimumHeight(_height); +// params.height = _height; +// } else { +// holder.chattingContentIv.setMinimumHeight(imageMinWidth); +// params.height = imageMinWidth; +// } +// holder.chattingContentIv.setLayoutParams(params); +// +// }else { +// holder.chattingContentIv.setBackgroundResource(R.drawable.default_news_iv); +// } +// //} +// } + + @Override + public int getChatViewType() { + + return ChattingRowType.IMAGE_ROW_RECEIVED.ordinal(); + } + + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageTxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageTxRow.java new file mode 100644 index 0000000..0a55c9e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImageTxRow.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.ImageRowViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + + +/** + *

Title: ImageTxRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class ImageTxRow extends BaseChattingRow { + + public ImageTxRow(int type){ + super(type); + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_to_picture); + + //use the view holder pattern to save of already looked up subviews + ImageRowViewHolder holder = new ImageRowViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, false)); + + } + return convertView; + } + +// @Override +// public void buildChattingData(Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// ImageRowViewHolder holder = (ImageRowViewHolder) baseHolder; +// ECFileMessageBody body = (ECFileMessageBody) detail.getBody(); +// String userData = detail.getUserData(); +// if(TextUtils.isEmpty(userData)) { +// return ; +// } +// int start = userData.indexOf("THUMBNAIL://"); +// int gif = userData.indexOf(",PICGIF://"); +// boolean isGif = userData.contains("PICGIF://true");; +// if(start != -1) { +// String thumbnail; +// if(gif == -1) { +// thumbnail = userData.substring(start); +// } else { +// thumbnail = userData.substring(start , gif); +// } +// LogUtils.i("ImageTxRow detail.getMsgId() = "+detail.getMsgId()); +// ImgInfo imgInfo = ImgInfoSqlManager.getInstance().getImgInfo(detail.getMsgId()); +// Bitmap thumbBitmap = ImgInfoSqlManager.getInstance().getThumbBitmap(thumbnail, 2); +// if(imgInfo != null && !TextUtils.isEmpty(imgInfo.getBigImgPath())) { +// if(!isGif) { +// isGif = imgInfo.getBigImgPath().endsWith(".gif"); +// } +// String uri = "file://" + FileAccessor.getImagePathName() + "/" + imgInfo.getBigImgPath(); +// DisplayImageOptions.Builder optionsBuilder = DemoUtils.getChatDisplayImageOptionsBuilder(); +// optionsBuilder.showImageOnLoading(new BitmapDrawable(thumbBitmap)); +// ImageLoader.getInstance().displayImage(uri, holder.chattingContentIv, /*DemoUtils.getChatDisplayImageOptions()*/optionsBuilder.build()); +// } else { +// holder.chattingContentIv.setImageBitmap(thumbBitmap); +// } +// } else { +// holder.chattingContentIv.setImageBitmap(null); +// } +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, ViewHolderTag.TagType.TAG_VIEW_PICTURE ,position); +// OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment.getChattingAdapter().getOnClickListener(); +// holder.chattingContentIv.setTag(holderTag); +// holder.chattingContentIv.setOnClickListener(onClickListener); +// getMsgStateResId(position, holder, detail, onClickListener); +// if(isGif) { +// boolean showGif = detail.getMsgStatus() == ECMessage.MessageStatus.SUCCESS || detail.getMsgStatus() == ECMessage.MessageStatus.RECEIVE; +// if(holder.mGifIcon != null) { +// holder.mGifIcon.setVisibility(!showGif? View.GONE : View.VISIBLE); +// } +// } else { +// holder.mGifIcon.setVisibility(View.GONE); +// }/*else {*/ +// int startWidth = userData.indexOf("outWidth://"); +// int startHeight = userData.indexOf(",outHeight://"); +// FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) holder.chattingContentIv.getLayoutParams(); +// if(startWidth != -1 && startHeight != -1 && start != -1) { +// int imageMinWidth = /*DemoUtils.getImageMinWidth(context)*/ ResourceHelper.fromDPToPix(context, isGif ? 200 : 100); +// int width = DemoUtils.getInt(userData.substring(startWidth + "outWidth://".length(), startHeight), imageMinWidth); +// int height = DemoUtils.getInt(userData.substring(startHeight + ",outHeight://".length(), start - 1) , imageMinWidth); +// holder.chattingContentIv.setMinimumWidth(imageMinWidth); +// params.width = imageMinWidth; +// int _height = height * imageMinWidth /width; +// if(_height > ResourceHelper.fromDPToPix(context , 230)) { +// _height = ResourceHelper.fromDPToPix(context , 230); +// holder.chattingContentIv.setScaleType(ImageView.ScaleType.CENTER_CROP); +// } +// if(width != 0) { +// holder.chattingContentIv.setMinimumHeight(_height); +// params.height = _height; +// } else { +// holder.chattingContentIv.setMinimumHeight(imageMinWidth); +// params.height = imageMinWidth; +// } +// holder.chattingContentIv.setLayoutParams(params); +// } +// //} +// } + + @Override + public int getChatViewType() { + return ChattingRowType.IMAGE_ROW_TRANSMIT.ordinal(); + } + + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImgInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImgInfo.java new file mode 100644 index 0000000..789407e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ImgInfo.java @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.content.ContentValues; +import android.database.Cursor; +import android.text.TextUtils; + +import cn.shangyu.gdxzExpert.ecdemo.storage.ImgInfoSqlManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; + + +/** + * 图片消息 + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-4 + * @version 4.0 + */ +public class ImgInfo { + private static int VALUES_ENPTY = -1; + + private long id = -1; + private int msgSvrId = -1; + private int offset = -1; + private int totalLen = -1; + private String bigImgPath; + private String thumbImgPath; + private int createtime = -1; + private String msglocalid; + private int status = -1; + private int nettimes = -1; + public boolean isGif = false; + + public void setCursor(Cursor cursor) { + this.id = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.ID)); + this.msgSvrId = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.MSGSVR_ID)); + this.offset = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.OFFSET)); + this.totalLen = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.TOTALLEN)); + this.bigImgPath = cursor.getString(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH)); + this.thumbImgPath = cursor.getString(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.THUMBIMG_PATH)); + this.createtime = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.CREATE_TIME)); + this.msglocalid = cursor.getString(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.MSG_LOCAL_ID)); + this.status = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.STATUS)); + this.nettimes = cursor.getInt(cursor.getColumnIndex(ImgInfoSqlManager.ImgInfoColumn.NET_TIMES)); + } + + /** + * @return the id + */ + public long getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(long id) { + this.id = id; + } + /** + * @return the msgSvrId + */ + public int getMsgSvrId() { + return msgSvrId; + } + /** + * @param msgSvrId the msgSvrId to set + */ + public void setMsgSvrId(int msgSvrId) { + this.msgSvrId = msgSvrId; + } + /** + * @return the offset + */ + public int getOffset() { + return offset; + } + /** + * @param offset the offset to set + */ + public void setOffset(int offset) { + this.offset = offset; + } + /** + * @return the totalLen + */ + public int getTotalLen() { + return totalLen; + } + /** + * @param totalLen the totalLen to set + */ + public void setTotalLen(int totalLen) { + this.totalLen = totalLen; + } + /** + * @return the bigImgPath + */ + public String getBigImgPath() { + return bigImgPath; + } + /** + * @param bigImgPath the bigImgPath to set + */ + public void setBigImgPath(String bigImgPath) { + this.bigImgPath = bigImgPath; + } + /** + * @return the thumbImgPath + */ + public String getThumbImgPath() { + return thumbImgPath; + } + /** + * @param thumbImgPath the thumbImgPath to set + */ + public void setThumbImgPath(String thumbImgPath) { + this.thumbImgPath = thumbImgPath; + } + /** + * @return the createtime + */ + public int getCreatetime() { + return createtime; + } + /** + * @param createtime the createtime to set + */ + public void setCreatetime(int createtime) { + this.createtime = createtime; + } + /** + * @return the msglocalid + */ + public String getMsglocalid() { + return msglocalid; + } + /** + * @param msglocalid the msglocalid to set + */ + public void setMsglocalid(String msglocalid) { + this.msglocalid = msglocalid; + } + /** + * @return the status + */ + public int getStatus() { + return status; + } + /** + * @param status the status to set + */ + public void setStatus(int status) { + this.status = status; + } + /** + * @return the nettimes + */ + public int getNettimes() { + return nettimes; + } + /** + * @param nettimes the nettimes to set + */ + public void setNettimes(int nettimes) { + this.nettimes = nettimes; + } + + public ContentValues buildContentValues() { + + ContentValues values = new ContentValues(); + if(id != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.ID, id); + } + if(msgSvrId != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.MSGSVR_ID, msgSvrId); + } + if(offset != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.OFFSET, offset); + } + if(totalLen != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.TOTALLEN, totalLen); + } +// if(!TextUtils.isEmpty(bigImgPath)) { + LogUtil.i("bigImgPath == "+bigImgPath); + LogUtil.i("thumbImgPath == "+thumbImgPath); + String sbigImgPath = ""; + /** + * 3.4.8版本修改后 + * */ +// if (!StringUtil.isEmpty(bigImgPath)){ +// sbigImgPath = bigImgPath.toLowerCase(); +// values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); +// } + /** + * 3.4.8版本 + * */ + + /********************/ + if(!TextUtils.isEmpty(thumbImgPath)) { + values.put(ImgInfoSqlManager.ImgInfoColumn.THUMBIMG_PATH, thumbImgPath); + } + if(createtime != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.CREATE_TIME, createtime); + } + if(!TextUtils.isEmpty(msglocalid)) { + values.put(ImgInfoSqlManager.ImgInfoColumn.MSG_LOCAL_ID, msglocalid); + } + if(status != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.STATUS, status); + } + if(nettimes != VALUES_ENPTY) { + values.put(ImgInfoSqlManager.ImgInfoColumn.NET_TIMES, nettimes); + } + if (!StringUtil.isEmpty(bigImgPath)){ + sbigImgPath = bigImgPath.toLowerCase(); + } + if(!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains(".jpg")) {//判断接收到图片但为正常显示, + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + }else if (!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains(".png")){ + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + }else if (!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains(".gif")){ + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + }else if (!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains(".jpeg")){ + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + }else if (!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains(".tga")){ + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + }else if (!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains(".bmp")){ + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + }else if (!TextUtils.isEmpty(bigImgPath)&&sbigImgPath.contains("dcsvip1imapp.cloopen.net:8888")){ + values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); + } + +// ContentValues values = new ContentValues(); +// if(id != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.ID, id); +// } +// if(msgSvrId != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.MSGSVR_ID, msgSvrId); +// } +// if(offset != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.OFFSET, offset); +// } +// if(totalLen != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.TOTALLEN, totalLen); +// } +// if(!TextUtils.isEmpty(bigImgPath)) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.BIG_IMGPATH, bigImgPath); +// } +// if(!TextUtils.isEmpty(thumbImgPath)) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.THUMBIMG_PATH, thumbImgPath); +// } +// if(createtime != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.CREATE_TIME, createtime); +// } +// if(!TextUtils.isEmpty(msglocalid)) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.MSG_LOCAL_ID, msglocalid); +// } +// if(status != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.STATUS, status); +// } +// if(nettimes != VALUES_ENPTY) { +// values.put(ImgInfoSqlManager.ImgInfoColumn.NET_TIMES, nettimes); +// } + + + + + return values; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/PatientModel.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/PatientModel.java new file mode 100644 index 0000000..52e8824 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/PatientModel.java @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.content.ContentValues; +import android.database.Cursor; +import android.text.TextUtils; + +import cn.shangyu.gdxzExpert.ecdemo.storage.AbstractSQLManager; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-13 + * @version 4.0 + */ +public class PatientModel { + + private String uuid; + private String realName; + private String nickName; + private String photo; + private int sex; + private int nation; + private int provId; + private int cityId; + private int countyId; + private String birthDate; + private String type; + private boolean isSelect; + + + +public PatientModel(String uuid) { + this.uuid = uuid; + } + + public PatientModel() { + // TODO Auto-generated constructor stub + } + + public boolean isSelect() { + return isSelect; + } + + public void setSelect(boolean select) { + isSelect = select; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + private String mobile; + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getRealName() { + return realName; + } + + public void setRealName(String realName) { + this.realName = realName; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getPhoto() { + return photo; + } + + public void setPhoto(String photo) { + this.photo = photo; + } + + public String getBirthDate() { + return birthDate; + } + + public void setBirthDate(String birthDate) { + this.birthDate = birthDate; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getSex() { + return sex; + } + + public void setSex(int sex) { + this.sex = sex; + } + + public int getNation() { + return nation; + } + + public void setNation(int nation) { + this.nation = nation; + } + + public int getProvId() { + return provId; + } + + public void setProvId(int provId) { + this.provId = provId; + } + + public int getCityId() { + return cityId; + } + + public void setCityId(int cityId) { + this.cityId = cityId; + } + + public int getCountyId() { + return countyId; + } + + public void setCountyId(int countyId) { + this.countyId = countyId; + } + + public void setCursor(Cursor cursor) { + this.uuid = cursor.getString(0); + this.realName = cursor.getString(1); + this.mobile = cursor.getString(2); + this.photo = cursor.getString(3); + this.sex = cursor.getInt(4); + this.nation = cursor.getInt(5); + this.provId = cursor.getInt(6); + this.cityId = cursor.getInt(7); + this.countyId = cursor.getInt(8); + this.birthDate = cursor.getString(9); + this.type = cursor.getString(10); +// if(this.username == null && !this.sessionId.toUpperCase().startsWith("G")) { +// ECContacts contacts = ContactSqlManager.getCacheContact(sessionId); +// if(contacts != null) { +// username = contacts.getNickname(); +// } else { +// username = sessionId; +// } +// } + if(TextUtils.isEmpty(this.realName)) { + this.realName = mobile; + } + } + + public ContentValues buildContentValues() { + ContentValues values = new ContentValues(); + values.put(AbstractSQLManager.PatientColumn.UUID, this.uuid); + values.put(AbstractSQLManager.PatientColumn.REALNAME, this.realName); + values.put(AbstractSQLManager.PatientColumn.MOBILE, this.mobile ); + values.put(AbstractSQLManager.PatientColumn.PHOTO, this.photo ); + values.put(AbstractSQLManager.PatientColumn.SEX, this.sex ); + values.put(AbstractSQLManager.PatientColumn.NATION, this.nation ); + values.put(AbstractSQLManager.PatientColumn.PROVID, this.provId ); + values.put(AbstractSQLManager.PatientColumn.CITYID, this.cityId ); + values.put(AbstractSQLManager.PatientColumn.COUNTYID, this.countyId ); + values.put(AbstractSQLManager.PatientColumn.BIRTHDATE, this.birthDate ); + values.put(AbstractSQLManager.PatientColumn.TYPE, this.type ); + return values; + } + + @Override + public String toString() { + return "PatientModel [uuid=" + uuid + ", realName=" + realName + + ", mobile=" + mobile + ", photo=" + photo + ", sex=" + sex + + ", nation=" + nation + ", provId=" + provId + ", cityId=" + + cityId + ", countyId=" + countyId + ", birthDate=" + + birthDate + ", type=" + type + "]"; + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextRxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextRxRow.java new file mode 100644 index 0000000..3ea1bba --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextRxRow.java @@ -0,0 +1,71 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.RichTextViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + +public class RichTextRxRow extends BaseChattingRow { + + public RichTextRxRow(int type) { + super(type); + // TODO Auto-generated constructor stub + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + + if (convertView == null ) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_rich_text_from); + RichTextViewHolder holder = new RichTextViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, true)); + } + return convertView; + + } + + @Override + public int getChatViewType() { + // TODO Auto-generated method stub + return ChattingRowType.RICH_TEXT_ROW_RECEIVED.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +// @Override +// protected void buildChattingData(Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// RichTextViewHolder holder = (RichTextViewHolder) baseHolder; +// ECMessage message = detail; +// if(message != null) { +// +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, +// ViewHolderTag.TagType.TAG_IM_RICH_TEXT, position); +// +// ECPreviewMessageBody textBody = (ECPreviewMessageBody) message.getBody(); +// String localFilePath="file://"+ textBody.getLocalUrl(); +// +// if(!TextUtils.isEmpty(textBody.getLocalUrl())){ +// ImageLoader.getInstance().displayImage("file://"+textBody.getLocalUrl(),holder.imageView); +// } +// if(TextUtils.isEmpty(textBody.getTitle())){ +// holder.descTextView.setText("标题"); +// }else{ +// holder.descTextView.setText(textBody.getTitle()); +// } +// holder.descTextView.setTextColor(Color.BLACK); +// holder.tvUrl.setText(textBody.getUrl()); +// View.OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment.getChattingAdapter().getOnClickListener(); +// holder.relativeLayout.setTag(holderTag); +// holder.relativeLayout.setOnClickListener(onClickListener); +// } +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextTxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextTxRow.java new file mode 100644 index 0000000..3199109 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/RichTextTxRow.java @@ -0,0 +1,67 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.RichTextViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + +public class RichTextTxRow extends BaseChattingRow { + + public RichTextTxRow(int type) { + super(type); + // TODO Auto-generated constructor stub + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + if (convertView == null ) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_rich_text_to); + RichTextViewHolder holder = new RichTextViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, true)); + } + return convertView; + } + + @Override + public int getChatViewType() { + // TODO Auto-generated method stub + return ChattingRowType.RICH_TEXT_ROW_TO.ordinal(); + } +// +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +// @Override +// protected void buildChattingData(Context context, BaseHolder baseHolder, +// ECMessage detail, int position) { +// +// final RichTextViewHolder holder = (RichTextViewHolder) baseHolder; +// ECMessage message = detail; +// if(message != null) { +// ViewHolderTag holderTag = ViewHolderTag.createTag(detail, +// ViewHolderTag.TagType.TAG_IM_RICH_TEXT, position); +// ECPreviewMessageBody textBody = (ECPreviewMessageBody) message.getBody(); +// holder.descTextView.setText(textBody.getTitle()); +// holder.descTextView.setTextColor(Color.BLACK); +// holder.tvUrl.setText(textBody.getUrl()); +// View.OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment.getChattingAdapter().getOnClickListener(); +// getMsgStateResId(position, holder, detail, onClickListener); +// if(!TextUtils.isEmpty(textBody.getLocalUrl())){ +// ImageLoader.getInstance().displayImage("file://"+textBody.getLocalUrl(),holder.imageView); +// } +// +// +// holder.relativeLayout.setTag(holderTag); +// holder.relativeLayout.setOnClickListener(onClickListener); +// } +// +// +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ViewHolderTag.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ViewHolderTag.java new file mode 100644 index 0000000..43151f3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/ViewHolderTag.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class ViewHolderTag { + + public int position; +// public ECMessage detail; + public int type; + public int rowType; + public boolean receive; + public boolean voipcall; + + +// public static ViewHolderTag createTag(ECMessage detail , int type , int position) { +// ViewHolderTag holderTag = new ViewHolderTag(); +// holderTag.position = position; +// holderTag.type = type; +// holderTag.detail = detail; +// return holderTag; +// } + +// public static ViewHolderTag createTag(ECMessage detail , int type , int position , int rowType , boolean receive) { +// ViewHolderTag holderTag = new ViewHolderTag(); +// holderTag.position = position; +// holderTag.type = type; +// holderTag.rowType = rowType; +// holderTag.detail = detail; +// holderTag.receive = receive; +// return holderTag; +// } + + /** + * + * @param detail + * @param position + * @return + */ +// public static ViewHolderTag createTag(ECMessage detail , int position) { +// ViewHolderTag holderTag = new ViewHolderTag(); +// holderTag.position = position; +// holderTag.detail = detail; +// holderTag.type = TagType.TAG_PREVIEW; +// return holderTag; +// } + +// public static ViewHolderTag createTag(ECMessage detail , int type , int position , boolean voipcall) { +// ViewHolderTag holderTag = new ViewHolderTag(); +// holderTag.position = position; +// holderTag.detail = detail; +// holderTag.type = type; +// holderTag.voipcall = voipcall; +// return holderTag; +// } + + public static class TagType{ + public static final int TAG_PREVIEW = 0; + public static final int TAG_VIEW_FILE = 1; + public static final int TAG_VOICE = 2; + public static final int TAG_VIEW_PICTURE = 3; + public static final int TAG_RESEND_MSG = 4; + public static final int TAG_VIEW_CONFERENCE = 5; + public static final int TAG_VOIP_CALL = 6; + //分享网址修改 + public static final int TAG_IM_LOCATION = 7; + public static final int TAG_IM_RICH_TEXT = 8; + public static final int TAG_IM_TEXT = 9; + public static final int TAG_IM_REDPACKET = 10; + public static final int TAG_IM_REDPACKET_ACK = 11; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceRxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceRxRow.java new file mode 100644 index 0000000..f4b36d2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceRxRow.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.VoiceRowViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + +/** + *

Title: VoiceRxRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class VoiceRxRow extends BaseChattingRow { + + public VoiceRxRow(int type) { + super(type); + } + + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_from_voice); + + //use the view holder pattern to save of already looked up subviews + VoiceRowViewHolder holder = new VoiceRowViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, true)); + } + return convertView; + } + +// @Override +// public void buildChattingData(Context context, BaseHolder baseHolder, +// final ECMessage detail, int position) { +// +// VoiceRowViewHolder holder = (VoiceRowViewHolder) baseHolder; +// if(detail != null) { +// VoiceRowViewHolder.initVoiceRow(holder, detail, position, (ChattingActivity) context, true); +// holder.voiceAnim.setVoiceFrom(true); +// } +// } + + + @Override + public int getChatViewType() { + + return ChattingRowType.VOICE_ROW_RECEIVED.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceTxRow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceTxRow.java new file mode 100644 index 0000000..37c2932 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/model/VoiceTxRow.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model; + +import android.view.LayoutInflater; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.holder.VoiceRowViewHolder; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view.ChattingItemContainer; + +/** + *

Title: VoiceTxRow.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan + * @date 2014-4-17 + * @version 1.0 + */ +public class VoiceTxRow extends BaseChattingRow { + + public VoiceTxRow(int type) { + super(type); + } + + /* (non-Javadoc) + * @see com.hisun.cas.model.im.ChattingRow#buildChatView(android.view.LayoutInflater, android.view.View) + */ + @Override + public View buildChatView(LayoutInflater inflater, View convertView) { + //we have a don't have a converView so we'll have to create a new one + if (convertView == null) { + convertView = new ChattingItemContainer(inflater, R.layout.chatting_item_to_voice); + + //use the view holder pattern to save of already looked up subviews + VoiceRowViewHolder holder = new VoiceRowViewHolder(mRowType); + convertView.setTag(holder.initBaseHolder(convertView, false)); + } + return convertView; + } + +// @Override +// public void buildChattingData(Context context, BaseHolder baseHolder, +// final ECMessage detail, int position) { +// +// final VoiceRowViewHolder holder = (VoiceRowViewHolder) baseHolder; +// holder.voiceAnim.setVoiceFrom(false); +// if(detail != null) { +// if(detail.getMsgStatus() == ECMessage.MessageStatus.SENDING) { +// holder.voiceSending.setVisibility(View.VISIBLE); +// } else { +// holder.voiceSending.setVisibility(View.GONE); +// } +// +// File file = new File(((ECFileMessageBody)detail.getBody()).getLocalUrl()); +// long length = file.length(); +// +// VoiceRowViewHolder.initVoiceRow(holder, detail, position, (ChattingActivity)context, false); +// OnClickListener onClickListener = ((ChattingActivity) context).mChattingFragment.getChattingAdapter().getOnClickListener(); +// getMsgStateResId(position, holder, detail, onClickListener); +// } +// } + + + @Override + public int getChatViewType() { + // return type + return ChattingRowType.VOICE_ROW_TRANSMIT.ordinal(); + } + +// @Override +// public boolean onCreateRowContextMenu(ContextMenu contextMenu, +// View targetView, ECMessage detail) { +// // TODO Auto-generated method stub +// return false; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppGrid.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppGrid.java new file mode 100644 index 0000000..340688e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppGrid.java @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.Capability; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DensityUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class AppGrid extends GridView implements + AdapterView.OnItemClickListener { + + /** + * + */ + private Context mContext; + + private List mCapabilities; + + /** + * + */ + private AppGirdApapter mGirdApapter; + + /** + * + */ + private OnCapabilityItemClickListener mOnCapabilityItemClickListener; + + /** + * The current panel tag No. + */ + private int mPanelIndex; + + /** + * The total count of Panel members + */ + private int mItems; + + /** + * The count of single Panel members + */ + private int mPageItems; + + /** + * The count of Panel index. + */ + private int mPanelPageCount; + + /** + * ccp capability items that reserve. + */ + private int mReserveItems; + + + public AppGrid(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + } + + public AppGrid(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + } + + public AppGrid(Context context) { + super(context); + mContext = context; + } + + /** + * + * @param position + * @param items + * @param pageItems + * @param pageCount + * @param column + * @param reserve + */ + public void setAppPanelBase (int position , int items , int pageItems , int pageCount , int column , int reserve) { + mPanelIndex = position; + mItems = items; + mPageItems = pageItems; + mPanelPageCount = pageCount; + mReserveItems = reserve; + setNumColumns(column); + } + + /** + * + * @param capabilities + */ + public void setAppPanelItems(List capabilities) { + + mGirdApapter = new AppGirdApapter(getContext(), capabilities); + setBackgroundResource(0); + setAdapter(mGirdApapter); + setOnItemClickListener(this); + + int left = DensityUtil.getMetricsDensity(mContext, 10.0F); + int top = DensityUtil.getMetricsDensity(mContext, 6.0F); + setPadding(left, top, left, 0); + } + + public int getCount() { + return this.mGirdApapter.getCount() - 1; + } + + /** + * + * @param verticalSpacing + */ + public final void setPanelVerticalSpacing(int verticalSpacing) { + if(verticalSpacing <= 0) { + return; + } + int padding = DensityUtil.getMetricsDensity(mContext, 10.0F); + setPadding(padding, verticalSpacing, padding, 0); + setVerticalSpacing(verticalSpacing / 2); + } + + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + + if(mGirdApapter != null && position <= mGirdApapter.getCount() - 1){ + Capability capability = (Capability) mGirdApapter.getItem(position); + if(mOnCapabilityItemClickListener != null) { + mOnCapabilityItemClickListener.onPanleItemClick(position, capability.getId() , capability.getCapabilityName()); + } + } + } + + /** + * Register a callback to be invoked when an item in this {@link AppGrid} View has + * been clicked. + * + * @param listener The callback that will be invoked. + */ + public void setOnCapabilityItemClickListener(OnCapabilityItemClickListener listener) { + mOnCapabilityItemClickListener = listener; + } + + /** + * Interface definition for a callback to be invoked when an item in this + * AdapterView has been clicked. + */ + public interface OnCapabilityItemClickListener { + + /** + * Callback method to be invoked when an item in this EmojiGird View has + * been clicked. + * + * @param index + * @param capabilityName + */ + void onPanleItemClick(int index, int capabilityId, String capabilityName); + + } + + private class AppGirdApapter extends BaseAdapter { + + private List mLists; + private int width; + private int height; + + private LayoutInflater mLayoutInflater; + + public AppGirdApapter(Context context , List lists) { + + mLists = lists; + width = DensityUtil.getMetricsDensity(context, 64.0F); + height = DensityUtil.getMetricsDensity(context, 53.299999F); + mLayoutInflater = LayoutInflater.from(context); + } + + @Override + public int getCount() { + + return mItems; + } + + @Override + public Object getItem(int position) { + + return mLists.get(position); + } + + + @Override + public long getItemId(int position) { + + return 0L; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + View view = null; + ViewHolder mViewHolder = null; + if(convertView == null || convertView.getTag() == null) { + if(CommonUtil.BigModule()) + { + view = mLayoutInflater.inflate(R.layout.app_grid_item_big, parent, false); + } + else + { + view = mLayoutInflater.inflate(R.layout.app_grid_item, parent, false); + } + + + mViewHolder = new ViewHolder(); + mViewHolder.mCapabilityName = (TextView) view.findViewById(R.id.app_grid_item_name); + mViewHolder.mCapabilityIcon = (ImageView) view.findViewById(R.id.app_grid_item_icon); + mViewHolder.mCapabilityMask = (ImageView) view.findViewById(R.id.app_grid_item_icon_mask); + view.setTag(mViewHolder); + } else { + view = convertView; + mViewHolder = (ViewHolder) view.getTag(); + } + + Capability item = (Capability) getItem(position); + if(item != null) { + + mViewHolder.mCapabilityName.setText(item.getCapabilityName()); + + if(item.getIcon() > 0) { + mViewHolder.mCapabilityIcon.setImageResource(item.getIcon()); + } + mViewHolder.mCapabilityMask.setVisibility(View.VISIBLE); + } + + return view; + } + + class ViewHolder { + TextView mCapabilityName; + ImageView mCapabilityIcon; + ImageView mCapabilityMask; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanel.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanel.java new file mode 100644 index 0000000..fea8876 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanel.java @@ -0,0 +1,398 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.content.res.Configuration; +import android.util.AttributeSet; +import android.view.Display; +import android.view.View; +import android.view.WindowManager; +import android.widget.LinearLayout; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.base.CCPDotView; +import cn.shangyu.gdxzExpert.ecdemo.common.base.CCPFlipper; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class AppPanel extends LinearLayout implements CCPFlipper.OnFlipperPageListener + , CCPFlipper.OnCCPFlipperMeasureListener{ + + private static int APP_PANEL_HEIGHT_LANDSCAPE = 158; + private static int APP_PANEL_HEIGHT_PORTRAIT = 215; + + /** + * The maximum number of rows of panel + */ + private static int APPPANEL_MAX_ROWS = 2; + + /** + * The min number of rows of panel + */ + private static int APPPANEL_MIN_ROWS = 1; + + /** + * The min number of column of panel + */ + private static int APPPANEL_MIN_COLUMN = 1; + + private Context mContext; + + private WindowManager mWindowManager; + + private OnAppPanelItemClickListener mAppPanelItemClickListener; + + private CCPFlipper mFlipper; + private CCPDotView mDotView; + + private LayoutParams mPanelLayoutParams; + + private List mAppGrid ; + + private int mAppPanelHeight = -1 ; + private int mDisplayWidth = 0; + private int mDisplayHeight = 0; + + /** + * width of {@link AppPanel} {@link AppGrid} + */ + private int mGridWidth; + + /** + * height of {@link AppPanel} {@link AppGrid} + */ + private int mGridHeight; + + private int mCCPCapabilityItems = 7; + + private boolean mAppPanelHeightChange = true; + + AppPanelControl mAppPanelControl; + + + + final AppGrid.OnCapabilityItemClickListener mCapabilityItemClickListener + = new AppGrid.OnCapabilityItemClickListener() { + + @Override + public void onPanleItemClick(int index, int capabilityId , String capabilityName) { + if(mAppPanelItemClickListener == null) { + return; + } + switch (capabilityId) { + case R.string.app_panel_pic: + mAppPanelItemClickListener.OnSelectImageClick(); + break; + case R.string.app_panel_tackpic: + mAppPanelItemClickListener.OnTakingPictureClick(); + + break; + case R.string.app_panel_quickreply: + mAppPanelItemClickListener.OnSelectFileClick(); + break; + case R.string.app_panel_voice: + mAppPanelItemClickListener.OnSelectVoiceClick(); + break; + case R.string.app_panel_video: + mAppPanelItemClickListener.OnSelectVideoClick(); + break; + case R.string.app_panel_outpatient: + mAppPanelItemClickListener.OnOutPatientClick(); + break; + case R.string.app_panel_shopping: + mAppPanelItemClickListener.OnShoppingClick(); + break; + case R.string.app_panel_hospital: + mAppPanelItemClickListener.OnHospitalClick(); + break; + default: + break; + } + } + }; + + + public AppPanel(Context context) { + super(context); + this.mContext = context; + + initAppPanelControl(); + initAppPanel(); + } + + public AppPanel(Context context, AttributeSet attrs) { + super(context, attrs); + this.mContext = context; + + initAppPanelControl(); + initAppPanel(); + } + + /** + * + */ + private void initAppPanelControl() { + mAppPanelControl = new AppPanelControl(); + mCCPCapabilityItems = mAppPanelControl.getCapability().size(); + } + + private void computeCapabilityCount() { + mCCPCapabilityItems = mAppPanelControl.getCapability().size(); + } + + /** + * + */ + private void initAppPanel() { + mPanelLayoutParams = new LayoutParams(LayoutParams.FILL_PARENT , LayoutParams.WRAP_CONTENT); + Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); + if(display.getWidth() < display.getHeight()) { + mDisplayWidth = display.getWidth(); + mDisplayHeight = display.getHeight(); + } else { + mDisplayWidth = display.getHeight(); + mDisplayHeight = display.getWidth(); + + } + View.inflate(getContext(), R.layout.app_panel, this); + mFlipper = (CCPFlipper) findViewById(R.id.app_panel_flipper); + mDotView = (CCPDotView) findViewById(R.id.app_panel_dot); + + try { + + initFlipper(); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public void refreshAppPanel() { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "AppPanel refleshed"); + try { + + int currentIndex = mFlipper.getCurrentIndex(); + initAppGrid(); + mFlipper.slipInto(currentIndex); + mDotView.setSelectedDot(currentIndex); + + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * + * @param l + */ + public void setOnAppPanelItemClickListener(OnAppPanelItemClickListener l){ + mAppPanelItemClickListener = l; + } + + private void initAppGrid() { + if(mGridWidth == 0 || mGridHeight == 0) { + return; + } + + mAppGrid = new ArrayList(); + mFlipper.removeAllViews(); + + int columnWidth = DensityUtil.getMetricsDensity(getContext(), 73.0F); + int rowsHeight = DensityUtil.getMetricsDensity(getContext(), 120.0F); + requestLayout(); + + int column = mGridWidth / columnWidth; + int rows = mGridHeight / rowsHeight; + + if(rows > APPPANEL_MAX_ROWS) { + rows = APPPANEL_MAX_ROWS; + } + + int rowSpace = (mGridHeight - (rowsHeight * rows)) / (rows + 1) ; + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "AppPanel gridWidth " + + mGridWidth + " , gridHeight " + mGridHeight + + " ,rows spacing " + rowSpace); + + if(column == 0) { + column = APPPANEL_MIN_COLUMN; + } + if(rows == 0) { + rows = APPPANEL_MIN_ROWS; + } + + int itemsPerPage = column * rows ; + int pageCount = (int)Math.ceil((1 + mCCPCapabilityItems) / (itemsPerPage + 0.1)); + + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), + "initAppGrid, totalItemCount = " + mCCPCapabilityItems + + ", itemsPerPage = " + itemsPerPage + ", pageCount = " + + pageCount); + + for(int i = 0; i < pageCount ; i ++) { + AppGrid appGrid = (AppGrid) inflate(getContext(), R.layout.app_grid, null); + appGrid.setAppPanelItems(mAppPanelControl.getCapability()); + appGrid.setAppPanelBase(i, mCCPCapabilityItems, itemsPerPage, pageCount, column, mCCPCapabilityItems); + appGrid.setPanelVerticalSpacing(rowSpace); + mFlipper.setInterceptTouchEvent(true); + mFlipper.addView(appGrid , mPanelLayoutParams); + mAppGrid.add(appGrid); + } + + if(mAppGrid != null) { + for(AppGrid capability : mAppGrid) { + capability.setOnCapabilityItemClickListener(mCapabilityItemClickListener); + } + } + + if(mAppGrid.size() <= 0) { + mDotView.setVisibility(View.GONE); + } else { + mDotView.setVisibility(View.VISIBLE); + mDotView.setDotCount(mAppGrid.size()); + int currentIndex = mFlipper.getCurrentIndex(); + mFlipper.slipInto(currentIndex); + mDotView.setSelectedDot(currentIndex); + } + computeCapabilityCount(); + } + + /** + * + */ + private void initFlipper() { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "AppPanel initFlipper"); + mFlipper.removeAllViews(); + mFlipper.setOnFlipperListner(this); + mFlipper.setOnCCPFlipperMeasureListener(this); + + initFlipperRotateMe(); + } + + /** + * Screen rotation change height + */ + public final void initFlipperRotateMe() { + if(mAppPanelHeightChange) { + mAppPanelHeightChange = false; + View panelDisplayView = findViewById(R.id.app_panel_display_view); + LayoutParams layoutParams = (LayoutParams) panelDisplayView.getLayoutParams(); + if(getWindowDisplayMode() != Configuration.ORIENTATION_LANDSCAPE) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "initFlipper, mode portrait :" + APP_PANEL_HEIGHT_PORTRAIT); + + int panelHeight = DensityUtil.getMetricsDensity(getContext(), APP_PANEL_HEIGHT_PORTRAIT); + if(mAppPanelHeight > 0) { + panelHeight = mAppPanelHeight; + } + layoutParams.width = mDisplayWidth; + layoutParams.height = panelHeight; + } else { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "initFlipper, mode landscape :" + APP_PANEL_HEIGHT_LANDSCAPE); + layoutParams.width = mDisplayHeight; + layoutParams.height = DensityUtil.getMetricsDensity(getContext(), APP_PANEL_HEIGHT_LANDSCAPE); + } + panelDisplayView.setLayoutParams(layoutParams); + } + } + + /** + */ + public boolean isPanelVisible() { + + return getVisibility() == View.VISIBLE ; + } + + private int getWindowDisplayMode() { + if(mWindowManager == null ) { + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + } + Display localDisplay = mWindowManager.getDefaultDisplay(); + return localDisplay.getWidth() < localDisplay.getHeight() ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; + } + + /** + * Change the height of the panel + * @param height + */ + public final void setPanelHeight(int height) { + if(mAppPanelHeight == height) { + return; + } + + mAppPanelHeight = height; + mAppPanelHeightChange = true; + } + + @Override + public void onFlipperPage(int startIndex, int finalIndex) { + if(mDotView == null) { + return; + } + if(finalIndex > mDotView.getDotCount()) { + finalIndex = mDotView.getDotCount(); + } + mDotView.setSelectedDot(finalIndex); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if ((newConfig.orientation != Configuration.ORIENTATION_PORTRAIT) + && (newConfig.orientation != Configuration.ORIENTATION_LANDSCAPE)) { + return; + } + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "onConfigChanged:" + newConfig.orientation); + mFlipper.slipInto(0); + } + + + @Override + public void onCCPFlipperMeasure(int widthMeasureSpec, int heightMeasureSpec) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "onMeasure width:" + widthMeasureSpec + " height:" + heightMeasureSpec + " isMeasured:" + mAppPanelHeightChange); + if(widthMeasureSpec == 0 || heightMeasureSpec == 0) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "onMeasure, width or height is 0"); + return; + } + + if(getWindowDisplayMode() == Configuration.ORIENTATION_LANDSCAPE) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "landspace"); + } else { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "portrait"); + } + + mGridWidth = widthMeasureSpec; + mGridHeight = heightMeasureSpec; + refreshAppPanel(); + } + + public interface OnAppPanelItemClickListener { + void OnTakingPictureClick(); + void OnSelectImageClick(); + void OnSelectFileClick(); + void OnSelectVoiceClick(); + void OnSelectVideoClick(); + void OnOutPatientClick(); + void OnShoppingClick(); + void OnHospitalClick(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanelControl.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanelControl.java new file mode 100644 index 0000000..c9dd0b5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/AppPanelControl.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.Capability; + +/** + * 聊天插件功能控制器 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class AppPanelControl { + + private Context mContext; + + private static boolean isShowVoipCall = true; + + public int[] cap = new int[] { R.string.app_panel_pic, + R.string.app_panel_tackpic, R.string.app_panel_quickreply, R.string.app_panel_video, R.string.app_panel_outpatient, + R.string.app_panel_shopping,R.string.app_panel_hospital};// R.string.app_panel_video,患教 + public int[] capVoip = new int[] { R.string.app_panel_pic, + R.string.app_panel_tackpic, R.string.app_panel_file, + R.string.app_panel_voice, R.string.app_panel_video }; + + /** + * + */ + public AppPanelControl() { + mContext = CCPAppManager.getContext(); + } + + public static void setShowVoipCall(boolean isShowVoipCall) { + AppPanelControl.isShowVoipCall = isShowVoipCall; + } + /** + * + * @return + */ + public List getCapability() { + List capabilities = new ArrayList(); + + if (isShowVoipCall && SDKCoreHelper.getInstance().isSupportMedia()) { + for (int i = 0; i < capVoip.length; i++) { + Capability capability = getCapability(capVoip[i]); + capabilities.add(capabilities.size(), capability); + } + + } else { + int length= cap.length-1; + if(cn.shangyu.gdxzExpert.utils.CommonUtil.showHospital()) + { + length=cap.length; + } + for (int i = 0; i < length; i++) { + Capability capability = getCapability(cap[i]); + capabilities.add(capabilities.size(), capability); + } + } + return capabilities; + } + + /** + * @param resid + * @return + */ + private Capability getCapability(int resid) { + Capability capability = null; + switch (resid) { + case R.string.app_panel_pic: + capability = new Capability(getContext().getString( + R.string.app_panel_pic), + R.drawable.ytx_chattingfooter_image_selector);// image_icon + break; + case R.string.app_panel_tackpic: + + capability = new Capability(getContext().getString( + R.string.app_panel_tackpic), + R.drawable.ytx_chattingfooter_takephoto_selector);// photograph_icon + break; + case R.string.app_panel_quickreply: + + capability = new Capability(getContext().getString( + R.string.app_panel_quickreply), + R.drawable.ytx_chattingfooter_file_quick); + break; + case R.string.app_panel_voice: + + capability = new Capability(getContext().getString( + R.string.app_panel_voice), R.drawable.voip_call); + break; + case R.string.app_panel_video: + + capability = new Capability(getContext().getString( + R.string.app_panel_video), R.drawable.patient_teach_call); + break; + case R.string.app_panel_outpatient: + + capability = new Capability(getContext().getString( + R.string.app_panel_outpatient), R.drawable.ytx_chattingfooter_chutingzhen); + break; + case R.string.app_panel_shopping: + + capability = new Capability(getContext().getString( + R.string.app_panel_shopping), R.drawable.ytx_chattingfooter_shopping); + break; + case R.string.app_panel_hospital: + + capability = new Capability(getContext().getString( + R.string.app_panel_hospital), R.drawable.ytx_chatting_hospital); + break; + default: + break; + } + capability.setId(resid); + return capability; + } + + /** + * @return + */ + private Context getContext() { + if (mContext == null) { + mContext = BaseApplication.getInstance().getApplicationContext(); + } + return mContext; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPAnimImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPAnimImageView.java new file mode 100644 index 0000000..d9e62f1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPAnimImageView.java @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.animation.AlphaAnimation; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +/** + * 语音播放动画 + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class CCPAnimImageView extends TextView { + + /** + * type for voice downloading. + */ + private static final int TYPE_VOICE_DOWNLOADING = 0; + + /** + * type for voice playing. + */ + private static final int TYPE_VOICE_PLAYING = 1; + + private Context mActivity; + + private AlphaAnimation mAlphaAnimation; + + /** + * chatting from animation + */ + private AnimationDrawable mChattingFromAnimationDrawable; + + /** + * chatting to animation + */ + private AnimationDrawable mChattingToAnimationDrawable; + + /** + * + */ + private int mDuration = 300; + + private int mVoiceType = TYPE_VOICE_PLAYING; + + /** + * + */ + private boolean isFrom = false; + + private boolean isRunning = false; + + /** + * @param context + */ + public CCPAnimImageView(Context context) { + super(context); + mActivity = context; + initCCPAnimImageView(); + } + + /** + * @param context + * @param attrs + */ + public CCPAnimImageView(Context context, AttributeSet attrs) { + super(context, attrs); + mActivity = context; + initCCPAnimImageView(); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + public CCPAnimImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mActivity = context; + initCCPAnimImageView(); + } + + + /** + * + */ + public void initCCPAnimImageView() { + + mAlphaAnimation = new AlphaAnimation(0.1F, 0.1F); + mAlphaAnimation.setDuration(1000L); + mAlphaAnimation.setRepeatCount(AlphaAnimation.INFINITE); + mAlphaAnimation.setRepeatMode(AlphaAnimation.REVERSE); + + // chatting from animation + mChattingFromAnimationDrawable = new AnimationDrawable(); + Drawable chattingFDrawale1 = getResources().getDrawable(R.drawable.chatfrom_voice_playing_f1); + chattingFDrawale1.setBounds(0, 0, chattingFDrawale1.getIntrinsicWidth(), chattingFDrawale1.getIntrinsicHeight()); + mChattingFromAnimationDrawable.addFrame(chattingFDrawale1, mDuration); + + Drawable chattingFDrawale2 = getResources().getDrawable(R.drawable.chatfrom_voice_playing_f2); + chattingFDrawale2.setBounds(0, 0, chattingFDrawale2.getIntrinsicWidth(), chattingFDrawale2.getIntrinsicHeight()); + mChattingFromAnimationDrawable.addFrame(chattingFDrawale2, mDuration); + + Drawable chattingFDrawale3 = getResources().getDrawable(R.drawable.chatfrom_voice_playing_f3); + chattingFDrawale3.setBounds(0, 0, chattingFDrawale3.getIntrinsicWidth(), chattingFDrawale3.getIntrinsicHeight()); + mChattingFromAnimationDrawable.addFrame(chattingFDrawale3, mDuration); + mChattingFromAnimationDrawable.setOneShot(false); + mChattingFromAnimationDrawable.setVisible(true, true); + + + // chatting to animation + mChattingToAnimationDrawable = new AnimationDrawable(); + Drawable chattingTDrawable_1 = getResources().getDrawable(R.drawable.chatto_voice_playing_f1); + chattingTDrawable_1.setBounds(0, 0, chattingTDrawable_1.getIntrinsicWidth(), chattingTDrawable_1.getIntrinsicHeight()); + mChattingToAnimationDrawable.addFrame(chattingTDrawable_1, mDuration); + + Drawable chattingTDrawable_2 = getResources().getDrawable(R.drawable.chatto_voice_playing_f2); + chattingTDrawable_2.setBounds(0, 0, chattingTDrawable_2.getIntrinsicWidth(), chattingTDrawable_2.getIntrinsicHeight()); + mChattingToAnimationDrawable.addFrame(chattingTDrawable_2, mDuration); + + Drawable chattingTDrawable_3 = getResources().getDrawable(R.drawable.chatto_voice_playing_f3); + chattingTDrawable_3.setBounds(0, 0, chattingTDrawable_3.getIntrinsicWidth(), chattingTDrawable_3.getIntrinsicHeight()); + mChattingToAnimationDrawable.addFrame(chattingTDrawable_3, mDuration); + mChattingToAnimationDrawable.setOneShot(false); + mChattingToAnimationDrawable.setVisible(true, true); + } + + /** + * from or to + * @param from + */ + public final void setVoiceFrom(boolean from) { + isFrom = from; + } + + /** + * the type for voice that playing or downloading. + * @see #TYPE_VOICE_DOWNLOADING + * @see #TYPE_VOICE_PLAYING + * @param type + */ + public final void setVoiceType(int type) { + mVoiceType = type; + } + + public final void startVoiceAnimation() { + switch (mVoiceType) { + case TYPE_VOICE_DOWNLOADING: + + if(isFrom) { + setBackgroundDrawable(mActivity.getResources().getDrawable(R.drawable.chatfrom_bg_voice_downloading)); + } else { + setBackgroundDrawable(mActivity.getResources().getDrawable(R.drawable.chatto_bg_voice_downloading)); + } + + setAnimation(mAlphaAnimation); + mAlphaAnimation.startNow(); + break; + case TYPE_VOICE_PLAYING: + + if(!isRunning) { + isRunning = true; + if(isFrom) { + // start chatting from animation + setCompoundDrawablesWithIntrinsicBounds(mChattingFromAnimationDrawable, null, null, null); + mChattingFromAnimationDrawable.stop(); + mChattingFromAnimationDrawable.start(); + return; + } + + // start chatting to animation + setCompoundDrawablesWithIntrinsicBounds(null, null, mChattingToAnimationDrawable, null); + mChattingToAnimationDrawable.stop(); + mChattingToAnimationDrawable.start(); + } + + break; + default: + break; + } + } + + /** + * + */ + public final void restBackground() { + if(isFrom) { + setBackgroundDrawable(getResources().getDrawable(R.drawable.chatfrom_bg)); + return; + } + setBackgroundDrawable(getResources().getDrawable(R.drawable.chatto_bg)); + } + + /** + * + */ + public final void stopVoiceAnimation() { + if(mAlphaAnimation != null && mAlphaAnimation.isInitialized()) { + setAnimation(null); + } + + if(mVoiceType != 1) { + return; + } + + isRunning = false; + setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); + setBackgroundDrawable(null); + this.mChattingFromAnimationDrawable.stop(); + this.mChattingToAnimationDrawable.stop(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPChattingFooter2.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPChattingFooter2.java new file mode 100644 index 0000000..a53ceb0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPChattingFooter2.java @@ -0,0 +1,1449 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.os.Build; +import android.os.Environment; +import android.os.Handler; +import android.os.Message; +import android.os.StatFs; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import java.io.File; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ResourceHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconEditText; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class CCPChattingFooter2 extends LinearLayout { + + + private static final String TAG = LogUtil.getLogUtilsTag(CCPChattingFooter2.class); + private static final int WHAT_ON_DIMISS_DIALOG = 0x1; + + // cancel recording sliding distance field. + private static final int CANCLE_DANSTANCE = 60; + /** + * Chatting mode that input mode + */ + public static final int CHATTING_MODE_KEYBORD = 1; + + /** + * Chatting mode that Speech mode, voice record. + */ + public static final int CHATTING_MODE_VOICE = 2; + + private InputMethodManager mInputMethodManager; + + private View mChattingFooterView; + + private View mVoiceHintRcding; + private View mVoiceHintTooshort; + private View mVoiceHintAnimArea; + private View mVoiceHintLoading; + + /** + * 'voice_rcd_hint_cancel_area + */ + private View mVoiceRcdHitCancelView; + + private LinearLayout mTextPanel; + + private FrameLayout mChattingBottomPanel; + + private ImageButton mChattingAttach; + + private ImageButton mChattingModeButton; + + /** + * The emoji send button in panel. + */ + private ImageButton mBiaoqing; + + private ImageView mVoiceHintAnim; + + private ImageView mVoiceHintCancelIcon; + + private TextView mVoiceHintCancelText; + + private TextView mVoiceNormalWording; + + private Button mVoiceRecord; + + private Button mChattingSend; + + public EmojiconEditText mEditText; + + /** + * Cloud communication panel, display all support ability + */ + private AppPanel mAppPanel; + + /** + * Panel tha display emoji. + */ + private ChatFooterPanel mChatFooterPanel; + + /** + * + */ + private RecordPopupWindow popupWindow; + + /** + * Interface definition for a callback to be invoked + * when the {@link ChatFooterPanel} has been click + */ + private OnChattingFooterLinstener mChattingFooterLinstener; + + private OnChattingPanelClickListener mChattingPanelClickListener; + + /** + * Interface definition for a callback to be invoked + * when Input Text + */ + private ChatingInputTextWatcher mChatingInputTextWatcher; + + /** + * Do not enable the enter button to send the message + */ + private boolean mDonotEnableEnterkey; + + /** + * Whether to display the keyboard + */ + private boolean mShowKeyBord; + + /** + * Whether to display emoji panel. + */ + private boolean mBiaoqingEnabled; + + /** + * Whether the voice recording button is touched. + */ + private boolean mVoiceButtonTouched; + + /** + * @see #CHATTING_MODE_KEYBORD + * @see #CHATTING_MODE_VOICE + */ + private int mChattingMode; + private int mChattingFooterTopHeight; + private int mAppPanleHeight = -1; + private boolean mHasKeybordHeight; + private boolean mSetAtSomeone = false; + private InsertSomeone mInsertSomeone; + + private static final int ampValue[] = { + 0, 15, 30, 45, 60, 75, 90, 100 + }; + private static final int ampIcon[] = { + R.drawable.amp1, + R.drawable.amp2, + R.drawable.amp3, + R.drawable.amp4, + R.drawable.amp5, + R.drawable.amp6, + R.drawable.amp7 + }; + + + /** + * + */ + private int mTop; + + final private Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + + popupWindow.dismiss(); + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), R.drawable.voice_rcd_btn_talk_nor)); + mVoiceRecord.setEnabled(true); + } + + }; + + final private TextView.OnEditorActionListener mOnEditorActionListener + = new TextView.OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + + if(((actionId == EditorInfo.IME_NULL) && mDonotEnableEnterkey) || actionId == EditorInfo.IME_ACTION_SEND) { + mChattingSend.performClick(); + return true; + } + return false; + } + }; + + final private OnTouchListener mOnTouchListener + = new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + hideBottomPanel(); + if(mChattingFooterLinstener != null) { + mChattingFooterLinstener.OnInEditMode(); + } + return false; + } + + }; + + long currentTimeMillis = 0; + final private OnTouchListener mOnVoiceRecTouchListener + = new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + if(getAvailaleSize() < 10) { + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "sdcard no memory "); + ToastUtil.showMessage(R.string.media_no_memory); + return false; + } + long time = System.currentTimeMillis() - currentTimeMillis; + if(time <= 300) { + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "Invalid click "); + currentTimeMillis = System.currentTimeMillis(); + return false; + } + + if(!FileAccessor.isExistExternalStore()) { + ToastUtil.showMessage(R.string.media_ejected); + return false; + + } + + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + mVoiceButtonTouched = true; + //mVoiceRecord.setEnabled(false); + onPause(); + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "CCPChatFooter voice recording action down"); + if(mChattingFooterLinstener != null) { + mChattingFooterLinstener.OnVoiceRcdInitReuqest(); + } + + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), R.drawable.voice_rcd_btn_talk_press)); + mVoiceRecord.setText(R.string.chatfooter_releasetofinish); + break; + + case MotionEvent.ACTION_MOVE: + if(popupWindow == null) { + return false; + } + if(event.getX() <= 0.0F || event.getY() <= -CANCLE_DANSTANCE || event.getX() >= mVoiceRecord.getWidth()){ + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "show cancel Tips"); + mVoiceHintCancelText.setText(R.string.chatfooter_cancel_rcd_release); + mVoiceRecord.setText(R.string.chatfooter_cancel_rcd_release); + mVoiceRcdHitCancelView.setVisibility(View.VISIBLE); + mVoiceHintAnimArea.setVisibility(View.GONE); + } else { + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "show rcd animation Tips"); + mVoiceHintCancelText.setText(R.string.chatfooter_cancel_rcd); + mVoiceRecord.setText(R.string.chatfooter_releasetofinish); + mVoiceRcdHitCancelView.setVisibility(View.GONE); + mVoiceHintAnimArea.setVisibility(View.VISIBLE); + } + + break; + case MotionEvent.ACTION_UP: + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "CCPChatFooter voice recording action up "); + resetVoiceRecordingButton(); + break; + case MotionEvent.ACTION_CANCEL: + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "CCPChatFooter voice recording action cancel "); + resetVoiceRecordingButton(); + break; + } + + return false; + } + }; + + final private OnClickListener mChattingSendClickListener + = new OnClickListener() { + + @Override + public void onClick(View v) { + LogUtil.d(TAG, "send msg onClick"); + String message = mEditText.getText().toString(); + + if((message.trim().length() == 0) && message.length() != 0) { + LogUtil.d(TAG, "empty message cant be sent"); + return; + } + + // send. + if(mChattingFooterLinstener != null) { + mChattingFooterLinstener.OnSendTextMessageRequest(message); + } + + mEditText.clearComposingText(); + mEditText.setText(""); + } + }; + + final private OnKeyListener mVoiceButtonKeyListener = new OnKeyListener() { + + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + + switch (event.getAction()) { + case KeyEvent.ACTION_DOWN: + + if((keyCode != KeyEvent.KEYCODE_DPAD_CENTER && keyCode != KeyEvent.KEYCODE_ENTER)) { + mVoiceRecord.setText(R.string.chatfooter_releasetofinish); + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), R.drawable.voice_rcd_btn_talk_press)); + } + break; + case KeyEvent.ACTION_UP: + + if((keyCode != KeyEvent.KEYCODE_DPAD_CENTER && keyCode != KeyEvent.KEYCODE_ENTER)) { + mVoiceRecord.setText(R.string.chatfooter_presstorcd); + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), R.drawable.voice_rcd_btn_talk_press)); + } + break; + default: + break; + } + return false; + } + }; + + final private OnClickListener mChattingModeClickListener + = new OnClickListener() { + + @Override + public void onClick(View v) { + hideInputMethod(); + hideChatFooterPanel(); + if (mChattingMode != CHATTING_MODE_VOICE) { + switchChattingMode(CHATTING_MODE_VOICE); + } else { + switchChattingMode(CHATTING_MODE_KEYBORD); + } + } + }; + + final private OnClickListener mChattingSmileyClickListener + = new OnClickListener() { + + @Override + public void onClick(View v) { + displaySmileyPanel(); + } + }; + + final private OnClickListener mChattingAttachClickListener + = new OnClickListener() { + + @Override + public void onClick(View v) { + + if(isButtomPanelNotVisibility()) { + + hideInputMethod(); + //setMode(0, -1, true); + if(mAppPanel == null) { + initAppPanel(); + } + mAppPanel.initFlipperRotateMe(); + + if(mChatFooterPanel != null) { + mChatFooterPanel.setVisibility(View.GONE); + } +// mAppPanel.setVisibility(View.VISIBLE); + requestFocusEditText(false); + if (mChattingMode == CHATTING_MODE_VOICE) { + switchChattingMode(CHATTING_MODE_KEYBORD); + } + mChattingBottomPanel.setVisibility(View.VISIBLE); +// mAppPanel.setVisibility(View.VISIBLE); + //mAppPanel.refreshAppPanel(); + } else { + //setMode(CHATTING_MODE_VOICE, 22, true); + if(mChatFooterPanel.getVisibility() == View.VISIBLE) { + mChatFooterPanel.setVisibility(View.GONE); +// mAppPanel.setVisibility(View.VISIBLE); + setMode(0, 22, false); + } else { + hideChatFooterPanel(); + requestFocusEditText(true); + mInputMethodManager.showSoftInput(mEditText, 0); + } + } + } + }; + + + final private AppPanel.OnAppPanelItemClickListener mAppPanelItemClickListener + = new AppPanel.OnAppPanelItemClickListener() { + + @Override + public void OnTakingPictureClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnTakingPictureRequest(); + } + } + + @Override + public void OnSelectImageClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnSelectImageReuqest(); + } + } + + @Override + public void OnSelectFileClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnSelectFileRequest(); + } + } + + @Override + public void OnSelectVoiceClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnSelectVoiceRequest(); + } + } + + @Override + public void OnSelectVideoClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnSelectVideoRequest(); + } + } + + @Override + public void OnOutPatientClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnOutPatientRequest(); + } + } + + @Override + public void OnShoppingClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnShoppingClick(); + } + } + + @Override + public void OnHospitalClick() { + if(mChattingPanelClickListener != null) { + mChattingPanelClickListener.OnHospitalClick(); + } + } + + + }; + + final private EmojiGrid.OnEmojiItemClickListener mEmojiItemClickListener + = new EmojiGrid.OnEmojiItemClickListener() { + + @Override + public void onEmojiItemClick(int emojiid, String emojiName) { + input(mEditText, emojiName); + } + + @Override + public void onEmojiDelClick() { + mEditText.getInputConnection().sendKeyEvent( + new KeyEvent(MotionEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); + mEditText.getInputConnection().sendKeyEvent( + new KeyEvent(MotionEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)); + } + }; + + /** + * @param context + */ + public CCPChattingFooter2(Context context) { + this(context , null); + } + + /** + * @param context + * @param attrs + */ + public CCPChattingFooter2(Context context, AttributeSet attrs) { + this(context, attrs ,0); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + public CCPChattingFooter2(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs); + + mInputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + initChatFooter(context); + } + + /** + * + */ + private void initChatFooter(Context context) { + long currentTimeMillis = System.currentTimeMillis(); + if(CommonUtil.BigModule()) + { + mChattingFooterView = inflate(context, R.layout.ccp_chatting_footer2_big, this); + } + else + { + mChattingFooterView = inflate(context, R.layout.ccp_chatting_footer2, this); + } + + mEditText = ((EmojiconEditText) findViewById(R.id.chatting_content_et)); + mTextPanel = ((LinearLayout) findViewById(R.id.text_panel_ll)); + mChattingBottomPanel = ((FrameLayout)findViewById(R.id.chatting_bottom_panel)); + mChattingAttach = ((ImageButton) findViewById(R.id.chatting_attach_btn)); + mChattingSend = ((Button) findViewById(R.id.chatting_send_btn)); + mVoiceRecord = ((Button) findViewById(R.id.voice_record_bt)); + mChattingModeButton = ((ImageButton) findViewById(R.id.chatting_mode_btn)); + mInsertSomeone = new InsertSomeone(); + enableChattingSend(false); + resetEnableEnterkey(); + + LogUtil.e(TAG, "send edittext ime option " + mEditText.getImeOptions()); + mEditText.setOnEditorActionListener(mOnEditorActionListener); + mEditText.setOnTouchListener(mOnTouchListener); + mChattingSend.setOnClickListener(mChattingSendClickListener); + mVoiceRecord.setOnTouchListener(mOnVoiceRecTouchListener); + mVoiceRecord.setOnKeyListener(mVoiceButtonKeyListener); + mChattingModeButton.setOnClickListener(mChattingModeClickListener); + + initAppPanel(); + + mChattingAttach.setVisibility(View.VISIBLE); + mChattingAttach.setOnClickListener(mChattingAttachClickListener); + + setBottomPanelHeight(LayoutParams.MATCH_PARENT); + + LogUtil.i(TAG, "init time:" + (System.currentTimeMillis() - currentTimeMillis)); + } + + /** + * + */ + private void initAppPanel() { + mAppPanel = (AppPanel) findViewById(R.id.chatting_app_panel); + + int height = ECPreferences.getSharedPreferences().getInt( + ECPreferenceSettings.SETTINGS_KEYBORD_HEIGHT.getId(), + ResourceHelper.fromDPToPix(getContext(), 320)); + mAppPanel.setOnAppPanelItemClickListener(mAppPanelItemClickListener); + mAppPanel.setPanelHeight(height); + } + + public final void initSmileyPanel() { + mBiaoqing = (ImageButton) findViewById(R.id.chatting_smiley_btn); + mBiaoqing.setVisibility(View.VISIBLE); + mBiaoqing.setOnClickListener(mChattingSmileyClickListener); + } + + /** + * + */ + public final void displaySmileyPanel() { + mChattingMode = CHATTING_MODE_KEYBORD; + mTextPanel.setVisibility(View.VISIBLE); + mVoiceRecord.setVisibility(View.GONE); + + if(mChatFooterPanel != null) { + mChatFooterPanel.reset(); + } + + setMode(CHATTING_MODE_VOICE, 21, true); + } + + /** + * Hide keyboard, keyboard does not show + */ + private void hideInputMethod() { + hideSoftInputFromWindow(this); + setKeyBordShow(false); + } + + /** + * + * @param tab + */ + public final void switchChattingPanel(String tab) { + if(TextUtils.isEmpty(tab)){ + return; + } + + if(mChatFooterPanel == null) { + initChattingFooterPanel(); + } + } + + public void hideSoftInputFromWindow(View view) { + try { + InputMethodManager inputMethodManager = (InputMethodManager) view + .getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager == null) { + return; + } + inputMethodManager.hideSoftInputFromWindow(view.getApplicationWindowToken(), 0); + } catch (Exception exception) { + exception.printStackTrace(); + } + } + + /** + * init {@link ChatFooterPanel} if not null. + */ + private void initChattingFooterPanel() { + if(mChatFooterPanel == null) { + if(CCPAppManager.getChatFooterPanel(getContext()) == null) { + mChatFooterPanel = new SmileyPanel(getContext(), null); + } else { + mChatFooterPanel = CCPAppManager.getChatFooterPanel(getContext()); + } + } + mChatFooterPanel.setOnEmojiItemClickListener(mEmojiItemClickListener); + if(mChatFooterPanel != null) { + mChatFooterPanel.setVisibility(View.GONE); + } + + if(mChattingBottomPanel != null) { + mChattingBottomPanel.addView(mChatFooterPanel, + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT); + } + + if(mEditText.getText().length() <= 0){ + return; + } + + + } + + /** + * Hide {@link ChatFooterPanel} if not null. + */ + private void hideChatFooterPanel() { + mChattingBottomPanel.setVisibility(View.GONE); +// mAppPanel.setVisibility(View.GONE); + if (mChatFooterPanel != null) { + mChatFooterPanel.setVisibility(View.GONE); + } + + setBiaoqingEnabled(false); + } + public void goneChatFooterPanel() { + if (mChatFooterPanel != null) { + mChatFooterPanel.setVisibility(View.GONE); + } + mChattingBottomPanel.setVisibility(View.GONE); +// mAppPanel.setVisibility(View.GONE); + LogUtil.i("mChatFooterPanel=="+mChatFooterPanel); + setBiaoqingEnabled(false); + } + + /** + * Whether display emoji panel + */ + private void setBiaoqingEnabled(boolean enabled) { + if(mBiaoqing == null) { + return; + } + + if((mBiaoqingEnabled && enabled) || (!mBiaoqingEnabled && !enabled)) { + LogUtil.d(TAG, "biao qing panel has " + enabled); + return; + } + mBiaoqingEnabled = enabled; + if(enabled) { + mBiaoqing.setImageDrawable(getContext().getResources().getDrawable(R.drawable.chatting_biaoqing_operation_enabled)); + return; + } + mBiaoqing.setImageDrawable(getContext().getResources().getDrawable(R.drawable.chatting_setmode_biaoqing_btn)); + } + + private void resetVoiceRecordingButton() { + mVoiceButtonTouched = false; + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), R.drawable.voice_rcd_btn_talk_nor)); + mVoiceRecord.setText(R.string.chatfooter_presstorcd); + + if(mVoiceRcdHitCancelView != null && mVoiceRcdHitCancelView.getVisibility() == View.VISIBLE) { + // Start to cancel sending events when recording over + if(mChattingFooterLinstener != null) { + mChattingFooterLinstener.OnVoiceRcdCancelRequest(); + } + return ; + } + + if(mChattingFooterLinstener != null) { + mChattingFooterLinstener.OnVoiceRcdStopRequest(); + } + } + + /** + * If it is possible to enable the send button + * @param canSend + */ + private void enableChattingSend(boolean canSend) { + if(mChattingAttach == null || mChattingSend == null) { + return ; + } + + // If the current attachment button visible, and the Enter key to send the message model + if ((!mDonotEnableEnterkey && mChattingAttach.getVisibility() == View.VISIBLE) + || mDonotEnableEnterkey && mChattingSend.getVisibility() == View.VISIBLE) { + return; + } + + if(mDonotEnableEnterkey) { + mChattingSend.setVisibility(View.VISIBLE); + mChattingAttach.setVisibility(View.GONE); + } else { + mChattingSend.setVisibility(View.GONE); + mChattingAttach.setVisibility(View.VISIBLE); + } + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "mDonotEnableEnterkey " + mDonotEnableEnterkey); + mChattingSend.getParent().requestLayout(); + } + + private void requestFocusEditText(boolean focus) { + if(focus) { + mEditText.requestFocus(); + mTextPanel.setEnabled(true); + return ; + } + mEditText.clearFocus(); + mTextPanel.setEnabled(false); + + } + + /** + * + */ + public final void resetEnableEnterkey() { + mDonotEnableEnterkey = ECPreferences.getSharedPreferences() + .getBoolean(ECPreferenceSettings.SETTINGS_ENABLE_ENTER_KEY.getId(), + (Boolean) ECPreferenceSettings.SETTINGS_ENABLE_ENTER_KEY .getDefaultValue()); + } + + /** + * Clear input box + */ + public final void clearEditText() { + if(mEditText == null) { + return; + } + + mEditText.setText(""); + } + + /** + * 获得最后的文本 + * @return + */ + public final String getLastText() { + if (mEditText == null) { + return ""; + } + return mEditText.getText().toString(); + } + + /** + * + * @param showKeyBord + */ + private void setKeyBordShow(boolean showKeyBord){ + if(mShowKeyBord = showKeyBord) { + return; + } + LogUtil.d(TAG, "set Show KeyBord " + showKeyBord); + mShowKeyBord = showKeyBord; + } + + /** + * change chatting mode for Speech mode, input mode + * @param resId + */ + private void setChattingModeImageResource(int resId) { + if(mChattingModeButton == null) { + return; + } + + if(resId == R.drawable.chatting_setmode_voice_btn) { + + + mChattingModeButton.setContentDescription(getContext().getString(R.string.chat_footer_switch_mode_voice_btn)); + } else { + mChattingModeButton.setContentDescription(getContext().getString(R.string.chat_footer_switch_mode_keybord_btn)); + } + mChattingModeButton.setImageResource(resId); + mChattingModeButton.setPadding(0, 0, 0, getResources().getDimensionPixelSize(R.dimen.ChattingFootPaddingBottom)); + } + + /** + * switch chatting mode for Speech mode, input mode + * @param mode + */ + private void switchChattingMode(int mode) { + mChattingMode = mode; + switch (mode) { + case CHATTING_MODE_KEYBORD: + + mTextPanel.setVisibility(View.VISIBLE); + mVoiceRecord.setVisibility(View.GONE); + setChattingModeImageResource(R.drawable.chatting_setmode_voice_btn); + break; + case CHATTING_MODE_VOICE: + + mTextPanel.setVisibility(View.GONE); + mVoiceRecord.setVisibility(View.VISIBLE); + setChattingModeImageResource(R.drawable.chatting_setmode_keyboard_btn); + break; + default: + break; + } + } + + /** + * + * @return + */ + public boolean isButtomPanelNotVisibility() { + return mChattingBottomPanel.getVisibility() != View.VISIBLE; + } + + public boolean isSetAtSomeoneing() { + return mSetAtSomeone; + } + /** + * set the {@link AppPanel} default height + * @param height + */ + private void setBottomPanelHeight(int height) { + + int widthPixels = 0; + if(height <= 0) { + int[] displayScreenMetrics = getDisplayScreenMetrics(); + if(displayScreenMetrics[0] >= displayScreenMetrics[1]) { + height = ResourceHelper.fromDPToPix(getContext(), 260); + } else { + height = ECPreferences.getSharedPreferences().getInt( + ECPreferenceSettings.SETTINGS_KEYBORD_HEIGHT.getId(), + ResourceHelper.fromDPToPix(getContext(), 260)); + } + + widthPixels = displayScreenMetrics[0]; + } + + if(height > 0 && mChattingBottomPanel != null) { + LogUtil.d(TAG , "set bottom panel height: " + height); + ViewGroup.LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT, height); + if(mChattingBottomPanel.getLayoutParams() != null) { + layoutParams = mChattingBottomPanel.getLayoutParams(); + } + layoutParams.height = height; + } + +// mAppPanel.setPanelHeight(height); + } + + /** + * Access to mobile phone screen resolution and the width and height + * @return + */ + @SuppressWarnings("deprecation") + private int[] getDisplayScreenMetrics() { + int[] metrics = new int[2]; + if (getContext() instanceof Activity) { + DisplayMetrics displayMetrics = new DisplayMetrics(); + ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + metrics[0] = displayMetrics.widthPixels; + metrics[1] = displayMetrics.heightPixels; + return metrics; + } + Display display = ((WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); + metrics[0] = display.getWidth(); + metrics[1] = display.getHeight(); + + return null; + } + + + public final void showVoiceRecordWindow(int offsert) { + + int yLocation = 0; + int maxHeightDensity = ResourceHelper.fromDPToPix(getContext(), 180); + int density = DensityUtil.getMetricsDensity(getContext(), 50.0F); + + if(offsert + density < maxHeightDensity) { + yLocation = -1; + } else { + yLocation = density +(offsert - maxHeightDensity) / 2; + } + + if(popupWindow == null) { + popupWindow = new RecordPopupWindow(View.inflate(getContext(), + R.layout.voice_rcd_hint_window2, null), + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.WRAP_CONTENT); + mVoiceHintAnim = ((ImageView) popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_anim)); + mVoiceHintAnimArea = popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_anim_area); + mVoiceRcdHitCancelView = popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_cancel_area); + mVoiceHintCancelText = ((TextView) popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_cancel_text)); + mVoiceHintCancelIcon = ((ImageView) popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_cancel_icon)); + mVoiceHintLoading = popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_loading); + mVoiceHintRcding = popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_rcding); + mVoiceHintTooshort = popupWindow.getContentView().findViewById(R.id.voice_rcd_hint_tooshort); + mVoiceNormalWording = ((TextView) popupWindow.getContentView().findViewById(R.id.voice_rcd_normal_wording)); + + } + + if(yLocation != -1) { + mVoiceHintTooshort.setVisibility(View.GONE); + mVoiceHintRcding.setVisibility(View.GONE); + mVoiceHintLoading.setVisibility(View.VISIBLE); + popupWindow.showAtLocation(this, Gravity.CENTER_HORIZONTAL|Gravity.TOP, 0, yLocation); + } + } + + public void displayAmplitude(double amplitude) { + for(int i = 0 ; i < ampIcon.length ; i++) { + if(amplitude < ampValue[i] || amplitude >= ampValue[i + 1]) { + continue; + } + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "Voice rcd amplitude " + amplitude); + mVoiceHintAnim.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), ampIcon[i])); + if ((amplitude == -1) && (this.popupWindow != null)) { + popupWindow.dismiss(); + mVoiceHintLoading.setVisibility(View.VISIBLE); + mVoiceHintRcding.setVisibility(View.GONE); + mVoiceHintTooshort.setVisibility(View.GONE); + } + return ; + } + } + + /** + * + */ + public void showVoiceRecording() { + if(mChattingFooterLinstener != null) { + mChattingFooterLinstener.OnVoiceRcdStartRequest(); + } + mVoiceHintLoading.setVisibility(View.GONE); + mVoiceHintRcding.setVisibility(View.VISIBLE); + } + + /** + * + */ + public final void dismissPopuWindow() { + if (popupWindow != null) { + popupWindow.dismiss(); + mVoiceHintRcding.setVisibility(View.VISIBLE); + mVoiceHintLoading.setVisibility(View.GONE); + mVoiceHintTooshort.setVisibility(View.GONE); + mVoiceRcdHitCancelView.setVisibility(View.GONE); + mVoiceHintAnimArea.setVisibility(View.VISIBLE); + } + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById( + getContext(), R.drawable.voice_rcd_btn_talk_nor)); + mVoiceRecord.setText(R.string.chatfooter_presstorcd); + mVoiceButtonTouched = false; + } + + public synchronized void tooShortPopuWindow() { + LogUtil.d(LogUtil.getLogUtilsTag(CCPChattingFooter2.class), "CCPChatFooter voice to short , then set enable false" ); + mVoiceRecord.setEnabled(false); + mVoiceRecord.setBackgroundDrawable(ResourceHelper.getDrawableById(getContext(), R.drawable.voice_rcd_btn_talk_press)); + if (popupWindow != null) { + mVoiceHintTooshort.setVisibility(View.VISIBLE); + mVoiceHintRcding.setVisibility(View.GONE); + mVoiceHintLoading.setVisibility(View.GONE); + //popupWindow.update(); + } + if (mHandler != null) { + mHandler.sendEmptyMessageDelayed(WHAT_ON_DIMISS_DIALOG, 500L); + } + } + + /** + * Register a drag event listener callback object for {@link CCPEditText}. The parameter is + * an implementation of {@link OnDragListener}. To send a drag event to a + * View, the system calls the + * {@link OnDragListener#onDrag(View, android.view.DragEvent)} method. + * @param l An implementation of {@link OnDragListener}. + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public final void setOnEditTextDragListener(OnDragListener l) { + mEditText.setOnDragListener(l); + } + + /** + * + * @param l + */ + public final void setOnChattingFooterLinstener(OnChattingFooterLinstener l) { + mChattingFooterLinstener = l; + } + + /** + * + * @param l + */ + public final void setOnChattingPanelClickListener(OnChattingPanelClickListener l) { + mChattingPanelClickListener = l; + } + + /** + * Register a drag event listener callback object for {@link CCPEditText} + * @param textWatcher + */ + public final void addTextChangedListener(TextWatcher textWatcher) { + mChatingInputTextWatcher = new ChatingInputTextWatcher(textWatcher); + mEditText.addTextChangedListener(mChatingInputTextWatcher); + } + + + + /** + * + */ + public final void setEditTextNull() { + mEditText.setText(null); + } + + public final void setEditText(CharSequence text) { + mEditText.setText(text); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + } + + /** + * + * @return + */ + public long getAvailaleSize(){ + + File path = Environment.getExternalStorageDirectory(); //取得sdcard文件路径 + StatFs stat = new StatFs(path.getPath()); + long blockSize = stat.getBlockSize(); + long availableBlocks = stat.getAvailableBlocks(); + return (availableBlocks * blockSize)/1024 /1024;// MIB单位 + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + } + + public final void hideBottomPanel() { + setMode(CHATTING_MODE_VOICE, 20, false); + } + + /** + * @param mode + */ + public void setMode(int mode) { + setMode(mode, true); + } + + /** + * + * @param mode + * @param focus + */ + public final void setMode(int mode , boolean focus) { + switchChattingMode(mode); + switch (mode) { + case CHATTING_MODE_KEYBORD: + requestFocusEditText(true); + hideChatFooterPanel(); + + if(focus) { + if(mEditText.length() > 0) { + enableChattingSend(true); + return; + } + } + enableChattingSend(false); + break; + case CHATTING_MODE_VOICE: + enableChattingSend(false); + setMode(0, -1, false); + default: + setVisibility(View.VISIBLE); + break; + } + + } + + /** + * + * @param mode + * @param messageMode + * @param focus + */ + private void setMode(int mode , int messageMode , boolean focus) { + if(focus) { + switch (mode) { + case CHATTING_MODE_KEYBORD: + + requestFocusEditText(true); + mInputMethodManager.showSoftInput(this.mEditText, 0); + break; + + case CHATTING_MODE_VOICE: + if(messageMode == 22) { +// if(mAppPanel == null) { +// initAppPanel(); +// } +// mAppPanel.initFlipperRotateMe(); + + if(mChatFooterPanel != null) { + mChatFooterPanel.setVisibility(View.GONE); + } +// mAppPanel.setVisibility(View.VISIBLE); + requestFocusEditText(false); + if (mChattingMode == CHATTING_MODE_VOICE) { + switchChattingMode(CHATTING_MODE_KEYBORD); + } + } else if (messageMode == 21) { +// if (mAppPanel != null){ +// mAppPanel.setVisibility(View.GONE); +// } + if (mChatFooterPanel == null) { + initChattingFooterPanel(); + } + mChatFooterPanel.onResume(); + if (mChatFooterPanel != null) { + mChatFooterPanel.setVisibility(View.VISIBLE); + } + setBiaoqingEnabled(true); + requestFocusEditText(true); + + hideInputMethod(); + this.mChattingBottomPanel.setVisibility(View.VISIBLE); + } + + break; + default: + if(focus && messageMode != 21 && mBiaoqing != null) { + setBiaoqingEnabled(false); + } + if(!focus && mode == 0) { + setBiaoqingEnabled(false); + } + mChattingBottomPanel.setVisibility(View.VISIBLE); +// mAppPanel.setVisibility(View.VISIBLE); + + break; + } + } else { + if (messageMode == 20) { + hideChatFooterPanel(); + } + + if(messageMode != 21 && mBiaoqing != null) { + setBiaoqingEnabled(false); + } + } + } + + /** + * + */ + public final void refreshAppPanel() { +// mAppPanel.refreshAppPanel(); + } + + /** + * + */ + public final void onPause(){ + if(mChatFooterPanel != null) { + mChatFooterPanel.onPause(); + } + + mChattingFooterLinstener.onPause(); + } + + public void onDestory() { +// mAppPanel = null; + if(mChatFooterPanel != null) { + mChatFooterPanel.onDestroy(); + mChatFooterPanel = null; + } + if(mHandler != null) { + mHandler.removeCallbacksAndMessages(null); + } + if(mEditText != null) { + mEditText.miInputConnection = null; + mEditText.setOnEditorActionListener(null); + mEditText.setOnTouchListener(null); + mEditText.removeTextChangedListener(null); + mEditText.clearComposingText(); + mEditText = null; + } + mChattingSend.setOnClickListener(null); + mVoiceRecord.setOnTouchListener(null); + mVoiceRecord.setOnKeyListener(null); + mVoiceRecord.removeTextChangedListener(null); + mChattingModeButton.setOnClickListener(null); + //initAppPanel(); + mChattingAttach.setOnClickListener(null); + mVoiceRecord = null; + mChattingModeButton = null; + mChattingAttach = null; + popupWindow = null; + mChattingFooterLinstener = null; + mChattingPanelClickListener = null; + mChatingInputTextWatcher = null; + } + + public void setLastText(String text) { + setLastText(text, -1, true); + } + + /** + * Interface definition for a callback to be invoked when the {@link ChatFooterPanel} has been click + * such as .emoji click , voice rcd onTouch + */ + public interface OnChattingFooterLinstener { + + void OnVoiceRcdInitReuqest(); + + void OnVoiceRcdStartRequest(); + /** + * Called when the voce record button nomal and cancel send voice. + */ + void OnVoiceRcdCancelRequest(); + /** + * Called when the voce record button nomal and send voice. + */ + void OnVoiceRcdStopRequest(); + + void OnSendTextMessageRequest(CharSequence text); + + void OnUpdateTextOutBoxRequest(CharSequence text); + + void OnSendCustomEmojiRequest(int emojiid, String emojiName); + + void OnEmojiDelRequest(); + + void OnInEditMode(); + + void onPause(); + + void onResume(); + + void release(); + } + + /** + * Interface definition for a callback to be invoked when the {@link ChatFooterPanel} has been click + * such as .emoji click , voice rcd onTouch + */ + public interface OnChattingPanelClickListener { + void OnTakingPictureRequest(); + void OnSelectImageReuqest(); + void OnSelectFileRequest(); + void OnSelectVoiceRequest(); + void OnSelectVideoRequest(); + void OnOutPatientRequest(); + void OnShoppingClick(); + void OnHospitalClick(); + } + + + private class ChatingInputTextWatcher implements TextWatcher { + + private TextWatcher mTextWatcher; + /** + * + */ + public ChatingInputTextWatcher(TextWatcher textWatcher) { + mTextWatcher = textWatcher; + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + mTextWatcher.beforeTextChanged(s, start, count, after); + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + mTextWatcher.onTextChanged(s, start, before, count); + } + + @Override + public void afterTextChanged(Editable s) { + mTextWatcher.afterTextChanged(s); + if ((s.length() > 0) && (s.toString().trim().length() > 0)){ + mDonotEnableEnterkey = true; + enableChattingSend(true); + } else { + mDonotEnableEnterkey = false; + enableChattingSend(false); + } + } + + } + + public void setLastText(String text , int selecton , boolean clear) { + if(clear && (text == null || text.length() == 0 || mEditText == null)) { + mEditText.setText(""); + return ; + } + mSetAtSomeone = true; + EmojiconEditText editText = this.mEditText; + editText.setText(text); + mSetAtSomeone = false; + if ((selecton < 0) || (selecton > this.mEditText.getText().length())) { + this.mEditText.setSelection(this.mEditText.getText().length()); + return; + } + this.mEditText.setSelection(selecton); + } + + public int getSelectionStart() { + return this.mEditText.getSelectionStart(); + } + + public char getCharAtCursor() { + int i = getSelectionStart(); + if (i <= 0) { + return 'x'; + } + return getLastText().charAt(i - 1); + } + + public String getAtSomebody() { + return mInsertSomeone.someBody; + } + + public void setAtSomebody(String somebody) { + mInsertSomeone.someBody = somebody; + } + + public void setLastContent(String lastContent) { + mInsertSomeone.lastContent = lastContent; + } + + public String getLastContent() { + return mInsertSomeone.lastContent; + } + + public int getInsertPos() { + return mInsertSomeone.insetPosition; + } + + public void setInsertPos(int position) { + mInsertSomeone.insetPosition = position; + } + + + /** + * @return + */ + public int getMode() { + return 0; + } + + + /** + * @param b + */ + public void setCancle(boolean b) { + + } + + /** + * @return + */ + public boolean isVoiceRecordCancle() { + return false; + } + + public static void input(EditText editText, String emojiName) { + if (editText == null || emojiName == null) { + return; + } + + int start = editText.getSelectionStart(); + int end = editText.getSelectionEnd(); + if (start < 0) { + editText.append(emojiName); + } else { + editText.getText().replace(Math.min(start, end), Math.max(start, end), emojiName, 0, emojiName.length()); + } + } + + + public class InsertSomeone { + String someBody; + String lastContent; + int insetPosition = 0; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPMaskLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPMaskLayout.java new file mode 100644 index 0000000..02b8e11 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/CCPMaskLayout.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 自定义头像显示控件 + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class CCPMaskLayout extends RelativeLayout { + + + + private View mView; + private ImageView mImageView; + private Drawable mForeDrawable; + /** + * @param context + */ + public CCPMaskLayout(Context context) { + this(context, null); + } + + /** + * @param context + * @param attrs + */ + public CCPMaskLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + public CCPMaskLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray styledAttributes = context.obtainStyledAttributes(attrs, R.styleable.MaskLayout, defStyle, 0); + mForeDrawable = styledAttributes.getDrawable(0); + styledAttributes.recycle(); + } + + /* + * + */ + public void initMaskLayoutRule(){ + removeView(mImageView); + LayoutParams params = new LayoutParams( + LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + + + addView(mImageView, params); + } + + /** + * @return + */ + public final View getContentView() { + return mView; + } + + + /* (non-Javadoc) + * @see android.view.View#onFinishInflate() + */ + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + mView = findViewById(R.id.content); + if(mView == null) { + LogUtil.e(LogUtil.getLogUtilsTag(CCPMaskLayout.class), "not found view by id, new one"); + mView = new View(getContext()); + LayoutParams layoutParams = new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT); + mView.setLayoutParams(layoutParams); + addView(mView); + } + + mImageView = new ImageView(getContext()); + mImageView.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + mImageView.setImageDrawable(mForeDrawable); + addView(mImageView); + } + + public enum MaskLayoutRule { + Rule_ALIGN_PARENT_LEFT , // 9 + Rule_ALIGN_PARENT_RIGHT, // 11 + Rule_ALIGN_PARENT_BOTTOM // 12 + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChatFooterPanel.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChatFooterPanel.java new file mode 100644 index 0000000..ca88180 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChatFooterPanel.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.LinearLayout; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public abstract class ChatFooterPanel extends LinearLayout { + + protected EmojiGrid.OnEmojiItemClickListener mItemClickListener; + + /** + * @param context + * @param attrs + */ + public ChatFooterPanel(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * Register a callback to be invoked when an item in this EmojiGird View has + * been clicked. + * + * @param listener The callback that will be invoked. + */ + protected void setOnEmojiItemClickListener(EmojiGrid.OnEmojiItemClickListener listener) { + mItemClickListener = listener; + } + + /** + * @return The callback to be invoked with an item in this EmojiGird View has + * been clicked, or null id no callback has been set. + */ + public final EmojiGrid.OnEmojiItemClickListener getOnEmojiItemClickListener() { + return mItemClickListener; + } + + public void onDestroy() { + + } + + public abstract void setChatFooterPanelHeight(int height); + + /** + * {@link ChatFooterPanel} onPause + */ + public abstract void onPause(); + + /** + * {@link ChatFooterPanel} onResume + */ + public abstract void onResume(); + + /** + * {@link ChatFooterPanel} reset + */ + public abstract void reset(); +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingItemContainer.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingItemContainer.java new file mode 100644 index 0000000..c831bbd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingItemContainer.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class ChattingItemContainer extends RelativeLayout { + + public static final String TAG = LogUtil.getLogUtilsTag(ChattingItemContainer.class); + + private int mResource; + private LayoutInflater mInflater; + + /** + * + * @param inflater + * @param resource + */ + @SuppressWarnings("deprecation") + public ChattingItemContainer(LayoutInflater inflater , int resource ) { + super(inflater.getContext()); + mInflater = inflater; + mResource = resource; + + // add timeView for chatting item. + TextView textView = new TextView(getContext(), null, R.style.ChattingUISplit); + textView.setId(R.id.chatting_time_tv); + textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12.0F); + LayoutParams textViewLayoutParams = new LayoutParams( + LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT); + textViewLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL); + textViewLayoutParams.setMargins(0, getResources().getDimensionPixelSize(R.dimen.NormalPadding), 0, + getResources().getDimensionPixelSize(R.dimen.NormalPadding)); + + addView(textView, textViewLayoutParams); + + // add message content view + View chattingView = mInflater.inflate(mResource, null); + int id = chattingView.getId(); + if(id == -1) { + LogUtil.v(TAG, "content view has no id, use defaul id"); + id = R.id.chatting_content_area; + chattingView.setId(id); + } + + LayoutParams chattingViewLayoutParams = new LayoutParams( + LayoutParams.FILL_PARENT, + LayoutParams.WRAP_CONTENT); + chattingViewLayoutParams.addRule(RelativeLayout.BELOW, R.id.chatting_time_tv); + chattingViewLayoutParams.addRule(RelativeLayout.LEFT_OF, R.id.chatting_checkbox); + addView(chattingView, chattingViewLayoutParams); + + View maskView = new View(getContext()); + maskView.setId(R.id.chatting_maskview); + maskView.setVisibility(View.GONE); + LayoutParams maskViewLayoutParams = new LayoutParams( + LayoutParams.FILL_PARENT, + LayoutParams.FILL_PARENT); + + maskViewLayoutParams.addRule(RelativeLayout.ALIGN_TOP , id); + maskViewLayoutParams.addRule(RelativeLayout.ALIGN_BOTTOM , id); + addView(maskView, maskViewLayoutParams); + } + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingListClickListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingListClickListener.java new file mode 100644 index 0000000..006693f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/ChattingListClickListener.java @@ -0,0 +1,124 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view;///* +// * Copyright (c) 2013 The CCP project authors. All Rights Reserved. +// * +// * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license +// * that can be found in the LICENSE file in the root of the web site. +// * +// * http://www.yuntongxun.com +// * +// * An additional intellectual property rights grant can be found +// * in the file PATENTS. All contributing project authors may +// * be found in the AUTHORS file in the root of the source tree. +// */ +//package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; +// +//import java.util.ArrayList; +//import java.util.List; +// +//import android.view.View; +//import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +//import cn.shangyu.gdxzExpert.ecdemo.common.utils.MediaPlayTools; +//import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +//import cn.shangyu.gdxzExpert.ecdemo.storage.ImgInfoSqlManager; +//import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingActivity; +//import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingListAdapter2; +//import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +//import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ViewHolderTag; +// +//import com.yuntongxun.ecsdk.ECMessage; +//import com.yuntongxun.ecsdk.im.ECFileMessageBody; +//import com.yuntongxun.ecsdk.im.ECVoiceMessageBody; +// +///** +// * 处理聊天消息点击事件响应 +// * @author Jorstin Chan@容联•云通讯 +// * @date 2014-12-10 +// * @version 4.0 +// */ +//public class ChattingListClickListener implements View.OnClickListener{ +// +// /**聊天界面*/ +// private ChattingActivity mContext; +// +// public ChattingListClickListener(ChattingActivity activity , String userName) { +// mContext = activity; +// } +// +// @Override +// public void onClick(View v) { +// ViewHolderTag holder = (ViewHolderTag) v.getTag(); +// ECMessage iMessage = holder.detail; +// +// switch (holder.type) { +// case ViewHolderTag.TagType.TAG_VIEW_FILE: +// ECFileMessageBody body = (ECFileMessageBody) holder.detail.getBody(); +// CCPAppManager.doViewFilePrevieIntent(mContext, body.getLocalUrl()); +// break; +// +// case ViewHolderTag.TagType.TAG_VOICE: +// if(iMessage == null) { +// return ; +// } +// MediaPlayTools instance = MediaPlayTools.getInstance(); +// final ChattingListAdapter2 adapterForce = mContext.mChattingFragment.getChattingAdapter(); +// if(instance.isPlaying()) { +// instance.stop(); +// } +// if(adapterForce.mVoicePosition == holder.position) { +// adapterForce.mVoicePosition = -1; +// adapterForce.notifyDataSetChanged(); +// return ; +// } +// +// instance.setOnVoicePlayCompletionListener(new MediaPlayTools.OnVoicePlayCompletionListener() { +// +// @Override +// public void OnVoicePlayCompletion() { +// adapterForce.mVoicePosition = -1; +// adapterForce.notifyDataSetChanged(); +// } +// }); +// ECVoiceMessageBody voiceBody = (ECVoiceMessageBody) holder.detail.getBody(); +// String fileLocalPath = voiceBody.getLocalUrl(); +// instance.playVoice(fileLocalPath, false); +// adapterForce.setVoicePosition(holder.position); +// adapterForce.notifyDataSetChanged(); +// +// break; +// +// case ViewHolderTag.TagType.TAG_VIEW_PICTURE: +// if(iMessage != null) { +// +// List msgids = IMessageSqlManager.getImageMessageIdSession(mContext.mChattingFragment.getmThread()); +// if(msgids == null || msgids.isEmpty()) { +// return ; +// } +// int position = 0; +// ArrayList urls = (ArrayList) ImgInfoSqlManager.getInstance().getViewImageInfos(msgids); +// msgids.clear(); +// if(urls == null || urls.isEmpty()) { +// return ; +// } +// for(int i = 0 ; i < urls.size() ; i ++) { +// if(urls.get(i) != null&& urls.get(i).getMsgLocalId().equals(iMessage.getMsgId())) { +// position = i; +// break; +// } +// } +// String urlsurls=urls.toString(); +// CCPAppManager.startChattingImageViewAction(mContext,position , urls); +// } +// break; +// +// case ViewHolderTag.TagType.TAG_RESEND_MSG : +// +// mContext.mChattingFragment.doResendMsgRetryTips(iMessage, holder.position); +// break; +// default: +// break; +// } +// } +// +// +// +//} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiApapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiApapter.java new file mode 100644 index 0000000..7293fcf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiApapter.java @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.EmoticonUtil; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.CCPEmoji; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + *

Title: EmojiApapter.java

+ *

Description:

+ *

Copyright: Copyright (c) 2014

+ *

Company: Beijing Speedtong Information Technology Co.,Ltd

+ * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class EmojiApapter extends BaseAdapter { + + + ArrayList emojis; + + LayoutInflater mInflater; + + public EmojiApapter(Context context) { + + mInflater = LayoutInflater.from(context);; + } + + + @Override + public int getCount() { + + if(emojis != null && emojis.size() > 0) { + return this.emojis.size() + 1; + } + + return 0; + } + + + @Override + public Object getItem(int position) { + + if(emojis != null && (position <= (emojis.size() - 1))) { + return emojis.get(position); + } + + return null; + } + + + @Override + public long getItemId(int position) { + + return position; + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder = null; + if(convertView == null || convertView.getTag() == null ) { + viewHolder=new ViewHolder(); + convertView=mInflater.inflate(R.layout.emoji_item, null); + viewHolder.emoji_icon=(ImageView)convertView.findViewById(R.id.emoji_id); + //viewHolder.emoji_icon.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + convertView.setTag(viewHolder); + } else { + viewHolder=(ViewHolder)convertView.getTag(); + } + + + if(getCount() - 1 == position) { + viewHolder.emoji_icon.setImageResource(R.drawable.emoji_del_selector); + } else { + + CCPEmoji emoji=(CCPEmoji) getItem(position); + if(emoji != null) { + if(emoji.getId() == R.drawable.emoji_del_selector) { + convertView.setBackgroundDrawable(null); + viewHolder.emoji_icon.setImageResource(emoji.getId()); + } else if(TextUtils.isEmpty(emoji.getEmojiDesc())) { + convertView.setBackgroundDrawable(null); + viewHolder.emoji_icon.setImageDrawable(null); + } else { + viewHolder.emoji_icon.setTag(emoji); + viewHolder.emoji_icon.setImageResource(emoji.getId()); + } + } + } + + return convertView; + } + + class ViewHolder { + + public ImageView emoji_icon; + } + + public void release() { + if(emojis != null) { + emojis.clear(); + emojis = null; + } + mInflater = null; + } + + /** + * @param emojis + */ + public void updateEmoji(ArrayList emojis) { + this.emojis = emojis; + if(this.emojis == null) { + emojis = new ArrayList(); + LogUtil.e(LogUtil.getLogUtilsTag(EmoticonUtil.class), "EmojiApapter.updateEmoji get emoji list fail, new one"); + } + notifyDataSetChanged(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiGrid.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiGrid.java new file mode 100644 index 0000000..6e7bebf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/EmojiGrid.java @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.GridView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.EmoticonUtil; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.CCPEmoji; +import cn.shangyu.gdxzExpert.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class EmojiGrid extends GridView implements AdapterView.OnItemClickListener{ + + private Context mContext ; + + EmojiApapter mEmojiApapter; + + private int emojiMode = 20; + + private int perPage ; + + private int totalPage ; + + private int curPage ; + + private int numColumns; + + private int gridViewWidth; + + private int mItemWidthInPix; + + private OnEmojiItemClickListener mItemClickListener; + /** + * @param context + * @param attrs + */ + public EmojiGrid(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + initEmojiLayout(context); + } + + /** + * @param context + */ + public EmojiGrid(Context context) { + super(context); + mContext = context; + initEmojiLayout(context); + } + + void initEmojiLayout(Context context) { + + mEmojiApapter = new EmojiApapter(context); + setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + setBackgroundResource(0); + setSelector(new ColorDrawable(Color.TRANSPARENT)); + setStretchMode(GridView.STRETCH_COLUMN_WIDTH); + setGravity(Gravity.CENTER); + + switch (emojiMode) { + case 21: + mItemWidthInPix = DensityUtil.fromDPToPix(getContext(), 43); + break; + case 20: + mItemWidthInPix = DensityUtil.fromDPToPix(getContext(), 80); + break; + default: + break; + } + LogUtil.d("EmojiGrid.initEmojiLayout mItemWidthInPix:" + mItemWidthInPix); + + setColumnWidth(mItemWidthInPix); + setAdapter(mEmojiApapter); + setOnItemClickListener(this); + + int left = DensityUtil.fromDPToPix(getContext(), 6); + int top = DensityUtil.fromDPToPix(getContext(), 6); + int right = DensityUtil.fromDPToPix(getContext(), 6); + LogUtil.d("EmojiGrid.initEmojiLayout paddingLeft:" + + left + " ,paddingRight:" + right + ",paddingTop:" + top); + setPadding(left, top, right, 0); + } + + /** + * + * @param verticalSpacing + */ + public final void setPanelVerticalSpacing(int verticalSpacing) { + if(verticalSpacing <= 0) { + return; + } + int padding = DensityUtil.getMetricsDensity(mContext, 10.0F); + setPadding(padding, verticalSpacing, padding, 0); + setVerticalSpacing(verticalSpacing / 2); + } + + + public void initEmojiGrid(int mode , int perPage , int totalPage , int curPage , int numColumns , int gridViewWidth) { + LogUtil.d("EmojiGrid.initEmojiGrid mode:" + mode + + " , perPage:" + perPage + " , totalPage:" + totalPage + + " ,curPage:" + curPage); + + this.emojiMode = mode; + this.perPage = perPage ; + this.totalPage = totalPage ; + this.curPage = curPage ; + this.numColumns = numColumns; + this.gridViewWidth = gridViewWidth; + if(numColumns == 7) { + setColumnWidth(gridViewWidth / 7); + } else { + setColumnWidth(gridViewWidth / 14); + } + + setNumColumns(numColumns); + mEmojiApapter.updateEmoji(getPageEmoji(curPage)); + } + + /** + * Paging loaded expression + * + * @param page + * @return + */ + private ArrayList getPageEmoji(int page) { + page -- ; + int startIndex = page * emojiMode; + int endIndex = startIndex + emojiMode; + + ArrayList emojiCache = EmoticonUtil.getInstace().getEmojiCache(); + if(emojiCache != null) { + + if (endIndex > emojiCache.size()) { + endIndex = emojiCache.size(); + } + ArrayList list = new ArrayList(); + list.addAll(emojiCache.subList(startIndex, endIndex)); + /*if (list.size() < emojiMode) { + for (int i = list.size(); i < emojiMode; i++) { + CCPEmoji object = new CCPEmoji(); + list.add(object); + } + }*/ + return list; + } + + return null; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + + if(mEmojiApapter != null) { + + if(mItemClickListener != null ) { + if(position == mEmojiApapter.getCount() - 1) { + + mItemClickListener.onEmojiDelClick(); + return ; + } + + CCPEmoji item = (CCPEmoji) mEmojiApapter.getItem(position); + mItemClickListener.onEmojiItemClick(item.getId() , item.getEmojiName()); + } + } + } + + public void releaseEmojiView() { + mItemClickListener = null; + if(mEmojiApapter != null) { + mEmojiApapter.release(); + } + mEmojiApapter = null; + } + + @TargetApi(8) + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + } + + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + } + + /** + * Interface definition for a callback to be invoked when an item in this + * AdapterView has been clicked. + */ + public interface OnEmojiItemClickListener { + + /** + * Callback method to be invoked when an item in this EmojiGird View has + * been clicked. + * + * @param emojiid + * @param emojiName + */ + void onEmojiItemClick(int emojiid, String emojiName); + + /** + * Callback method to be invoked when an item of del in this EmojiGird View has + * been clicked. + */ + void onEmojiDelClick(); + } + + /** + * Register a callback to be invoked when an item in this EmojiGird View has + * been clicked. + * + * @param listener The callback that will be invoked. + */ + public void setOnEmojiItemClickListener(OnEmojiItemClickListener listener) { + mItemClickListener = listener; + } + + /** + * @return The callback to be invoked with an item in this EmojiGird View has + * been clicked, or null id no callback has been set. + */ + public final OnEmojiItemClickListener getOnEmojiItemClickListener() { + return mItemClickListener; + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/RecordPopupWindow.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/RecordPopupWindow.java new file mode 100644 index 0000000..d01a563 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/RecordPopupWindow.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.util.Log; +import android.view.View; +import android.widget.PopupWindow; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class RecordPopupWindow extends PopupWindow { + + public RecordPopupWindow(View contentView) { + super(contentView); + } + + public RecordPopupWindow(View contentView, int width, int height) { + super(contentView, width, height, false); + } + + public RecordPopupWindow(View contentView, int width, int height, + boolean focusable) { + super(contentView, width, height, focusable); + } + + public void dismiss() { + + try { + super.dismiss(); + } catch (Exception e) { + Log.d("MicroMsg.MMPopupWindow", "dismiss exception, e = " + e.getMessage()); + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/SmileyPanel.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/SmileyPanel.java new file mode 100644 index 0000000..abbe9f1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/chatting/view/SmileyPanel.java @@ -0,0 +1,311 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.chatting.view; + +import android.content.Context; +import android.content.res.Configuration; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.Display; +import android.view.View; +import android.view.WindowManager; + +import java.util.ArrayList; +import java.util.Iterator; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.EmoticonUtil; +import cn.shangyu.gdxzExpert.utils.DensityUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-10 + * @version 4.0 + */ +public class SmileyPanel extends ChatFooterPanel{ + + + + private static int APP_PANEL_HEIGHT_LANDSCAPE = 122; + private static int APP_PANEL_HEIGHT_PORTRAIT = 179; + + private int mDefaultVerticalSpacing = DensityUtil.fromDPToPix(CCPAppManager.getContext(), 48); + + /** + * default App panel emoji. + */ + public static String APP_PANEL_NAME_DEFAULT = "emoji"; + + private Context mContext; + + private int mEmojiPanelHeight = -1 ; + + private WindowManager mWindowManager; + +// private CCPFlipper mFlipper; +// private CCPDotView mDotView; + + private ArrayList mArrayList; + + private boolean mInitPanelHeight; + + /** + * @param context + * @param attrs + */ + public SmileyPanel(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + + inflate(context, R.layout.ccp_smile_panel, this); + +// mFlipper = ((CCPFlipper) findViewById(R.id.smiley_panel_flipper)); +// mDotView = ((CCPDotView) findViewById(R.id.smiley_panel_dot)); + initEmojiPanel(); + } + + /** + * init {@link SmileyPanel} Child View + * {@link EmojiGrid} + */ + private void initEmojiPanel(){ + + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "initEmojiPanel"); +// mFlipper.removeAllViews(); +// mFlipper.setOnFlipperListner(this); +// mFlipper.setOnCCPFlipperMeasureListener(this); + + mInitPanelHeight = true; + + View smileyPanelDisplayView = findViewById(R.id.smiley_panel_display_view); + LayoutParams layoutParams = (LayoutParams) smileyPanelDisplayView.getLayoutParams(); + if(getWindowDisplayMode() == 2) { + layoutParams.height = DensityUtil.getMetricsDensity(getContext(), APP_PANEL_HEIGHT_LANDSCAPE); + } else { + int panelHeight = DensityUtil.getMetricsDensity(getContext(), APP_PANEL_HEIGHT_PORTRAIT); + if(mEmojiPanelHeight > 0) { + panelHeight = mEmojiPanelHeight; + } + layoutParams.height = panelHeight; + } + smileyPanelDisplayView.setLayoutParams(layoutParams); + + if(mArrayList != null && mArrayList.size() > 0) { + Iterator iterator = mArrayList.iterator(); + while (iterator.hasNext()) { + EmojiGrid emojiGrid = (EmojiGrid) iterator.next(); + if(emojiGrid != null) emojiGrid.releaseEmojiView(); + } + mArrayList.clear(); + } + + } + + private int getWindowDisplayMode() { + if(mWindowManager == null ) { + mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); + } + Display localDisplay = mWindowManager.getDefaultDisplay(); + return localDisplay.getWidth() < localDisplay.getHeight() ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; + } + + public void swicthToPanel(String panelName) { + LogUtil.d("AppPanel.swicthToPanel panelName: " + panelName); + setVisibility(View.VISIBLE); + if(TextUtils.isEmpty(panelName)) { + return ; + } + + if(mArrayList == null) { + mArrayList = new ArrayList(); + } + + if(APP_PANEL_NAME_DEFAULT.equals(panelName)) { + doEmoji(mArrayList); + } + } + + private int getSmileyPanelVerticalSpacing() { + if(getWindowDisplayMode() != 2) { + return (mEmojiPanelHeight - (3 * mDefaultVerticalSpacing)) / (4); + } + return (APP_PANEL_HEIGHT_LANDSCAPE - (2 * mDefaultVerticalSpacing)) / (3); + } + + + /** + * @param mArrayList + */ + private void doEmoji(ArrayList mArrayList) { + +// mFlipper.removeAllViews(); + if(mArrayList == null || mArrayList.size() <= 0) { + doEmoji(); + return; + } + + Iterator iterator = mArrayList.iterator(); + while (iterator.hasNext()) { + EmojiGrid emojiGrid = (EmojiGrid) iterator.next(); +// mFlipper.addView(emojiGrid, new LayoutParams( +// LayoutParams.MATCH_PARENT, +// LayoutParams.MATCH_PARENT)); + emojiGrid.setOnEmojiItemClickListener(mItemClickListener); + } + + if(mArrayList.size() <= 1) { +// mDotView.setVisibility(View.INVISIBLE); + return; + } + +// mDotView.setVisibility(View.VISIBLE); +// mDotView.setDotCount(mArrayList.size()); +// mDotView.setSelectedDot(mFlipper.getVisiableIndex()); + } + + private void doEmoji() { + +// mFlipper.removeAllViews(); + + int pageCount = (int) Math.ceil(EmoticonUtil.getInstace().getEmojiSize() / 20 + 0.1); + LogUtil.d("AppPanel.doEmoji emoji total pageCount :" + pageCount ); + + for (int i = 0; i < pageCount; i++) { + EmojiGrid emojiGrid = new EmojiGrid(getContext()); + emojiGrid.initEmojiGrid(20, i, pageCount, i + 1, 7, getWidth()); + emojiGrid.setOnEmojiItemClickListener(mItemClickListener); +// mFlipper.addView(emojiGrid, new LayoutParams( +// LayoutParams.MATCH_PARENT, +// LayoutParams.MATCH_PARENT)); +// +// mFlipper.setInterceptTouchEvent(true); + + //int smileyPanelVerticalSpacing = getSmileyPanelVerticalSpacing(); + //emojiGrid.setVerticalSpacing(smileyPanelVerticalSpacing); + + mArrayList.add(emojiGrid); + } + if(mArrayList.size() <= 1) { +// mDotView.setVisibility(View.INVISIBLE); + return; + } + +// mDotView.setVisibility(View.VISIBLE); +// mDotView.setDotCount(pageCount); +// mDotView.setSelectedDot(0); + } + + /** + * Change the height of the panel + * @param height + */ + public final void setPanelHeight(int height) { + if(mEmojiPanelHeight == height) { + return; + } + + mEmojiPanelHeight = height; + mInitPanelHeight = true; + } + + + /** + * @param + */ + public void setPanelGone() { +// mFlipper.removeAllViews(); +// mDotView.removeAllViews(); + doChatTools(); + } + + public void doChatTools() { + setVisibility(View.GONE); + } + + + /** + * release SmileyPanel view. + */ + public void releaseSmileyPanel() { + setPanelGone(); +// mFlipper.setOnFlipperListner(null); +// mFlipper.setOnCCPFlipperMeasureListener(null); + + if(mArrayList != null && mArrayList.size() > 0) { + Iterator iterator = mArrayList.iterator(); + while (iterator.hasNext()) { + EmojiGrid emojiGrid = (EmojiGrid) iterator.next(); + if(emojiGrid != null) emojiGrid.releaseEmojiView(); + } + mArrayList.clear(); + } + +// mFlipper = null; +// mDotView = null; + + } + + + @Override + public void onPause() { + + } + + + @Override + public void onResume() { + swicthToPanel(APP_PANEL_NAME_DEFAULT); + } + + /* (non-Javadoc) + * @see com.hisun.cas.ui.base.im.ChatFooterPanel#onDestroy() + */ + @Override + public void onDestroy() { + super.onDestroy(); + releaseSmileyPanel(); + } + + @Override + public void reset() { + + } + +// @Override +// public void onCCPFlipperMeasure(int widthMeasureSpec, int heightMeasureSpec) { +// +// } + +// @Override +// public void onFlipperPage(int startIndex, int finalIndex) { +// if(mDotView == null) { +// return; +// } +// if(finalIndex > mDotView.getDotCount()) { +// finalIndex = mDotView.getDotCount(); +// } +// mDotView.setSelectedDot(finalIndex); +// } + + /* (non-Javadoc) + * @see com.hisun.cas.ui.base.im.ChatFooterPanel#setChatFooterPanelHeight(int) + */ + @Override + public void setChatFooterPanelHeight(int height) { + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/AtSomeoneUI.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/AtSomeoneUI.java new file mode 100644 index 0000000..2b8e050 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/AtSomeoneUI.java @@ -0,0 +1,152 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; + +/** + * com.yuntongxun.ecdemo.ui.contact in ECDemo_Android + * Created by Jorstin on 2015/6/15. + */ +public class AtSomeoneUI extends ECSuperActivity implements View.OnClickListener{ + + public static final String EXTRA_GROUP_ID = "at_group_id"; + public static final String EXTRA_CHAT_USER = "at_chat_user"; + public static final String EXTRA_SELECT_CONV_USER = "select_conv_user"; + + private String mGroupId ; + private String mChatUser; + private ListView mListView; +// private AtSomeAdapter mAdapter; + + private AdapterView.OnItemClickListener onItemClickListener + = new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { +// ECGroupMember member = mAdapter.getItem(position); +// if(!TextUtils.isEmpty(member.getVoipAccount())) { +// Intent intent = new Intent(); +// intent.putExtra(EXTRA_SELECT_CONV_USER , member.getVoipAccount()); +// setResult(RESULT_OK, intent); +// } + finish(); + } + }; + + @Override + protected int getLayoutId() { + return R.layout.at_someone_ui; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mGroupId = getIntent().getStringExtra(EXTRA_GROUP_ID); + mChatUser = getIntent().getStringExtra(EXTRA_CHAT_USER); + + initView(); + } + + private void initView() { + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, R.string.room_at_someone, this); + + mListView = (ListView) findViewById(R.id.chatroom_member_lv); + mListView.setOnItemClickListener(onItemClickListener); +// mAdapter = new AtSomeAdapter(this , new ECGroupMember() , mGroupId); + +// mListView.setAdapter(mAdapter); + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + + default: + break; + } + } + + +// public static class AtSomeAdapter extends CCPListAdapter { +// +// private String mGroupId; +// /** +// * 构造方法 +// * +// * @param ctx +// * @param o +// */ +// public AtSomeAdapter(Context ctx, ECGroupMember o , String groupId) { +// super(ctx, o); +// mGroupId = groupId; +// } +// +// @Override +// protected void notifyChange() { +// Cursor cursor = GroupMemberSqlManager.getGroupMembersByCursor(mGroupId); +// setCursor(cursor); +// super.notifyDataSetChanged(); +// } +// +// @Override +// protected void initCursor() { +// notifyChange(); +// } +// +// @Override +// protected ECGroupMember getItem(ECGroupMember member, Cursor cursor) { +// ECGroupMember person = new ECGroupMember(); +// person.setBelong(mGroupId); +// person.setVoipAccount(cursor.getString(0)); +// person.setDisplayName(cursor.getString(1)); +// person.setRemark(cursor.getString(2)); +// person.setRole(cursor.getInt(3)); +// person.setBan(cursor.getInt(4) == 2 ? true : false); +// return person; +// } +// +// @Override +// public View getView(int position, View convertView, ViewGroup parent) { +// View view ; +// ViewHolder mViewHolder ; +// if(convertView == null || convertView.getTag() == null) { +// view = View.inflate(mContext, R.layout.at_someone_item, null); +// +// mViewHolder = new ViewHolder(); +// mViewHolder.mAvatar = (ImageView) view.findViewById(R.id.content); +// mViewHolder.name_tv = (EmojiconTextView) view.findViewById(R.id.at_someone_item_nick); +// +// view.setTag(mViewHolder); +// } else { +// view = convertView; +// mViewHolder = (ViewHolder) view.getTag(); +// } +// final ECGroupMember item = getItem(position); +// if(item != null) { +// item.setDisplayName(TextUtils.isEmpty(item.getDisplayName())?item.getVoipAccount():item.getDisplayName()); +// mViewHolder.name_tv.setText(item.getDisplayName()); +// mViewHolder.mAvatar.setImageBitmap(ContactLogic.getPhoto(item.getRemark())); +// } +// +// return view; +// } +// +// +// static class ViewHolder { +// /**头像*/ +// ImageView mAvatar; +// /**名称*/ +// EmojiconTextView name_tv; +// } +// } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/BladeView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/BladeView.java new file mode 100644 index 0000000..9d115b7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/BladeView.java @@ -0,0 +1,175 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.os.Handler; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.PopupWindow; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +/** + * com.yuntongxun.ecdemo.ui.contact in ECDemo_Android + * Created by Jorstin on 2015/3/21. + */ +public class BladeView extends View { + private OnItemClickListener mOnItemClickListener; + String[] b = {"↑" ,"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", + "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", + "Y", "Z" ,"#"}; + int choose = -1; + Paint paint = new Paint(); + boolean showBkg = false; + private PopupWindow mPopupWindow; + private TextView mPopupText; + private Handler handler = new Handler(); + + public BladeView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public BladeView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public BladeView(Context context) { + super(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (showBkg) { + canvas.drawColor(Color.parseColor("#AAAAAA")); + } + + int height = getHeight(); + int width = getWidth(); + int singleHeight = height / b.length; + for (int i = 0; i < b.length; i++) { + paint.setColor(Color.parseColor("#ffff5454")); + paint.setTextSize(getResources().getDimensionPixelSize(R.dimen.bladeview_fontsize));//设置字体的大小 + paint.setFakeBoldText(true); + paint.setAntiAlias(true); + if (i == choose) { + paint.setColor(Color.parseColor("#3399ff")); + } + float xPos = width / 2 - paint.measureText(b[i]) / 2; + float yPos = singleHeight * i + singleHeight; + canvas.drawText(b[i], xPos, yPos, paint); + paint.reset(); + } + + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + final int action = event.getAction(); + final float y = event.getY(); + final int oldChoose = choose; + final int c = (int) (y / getHeight() * b.length); + + switch (action) { + case MotionEvent.ACTION_DOWN: + showBkg = true; + if (oldChoose != c) { + if (c >= 0 && c < b.length) { //让第一个字母响应点击事件 + performItemClicked(c); + choose = c; + invalidate(); + } + } + + break; + case MotionEvent.ACTION_MOVE: + if (oldChoose != c) { + if (c >= 0 && c < b.length) { //让第一个字母响应点击事件 + performItemClicked(c); + choose = c; + invalidate(); + } + } + break; + case MotionEvent.ACTION_UP: + showBkg = false; + choose = -1; + dismissPopup(); + invalidate(); + break; + } + return true; + } + + private void showPopup(int item) { + if (mPopupWindow == null) { + + handler.removeCallbacks(dismissRunnable); + mPopupText = new TextView(getContext()); + mPopupText.setBackgroundColor(Color.GRAY); + mPopupText.setTextColor(Color.WHITE); + mPopupText.setTextSize(getResources().getDimensionPixelSize(R.dimen.bladeview_popup_fontsize)); + mPopupText.setGravity(Gravity.CENTER_HORIZONTAL + | Gravity.CENTER_VERTICAL); + + int height = getResources().getDimensionPixelSize(R.dimen.bladeview_popup_height); + + mPopupWindow = new PopupWindow(mPopupText, height, height); + } + + /*String text = ""; + if (item == 26) { + text = "#"; + } else { + text = Character.toString((char) ('A' + item)); + }*/ + String text = b[item]; + mPopupText.setText(text); + if (mPopupWindow.isShowing()) { + mPopupWindow.update(); + } else { + mPopupWindow.showAtLocation(getRootView(), + Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0); + } + } + + private void dismissPopup() { + handler.postDelayed(dismissRunnable, 1500); + } + + Runnable dismissRunnable = new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + if (mPopupWindow != null && mPopupWindow.isShowing()) { + mPopupWindow.dismiss(); + } + } + }; + + public boolean onTouchEvent(MotionEvent event) { + return super.onTouchEvent(event); + } + + public void setOnItemClickListener(OnItemClickListener listener) { + mOnItemClickListener = listener; + } + + private void performItemClicked(int item) { + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(b[item]); + showPopup(item); + } + } + + public interface OnItemClickListener { + void onItemClick(String s); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactLogic.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactLogic.java new file mode 100644 index 0000000..50c5650 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactLogic.java @@ -0,0 +1,627 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.ContentResolver; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.ThumbnailUtils; +import android.provider.ContactsContract; +import android.text.TextUtils; +import android.view.View; + +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; +import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.BitmapUtil; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DialNumberMap; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ECPropertiesUtil; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ResourceHelper; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupMemberSqlManager; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.Url; + + +/** + * 联系人逻辑处理 + * Created by Jorstin on 2015/3/18. + */ +public class ContactLogic { + + + public static final String ALPHA_ACCOUNT = "izhangjy@163.com"; + public static final String CUSTOM_SERVICE = "KF4008818600668603"; + private static HashMap photoCache = new HashMap(20); + public static final String[] CONVER_NAME = {"张三","李四","王五","赵六","钱七"}; + public static final String[] CONVER_PHONTO = {"personal_center_default_avatar.png" + ,"personal_center_default_avatar.png" + ,"personal_center_default_avatar.png" + ,"personal_center_default_avatar.png" + ,"personal_center_default_avatar.png" + }; + + private static String[] projection_getSettingList = { + ContactsContract.Settings.ACCOUNT_TYPE, + ContactsContract.Settings.ACCOUNT_NAME }; + + private static String[] projection_getContractList = { + ContactsContract.Data.RAW_CONTACT_ID, + ContactsContract.Data.MIMETYPE, ContactsContract.Data.DATA1, + ContactsContract.Data.DATA2, ContactsContract.Data.DATA3, + ContactsContract.RawContacts.ACCOUNT_TYPE, + ContactsContract.Data._ID, ContactsContract.Data.TIMES_CONTACTED, + ContactsContract.Data.DATA5, ContactsContract.Data.DATA6,}; + + public static Bitmap mDefaultBitmap = null; + + + static { + try { + if(mDefaultBitmap == null) { + mDefaultBitmap = DemoUtils.decodeStream(CCPAppManager.getContext().getAssets().open("avatar/personal_center_default_avatar.png"), ResourceHelper.getDensity(null)); + } + } catch (IOException e) { + } + } + + private static ContactLogic sInstance; + public static ContactLogic getInstance() { + if (sInstance == null) { + sInstance = new ContactLogic(); + } + return sInstance; + } + + /** + * 查找头像 + * @param username + * @return + */ + static Bitmap bitmap = null ; + public static Bitmap getPhoto(String username) { + + if(TextUtils.isEmpty(username)) { + return mDefaultBitmap; + } + try { + if (photoCache.containsKey(username)) { + return photoCache.get(username); + } + bitmap = null ; + if(username.startsWith("mobilePhoto://")) { + bitmap = BitmapFactory.decodeFile(new File(FileAccessor.getAvatarPathName() , username.substring("mobilePhoto://".length())).getAbsolutePath()); + } else if (username.startsWith(Url.urlHtml)) { + //患者头像 + // bm转换为base64位编码 + ImageLoader.getInstance().loadImage(username, + new SimpleImageLoadingListener(){ + + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + super.onLoadingComplete(imageUri, view, loadedImage); + bitmap = loadedImage; + } + }); +// bitmap = ImageLoader.getInstance().loadImageSync(username); + } else { + + bitmap = DemoUtils.decodeStream(CCPAppManager.getContext() + .getAssets().open("avatar/" + username), + ResourceHelper.getDensity(null)); + + } + if (bitmap == null) { + return mDefaultBitmap; + } + photoCache.put(username, bitmap); + return bitmap; + } catch (IOException e) { + } + return mDefaultBitmap; + } + + /** + * 随即设置用户昵称 + * @param beas + * @return + */ + public static ArrayList converContacts(ArrayList beas) { + + if(beas == null || beas.isEmpty()) { + return null; + } + Collections.sort(beas, new Comparator() { + + @Override + public int compare(ECContacts lhs, ECContacts rhs) { + + return lhs.getContactid().compareTo(rhs.getContactid()); + } + + }); + + for(int i = 0 ; i < beas.size() ; i ++ ) { + ECContacts accountBean = beas.get(i); + if (i < 5) { + //accountBean.setNickname(CONVER_NAME[i]); + accountBean.setRemark(ContactLogic.CONVER_PHONTO[i]); + } else { + //accountBean.setNickname("云通讯" + i); + accountBean.setRemark("personal_center_default_avatar.png"); + } + } + return beas; + } + + public static ArrayList initContacts() { + ArrayList list = new ArrayList(); + ECContacts contacts = new ECContacts("KF4008818600668603"); + contacts.setNickname(CCPAppManager.getContext().getString(R.string.main_plus_mcmessage)); + contacts.setRemark(CONVER_PHONTO[0]); + list.add(contacts); + return list; + } + + /** + * 是否在线客服 + * @param contact + * @return + */ + public static boolean isCustomService(String contact) { + return CUSTOM_SERVICE.equals(contact); + } + + // These are the Contacts rows that we will retrieve. + static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] { + ContactsContract.Contacts._ID, + ContactsContract.Contacts.DISPLAY_NAME, + ContactsContract.Contacts.PHOTO_ID, + }; + + /** + * 获取手机系统联系人信息 + * @return + */ +// public static ECArrayLists getPhoneContacts(Context ctx) { +// ECArrayLists contacts = new ECArrayLists(); +// // Now create and return a CursorLoader that will take care of +// // creating a Cursor for the data being displayed. +// String select = "((" + ContactsContract.Contacts.DISPLAY_NAME + " NOTNULL) AND (" +// + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1) AND (" +// + ContactsContract.Contacts.DISPLAY_NAME + " != '' ))"; +// try { +// Cursor cursor = ctx.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, +// CONTACTS_SUMMARY_PROJECTION, +// select, +// null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); +// while (cursor.moveToNext()) { +// int indexId = cursor.getColumnIndex(ContactsContract.Contacts._ID); +// String contactId = cursor.getString(indexId); +// int indexDisplayName = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); +// String name = cursor.getString(indexDisplayName); +// +// Cursor phones = ctx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, +// ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); +// ECContacts data = new ECContacts(); +// data.setId(indexId); +// data.setNickname(name); +// data.setRemark(ContactLogic.CONVER_PHONTO[ContactSqlManager.getIntRandom(4, 0)]); +// while (phones.moveToNext()) { +// String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); +// Phone phone = new Phone(0,phoneNumber); +// data.addPhone(phone); +// pyFormat(data); +// } +// contacts.add(data); +// phones.close(); +// } +// cursor.close(); +// +// if(contacts != null) { +// Collections.sort(contacts, new PyComparator()); +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// return contacts; +// } + + + /** + * 获取联系人配置 + * + * @return + */ + public List getSettingList() { + List cl = null; + Cursor cursor = null; + try { + cursor = CCPAppManager.getContext().getContentResolver().query(ContactsContract.Settings.CONTENT_URI, + projection_getSettingList, null, null, null); + if (cursor != null && cursor.getCount() > 0) { + cl = new ArrayList(); + while (cursor.moveToNext()) { + String[] s = new String[cursor.getColumnCount()]; + for (int i = 0; i < s.length; i++) { + s[i] = cursor.getString(i); + } + cl.add(s); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (cursor != null) { + cursor.close(); + cursor = null; + } + } + + return cl; + } + +// public static ECArrayLists getContractList(boolean showSim) throws Exception { +// // TODO 可能需要添加,是否显示无号码联系人选项,显示哪些账户联系人选项 +// getInstance().getSettingList(); +// Cursor cursor = null; +//// ECArrayLists cl = null; +// String where = "(" + ContactsContract.Data.MIMETYPE + " = ? or " +// + ContactsContract.Data.MIMETYPE + " = ? or " +// + ContactsContract.Data.MIMETYPE + " = ? or " +// + ContactsContract.Data.MIMETYPE + " = ? or " +// + ContactsContract.Data.MIMETYPE + " = ? or " +// + ContactsContract.Data.MIMETYPE + " = ?)"; +// if (!showSim) { +// where += " AND (" + ContactsContract.RawContacts.ACCOUNT_TYPE +// + " NOT LIKE " + "'%sim%'" + " or " +// + ContactsContract.RawContacts.ACCOUNT_TYPE + " is null)"; +// } +// String[] WhereParams = { +// ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, +// ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE, +// ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, +// ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE, +// ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE, +// ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE}; +// Uri uri = ContactsContract.Data.CONTENT_URI; +// try { +// cursor = CCPAppManager.getContext().getContentResolver().query(uri, projection_getContractList, where, +// WhereParams, ContactsContract.Data.DISPLAY_NAME + "," +// + ContactsContract.Data.RAW_CONTACT_ID); +// if (cursor != null) { +//// cl = new ECArrayLists(); +// ECContacts cli = null; +// +// long tmpid = -1; +// while (cursor.moveToNext()) { +// long rawContactId = cursor.getLong(0); +// String mimetype = cursor.getString(1); +// String data1 = cursor.getString(2); +// int data2 = cursor.getInt(3); +// String data3 = cursor.getString(4); +// +// long Id = cursor.getLong(6); +// if (tmpid != rawContactId) { +// if (cursor.getPosition() != 0 && !TextUtils.isEmpty(cli.getContactid())) { +// if(TextUtils.isEmpty(cli.getNickname())) { +// cli.setNickname(cli.getContactid()); +// } +// cl.add(cli); +// } +// cli = new ECContacts(); +// cli.setId(rawContactId); +// } +// tmpid = rawContactId; +// if (mimetype.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) { +// Phone phone = null; +// if (data2 == ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM) { +// phone = new Phone(rawContactId, Id, data1, data3); +// } else { +// phone = new Phone(rawContactId, Id, data2, data1); +// } +// cli.addPhone(phone); +// } +// if (mimetype.equals(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)) { +// cli.setNickname(data1); +// } +// if (mimetype.equals(ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)) { +// cli.setPhotoId(Id); +// } +// cli.setRemark(ContactLogic.CONVER_PHONTO[ContactSqlManager.getIntRandom(4, 0)]); +// pyFormat(cli); +// // 最后一条记录时添加最后一个 +// if (cursor.getPosition() == (cursor.getCount() - 1)) { +// if(TextUtils.isEmpty(cli.getNickname())) { +// cli.setNickname(cli.getContactid()); +// } +// cl.add(cli); +// } +// } +// } +// } catch (Exception e) { +// e.printStackTrace(); +// throw new Exception(e); +// } finally { +// if (cursor != null) { +// cursor.close(); +// cursor = null; +// } +// if(format != null) { +// format = null; +// } +// } +// if (cl != null) { +// Collections.sort(cl, new PyComparator()); +// } +//// PinyinHelper.release(); +// return cl; +// } + + + private static HanyuPinyinOutputFormat format = null; + public static void pyFormat(ECContacts contact) { + try { + String name = contact.getNickname(); + if (name == null || name.trim().length() == 0) { + return; + } + name = name.trim(); + // 拼音转换设置 + if(format == null) { + format = new HanyuPinyinOutputFormat();// 定义转换格式 + format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);// 不要声调 + format.setVCharType(HanyuPinyinVCharType.WITH_V);// 设置 女 nv + } + + String qpName = ""; // 用于分隔全拼数组 + StringBuilder qpBuilder = new StringBuilder(); + + String qpNameStr = ""; // 完整的全拼Str + StringBuilder qpStrBuilder = new StringBuilder(); + + String qpNumber = ""; // 全拼对应的拨号盘数字 + StringBuilder qpNumberBuilder = new StringBuilder(); + + String jpName = ""; // 简拼 + StringBuilder jpNameBuilder = new StringBuilder(); + + String jpNumber = ""; // 简拼对应的拨号盘数字 + StringBuilder jpNumberBuilder = new StringBuilder(); +// LogUtil.v(name); + int length = 0; + char c = 0; + // 处理英文名 + + if (name.getBytes().length == name.length()) { + qpName = name; + String[] splitName = name.split(" "); + for (String s : splitName) { + length = s.length(); + for (int i = 0; i < length; i++) { + qpNumberBuilder.append(DialNumberMap.numberMap.get(s.charAt(i)) == null ? String.valueOf(s.charAt(i)) : DialNumberMap.numberMap.get(s.charAt(i))); + } + c = s.charAt(0); + qpNumberBuilder.append(" "); + jpNumberBuilder.append(DialNumberMap.numberMap.get(c) == null ? String.valueOf(c) : DialNumberMap.numberMap.get(c)); + jpNameBuilder.append(String.valueOf(c)); + qpStrBuilder.append(String.valueOf(c).toUpperCase()).append(s.subSequence(1, s.length())); + } + length = splitName.length; + for (int i = 0; i < length; i++) { + splitName[i] = splitName[i].toLowerCase(); + } + // jpName = jpNameBuilder.toString(); + } else { // 含有中文 + int namelength = name.length(); + for (int i = 0; i < namelength; i++) { + try { + String[] pyArray = PinyinHelper.toHanyuPinyinStringArray(name.charAt(i), format); + if (pyArray == null) { +// char c = name.charAt(i); + c = name.charAt(i); + if (' ' == c) { + continue; + } + qpStrBuilder.append(c); + Integer num = DialNumberMap.numberMap.get(c); + qpNumberBuilder.append(num == null ? String.valueOf(c) : num).append(" "); + jpNumberBuilder.append(num == null ? String.valueOf(c) : num); + qpBuilder.append(String.valueOf(c).toLowerCase()).append(" "); + jpNameBuilder.append(String.valueOf(c).toLowerCase()); + continue; + } else { + String py = pyArray[0]; + length = py.length(); + for (int j = 0; j < length; j++) { + qpNumberBuilder.append(DialNumberMap.numberMap.get(py.charAt(j))); + } + c = py.charAt(0); + qpNumberBuilder.append(" "); + jpNameBuilder.append(c); + jpNumberBuilder.append(DialNumberMap.numberMap.get(c)); + qpBuilder.append(py).append(" "); + qpStrBuilder.append(String.valueOf(c).toUpperCase()).append(py.subSequence(1, py.length()));// 将拼音第一个字母转成大写后拼接在一起。 + } + } catch (Exception e) { + e.printStackTrace(); + break; + } + } + qpName = qpBuilder.toString(); + } + jpName = jpNameBuilder.toString(); + jpNumber = jpNumberBuilder.toString(); + qpNumber = qpNumberBuilder.toString(); + qpNameStr = qpStrBuilder.toString(); + + if (qpName.length() > 0) { + contact.setQpName(qpName.trim().split(" ")); + contact.setQpNumber(qpNumber.trim().split(" ")); + contact.setJpNumber(jpNumber.trim()); + contact.setJpName(jpName); + contact.setQpNameStr(qpNameStr.trim()); + contact.setQpNumber(qpNumber.trim().split(" ")); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 返回讨论组的头像 + * @return + */ + public static Bitmap getChatroomPhoto(final String groupid) { + try { + if (photoCache.containsKey(groupid)) { + return photoCache.get(groupid); + } + new Thread(new Runnable() { + + @Override + public void run() { + processChatroomPhoto(groupid); + } + }); + processChatroomPhoto(groupid); + } catch (Exception e) { + e.printStackTrace(); + } + if(groupid.toUpperCase().startsWith("G")) { + return BitmapFactory.decodeResource(CCPAppManager.getContext().getResources() , R.drawable.group_head); + } + return mDefaultBitmap; + } + + /** + * @param groupid + */ + private static void processChatroomPhoto(String groupid) { + ArrayList groupMembers = GroupMemberSqlManager.getGroupMemberID(groupid); + if(groupMembers != null) { + ArrayList contactName = ContactSqlManager.getContactRemark(groupMembers.toArray(new String[]{})); + if(contactName != null) { + Bitmap[] bitmaps = new Bitmap[contactName.size()]; + if(bitmaps.length > 9) { + bitmaps = new Bitmap[9]; + } + List bitmapEntitys = getBitmapEntitys(bitmaps.length); + for(int i = 0; i < bitmaps.length; i ++ ) { + Bitmap photo = getPhoto(contactName.get(i)); + photo = ThumbnailUtils.extractThumbnail(photo, (int) bitmapEntitys.get(0).width, (int) bitmapEntitys.get(0).width); + bitmaps[i] = photo; + } + Bitmap combineBitmap = BitmapUtil.getCombineBitmaps(bitmapEntitys,bitmaps); + if(combineBitmap != null) { + photoCache.put(groupid, combineBitmap); + BitmapUtil.saveBitmapToLocal(groupid, combineBitmap); + } + } + } + } + + private static List getBitmapEntitys(int count) { + List mList = new LinkedList(); + String value = ECPropertiesUtil.readData(CCPAppManager.getContext(), String.valueOf(count), R.raw.nine_rect); + LogUtil.d("value=>" + value); + String[] arr1 = value.split(";"); + int length = arr1.length; + for (int i = 0; i < length; i++) { + String content = arr1[i]; + String[] arr2 = content.split(","); + BitmapUtil.InnerBitmapEntity entity = null; + for (int j = 0; j < arr2.length; j++) { + entity = new BitmapUtil.InnerBitmapEntity(); + entity.x = Float.valueOf(arr2[0]); + entity.y = Float.valueOf(arr2[1]); + entity.width = Float.valueOf(arr2[2]); + entity.height = Float.valueOf(arr2[3]); + } + mList.add(entity); + } + return mList; + } + + + public static void getMobileContactPhoto(List list) { + if(list == null || list.isEmpty()) { + return ; + } + for(ECContacts contact : list) { + if(contact.getPhotoId() > 0) { + getMobileContactPhoto(contact); + } + } + } + + public static void getMobileContactPhoto(ECContacts contact) { + try { + Bitmap bitmap = getContactPhoto(contact); + if(bitmap == null) { + return ; + } + contact.setRemark("mobilePhoto://" + contact.getContactid()); + DemoUtils.saveBitmapToLocal(new File(FileAccessor.getAvatarPathName(), contact.getContactid()), bitmap); + ContactSqlManager.updateContactPhoto(contact); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static Bitmap getContactPhoto(ECContacts contact){ + long photoId = contact.getPhotoId(); + if (photoId != 0) { + Cursor cursor = null; + ContentResolver contentResolver = BaseApplication.getInstance().getApplicationContext().getContentResolver(); + try { + cursor = contentResolver.query(ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.CommonDataKinds.Photo._ID, ContactsContract.CommonDataKinds.Photo.PHOTO }, ContactsContract.CommonDataKinds.Photo._ID + " = " + photoId, null, null); + if (cursor != null && cursor.moveToNext()) { + byte[] photo = cursor.getBlob(1); + if (photo != null) { + return BitmapFactory.decodeByteArray(photo, 0, photo.length); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(cursor != null){ + cursor.close(); + cursor = null; + } + } + } + return null; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactSelectListActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactSelectListActivity.java new file mode 100644 index 0000000..ef20fa0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ContactSelectListActivity.java @@ -0,0 +1,187 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.Intent; +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import android.view.KeyEvent; +import android.view.View; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ContactListFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingFragment; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarView; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + +/** + * 联系人选择页面 + * Created by Jorstin on 2015/3/18. + */ +public class ContactSelectListActivity extends ECSuperActivity implements + View.OnClickListener , ContactListFragment.OnContactClickListener { + private ECProgressDialog mPostingdialog; + private static final String TAG = "gdxzExpert.ContactSelectListActivity"; + /**查看群组*/ + public static final int REQUEST_CODE_VIEW_GROUP_OWN = 0x2a; + private TopBarView mTopBarView; + private boolean mNeedResult; + private boolean mShowGroup; + @Override + protected int getLayoutId() { + return R.layout.layout_contact_select; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + FragmentManager fm = getSupportFragmentManager(); + + mNeedResult = getIntent().getBooleanExtra("group_select_need_result", false); + mShowGroup = getIntent().getBooleanExtra("select_type", true); + // Create the list fragment and add it as our sole content. + if (fm.findFragmentById(R.id.contact_container) == null) { + ContactListFragment list = ContactListFragment.newInstance(mShowGroup ? ContactListFragment.TYPE_SELECT : ContactListFragment.TYPE_NON_GROUP); + fm.beginTransaction().add(R.id.contact_container, list).commit(); + } + mTopBarView = getTopBarView(); + String actionBtn = getString(R.string.radar_ok_count, getString(R.string.dialog_ok_button) , 0); + mTopBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, R.drawable.btn_style_brown, null, actionBtn, getString(R.string.select_contacts), null, this); + mTopBarView.setRightBtnEnable(false); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + case R.id.text_right: + List fragments = getSupportFragmentManager().getFragments(); + + if(fragments.get(0) instanceof ContactListFragment) { + String chatuser = ((ContactListFragment) fragments.get(0) ).getChatuser(); + String[] split = chatuser.split(","); + if(split.length == 1 && !mNeedResult) { + Intent intent = new Intent(ContactSelectListActivity.this , ChattingActivity.class); + intent.putExtra(ChattingFragment.RECIPIENTS, split[0]); + startActivity(intent); + finish(); + return ; + } + + if(mNeedResult) { + Intent intent = new Intent(); + intent.putExtra("Select_Conv_User", split); + setResult(-1, intent); + finish(); + return ; + } + + if(split.length > 0) { + postCreatePrivateChatroom(split); + } + } + break; + default: + break; + } + } + + @Override + protected void onResume() { + super.onResume(); + } + + /** + * 创建一个私有群组 + * @param split + */ + private void postCreatePrivateChatroom(String[] split) { + mPostingdialog = new ECProgressDialog(this, R.string.create_chatroom_posting); + mPostingdialog.show(); +// GroupService.doCreateGroup(split, new ECGroupManager.OnInviteJoinGroupListener() { +// +// +// @Override +// public void onInviteJoinGroupComplete(ECError error, String groupId, +// String[] members) { +// if ("000000".equals(error.errorCode)) { +// GroupMemberSqlManager.insertGroupMembers(groupId, members); +// ArrayList contactName = ContactSqlManager.getContactName(members); +// String users = DemoUtils.listToString(contactName, ","); +// Intent intent = new Intent(ContactSelectListActivity.this, ChattingActivity.class); +// intent.putExtra(ChattingFragment.RECIPIENTS, groupId); +// intent.putExtra(ChattingFragment.CONTACT_USER, users); +// startActivity(intent); +// } +// dismissPostingDialog(); +// } +// }); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.KEYCODE_BACK) { + finish(); + } + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + LogUtil.d(TAG, "onActivityResult: requestCode=" + requestCode + + ", resultCode=" + resultCode + ", data=" + data); + + // If there's no data (because the user didn't select a picture and + // just hit BACK, for example), there's nothing to do. + if (requestCode == REQUEST_CODE_VIEW_GROUP_OWN) { + if (data == null) { + return; + } + } else if (resultCode != RESULT_OK) { + LogUtil.d("onActivityResult: bail due to resultCode=" + resultCode); + return; + } + + String contactId = data.getStringExtra(ChattingFragment.RECIPIENTS); + String contactUser = data.getStringExtra(ChattingFragment.CONTACT_USER); + if(contactId != null && contactId.length() > 0) { + Intent intent = new Intent(this , ChattingActivity.class); + intent.putExtra(ChattingFragment.RECIPIENTS, contactId); + intent.putExtra(ChattingFragment.CONTACT_USER, contactUser); + startActivity(intent); + finish(); + } + } + + + @Override + public void onContactClick(int count) { + mTopBarView.setRightBtnEnable(count > 0 ? true:false); + mTopBarView.setRightButtonText(getString(R.string.radar_ok_count, getString(R.string.dialog_ok_button) , count)); + } + + @Override + public void onSelectGroupClick() { + Intent intent = new Intent(this, GroupCardSelectUI.class); + startActivityForResult(intent ,REQUEST_CODE_VIEW_GROUP_OWN); + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if(mPostingdialog == null || !mPostingdialog.isShowing()) { + return ; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/CustomSectionIndexer.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/CustomSectionIndexer.java new file mode 100644 index 0000000..66e1b23 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/CustomSectionIndexer.java @@ -0,0 +1,76 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.widget.SectionIndexer; + +import java.util.Arrays; + +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * com.yuntongxun.ecdemo.ui.contact in ECDemo_Android + * Created by Jorstin on 2015/3/21. + */ +public class CustomSectionIndexer implements SectionIndexer { + private final String[] mSections;// + private final int[] mPositions; + private final int mCount; + + /** + * @param sections + * @param counts + */ + public CustomSectionIndexer(String[] sections, int[] counts) { + if (sections == null || counts == null) { + throw new NullPointerException(); + } + if (sections.length != counts.length) { + throw new IllegalArgumentException( + "The sections and counts arrays must have the same length"); + } + this.mSections = sections; + mPositions = new int[counts.length]; + int position = 0; + for (int i = 0; i < counts.length; i++) { + if(mSections[i] == null) { + mSections[i] = ""; + } else { + mSections[i] = mSections[i].trim(); + } + + mPositions[i] = position; + position += counts[i]; + + LogUtil.i("MySectionIndexer", "counts[" + i + "]:" + counts[i]); + } + mCount = position; + } + + @Override + public Object[] getSections() { + // TODO Auto-generated method stub + return mSections; + } + + @Override + public int getPositionForSection(int section) { + //change by lcq 2012-10-12 section > mSections.length以为>= + if (section < 0 || section >= mSections.length) { + return -1; + } + return mPositions[section]; + } + + @Override + public int getSectionForPosition(int position) { + if (position < 0 || position >= mCount) { + return -1; + } + //注意这个方法的返回值,它就是index<0时,返回-index-2的原因 + //解释Arrays.binarySearch,如果搜索结果在数组中,刚返回它在数组中的索引,如果不在,刚返回第一个比它大的索引的负数-1 + //如果没弄明白,请自己想查看api + int index = Arrays.binarySearch(mPositions, position); + return index >= 0 ? index : -index - 2; //当index小于0时,返回-index-2, + + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ECContacts.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ECContacts.java new file mode 100644 index 0000000..70a53ef --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/ECContacts.java @@ -0,0 +1,238 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.ContentValues; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.regex.Pattern; + +import cn.shangyu.gdxzExpert.ecdemo.storage.AbstractSQLManager; + +/** + * 联系人信息 + * Created by Jorstin on 2015/3/18. + */ +public class ECContacts implements Parcelable { + + public static final Creator CREATOR = new Creator() { + @Override + public ECContacts[] newArray(int size) { + return new ECContacts[size]; + } + + @Override + public ECContacts createFromParcel(Parcel in) { + return new ECContacts(in); + } + }; + + private long id; + /**联系人账号*/ + private String contactid; + /**联系人昵称*/ + private String nickname; + /**联系人类型*/ + private int type; + /**联系人账号Token*/ + private String token; + /**联系人子账号*/ + private String subAccount; + /**联系人子账号Token*/ + private String subToken; + /**备注*/ + private String remark; +// private List phoneList; + // Other + private String[] qpName; + private String jpNumber; //简拼对应的拨号键盘的数字 + private String jpName; + private String qpNameStr; + private String[] qpNumber; //保存拼音对应的拨号键盘的数字 + private long photoId; + /** + * @return the nickname + */ + public String getNickname() { + return nickname; + } + /** + * @param nickname the nickname to set + */ + public void setNickname(String nickname) { + this.nickname = nickname; + } + /** + * @return the remark + */ + public String getRemark() { + return remark; + } + /** + * @param remark the remark to set + */ + public void setRemark(String remark) { + this.remark = remark; + } + /** + * @return the contactid + */ + public String getContactid() { + return contactid; + } + /** + * @param contactid the contactid to set + */ + public void setContactid(String contactid) { + this.contactid = contactid; + } + /** + * @return the type + */ + public int getType() { + return type; + } + /** + * @param type the type to set + */ + public void setType(int type) { + this.type = type; + } + + /** + * @return the id + */ + public long getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(long id) { + this.id = id; + } + private ECContacts (Parcel in) { + this.id = in.readLong(); + this.contactid = in.readString(); + this.type = in.readInt(); + this.nickname = in.readString(); + this.subAccount= in.readString(); + this.subToken= in.readString(); + this.token= in.readString(); + this.remark= in.readString(); + } + + public String getSortKey() { + if(jpName == null || jpName.trim().length() <= 0) { + return "#"; + } + String c = jpName.substring(0, 1); + Pattern pattern = Pattern.compile("^[A-Za-z]+$"); + if (pattern.matcher(c).matches()) { + return c.toUpperCase(); + } else { + return "#"; + } + } + + + + public ContentValues buildContentValues() { + ContentValues values = new ContentValues(); + values.put(AbstractSQLManager.ContactsColumn.CONTACT_ID, this.contactid); + values.put(AbstractSQLManager.ContactsColumn.type, this.type); + values.put(AbstractSQLManager.ContactsColumn.USERNAME, this.nickname ); + values.put(AbstractSQLManager.ContactsColumn.SUBACCOUNT, this.subAccount ); + values.put(AbstractSQLManager.ContactsColumn.SUBTOKEN, this.subToken ); + values.put(AbstractSQLManager.ContactsColumn.TOKEN, this.token ); + values.put(AbstractSQLManager.ContactsColumn.REMARK, this.remark); + return values; + } + + public ECContacts() { + + } + +// public void setClientUser(ClientUser user) { +// setContactid(user.getUserId()); +// setNickname(user.getUserName()); +// setRemark(ContactLogic.CONVER_PHONTO[ContactSqlManager.getIntRandom(4, 0)]); +// } + + public ECContacts(String contactId) { + this.contactid = contactId; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(id); + dest.writeString(this.contactid); + dest.writeInt(this.type); + dest.writeString(this.nickname); + dest.writeString(this.subAccount); + dest.writeString(this.subToken); + dest.writeString(this.token); + dest.writeString(this.remark); + } + +// public void addPhoneList(List phoneList) { +// if (this.phoneList == null) { +// this.phoneList = new ArrayList(); +// } +// this.phoneList.addAll(phoneList); +// phoneList.clear(); +// } +// +// public List getPhoneList() { +// return phoneList; +// } +// +// public void addPhone(Phone phone) { +// if (this.phoneList == null) { +// this.phoneList = new ArrayList(); +// setContactid(phone.getPhoneNum()); +// } +// this.phoneList.add(phone); +// } + + public long getPhotoId() { + return photoId; + } + + public void setPhotoId(long photoId) { + this.photoId = photoId; + } + + public String[] getQpName() { + return qpName; + } + + public void setQpName(String[] qpName) { + this.qpName = qpName; + } + + public void setQpNumber(String[] qpNumber) { + this.qpNumber = qpNumber; + } + + + public void setJpNumber(String jpNumber) { + this.jpNumber = jpNumber; + } + + public void setJpName(String jpName) { + this.jpName = jpName; + } + + public String getQpNameStr() { + return qpNameStr; + } + + public void setQpNameStr(String qpNameStr) { + this.qpNameStr = qpNameStr; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/GroupCardSelectUI.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/GroupCardSelectUI.java new file mode 100644 index 0000000..ed909d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/GroupCardSelectUI.java @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-29 + * @version 4.0 + */ +public class GroupCardSelectUI extends ECSuperActivity implements View.OnClickListener{ + + private static final String TAG = "ECDemo.GroupCardSelectUI"; + /**群组列表*/ + private ListView mListView; + /**群组列表适配器*/ + private GroupSelectAdapter mGroupSelectAdapter; + /**群组列表*/ +// private List mGroups; + private TextView mEmptyView; + + private final AdapterView.OnItemClickListener mItemClickListener + = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { +// ECGroup group = (ECGroup) mGroupSelectAdapter.getItem(position); +// if(group == null) { +// LogUtil.e(TAG, "onItemClick contact null"); +// return ; +// } + + Intent intent = new Intent(); +// intent.putExtra(ChattingFragment.RECIPIENTS, group.getGroupId()); +// intent.putExtra(ChattingFragment.CONTACT_USER, group.getName()); + setResult(RESULT_OK, intent); + finish(); + } + }; + + @Override + protected int getLayoutId() { + return R.layout.group_card_select; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, R.string.address_select_group_card, this); + +// mGroups = GroupSqlManager.getJoinGroups(); +// for(ECGroup group : mGroups) { +// if(group.getName() != null && group.getName().endsWith(GroupService.PRICATE_CHATROOM)) { +// ArrayList member = GroupMemberSqlManager.getGroupMemberID(group.getGroupId()); +// if(member != null) { +// ArrayList contactName = ContactSqlManager.getContactName(member.toArray(new String[]{})); +// String chatroomName = DemoUtils.listToString(contactName, ","); +// group.setName(chatroomName); +// } +// } +// } + initView(); + } + + /** + * 初始化布局参数 + */ + private void initView() { + mListView = (ListView) findViewById(R.id.group_card_select_list); + mGroupSelectAdapter = new GroupSelectAdapter(); + mListView.setAdapter(mGroupSelectAdapter); + mListView.setOnItemClickListener(mItemClickListener); + mEmptyView = (TextView) findViewById(R.id.group_card_empty_tip_tv); +// mEmptyView.setVisibility((mGroups.size() <= 0) ? View.VISIBLE : View.GONE); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + + default: + break; + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.KEYCODE_BACK) { + setResult(RESULT_CANCELED); + finish(); + } + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onDestroy() { + super.onDestroy(); +// if(mGroups != null) { +// mGroups.clear(); +// mGroups = null; +// } + } + + + public class GroupSelectAdapter extends BaseAdapter { + int padding; + + public GroupSelectAdapter() { + padding = getResources().getDimensionPixelSize(R.dimen.OneDPPadding); + } + + @Override + public int getCount() { + return 0; + } + + @Override + public Object getItem(int position) { + return 0; + } + + @Override + public long getItemId(int position) { + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View view = null; + ViewHolder mViewHolder = null; + if(convertView == null || convertView.getTag() == null) { + view = View.inflate(GroupCardSelectUI.this, R.layout.group_card_select_item, null); + + mViewHolder = new ViewHolder(); + mViewHolder.head = (ImageView) view.findViewById(R.id.group_card_item_avatar_iv); + mViewHolder.nick = (TextView) view.findViewById(R.id.group_card_item_nick); + mViewHolder.count = (TextView) view.findViewById(R.id.group_card_item_count_tv); + view.setTag(mViewHolder); + } else { + view = convertView; + mViewHolder = (ViewHolder) view.getTag(); + } +// ECGroup item = (ECGroup) getItem(position); + Bitmap bitmap = ContactLogic.getChatroomPhoto(""); + if(bitmap != null) { + mViewHolder.head.setImageBitmap(bitmap); + mViewHolder.head.setPadding(padding, padding, padding, padding); + + } else { + mViewHolder.head.setImageResource(R.drawable.group_head); + mViewHolder.head.setPadding(0, 0, 0, 0); + } + mViewHolder.nick.setText("item.getName()"); + + return view; + } + + class ViewHolder { + ImageView head; + TextView nick; + TextView count; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/IndexScroller.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/IndexScroller.java new file mode 100644 index 0000000..3956ec2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/IndexScroller.java @@ -0,0 +1,293 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import android.view.MotionEvent; +import android.widget.Adapter; +import android.widget.ListView; +import android.widget.SectionIndexer; + +/** + * 右侧的索引条 + * com.yuntongxun.ecdemo.ui.contact in ECDemo_Android + * Created by Jorstin on 2015/3/21. + */ +public class IndexScroller { + private float mIndexbarWidth; // 索引条宽度 + private float mIndexbarMargin; // 索引条外边距 + private float mPreviewPadding; // + private float mDensity; // 密度 + private float mScaledDensity; // 缩放密度 + private float mAlphaRate; // 透明度 + private int mState = STATE_HIDDEN; // 状态 + private int mListViewWidth; // ListView宽度 + private int mListViewHeight; // ListView高度 + private int mCurrentSection = -1; // 当前部分 + private boolean mIsIndexing = false; // 是否正在索引 + private ListView mListView = null; + private SectionIndexer mIndexer = null; + private String[] mSections = null; + private RectF mIndexbarRect; + + // 4种状态(已隐藏、正在显示、已显示、正在隐藏) + private static final int STATE_HIDDEN = 0; + private static final int STATE_SHOWING = 1; + private static final int STATE_SHOWN = 2; + private static final int STATE_HIDING = 3; + + public IndexScroller(Context context, ListView lv) { + mDensity = context.getResources().getDisplayMetrics().density; + mScaledDensity = context.getResources().getDisplayMetrics().scaledDensity; + mListView = lv; + setAdapter(mListView.getAdapter()); + + mIndexbarWidth = 20 * mDensity; // 索引条宽度 + mIndexbarMargin = 10 * mDensity;// 索引条间距 + mPreviewPadding = 5 * mDensity; // 内边距 + } + + public void draw(Canvas canvas) { + if (mState == STATE_HIDDEN) + return; + + // mAlphaRate determines the rate of opacity + Paint indexbarPaint = new Paint(); + indexbarPaint.setColor(Color.BLACK); + indexbarPaint.setAlpha((int) (64 * mAlphaRate)); + indexbarPaint.setAntiAlias(true); + // 画右侧字母索引的圆矩形 + canvas.drawRoundRect(mIndexbarRect, 5 * mDensity, 5 * mDensity, + indexbarPaint); + + if (mSections != null && mSections.length > 0) { + // Preview is shown when mCurrentSection is set + if (mCurrentSection >= 0) { + Paint previewPaint = new Paint(); // 用来绘画所以条背景的画笔 + previewPaint.setColor(Color.BLACK);// 设置画笔颜色为黑色 + previewPaint.setAlpha(96); // 设置透明度 + previewPaint.setAntiAlias(true);// 设置抗锯齿 + previewPaint.setShadowLayer(3, 0, 0, Color.argb(64, 0, 0, 0)); // 设置阴影层 + + Paint previewTextPaint = new Paint(); // 用来绘画索引字母的画笔 + previewTextPaint.setColor(Color.WHITE); // 设置画笔为白色 + previewTextPaint.setAntiAlias(true); // 设置抗锯齿 + previewTextPaint.setTextSize(50 * mScaledDensity); // 设置字体大小 + + // 文本的宽度 + float previewTextWidth = previewTextPaint + .measureText(mSections[mCurrentSection]); + + float previewSize = 2 * mPreviewPadding + + previewTextPaint.descent() + - previewTextPaint.ascent(); + RectF previewRect = new RectF( + (mListViewWidth - previewSize) / 2, + (mListViewHeight - previewSize) / 2, + (mListViewWidth - previewSize) / 2 + previewSize, + (mListViewHeight - previewSize) / 2 + previewSize); + + // 中间索引的那个框 + canvas.drawRoundRect(previewRect, 5 * mDensity, 5 * mDensity, + previewPaint); + // 绘画索引字母 + canvas.drawText( + mSections[mCurrentSection], + previewRect.left + (previewSize - previewTextWidth) / 2 + - 1, + previewRect.top + mPreviewPadding + - previewTextPaint.ascent() + 1, + previewTextPaint); + } + + // 绘画右侧索引条的字母 + Paint indexPaint = new Paint(); + indexPaint.setColor(Color.WHITE); + indexPaint.setAlpha((int) (255 * mAlphaRate)); + indexPaint.setAntiAlias(true); + indexPaint.setTextSize(12 * mScaledDensity); + + float sectionHeight = (mIndexbarRect.height() - 2 * mIndexbarMargin) + / mSections.length; + float paddingTop = (sectionHeight - (indexPaint.descent() - indexPaint + .ascent())) / 2; + for (int i = 0; i < mSections.length; i++) { + float paddingLeft = (mIndexbarWidth - indexPaint + .measureText(mSections[i])) / 2; + canvas.drawText(mSections[i], mIndexbarRect.left + paddingLeft, + mIndexbarRect.top + mIndexbarMargin + sectionHeight * i + + paddingTop - indexPaint.ascent(), indexPaint); + } + } + } + + public boolean onTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: // 按下,开始索引 + // If down event occurs inside index bar region, start indexing + if (mState != STATE_HIDDEN && contains(ev.getX(), ev.getY())) { + setState(STATE_SHOWN); + + // It demonstrates that the motion event started from index bar + mIsIndexing = true; + // Determine which section the point is in, and move the list to + // that section + mCurrentSection = getSectionByPoint(ev.getY()); + mListView.setSelection(mIndexer + .getPositionForSection(mCurrentSection)); + return true; + } + break; + case MotionEvent.ACTION_MOVE: // 移动 + if (mIsIndexing) { + // If this event moves inside index bar + if (contains(ev.getX(), ev.getY())) { + // Determine which section the point is in, and move the + // list to that section + mCurrentSection = getSectionByPoint(ev.getY()); + mListView.setSelection(mIndexer + .getPositionForSection(mCurrentSection)); + } + return true; + } + break; + case MotionEvent.ACTION_UP: // 抬起 + if (mIsIndexing) { + mIsIndexing = false; + mCurrentSection = -1; + } + if (mState == STATE_SHOWN) + setState(STATE_HIDING); + break; + } + return false; + } + + public void onSizeChanged(int w, int h, int oldw, int oldh) { + mListViewWidth = w; + mListViewHeight = h; + mIndexbarRect = new RectF(w - mIndexbarMargin - mIndexbarWidth, + mIndexbarMargin, w - mIndexbarMargin, h - mIndexbarMargin); + } + + // 显示 + public void show() { + if (mState == STATE_HIDDEN) + setState(STATE_SHOWING); + else if (mState == STATE_HIDING) + setState(STATE_HIDING); + } + + // 隐藏 + public void hide() { + if (mState == STATE_SHOWN) + setState(STATE_HIDING); + } + + public void setAdapter(Adapter adapter) { + if (adapter instanceof SectionIndexer) { + mIndexer = (SectionIndexer) adapter; + mSections = (String[]) mIndexer.getSections(); + } + } + + // 设置状态 + private void setState(int state) { + if (state < STATE_HIDDEN || state > STATE_HIDING) + return; + + mState = state; + switch (mState) { + case STATE_HIDDEN: + // Cancel any fade effect + // 取消渐退的效果 + mHandler.removeMessages(0); + break; + case STATE_SHOWING: + // Start to fade in + // 开始渐进效果 + mAlphaRate = 0; + fade(0); + break; + case STATE_SHOWN: + // Cancel any fade effect + // 取消渐退的效果 + mHandler.removeMessages(0); + break; + case STATE_HIDING: + // Start to fade out after three seconds + // 隐藏3秒钟 + mAlphaRate = 1; + fade(3000); + break; + } + } + + private boolean contains(float x, float y) { + // Determine if the point is in index bar region, which includes the + // right margin of the bar + return (x >= mIndexbarRect.left && y >= mIndexbarRect.top && y <= mIndexbarRect.top + + mIndexbarRect.height()); + } + + private int getSectionByPoint(float y) { + if (mSections == null || mSections.length == 0) + return 0; + if (y < mIndexbarRect.top + mIndexbarMargin) + return 0; + if (y >= mIndexbarRect.top + mIndexbarRect.height() - mIndexbarMargin) + return mSections.length - 1; + return (int) ((y - mIndexbarRect.top - mIndexbarMargin) / ((mIndexbarRect + .height() - 2 * mIndexbarMargin) / mSections.length)); + } + + private void fade(long delay) { + mHandler.removeMessages(0); + mHandler.sendEmptyMessageAtTime(0, SystemClock.uptimeMillis() + delay); + } + + private Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + + switch (mState) { + case STATE_SHOWING: + // Fade in effect + // 淡进效果 + mAlphaRate += (1 - mAlphaRate) * 0.2; + if (mAlphaRate > 0.9) { + mAlphaRate = 1; + setState(STATE_SHOWN); + } + + mListView.invalidate(); + fade(10); + break; + case STATE_SHOWN: + // If no action, hide automatically + setState(STATE_HIDING); + break; + case STATE_HIDING: + // Fade out effect + // 淡出效果 + mAlphaRate -= mAlphaRate * 0.2; + if (mAlphaRate < 0.1) { + mAlphaRate = 0; + setState(STATE_HIDDEN); + } + + mListView.invalidate(); + fade(10); + break; + } + } + + }; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactActivity.java new file mode 100644 index 0000000..ee04f45 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactActivity.java @@ -0,0 +1,654 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import androidx.fragment.app.FragmentManager; +import android.text.Editable; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; + +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.ContactListFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.TabFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; +import cn.shangyu.gdxzExpert.ecdemo.ui.settings.EditConfigureActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + + +/** + * Created by Jorstin on 2015/3/20. + */ +public class MobileContactActivity extends ECSuperActivity implements View.OnClickListener{ + + + @Override + protected int getLayoutId() { + return R.layout.mobile_contacts_list; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + ArrayList objects = ContactLogic.initContacts(); + objects = ContactLogic.converContacts(objects); + ContactSqlManager.insertContacts(objects); + + FragmentManager fm = getSupportFragmentManager(); + // Create the list fragment and add it as our sole content. + if (savedInstanceState == null) { + // Do first time initialization -- add initial fragment. + MobileContactFragment list = new MobileContactFragment(); + fm.beginTransaction().add(R.id.mobile_content, list).commit(); + } + + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, getString(R.string.mobile_contact), this); + + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + + default: + break; + } + } + + + public static class MobileContactFragment extends TabFragment { + private static final String TAG = "ECDemo.MobileContactFragment"; + + /**当前联系人列表类型(查看、联系人选择)*/ + public static final int TYPE_NORMAL = 1; + public static final int TYPE_SELECT = 2; + /**列表类型*/ + private int mType; + private String[] sections = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", + "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", + "Y", "Z" ,"#"}; + private static final String ALL_CHARACTER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ#" ; + /** + * 每个字母最开始的位置 + */ + private HashMap mFirstLetters; + /**当前选择联系人位置*/ + public static ArrayList positions = new ArrayList(); + /** + * 每个首字母对应的position + */ + private String[] mLetterPos; + private List contacts; + private List searchContacts = new ArrayList(); + private ContactListFragment.OnContactClickListener mClickListener; + /** + * 每个姓氏第一次出现对应的position + */ + private int[] counts; + private String mSortKey = "#"; + private PinnedHeaderListView mListView; + private CustomSectionIndexer mCustomSectionIndexer; + private ContactsAdapter mAdapter; + /**选择联系人*/ + private View mSelectCardItem; + + final private View.OnClickListener mSelectClickListener + = new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(MobileContactFragment.this.getActivity() , EditConfigureActivity.class); + intent.putExtra(EditConfigureActivity.EXTRA_EDIT_TITLE , getString(R.string.edit_add_contacts)); + intent.putExtra(EditConfigureActivity.EXTRA_EDIT_HINT , getString(R.string.edit_add_contacts)); + startActivityForResult(intent , 0xa); + } + }; + + // 设置联系人点击事件通知 + private final AdapterView.OnItemClickListener onItemClickListener + = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + int headerViewsCount = mListView.getHeaderViewsCount(); + if(position < headerViewsCount) { + return; + } + int _position = position - headerViewsCount; + + if(mAdapter == null || mAdapter.getItem(_position) == null) { + return ; + } + if(mType != TYPE_NORMAL) { + // 如果是选择联系人模式 + Integer object = Integer.valueOf(_position); + if(positions.contains(object)) { + positions.remove(object); + } else { + positions.add(object); + } + notifyClick(positions.size()); + mAdapter.notifyDataSetChanged(); + return ; + } + + ECContacts contacts = mAdapter.getItem(_position); + if(contacts == null || contacts.getId() == -1) { + ToastUtil.showMessage(R.string.contact_none); + return ; + } +// Intent intent = new Intent(getActivity(), ContactDetailActivity.class); +// intent.putExtra(ContactDetailActivity.MOBILE, contacts.getContactid()); +// intent.putExtra(ContactDetailActivity.DISPLAY_NAME, contacts.getNickname()); +// startActivity(intent); + } + }; + + private TextView empty_tip_tv; + + /** 搜索 **/ + private EditText mSearch; + + + /** + * Create a new instance of ContactListFragment, providing "type" + * as an argument. + */ + public static MobileContactFragment newInstance(int type) { + MobileContactFragment f = new MobileContactFragment(); + + // Supply num input as an argument. + Bundle args = new Bundle(); + args.putInt("type", type); + f.setArguments(args); + + return f; + } + + @Override + protected int getLayoutId() { + return R.layout.mobile_contacts_activity; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mType = getArguments() != null ? getArguments().getInt("type") : TYPE_NORMAL; + if(positions == null ) { + positions = new ArrayList(); + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + if (!(activity instanceof MobileContactSelectActivity) || mType == TYPE_NORMAL) { + return; + } + try { + mClickListener = (ContactListFragment.OnContactClickListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement OnContactClickListener"); + } + } + + private void notifyClick(int count) { + if(mClickListener != null) { + mClickListener.onContactClick(count); + } + } + + /** + * 选择的联系人的手机号 + */ + public String getChatuser() { + StringBuilder selectUser = new StringBuilder(); + for(Integer position : positions) { + ECContacts item = mAdapter.getItem(position); + ContactSqlManager.insertContact(item); + if(item != null ) { + selectUser.append(item.getContactid()).append(","); + } + } + + if(selectUser.length() > 0) { + selectUser.substring(0, selectUser.length() - 1); + } + return selectUser.toString(); + } + + /** + * 选择的联系人的名字 + */ + public String getChatuserName() { + StringBuilder selectUserName = new StringBuilder(); + for(Integer position : positions) { + ECContacts item = mAdapter.getItem(position); + ContactSqlManager.insertContact(item); + if(item != null ) { + selectUserName.append(item.getNickname()).append(","); + } + } + if(selectUserName.length() > 0) { + selectUserName.substring(0, selectUserName.length() - 1); + } + return selectUserName.toString(); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + registerReceiver(new String[]{"ContactsCache.ACTION_ACCOUT_INIT_CONTACTS"}); + if(mListView != null) { + mListView.setAdapter(null); + } + mListView = (PinnedHeaderListView) findViewById(R.id.address_contactlist); + empty_tip_tv = (TextView) findViewById(R.id.empty_tip_tv); + mListView.setOnItemClickListener(onItemClickListener); + //**************************通讯录搜索************************************** + mSearch = (EditText) findViewById(R.id.contact_search); + mSearch.addTextChangedListener(textWatcher);//监听输入名字 + initContactListView(); + findView(); + } + + /** + * 手机搜索监听 + */ + final private TextWatcher textWatcher = new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, + int count) { + + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + + } + + @Override + public void afterTextChanged(Editable s) { + LogUtil.i(TAG, "通讯录输入:" + s); + if(contacts == null || contacts.isEmpty()) { + mListView.setAdapter(null); + empty_tip_tv.setText("无联系人"); + mListView.setEmptyView(empty_tip_tv); + mAdapter.notifyDataSetChanged(); + return ; + } + // 判断输入的是否为空 + if (!TextUtils.isEmpty(s)) { + searchContacts.clear(); + for(ECContacts c : contacts){ + String contactid = c.getContactid();//获取通讯录手机号 + String nickname = c.getNickname();//获取通讯录的名字 + if (!TextUtils.isEmpty(nickname) && !TextUtils.isEmpty(contactid)) { + if (nickname.contains(s) || contactid.contains(s)) {//根据输入的姓名与手机号进行查询获取 + searchContacts.add(c); + LogUtil.i(TAG, "姓名:" + nickname +"手机号:"+ contactid); + } + } + } + //如果没有搜索到 + if (searchContacts == null || searchContacts.isEmpty()) { + empty_tip_tv.setText("无搜索结果"); + mListView.setAdapter(null); + mListView.setEmptyView(empty_tip_tv); + mAdapter.notifyDataSetChanged(); + return; + }else{ + //搜索成功则进行填充数据 + counts = new int[sections.length]; + for(ECContacts c : searchContacts){ + + String firstCharacter = c.getSortKey(); + int index = ALL_CHARACTER.indexOf(firstCharacter); + counts[index]++; + } + mSortKey = searchContacts.get(0).getSortKey(); + mCustomSectionIndexer = new CustomSectionIndexer(sections , counts); + if(mLetterListView != null) { +// mLetterListView.setVisibility(View.GONE); + } + mAdapter.setData(searchContacts, mCustomSectionIndexer); + } + } else { + //此为没有输入 + if(mLetterListView != null) { + mLetterListView.setVisibility(View.VISIBLE); + } + counts = new int[sections.length]; + for(ECContacts c : contacts){ + String firstCharacter = c.getSortKey(); + int index = ALL_CHARACTER.indexOf(firstCharacter); + counts[index]++; + } + mSortKey = contacts.get(0).getSortKey(); + mCustomSectionIndexer = new CustomSectionIndexer(sections , counts); + mAdapter.setData(contacts, mCustomSectionIndexer); + } + //刷新 + if (mAdapter == null) { + mAdapter = new ContactsAdapter(getActivity()); + } + mListView.setAdapter(mAdapter); + mAdapter.notifyDataSetChanged(); + } + }; + + private BladeView mLetterListView; + + /** + * 初始化联系人列表 + */ + private void initContactListView() { + if(mListView != null && mSelectCardItem != null) { + mListView.removeHeaderView(mSelectCardItem); + mListView.setAdapter(null); + } +// contacts = ContactsCache.getInstance().getContacts(); + if(contacts == null) { + mListView.setEmptyView(empty_tip_tv); + return ; + } + if(contacts.isEmpty()) { + mListView.setEmptyView(empty_tip_tv); + } + counts = new int[sections.length]; + for(ECContacts c : contacts){ + + String firstCharacter = c.getSortKey(); + int index = ALL_CHARACTER.indexOf(firstCharacter); + counts[index]++; + } + if(contacts != null && !contacts.isEmpty()) { + mSortKey = contacts.get(0).getSortKey(); + } + mCustomSectionIndexer = new CustomSectionIndexer(sections , counts); + if(mType == TYPE_NORMAL) { + mSelectCardItem = View.inflate(getActivity(), R.layout.group_card_item, null); + TextView startCard = (TextView) mSelectCardItem.findViewById(R.id.card_item_tv); + startCard.setGravity(Gravity.CENTER); + startCard.setText(R.string.edit_add_contacts); + if (startCard != null) { + startCard.setOnClickListener(mSelectClickListener); + } + mListView.addHeaderView(mSelectCardItem); + }else{ + mSelectCardItem = View.inflate(getActivity(), R.layout.header_item_cator, null); + mListView.addHeaderView(mSelectCardItem); + } + mAdapter = new ContactsAdapter(getActivity()); + mListView.setAdapter(mAdapter); + mAdapter.setData(contacts, mCustomSectionIndexer); + mListView.setOnScrollListener(mAdapter); + //設置頂部固定頭部 + mListView.setPinnedHeaderView(LayoutInflater.from(getActivity()).inflate( + R.layout.header_item_cator, mListView, false)); + findViewById(R.id.loading_tips_area).setVisibility(View.GONE); + } + + @Override + public void onResume() { + super.onResume(); + mLetterListView = (BladeView) findViewById(R.id.mLetterListView); + showLetter(mLetterListView); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + LogUtil.d(TAG, "onActivityResult: requestCode=" + requestCode + + ", resultCode=" + resultCode + ", data=" + data); + + // If there's no data (because the user didn't select a picture and + // just hit BACK, for example), there's nothing to do. + if (requestCode == 0xa) { + if (data == null) { + return; + } + } else if (resultCode != RESULT_OK) { + LogUtil.d("onActivityResult: bail due to resultCode=" + resultCode); + return; + } + if(requestCode == 0xa) { + String result_data = data.getStringExtra("result_data"); + if(TextUtils.isEmpty(result_data) || result_data.trim().length() == 0) { + ToastUtil.showMessage(R.string.mobile_list_empty); + return ; + } + CCPAppManager.startChattingAction(MobileContactFragment.this.getActivity() , result_data , result_data , "2,1,2,0", null, true, 0); + } + } + + private void findView() { + + BladeView mLetterListView = (BladeView) findViewById(R.id.mLetterListView); + showLetter(mLetterListView); + mLetterListView.setOnItemClickListener(new BladeView.OnItemClickListener() { + + @Override + public void onItemClick(String s) { + if(s!=null && ALL_CHARACTER != null && mCustomSectionIndexer != null){ + int section = ALL_CHARACTER.indexOf(s); + int position = mCustomSectionIndexer.getPositionForSection(section); + if(position!=-1){ + if(position != 0) { + position = position + 1; + } + mListView.setSelection(position); + } + } + + } + }); + + } + + private void showLetter(BladeView mLetterListView) { + if(mLetterListView == null) { + return ; + } + boolean showBanView = (contacts != null && !contacts.isEmpty()); + mLetterListView.setVisibility(showBanView ? View.VISIBLE : View.GONE); + } + + @Override + protected void onTabFragmentClick() { + + } + + @Override + protected void onReleaseTabUI() { + + } + + @Override + public void onDetach() { + super.onDetach(); + if(positions != null) { + positions.clear(); + positions = null; + } + } + + @Override + protected void handleReceiver(Context context, Intent intent) { + super.handleReceiver(context, intent); +// if(ContactsCache.ACTION_ACCOUT_INIT_CONTACTS.equals(intent.getAction())) { +// LogUtil.d("handleReceiver ACTION_ACCOUT_INIT_CONTACTS"); +// initContactListView(); +// } + } + + class ContactsAdapter extends ArrayAdapter implements PinnedHeaderListView.PinnedHeaderAdapter, AbsListView.OnScrollListener { + CustomSectionIndexer mIndexer; + Context mContext; + private int mLocationPosition = -1; + public ContactsAdapter(Context context) { + super(context, 0); + mContext = context; + } + + + public void setData(List data , CustomSectionIndexer indexer) { + mIndexer = indexer; + setNotifyOnChange(false); + clear(); + setNotifyOnChange(true); + if (data != null) { + for (ECContacts appEntry : data) { + add(appEntry); + } + } + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + View view ; + ViewHolder mViewHolder; + if(convertView == null || convertView.getTag() == null) { + view = View.inflate(mContext, R.layout.mobile_contact_list_item, null); + + mViewHolder = new ViewHolder(); + mViewHolder.mAvatar = (ImageView) view.findViewById(R.id.avatar_iv); + mViewHolder.name_tv = (EmojiconTextView) view.findViewById(R.id.name_tv); + mViewHolder.account = (TextView) view.findViewById(R.id.account); + mViewHolder.checkBox = (CheckBox) view.findViewById(R.id.contactitem_select_cb); + mViewHolder.tvCatalog = (TextView) view.findViewById(R.id.contactitem_catalog); + view.setTag(mViewHolder); + } else { + view = convertView; + mViewHolder = (ViewHolder) view.getTag(); + } + + ECContacts contacts = getItem(position); + if(contacts != null) { + int section = mIndexer.getSectionForPosition(position); + if (mIndexer.getPositionForSection(section) == position) { + mViewHolder.tvCatalog.setVisibility(View.VISIBLE); + mViewHolder.tvCatalog.setText(contacts.getSortKey()); + } else { + mViewHolder.tvCatalog.setVisibility(View.GONE); + } + String remark = contacts.getRemark(); + //String remark = ContactLogic.CONVER_PHONTO[ECSDKUtils.getIntRandom(4, 0)]; + mViewHolder.mAvatar.setImageBitmap(ContactLogic.getPhoto(/*contacts.getRemark()*/remark)); + mViewHolder.name_tv.setText(contacts.getNickname()); + mViewHolder.account.setText(contacts.getContactid()); + + + + if(mType != TYPE_NORMAL) { + mViewHolder.checkBox.setVisibility(View.VISIBLE); + if(mViewHolder.checkBox.isEnabled() && positions != null ) { + mViewHolder.checkBox.setChecked(positions.contains(position)); + } else { + mViewHolder.checkBox.setChecked(false); + } + } else { + mViewHolder.checkBox.setVisibility(View.GONE); + } + } + + return view; + } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + if (view instanceof PinnedHeaderListView) { + ((PinnedHeaderListView) view).configureHeaderView(firstVisibleItem); + } + } + + + @Override + public int getPinnedHeaderState(int position) { + int realPosition = position - 1; + if (realPosition < 0 + || (mLocationPosition != -1 && mLocationPosition == realPosition)) { + return PINNED_HEADER_GONE; + } + mLocationPosition = -1; + int section = mIndexer.getSectionForPosition(realPosition); + int nextSectionPosition = mIndexer.getPositionForSection(section + 1); + if (nextSectionPosition != -1 + && realPosition == nextSectionPosition - 1) { + return PINNED_HEADER_PUSHED_UP; + } + return PINNED_HEADER_VISIBLE; + } + + @Override + public void configurePinnedHeader(View header, int position, int alpha) { + int realPosition = position; + int _position = position - 1; + if(_position < 0) return ; + TextView headView = ((TextView) header.findViewById(R.id.contactitem_catalog)); + if(_position == 0) { + headView.setText(mSortKey); + return ; + } + ECContacts item = getItem(_position); + if(item != null) { + headView.setText(item.getSortKey()); + } + /* int section = mIndexer.getSectionForPosition(realPosition); + String title = (String) mIndexer.getSections()[section];*/ + } + + class ViewHolder { + /**头像*/ + ImageView mAvatar; + /**名称*/ + EmojiconTextView name_tv; + /**账号*/ + TextView account; + /**选择状态*/ + CheckBox checkBox; + TextView tvCatalog; + + } + } + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactSelectActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactSelectActivity.java new file mode 100644 index 0000000..3add21d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/MobileContactSelectActivity.java @@ -0,0 +1,152 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.Intent; +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import android.view.KeyEvent; +import android.view.View; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.ContactListFragment; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingFragment; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarView; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + + +/** + * com.yuntongxun.ecdemo.ui.contact in ECDemo_Android + * Created by Jorstin on 2015/4/1. + */ +public class MobileContactSelectActivity extends ECSuperActivity implements + View.OnClickListener , ContactListFragment.OnContactClickListener { + private ECProgressDialog mPostingdialog; + private static final String TAG = "gdxzExpert.ContactSelectListActivity"; + /**查看群组*/ + public static final int REQUEST_CODE_VIEW_GROUP_OWN = 0x2a; + private TopBarView mTopBarView; + private boolean mNeedResult; + @Override + protected int getLayoutId() { + return R.layout.layout_contact_select; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + FragmentManager fm = getSupportFragmentManager(); + + mNeedResult = getIntent().getBooleanExtra("group_select_need_result", false); + // Create the list fragment and add it as our sole content. + if (fm.findFragmentById(R.id.contact_container) == null) { + MobileContactActivity.MobileContactFragment list = MobileContactActivity.MobileContactFragment.newInstance(ContactListFragment.TYPE_SELECT); + fm.beginTransaction().add(R.id.contact_container, list).commit(); + } + mTopBarView = getTopBarView(); + String actionBtn = getString(R.string.radar_ok_count, getString(R.string.dialog_ok_button) , 0); + mTopBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, R.drawable.btn_style_brown, null, actionBtn, getString(R.string.select_contacts), null, this); + mTopBarView.setRightBtnEnable(false); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + goBack(); + break; + case R.id.text_right: + List fragments = getSupportFragmentManager().getFragments(); + + if(fragments.get(0) instanceof MobileContactActivity.MobileContactFragment) { + String chatuser = ((MobileContactActivity.MobileContactFragment) fragments.get(0) ).getChatuser(); + String chatuserName = ((MobileContactActivity.MobileContactFragment) fragments.get(0) ).getChatuserName(); + String[] split = chatuser.split(","); + String[] splitName = chatuserName.split(","); + if(split.length == 1 && !mNeedResult) { + String recipient = split[0]; + CCPAppManager.startChattingAction(MobileContactSelectActivity.this , recipient,recipient,"2,1,2,0", null, 0); + finish(); + return ; + } + hideSoftKeyboard();//关闭隐藏输入法 + LogUtil.i("mNeedResult:"+mNeedResult+" split:"+split+" splitName=="+splitName); + if(mNeedResult) { + Intent intent = new Intent(); + intent.putExtra("Select_Conv_User", split); + intent.putExtra("Select_Conv_User_Name", splitName); + setResult(-1, intent); + finish(); + return ; + } + } + break; + default: + break; + } + } + + @Override + protected void onResume() { + super.onResume(); + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if(keyCode == KeyEvent.KEYCODE_BACK) { + goBack(); + } + return super.onKeyDown(keyCode, event); + } + + private void goBack() { + hideSoftKeyboard(); + setResult(RESULT_CANCELED); + finish(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + LogUtil.d(TAG, "onActivityResult: requestCode=" + requestCode + + ", resultCode=" + resultCode + ", data=" + data); + + // If there's no data (because the user didn't select a picture and + // just hit BACK, for example), there's nothing to do. + if (requestCode == REQUEST_CODE_VIEW_GROUP_OWN) { + if (data == null) { + return; + } + } else if (resultCode != RESULT_OK) { + LogUtil.d("onActivityResult: bail due to resultCode=" + resultCode); + return; + } + + String contactId = data.getStringExtra(ChattingFragment.RECIPIENTS); + String contactUser = data.getStringExtra(ChattingFragment.CONTACT_USER); + if(contactId != null && contactId.length() > 0) { + Intent intent = new Intent(this , ChattingActivity.class); + intent.putExtra(ChattingFragment.RECIPIENTS, contactId); + intent.putExtra(ChattingFragment.CONTACT_USER, contactUser); + startActivity(intent); + finish(); + } + } + + + @Override + public void onContactClick(int count) { + mTopBarView.setRightBtnEnable(count > 0 ? true:false); + mTopBarView.setRightButtonText(getString(R.string.radar_ok_count, getString(R.string.dialog_ok_button) , count)); + } + + @Override + public void onSelectGroupClick() { + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/PinnedHeaderListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/PinnedHeaderListView.java new file mode 100644 index 0000000..56a68c6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/PinnedHeaderListView.java @@ -0,0 +1,167 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ListAdapter; +import android.widget.ListView; + +/** + * A ListView that maintains a header pinned at the top of the list. The + * pinned header can be pushed up and dissolved as needed. + * Created by Jorstin on 2015/3/19. + */ +public class PinnedHeaderListView extends ListView { + + /** + * Adapter interface. The list adapter must implement this interface. + */ + public interface PinnedHeaderAdapter { + + /** + * Pinned header state: don't show the header. + */ + public static final int PINNED_HEADER_GONE = 0; + + /** + * Pinned header state: show the header at the top of the list. + */ + public static final int PINNED_HEADER_VISIBLE = 1; + + /** + * Pinned header state: show the header. If the header extends beyond + * the bottom of the first shown element, push it up and clip. + */ + public static final int PINNED_HEADER_PUSHED_UP = 2; + + /** + * Computes the desired state of the pinned header for the given + * position of the first visible list item. Allowed return values are + * {@link #PINNED_HEADER_GONE}, {@link #PINNED_HEADER_VISIBLE} or + * {@link #PINNED_HEADER_PUSHED_UP}. + */ + int getPinnedHeaderState(int position); + + /** + * Configures the pinned header view to match the first visible list item. + * + * @param header pinned header view. + * @param position position of the first visible list item. + * @param alpha fading of the header view, between 0 and 255. + */ + void configurePinnedHeader(View header, int position, int alpha); + } + + private static final int MAX_ALPHA = 255; + + private PinnedHeaderAdapter mAdapter; + private View mHeaderView; + private boolean mHeaderViewVisible; + + private int mHeaderViewWidth; + + private int mHeaderViewHeight; + + public PinnedHeaderListView(Context context) { + super(context); + } + + public PinnedHeaderListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PinnedHeaderListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setPinnedHeaderView(View view) { + mHeaderView = view; + + // Disable vertical fading when the pinned header is present + // TODO change ListView to allow separate measures for top and bottom fading edge; + // in this particular case we would like to disable the top, but not the bottom edge. + if (mHeaderView != null) { + setFadingEdgeLength(0); + } + requestLayout(); + } + + @Override + public void setAdapter(ListAdapter adapter) { + super.setAdapter(adapter); + mAdapter = (PinnedHeaderAdapter)adapter; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (mHeaderView != null) { + measureChild(mHeaderView, widthMeasureSpec, heightMeasureSpec); + mHeaderViewWidth = mHeaderView.getMeasuredWidth(); + mHeaderViewHeight = mHeaderView.getMeasuredHeight(); + } + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + if (mHeaderView != null) { + mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight); + configureHeaderView(getFirstVisiblePosition()); + } + } + + public void configureHeaderView(int position) { + if (mHeaderView == null) { + return; + } + + int state = mAdapter.getPinnedHeaderState(position); + switch (state) { + case PinnedHeaderAdapter.PINNED_HEADER_GONE: { + mHeaderViewVisible = false; + break; + } + + case PinnedHeaderAdapter.PINNED_HEADER_VISIBLE: { + mAdapter.configurePinnedHeader(mHeaderView, position, MAX_ALPHA); + if (mHeaderView.getTop() != 0) { + mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight); + } + mHeaderViewVisible = true; + break; + } + + case PinnedHeaderAdapter.PINNED_HEADER_PUSHED_UP: { + View firstView = getChildAt(0); + int bottom = firstView.getBottom(); + int itemHeight = firstView.getHeight(); + int headerHeight = mHeaderView.getHeight(); + int y; + int alpha; + if (bottom < headerHeight) { + y = (bottom - headerHeight); + alpha = MAX_ALPHA * (headerHeight + y) / headerHeight; + } else { + y = 0; + alpha = MAX_ALPHA; + } + mAdapter.configurePinnedHeader(mHeaderView, position, alpha); + if (mHeaderView.getTop() != y) { + mHeaderView.layout(0, y, mHeaderViewWidth, mHeaderViewHeight + y); + } + mHeaderViewVisible = true; + break; + } + } + } + + @Override + protected void dispatchDraw(Canvas canvas) { + super.dispatchDraw(canvas); + if (mHeaderViewVisible) { + drawChild(canvas, mHeaderView, getDrawingTime()); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/StringMatcher.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/StringMatcher.java new file mode 100644 index 0000000..05f0ddf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/contact/StringMatcher.java @@ -0,0 +1,75 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.contact; + +/** + * 字符串匹配工具类 + * com.yuntongxun.ecdemo.ui.contact in ECDemo_Android + * Created by Jorstin on 2015/3/21. + */ +public class StringMatcher { + private final static char KOREAN_UNICODE_START = '가'; + private final static char KOREAN_UNICODE_END = '힣'; + private final static char KOREAN_UNIT = '까' - '가'; + private final static char[] KOREAN_INITIAL = { 'ㄱ', 'ㄲ', 'ㄴ', 'ㄷ', 'ㄸ', + 'ㄹ', 'ㅁ', 'ㅂ', 'ㅃ', 'ㅅ', 'ㅆ', 'ㅇ', 'ㅈ', 'ㅉ', 'ㅊ', 'ㅋ', 'ㅌ', 'ㅍ', + 'ㅎ' }; + + + /** + * 字符匹配 + * @param value 需要keyword匹配的字符串 + * @param keyword #ABCDEFGHIJKLMNOPQRSTUVWXYZ中的一个 + * @return + */ + public static boolean match(String value, String keyword) { + if (value == null || keyword == null) + return false; + if (keyword.length() > value.length()) + return false; + + int i = 0, j = 0; + do { + // 如果是韩文字符并且在韩文初始数组里面 + if (isKorean(value.charAt(i)) && isInitialSound(keyword.charAt(j))) { + if (keyword.charAt(j) == getInitialSound(value.charAt(i))) { + i++; + j++; + } else if (j > 0) + break; + else + i++; + } else { + // 逐个字符匹配 + if (keyword.charAt(j) == value.charAt(i)) { + i++; + j++; + } else if (j > 0) + break; + else + i++; + } + } while (i < value.length() && j < keyword.length()); + // 如果最后j等于keyword的长度说明匹配成功 + return (j == keyword.length()) ? true : false; + } + + // 判断字符是否在韩文字符编码范围内 + private static boolean isKorean(char c) { + if (c >= KOREAN_UNICODE_START && c <= KOREAN_UNICODE_END) + return true; + return false; + } + + // 判断是否在韩文字符里面 + private static boolean isInitialSound(char c) { + for (char i : KOREAN_INITIAL) { + if (c == i) + return true; + } + return false; + } + + // 获得韩文初始化字符数组里面的一个字符 + private static char getInitialSound(char c) { + return KOREAN_INITIAL[(c - KOREAN_UNICODE_START) / KOREAN_UNIT]; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ApplyWithGroupPermissionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ApplyWithGroupPermissionActivity.java new file mode 100644 index 0000000..791657c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ApplyWithGroupPermissionActivity.java @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.content.Intent; +import android.os.Bundle; +import android.widget.EditText; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + + +/** + * 申请加入群组界面 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-31 + * @version 4.0 + */ +public class ApplyWithGroupPermissionActivity extends ECSuperActivity { + + private static final String TAG = "ApplyWithGroupPermissionActivity"; + /**群组ID*/ +// private ECGroup mGroup; + /**群组公告*/ + private EditText mNotice; + String appTitle; + /** + * 群组基本信息 + */ + private GroupProfileView mGroupProfileView; + private ECProgressDialog mPostingdialog; + + @Override + protected int getLayoutId() { + return R.layout.apply_group_activity; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + +// String groupId = getIntent().getStringExtra(GroupInfoActivity.GROUP_ID); +// if(TextUtils.isEmpty(groupId)) { +// ToastUtil.showMessage("群组ID为空"); +// finish(); +// return ; +// } +// + initView(); +// mGroup = GroupSqlManager.getECGroup(groupId); +// syncGroupInf(groupId); +// GroupService.syncGroupInfo(groupId); + } + + /** + * 初始化 + */ + private void initView() { + mGroupProfileView = (GroupProfileView) findViewById(R.id.group_file); + mNotice = (EditText) findViewById(R.id.group_notice); + mNotice.setEnabled(false); + + TextView view = (TextView) findViewById(R.id.red_btn); + view.setBackgroundResource(R.drawable.btn_style_red); +// view.setOnClickListener(this); + view.setText(R.string.group_apply_btn); + } + + private void syncGroupInf(String groupId) { +// mGroup = GroupSqlManager.getECGroup(groupId); +// if(mGroup == null) { +// return ; +// } +// +// if(!TextUtils.isEmpty(mGroup.getName())) { +// mGroupProfileView.setNameText(appTitle = mGroup.getName()); +// getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, mGroup.getName(), this); +// } +// if(!TextUtils.isEmpty(mGroup.getOwner())) { +// ECContacts contact = ContactSqlManager.getContact(mGroup.getOwner()); +// if(contact != null) { +// mGroupProfileView.setOwnerText(contact.getNickname()); +// } +// } +// mGroupProfileView.setGroupIdText(DemoUtils.getGroupShortId(mGroup.getGroupId())); +// +// +// mNotice.setText(mGroup.getDeclare()); + mNotice.setSelection(mNotice.getText().length()); + + + } + + @Override + protected void onResume() { + super.onResume(); +// GroupService.addListener(this); + } + +// @Override +// public void onSyncGroup() { +// +// } +// +// @Override +// public void onSyncGroupInfo(String groupId) { +// syncGroupInf(groupId); +// } +// +// @Override +// public void onGroupDel(String groupId) { +// +// } +// +// @Override +// public void onError(ECError error) { +// +// } +// +// @Override +// public void onClick(View v) { +// switch (v.getId()) { +// case R.id.btn_left: +// hideSoftKeyboard(); +// finish(); +// break; +// case R.id.red_btn: +// +// if(mGroup.getPermission() == ECGroup.Permission.NEED_AUTH) { +// // 需要权限 +// Intent intent = new Intent(ApplyWithGroupPermissionActivity.this , EditConfigureActivity.class); +// intent.putExtra("setting_type" , -1); +// intent.putExtra("edit_title" , "申请理由"); +// startActivityForResult(intent , 0x2a); +// return ; +// } +// applyGroup(""); +// break; +// default: +// break; +// } +// } + + private void applyGroup(String declare) { + mPostingdialog = new ECProgressDialog(this, R.string.loading_press); + mPostingdialog.show(); +// if(TextUtils.isEmpty(declare)) { +// String userName = CCPAppManager.getClientUser().getUserName(); +// declare = getString(R.string.group_apply_reason, userName); +// } +// GroupService.applyGroup(mGroup.getGroupId(), declare, this); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + LogUtil.d(TAG, "onActivityResult: requestCode=" + requestCode + + ", resultCode=" + resultCode + ", data=" + data); + + // If there's no data (because the user didn't select a picture and + // just hit BACK, for example), there's nothing to do. + if (requestCode == 0x2a) { + if (data == null) { + return; + } + } else if (resultCode != RESULT_OK) { + LogUtil.d("onActivityResult: bail due to resultCode=" + resultCode); + return; + } + + if(requestCode == 0x2a) { + applyGroup(data.getStringExtra("result_data")); + } + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if(mPostingdialog == null || !mPostingdialog.isShowing()) { + return ; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } + +// @Override +// public void onApplyGroup(boolean success) { +// dismissPostingDialog(); +// if(!success) { +// return ; +// } +// +// if(mGroup.getPermission() == ECGroup.Permission.AUTO_JOIN) { +// GroupSqlManager.updateJoinStatus(mGroup.getGroupId() , true); +// // 直接加入 +// CCPAppManager.startChattingAction(ApplyWithGroupPermissionActivity.this ,mGroup.getGroupId() , mGroup.getName(), null, null, 0 ); +// } else { +// ToastUtil.showMessage("申请加入群组" + appTitle + "成功,请等待管理员审核"); +// } +// finish(); +// } +// +// @Override +// public void onUpdateGroupAnonymitySuccess(String groupId, +// boolean isAnonymity) { +// // TODO Auto-generated method stub +// +// } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/BaseSearch.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/BaseSearch.java new file mode 100644 index 0000000..95e5850 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/BaseSearch.java @@ -0,0 +1,59 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ActivityTransition; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; + +/** + * com.yuntongxun.ecdemo.ui.group in ECDemo_Android + * Created by Jorstin on 2015/4/2. + */ +@ActivityTransition(2) +public class BaseSearch extends ECSuperActivity implements View.OnClickListener{ + + public static final int SEARCH_BY_ID = 1; + public static final int SEARCH_BY_INDISTINCT_NAME = 2; + public static final String EXTRA_SEARCH_TYPE = "search_type@yuntongxun.com"; + @Override + protected int getLayoutId() { + return R.layout.base_search; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt , -1 , R.string.search_group , this); + + final Intent intent = new Intent(this , SearchGroupActivity.class); + findViewById(R.id.search_by_id).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + intent.putExtra(EXTRA_SEARCH_TYPE , SEARCH_BY_ID); + startActivity(intent); + } + }); + + findViewById(R.id.search_by_indistinct).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + intent.putExtra(EXTRA_SEARCH_TYPE , SEARCH_BY_INDISTINCT_NAME); + startActivity(intent); + } + }); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/DemoGroupNotice.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/DemoGroupNotice.java new file mode 100644 index 0000000..0effcdd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/DemoGroupNotice.java @@ -0,0 +1,192 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.content.ContentValues; +import android.database.Cursor; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; + +/** + * com.yuntongxun.ecdemo.ui.group in ECDemo_Android + * Created by Jorstin on 2015/3/26. + */ +public class DemoGroupNotice{ + + private String id; + private String sender; + private long dateCreate; + private String admin; + private int auditType; + private int confirm; + private int version; + private String declared; + private String groupId; + private String groupName; + private String member; + private String nickName; + private String content; + private int isRead; + + + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public int getIsRead() { + return isRead; + } + + public void setIsRead(int isRead) { + this.isRead = isRead; + } + + public DemoGroupNotice() { + + } + + public DemoGroupNotice(int type) { + setId(DemoUtils.md5(System.currentTimeMillis() + "")); + setAuditType(type); + } + + + public void setCursor(Cursor cursor) { + setId(cursor.getString(0)); + this.content = cursor.getString(1); + setAdmin(cursor.getString(2)); + setConfirm(cursor.getInt(3)); + setGroupId(cursor.getString(4)); + setMember(cursor.getString(5)); + setDateCreate(cursor.getLong(6)); + setGroupName(cursor.getString(7)); + setNickName(cursor.getString(8)); + setAuditType(cursor.getInt(9)); + setDeclared(cursor.getString(10)); + } + + public ContentValues buildContentValues() { + ContentValues values = new ContentValues(); + values.put("declared", getDeclared()); + values.put("verifymsg", content); + values.put("notice_id", getId()); + values.put("groupId", getGroupId()); + values.put("admin", getAdmin()); + values.put("member", getMember()); + values.put("isRead", isRead); + values.put("confirm", getConfirm()); + values.put("dateCreated", getDateCreate()); + values.put("type", getAuditType()); + values.put("nickName", getNickName()); + values.put("groupName", getGroupName()); + values.put("version", getVersion()); + return values; + } + + @Override + public String toString() { + return "DemoGroupNotice{" + + "content='" + content + '\'' + + ", isRead=" + isRead + super.toString()+ + '}'; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public long getDateCreate() { + return dateCreate; + } + + public void setDateCreate(long dateCreate) { + this.dateCreate = dateCreate; + } + + public String getAdmin() { + return admin; + } + + public void setAdmin(String admin) { + this.admin = admin; + } + + public int getAuditType() { + return auditType; + } + + public void setAuditType(int auditType) { + this.auditType = auditType; + } + + public int getConfirm() { + return confirm; + } + + public void setConfirm(int confirm) { + this.confirm = confirm; + } + + public int getVersion() { + return version; + } + + public void setVersion(int version) { + this.version = version; + } + + public String getDeclared() { + return declared; + } + + public void setDeclared(String declared) { + this.declared = declared; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getGroupName() { + return groupName; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public String getMember() { + return member; + } + + public void setMember(String member) { + this.member = member; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ECDiscussionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ECDiscussionActivity.java new file mode 100644 index 0000000..f1efda3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/ECDiscussionActivity.java @@ -0,0 +1,47 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.os.Bundle; +import android.view.View; +import android.view.View.OnClickListener; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.GroupListFragment; + +public class ECDiscussionActivity extends ECSuperActivity implements OnClickListener { + + + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, -1, "讨论组列表", this); + } + + @Override + protected int getLayoutId() { + // TODO Auto-generated method stub + return R.layout.discussion_activity; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + GroupListFragment.sync=false; + break; + + default: + break; + } + + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupNoticeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupNoticeActivity.java new file mode 100644 index 0000000..d24e374 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupNoticeActivity.java @@ -0,0 +1,346 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.content.Context; +import android.database.Cursor; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DateUtil; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupNoticeSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.CCPListAdapter; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + + +/** + * 群组通知列表接口 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-31 + * @version 4.0 + */ +public class GroupNoticeActivity extends ECSuperActivity implements + View.OnClickListener ,GroupService.Callback{ + + private static final String TAG = "ECDemo.GroupNoticeActivity"; + + /**会话消息列表ListView*/ + private ListView mListView; + private GroupNoticeAdapter mAdapter; + private ECProgressDialog mPostingdialog; + + @Override + protected int getLayoutId() { + return R.layout.group_notice_activity; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + initView(); + + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, getString(R.string.app_clear), getString(R.string.app_title_notice), this); + } + + @Override + protected void onResume() { + super.onResume(); + GroupService.addListener(this); + GroupNoticeSqlManager.setAllSessionRead(); + GroupNoticeSqlManager.registerMsgObserver(mAdapter); + mAdapter.notifyChange(); + } + + @Override + protected void onPause() { + super.onPause(); + GroupNoticeSqlManager.unregisterMsgObserver(mAdapter); + } + + + /** + * + */ + private void initView() { + if(mListView != null) { + mListView.setAdapter(null); + } + + mListView = (ListView) findViewById(R.id.group_notice_lv); + View mCallEmptyView = findViewById(R.id.empty_conversation_tv); + mListView.setEmptyView(mCallEmptyView); + mListView.setDrawingCacheEnabled(false); + mListView.setScrollingCacheEnabled(false); + + mListView.setOnItemClickListener(null); + + mAdapter = new GroupNoticeAdapter(this); + mListView.setAdapter(mAdapter); + } + + @Override + public void onSyncGroup() { + + } + + @Override + public void onSyncGroupInfo(String groupId) { + + } + + @Override + public void onGroupDel(String groupId) { + + } + +// @Override +// public void onError(ECError error) { +// dismissPostingDialog(); +// } + + + public class GroupNoticeAdapter extends CCPListAdapter { + + /** + * @param ctx + */ + public GroupNoticeAdapter(Context ctx) { + super(ctx, new DemoGroupNotice()); + } + + @Override + protected void initCursor() { + notifyChange(); + } + + @Override + protected DemoGroupNotice getItem(DemoGroupNotice t, + Cursor cursor) { + DemoGroupNotice message = new DemoGroupNotice(); + message.setCursor(cursor); + return message; + } + + public final CharSequence getContent(NoticeSystemMessage message) { +// if(message.getType() == ECGroupNoticeMessage.ECGroupMessageType.QUIT) { +// +// } + return message.getContent(); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + View view; + ViewHolder mViewHolder; + if (convertView == null || convertView.getTag() == null) { + view = View.inflate(mContext, R.layout.group_notice_list_item, null); + + mViewHolder = new ViewHolder(); + mViewHolder.msgType = (TextView) view.findViewById(R.id.msg_type); + mViewHolder.nickname = (TextView) view.findViewById(R.id.user_nickname); + mViewHolder.ImageViewHeader = (ImageView) view.findViewById(R.id.ImageViewHeader); + mViewHolder.msgTime = (TextView) view.findViewById(R.id.msg_time); + mViewHolder.sysMsgFrom = (TextView) view.findViewById(R.id.sysMsg_from); + mViewHolder.resultShow = (TextView) view.findViewById(R.id.result_show); + mViewHolder.resultSummary = (TextView) view.findViewById(R.id.result_summary); + mViewHolder.acceptBtn = (Button) view.findViewById(R.id.accept_btn); + mViewHolder.refuseBtn = (Button) view.findViewById(R.id.Refuse_btn); + mViewHolder.operationLy = (LinearLayout) view.findViewById(R.id.operation_ly); + view.setTag(mViewHolder); + } else { + view = convertView; + mViewHolder = (ViewHolder) view.getTag(); + } + + final DemoGroupNotice item = getItem(position); + mViewHolder.nickname.setText(item.getGroupName()); + mViewHolder.resultSummary.setText(item.getContent()); + mViewHolder.sysMsgFrom.setText(getString(R.string.str_system_come_from, item.getGroupName())); + mViewHolder.sysMsgFrom.setVisibility(View.GONE); + if(!TextUtils.isEmpty(item.getDeclared())) { +// if(item.getAuditType() == ECGroupNoticeMessage.ECGroupMessageType.MODIFY_GROUP.ordinal()) { +// mViewHolder.sysMsgFrom.setText("附加消息:\r\n" + item.getDeclared()); +// } else { +// mViewHolder.sysMsgFrom.setText("附加消息:" + item.getDeclared()); +// } + mViewHolder.sysMsgFrom.setVisibility(View.VISIBLE); + } + if(item.getDateCreate() > 0) { + mViewHolder.msgTime.setText(DateUtil.getDateString(item.getDateCreate() , DateUtil.SHOW_TYPE_CALL_LOG)); + } else { + mViewHolder.msgTime.setText(""); + } + +// if(item.getConfirm() == GroupNoticeHelper.SYSTEM_MESSAGE_NEED_REPLAY) { +// +// // System information about the invitation to join the group +// // or join the group needs to operate, Whether is it right? Read or unread, +// // as long as the state has not operation can display the operating button +// mViewHolder.operationLy.setVisibility(View.VISIBLE); +// mViewHolder.resultShow.setVisibility(View.GONE); +// +// } else { +// // Other notice about information, only need to display +// // without the need to have relevant operation +// mViewHolder.operationLy.setVisibility(View.GONE); +// mViewHolder.resultShow.setVisibility(View.VISIBLE); +//// if (item.getConfirm() == GroupNoticeHelper.SYSTEM_MESSAGE_REFUSE) { +//// mViewHolder.resultShow.setText(R.string.str_system_message_operation_result_refuse); +//// } else if (item.getConfirm() == GroupNoticeHelper.SYSTEM_MESSAGE_THROUGH) { +//// mViewHolder.resultShow.setText(R.string.str_system_message_operation_result_through); +//// +//// } else{ +//// mViewHolder.resultShow.setVisibility(View.GONE); +//// } +// } + + + mViewHolder.acceptBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // + OperationGroupSystemMsg(true , item); + } + }); + mViewHolder.refuseBtn.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + OperationGroupSystemMsg(false, item); + } + }); + return view; + } + + @Override + protected void notifyChange() { + Cursor cursor = GroupNoticeSqlManager.getCursor(); + setCursor(cursor); + super.notifyDataSetChanged(); + } + + + /** + * 处理接受或者拒绝邀请 + * @param isAccept + * @param imSystemMessage + */ + protected void OperationGroupSystemMsg(final boolean isAccept,final DemoGroupNotice imSystemMessage) { + showProcessDialog(getString(R.string.login_posting_submit)); + +// synchronized (GroupNoticeActivity.class) { +// +// boolean isInvite = imSystemMessage.getAuditType() == ECGroupNoticeMessage.ECGroupMessageType.INVITE.ordinal(); +// ECAckType ackType = isAccept ? ECAckType.AGREE : ECAckType.REJECT; +// GroupService.operationGroupApplyOrInvite(isInvite ,imSystemMessage.getGroupId(), isInvite?imSystemMessage.getAdmin():imSystemMessage.getMember(), ackType, new GroupService.OnAckGroupServiceListener() { +// @Override +// public void onAckGroupService(boolean success) { +// long rows = GroupNoticeSqlManager.updateNoticeOperation(imSystemMessage.getId(), isAccept); +// LogUtil.d(TAG, "[OperationGroupSystemMsg] result :" + rows + " ,"); +// +// if(success){ +// GroupSqlManager.updateJoinStatus(imSystemMessage.getGroupId(), isAccept); +// } +// +// notifyChange(); +// runOnUiThread(new Runnable() { +// @Override +// public void run() { +// dismissPostingDialog(); +// } +// }); +// } +// }); +// } + } + + } + + + static class ViewHolder { + LinearLayout operationLy; + TextView msgType; + TextView resultShow; + TextView nickname; + TextView sysMsgFrom; + TextView msgTime; + ImageView ImageViewHeader; + TextView resultSummary; + Button acceptBtn; // accetp + Button refuseBtn; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if(mAdapter != null) { + mAdapter.closeCursor(); + } + GroupService.addListener(null); + System.gc(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + case R.id.text_right: + GroupNoticeSqlManager.delSessions(); + mAdapter.notifyChange(); + break; + default: + break; + } + } + + + void showProcessDialog(String tips) { + mPostingdialog = new ECProgressDialog(GroupNoticeActivity.this, R.string.login_posting_submit); + mPostingdialog.show(); + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if(mPostingdialog == null || !mPostingdialog.isShowing()) { + return ; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } + + @Override + public void onUpdateGroupAnonymitySuccess(String groupId, + boolean isAnonymity) { + // TODO Auto-generated method stub + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupProfileView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupProfileView.java new file mode 100644 index 0000000..fba6a3f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupProfileView.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-31 + * @version 4.0 + */ +public class GroupProfileView extends LinearLayout { + + /**群组名称*/ + private TextView mGroupNameView; + /**群组创建者*/ + private TextView mGroupOwnerView; + /**群组id*/ + private TextView mGroupIdView; + + /** + * @param context + */ + public GroupProfileView(Context context) { + super(context); + initGroupProfileView(); + } + + /** + * @param context + * @param attrs + */ + public GroupProfileView(Context context, AttributeSet attrs) { + super(context, attrs); + + initGroupProfileView(); + } + + /** + * + */ + private void initGroupProfileView() { + View.inflate(getContext(), R.layout.group_profile, this); + + mGroupNameView = (TextView) findView(R.id.group_name); + mGroupOwnerView = (TextView) findView(R.id.group_owner); + mGroupIdView = (TextView) findView(R.id.group_id); + } + + /** + * 设置群组名称 + * @param text + */ + public final void setNameText(CharSequence text) { + mGroupNameView.setText(text); + } + + /** + * 设置群组名称 + * @param resid + */ + public final void setNameText(int resid) { + setNameText(getContext().getResources().getText(resid)); + } + + /** + * 设置群组创建者 + * @param text + */ + public final void setOwnerText(CharSequence text) { + mGroupOwnerView.setText(text); + } + + /** + * 设置群组ID + * @param text + */ + public final void setGroupIdText(CharSequence text) { + mGroupIdView.setText(text); + } + + /** + * 查找布局 + * @param resid + * @return + */ + private View findView(int resid) { + return findViewById(resid).findViewById(android.R.id.summary); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupService.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupService.java new file mode 100644 index 0000000..72537c0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/GroupService.java @@ -0,0 +1,536 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import java.util.List; + +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupSqlManager; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +/** + * 群组同步 + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-18 + * @version 4.0 + */ +public class GroupService { + private static final String TAG = "ECSDK_Demo.GroupService"; + + public static final String ACTION_SYNC_GROUP = "com.yuntongxun.ecdemo.ACTION_SYNC_GROUP"; + public static final String PRICATE_CHATROOM = "@priategroup.com"; + private static GroupService sInstance; +// private ECGroupManager mGroupManager; + private List mGroupIds; + private Callback mCallback; + private Callback mDisCallback; + + private boolean isSync = false; + + private GroupService() { +// mGroupManager = SDKCoreHelper.getECGroupManager(); + countGroups(); + } + + private static GroupService getInstance() { + if(sInstance == null) { + sInstance = new GroupService(); + } + return sInstance; + } + + /** + * 同步所有的群组 + */ + private void countGroups() { + mGroupIds = GroupSqlManager.getAllGroupId(); + } + + /** + * 开始网络同步群组列表信息 + */ + @SuppressWarnings("deprecation") + public static void syncGroup(Callback callback) { +// getInstance().mGroupManager = SDKCoreHelper.getECGroupManager(); +// if(getInstance().mGroupManager == null || getInstance().isSync) { +// LogUtil.e(TAG, "SDK not ready or isSync " + getInstance().isSync); +// return ; +// } + getInstance().isSync = true; + getInstance().mCallback = callback; + + +// getInstance().mGroupManager.queryOwnGroups(Target.GROUP ,new ECGroupManager.OnQueryOwnGroupsListener() { +// +// @Override +// public void onQueryOwnGroupsComplete(ECError error, List groups) { +// if(getInstance().isSuccess(error)) { +// if (groups == null || groups.isEmpty()) { +// GroupSqlManager.delALLGroup(); +// } else { +// LogUtil.d(TAG , "[syncGroup] groups size :" +groups.size()); +// List allGroupIdByJoin = GroupSqlManager.getAllGroupIdBy(true); +// ArrayList ids = new ArrayList(); +// for (ECGroup group : groups) { +// ids.add(group.getGroupId()); +// } +// +// // 查找不是我的群组 +// if (!allGroupIdByJoin.isEmpty()) { +// for (String id : allGroupIdByJoin) { +// if (ids.contains(id)) { +// continue; +// } +// // 不是我的群组 +// GroupSqlManager.updateUNJoin(id); +// } +// } +// GroupSqlManager.insertGroupInfos(groups, 1); +// } +// getInstance().isSync = false; +// // 更新公共所有群组 +// // syncPublicGroups(); +// if (getInstance().mCallback != null) { +// getInstance().mCallback.onSyncGroup(); +// } +// if (CCPAppManager.getContext() != null) { +// CCPAppManager.getContext().sendBroadcast(new Intent((ACTION_SYNC_GROUP))); +// } +// return ; +// } +// onErrorCallback(error.errorCode, "同步群组失败"); +// } +// }); + } + + //同步讨论组列表 + public static void syncDiscussionGroup(Callback callback) { +// getInstance().mGroupManager = SDKCoreHelper.getECGroupManager(); +// if(getInstance().mGroupManager == null ) { +// LogUtil.e(TAG, "SDK not ready or isSync " + getInstance().isSync); +// return ; +// } + getInstance().mDisCallback = callback; + +// getInstance().mGroupManager.queryOwnGroups(Target.DISCUSSION ,new ECGroupManager.OnQueryOwnGroupsListener() { +// +// @Override +// public void onQueryOwnGroupsComplete(ECError error, List groups) { +// if(getInstance().isSuccess(error)) { +// if (groups == null || groups.isEmpty()) { +// GroupSqlManager.delALLDisGroup(); +// } else { +// LogUtil.d(TAG , "[syncGroup] groups size :" +groups.size()); +// List allGroupIdByJoin = GroupSqlManager.getAllDisGroupIdBy(true); +// ArrayList ids = new ArrayList(); +// for (ECGroup group : groups) { +// ids.add(group.getGroupId()); +// } +// +// // 查找不是我的群组 +// if (!allGroupIdByJoin.isEmpty()) { +// for (String id : allGroupIdByJoin) { +// if (ids.contains(id)) { +// continue; +// } +// // 不是我的群组 +// GroupSqlManager.updateUNJoin(id); +// } +// } +// GroupSqlManager.insertDisGroupInfos(groups, 1); +// } +// getInstance().isSync = false; +// // 更新公共所有群组 +// // syncPublicGroups(); +// if (getInstance().mDisCallback != null) { +// getInstance().mDisCallback.onSyncGroup(); +// } +// if (CCPAppManager.getContext() != null) { +// CCPAppManager.getContext().sendBroadcast(new Intent((ACTION_SYNC_GROUP))); +// } +// return ; +// } +// onErrorCallback(error.errorCode, "同步讨论组失败"); +// } +// }); + } + + + + /** + * 同步群组信息 + * @param groupId + */ + public static void syncGroupInfo(final String groupId) { +// ECGroupManager groupManager = SDKCoreHelper.getECGroupManager(); +// if(groupManager == null) { +// return ; +// } +// groupManager.getGroupDetail(groupId, new ECGroupManager.OnGetGroupDetailListener() { +// +// @Override +// public void onGetGroupDetailComplete(ECError error, ECGroup group) { +// if (getInstance().isSuccess(error)) { +// if (group == null) { +// return; +// } +// +// GroupSqlManager.updateGroup(group); +// if (getInstance().mCallback != null) { +// getInstance().mCallback.onSyncGroupInfo(groupId); +// } +// return; +// } +// onErrorCallback(error.errorCode, "同步群组信息失败"); +// } +// }); + } + + /** + * 解散群组 + * @param groupId + */ + public static void disGroup(String groupId) { + getGroupManager(); +// getInstance().mGroupManager.deleteGroup(groupId, new ECGroupManager.OnDeleteGroupListener() { +// +// @Override +// public void onDeleteGroupComplete(ECError error, String groupId) { +// if (getInstance().isSuccess(error)) { +// GroupMemberSqlManager.delAllMember(groupId); +// IMessageSqlManager.deleteChattingMessage(groupId); +// GroupSqlManager.delGroup(groupId); +// if (getInstance().mCallback != null) { +// getInstance().mCallback.onGroupDel(groupId); +// } +// return; +// } +// getInstance().mCallback.onError(error); +// onErrorCallback(error.errorCode, "解散群组失败"); +// } +// }); + } + + /** + * 退出群组 + * @param groupId + */ + public static void quitGroup(String groupId) { + getGroupManager(); +// getInstance().mGroupManager.quitGroup(groupId, new ECGroupManager.OnQuitGroupListener() { +// +// @Override +// public void onQuitGroupComplete(ECError error, String groupId) { +// if (getInstance().isSuccess(error)) { +// GroupMemberSqlManager.delAllMember(groupId); +// //GroupSqlManager.updateUNJoin(groupId); +// GroupSqlManager.delGroup(groupId); +// IMessageSqlManager.deleteChattingMessage(groupId); +// getInstance().mCallback.onGroupDel(groupId); +// return; +// } +// getInstance().mCallback.onError(error); +// onErrorCallback(error.errorCode, "退出群组失败"); +// } +// }); + + } + + /** + * 修改群组信息 + * @param group + */ +// public static void modifyGroup(ECGroup group) { +// getGroupManager(); +// getInstance().mGroupManager.modifyGroup(group, new ECGroupManager.OnModifyGroupListener() { +// @Override +// public void onModifyGroupComplete(ECError error, ECGroup group) { +// if (getInstance().isSuccess(error)) { +// GroupSqlManager.updateGroup(group); +// if (getInstance().mCallback != null) { +// getInstance().mCallback.onSyncGroupInfo(group.getGroupId()); +// } +// return; +// } +// onErrorCallback(error.errorCode, "修改群组信息失败"); +// } +// +// }); +// } + + private static void onErrorCallback(int code ,String msg) { + if (getInstance().mCallback != null) { +// getInstance().mCallback.onError(new ECError(code , msg)); + } + ToastUtil.showMessage(msg + "[" + code + "]"); + } + + /** + * 申请加入群组 + */ + public static void applyGroup(String groupId , String declare , final OnApplyGroupCallbackListener l) { + getGroupManager(); +// getInstance().mGroupManager.joinGroup(groupId, declare, new ECGroupManager.OnJoinGroupListener() { +// +// @Override +// public void onJoinGroupComplete(ECError error, String groupId) { +// if (getInstance().isSuccess(error) || +// // 群组成员已经存在了 +// SdkErrorCode.MEMBER_ALREADY_EXIST == error.errorCode) { +// +// if (l != null) { +// l.onApplyGroup(true); +// } +// return; +// } +// if (SdkErrorCode.GROUP_NON_EXISTENT == error.errorCode) { +// // 群组不存在 +// GroupSqlManager.delGroup(groupId); +// IMessageSqlManager.deleteAllBySession(groupId); +// } +// if (l != null) { +// if (error != null) { +// ToastUtil.showMessage("申请加入群组失败[" + error.errorCode + "]"); +// } +// l.onApplyGroup(false); +// } +// } +// }); + } + + + /** + * 创建私有群组 + * @param member + */ +// public static void doCreateGroup(final String[] member , final ECGroupManager.OnInviteJoinGroupListener l) { +// // 构建群组参数 +// ECGroup group = new ECGroup(); +// // 设置群组名称 +// group.setName(CCPAppManager.getClientUser().getUserId() + PRICATE_CHATROOM); +// // 设置群组公告 +// group.setDeclare(""); +// // 设置群组类型,如:临时群组(100人) +// group.setGroupType(0); +// // 设置群组验证权限,如:需要身份验证2 +// group.setPermission(ECGroup.Permission.NEED_AUTH); +// // 设置群组创建者(可以不设置,服务器默认接口调用者为创建者) +// group.setOwner(CCPAppManager.getClientUser().getUserId()); +// +// getGroupManager(); +// getInstance().mGroupManager.createGroup(group, new ECGroupManager.OnCreateGroupListener() { +// +// @Override +// public void onCreateGroupComplete(ECError error, ECGroup group) { +// if(getInstance().isSuccess(error)) { +// if(group.getName() != null && group.getName().endsWith(PRICATE_CHATROOM)) { +// ArrayList contactName = ContactSqlManager.getContactName(member); +// String chatroomName = DemoUtils.listToString(contactName, ","); +// group.setName(chatroomName); +// } +// GroupSqlManager.insertGroup(group, true, false,false); +// GroupMemberService.inviteMembers(group.getGroupId(), "", ECGroupManager.InvitationMode.FORCE_PULL, member , l); +// return ; +// } +// onErrorCallback(error.errorCode , "创建群组失败"); +// } +// }); +// } + + + + public static void queryGroupCard(String userId,String groupId,final GroupCardCallBack l){ + getGroupManager(); +// getInstance().mGroupManager.queryMemberCard(userId, groupId, new OnQueryMemberCardListener() { +// +// @Override +// public void onQueryMemberCardComplete(ECError error, ECGroupMember member) { +// // TODO Auto-generated method stub +// +// if (getInstance().isSuccess(error)) { +// if (l != null) { +// l.onQueryGroupCardSuccess(member); +// } +// return; +// } +// +// if(l!=null){ +// l.onQueryGroupCardFailed(error); +// } +// +// } +// }); + } + +// public static void modifyGroupCard(ECGroupMember member,final GroupCardCallBack l){ +// getGroupManager(); +// getInstance().mGroupManager.modifyMemberCard(member, new OnModifyMemberCardListener() { +// +// @Override +// public void onModifyMemberCardComplete(ECError error, ECGroupMember me) { +// +// if (getInstance().isSuccess(error)) { +// if (l != null) { +// l.onModifyGroupCardSuccess(); +// } +// return; +// } +// +// if(l!=null){ +// l.onModifyGroupCardFailed(error); +// } +// +// +// +// } +// }); +// } + + + + +// public static void operationGroupApplyOrInvite(boolean inviteAck ,String groupId , String member , ECAckType ackType , final OnAckGroupServiceListener listener) { +// getGroupManager(); +// if(!inviteAck) { +// getInstance().mGroupManager.ackJoinGroupRequest(groupId , member , ackType , new ECGroupManager.OnAckJoinGroupRequestListener() { +// @Override +// public void onAckJoinGroupRequestComplete(ECError error, String groupId, String member) { +// if(getInstance().isSuccess(error)) { +// if(listener != null) { +// listener.onAckGroupService(true); +// } +// return ; +// } +// onErrorCallback(error.errorCode , "操作失败"); +// } +// }); +// return ; +// } +// +// +// getInstance().mGroupManager.ackInviteJoinGroupRequest(groupId, ackType,member, new ECGroupManager.OnAckInviteJoinGroupRequestListener() { +// @Override +// public void onAckInviteJoinGroupRequestComplete(ECError error, String groupId) { +// if(getInstance().isSuccess(error)) { +// +// if(listener != null) { +// listener.onAckGroupService(true); +// } +// return ; +// } +// onErrorCallback(error.errorCode , "操作失败"); +// } +// +// }); +// +// } + +// public static void setGroupMessageOption(final ECGroupOption option) { +// getGroupManager(); +// getInstance().mGroupManager.setGroupMessageOption(option, new ECGroupManager.OnSetGroupMessageOptionListener() { +// @Override +// public void onSetGroupMessageOptionComplete(ECError error, String groupId) { +// if (getInstance().isSuccess(error)) { +// GroupSqlManager.updateGroupNofity(option.getRule().ordinal(), option.getGroupId()); +// if (getInstance().mCallback != null) { +// getInstance().mCallback.onSyncGroupInfo(option.getGroupId()); +// } +// return; +// } +// onErrorCallback(error.errorCode, "操作失败"); +// } +// }); +// } + public static void setGroupIsAnonymity(final String groupId,final boolean isAnonymity) { + getGroupManager(); + + + } + +// public static void setGroupMessageOption(final ECGroupOption option , final GroupOptionCallback listener) { +// +// getGroupManager(); +// getInstance().mGroupManager.setGroupMessageOption(option, new ECGroupManager.OnSetGroupMessageOptionListener() { +// @Override +// public void onSetGroupMessageOptionComplete(ECError error, String groupId) { +// if(getInstance().isSuccess(error)) { +// GroupSqlManager.updateGroupNofity(option.getRule().ordinal() , option.getGroupId()); +// if(listener != null) { +// listener.onComplete(option.getGroupId()); +// } +// return ; +// } +// if (listener != null) { +// listener.onError(error); +// } +// ToastUtil.showMessage("操作失败[" + error.errorCode + "]"); +// } +// }); +// } + + + /** + * 请求是否成功 + * @param error + * @return + */ +// private boolean isSuccess(ECError error) { +// if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) { +// return true; +// } +// return false; +// } + + private static void getGroupManager() { +// getInstance().mGroupManager = SDKCoreHelper.getECGroupManager(); + } + + /** + * @param callback + */ + public static void addListener(Callback callback) { + getInstance().mCallback = callback; + } + + public interface Callback { + void onSyncGroup(); + void onSyncGroupInfo(String groupId); + void onGroupDel(String groupId); +// void onError(ECError error); + void onUpdateGroupAnonymitySuccess(String groupId, boolean isAnonymity); + + } + + public interface GroupCardCallBack{ + +// void onQueryGroupCardSuccess(ECGroupMember member); +// void onQueryGroupCardFailed(ECError error); + + void onModifyGroupCardSuccess(); +// void onModifyGroupCardFailed(ECError error); + + + } + + public interface GroupOptionCallback { + void onComplete(String groupId); +// void onError(ECError error); + } + + public interface OnApplyGroupCallbackListener { + void onApplyGroup(boolean success); + } + + public interface OnAckGroupServiceListener { + void onAckGroupService(boolean success); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/NoticeSystemMessage.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/NoticeSystemMessage.java new file mode 100644 index 0000000..21135f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/NoticeSystemMessage.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.content.ContentValues; +import android.database.Cursor; + + + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; + + +/** + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-31 + * @version 4.0 + */ +public class NoticeSystemMessage { + + /**消息ID*/ + private String id; + /**消息内容*/ + private String content; + /**群组I的*/ + private String groupId; + /**管理员*/ + private String admin; + /**验证成员*/ + private String member; + private String groupName; + private int isRead; + /**是否需要确认*/ + private int confirm; + /**消息时间*/ + private long dateCreated ; + +// public NoticeSystemMessage(ECGroupMessageType type) { +// super(type); +// } + + /** + * @return the id + */ + public String getId() { + return id; + } + /** + * @param id the id to set + */ + public void setId(String id) { + this.id = id; + } + /** + * @return the content + */ + public String getContent() { + return content; + } + /** + * @param content the content to set + */ + public void setContent(String content) { + this.content = content; + } + /** + * @return the groupId + */ + public String getGroupId() { + return groupId; + } + /** + * @param groupId the groupId to set + */ + public void setGroupId(String groupId) { + this.groupId = groupId; + } + /** + * @return the admin + */ + public String getAdmin() { + return admin; + } + /** + * @param admin the admin to set + */ + public void setAdmin(String admin) { + this.admin = admin; + } + /** + * @return the member + */ + public String getMember() { + return member; + } + /** + * @param member the member to set + */ + public void setMember(String member) { + this.member = member; + } + /** + * @return the isRead + */ + public int getIsRead() { + return isRead; + } + /** + * @param isRead the isRead to set + */ + public void setIsRead(int isRead) { + this.isRead = isRead; + } + /** + * @return the confirm + */ + public int getConfirm() { + return confirm; + } + /** + * @param confirm the confirm to set + */ + public void setConfirm(int confirm) { + this.confirm = confirm; + } + /** + * @return the dateCreated + */ + public long getDateCreated() { + return dateCreated; + } + /** + * @param dateCreated the dateCreated to set + */ + public void setDateCreated(long dateCreated) { + this.dateCreated = dateCreated; + } + + /** + * @return the groupName + */ + public String getGroupName() { + return groupName; + } + + /** + * @param groupName the groupName to set + */ + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public void setCursor(Cursor cursor) { + this.id = cursor.getString(0); + this.content = cursor.getString(1); + this.admin = cursor.getString(2); + this.confirm = cursor.getInt(3); + this.groupId = cursor.getString(4); + this.member = cursor.getString(5); + this.dateCreated = cursor.getLong(6); + this.groupName = cursor.getString(7); + } + + public ContentValues buildContentValues() { + ContentValues values = new ContentValues(); + values.put("declared", content); + values.put("notice_id", DemoUtils.md5(System.currentTimeMillis() + "")); + values.put("groupId", groupId); + values.put("admin", admin); + values.put("member", member); + values.put("isRead", isRead); + values.put("confirm", confirm); + values.put("dateCreated", dateCreated); +// values.put("type", getType().ordinal()); + + return values; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/SearchGroupActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/SearchGroupActivity.java new file mode 100644 index 0000000..bbba768 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/group/SearchGroupActivity.java @@ -0,0 +1,287 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.group; + +import android.os.Bundle; +import android.text.Editable; +import android.text.InputFilter; +import android.text.Spanned; +import android.text.TextWatcher; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +public class SearchGroupActivity extends ECSuperActivity implements View.OnClickListener{ + + private int mSearchType ; + private ListView mResultView; +// private CCPClearEditText mEdittext; +// private ECProgressDialog mPostingdialog; +// private GroupAdapter mGroupAdapter; + + final private TextWatcher textWatcher = new TextWatcher() { + + private int fliteCounts = 20;; + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + } + + @Override + public void afterTextChanged(Editable s) { + LogUtil.d(LogUtil.getLogUtilsTag(textWatcher.getClass()), "fliteCounts=" + fliteCounts); + fliteCounts = fliteCounts(s); + if(fliteCounts < 0) { + fliteCounts = 0; + } + if(checkNameEmpty()) { + getTopBarView().setRightBtnEnable(true); + return ; + } + getTopBarView().setRightBtnEnable(false); +// mGroupAdapter.clear(); + } + }; + + private AdapterView.OnItemClickListener onItemClickListener = new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { +// if(mGroupAdapter != null) { +//// ECGroup dGroup = mGroupAdapter.getItem(position); +//// if(GroupSqlManager.isNeedApply(dGroup.getGroupId())) { +//// Intent intent = new Intent(SearchGroupActivity.this , ApplyWithGroupPermissionActivity.class); +//// intent.putExtra(GroupInfoActivity.GROUP_ID, dGroup.getGroupId()); +//// startActivity(intent); +//// } else { +//// CCPAppManager.startChattingAction(SearchGroupActivity.this , dGroup.getGroupId() , dGroup.getName(), null, null, 0); +//// } +// +// +// clearSearch(); +// } + } + }; + + private void clearSearch() { +// if(mEdittext != null) { +// mEdittext.setText(""); +// } +// if(mGroupAdapter != null) { +//// mGroupAdapter.setData(null); +// } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + mSearchType = getIntent().getIntExtra(BaseSearch.EXTRA_SEARCH_TYPE , BaseSearch.SEARCH_BY_ID); + initView(); + String title = getString(mSearchType == BaseSearch.SEARCH_BY_ID ? R.string.searcha_by_id_tip : R.string.searcha_by_indistinct_name_tip); + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_green, null, + getString(R.string.dialog_ok_button), + title, null, this); + getTopBarView().setRightBtnEnable(false); + } + + private void initView() { +// mEdittext = (CCPClearEditText) findViewById(R.id.search_flite); +// mEdittext.setHint(mSearchType == BaseSearch.SEARCH_BY_ID ? R.string.str_sear_group_id_hint : R.string.str_sear_group_name_hint); + mResultView = (ListView) findViewById(R.id.searcha_result_lv); + View mEmptyView = findViewById(R.id.empty_search_tv); + mResultView.setEmptyView(mEmptyView); +// mGroupAdapter = new GroupAdapter(this); +// mResultView.setAdapter(mGroupAdapter); + mResultView.setOnItemClickListener(onItemClickListener); + + InputFilter[] inputFilters = new InputFilter[1]; + inputFilters[0] = filter; +// mEdittext.setFilters(inputFilters); +// mEdittext.addTextChangedListener(textWatcher); + } + + /** + * @return + */ + private boolean checkNameEmpty() { + return true; +// return mEdittext != null && mEdittext.getText().toString().trim().length() > 0; + } + + @Override + protected int getLayoutId() { + return R.layout.activity_search_group; + } + + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + case R.id.text_right: + hideSoftKeyboard(); +// ECGroupManager ecGroupManager = SDKCoreHelper.getECGroupManager(); +// if(!checkNameEmpty() || ecGroupManager == null) { +// return ; +// } +// mPostingdialog = new ECProgressDialog(this, R.string.search_group_posting); +// mPostingdialog.show(); +// String keywords = mEdittext.getText().toString().trim(); +// ECGroupMatch match = new ECGroupMatch(ECGroupMatch.SearchType.GROUPID); +// if(mSearchType == BaseSearch.SEARCH_BY_INDISTINCT_NAME) { +// match.setSearchType(ECGroupMatch.SearchType.GROUPNAME); +// } +// match.setkeywords(keywords); +// // 调用API创建群组、处理创建群组接口回调 +// ecGroupManager.searchPublicGroups(match , new ECGroupManager.OnSearchPublicGroupsListener() { +// @Override +// public void onSearchPublicGroupsComplete(ECError error, List groups) { +// if(mPostingdialog != null && mPostingdialog.isShowing()) { +// mPostingdialog.dismiss();; +// mPostingdialog = null; +// } +// if(error.errorCode == SdkErrorCode.REQUEST_SUCCESS) { +// GroupSqlManager.insertGroupInfos(groups, -1); +// mGroupAdapter.setData(groups); +// return ; +// } +// ToastUtil.showMessage("查询失败[" + error.errorCode + "]"); +// } +// +// }); + break; + default: + break; + } + } + +// public class GroupAdapter extends ArrayAdapter { +// int padding; +// /** +// * @param ctx +// */ +// public GroupAdapter(Context ctx) { +// super(ctx, 0); +// padding = ctx.getResources().getDimensionPixelSize(R.dimen.OneDPPadding); +// } +// +// public void setData(List data) { +// clear(); +// if(data != null) { +// for(ECGroup group : data) { +// add(group); +// } +// } +// notifyDataSetChanged(); +// } +// +// @Override +// public View getView(int position, View convertView, ViewGroup parent) { +// View view; +// ViewHolder mViewHolder; +// if(convertView == null || convertView.getTag() == null) { +// view = View.inflate(SearchGroupActivity.this , R.layout.search_group_result_item, null); +// +// mViewHolder = new ViewHolder(); +// mViewHolder.group_id = (TextView) view.findViewById(R.id.group_id); +// mViewHolder.group_name = (TextView) view.findViewById(R.id.group_name); +// mViewHolder.join_state = (TextView) view.findViewById(R.id.join_state); +// view.setTag(mViewHolder); +// } else { +// view = convertView; +// mViewHolder = (ViewHolder) view.getTag(); +// } +// +// ECGroup group = getItem(position); +// if(group != null) { +// mViewHolder.group_id.setText(getString(R.string.str_group_id_fmt, DemoUtils.getGroupShortId(group.getGroupId()))); +// mViewHolder.group_name.setText(group.getName()); +// } +// +// return view; +// } +// +// class ViewHolder { +// TextView group_id; +// TextView group_name; +// TextView join_state; +// } +// +// } + + final InputFilter filter = new InputFilter () { + + private int limit = 30; + @Override + public CharSequence filter(CharSequence source, int start, int end, + Spanned dest, int dstart, int dend) { + LogUtil.i(LogUtil.getLogUtilsTag(SearchGroupActivity.class), source + + " start:" + start + " end:" + end + " " + dest + + " dstart:" + dstart + " dend:" + dend); + float count = calculateCounts(dest); + int overplus = limit - Math.round(count) - (dend - dstart); + if(overplus <= 0) { + if ((Float.compare(count, (float) (limit - 0.5D)) == 0) + && (source.length() > 0) + && (!(DemoUtils.characterChinese(source.charAt(0))))) { + return source.subSequence(0, 1); + } + return ""; + } + + if( overplus >= (end - start)) { + return null; + } + int tepmCont = overplus + start; + if((Character.isHighSurrogate(source.charAt(tepmCont - 1))) && (--tepmCont == start)) { + return ""; + } + return source.subSequence(start, tepmCont); + } + + }; + + + /** + * + * @param text + * @return + */ + public static int fliteCounts(CharSequence text) { + int count = (30 - Math.round(calculateCounts(text))); + LogUtil.v(LogUtil.getLogUtilsTag(SearchGroupActivity.class), "count " + count); + return count; + } + + /** + * + * @param text + * @return + */ + public static float calculateCounts(CharSequence text) { + + float lengh = 0.0F; + for(int i = 0; i < text.length() ; i++) { + if(!DemoUtils.characterChinese(text.charAt(i))) { + lengh += 1.0F; + } else { + lengh += 0.5F; + } + } + + return lengh; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/EditConfigureActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/EditConfigureActivity.java new file mode 100644 index 0000000..d95a08a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/EditConfigureActivity.java @@ -0,0 +1,172 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.settings; + +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.text.InputFilter; +import android.text.Spanned; +import android.text.TextUtils; +import android.view.View; + +import java.io.InvalidClassException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconEditText; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + + +public class EditConfigureActivity extends ECSuperActivity implements View.OnClickListener{ + + public static final String EXTRA_EDIT_TITLE = "edit_title"; + public static final String EXTRA_EDIT_HINT = "edit_hint"; + private int mSettingType; + private EmojiconEditText mEdittext; + private ECPreferenceSettings mSettings; + + public static boolean isTop=false; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + isTop=true; + mSettingType = getIntent().getIntExtra("setting_type" , -1); + String title = ""; + if(mSettingType == SettingsActivity.CONFIG_TYPE_APPKEY) { + title = getString(R.string.edit_appkey); + mSettings = ECPreferenceSettings.SETTINGS_APPKEY; + } else if (mSettingType == SettingsActivity.CONFIG_TYPE_TOKEN) { + title = getString(R.string.edit_token); + mSettings = ECPreferenceSettings.SETTINGS_TOKEN; + } else if (mSettingType == SettingsActivity.CONFIG_TYPE_SERVERIP) { + title = getString(R.string.edit_serverip); + // mSettings = ECPreferenceSettings.SETTINGS_SERVERIP; + } else { + mSettingType = -1; + title = getIntent().getStringExtra("edit_title"); + } + + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_green, null, + getString(R.string.dialog_ok_button), + title, null, this); + initView(); + } + + private void initView() { + mEdittext = (EmojiconEditText) findViewById(R.id.content); + InputFilter[] inputFilters = new InputFilter[1]; + inputFilters[0] = filter; + mEdittext.setFilters(inputFilters); + if(mSettingType != -1) { + String config = getConfig(mSettings); + mEdittext.setText(config); + mEdittext.setSelection(mEdittext.getText().length()); + return ; + } + String defaultData = getIntent().getStringExtra("edit_default_data"); + if(!TextUtils.isEmpty(defaultData)) { + mEdittext.setText(defaultData); + mEdittext.setSelection(mEdittext.getText().length()); + } else if (getIntent().hasExtra(EXTRA_EDIT_HINT)) { + mEdittext.setHint(getIntent().getStringExtra(EXTRA_EDIT_HINT)); + } + } + + private String getConfig(ECPreferenceSettings settings) { + SharedPreferences sharedPreferences = ECPreferences.getSharedPreferences(); + String value = sharedPreferences.getString(settings.getId() , (String)settings.getDefaultValue()); + return value; + } + + private void saveSettings(ECPreferenceSettings settings) { + String settingsValue = mEdittext.getText().toString().trim(); + try { + ECPreferences.savePreference(settings ,settingsValue,true); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + @Override + protected int getLayoutId() { + return R.layout.activity_edit_configure; + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + case R.id.text_right: + hideSoftKeyboard(); + if(mSettingType == -1) { + Intent intent = new Intent(); + intent.putExtra("result_data" , mEdittext.getText().toString().toString()); + setResult(RESULT_OK ,intent); + } else { + saveSettings(mSettings); + setResult(RESULT_OK); + } + finish(); + break; + default: + break; + } + } + + final InputFilter filter = new InputFilter () { + + private int limit = 128; + @Override + public CharSequence filter(CharSequence source, int start, int end, + Spanned dest, int dstart, int dend) { + + float count = calculateCounts(dest); + int overplus = limit - Math.round(count) - (dend - dstart); + if(overplus <= 0) { + if ((Float.compare(count, (float) (limit - 0.5D)) == 0) + && (source.length() > 0) + && (!(DemoUtils.characterChinese(source.charAt(0))))) { + return source.subSequence(0, 1); + } + ToastUtil.showMessage("超过最大限制"); + return ""; + } + + if( overplus >= (end - start)) { + return null; + } + int tepmCont = overplus + start; + if((Character.isHighSurrogate(source.charAt(tepmCont - 1))) && (--tepmCont == start)) { + return ""; + } + return source.subSequence(start, tepmCont); + } + + }; + /** + * + * @param text + * @return + */ + public static float calculateCounts(CharSequence text) { + + float lengh = 0.0F; + for(int i = 0; i < text.length() ; i++) { + if(!DemoUtils.characterChinese(text.charAt(i))) { + lengh += 1.0F; + } else { + lengh += 0.5F; + } + } + + return lengh; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingPersionInfoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingPersionInfoActivity.java new file mode 100644 index 0000000..5c43b9a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingPersionInfoActivity.java @@ -0,0 +1,323 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.settings; + +import android.app.DatePickerDialog; +import android.app.Dialog; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.View; +import android.widget.Button; +import android.widget.DatePicker; +import android.widget.EditText; +import android.widget.RadioGroup; +import android.widget.TextView; + +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DateUtil; +import cn.shangyu.gdxzExpert.ecdemo.ui.ActivityTransition; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + +@ActivityTransition(2) +public class SettingPersionInfoActivity extends ECSuperActivity implements View.OnClickListener{ + + private static final int TIME_SETTINGS_DIALOG = 1; + + private EditText nicknameEt; + private RadioGroup mSexRg; + private TextView mBirthTv; + private Button mSignbtn; + + private int mExpirationTimeStartYear; + private int mExpirationTimeStartMonth; + private int mExpirationTimeStartDay; + private ECProgressDialog mPostingdialog; +// private ClientUser clientUser; + private boolean mFromRegist = false; + private final DatePickerDialog.OnDateSetListener mDateSetListener + = new DatePickerDialog.OnDateSetListener() { + + @Override + public void onDateSet(DatePicker view, int year, int monthOfYear, + int dayOfMonth) { + + mExpirationTimeStartYear = year; + mExpirationTimeStartMonth = monthOfYear; + mExpirationTimeStartDay = dayOfMonth; + initExpirationTime(); + } + + }; + +// private CCPFormInputView signInputView; + + @Override + protected boolean isEnableSwipe() { + return !mFromRegist; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_green, null, + getString(R.string.dialog_ok_skip), + getString(R.string.app_title_setting_persioninfo), null, this); + + mFromRegist = getIntent().getBooleanExtra("from_regist" , false); + + initView(); + + if(mFromRegist) { + getTopBarView().setTopBarToStatus(1 , -1 , -1 , R.string.app_title_setting_persioninfo , this); + } else { + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + -1, null, + null, + getString(R.string.app_title_setting_persioninfo), null, this); + } + } + + private void initView() { +// CCPFormInputView formInputView = (CCPFormInputView) findViewById(R.id.nickname_tv); +// signInputView = (CCPFormInputView) findViewById(R.id.sign_tv); +// nicknameEt = formInputView.getFormInputEditView(); +// mSexRg = (RadioGroup) findViewById(R.id.sex_rg); +// mSignbtn = (Button) findViewById(R.id.sign_in_button); + + mSignbtn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + hideSoftKeyboard(); + handlePersionInfo(); + } + }); + + +// clientUser = CCPAppManager.getClientUser(); +// +// if(clientUser == null) { +// return ; +// } + initExpirationTimeView(); +// nicknameEt.setText(clientUser.getUserName()); + nicknameEt.setSelection(nicknameEt.getText().length()); +// signInputView.setText(clientUser.getSignature()); + +// if(clientUser.getSex() == 2) { +// ((RadioButton)mSexRg.getChildAt(0)).setChecked(false); +// ((RadioButton)mSexRg.getChildAt(1)).setChecked(true); +// } else { +// ((RadioButton)mSexRg.getChildAt(0)).setChecked(true); +// ((RadioButton)mSexRg.getChildAt(1)).setChecked(false); +// } + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && mFromRegist) { + return true; + } + + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onResume() { + super.onResume(); +// clientUser = CCPAppManager.getClientUser(); + } + + @Override + protected void onPause() { + super.onPause(); +// if(clientUser != null) { +// saveClientUser(); +// } + } + + private void saveClientUser() { +// try { +// ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_REGIST_AUTO, clientUser.toString(), true); +// } catch (InvalidClassException e) { +// e.printStackTrace(); +// } + } + + private void handlePersionInfo() { +// if(SDKCoreHelper.getECChatManager() == null) { +// return ; +// } + + String nickname = nicknameEt.getText().toString().trim(); + int checkedRadioButtonId = mSexRg.getCheckedRadioButtonId(); +// PersonInfo.Sex sex = PersonInfo.Sex.MALE; +// if(checkedRadioButtonId == R.id.female) { +// sex = PersonInfo.Sex.FEMALE; +// } + + if(TextUtils.isEmpty(nickname)) { + ToastUtil.showMessage("请设置用户昵称"); + return ; + } + +// final String signature=signInputView.getText().toString().trim(); +// if(TextUtils.isEmpty(signature)) { +// ToastUtil.showMessage("请设置用户签名"); +// return ; +// } + + mPostingdialog = new ECProgressDialog(this, R.string.login_posting_submit); + mPostingdialog.show(); +// final PersonInfo.Sex clientSex = sex; + String birth = mBirthTv.getText().toString(); + + +// PersonInfo personInfo =new PersonInfo(); +// personInfo.setBirth(birth); +// personInfo.setNickName(nickname); +// personInfo.setSex(clientSex); +// personInfo.setSign(signature); + + + +// SDKCoreHelper.getECChatManager().setPersonInfo(personInfo, new ECChatManager.OnSetPersonInfoListener() { +// @Override +// public void onSetPersonInfoComplete(ECError e, int version) { +// IMChattingHelper.getInstance().mServicePersonVersion = version; +// dismissPostingDialog(); +// if (SdkErrorCode.REQUEST_SUCCESS == e.errorCode) { +// try { +// ClientUser clientUser = CCPAppManager.getClientUser(); +// if (clientUser != null) { +// clientUser.setUserName(nicknameEt.getText().toString()); +// clientUser.setSex(clientSex.ordinal() + 1); +// clientUser.setBirth(getActiveTimelong()); +// clientUser.setpVersion(version); +// clientUser.setSignature(signature); +// CCPAppManager.setClientUser(clientUser); +// ECContacts contacts = new ECContacts(); +// contacts.setClientUser(clientUser); +// ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_REGIST_AUTO, clientUser.toString(), true); +// ContactSqlManager.insertContact(contacts, clientUser.getSex()); +// } +// +// setResult(RESULT_OK); +// finish(); +// } catch (InvalidClassException e1) { +// e1.printStackTrace(); +// } +// return; +// } +// ToastUtil.showMessage("设置失败,请稍候重试"); +// } +// }); + } + + @Override + protected Dialog onCreateDialog(int id) { + switch (id) { + case TIME_SETTINGS_DIALOG: + return new DatePickerDialog(SettingPersionInfoActivity.this, mDateSetListener, mExpirationTimeStartYear, mExpirationTimeStartMonth, mExpirationTimeStartDay); + default: + break; + } + return null; + } + + @Override + protected void onPrepareDialog(int id, Dialog dialog) { + switch (id) { + case TIME_SETTINGS_DIALOG: + ((DatePickerDialog)dialog).updateDate(mExpirationTimeStartYear, mExpirationTimeStartMonth, mExpirationTimeStartDay); + default: + break; + } + super.onPrepareDialog(id, dialog); + } + + /** + * + */ + private void initExpirationTimeView() { + Calendar calendar = Calendar.getInstance(Locale.CHINA); + // 获取当前日期Date对象 + Date date = new Date(); +// if(clientUser != null && clientUser.getBirth() != 0) { +// date.setTime(clientUser.getBirth()); +// } + //为Calendar对象设置时间为当前日期 + calendar.setTime(date); + // 获取Calendar对象中的年 + mExpirationTimeStartYear = calendar .get(Calendar.YEAR); + // 获取Calendar对象中的月 + mExpirationTimeStartMonth = calendar .get(Calendar.MONTH); + //获取这个月的第几天 + mExpirationTimeStartDay = calendar.get(Calendar.DATE); + +// mBirthTv = (TextView) findViewById(R.id.birth_tv); + mBirthTv.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showDialog(TIME_SETTINGS_DIALOG); + } + }); + + initExpirationTime(); + + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if(mPostingdialog == null || !mPostingdialog.isShowing()) { + return ; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } + + private void initExpirationTime() { + mBirthTv.setText(getActiveTimeString(mExpirationTimeStartYear,mExpirationTimeStartMonth, mExpirationTimeStartDay)); + } + + public static String getActiveTimeString(int year, int month, int day) { + return DateUtil.formatDate(year, month, day); + } + + public long getActiveTimelong() { + return DateUtil.getDateMills(mExpirationTimeStartYear, mExpirationTimeStartMonth, mExpirationTimeStartDay); + } + +// @Override +// protected int getLayoutId() { +//// return R.layout.activity_setting_persion_info; +// } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + case R.id.text_right: + hideSoftKeyboard(); + setResult(RESULT_CANCELED); + finish(); + break; + default: + break; + } + } + + @Override + protected int getLayoutId() { + // TODO Auto-generated method stub + return 0; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingsActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingsActivity.java new file mode 100644 index 0000000..0f197bf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/settings/SettingsActivity.java @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.ui.settings; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import java.io.InvalidClassException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.ui.ECSuperActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.LauncherActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.SettingItem; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECProgressDialog; + + +/** + * 设置界面/设置新消息提醒(声音或者振动) + * @author Jorstin Chan@容联•云通讯 + * @date 2014-12-27 + * @version 4.0 + */ +public class SettingsActivity extends ECSuperActivity implements View.OnClickListener{ + + private static final String TAG = "ECDemo.SettingsActivity"; + + public static final int CONFIG_TYPE_SERVERIP = 1; + public static final int CONFIG_TYPE_APPKEY = 2; + public static final int CONFIG_TYPE_TOKEN = 3; + public static final int CONFIG_TYPE_GROUP_NAME = 4; + public static final int CONFIG_TYPE_GROUP_NOTICE = 5; + /**头像*/ + private ImageView mPhotoView; + /**号码*/ + private EmojiconTextView mUsername; + /**昵称*/ + private TextView mNumber; + private SettingItem mSettingSound; + private SettingItem mSettingShake; + private SettingItem mSettingServerIp; + private SettingItem mSettingAppkey; + private SettingItem mSettingToken; + private SettingItem mSettingExit; + private SettingItem mSettingSwitch; + private SettingItem mSettingUpdater; + private ECProgressDialog mPostingdialog; + + private int mExitType = 0; + + private final View.OnClickListener mSettingExitClickListener + = new View.OnClickListener() { + + @Override + public void onClick(View v) { + View contentView = View.inflate(SettingsActivity.this, R.layout.exit_dialog_view , null); + final CheckBox cb = (CheckBox) contentView.findViewById(R.id.open_dialog_cb); + cb.setChecked(true); + ECAlertDialog alertDialog = new ECAlertDialog(SettingsActivity.this); + alertDialog.setContentView(contentView); + alertDialog.setButton(ECAlertDialog.BUTTON_NEGATIVE, R.string.app_cancel, null); + alertDialog.setButton(ECAlertDialog.BUTTON_POSITIVE, R.string.dialog_alert_close, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + mExitType = 1; + handleLogout(cb.isChecked()); + } + }); + alertDialog.show(); + } + }; + + private final View.OnClickListener mSettingSwitchClickListener + = new View.OnClickListener() { + + @Override + public void onClick(View v) { + + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(SettingsActivity.this, R.string.settings_logout_warning_tip, null, new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + mExitType = 0; + handleLogout(false); + } + + }); + buildAlert.setTitle(R.string.settings_logout); + buildAlert.show(); + } + }; + + private TextView mSignureTv; + + private final class OnConfigClickListener implements View.OnClickListener { + + private int type; + public OnConfigClickListener(int type) { + this.type = type; + } + @Override + public void onClick(View v) { + Intent intent = new Intent(SettingsActivity.this , EditConfigureActivity.class); + intent.putExtra("setting_type" , type); + startActivityForResult(intent , 0xa); + } + } + + /** + * 处理退出操作 + */ + private void handleLogout(boolean isNotice) { + mPostingdialog = new ECProgressDialog(this, R.string.posting_logout); + mPostingdialog.show(); + SDKCoreHelper.logout(isNotice); + } + + @Override + protected int getLayoutId() { + return R.layout.settings_activity; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + initView(); + getTopBarView().setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_green, null, + getString(R.string.app_server_config), + getString(R.string.app_set), null, this); + + registerReceiver(new String[]{SDKCoreHelper.ACTION_LOGOUT}); + } + + /** + * 加载页面布局 + */ + private void initView() { + mPhotoView = (ImageView) findViewById(R.id.desc); + mUsername = (EmojiconTextView) findViewById(R.id.contact_nameTv); + mNumber = (TextView) findViewById(R.id.contact_numer); + mSignureTv = (TextView) findViewById(R.id.contact_signure); + +// mSignureTv.setText(CCPAppManager.getClientUser().getSignature()); + + mSettingSound = (SettingItem) findViewById(R.id.settings_new_msg_sound); + mSettingSound.getCheckedTextView().setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + updateNewMsgNotification(0); + } + }); + mSettingShake = (SettingItem) findViewById(R.id.settings_new_msg_shake); + mSettingShake.getCheckedTextView().setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + updateNewMsgNotification(1); + } + }); + mSettingExit = (SettingItem) findViewById(R.id.setting_exit); + mSettingExit.setOnClickListener(mSettingExitClickListener); + mSettingSwitch = (SettingItem) findViewById(R.id.setting_switch); + mSettingSwitch.setOnClickListener(mSettingSwitchClickListener); + + mSettingServerIp = (SettingItem) findViewById(R.id.settings_serverIP); + mSettingAppkey = (SettingItem) findViewById(R.id.settings_appkey); + mSettingToken = (SettingItem) findViewById(R.id.settings_token); + mSettingUpdater = (SettingItem) findViewById(R.id.settings_update); + mSettingUpdater.setTitleText(getString(R.string.demo_current_version , CCPAppManager.getVersion())); + mSettingServerIp.setOnClickListener(new OnConfigClickListener(CONFIG_TYPE_SERVERIP)); + mSettingAppkey.setOnClickListener(new OnConfigClickListener(CONFIG_TYPE_APPKEY)); + mSettingToken.setOnClickListener(new OnConfigClickListener(CONFIG_TYPE_TOKEN)); + + if( IMChattingHelper.getInstance() != null + && SDKCoreHelper.mSoftUpdate != null + && DemoUtils.checkUpdater(SDKCoreHelper.mSoftUpdate.version)) { + mSettingUpdater.setNewUpdateVisibility(true); + mSettingUpdater.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CCPAppManager.startUpdater(SettingsActivity.this); + } + }); + } else { + mSettingUpdater.setNewUpdateVisibility(false); + } + initConfigValue(); + } + + private void initConfigValue() { + // mSettingServerIp.setDetailText(getConfig(ECPreferenceSettings.SETTINGS_SERVERIP)); + mSettingAppkey.setDetailText(getConfig(ECPreferenceSettings.SETTINGS_APPKEY)); + mSettingToken.setDetailText(getConfig(ECPreferenceSettings.SETTINGS_TOKEN)); + } + + + + private String getConfig(ECPreferenceSettings settings) { + SharedPreferences sharedPreferences = ECPreferences.getSharedPreferences(); + String value = sharedPreferences.getString(settings.getId() , (String)settings.getDefaultValue()); + return value; + } + + + @Override + protected void handleReceiver(Context context, Intent intent) { + super.handleReceiver(context, intent); + if(SDKCoreHelper.ACTION_LOGOUT.equals(intent.getAction())) { + + try { + Intent outIntent = new Intent(SettingsActivity.this, LauncherActivity.class); + outIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + if(mExitType == 1) { + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_FULLY_EXIT, true, true); + startActivity(outIntent); + finish(); + return ; + } + dismissPostingDialog(); +// ECDevice.unInitial(); + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_REGIST_AUTO, "", true); + startActivity(outIntent); + finish(); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + } + + @Override + protected void onResume() { + super.onResume(); + initSettings(); + initActivityState(); + if(mSignureTv!=null){ +// mSignureTv.setText(CCPAppManager.getClientUser().getSignature()); + } + } + + /** + * 初始化 + */ + private void initSettings() { + initNewMsgNotificationSound(); + initNewMsgNotificationShake(); + } + + /** + * 初始化新消息声音设置参数 + */ + private void initNewMsgNotificationSound() { + if(mSettingSound == null) { + return ; + } + mSettingSound.setVisibility(View.VISIBLE); + boolean shakeSetting = ECPreferences.getSharedPreferences().getBoolean(ECPreferenceSettings.SETTINGS_NEW_MSG_SOUND.getId(), + (Boolean) ECPreferenceSettings.SETTINGS_NEW_MSG_SOUND.getDefaultValue()); + mSettingSound.setChecked(shakeSetting); + } + + /** + * 初始化新消息震动设置参数 + */ + private void initNewMsgNotificationShake() { + if(mSettingShake == null) { + return ; + } + mSettingShake.setVisibility(View.VISIBLE); + boolean shakeSetting = ECPreferences.getSharedPreferences().getBoolean(ECPreferenceSettings.SETTINGS_NEW_MSG_SHAKE.getId(), + (Boolean) ECPreferenceSettings.SETTINGS_NEW_MSG_SHAKE.getDefaultValue()); + mSettingShake.setChecked(shakeSetting); + } + + /** + * 更新状态设置 + * @param type + */ + protected void updateNewMsgNotification(int type) { + try { + if(type == 0) { + if(mSettingSound == null) { + return ; + } + mSettingSound.toggle(); + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_NEW_MSG_SOUND, mSettingSound.isChecked(), true); + LogUtil.d(TAG, "com.yuntongxun.ecdemo_new_msg_sound " + mSettingSound.isChecked()); + return ; + } + if(type == 1) { + if(mSettingShake == null) { + return ; + } + mSettingShake.toggle(); + ECPreferences.savePreference(ECPreferenceSettings.SETTINGS_NEW_MSG_SHAKE, mSettingShake.isChecked(), true); + LogUtil.d(TAG, "com.yuntongxun.ecdemo_new_msg_sound " + mSettingSound.isChecked()); + } + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + /** + * 设置页面参数 + */ + private void initActivityState() { +// ClientUser clientUser = CCPAppManager.getClientUser(); +// if(clientUser == null) { +// return ; +// } +// ECContacts contact = ContactSqlManager.getContact(clientUser.getUserId()); +// if(contact == null) { +// return ; +// } + +// mPhotoView.setImageBitmap(ContactLogic.getPhoto(contact.getRemark())); +// mUsername.setText(clientUser.getUserName()); +// mNumber.setText(contact.getContactid()); + + } + + /** + * 关闭对话框 + */ + private void dismissPostingDialog() { + if(mPostingdialog == null || !mPostingdialog.isShowing()) { + return ; + } + mPostingdialog.dismiss(); + mPostingdialog = null; + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.btn_left: + hideSoftKeyboard(); + finish(); + break; + case R.id.text_right: + startActivity(new Intent(this , SettingPersionInfoActivity.class)); + break; + default: + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/DemoMessageReceiver.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/DemoMessageReceiver.java new file mode 100644 index 0000000..6180a4b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/DemoMessageReceiver.java @@ -0,0 +1,309 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.xiaomi; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; + +import com.xiaomi.mipush.sdk.ErrorCode; +import com.xiaomi.mipush.sdk.MiPushClient; +import com.xiaomi.mipush.sdk.MiPushCommandMessage; +import com.xiaomi.mipush.sdk.MiPushMessage; +import com.xiaomi.mipush.sdk.PushMessageReceiver; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + + +/** + * 1、PushMessageReceiver 是个抽象类,该类继承了 BroadcastReceiver。
+ * 2、需要将自定义的 DemoMessageReceiver 注册在 AndroidManifest.xml 文件中: + *
+ * {@code
+ *  
+ *      
+ *          
+ *      
+ *      
+ *          
+ *      
+ *      
+ *          
+ *      
+ *  
+ *  }
+ * 3、DemoMessageReceiver 的 onReceivePassThroughMessage 方法用来接收服务器向客户端发送的透传消息。
+ * 4、DemoMessageReceiver 的 onNotificationMessageClicked 方法用来接收服务器向客户端发送的通知消息, + * 这个回调方法会在用户手动点击通知后触发。
+ * 5、DemoMessageReceiver 的 onNotificationMessageArrived 方法用来接收服务器向客户端发送的通知消息, + * 这个回调方法是在通知消息到达客户端时触发。另外应用在前台时不弹出通知的通知消息到达客户端也会触发这个回调函数。
+ * 6、DemoMessageReceiver 的 onCommandResult 方法用来接收客户端向服务器发送命令后的响应结果。
+ * 7、DemoMessageReceiver 的 onReceiveRegisterResult 方法用来接收客户端向服务器发送注册命令后的响应结果。
+ * 8、以上这些方法运行在非 UI 线程中。 + * + * @author mayixiang + */ +public class DemoMessageReceiver extends PushMessageReceiver { + + private String mRegId; + private String mTopic; + private String mAlias; + private String mAccount; + private String mStartTime; + private String mEndTime; + + + @Override + public void onReceivePassThroughMessage(Context context, MiPushMessage message) { + + String log = context.getString(R.string.recv_passthrough_message, message.getContent()); + Log.d("gdxzxm",log); + + if (!TextUtils.isEmpty(message.getTopic())) { + mTopic = message.getTopic(); + } else if (!TextUtils.isEmpty(message.getAlias())) { + mAlias = message.getAlias(); + } + + Message msg = Message.obtain(); + msg.obj = log; + BaseApplication.getHandler().sendMessage(msg); + } + + @Override + public void onNotificationMessageClicked(Context context, MiPushMessage message) { + + String log = context.getString(R.string.click_notification_message, message.getContent()); + Log.d("gdxzxm",log); + + if (!TextUtils.isEmpty(message.getTopic())) { + mTopic = message.getTopic(); + } else if (!TextUtils.isEmpty(message.getAlias())) { + mAlias = message.getAlias(); + } + + Message msg = Message.obtain(); + if (message.isNotified()) { + msg.obj = log; + } + BaseApplication.getHandler().sendMessage(msg); + } + + @Override + public void onNotificationMessageArrived(Context context, MiPushMessage message) { + + String log = context.getString(R.string.arrive_notification_message, message.getContent()); + Log.d("gdxzxm",log); + if (!TextUtils.isEmpty(message.getTopic())) { + mTopic = message.getTopic(); + } else if (!TextUtils.isEmpty(message.getAlias())) { + mAlias = message.getAlias(); + } + + Message msg = Message.obtain(); + msg.obj = message.getContent(); + BaseApplication.getHandler().sendMessage(msg); + } + + @Override + public void onCommandResult(Context context, MiPushCommandMessage message) { + + String command = message.getCommand(); + List arguments = message.getCommandArguments(); + String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null); + String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null); + String log; + if (MiPushClient.COMMAND_REGISTER.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mRegId = cmdArg1; + log = context.getString(R.string.register_success); + } else { + log = context.getString(R.string.register_fail); + } + } else if (MiPushClient.COMMAND_SET_ALIAS.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mAlias = cmdArg1; + log = context.getString(R.string.set_alias_success, mAlias); + } else { + log = context.getString(R.string.set_alias_fail, message.getReason()); + } + } else if (MiPushClient.COMMAND_UNSET_ALIAS.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mAlias = cmdArg1; + log = context.getString(R.string.unset_alias_success, mAlias); + } else { + log = context.getString(R.string.unset_alias_fail, message.getReason()); + } + } else if (MiPushClient.COMMAND_SET_ACCOUNT.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mAccount = cmdArg1; + log = context.getString(R.string.set_account_success, mAccount); + } else { + log = context.getString(R.string.set_account_fail, message.getReason()); + } + } else if (MiPushClient.COMMAND_UNSET_ACCOUNT.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mAccount = cmdArg1; + log = context.getString(R.string.unset_account_success, mAccount); + } else { + log = context.getString(R.string.unset_account_fail, message.getReason()); + } + } else if (MiPushClient.COMMAND_SUBSCRIBE_TOPIC.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mTopic = cmdArg1; + log = context.getString(R.string.subscribe_topic_success, mTopic); + } else { + log = context.getString(R.string.subscribe_topic_fail, message.getReason()); + } + } else if (MiPushClient.COMMAND_UNSUBSCRIBE_TOPIC.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mTopic = cmdArg1; + log = context.getString(R.string.unsubscribe_topic_success, mTopic); + } else { + log = context.getString(R.string.unsubscribe_topic_fail, message.getReason()); + } + } else if (MiPushClient.COMMAND_SET_ACCEPT_TIME.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mStartTime = cmdArg1; + mEndTime = cmdArg2; + log = context.getString(R.string.set_accept_time_success, mStartTime, mEndTime); + } else { + log = context.getString(R.string.set_accept_time_fail, message.getReason()); + } + } else { + log = message.getReason(); + } + Log.d("gdxzxm",log); + LogUtil.i("gdxzxm","log1 = "+log); + LogUtil.i("gdxzxm","mRegId = "+mRegId); + Constant.regID = mRegId; + + LogUtil.i("gdxzxm","mTopic1 = "+mTopic); + LogUtil.i("gdxzxm","mAlias1 = "+mAlias); + Message msg = Message.obtain(); + msg.obj = log; + BaseApplication.getHandler().sendMessage(msg); + } + + @Override + public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) { + + String command = message.getCommand(); + List arguments = message.getCommandArguments(); + String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null); + String log; + if (MiPushClient.COMMAND_REGISTER.equals(command)) { + if (message.getResultCode() == ErrorCode.SUCCESS) { + mRegId = cmdArg1; + log = context.getString(R.string.register_success); + } else { + log = context.getString(R.string.register_fail); + } + } else { + log = message.getReason(); + } + Log.d("gdxzxm",log); + Message msg = Message.obtain(); + msg.obj = log; + BaseApplication.getHandler().sendMessage(msg); + } + + @Override + public void onRequirePermissions(Context context, String[] permissions) { + super.onRequirePermissions(context, permissions); + + + if (Build.VERSION.SDK_INT >= 23 && context.getApplicationInfo().targetSdkVersion >= 23) { + Intent intent = new Intent(); + intent.putExtra("permissions", permissions); + intent.setComponent(new ComponentName(context.getPackageName(), PermissionActivity.class.getCanonicalName())); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); + context.startActivity(intent); + } + } + + @SuppressLint("SimpleDateFormat") + private static String getSimpleDate() { + return new SimpleDateFormat("MM-dd hh:mm:ss").format(new Date()); + } + + public String arrayToString(String[] strings) { + String result = " "; + for (String str : strings) { + result = result + str + " "; + } + return result; + } + public static class DemoHandler extends Handler { + + private Context context; + + public DemoHandler(Context context) { + this.context = context; + } + + @Override + public void handleMessage(Message msg) { + String s = (String) msg.obj; + Xmmethod("肝胆相照专家版",s); + } + } + + public static void Xmmethod(String title, String content) + { + Log.d("gdxzxm","Xmmethod "+content); + if (Build.VERSION.SDK_INT>=26){ + @SuppressLint("WrongConstant") NotificationChannel channel = new NotificationChannel("随访消息", "随访消息", NotificationManager.IMPORTANCE_HIGH); + channel.setShowBadge(true);// 打开角标 + NotificationManager notificationManager= (NotificationManager) BaseApplication.getContext().getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.createNotificationChannel(channel); + Intent intent = new Intent(BaseApplication.getContext(), MainActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(BaseApplication.getContext(), 35, + intent, PendingIntent.FLAG_UPDATE_CURRENT); + Notification notification = new Notification.Builder(BaseApplication.getContext(), "随访消息") + .setContentTitle(title) + .setContentText(content) + .setNumber( IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient)) + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent).build(); + notification.flags |= notification.FLAG_AUTO_CANCEL; +// notificationManager.notify(NOTIFY_ID_PUSHCONTENT,notification); + }else{ +// Notification notification = getNotification_25(title, content).build(); +// notification.flags |= notification.FLAG_AUTO_CANCEL; + +// notificationManager.notify(NOTIFY_ID_PUSHCONTENT,notification); + } + String brand = Build.BRAND; + Log.d("gdxzxm","brand = "+brand); + if ("Xiaomi".equals(brand)){ + //小米不需要原生角标 + }else { + try { +// OnUpdateMsgUnreadCounts(); + }catch (Exception e){ + } + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/PermissionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/PermissionActivity.java new file mode 100644 index 0000000..485033a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/ui/xiaomi/PermissionActivity.java @@ -0,0 +1,49 @@ +package cn.shangyu.gdxzExpert.ecdemo.ui.xiaomi; + +import android.app.Activity; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; + +public class PermissionActivity extends Activity { + private static final int PERMISSION_REQUEST = 1; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + if (Build.VERSION.SDK_INT >= 23) { + Intent intent = getIntent(); + String permissions[] = intent.getStringArrayExtra("permissions"); + for (int i = 0; i < permissions.length; ++i) { + if (checkSelfPermission(permissions[i]) != PackageManager.PERMISSION_GRANTED) { + requestPermissions(permissions, PERMISSION_REQUEST); + break; + } + } + } + + } + + @Override + public void onRequestPermissionsResult (int requestCode, + String[] permissions, + int[] grantResults) { + if (requestCode == PERMISSION_REQUEST) { + boolean granted = false; + for (int i = 0; i < grantResults.length; ++i) { + if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { + granted = true; + } + } + + if (granted) { + Log.w("PermissionActivity", "Permissions granted:"); +// BaseApplication.reInitPush(this); + } + finish(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/CCPTextView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/CCPTextView.java new file mode 100644 index 0000000..195576c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/CCPTextView.java @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.EmoticonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; + + +/** + * @author 容联•云通讯 + * @date 2014-12-9 + * @version 4.0 + */ +public class CCPTextView extends TextView { + + private GestureDetector mDetector; + private CCPDoubleClickPreviewListener mPreviewListener; + + /** + * ignore Action Up + */ + private boolean mIgnoreNextActionUp; + /** + * @param context + */ + public CCPTextView(Context context) { + super(context); + } + + /** + * @param context + * @param attrs + */ + public CCPTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + public CCPTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * + * @param l + */ + public void setPreviewListener(CCPDoubleClickPreviewListener l) { + mPreviewListener = l; + } + + @Override + public void cancelLongPress() { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "cancelLongPress , should ignore Action Up Event next time"); + mIgnoreNextActionUp = true; + super.cancelLongPress(); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + + int action = event.getAction(); + + if(action == MotionEvent.ACTION_DOWN) { + mIgnoreNextActionUp = false; + } + + + boolean result = false; + if(mPreviewListener != null && mDetector != null) { + result = mDetector.onTouchEvent(event); + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "dispatcher onTouchEvent result " + result); + } + + + if(action == MotionEvent.ACTION_UP && mIgnoreNextActionUp) { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "ignore Action Up Event this time"); + if(!result) { + return super.onTouchEvent(event); + } + return true; + } + return super.onTouchEvent(event); + } + + /* (non-Javadoc) + * @see android.widget.TextView#performLongClick() + */ + @Override + public boolean performLongClick() { + LogUtil.d(LogUtil.getLogUtilsTag(getClass()), "performLongClick , should ignore Action Up Event next time"); + mIgnoreNextActionUp = true; + return super.performLongClick(); + } + + public void setEmojiText(String text) { + setText(EmoticonUtil.emoji2CharSequence(getContext(), text, (int) getTextSize(), false)); + } + + public void setEmojiText(CharSequence text) { + setText(EmoticonUtil.emoji2CharSequence(getContext(), text != null ? text.toString() : "", (int) getTextSize(), false)); + } + + public interface CCPDoubleClickPreviewListener { + + public abstract boolean postPreviewView(View v); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/ECListDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/ECListDialog.java new file mode 100644 index 0000000..5c2d4b3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/ECListDialog.java @@ -0,0 +1,124 @@ +package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.Arrays; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * com.yuntongxun.ecdemo.common.dialog in ECDemo_Android + * Created by Jorstin on 2015/4/18. + */ +public class ECListDialog extends ECAlertDialog implements AdapterView.OnItemClickListener { + + private int mCheckIndex; + private ListView mListView; + private OnDialogItemClickListener mListener; + /** + * @param context + */ + public ECListDialog(Context context) { + super(context); + mCheckIndex = -1; + mListener = null; + mListView = null; + // setTitleNormalColor(); + View contatinView = LayoutInflater.from(context).inflate(R.layout.include_dialog_simplelist ,null); + setContentView(contatinView); + setContentPadding(0,0,0,-1); + mListView = (ListView) contatinView.findViewById(R.id.listview); + mListView.setOnItemClickListener(this); + } + + /** + *据数组资源文件创建\\ + * @param context + * @param resourceIdArray + */ + public ECListDialog(Context context , int resourceIdArray) { + this(context); + String[] stringArray = context.getResources().getStringArray(resourceIdArray); + setAdapter(new ListDialogAdapter(getContext(), Arrays.asList(stringArray))); + } + + /** + * 根据集合数组创建 + * @param context + * @param strs + */ + public ECListDialog(Context context , List strs) { + this(context); + setAdapter(new ListDialogAdapter(getContext(), strs)); + } + + public ECListDialog(Context context , List strs , int checkPosition) { + this(context ,strs); + this.mCheckIndex = checkPosition; + + } + + public ECListDialog(Context context , String[] strs , int checkPosition) { + this(context ,strs); + this.mCheckIndex = checkPosition; + } + + public ECListDialog(Context context , String[] strs) { + this(context); + setAdapter(new ListDialogAdapter(getContext(), Arrays.asList(strs))); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if(mListener != null) { + mListener.onDialogItemClick(this , position); + } + dismiss(); + } + + public void setAdapter(ListAdapter adapter) { + mListView.setAdapter(adapter); + } + + + + public class ListDialogAdapter extends IBaseAdapter { + + + public ListDialogAdapter(Context ctx, List data) { + super(ctx, data); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null) { + convertView = this.mLayoutInflater.inflate(R.layout.listitem_dialog , null); + } + ((TextView) convertView.findViewById(R.id.textview)).setText(getItem(position).toString()); + if(mCheckIndex == position) { + convertView.findViewById(R.id.imageview).setVisibility(View.VISIBLE); + } else { + convertView.findViewById(R.id.imageview).setVisibility(View.GONE); + } + return convertView; + } + } + + public void setOnDialogItemClickListener(OnDialogItemClickListener l) { + this.mListener = l; + } + + public interface OnDialogItemClickListener { + void onDialogItemClick(Dialog d, int position); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/IBaseAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/IBaseAdapter.java new file mode 100644 index 0000000..2e1c17f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/IBaseAdapter.java @@ -0,0 +1,178 @@ +package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.BaseAdapter; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * com.yuntongxun.ecdemo.common.dialog in ECDemo_Android + * Created by Jorstin on 2015/4/18. + */ +public abstract class IBaseAdapter extends BaseAdapter { + + protected Context mContext; + protected List data; + protected LayoutInflater mLayoutInflater; + private boolean mNotifyOnChange = true; + + public IBaseAdapter(Context ctx) { + mContext = ctx; + mLayoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + data = new ArrayList(); + } + + public IBaseAdapter(Context ctx , List data) { + this(ctx); + this.data = data; + } + + public View inflateView(int resource) { + return mLayoutInflater.inflate(resource , null); + } + + + public List getData() { + return data; + } + + public void replace(int position , T t) { + data.remove(position); + data.add(position , t); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void insert(int position , T t) { + data.add(position, t); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void addAll(int position , Collection t) { + data.addAll(position, t); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void add(T t) { + data.add(t); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void setData(Collection t) { + data.clear(); + addData(t); + } + + public void addData(T[] ts) { + if(ts == null || ts.length == 0) { + return ; + } + for(int i = 0 ; i < ts.length ; i++) { + data.add(ts[i]); + } + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void clear(boolean notify) { + data.clear(); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void addData(Collection t) { + addData(t, this.mNotifyOnChange); + } + + public void addData(Collection t ,boolean notify) { + data.addAll(t); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void reset() { + clear(this.mNotifyOnChange); + } + + public void remove(int position) { + data.remove(position); + if(!mNotifyOnChange) { + return ; + } + notifyDataSetChanged(); + } + + public void addOnly(T t) { + data.add(t); + } + + public T removeOnly(int position) { + return data.remove(position); + } + + public void removeOnly(T t) { + data.remove(t); + } + + public void unNofity() { + this.mNotifyOnChange = false; + } + + public boolean hasDataAndRemove(T t) { + boolean remove = data.remove(t); + if(mNotifyOnChange) { + notifyDataSetChanged(); + } + return remove; + } + + public Context getContext() { + return mContext; + } + + public int getPosition(T t) { + return data.indexOf(t); + } + + @Override + public int getCount() { + return data.size(); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public void notifyDataSetChanged() { + super.notifyDataSetChanged(); + this.mNotifyOnChange = true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/NetWarnBannerView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/NetWarnBannerView.java new file mode 100644 index 0000000..00b1a96 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/NetWarnBannerView.java @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +/** + * 网络提醒BannerView + * Created by Jorstin on 2015/3/18. + */ +public class NetWarnBannerView extends LinearLayout { + + private View mContetLayout; + private ImageView mNetWarnIcon; + private TextView mNetDetail; + private TextView mNetDetailTips; + private TextView mNetHintTips; + private ProgressBar mProgressBar; + + /** + * @param context + */ + public NetWarnBannerView(Context context) { + this(context , null); + } + + /** + * @param context + * @param attrs + */ + public NetWarnBannerView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + public NetWarnBannerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(); + } + + /** + * + */ + private void init() { + View.inflate(getContext(), R.layout.net_warn_item, this); + mContetLayout = findViewById(R.id.nwview); + mNetWarnIcon = (ImageView) findViewById(R.id.nw_icon); + mNetDetail = (TextView) findViewById(R.id.nw_detail); + mNetDetailTips = (TextView) findViewById(R.id.nw_detail_tip); + mNetHintTips = (TextView) findViewById(R.id.nw_hint_tip); + mProgressBar = (ProgressBar) findViewById(R.id.nw_prog); + + } + + public final void setNetWarnText(CharSequence text) { + mNetDetail.setText(text); + mProgressBar.setVisibility(View.GONE); + mContetLayout.setVisibility(View.VISIBLE); + } + + public final void setNetWarnDetailTips(CharSequence text) { + mNetDetailTips.setText(text); + mProgressBar.setVisibility(View.GONE); + mContetLayout.setVisibility(View.VISIBLE); + } + + public final void setNetWarnHintText(CharSequence text) { + mNetHintTips.setText(text); + mProgressBar.setVisibility(View.GONE); + mContetLayout.setVisibility(View.VISIBLE); + } + + + /** + * set gone + */ + public void hideWarnBannerView() { + if(mContetLayout == null) { + return; + } + mContetLayout.setVisibility(View.GONE); + } + + /** + * 重新连接 + * @param reconnect + */ + public final void reconnect(boolean reconnect) { + mContetLayout.setVisibility(View.VISIBLE); + if(reconnect) { + mProgressBar.setVisibility(View.VISIBLE); + mNetWarnIcon.setVisibility(View.INVISIBLE); + return ; + } + mProgressBar.setVisibility(View.GONE); + mNetWarnIcon.setVisibility(View.VISIBLE); + + } + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/PhotoBitmapDrawable.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/PhotoBitmapDrawable.java new file mode 100644 index 0000000..668e57a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/PhotoBitmapDrawable.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.drawable.BitmapDrawable; + +/** + * 自定义头像显示View + * Created by Jorstin on 2015/3/18. + */ +public class PhotoBitmapDrawable extends BitmapDrawable { + + private Paint mPaint; + private Rect mRect; + private Bitmap mMaskBitmap; + private int mColor; + private int mWidth; + private boolean mStroke; + /** + * @param bitmap + * @deprecated + */ + public PhotoBitmapDrawable(Bitmap bitmap , Bitmap mask , Paint paint) { + super(bitmap); + init(mask, paint); + } + + private void init(Bitmap mask , Paint paint){ + mPaint = paint; + mMaskBitmap = mask; + mRect = new Rect(0, 0, 0, 0); + } + + @Override + public void draw(Canvas canvas) { + int saveCount = canvas.saveLayer(new RectF(canvas.getClipBounds()), null, 31); + super.draw(canvas); + if (mStroke) { + Rect rect = canvas.getClipBounds(); + rect.left += mWidth / 2; + rect.top += mWidth / 2; + rect.bottom -= mWidth / 2; + rect.right -= mWidth / 2; + Paint paint = new Paint(); + paint.setColor(mColor); + paint.setStrokeWidth(mWidth); + paint.setStyle(Paint.Style.STROKE); + canvas.drawRect(rect, paint); + } + canvas.drawBitmap(mMaskBitmap, null, mRect, mPaint); + canvas.restoreToCount(saveCount); + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + super.setBounds(left, top, right, bottom); + if (mRect.right < right) { + mRect.right = right; + } + if (mRect.bottom < bottom) { + mRect.bottom = bottom; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/SwipeBackLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/SwipeBackLayout.java new file mode 100644 index 0000000..f4586f3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/SwipeBackLayout.java @@ -0,0 +1,461 @@ +package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.os.Build; +import androidx.core.view.ViewCompat; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; + +import java.lang.ref.WeakReference; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.MethodInvoke; +import cn.shangyu.gdxzExpert.ecdemo.common.SDKVersionUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.SwipTranslucentMethodUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.SwipeActivityManager; +import cn.shangyu.gdxzExpert.ecdemo.common.ViewDragHelper; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * com.yuntongxun.ecdemo.common.view in ECDemo_Android + * Created by Jorstin on 2015/6/6. + */ +public class SwipeBackLayout extends FrameLayout { + + private static final String TAG = "gdxzExpert.SwipeBackLayout"; + /** + * Minimum velocity that will be detected as a fling + */ + private static final int MIN_FLING_VELOCITY = 100; // dips per second + private static final int FULL_ALPHA = 255; + private boolean mInLayout; + private boolean mEnable = true; + private View mContentView; + private float mScrimOpacity; + private ViewDragHelper mDragHelper; + private float mScrollPercent; + private Drawable mShadowLeft; + /** + * Threshold of scroll, we will close the activity, when scrollPercent over + * this value; + */ + private float mScrollThreshold = DEFAULT_SCROLL_THRESHOLD; + private Rect mTmpRect = new Rect(); + /** + * Default threshold of scroll + */ + private static final float DEFAULT_SCROLL_THRESHOLD = 1.0f; + private static final int OVERSCROLL_DISTANCE = 10; + private int mContentLeft; + private int mContentTop; + public boolean mScrolling = false; + public boolean mTranslucent = false; + private boolean mRequestTranslucent = false; + private boolean mFastRelease = false; + public OnSwipeGestureDelegate mOnSwipeGestureDelegate; + + public SwipeBackLayout(Context context) { + this(context, null); + } + + public SwipeBackLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public SwipeBackLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs); + mShadowLeft = getResources().getDrawable(R.drawable.shadow_left); + setFocusable(true); + setDescendantFocusability(FOCUS_AFTER_DESCENDANTS); + init(); + } + + public boolean isSwipeBacking() { + isScrolling(); + return mScrolling; + } + + public boolean isScrolling() { + if(!mScrolling) { + return false; + } + if(Float.compare(this.mContentView.getLeft(), 0.01F) <= 0) { + mScrolling = false; + return false; + } + return true; + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent event) { + if (!mEnable) { + return false; + } + try { + LogUtil.d(TAG , "onInterceptTouchEvent"); + return mDragHelper.shouldInterceptTouchEvent(event); + // return false; + } catch (ArrayIndexOutOfBoundsException e) { + // FIXME: handle exception + // issues #9 + return false; + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (!mEnable) { + return false; + } + LogUtil.d(TAG , "onTouchEvent"); + mDragHelper.processTouchEvent(event); + return true; + } + /*@Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if(!mEnable) { + return super.dispatchTouchEvent(ev); + } + if(isScrolling()) { + return super.dispatchTouchEvent(ev); + } + try { + LogUtil.d(TAG , "11111111111111111111111"); + if(mDragHelper.getViewDragState() != ViewDragHelper.STATE_DRAGGING) { + LogUtil.d(TAG , "22222222222222222222222222"); + if (!mDragHelper.shouldInterceptTouchEvent(ev)) { + LogUtil.d(TAG , "33333333333333333333333333333333"); + ev.setAction(MotionEvent.ACTION_CANCEL); + super.dispatchTouchEvent(ev); + return true; + } + return super.dispatchTouchEvent(ev); + } + LogUtil.d(TAG , "444444444444444444444444444444444"); + mDragHelper.processTouchEvent(ev); + return true; + } catch (NullPointerException e) { + return false; + } catch (ArrayIndexOutOfBoundsException e) { + // FIXME: handle exception + // issues #9 + return false; + } + }*/ + + @Override + protected boolean drawChild(Canvas canvas, View child, long drawingTime) { + LogUtil.d(TAG , "drawChild " + drawingTime); + final boolean drawContent = child == mContentView; + boolean ret = super.drawChild(canvas, child, drawingTime); + if (Float.compare(mScrimOpacity , 0.0F) > 0 && drawContent + && mDragHelper.getViewDragState() != ViewDragHelper.STATE_IDLE) { + drawShadow(canvas, child); + } + return ret; + } + + private void drawShadow(Canvas canvas, View child) { + final Rect childRect = mTmpRect; + child.getHitRect(childRect); + mShadowLeft.setBounds(childRect.left - mShadowLeft.getIntrinsicWidth(), childRect.top, + childRect.left, childRect.bottom); + mShadowLeft.setAlpha((int) (mScrimOpacity * FULL_ALPHA)); + mShadowLeft.draw(canvas); + } + + + public void init() { + mScrollThreshold = 0.3f; + mDragHelper = ViewDragHelper.create(this , new ViewDragCallback()); + setEdgeTrackingEnabled(ViewDragHelper.EDGE_LEFT); + final float density = getResources().getDisplayMetrics().density; + final float minVel = MIN_FLING_VELOCITY * density; + mDragHelper.setMinVelocity(minVel); + mDragHelper.setMaxVelocity(minVel * 3f); + mContentLeft = 0; + mContentTop = 0; + } + + public void onFinishInflate() { + mContentView = this; + super.onFinishInflate(); + } + + public void markTranslucent(boolean translucent) { + LogUtil.i(TAG , "markTranslucent : " +translucent); + mTranslucent = translucent; + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + mInLayout = true; + if (mContentView != null) + mContentView.layout(mContentLeft, mContentTop, + mContentLeft + mContentView.getMeasuredWidth(), + mContentTop + mContentView.getMeasuredHeight()); + mInLayout = false; + } + + @Override + public void requestLayout() { + if (!mInLayout) { + super.requestLayout(); + } + } + + /** + * Set up contentView which will be moved by user gesture + * + * @param view + */ + public void setContentView(View view) { + mContentView = view; + } + + public void setEnableGesture(boolean enable) { + mEnable = enable; + } + + public void setNeedRequestActivityTranslucent( boolean request) { + mRequestTranslucent = request; + } + + public void setSwipeGestureDelegate(OnSwipeGestureDelegate onSwipeGestureDelegate) { + mOnSwipeGestureDelegate = onSwipeGestureDelegate; + } + + /** + * Enable edge tracking for the selected edges of the parent view. The + * callback's + * {@link ViewDragHelper.Callback#onEdgeTouched(int, int)} + * and + * methods will only be invoked for edges for which edge tracking has been + * enabled. + * + * @param edgeFlags Combination of edge flags describing the edges to watch + */ + public void setEdgeTrackingEnabled(int edgeFlags) { + mDragHelper.setEdgeTrackingEnabled(edgeFlags); + } + + @Override + public void computeScroll() { + super.computeScroll(); + mScrimOpacity = Math.max(0.0F, 1.0F - mScrollPercent); + LogUtil.d(TAG , "computeScroll :: mScrimOpacity " + mScrimOpacity); + if (mDragHelper.continueSettling(true)) { + ViewCompat.postInvalidateOnAnimation(this); + } + } + + private class ViewDragCallback extends ViewDragHelper.Callback implements MethodInvoke.OnSwipeInvokeResultListener { + private static final String TAG = "gdxzExpert.ViewDragCallback"; + private int mTemp = 0; + private int mReleasedLeft = 0; + private boolean mIsScrollOverValid; + + // 判断child是否是拖动的目标 + @Override + public boolean tryCaptureView(View view, int i) { + boolean edgeTouched = mDragHelper.isEdgeTouched(ViewDragHelper.EDGE_LEFT, i); + LogUtil.d(TAG , "tryCaptureView i :" + i + " ,edgeTouched:" + edgeTouched); + return edgeTouched; + } + + // 拖动手势释放后的处理 + @Override + public void onViewReleased(View releasedChild, float xvel, float yvel) { + super.onViewReleased(releasedChild, xvel, yvel); + final int childWidth = releasedChild.getWidth(); + int left = ((xvel > 0.0F) || (xvel == 0.0F) && (mScrollPercent > mScrollThreshold)) ? childWidth + mShadowLeft.getIntrinsicWidth() + OVERSCROLL_DISTANCE : 0; + int top = 0; + mReleasedLeft = left; + //mIsScrollOverValid = true; + LogUtil.i(TAG , "onViewReleased, xvel: " + xvel + " yvel: " + yvel + ", releaseLeft: " + left + ", releaseTop: " + top +", translucent: " + mTranslucent); + if(!mTranslucent) { + return ; + } + mDragHelper.settleCapturedViewAt(left, top); + invalidate(); + mFastRelease = true; + } + + // 拖动状态的改变 + @Override + public void onViewDragStateChanged(int state) { + super.onViewDragStateChanged(state); + LogUtil.d(TAG , "onViewDragStateChanged state " + state + "mTranslucent " + mTranslucent + " , requestedTranslucent " + mRequestTranslucent + " fastRelease " + mFastRelease); + Activity mActivity = null; + if(state == ViewDragHelper.STATE_DRAGGING) { + LogUtil.d(TAG , "on drag"); + if(SwipeBackLayout.this.getContext() instanceof Activity) { + ((Activity)SwipeBackLayout.this.getContext()).getWindow().getDecorView().setBackgroundResource(R.drawable.transparent); + } + if(mOnSwipeGestureDelegate != null) { + mOnSwipeGestureDelegate.onDragging(); + } + mIsScrollOverValid = false; + if(mTranslucent) { + SwipeActivityManager.notifySwipe(0.0F); + } + } + + if(state == ViewDragHelper.STATE_IDLE && !mFastRelease) { + LogUtil.i(TAG , "on cancel"); + if(mOnSwipeGestureDelegate != null) { + mOnSwipeGestureDelegate.onCancel(); + } + SwipeActivityManager.notifySwipe(1.0F); + } + + if(state == ViewDragHelper.STATE_DRAGGING /*&& mScrolling*/ && (SwipeBackLayout.this.getContext() instanceof Activity) && !mTranslucent && !mRequestTranslucent) { + LogUtil.i(TAG , " match dragging"); + mTranslucent = true; + mActivity = ((Activity)SwipeBackLayout.this.getContext()); + if(SDKVersionUtils.isGreaterorEqual(16)) { + LogUtil.w(TAG , "convertActivityToTranslucent::Android Version Error " + Integer.valueOf(Build.VERSION.SDK_INT)); + } + } + if(state == ViewDragHelper.STATE_SETTLING) { + LogUtil.i(TAG , "notify settle, mReleasedLeft " + mReleasedLeft); + boolean open = (mReleasedLeft > 0); + SwipeActivityManager.notifySettle(open, mReleasedLeft); + } + if(mActivity != null) { + MethodInvoke.SwipeInvocationHandler handler = new MethodInvoke.SwipeInvocationHandler(); + handler.mWeakReference = new WeakReference(this); + SwipTranslucentMethodUtils.convertActivityToTranslucent(mActivity , handler); + } + } + + // 拖动后view位置的改变 + @Override + public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) { + super.onViewPositionChanged(changedView, left, top, dx, dy); + LogUtil.d(TAG , "onViewPositionChanged: Translucent : " + mTranslucent + "' ,left :" + + left + " ,top :" + top + " ,dx:" + dx + " ,dy:" + dy); + if(!mTranslucent) { + return ; + } + mScrollPercent = Math.abs((float) left / (mContentView.getWidth() + mShadowLeft.getIntrinsicWidth())); + mContentLeft = left; + mContentTop = top; + invalidate(); + LogUtil.d(TAG , "onViewPositionChanged: mScrollPercent : " + mScrollPercent + "' ,mIsScrollOverValid :" + mIsScrollOverValid); + if(Float.compare(mScrollPercent , DEFAULT_SCROLL_THRESHOLD) >=0 && !mIsScrollOverValid) { + mIsScrollOverValid = true; + mScrolling = true; +// ECHandlerHelper.postRunnOnUI(new Runnable() { +// @Override +// public void run() { +// if(mOnSwipeGestureDelegate != null) { +// mOnSwipeGestureDelegate.onSwipeBack(); +// } +// mTranslucent = false; +// } +// }); + } else { + if(!(Float.compare(mScrollPercent, 0.01F) > 0)) { + mIsScrollOverValid = false; + mScrolling = false; + } + } + if(mDragHelper.getViewDragState() == ViewDragHelper.STATE_DRAGGING) { + SwipeActivityManager.notifySwipe(mScrollPercent); + } + } + + // 拖动位置的处理,可以处理拖动过程中的最高位置或者最低位置 + @Override + public int clampViewPositionHorizontal(View child, int left, int dx) { + LogUtil.d(TAG , "clampViewPositionHorizontal : translucent : " + mTranslucent + " ,left " + left + " , dx " + dx); + int ret = 0; + if (mTranslucent) { + int max = Math.max(mTemp, left); + mTemp = 0; + ret = Math.min(child.getWidth(), Math.max(max, 0)); + } else { + mTemp = Math.max(mTemp, left); + } + LogUtil.d(TAG , "clampViewPositionHorizontal ret " + ret); + return ret; + } + + + @Override + public int getViewHorizontalDragRange(View child) { + return ViewDragHelper.EDGE_LEFT; + } + + @Override + public void onSwipeInvoke(final boolean result) { + LogUtil.d(TAG , "onSwipeInvoke :" + result ); +// ECHandlerHelper.postRunnOnUI(new Runnable() { +// @Override +// public void run() { +// LogUtil.i(TAG , "on Complete, result " + result + " ,releaseLeft " + mReleasedLeft); +// if(result) { +// if(mReleasedLeft > 0) { +// SwipeActivityManager.notifySwipe(0.0F); +// SwipeBackLayout.this.markTranslucent(result); +// if(result && !mFastRelease) { +// if(mReleasedLeft == 0) { +// AnimatorUtils.updateViewAnimation(SwipeBackLayout.this, 200L, 0.0F, new AnimatorUtils.OnAnimationListener() { +// @Override +// public void onAnimationCancel() { +// onAnimationEnd(); +// } +// +// @Override +// public void onAnimationEnd() { +// mTranslucent = false; +// } +// }); +// } else { +// AnimatorUtils.updateViewAnimation(SwipeBackLayout.this, 200L, mReleasedLeft, new AnimatorUtils.OnAnimationListener() { +// @Override +// public void onAnimationCancel() { +// onAnimationEnd(); +// } +// +// @Override +// public void onAnimationEnd() { +// mIsScrollOverValid = true; +// ECHandlerHelper.postRunnOnUI(new Runnable() { +// @Override +// public void run() { +// if(mOnSwipeGestureDelegate != null) { +// mOnSwipeGestureDelegate.onSwipeBack(); +// LogUtil.d(TAG , "on onSwipeBack"); +// } +// SwipeActivityManager.notifySwipe(1.0F); +// mIsScrollOverValid = false; +// mScrolling = false; +// } +// }); +// } +// }); +// } +// } +// } +// } +// } +// }); + } + } + + + + public interface OnSwipeGestureDelegate { + void onSwipeBack(); + void onDragging(); + void onCancel(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarView.java new file mode 100644 index 0000000..17864f7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarView.java @@ -0,0 +1,455 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.content.Context; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.TouchDelegate; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DensityUtil; + + +/** + * ECDemo 顶部导航 + * Created by Jorstin on 2015/3/17. + */ +public class TopBarView extends LinearLayout { + public static final int SHOW_SUTITLE = 2; + private Context mContext ; + private ImageView mLeftButton; + private EmojiconTextView mMiddleButton; + private TextView mMiddleSub; + private ImageView mRightButton,mRightButton2,mRightButton3; + private TextView mLeftText; + private TextView mRightText; + private OnClickListener mClickListener; + + private boolean mArrowUp = true; + + /** + * @param context + */ + public TopBarView(Context context) { + super(context); + mContext = context; + initView(); + } + + /** + * @param context + * @param attrs + */ + public TopBarView(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + initView(); + } + + private void initView() { + setOrientation(LinearLayout.HORIZONTAL); + setBackgroundColor(getResources().getColor(R.color.top_bg)); +// setBackgroundDrawable(new ColorDrawable(mContext.getResources().getColor(R.color.red_btn_color_normal))); + LayoutInflater.from(getContext()).inflate(R.layout.common_view_top_bar, this, true); + mLeftButton = (ImageView) findViewById(R.id.btn_left); + mMiddleButton = (EmojiconTextView) findViewById(R.id.btn_middle); + mMiddleSub = (TextView) findViewById(R.id.btn_middle_sub); + mRightButton = (ImageView) findViewById(R.id.btn_right); + mRightButton2 = (ImageView) findViewById(R.id.btn_right2); + mRightButton3 = (ImageView) findViewById(R.id.btn_right3); + mLeftText = (TextView) findViewById(R.id.text_left); + mRightText = (TextView) findViewById(R.id.text_right); + } + + private void setMiddleSubTitle(int type , String title , String subTitle , OnClickListener onClickListener) { + if(type == 1) { + setOnClickListener(onClickListener); + } + setTitle(title); + if(TextUtils.isEmpty(subTitle) || type == 2) { + mMiddleSub.setVisibility(View.GONE); + return ; + } + mMiddleSub.setText(subTitle); + mMiddleSub.setVisibility(View.VISIBLE); + mMiddleSub.setOnClickListener(onClickListener); + } + + /** + * 显示正在加载Progressba + */ + public void showTopProgressbar() { + mRightButton.setVisibility(View.GONE); + mRightText.setVisibility(View.GONE); + ((RelativeLayout)findViewById(R.id.top_progressbar)).setVisibility(View.VISIBLE); + } + + /** + * 设置TopBarView 右边按钮的背景 + * @param resId + */ + public void setRightButtonRes(int resId) { + if(resId == -1) { + mRightButton.setVisibility(View.GONE); + return ; + } + int padding = getContext().getResources().getDimensionPixelSize(R.dimen.btn_topbar_paddingHorizontal); + mRightButton.setImageResource(resId); + mRightButton.setPadding(padding, 0, padding, 0); + } + + /** + * 设置右边按钮的显示文字 + * @param text + */ + public void setRightButtonText(String text) { + if(text == null) { + mRightText.setVisibility(View.GONE); + return ; + } + mRightText.setText(text); + } + + /** + * 设置TopBarView 顶部更新提示是否显示 + * @param show + */ + public void setTopbarUpdatePoint(boolean show) { + View mTopbarUpdatePoint = findViewById(R.id.topbar_update_point); + if(show) { + mTopbarUpdatePoint.setVisibility(View.VISIBLE); + return ; + } + mTopbarUpdatePoint.setVisibility(View.GONE); + } + + /** + * 设置TopBarView 右侧按钮的显示 + */ + public void setRightVisible() { + mRightButton.setVisibility(View.VISIBLE); + mRightText.setVisibility(View.VISIBLE); + ((RelativeLayout)findViewById(R.id.top_progressbar)).setVisibility(View.GONE); + } + /** + * 设置TopBarView 右侧按钮的隐藏 + */ + public void setRightGone() { + mRightButton.setVisibility(View.GONE); + mRightButton2.setVisibility(View.GONE); + mRightText.setVisibility(View.GONE); + ((RelativeLayout)findViewById(R.id.top_progressbar)).setVisibility(View.GONE); + } + + /** + * 设置TopBarView RightPoint是否显示 + * @param show + */ + public void setTopbarRightPoint(boolean show) { + View mTopbarRightPoint = findViewById(R.id.right_point); + if(show) { + mTopbarRightPoint.setVisibility(View.VISIBLE); + return ; + } + mTopbarRightPoint.setVisibility(View.GONE); + } + + /** + * @return the mLeftButton + */ + public ImageView getLeftButton() { + return mLeftButton; + } + + /** + * @return the mRightButton + */ + public ImageView getRightButton() { + return mRightButton; + } + + /** + * @return the mLeftText + */ + public TextView getLeftText() { + return mLeftText; + } + + /** + * @return the mRightText + */ + public TextView getRightText() { + return mRightText; + } + + public void setFront() { + bringToFront(); + } + + /** + * 显示up 或者Down 的图标 + * @param up + * @param arrow + */ + public void setMiddleBtnArrowUp(boolean up , boolean arrow) { + if(mArrowUp == up && !arrow) { + return ; + } + + mArrowUp = up; + int id = R.drawable.common_top_bar_arrow_down; + if(mArrowUp) { + id = R.drawable.common_top_bar_arrow_up; + } + Drawable upDownDrawable = mContext.getResources().getDrawable(id); + upDownDrawable.setBounds(0, 0, upDownDrawable.getIntrinsicWidth(), upDownDrawable.getIntrinsicHeight()); + mMiddleButton.setCompoundDrawablePadding(DensityUtil.dip2px(5.0F)); + mMiddleButton.setCompoundDrawablesWithIntrinsicBounds(null, null, upDownDrawable, null); + } + + /** + * 设置MiddleButton 的padding + * @param padding + */ + public void setMiddleBtnPadding(int padding) { + if(mMiddleButton == null) { + return ; + } + mMiddleButton.setPadding(padding, 0, padding, 0); + } + + /** + * 右侧按钮是否可用 + * @param enabled + */ + public void setRightBtnEnable(boolean enabled) { + mRightButton.setEnabled(enabled); + mRightText.setEnabled(enabled); + } + + /** + * 设置TopBarView 标题 + * @param title + */ + public void setTitle(CharSequence title) { + if(TextUtils.isEmpty(title)) { + mMiddleButton.setVisibility(View.INVISIBLE); + return ; + } + mMiddleButton.setText(title); + mMiddleButton.setVisibility(View.VISIBLE); + mMiddleButton.setOnClickListener(mClickListener); + + doSetTouchDelegate(); + } + public void setTitle(String title,int textsize) + { + if(TextUtils.isEmpty(title)) { + mMiddleButton.setVisibility(View.INVISIBLE); + return ; + } + mMiddleButton.setText(title); + mMiddleButton.setVisibility(View.VISIBLE); + mMiddleButton.setOnClickListener(mClickListener); + mMiddleButton.setTextSize(textsize); + doSetTouchDelegate(); + } + + /** + * 设置TopBarView 标题 + * @param title + */ + public void setTitle(String title) { + if(TextUtils.isEmpty(title)) { + mMiddleButton.setVisibility(View.INVISIBLE); + return ; + } + mMiddleButton.setText(title); + mMiddleButton.setVisibility(View.VISIBLE); + mMiddleButton.setOnClickListener(mClickListener); + + doSetTouchDelegate(); + } + + // 设置标题的可点击范围 + private void doSetTouchDelegate() { + final TextView middleBtn = mMiddleButton; + post(new Runnable() { + + @Override + public void run() { + Rect rect = new Rect(); + rect.left = (middleBtn.getWidth() / 4); + rect.right = (3 * middleBtn.getWidth() / 4); + rect.top = 0; + rect.bottom = middleBtn.getHeight(); + middleBtn.setTouchDelegate(new TouchDelegate(rect, /*TopBarView.this*/mMiddleSub)); + } + }); + } + + /** + * 设置标题的背景 + * @param resId + */ + public void setTitleDrawable(int resId) { + if(resId == -1) { + mMiddleButton.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(resId), null, null, null); + return ; + } + mMiddleButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); + } + + /** + * + * @param type + * @param leftResid + * @param rightResid + * @param titleRes + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, int rightResid, + int titleRes, OnClickListener l) { + String str = ""; + if (titleRes != -1) { + str = getResources().getString(titleRes); + } + setTopBarToStatus(type, leftResid, rightResid, null, null, str, "", l); + } + + /** + * 设置纯图片的按钮TopBarView + * @param type + * @param leftResid + * @param rightResid + * @param title + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, int rightResid, + String title, OnClickListener l) { + setTopBarToStatus(type, leftResid, rightResid, null, null, title, "", l); + } + + /** + * 重载方法,设置返回、标题、右侧Action按钮 + * @param type + * @param leftResid + * @param rightText + * @param title + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, String rightText, + String title, OnClickListener l) { + setTopBarToStatus(type, leftResid, -1, null, rightText, title, "", l); + } + + /** + * 设置TopBarView 属性 + * @param type 类型 + * @param leftResid 左边按钮背景 + * @param rightResid 右边按钮背景 + * @param leftText 左边按钮文字 + * @param rightText 右边按钮文字 + * @param title 标题文字 + * @param subTitle 子标题文字 + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, int rightResid, String leftText, String rightText, String title, String subTitle, OnClickListener l) { + mClickListener = l; + findViewById(R.id.common_top_wrapper).setOnClickListener(mClickListener); + int padding = getContext().getResources().getDimensionPixelSize(R.dimen.btn_topbar_paddingHorizontal); + if(leftResid <= 0 || leftText != null) { + mLeftButton.setVisibility(View.GONE); + if(leftText != null) { + mLeftButton.setVisibility(View.GONE); + mLeftText.setText(leftText); + mLeftText.setVisibility(View.VISIBLE); + mLeftText.setOnClickListener(l); + } else { + mLeftText.setVisibility(View.GONE); + } + + if(leftResid > 0) { + mLeftText.setBackgroundResource(leftResid); + mLeftText.setPadding(padding, 0, padding, 0); + } + } else { + mLeftButton.setImageResource(leftResid); + mLeftButton.setPadding(padding, 0, padding, 0); + mLeftButton.setVisibility(View.VISIBLE); + mLeftButton.setOnClickListener(l); + } + + if(rightResid <= 0 || rightText != null) { + mRightButton.setVisibility(View.GONE); + + if(rightText != null) { + mRightButton.setVisibility(View.GONE); + mRightText.setText(rightText); + mRightText.setVisibility(View.VISIBLE); + mRightText.setOnClickListener(l); + } else { + mRightText.setVisibility(View.GONE); + } + + if(rightResid > 0) { + mRightText.setBackgroundResource(rightResid); + mRightText.setPadding(padding, 0, padding, 0); + } + + } else { + mRightButton.setImageResource(rightResid); + mRightButton.setPadding(padding, 0, padding, 0); + mRightButton.setVisibility(View.VISIBLE); + mRightButton2.setVisibility(View.VISIBLE); + mRightButton.setOnClickListener(l); + mRightButton2.setOnClickListener(l); + mRightButton3.setOnClickListener(l); + } + if(CommonUtil.BigModule()) + { + mRightText.setOnClickListener(l); + } + + setMiddleSubTitle(type, title, subTitle, l); + } + + public void setGroupButton() { + mRightButton.setVisibility(View.GONE); + mRightButton2.setVisibility(View.GONE); + mRightButton3.setVisibility(VISIBLE); + mRightText.setVisibility(View.GONE); + ((RelativeLayout)findViewById(R.id.top_progressbar)).setVisibility(View.GONE); + } + public void setGroupButtonBig() { + mRightButton.setVisibility(View.GONE); + mRightButton2.setVisibility(View.GONE); + mRightButton3.setVisibility(GONE); + mRightText.setVisibility(View.VISIBLE); + mRightText.setTextSize(18); + mRightText.setText("新建"); + mRightText.setTextColor(getResources().getColor(R.color.top_title)); + + ((RelativeLayout)findViewById(R.id.top_progressbar)).setVisibility(View.GONE); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarViewNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarViewNew.java new file mode 100644 index 0000000..cecf256 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/TopBarViewNew.java @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.content.Context; +import android.graphics.Rect; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.base.EmojiconTextView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + + +/** + * ECDemo 顶部导航 + * Created by Jorstin on 2015/3/17. + */ +public class TopBarViewNew extends LinearLayout { + private Context mContext ; + private ImageView mLeftButton; + private EmojiconTextView mMiddleButton; + private ImageView mRightButton,mRightButton2; + private OnClickListener mClickListener; + private TextView mRightText; + + /** + * @param context + */ + public TopBarViewNew(Context context) { + super(context); + mContext = context; + initView(); + } + + /** + * @param context + * @param attrs + */ + public TopBarViewNew(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + initView(); + } + + private void initView() { + setOrientation(LinearLayout.HORIZONTAL); + LayoutInflater.from(getContext()).inflate(R.layout.common_view_top_bar_new, this, true); + mLeftButton = (ImageView) findViewById(R.id.btn_left); + mMiddleButton = (EmojiconTextView) findViewById(R.id.btn_middle); + mRightButton = (ImageView) findViewById(R.id.btn_right); + mRightButton2 = (ImageView) findViewById(R.id.btn_right2); + mRightText = (TextView) findViewById(R.id.text_right); + if(CommonUtil.BigModule()) + { + mMiddleButton.setTextSize(23); + } + } + + private void setMiddleSubTitle(int type , String title , String subTitle , OnClickListener onClickListener) { + if(type == 1) { + setOnClickListener(onClickListener); + } + setTitle(title); + if(TextUtils.isEmpty(subTitle) || type == 2) { + + return ; + } + + } + /** + * 设置右边按钮的显示文字 + * @param text + */ + public void setRightButtonText(String text) { + if(text == null) { + mRightText.setVisibility(View.GONE); + return ; + } + mRightText.setText(text); + } + + /** + * 设置TopBarView 标题 + * @param title + */ + public void setTitle(CharSequence title) { + if(TextUtils.isEmpty(title)) { + mMiddleButton.setVisibility(View.INVISIBLE); + return ; + } + mMiddleButton.setText(title); + mMiddleButton.setVisibility(View.VISIBLE); + mMiddleButton.setOnClickListener(mClickListener); + + doSetTouchDelegate(); + } + + /** + * 设置TopBarView 标题 + * @param title + */ + public void setTitle(String title) { + if(TextUtils.isEmpty(title)) { + mMiddleButton.setVisibility(View.INVISIBLE); + return ; + } + mMiddleButton.setText(title); + mMiddleButton.setVisibility(View.VISIBLE); + mMiddleButton.setOnClickListener(mClickListener); + + doSetTouchDelegate(); + } + + // 设置标题的可点击范围 + private void doSetTouchDelegate() { + final TextView middleBtn = mMiddleButton; + post(new Runnable() { + + @Override + public void run() { + Rect rect = new Rect(); + rect.left = (middleBtn.getWidth() / 4); + rect.right = (3 * middleBtn.getWidth() / 4); + rect.top = 0; + rect.bottom = middleBtn.getHeight(); +// middleBtn.setTouchDelegate(new TouchDelegate(rect, /*TopBarView.this*/mMiddleSub)); + } + }); + } + + /** + * 设置标题的背景 + * @param resId + */ + public void setTitleDrawable(int resId) { + if(resId == -1) { + mMiddleButton.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(resId), null, null, null); + return ; + } + mMiddleButton.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); + } + + /** + * + * @param type + * @param leftResid + * @param rightResid + * @param titleRes + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, int rightResid, + int titleRes, OnClickListener l) { + String str = ""; + if (titleRes != -1) { + str = getResources().getString(titleRes); + } + setTopBarToStatus(type, leftResid, rightResid, null, null, str, "", l); + } + + /** + * 设置纯图片的按钮TopBarView + * @param type + * @param leftResid + * @param rightResid + * @param title + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, int rightResid, + String title, OnClickListener l) { + setTopBarToStatus(type, leftResid, rightResid, null, null, title, "", l); + } + + /** + * 重载方法,设置返回、标题、右侧Action按钮 + * @param type + * @param leftResid + * @param rightText + * @param title + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, String rightText, + String title, OnClickListener l) { + setTopBarToStatus(type, leftResid, -1, null, rightText, title, "", l); + } + + /** + * 设置TopBarView 属性 + * @param type 类型 + * @param leftResid 左边按钮背景 + * @param rightResid 右边按钮背景 + * @param leftText 左边按钮文字 + * @param rightText 右边按钮文字 + * @param title 标题文字 + * @param subTitle 子标题文字 + * @param l + */ + public void setTopBarToStatus(int type, int leftResid, int rightResid, String leftText, String rightText, String title, String subTitle, OnClickListener l) { + mClickListener = l; + findViewById(R.id.common_top_wrapper).setOnClickListener(mClickListener); + int padding = getContext().getResources().getDimensionPixelSize(R.dimen.btn_topbar_paddingHorizontal); + if(leftResid <= 0 || leftText != null) { + mLeftButton.setVisibility(View.GONE); + if(leftText != null) { + mLeftButton.setVisibility(View.GONE); + + } else { + + } + + + } else { + mLeftButton.setImageResource(leftResid); + mLeftButton.setPadding(padding, 0, padding, 0); + mLeftButton.setVisibility(View.VISIBLE); + mLeftButton.setOnClickListener(l); + } + + if(rightResid <= 0 || rightText != null) { + mRightButton.setVisibility(View.GONE); + + if(rightText != null) { + mRightButton.setVisibility(View.GONE); + mRightText.setText(rightText); + mRightText.setVisibility(View.VISIBLE); + mRightText.setOnClickListener(l); + } else { + mRightText.setVisibility(View.GONE); + } + if(rightResid > 0) { + mRightText.setBackgroundResource(rightResid); + mRightText.setPadding(padding, 0, padding, 0); + } + } else { + mRightButton.setImageResource(rightResid); + mRightButton.setScaleType(ImageView.ScaleType.CENTER); + mRightButton.setPadding(padding, 0, padding, 0); + mRightButton.setVisibility(View.VISIBLE); + mRightButton2.setVisibility(View.GONE); + mRightButton.setOnClickListener(l); + mRightButton2.setOnClickListener(l); + + } + + setMiddleSubTitle(type, title, subTitle, l); + } + /** + * 右侧按钮是否可用 + * @param enabled + */ + public void setRightBtnEnable(boolean enabled) { + mRightButton.setEnabled(enabled); + mRightText.setEnabled(enabled); + } /** + * 右侧按钮是否可用 + * @param enabled + */ + public void setRightBtnVis(int enabled) { + mRightButton.setVisibility(enabled); + mRightText.setVisibility(enabled); + mRightButton2.setVisibility(enabled); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/VerticalImageSpan.java b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/VerticalImageSpan.java new file mode 100644 index 0000000..072832c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ecdemo/view/VerticalImageSpan.java @@ -0,0 +1,54 @@ +package cn.shangyu.gdxzExpert.ecdemo.view; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.text.style.ImageSpan; + +/** + * com.yuntongxun.ecdemo.common.view in ECDemo_Android + * Created by Jorstin on 2015/6/9. + */ +public class VerticalImageSpan extends ImageSpan { + + private int mPadding = 0; + /** + * @param drawable + */ + public VerticalImageSpan(Drawable drawable) { + super(drawable , 1); + } + + @Override + public void draw(Canvas canvas, CharSequence text, int start, int end, + float x, int top, int y, int bottom, Paint paint) { + + Drawable drawable = getDrawable(); + canvas.save(); + + int length = 0; + int dy = bottom - drawable.getBounds().bottom + mPadding; + if(mVerticalAlignment == ALIGN_BASELINE) { + length = text.length(); + } + + for(int i = 0 ; i < length ; i++) { + if (!(Character.isLetterOrDigit(text.charAt(i)))) { + continue; + } + dy -= paint.getFontMetricsInt().descent; + canvas.translate(x, dy); + drawable.draw(canvas); + canvas.restore(); + return ; + } + } + + /** + * + * @param padding + */ + public final void setPadding(int padding) { + mPadding = padding; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/AppliedFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/AppliedFragment.java new file mode 100644 index 0000000..89cf1a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/AppliedFragment.java @@ -0,0 +1,246 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Handler; +import android.os.Message; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.LinearLayout; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.AppliedListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MailanListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class AppliedFragment extends BaseFragment implements OnCallBackFromNet{ + private PullToRefreshListView lv_visit; + private CustomProgressDialog pd; + private int page = 1; + private MailanListBean fromJsonBean; + private ArrayList beans; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private AppliedListAdapter appliedListAdapter; + private Handler handler = new Handler() { + + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(PullToRefreshBase.Mode.DISABLED); + return; + } + setAdapter(); + lv_visit.onRefreshComplete(); + if (beans.size() < 4 || fromJsonBean.getData().getList().size() == 0) {//当数量少于4或无更多,则不让其上拉加载 + lv_visit.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + } + + pd.dismiss(); + + break; + default: + break; + } + + } + + private void setAdapter() { + // TODO Auto-generated method stub + if (appliedListAdapter == null) { + appliedListAdapter = new AppliedListAdapter(beans, getActivity()); + lv_visit.setAdapter(appliedListAdapter); + } else { + appliedListAdapter.notifyDataSetChanged(); + } + } + }; + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_mylanlist); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + initListViewTipText(); + lv_visit.setEmptyView(ll_empty); + appliedListAdapter = null; + page = 1; + pd.show(); + beans = new ArrayList<>(); + localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); + intentFilter = new IntentFilter(); + intentFilter.addAction("AAPLY"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); +// getData(); + return view; + } + @Override + public void onResume() { + super.onResume(); + page = 1; + getData(); + } + + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + boolean booleanExtra = intent.getBooleanExtra("aaply", false); + if (booleanExtra) { + page = 1; + getData(); + } + } + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + private void initListViewTipText() { + lv_visit.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(getActivity(), + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + private void refreshItems() { + // TODO Auto-generated method stub + page = 1; + getData(); + } + + + + private void geneItems() { + // TODO Auto-generated method stub + page++; + getData(); + } + private void getData() { + Map map = new HashMap<>(); + map.put("page",page+""); + map.put("status","0"); + sendJsonPostParamtoNetSignMD5(Url.mailanList,map,1,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("已申请 = "+resultJson); + pd.dismiss(); + if (TextUtils.isEmpty(resultJson)) { + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, MailanListBean.class); + if (page==1) { + if (beans.size() != 0) { + beans.clear(); + page = 1; + } + }else{ + if (fromJsonBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + + } + } + if (fromJsonBean.getData()!=null){ + beans.addAll(fromJsonBean.getData().getList()); + } + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } + + @Override + public void onDestroy() { + super.onDestroy(); + localBroadcastManager.unregisterReceiver(localReceiver); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BIngliCollectFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BIngliCollectFragment.java new file mode 100644 index 0000000..1b9ac8d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BIngliCollectFragment.java @@ -0,0 +1,295 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CircleCollectBIngliBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/12/30. + */ + +public class BIngliCollectFragment extends BaseFragment implements AdapterView.OnItemClickListener { + private ArrayList DataList = new ArrayList(); + private int page = 1; + private int type = 3; + private int totalPage = 0; + public static String CollectListUrl = Url.getcollectionList; + private PullToRefreshListView ptrLv; + private TextView load_empty; + private MessageAdapter ListAdapter; + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_my_collect); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_collect);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //设置下拉与上啦都可以用 + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + CollectListData(CollectListUrl, page, true); + } + + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + CollectListData(CollectListUrl, page, false); + } + }); + initData(); + return view; + } + + + private void initData() { + String CollectListMessage = SharePrefUtil.getString(getActivity(), CollectListUrl, null); + if (TextUtils.isEmpty(CollectListMessage)) { + showProgressDialog("正在加载"); + }else{ + processData(CollectListMessage, page, true); + } + CollectListData(CollectListUrl, page, true); + } + @Override + public LoadingPage.ResultState onLoad() { + // TODO Auto-generated method stub + return LoadingPage.ResultState.STATE_SUCCESSED; + } + @Override + public void onResume() { + // TODO Auto-generated method stub + CollectListData(CollectListUrl, page, true); + super.onResume(); + } + class MessageAdapter extends BaseAdapter { + + List list; + + public MessageAdapter(List data) { + this.list=data; + // TODO Auto-generated constructor stub + } + @Override + public int getCount() { + return list.size(); + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + MessageAdapter.Holder holder; + if (convertView == null) { + //找到自定义item布局 并赋值给 convertView + if(CommonUtil.BigModule()) + { + convertView = View.inflate(getActivity(), R.layout.activity_shoucangbingli_list_item_big, null); + } + else + { + convertView = View.inflate(getActivity(), R.layout.activity_shoucangbingli_list_item, null); + } + holder = new MessageAdapter.Holder(); + holder.name = (TextView) convertView.findViewById(R.id.item_name_title); + convertView.setTag(holder); + } else { + holder = (MessageAdapter.Holder) convertView.getTag(); + } + final CircleCollectBIngliBean.Collection data = list.get(position); + if (!TextUtils.isEmpty(data.title)) { + holder.name.setText(data.title); + }else{ + holder.name.setText(""); + } + return convertView; + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + public class Holder { + public ImageView iv_right; + public TextView tv_down; + public ImageView iv_down; + public TextView date; + public TextView name; + } + } + /** + * 请求服务器。获取经典病例收藏记录 + * CollectListData + * @param loadUrl + * void + */ + private void CollectListData(final String loadUrl, final int page, final boolean isRefresh) { + + String expertUuid = SharePrefUtil.getString(getActivity(), Constant.uuid, "");//提取专家uuid + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("user_uuid",expertUuid);//传专家uuid + params.addBodyParameter("page", String.valueOf(page));//传page参数 + HttpHelper.loadData(HttpRequest.HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(getActivity(), loadUrl,info.result); + processData(info.result, page, isRefresh); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(load_empty); + } + }); + } + /** + * 刷新最后时间 + * setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + /** + * 刷新完成 + * onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + /** + * 解析并处理数据 + * @param result + */ + private void processData(String result,int page, boolean isRefresh) { + + CircleCollectBIngliBean bean = GsonTools.fromGsonToBean(result,CircleCollectBIngliBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data); + + if (bean.data== null || bean.data.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("您暂未收藏查房实录"); + }else{ + load_empty.setVisibility(View.GONE); + DataList.addAll(bean.data); + } + } else { + //加载更多下一页时候e + DataList.addAll(bean.data); + + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new MessageAdapter(DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.totalPage ; + LogUtil.i("totalPage="+totalPage+"page="+page); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if(!isRefresh){ + ToastUtil.showMessage("没有更多收藏了"); + } + + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + }else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + CircleCollectBIngliBean.Collection list = DataList.get(p); + String path = list.path; + String bookuuid = list.other_uuid; + String agreenum = list.agreenum; + String readnum = list.readnum; + Intent intent = new Intent(getActivity(), NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml+path); + intent.putExtra("title","病例详情"); + intent.putExtra("collection",list.title); + intent.putExtra("newsTitle",list.title); + intent.putExtra("other_uuid",bookuuid); + intent.putExtra("agreenum",agreenum); + intent.putExtra("readnum",readnum); + intent.putExtra("path",path); + intent.putExtra("flag",7); + startActivity(intent); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BasicInfoFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BasicInfoFragment.java new file mode 100644 index 0000000..9f1de6a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BasicInfoFragment.java @@ -0,0 +1,127 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Bundle; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.InterrogationPatientInfoBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateGetAge; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +/** + * Created by WANGChengXin on 2019/7/18. + * 基本资料 + */ + +public class BasicInfoFragment extends BaseFragment { + private View view; + private TextView tv_name,tv_sex,tv_age,tv_address,tv_pregnant,tv_duedata,tv_livercancer; + private CustomProgressDialog pd; + private InterrogationPatientInfoBean.DataBean data; + private int age; + private RelativeLayout rl_pregnant; + private RelativeLayout rl_duedata; + + @Override + public View onCreateSuccessedView() { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_basicinfo_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_basicinfo); + } + + Bundle bundle = this.getArguments(); + data = (InterrogationPatientInfoBean.DataBean)bundle.getSerializable("data"); + initView(); + getInfo(); + return view; + } + + private void getInfo() { + tv_name.setText(data.getName().subSequence(0,1)+"**"); + if (data.getSex()==0){ + tv_sex.setText("男"); + rl_duedata.setVisibility(View.GONE); + rl_pregnant.setVisibility(View.GONE); + }else { + tv_sex.setText("女"); + } + String birthday = data.getBirthday(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date date = sdf.parse(birthday.split(" ")[0]); + age = DateGetAge.getAge(date); + tv_age.setText(age+""); + } catch (Exception e) { + e.printStackTrace(); + } + String expected_date_of_childbirth = data.getExpected_date_of_childbirth(); + if (StringUtil.isEmpty(expected_date_of_childbirth)){ + rl_duedata.setVisibility(View.GONE); + }else { + tv_duedata.setText(expected_date_of_childbirth); + } + int whether_pregnant = data.getWhether_pregnant(); + if (whether_pregnant==0){ + rl_pregnant.setVisibility(View.GONE); + rl_duedata.setVisibility(View.GONE); + }else if (whether_pregnant==1){ + rl_pregnant.setVisibility(View.VISIBLE); + tv_pregnant.setText("无计划"); + }else if (whether_pregnant==2){ + rl_pregnant.setVisibility(View.VISIBLE); + tv_pregnant.setText("计划中"); + }else if (whether_pregnant==3){ + rl_pregnant.setVisibility(View.VISIBLE); + tv_pregnant.setText("已怀孕"); + }else if (whether_pregnant==4){ + rl_pregnant.setVisibility(View.VISIBLE); + tv_pregnant.setText("家有宝宝"); + } + + int whether_hbv = data.getWhether_hbv(); + if (whether_hbv==0){ + tv_livercancer.setText("无"); + }else if (whether_hbv==1){ + tv_livercancer.setText("有"); + }else{ + tv_livercancer.setText("未知"); + } + + tv_address.setText(data.getAddress()); + } + + private void initView() { + tv_name = view.findViewById(R.id.tv_name); + tv_sex = view.findViewById(R.id.tv_sex); + tv_age = view.findViewById(R.id.tv_age); + tv_address = view.findViewById(R.id.tv_address); + tv_pregnant = view.findViewById(R.id.tv_pregnant); + rl_pregnant = view.findViewById(R.id.rl_pregnant); + tv_duedata = view.findViewById(R.id.tv_duedata); + rl_duedata = view.findViewById(R.id.rl_duedata); + tv_livercancer = view.findViewById(R.id.tv_livercancer); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment.java new file mode 100644 index 0000000..cb06aed --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment.java @@ -0,0 +1,546 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.activity.FreeagentsearchActivity; +import cn.shangyu.gdxzExpert.activity.MyDownloadActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicSearchActivity; +import cn.shangyu.gdxzExpert.activity.WFArticleListActivity; +import cn.shangyu.gdxzExpert.adapter.LibraryBookshelfAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshGridView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * LibraryListFragment.java + * + * @author liufang + * @date 2015-11-4 上午10:17:14 + * + * @copyright Copyright (C) 2015 河南商宇科技有限公司 + * @desc 功能说明:治疗指南、期刊杂志和权威杂志列表页面 + */ +public class BookshelfFragment extends BaseFragment implements + OnItemClickListener { + private PullToRefreshGridView ptrLv; + private TextView load_empty; + + private LibraryBookshelfAdapter mAdapter; + private List libraryList = new ArrayList<>(); + + private String url; + private BookshelfFragment bookfaament; + private int type; + private LinearLayout mLl_search; + private DrawableCenterButton bt_SearchBook; + private DrawableCenterButtonR bt_screen; + private RelativeLayout mRl_screen; + private GridView mGv_Tage; + private Button mBt_Sure, mBt_reset; + private TagList mTagList; + private List TagPosition; + private List Tags; + private ScreenAdapter mAdapter2; + + public static BookshelfFragment newInstance(String url, int type) { + BookshelfFragment mFragment = new BookshelfFragment(); + Bundle bundle = new Bundle(); + bundle.putString("loadUrl", url); + bundle.putInt("type", type); + mFragment.setArguments(bundle); + return mFragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + url = getArguments().getString("loadUrl"); + type = getArguments().getInt("type", 0); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_bookshelf); + ptrLv = (PullToRefreshGridView) view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mLl_search = (LinearLayout) view.findViewById(R.id.rl_search_book); + bt_screen = (DrawableCenterButtonR) view + .findViewById(R.id.bt_book_screen); + bt_SearchBook = (DrawableCenterButton) view + .findViewById(R.id.bt_book_search); + mRl_screen = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mGv_Tage = (GridView) view.findViewById(R.id.gv_teach); + mBt_Sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_Sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + mRl_screen.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } else { + return; + } + Intent intentLibrary = new Intent(mActivity,BookshelfListActivity.class); + intentLibrary.putExtra("search", keywords.toString()); + intentLibrary.putExtra("type", "0"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + } + }); + + bt_SearchBook.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + PublicSearchActivity.class); + intent.setType("drug"); + startActivity(intent); + } + }); + if (url.equals(Url.getGuideType)) { + mLl_search.setVisibility(View.VISIBLE); + } + if (type == 0) { + load_empty.setText("暂无相关指南"); + getTagList(); + } else { + load_empty.setText("暂无相关文章"); + } + // 设置只有下拉刷新 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + getLibraryList(url); + } + }); + bt_screen.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mTagList == null) { + getTagList(); + } + if (mRl_screen.getVisibility() == View.GONE) { + mRl_screen.setVisibility(View.VISIBLE); + + } else { + mRl_screen.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i) + .getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + } + }); + initData(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("期刊杂志"); + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 获取筛选标签 + */ + public void getTagList() { + RequestParams params = new RequestParams(); + params.addBodyParameter("type", "3"); + HttpHelper.loadData(HttpMethod.POST, Url.getTagList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(mActivity, Url.getTagList, + info.result); + processTage(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + } + }); + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + return; + } + getLibraryList(url); + mGv_Tage.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + } + + /** + * 获取书架列表 + * + * @param loadUrl + */ + private void getLibraryList(String loadUrl) { + if (BuildConfig.DEBUG) + LogUtil.i("getLibraryList.loadUrl = " + loadUrl); + HttpHelper.loadData(HttpMethod.POST, loadUrl, null, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess info.result = " + + info.result); + SharePrefUtil.saveString(mActivity, url, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_Tage.setAdapter(mAdapter2); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + Log.i("TAG","result = "+result); + LibraryListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + ptrLv.setEmptyView(load_empty); + return; + } + } else { + ptrLv.setEmptyView(load_empty); + return; + } + + // 初始化列表的数据 + libraryList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) {// bean.data.news + load_empty.setVisibility(View.VISIBLE); + } else { + load_empty.setVisibility(View.GONE); + libraryList.addAll(bean.data); + } + if (mAdapter == null) { + mAdapter = new LibraryBookshelfAdapter(mActivity, libraryList, type); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + LibraryData data = (LibraryData) parent.getAdapter().getItem(position); + Intent intent = null; + if (type == 1) { + if (ValidateUtils.isContainChinese(data.getName())) { + if ("免费代查".equals(data.getName())) { + intent = new Intent(mActivity, + FreeagentsearchActivity.class); + } else { + intent = new Intent(mActivity, WFArticleListActivity.class); + } + + } else { + if ("PubMeb".equals(data.getName())) { + Intent intents = new Intent(mActivity, + NewsDetailActivity.class); + intents.putExtra("url", + "http://www.ncbi.nlm.nih.gov/m/pubmed/"); + intents.putExtra("title", "PubMed"); + startActivity(intents); + } else { + // ToastUtil.showMessage("英文的"); + intent = new Intent(mActivity, BookshelfListActivity.class); + intent.putExtra("title", data.name); + intent.putExtra("loadUrl", Url.getMagazineList); + intent.putExtra("type", type); + intent.putExtra("typeUuid", data.uuid); + startActivity(intent); + } + return; + } + + } else { + intent = new Intent(mActivity, BookshelfListActivity.class); + } + intent.putExtra("title", data.name); + intent.putExtra("cn", data.cn); + // 此处 判断治疗指南 列表的第一条数据 点击跳转到 我的下载(治疗指南列表的第一条数据是固定不变的) + if (type == 0 && data.name.equals("您已下载")) { + + Intent i = new Intent(getActivity(), MyDownloadActivity.class); + i.setType("0"); + startActivity(i); + } else { + if (type == 0) { + intent.putExtra("loadUrl", Url.getGuideList); + intent.putExtra("type", type); + intent.putExtra("typeUuid", data.uuid); + } else { + intent.putExtra("loadUrl", Url.getMagazineList); + } + startActivity(intent); + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList.data.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + return view; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment2.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment2.java new file mode 100644 index 0000000..86b3263 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/BookshelfFragment2.java @@ -0,0 +1,630 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity2; +import cn.shangyu.gdxzExpert.activity.FreeagentsearchActivity; +import cn.shangyu.gdxzExpert.activity.MyDownloadActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicSearchActivity; +import cn.shangyu.gdxzExpert.activity.WFArticleListActivity; +import cn.shangyu.gdxzExpert.adapter.LibraryBookshelfAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.big.activity.BigMyLibraryActivity; +import cn.shangyu.gdxzExpert.big.activity.BigPublicSearchActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshGridView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * LibraryListFragment.java + * + * @author liufang + * @date 2015-11-4 上午10:17:14 + * + * @copyright Copyright (C) 2015 河南商宇科技有限公司 + * @desc 功能说明:治疗指南、期刊杂志和权威杂志列表页面 + */ +public class BookshelfFragment2 extends BaseFragment implements + OnItemClickListener { + private PullToRefreshGridView ptrLv; + private TextView load_empty; + + private LibraryBookshelfAdapter mAdapter; + private List libraryList = new ArrayList<>(); + + private String url; + private BookshelfFragment bookfaament; + private int type; + private LinearLayout mLl_search,ll_total; + private DrawableCenterButton bt_SearchBook; + private DrawableCenterButtonR bt_screen; + private RelativeLayout mRl_screen; + private GridView mGv_Tage; + private Button mBt_Sure, mBt_reset; + private TagList mTagList; + private List TagPosition; + private List Tags; + private ScreenAdapter mAdapter2; + private TextView tv_total; + private BigMyLibraryActivity bigMyLibraryActivity; + + public static BookshelfFragment2 newInstance(String url, int type) { + BookshelfFragment2 mFragment = new BookshelfFragment2(); + Bundle bundle = new Bundle(); + bundle.putString("loadUrl", url); + bundle.putInt("type", type); + mFragment.setArguments(bundle); + return mFragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + url = getArguments().getString("loadUrl"); + type = getArguments().getInt("type", 0); + + } + View view; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_bookshelf_big); + if(getActivity() instanceof BigMyLibraryActivity) + { + bigMyLibraryActivity= (BigMyLibraryActivity) getActivity(); + } + } + else + { + view = UIUtils.inflate(R.layout.fragment_bookshelf2); + } + + ptrLv = (PullToRefreshGridView) view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + tv_total = (TextView) view.findViewById(R.id.tv_total); + mLl_search = (LinearLayout) view.findViewById(R.id.rl_search_book); + ll_total = (LinearLayout) view.findViewById(R.id.ll_total); + bt_screen = (DrawableCenterButtonR) view + .findViewById(R.id.bt_book_screen); + bt_SearchBook = (DrawableCenterButton) view + .findViewById(R.id.bt_book_search); + mRl_screen = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + mGv_Tage = (GridView) view.findViewById(R.id.gv_teach); + mBt_Sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + mBt_Sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + if(bigMyLibraryActivity!=null) + { + bigMyLibraryActivity.v_g.setVisibility(View.GONE); + } + + mRl_screen.setVisibility(View.GONE); + if (Tags.size() > 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + + if(CommonUtil.BigModule()) + { + Drawable drawable = getResources().getDrawable( + R.drawable.shaixuan_big); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.c333333)); + } + else + { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + + } + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + } else { + return; + } + Intent intentLibrary = new Intent(mActivity,BookshelfListActivity.class); + intentLibrary.putExtra("search", keywords.toString()); + intentLibrary.putExtra("type", "0"); + intentLibrary.putExtra("title", "诊疗指南"); + startActivity(intentLibrary); + } + }); + + bt_SearchBook.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if(CommonUtil.BigModule()) + { + Intent intent = new Intent(mActivity, + BigPublicSearchActivity.class); + intent.setType("drug"); + startActivity(intent); + } + else + { + Intent intent = new Intent(mActivity, + PublicSearchActivity.class); + intent.setType("drug"); + startActivity(intent); + } + + } + }); + if (url.equals(Url.getGuideType)) { + mLl_search.setVisibility(View.VISIBLE); + } + if (type == 0) { + load_empty.setText("暂无相关指南"); + getTagList(); + } else { + load_empty.setText("暂无相关文章"); + } + // 设置只有下拉刷新 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + getLibraryList(url); + } + }); + bt_screen.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mTagList == null) { + getTagList(); + } + if (mRl_screen.getVisibility() == View.GONE) { + mRl_screen.setVisibility(View.VISIBLE); + if(bigMyLibraryActivity!=null) + { + bigMyLibraryActivity.v_g.setVisibility(View.VISIBLE); + } + + } else { + if(bigMyLibraryActivity!=null) + { + bigMyLibraryActivity.v_g.setVisibility(View.GONE); + } + if(bigMyLibraryActivity!=null) + { + bigMyLibraryActivity.v_g.setVisibility(View.GONE); + } + mRl_screen.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null + && Tags.contains(mTagList.data.get(i) + .getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + } + }); + initData(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("诊疗指南"); + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 获取筛选标签 + */ + public void getTagList() { + RequestParams params = new RequestParams(); + params.addBodyParameter("type", "3"); + HttpHelper.loadData(HttpMethod.POST, Url.getTagList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(mActivity, Url.getTagList, + info.result); + processTage(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + } + }); + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + return; + } + getLibraryList(url); + mGv_Tage.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + } + + /** + * 获取书架列表 + * + * @param loadUrl + */ + private void getLibraryList(String loadUrl) { + if (BuildConfig.DEBUG) + LogUtil.i("getLibraryList.loadUrl = " + loadUrl); + HttpHelper.loadData(HttpMethod.POST, loadUrl, null, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess info.result = " + + info.result); + SharePrefUtil.saveString(mActivity, url, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + // 标签解析 + public void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_Tage.setAdapter(mAdapter2); + } + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + Log.i("TAG","result = "+result); + LibraryListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + ptrLv.setEmptyView(load_empty); + return; + } + } else { + ptrLv.setEmptyView(load_empty); + return; + } + + // 初始化列表的数据 + libraryList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) {// bean.data.news + load_empty.setVisibility(View.VISIBLE); + } else { + load_empty.setVisibility(View.GONE); + libraryList.addAll(bean.data); + } + if (libraryList.size()>9){ + ViewGroup.LayoutParams layoutParams = ptrLv.getLayoutParams(); + layoutParams.height = getFrameActivity().getResources().getDimensionPixelOffset(R.dimen.dp760); + ptrLv.setLayoutParams(layoutParams); + } + if (mAdapter == null) { + mAdapter = new LibraryBookshelfAdapter(mActivity, libraryList, type); + ptrLv.getRefreshableView().setAdapter(mAdapter); + + } else { + mAdapter.notifyDataSetChanged(); + } +// SetListViewHeightBasedOnChildrenUtil.setGridViewHeight(ptrLv); +// mAdapter.notifyDataSetChanged(); + if (type == 1) { + ll_total.setVisibility(View.GONE); + } else { + tv_total.setText("共有"+bean.totalGuideT+"份文献"); + } + + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + LibraryData data = (LibraryData) parent.getAdapter().getItem(position); + Intent intent = null; + if (type == 1) { + if (ValidateUtils.isContainChinese(data.getName())) { + if ("免费代查".equals(data.getName())) { + intent = new Intent(mActivity, + FreeagentsearchActivity.class); + } else { + intent = new Intent(mActivity, WFArticleListActivity.class); + } + + } else { + if ("PubMeb".equals(data.getName())) { + Intent intents = new Intent(mActivity, + NewsDetailActivity.class); + intents.putExtra("url", + "http://www.ncbi.nlm.nih.gov/m/pubmed/"); + intents.putExtra("title", "PubMed"); + startActivity(intents); + } else { + // ToastUtil.showMessage("英文的"); + intent = new Intent(mActivity, BookshelfListActivity.class); + intent.putExtra("title", data.name); + intent.putExtra("loadUrl", Url.getMagazineList); + intent.putExtra("type", type); + intent.putExtra("typeUuid", data.uuid); + startActivity(intent); + } + return; + } + + } else { + intent = new Intent(mActivity, BookshelfListActivity2.class); + } + intent.putExtra("title", data.name); + intent.putExtra("cn", data.cn); + // 此处 判断治疗指南 列表的第一条数据 点击跳转到 我的下载(治疗指南列表的第一条数据是固定不变的) + if (type == 0 && data.name.equals("您已下载")) { + + Intent i = new Intent(getActivity(), MyDownloadActivity.class); + i.setType("0"); + startActivity(i); + } else { + if (type == 0) { + intent.putExtra("loadUrl", Url.getGuideList); + intent.putExtra("type", type); + intent.putExtra("typeUuid", data.uuid); + } else { + intent.putExtra("loadUrl", Url.getMagazineList); + } + startActivity(intent); + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList.data.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.gv_item_screen_big); + } + else + { + view = UIUtils.inflate(R.layout.gv_item_screen); + } + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + return view; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionCollentFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionCollentFragment.java new file mode 100644 index 0000000..7f6aebb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionCollentFragment.java @@ -0,0 +1,236 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.CasediscussionCollentAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CasediscussionCollentBean; +import cn.shangyu.gdxzExpert.bean.CasediscussionCollentBean.CasediscussionCollent; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +public class CasediscussionCollentFragment extends BaseFragment { + + private PullToRefreshListView ptrLv; + private HttpHandler httpHandler; + private int page = 1; + private CasediscussionCollentAdapter casediscussionCollentAdapter; + private List casediscussionCollents = new ArrayList<>(); + + @Override + public View onCreateSuccessedView() { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_casediscussion_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_casediscussion); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未收藏病例"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + casediscussionCollentAdapter = new CasediscussionCollentAdapter( + mActivity, casediscussionCollents); + setLastUpdateTime(); + + ptrLv.setAdapter(casediscussionCollentAdapter); + ptrLv.getRefreshableView().setOnItemClickListener( + new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + + } + }); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getNewsList(Url.getcollectionList, page, true); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getNewsList(Url.getcollectionList, page, false); + } + }); + post(); + return view; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + if(BaseApplication.getIscollent() || BaseApplication.getNotifyexit()){ + page = 1; + getNewsList(Url.getcollectionList, page, true); + BaseApplication.setIscollent(false); + BaseApplication.setNotifyexit(false); + } + + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + } + + private void post() { + // TODO Auto-generated method stub + /*String result = SharePrefUtil.getString(mActivity,Url.getcollectionList,null); + if (!TextUtils.isEmpty(result)) { + prodata(result); + } else { + // 显示加载框 + showLoadingProgress(); + }*/ + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + page = 1; + getNewsList(Url.getcollectionList, page, true); + } + + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + + /** + * 请求服务器 getNewsList + */ + private void getNewsList(final String loadUrl, final int page, + final boolean isRefresh) { + String expertUuid = SharePrefUtil.getString(mActivity, Constant.uuid, + "");// 提取专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("page", String.valueOf(page)); + params.addBodyParameter("type", String.valueOf(4)); + params.addBodyParameter("title", ""); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(mActivity, Url.getcollectionList,info.result); + prodata(info.result); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + private void prodata(String result) { + // TODO Auto-generated method stub + CasediscussionCollentBean bean = GsonTools.fromGsonToBean(result, + CasediscussionCollentBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + if (page == 1) { + // 初始化列表新闻的数据 + casediscussionCollents.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.size()); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + casediscussionCollents.addAll(bean.data); + } + } else { + casediscussionCollents.addAll(bean.data); + } + // 实例化适配器 + if (casediscussionCollentAdapter == null) { + casediscussionCollentAdapter = new CasediscussionCollentAdapter( + mActivity, casediscussionCollents); + ptrLv.getRefreshableView().setAdapter(casediscussionCollentAdapter); + } else { + casediscussionCollentAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + LogUtil.i("totalPage=" + totalPage + "page=" + page); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多收藏了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionFragment.java new file mode 100644 index 0000000..a2a9f76 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CasediscussionFragment.java @@ -0,0 +1,279 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.CasediscussionAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CasediscussionBean; +import cn.shangyu.gdxzExpert.bean.CasediscussionBean.DataBean.Casediscussion; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class CasediscussionFragment extends BaseFragment implements OnCallBackFromNet { + + private PullToRefreshListView ptrLv; + private HttpHandler httpHandler; + private int page = 1; + private CasediscussionAdapter casediscussionAdapter; + private List casediscussion = new ArrayList<>(); + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_casediscussion); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无交流病例"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + casediscussionAdapter = new CasediscussionAdapter(mActivity, + casediscussion); + setLastUpdateTime(); + + ptrLv.setAdapter(casediscussionAdapter); + ptrLv.getRefreshableView().setOnItemClickListener( + new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + + } + }); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getNewsList(Url.getCaseDiscussList, true, false, page); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getNewsList(Url.getCaseDiscussList, false, false, page); + } + }); + post(); + return view; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + + if (BaseApplication.getNotify() == true) { + page = 1; + getNewsList(Url.getCaseDiscussList, true, false, page); + BaseApplication.setNotify(false); + } + String commentuuid = SharePrefUtil.getString(mActivity, "commentuuid", + ""); + int commentnum = SharePrefUtil.getInt(mActivity, "commentnum", -1); + if (!StringUtil.isEmpty(commentuuid) && commentnum != -1) { + if (casediscussion.size() > 0) { + + for (int i = 0; i < casediscussion.size(); i++) { + if (casediscussion.get(i).getUuid().equals(commentuuid)) { + casediscussion.get(i).setCommentNum(commentnum+""); + casediscussionAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "commentuuid"); + SharePrefUtil.clear(mActivity, "commentnum"); + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void post() { + // TODO Auto-generated method stub + String result = SharePrefUtil.getString(mActivity, + Url.getCaseDiscussList+"1", null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + page = 1; + getNewsList(Url.getCaseDiscussList, true, false, page); + } + + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + + /** + * 请求服务器 getNewsList + */ + private void getNewsList(final String loadUrl, final boolean isRefresh, + final boolean isTopNews, final int page) { + Map map=new HashMap<>(); + map.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(loadUrl,map,101,this); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(mActivity, +// Url.getCaseDiscussList+"1", info.result); +// processData(info.result); +// Log.i("inforesult============", info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + CasediscussionBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, CasediscussionBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("数据异常,请重新刷新"); + } + if (bean == null || !"200".equals(bean.getCode())) { + if(bean==null){ + ToastUtil.showToast("服务器数据错误"); + }else{ + ToastUtil.showToast(bean.getMessage()); + } + + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + casediscussion.clear(); + // 数据为空 + LogUtil.i("size:" + bean.getData().getList().size()); + if (bean.getData().getList() == null + || bean.getData().getList().isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + casediscussion.addAll(bean.getData().getList()); + } + } else { + casediscussion.addAll(bean.getData().getList()); + } + // 实例化适配器 + if (casediscussionAdapter == null) { + casediscussionAdapter = new CasediscussionAdapter(mActivity, + casediscussion); + ptrLv.getRefreshableView().setAdapter(casediscussionAdapter); + } else { + casediscussionAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.getData().getTotalPage(); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多病历了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + SharePrefUtil.saveString(mActivity, + Url.getCaseDiscussList+"1", resultJson); + processData(resultJson); + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChangjianQuestionFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChangjianQuestionFragment.java new file mode 100644 index 0000000..7bcabd2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChangjianQuestionFragment.java @@ -0,0 +1,212 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.graphics.Bitmap; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.ItemLongClickedPopWindow; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Constant.Changjianwenti; + +/** + * Created by WANGChengXin on 2019/10/8. + * 常见问题 + */ + +public class ChangjianQuestionFragment extends BaseFragment { + private X5WebView mWebView; + private View loadingView; +// private String url = "http://wx.igandan.com/QaA/toindex"; + private String url = Changjianwenti; + private WebSettings settings; + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_news_detail); + //网页加载 + X5WebView.initHardwareAccelerate(getActivity()); + mWebView = view.findViewById(R.id.news_detail_wv); + loadingView = view.findViewById(R.id.loading_view); + showLoadingView(); + initData(); + return view; + } + + private void initData() { +// url = getIntent().getStringExtra("url"); + // mWebView.setInitialScale(25); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + mWebView.setWebViewClient(new WebViewClient() { + + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(final WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + // intent = getIntent(); + // content = intent.getStringExtra("content"); + // mWebView.loadUrl(Url.urlHtml+content); + // mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); + + mWebView.setOnLongClickListener(new View.OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + // TODO Auto-generated method stub + WebView.HitTestResult result = ((WebView) v).getHitTestResult(); + + if (null == result) + return false; + int type = result.getType(); + final String imgurl = result.getExtra(); + final ItemLongClickedPopWindow itemLongClickedPopWindow = new ItemLongClickedPopWindow( + getContext(), + ItemLongClickedPopWindow.IMAGE_VIEW_POPUPWINDOW, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + if (type == 0) { + return false; + } + switch (type) { + case WebView.HitTestResult.PHONE_TYPE: // 处理拨号 + break; + case WebView.HitTestResult.EMAIL_TYPE: // 处理Email + break; + case WebView.HitTestResult.GEO_TYPE: // TODO + break; + case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接 + // Log.d(DEG_TAG, "超链接"); + break; + case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: + break; + case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项 + // 通过GestureDetector获取按下的位置,来定位PopWindow显示的位置 + itemLongClickedPopWindow.showAtLocation( + getActivity().findViewById(R.id.ll_bottom), Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + break; + default: + break; + } + itemLongClickedPopWindow.getView( + R.id.item_longclicked_lookImage).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + ArrayList urls = new ArrayList(); + urls.add(new ViewImageInfo(0, imgurl, imgurl)); + CCPAppManager.startChattingImageViewAction(getActivity(), + 0, urls, true); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_viewImage).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_saveImage).setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + // 下载 + itemLongClickedPopWindow.dismiss(); + // 点击图片后将图片保存到SD卡跟目录下的Test文件夹内 + new DownLoadUrlImage(imgurl, getActivity()); + ToastUtil.showMessage( "图片保存"); + } + }); + return true; + } + }); + loadurl(mWebView, url); + } + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + public void showLoadingView() { + if (loadingView != null) { + loadingView.setVisibility(View.VISIBLE); + } + } + /** + * 隐藏加载网页时候显示加载中view dismissLoadingView + * + * void + */ + public void dismissLoadingView() { + if (loadingView != null) { + loadingView.setVisibility(View.GONE); + } + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChinWFCollectFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChinWFCollectFragment.java new file mode 100644 index 0000000..c070c58 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChinWFCollectFragment.java @@ -0,0 +1,348 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookDetailActivity; +import cn.shangyu.gdxzExpert.adapter.WFCollectAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.WFCollectBean; +import cn.shangyu.gdxzExpert.bean.WFCollectBean.WFBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ChinWFCollectFragment extends BaseFragment implements + OnItemClickListener { + + private WFCollectAdapter mAdapter; + private ArrayList mList = new ArrayList(); + private PullToRefreshListView ptrLv; + private String url = Url.getCollectList; + + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + + public interface OnKepuRefreshListener { + void onKepuRefresh(String url); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_kepu_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_kepu); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + view.findViewById(R.id.bt_patient_video).setVisibility(View.GONE); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未收藏文献"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getScienceList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getScienceList(url); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + public void initData() { + + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url + "1", null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + + showProgressDialog("正在加载"); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getScienceList(url); + } + + public void getScienceList(final String loadUrl) { + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("type", 4 + ""); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("getScienceList().onSuccess info.result = " + + info.result); + if (page == 1) { + SharePrefUtil.saveString(mActivity, loadUrl + "1", + info.result); + // 保存缓存的时间 + SharePrefUtil.saveString( + mActivity, + "key_kepu_fragment_cache_date", + DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getScienceList().onFailure = " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + closeProgressDialog(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + WFCollectBean bean = GsonTools.fromGsonToBean(result, + WFCollectBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data.list == null || bean.data.list.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new WFCollectAdapter(mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + // if (page > 1) { + // // 是否有更多 + // if (bean.data.list == null || bean.data.list.isEmpty()) {// + // 由于暂时虚构没数据,所以加载更多也没数据 + // ToastUtil.showMessage("没有更多收藏了"); + // ptrLv.setMode(Mode.PULL_FROM_START); + // if (page > 1) + // page--; + // } else { + // ptrLv.setMode(Mode.BOTH); + // } + // } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多收藏了"); + } + + ptrLv.setMode(Mode.PULL_FROM_START); + // } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String libraryUuid = mList.get(p).getArticleID(); + String creator = mList.get(p).getCreator(); + String keyWords = mList.get(p).getKeyWords(); + String source = mList.get(p).getSource(); + String title = mList.get(p).getTitle(); + String year = mList.get(p).getYear(); + + + Intent intent = new Intent(mActivity, BookDetailActivity.class); + intent.putExtra("creator", creator); + intent.putExtra("keyWords", keyWords); + intent.putExtra("source", source); + intent.putExtra("title", title); + intent.putExtra("Year", year+""); + intent.putExtra("articleId", libraryUuid); + intent.putExtra("from", "已收藏"); + if(!StringUtil.isEmpty(source)) + { + if(source.startsWith("中华")) + { + if(source.contains("中华肝脏外科手术学电子杂志")||source.contains("中华护理杂志") + ||source.contains("中华腔镜外科杂志")) + { + intent.putExtra("isneeddown", true); + } + else + { + intent.putExtra("isneeddown", false); + } + + } + else if(source.equals("药物不良反应杂志")) + { + intent.putExtra("isneeddown", false); + } + else + { + intent.putExtra("isneeddown", true); + } + } + else + { + intent.putExtra("isneeddown", true); + } + startActivityForResult(intent, 201); + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + String uuid = data.getStringExtra("articleId"); + for (int i = 0; i < mList.size(); i++) { + if (uuid.equals(mList.get(i).getArticleID())) { + mList.remove(i); + mAdapter.notifyDataSetChanged(); + if (mList.size() <= 0) { + getScienceList(url); + } + } + } + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChineaseWFFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChineaseWFFragment.java new file mode 100644 index 0000000..c5a8283 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ChineaseWFFragment.java @@ -0,0 +1,285 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.app.Dialog; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import java.io.File; +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookDetailActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.adapter.WFArticleDownloadAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.ecdemo.storage.BookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.WFBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ChineaseWFFragment extends BaseFragment implements + OnItemClickListener, OnItemLongClickListener { + private PullToRefreshListView ptrLv; + private TextView load_empty; + private WFArticleDownloadAdapter mWFAdapter; + private ArrayList list = new ArrayList();; + public final static int REQUESTCODE = 222; + WFBookDownloadSqlManager sq; + SQLiteDatabase db; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + instance = this; + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_my_download_big1); + } + else + { + view = UIUtils.inflate(R.layout.activity_my_download); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_down);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 设置只有下拉刷新 + ptrLv.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.getRefreshableView().setOnItemLongClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + // getDownLoadList(url); + } + }); + db = mActivity.openOrCreateDatabase("wfdownload.db", + mActivity.MODE_PRIVATE, null); + sq = new WFBookDownloadSqlManager(db); + load_empty.setText("您暂未下载文献"); + initData(); + return view; + } + + /** + * 实例化数据 + */ + private void initData() { + list.clear(); + ArrayList downList; + ArrayList downListold; + ArrayList downListnow; + downList = WFBookDownloadSqlManager.getDownloadInfoByState(2); + downListold= WFBookDownloadSqlManager.getDownloadInfoByState(4); + downListnow= WFBookDownloadSqlManager.getDownloadInfoByState(5); + if (downListold != null &&!downListold.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListold); + + } + if (downListnow != null &&!downListnow.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListnow); + + } + if (downList == null || downList.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } else { + for (int i = 0; i < downList.size(); i++) { + list.add(0, downList.get(i)); + } + + if (mWFAdapter == null) { + + mWFAdapter = new WFArticleDownloadAdapter(list); + ptrLv.getRefreshableView().setAdapter(mWFAdapter); + + } else { + + mWFAdapter.notifyDataSetChanged(); + + } + onLoaded(); + } + closeProgressDialog(); + + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(filePath)) { + delVisit(p, filePath, listUuid); + } else { + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(p); + + WFBookDownloadSqlManager.delDownladInfo(listUuid); + mWFAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + ToastUtil.showToast("文件不存在!"); + } + return true; + } + + public void delVisit(final int positions, final String path, + final String uuid) { + final ECListDialog dialog = new ECListDialog(mActivity, + new String[] { getString(R.string.file_delete, "") }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + File file = new File(path); + if (file.exists()) { + file.delete(); + } + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(positions); + + WFBookDownloadSqlManager.delDownladInfo(uuid); + mWFAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + dialog.dismiss(); + } + }); + dialog.setTitle("删除此文章"); + dialog.show(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + + String ssss = list.get(p).getCurrentProgress(); + String creator = ssss.substring(0, ssss.indexOf("0.0")); + String keyWords = ssss.substring(ssss.indexOf("0.0") + 3); + String source = list.get(p).getTitle(); + String title = list.get(p).getPath(); + String year = list.get(p).getTime(); + + + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(listUuid)) { + + // openFile(filePath, listUuid, p); + if(WFBookDownloadSqlManager.getDownloadFilePath(listUuid)!=null&&WFBookDownloadSqlManager.getDownloadFilePath(listUuid).contains(Constant.OldfilePath)) + { + DownloadModel downloadModel = new DownloadModel(list + .get(p).getUuid()); + downloadModel.setState(4); + WFBookDownloadSqlManager.updateDownloadState(downloadModel); + } + + Intent intent = new Intent(mActivity, BookDetailActivity.class); + intent.putExtra("articleId", listUuid); + + intent.putExtra("creator", creator); + intent.putExtra("keyWords", keyWords); + intent.putExtra("source", source); + intent.putExtra("title", title); + intent.putExtra("Year", year+""); + intent.putExtra("articleId", listUuid); +// intent.putExtra("path", list.get(p).getFilePath()); + intent.putExtra("path", WFBookDownloadSqlManager.getDownloadFilePath(listUuid)); + intent.putExtra("from", "已收藏"); + startActivity(intent); + + } else { + // 从数据库清除此下载记录 + // list移除相应位置 + list.remove(p); + WFBookDownloadSqlManager.delDownladInfo(listUuid); + mWFAdapter.notifyDataSetChanged(); + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + ToastUtil.showToast("文件不存在,请重新下载!"); + } + } + private static ChineaseWFFragment instance; + public static ChineaseWFFragment getInstance() { + return instance; + } + public void notifyAdapter() { + if (mWFAdapter != null) { + mWFAdapter.notifyDataSetChanged(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CicleFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CicleFragment.java new file mode 100644 index 0000000..1324b4d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CicleFragment.java @@ -0,0 +1,386 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.content.Intent; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CircleBean; +import cn.shangyu.gdxzExpert.bean.CircleBean.CircleData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +/** + * 经典病例列表 + * 类名称:CicleFragment + */ +public class CicleFragment extends BaseFragment implements OnItemClickListener { + + private ScicleAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + private int page = 1; + public static String MedicalRecordShareList = Url.getmedicalRecordShareList; + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_scientific_system_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_system);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无查房实录"); + // 上拉加载不可用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(MedicalRecordShareList, page, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(MedicalRecordShareList, page, false); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } +// @Override +// public void onResume() { +// // TODO Auto-generated method stub +// getList(MedicalRecordShareList, page, false); +// super.onResume(); +// } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, + MedicalRecordShareList + "1", null); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { + // 显示加载框 + showLoadingProgress(); +// } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(MedicalRecordShareList, page, true); + } + + /** + * 请求服务器。获取病历列表数据 + */ + private void getList(final String loadUrl, final int page, final boolean isRefresh) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("查房实录 = "+info.result); + if (page == 1) { + SharePrefUtil.saveString(mActivity, MedicalRecordShareList + "1", + info.result); + } + processData(info.result); + + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); +// if (page > 1) { +// page--; +// } + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + CircleBean bean = GsonTools.fromGsonToBean(result, CircleBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.size()); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + DataList.addAll(bean.data); + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ScicleAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多病例了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class ScicleAdapter extends BaseAdapter { + + private Context context; + private List List; + + public ScicleAdapter(Context context, ArrayList List) { + this.context = context; + this.List = List; + } + + @Override + public int getCount() { + return List.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = View + .inflate(context, R.layout.item_circles, null); + mHolder = new NewsViewHolder(); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_scientific_title); + mHolder.tvreadNum = (TextView) convertView + .findViewById(R.id.tv_collect_readNum); + mHolder.tvagree = (TextView) convertView + .findViewById(R.id.tv_collec_agree); + mHolder.tvdate = (TextView) convertView + .findViewById(R.id.tv_collec_date); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + CircleData s = List.get(position); + mHolder.tvTitle.setText(s.title); + + + //点赞和阅读量 + Double agree = Double.parseDouble(s.agreenum); + if (agree > 10000) { + double agreeNum = (double) (Math.round((double) agree / 1000) / 10.0); + mHolder.tvagree.setText(agreeNum + "万"); + } else { + mHolder.tvagree.setText(s.agreenum); + } + Double read = Double.parseDouble(s.readnum); + if (read > 10000) { + double readNum = (double) (Math.round((double) read / 1000) / 10.0); + mHolder.tvreadNum.setText(readNum + "万"); + } else { + mHolder.tvreadNum.setText(s.readnum); + } +// if (!TextUtils.isEmpty(s.create_date) && s.create_date.length() > 10) { +// mHolder.tvdate.setText(s.create_date.substring(5, 10)); +// }else + if(!TextUtils.isEmpty(s.create_date)){ + mHolder.tvdate.setText(s.create_date); + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private HttpHandler httpHandler; + + private class NewsViewHolder { + public TextView tvdate; + public TextView tvagree; + public TextView tvTitle; + public TextView tvreadNum; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + CircleData list = DataList.get(p); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url",Url.urlHtml+list.path); + intent.putExtra("title","病例详情"); + intent.putExtra("collect",list.title); + intent.putExtra("newsTitle",list.title); + intent.putExtra("type", list.type); + intent.putExtra("nfagreenum", list.agreenum); + intent.putExtra("nfreadnum", list.readnum); + intent.putExtra("nfsuuuid", list.uuid); + intent.putExtra("npath", list.path); + intent.putExtra("flag", 6); + // mActivity.startActivity(intent); + startActivityForResult(intent, 113); + } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (resultCode == 113) { + String uuid = data.getStringExtra("uuid"); + if (DataList != null) { + for (int i = 0; i < DataList.size(); i++) { + if (uuid.equals(DataList.get(i).getUuid())) { + DataList.get(i).setAgreenum( + data.getStringExtra("agreenum")); + DataList.get(i).setReadnum(data.getStringExtra("readnum")); + } + } + } + ListAdapter.notifyDataSetChanged(); + } + super.onActivityResult(requestCode, resultCode, data); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CompletedFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CompletedFragment.java new file mode 100644 index 0000000..aaf4f92 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/CompletedFragment.java @@ -0,0 +1,218 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.AppliedListAdapter; +import cn.shangyu.gdxzExpert.adapter.CompletedListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MailanListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class CompletedFragment extends BaseFragment implements OnCallBackFromNet{ + private PullToRefreshListView lv_visit; + private CustomProgressDialog pd; + private int page =1 ; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private MailanListBean fromJsonBean; + private ArrayList beans; + private CompletedListAdapter completedListAdapter; + private Handler handler = new Handler() { + + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(PullToRefreshBase.Mode.DISABLED); + return; + } + setAdapter(); + lv_visit.onRefreshComplete(); + if (beans.size() < 4 || fromJsonBean.getData().getList().size() == 0) {//当数量少于4或无更多,则不让其上拉加载 + lv_visit.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + } + + pd.dismiss(); + + break; + default: + break; + } + + } + + private void setAdapter() { + // TODO Auto-generated method stub + if (completedListAdapter == null) { + completedListAdapter = new CompletedListAdapter(beans, getActivity()); + lv_visit.setAdapter(completedListAdapter); + } else { + completedListAdapter.notifyDataSetChanged(); + } + } + }; + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_mylanlist); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + initListViewTipText(); + lv_visit.setEmptyView(ll_empty); + completedListAdapter = null; + page = 1; + pd.show(); + beans = new ArrayList<>(); +// getData(); + return view; + } + @Override + public void onResume() { + super.onResume(); + page = 1; + getData(); + } + private void initListViewTipText() { + lv_visit.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(getActivity(), + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + private void refreshItems() { + // TODO Auto-generated method stub + page = 1; + getData(); + } + + + + private void geneItems() { + // TODO Auto-generated method stub + page++; + getData(); + } + private void getData() { + Map map = new HashMap<>(); + map.put("page",page+""); + map.put("status","2"); + sendJsonPostParamtoNetSignMD5(Url.mailanList,map,1,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("已完成 = "+resultJson); + pd.dismiss(); + if (TextUtils.isEmpty(resultJson)) { + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, MailanListBean.class); + if (page==1) { + if (beans.size() != 0) { + beans.clear(); + page = 1; + } + }else{ + if (fromJsonBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + + } + } + if (fromJsonBean.getData()!=null){ + beans.addAll(fromJsonBean.getData().getList()); + } + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ConfirmedFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ConfirmedFragment.java new file mode 100644 index 0000000..cdf86a0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ConfirmedFragment.java @@ -0,0 +1,226 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.LinearLayout; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.CompletedListAdapter; +import cn.shangyu.gdxzExpert.adapter.ConfirmedListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MailanListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/24. + */ + +public class ConfirmedFragment extends BaseFragment implements OnCallBackFromNet{ + private PullToRefreshListView lv_visit; + private CustomProgressDialog pd; + private int page = 1; + private boolean isVisibleToUser; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private MailanListBean fromJsonBean; + private ArrayList beans; + private ConfirmedListAdapter confirmedListAdapter; + private Handler handler = new Handler() { + + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(PullToRefreshBase.Mode.DISABLED); + return; + } + setAdapter(); + lv_visit.onRefreshComplete(); + if (beans.size() < 4 || fromJsonBean.getData().getList().size() == 0) {//当数量少于4或无更多,则不让其上拉加载 + lv_visit.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + } + + pd.dismiss(); + + break; + default: + break; + } + + } + + private void setAdapter() { + // TODO Auto-generated method stub + if (confirmedListAdapter == null) { + confirmedListAdapter = new ConfirmedListAdapter(beans, getActivity()); + lv_visit.setAdapter(confirmedListAdapter); + } else { + confirmedListAdapter.notifyDataSetChanged(); + } + } + }; + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_mylanlist); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + initListViewTipText(); + lv_visit.setEmptyView(ll_empty); + beans = new ArrayList<>(); + + return view; + } + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + this.isVisibleToUser = isVisibleToUser; + if (isVisibleToUser){ + pd.show(); + getData(); + } + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + private void initListViewTipText() { + lv_visit.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(getActivity(), + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + private void refreshItems() { + // TODO Auto-generated method stub + page = 1; + getData(); + } + + @Override + public void onResume() { + super.onResume(); + page = 1; + getData(); + } + + private void geneItems() { + // TODO Auto-generated method stub + page++; + getData(); + } + private void getData() { + Map map = new HashMap<>(); + map.put("page",page+""); + map.put("status","1"); + sendJsonPostParamtoNetSignMD5(Url.mailanList,map,1,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("已确认 = "+resultJson); + pd.dismiss(); + if (TextUtils.isEmpty(resultJson)) { + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, MailanListBean.class); + if (page==1) { + if (beans.size() != 0) { + beans.clear(); + page = 1; + } + }else{ + if (fromJsonBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + + } + } + if (fromJsonBean.getData()!=null){ + beans.addAll(fromJsonBean.getData().getList()); + } + handler.sendEmptyMessage(GET_DATA_SUCCESS); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/DownloadCollectFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/DownloadCollectFragment.java new file mode 100644 index 0000000..f442697 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/DownloadCollectFragment.java @@ -0,0 +1,211 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.List; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.DownloadCollectAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +/** + * DownloadCollectFragment.java + * @author liufang + * @date 2015-11-5 下午1:04:52 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:我的图书馆下载和收藏页面 + */ +public class DownloadCollectFragment extends BaseFragment implements OnItemClickListener { + private PullToRefreshListView ptrLv; + private TextView load_empty; + + private DownloadCollectAdapter mAdapter; + private List libraryList = new ArrayList<>(); + + private String url; + + public static DownloadCollectFragment newInstance(int type) { + DownloadCollectFragment mFragment = new DownloadCollectFragment(); + Bundle bundle = new Bundle(); + bundle.putInt("type", type); + mFragment.setArguments(bundle); + return mFragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_download_collect); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_download);// 下拉刷新的listview控件 + + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 设置只有下拉刷新 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + getDownloadList(url); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + */ + private void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + //网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + return; + } + getDownloadList(url); + } + + /** + * 获取书架列表 + * @param loadUrl + */ + private void getDownloadList(String loadUrl) { + if (BuildConfig.DEBUG) + LogUtil.i("getDownloadList.loadUrl = " + loadUrl); + if (StringUtil.isEmpty(loadUrl)) { + onLoaded(); + load_empty.setVisibility(View.VISIBLE); + return; + } + HttpHelper.loadData(HttpMethod.POST, loadUrl, null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (BuildConfig.DEBUG) + LogUtil.i("getDownloadList.onSuccess info.result = " + info.result); + SharePrefUtil.saveString(mActivity, url, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + if (BuildConfig.DEBUG) + LogUtil.i("getDownloadList.onFailure = " + arg1); + onLoaded(); + ptrLv.getRefreshableView().setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + + LibraryListBean bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + // 初始化列表的数据 + libraryList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) {// bean.data.news + load_empty.setVisibility(View.VISIBLE); + } else { + load_empty.setVisibility(View.GONE); + libraryList.addAll(bean.data); + + } + + if (mAdapter == null) { + mAdapter = new DownloadCollectAdapter(mActivity, libraryList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/EEWFCollectFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/EEWFCollectFragment.java new file mode 100644 index 0000000..43f2bd1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/EEWFCollectFragment.java @@ -0,0 +1,313 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.EnglishDetailActivity; +import cn.shangyu.gdxzExpert.adapter.EnglishCollectAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CollectListBean; +import cn.shangyu.gdxzExpert.bean.CollectListBean.CollectList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class EEWFCollectFragment extends BaseFragment implements + OnItemClickListener { + + private EnglishCollectAdapter mAdapter; + // private ArrayList mList = new + // ArrayList(); + private ArrayList mList = new ArrayList(); + private PullToRefreshListView ptrLv; + private String url = Url.getCollectList; + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + + public interface OnKepuRefreshListener { + void onKepuRefresh(String url); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_kepu_big1); + } + else + { + view = UIUtils.inflate(R.layout.fragment_kepu); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + view.findViewById(R.id.bt_patient_video).setVisibility(View.GONE); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未收藏文献"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getScienceList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getScienceList(url); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub +// getScienceList(url); + super.onResume(); + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url + "1", null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getScienceList(url); + } + + public void getScienceList(final String loadUrl) { + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("type", String.valueOf(3)); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("getScienceList().onSuccess info.result = " + + info.result); + if (page == 1) { + SharePrefUtil.saveString(mActivity, loadUrl, + info.result); + // 保存缓存的时间 + SharePrefUtil.saveString( + mActivity, + "key_kepu_fragment_cache_date", + DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getScienceList().onFailure = " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + CollectListBean bean = GsonTools.fromGsonToBean(result, + CollectListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data.list == null || bean.data.list.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new EnglishCollectAdapter(mList, getActivity()); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + // if (page > 1) { + // // 是否有更多 + // if (bean.data.list == null || bean.data.list.isEmpty()) {// + // 由于暂时虚构没数据,所以加载更多也没数据 + // ToastUtil.showMessage("没有更多收藏了"); + // ptrLv.setMode(Mode.PULL_FROM_START); + // if (page > 1) + // page--; + // } else { + // ptrLv.setMode(Mode.BOTH); + // } + // } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + // } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String libraryUuid = mList.get(p).libraryUuid; + String isCollect = mList.get(p).isCollect; + String path = mList.get(p).path; + Intent intent = new Intent(mActivity, EnglishDetailActivity.class); + intent.putExtra("url", Url.urlHtml + path); + intent.putExtra("title", "杂志详情"); + intent.putExtra("libraryUuid", libraryUuid); + intent.putExtra("bookType", 1); + intent.putExtra("isCollect", isCollect); + startActivityForResult(intent, 201); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + String uuid = data.getStringExtra("libraryUuid"); + for (int i = 0; i < mList.size(); i++) { + if (uuid.equals(mList.get(i).libraryUuid)) { + mList.remove(i); + mAdapter.notifyDataSetChanged(); + if (mList.size() <= 0) { + getScienceList(url); + } + } + } + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/EarningsFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/EarningsFragment.java new file mode 100644 index 0000000..c273966 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/EarningsFragment.java @@ -0,0 +1,277 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Handler; +import android.os.Message; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.View; +import android.widget.LinearLayout; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PointListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BonusPointsListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class EarningsFragment extends BaseFragment implements OnCallBackFromNet{ + private PullToRefreshListView lv_visit; + private LinearLayout ll_empty; + private CustomProgressDialog pd; + private int startPage = 1; + private BonusPointsListBean fromJsonBean; + private List beans; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private Handler handler = new Handler() { + private PointListAdapter pointListAdapter; + private LocalReceiver localReceiver; + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(Mode.DISABLED); + return; + } + setAdapter(); + lv_visit.onRefreshComplete(); + if (beans.size() < 4||fromJsonBean.getData().getList().size()==0) {//当数量少于4或无更多,则不让其上拉加载 + lv_visit.setMode(Mode.PULL_FROM_START); + }else{ + lv_visit.setMode(Mode.BOTH); + } + + pd.dismiss(); + +// lv_visit.setOnItemClickListener(new OnItemClickListener() { +// @Override +// public void onItemClick(AdapterView arg0, View arg1, +// int arg2, long arg3) { +// // TODO Auto-generated method stub +// // if (SharePrefUtil.getBoolean(UIUtils.getContext(), +// // "show_full_screen_dialog", false)) { +// // SharePrefUtil.saveBoolean(UIUtils.getContext(), +// // "show_full_screen_dialog", true); +// // } +// Intent intent = new Intent(getActivity(), +// GanDanHouseDetialActivity.class); +// intent.putExtra("uuid", beans.get(arg2 - 1).getUuid()); +// intent.putExtra("patient_uuid", beans.get(arg2 - 1) +// .getPatient_uuid()); +// intent.setType("dis"); +// DiscussionFragment.this.startActivity(intent); +// } +// }); + break; + default: + break; + } + + } + + private void setAdapter() { + // TODO Auto-generated method stub + if (pointListAdapter == null) { + pointListAdapter = new PointListAdapter(beans, getActivity()); + lv_visit.setAdapter(pointListAdapter); + } else { + pointListAdapter.notifyDataSetChanged(); + } + } + }; + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_pointlist); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + lv_visit.setMode(Mode.BOTH); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + initListViewTipText(); + lv_visit.setEmptyView(ll_empty); + beans = new ArrayList<>(); + pd.show(); + + + localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); + intentFilter = new IntentFilter(); + intentFilter.addAction("SIGNIN_ACTION"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + getData(); + return view; + } + + + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + boolean booleanExtra = intent.getBooleanExtra("sign", false); + if (booleanExtra) { + getData(); + } + } + } + + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + sendJsonPostParamtoNetSignMD5(Url.bonusPointsList, param, 1, this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub + startPage = 1; + getData(); + } + private void geneItems() { + // TODO Auto-generated method stub + startPage++; + getData(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(getActivity(), + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + pd.dismiss(); + //注销本地接收器 + localBroadcastManager.unregisterReceiver(localReceiver); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + LogUtil.i("获得积分 resultJson = "+resultJson); + switch (resultCode) { + case 1: + if (TextUtils.isEmpty(resultJson)) { + pd.dismiss(); + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, BonusPointsListBean.class); + if (startPage==1) { + if (beans.size() != 0) { + beans.clear(); + startPage = 1; + } + }else{ + if (fromJsonBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + + } + } + if (fromJsonBean.getData()!=null){ + beans.addAll(fromJsonBean.getData().getList()); + } + handler.sendEmptyMessage(GET_DATA_SUCCESS); + + break; + + default: + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/Englishragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/Englishragment.java new file mode 100644 index 0000000..84351fa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/Englishragment.java @@ -0,0 +1,519 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.ActivityNotFoundException; +import android.content.Intent; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import android.os.Environment; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity; +import cn.shangyu.gdxzExpert.activity.MyDownloadActivity; +import cn.shangyu.gdxzExpert.activity.PdfViewActivity; +import cn.shangyu.gdxzExpert.adapter.ENDownloadAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.ecdemo.storage.ENBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class Englishragment extends BaseFragment implements + OnItemClickListener, OnItemLongClickListener, OnCallBackFromNet { + private PullToRefreshListView ptrLv; + private TextView load_empty; + private ENDownloadAdapter enAdapter; + private ArrayList list = new ArrayList();; + public final static int REQUESTCODE = 222; + ENBookDownloadSqlManager sq; + SQLiteDatabase db; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_my_download_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_my_download); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_down);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 设置只有下拉刷新 + ptrLv.setMode(Mode.DISABLED); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.getRefreshableView().setOnItemLongClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + // getDownLoadList(url); + } + }); + load_empty.setText("您暂未下载文献"); + db = mActivity.openOrCreateDatabase("endownload", + mActivity.MODE_PRIVATE, null); + sq = new ENBookDownloadSqlManager(db); + initData(); + return view; + } + + /** + * 实例化数据 + */ + private void initData() { + list.clear(); + ArrayList downList; + ArrayList downListold; + ArrayList downListnow; + downList = ENBookDownloadSqlManager.getDownloadInfoByState(2); + downListold= ENBookDownloadSqlManager.getDownloadInfoByState(4); + downListnow= ENBookDownloadSqlManager.getDownloadInfoByState(5); + if (downListold != null &&!downListold.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListold); + + } + if (downListnow != null &&!downListnow.isEmpty()) + { + if (downList == null || downList.isEmpty()) + { + downList=new ArrayList<>(); + } + downList.addAll(downListnow); + + } + if (downList == null || downList.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } else { + for (int i = 0; i < downList.size(); i++) { + list.add(0, downList.get(i)); + } + + if (enAdapter == null) { + + enAdapter = new ENDownloadAdapter(mActivity, list); + ptrLv.getRefreshableView().setAdapter(enAdapter); + + } else { + + enAdapter.notifyDataSetChanged(); + + } + onLoaded(); + } + closeProgressDialog(); + + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(filePath)) { + delVisit(p, filePath, listUuid); + } else { + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(p); + + ENBookDownloadSqlManager.delDownladInfo(listUuid); + enAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + ToastUtil.showToast("文件不存在!"); + } + return true; + } + + public void delVisit(final int positions, final String path, + final String uuid) { + final ECListDialog dialog = new ECListDialog(mActivity, + new String[] { "删除文章"}); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + File file = new File(path); + if (file.exists()) { + file.delete(); + } + // 从数据库清除此下载记录 + + // list移除相应位置 + list.remove(positions); + + ENBookDownloadSqlManager.delDownladInfo(uuid); + enAdapter.notifyDataSetChanged(); + + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + + dialog.dismiss(); + } + }); + dialog.setTitle("删除此文章"); + dialog.show(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + String filePath = list.get(p).getFilePath(); + String listUuid = list.get(p).getUuid(); + if (!TextUtils.isEmpty(listUuid)) { + openFile(filePath, listUuid, p); + + // Intent intent = new Intent(mActivity, BookDetailActivity.class); + // intent.putExtra("libraryUuid", listUuid); + // startActivity(intent); + + } else { + // 从数据库清除此下载记录 + // list移除相应位置 + list.remove(p); + ENBookDownloadSqlManager.delDownladInfo(listUuid); + enAdapter.notifyDataSetChanged(); + if (list.isEmpty()) { + ptrLv.setEmptyView(load_empty); + } + ToastUtil.showToast("文件不存在,请重新下载!"); + } + } + private int tmpposition; + /** + * 打开文件 openFile + * + * @param path + * @param listUuid + * void + * @param position + */ + public void openFile(final String path, String listUuid, int position) { + if(path.contains(Constant.OldfilePath)) + { + tmpposition=position; + showDialog(tmpposition,"",""); + + +// ToastUtil.showToast("请稍后"); +// downloadPdfen(Url.urlHtml+list.get(position).getFilePath(),); + return; + } + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); +// LogUtil.e("fileMD5 = "+fileMD5); + if (file.exists()) { + + if (file.exists()) { + if (path.contains("pdf")) { + Intent intent1 = new Intent(getActivity(), PdfViewActivity.class); + intent1.putExtra("path", path); + intent1.putExtra("title", "文献详情"); + startActivity(intent1); + } else { + Uri path1 = Uri.fromFile(file); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(path1, "application/pdf"); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + try { + mActivity.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 不支持此格式书籍!"); + } + } + +// Uri path1 = Uri.fromFile(file); +// Intent intent = new Intent(Intent.ACTION_VIEW); +// intent.setDataAndType(path1, "application/pdf"); +// intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); +// try { +// startActivity(intent); +// } catch (ActivityNotFoundException e) { +// ToastUtil.showToast("打开失败,不支持此格式书籍!"); +// } + // } else { // 文件不存在,则进行把此数据从数据库清除 + // // DownloadModel downloadModel = new DownloadModel(listUuid); + // // downloadModel.setState(0); + // // BookDownloadSqlManager.updateDownloadState(downloadModel); + // // 从数据库清除此下载记录 + // + // // list移除相应位置 + // list.remove(position); + // if (type.equals("1")) { + // enAdapter.notifyDataSetChanged(); + // WFBookDownloadSqlManager.delDownladInfo(listUuid); + // } else { + // .notifyDataSetChanged(); + // BookDownloadSqlManager.delDownladInfo(listUuid); + // } + // if (list.isEmpty()) { + // ptrLv.setEmptyView(load_empty); + // } + // Intent intent = getIntent(); + // setResult(RESULT_OK, intent); + // LogUtil.i("listUuid=" + listUuid); + // ToastUtil.showToast("文件已删除,请重新下载!"); + } + } + } + private HttpHandler hand; + private String filePathnew = UIUtils.getContext().getExternalFilesDir("").getAbsolutePath()+ "/gdxzExpert/download/治疗指南/"; + protected void downloadPdfen(String url, final String name, + final int position) { + // TODO Auto-generated method stub + // 下载pdf + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + String[] split = name.split(":"); + String name1 = split[split.length-1]; + final String path = filePathnew + name1 + ".pdf"; + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(url, path, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + true, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + private DownloadModel downloadModel; + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载" + name); + + // 插入下载数据库 + downloadModel = new DownloadModel(list + .get(position).getUuid()); + + downloadModel.setFilePath(path);// 设置文件下载路径 + + + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current, + boolean isUploading) { + } + + /** 下载完成 **/ + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(list + .get(position).getUuid()); + } + list.get(position).setFilePath(path); + enAdapter.notifyDataSetChanged(); + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + if (MyDownloadActivity.getInstance() != null) { + MyDownloadActivity.getInstance() + .notifyAdapter(); + } + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .updateDownloadState(downloadModel); + ENBookDownloadSqlManager.updateDownloadFilePaht(downloadModel); + ToastUtil.showToast(name + "下载完成!"); + // 打开文件 +// openFile(path, list.get(position).getUuid(),position); + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { +// Log.e("下载失败","error"+error.getMessage()+",msg = "+msg); + ToastUtil.showToast(name + "下载失败!"); + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(list + .get(position).getUuid()); + } + downloadModel.setState(4);// 0未下载,1下载中,2已下载 + ENBookDownloadSqlManager + .updateDownloadState(downloadModel); + + if (BookshelfListActivity.getInstance() != null) { + BookshelfListActivity.getInstance() + .notifyAdapter(); + } + + } + }); + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.optString("code"))) + { + if(jsonObject.optJSONObject("data")!=null) + { + downloadPdfen(Url.urlHtml+jsonObject.optJSONObject("data").optString("filepath"), + list.get(tmpposition).getTitle(),tmpposition); + } + + + } + else + { + ToastUtil.showToast(jsonObject.optString("msg")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + + break; + } + + } + public void getMagazineByUuid(String listUuid) + { + Map map = new HashMap<>(); + map.put("uuid",listUuid); + sendJsonPostParamtoNetSignMD5(Url.getMagazineByUuid,map,101,this); + } + public void showDialog(int position,String url,String listUuid) + { + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder(getActivity()).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText(getResources().getString(R.string.redoenload)); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog4.dismiss(); + getMagazineByUuid(list.get(tmpposition).getUuid()); + + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExCourseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExCourseFragment.java new file mode 100644 index 0000000..e457c56 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExCourseFragment.java @@ -0,0 +1,605 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY; +import static cn.shangyu.gdxzExpert.utils.Url.getCourseIndex; + +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.appcompat.widget.Toolbar; +import androidx.core.widget.NestedScrollView; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.analytics.MobclickAgent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.QuestionActivity; +import cn.shangyu.gdxzExpert.activity.SearchClassActivity; +import cn.shangyu.gdxzExpert.adapter.CourseAdapter; +import cn.shangyu.gdxzExpert.adapter.CourseFirstAdapter; +import cn.shangyu.gdxzExpert.adapter.CourseFuAdapter; +import cn.shangyu.gdxzExpert.adapter.CourseTuiAdapter; +import cn.shangyu.gdxzExpert.adapter.CourseTuiAdapter1; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.CircularRectangle; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +public class ExCourseFragment extends BaseFragment implements + OnCallBackFromNet , View.OnClickListener { + + private LinearLayout dotLl,l_im; + private RecyclerView recyclerView,recyclerviewt,recyclerviewt1,recyclerviewf,recyclerviewt2; + private ArrayList dotList; + List type_names; + private RollViewPager mViewPager; + private CourseAdapter courseAdapter; + private CourseFirstAdapter firstAdapter; + private CourseFuAdapter courseFuAdapter; + private CourseTuiAdapter courseTuiAdapter; + CourseTuiAdapter1 courseTuiAdapter1; + CircularRectangle im_1,im_2,im_3,im_4; + LinearLayout l_fanxian1,l_fanxian2; + ListimageViewList; + TextView tv_n1,tv_n2; + RelativeLayout more_1,more_2,more_3,more_4; + RelativeLayout r_jingpin,r_xuewan,r_fuli,r_weining; + RelativeLayout l_xuewan; + public static final int GETINDEX= 101; + public static final int GETINDEXICON= 102; + private JumpCourseListener listener; + public final static String Type_GANRAN="0"; + public final static String Type_XIAOKE="1"; + ImageView top_back_layout,top_right,im_question,im_old; + String xiaoType_id,xueType_id,fuType_id,wType_id; + public NestedScrollView nested; + private Toolbar mToolbar; + @Override + public void onAttach(Context context) { + super.onAttach(context); + if(context instanceof JumpCourseListener) { + listener = (JumpCourseListener)context; + } else{ + throw new IllegalArgumentException("activity must implements JumpCourseListener"); + } + + + } + + @Override + public void onDetach() { + super.onDetach(); + listener=null; + } + + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_ex_course); + mToolbar=view.findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + top_back_layout=view.findViewById(R.id.top_back_layout); + im_question=view.findViewById(R.id.im_question); + im_old=view.findViewById(R.id.im_old); + top_right=view.findViewById(R.id.top_right); + nested=view.findViewById(R.id.nested); + top_right.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), SearchClassActivity.class); + startActivity(intent); + } + }); + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + getActivity().finish(); + + } + }); + im_question.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(getActivity(), QuestionActivity.class); + startActivity(intent); + + } + }); + im_old.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(getActivity(), QualityCourseActivity.class); + startActivity(intent); + + } + }); + dotLl = view.findViewById(R.id.dots_ll1); + r_jingpin=view.findViewById(R.id.r_jingpin); + r_xuewan=view.findViewById(R.id.r_xuewan); + l_xuewan=view.findViewById(R.id.l_xuewan); + r_fuli=view.findViewById(R.id.r_fuli); + r_weining=view.findViewById(R.id.r_weining); + l_im=view.findViewById(R.id.l_im); + im_1=view.findViewById(R.id.im_1); + im_2=view.findViewById(R.id.im_2); + im_3=view.findViewById(R.id.im_3); + im_4=view.findViewById(R.id.im_4); + more_1=view.findViewById(R.id.more_1); + more_2=view.findViewById(R.id.more_2); + more_3=view.findViewById(R.id.more_3); + more_4=view.findViewById(R.id.more_4); + l_fanxian1=view.findViewById(R.id.l_fanxian1); + l_fanxian2=view.findViewById(R.id.l_fanxian2); + imageViewList=new ArrayList<>() ; + imageViewList.clear(); + imageViewList.add(im_1); + imageViewList.add(im_2); + imageViewList.add(im_3); + imageViewList.add(im_4); + tv_n1=view.findViewById(R.id.tv_n1); + tv_n2=view.findViewById(R.id.tv_n2); + recyclerView=view.findViewById(R.id.recyclerview); + recyclerviewf=view.findViewById(R.id.recyclerviewf); + recyclerviewt=view.findViewById(R.id.recyclerviewt); + recyclerviewt1=view.findViewById(R.id.recyclerviewt1); + recyclerviewt2=view.findViewById(R.id.recyclerviewt2); + //设置布局管理器 + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); + linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); + recyclerView.setLayoutManager(linearLayoutManager); + LinearLayoutManager linearLayoutManagerf = new LinearLayoutManager(getActivity()); + linearLayoutManagerf.setOrientation(LinearLayoutManager.HORIZONTAL); + recyclerviewf.setLayoutManager(linearLayoutManagerf); + LinearLayoutManager linearLayoutManager2 = new LinearLayoutManager(getActivity()); + linearLayoutManager2.setOrientation(LinearLayoutManager.HORIZONTAL); + recyclerviewt2.setLayoutManager(linearLayoutManager2); + LinearLayoutManager linearLayoutManagerv = new LinearLayoutManager(getActivity()); + linearLayoutManagerv.setOrientation(LinearLayoutManager.VERTICAL); + recyclerviewt.setLayoutManager(linearLayoutManagerv); + LinearLayoutManager linearLayoutManagerv1 = new LinearLayoutManager(getActivity()); + linearLayoutManagerv1.setOrientation(LinearLayoutManager.VERTICAL); + recyclerviewt1.setLayoutManager(linearLayoutManagerv1); + more_1.setOnClickListener(this); + more_2.setOnClickListener(this); + more_3.setOnClickListener(this); + more_4.setOnClickListener(this); + initData(); + return view; + } + CourseIndexBean courseIndexBean; + + private void initData() + { +// showProgressDialog("请稍候"); +// showLoadingProgress(); + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(getCourseIndex,param,GETINDEX,this); +// showProgressDialog("请稍候"); +// sendJsonPostParamtoNetSignMD5(getCourseIndexIcon,param,GETINDEXICON,this); + + } + + private void initDot(int size) { + if(getActivity()==null) + { + return; + } + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(getActivity(), 6), CommonUtil.dip2px( + getActivity(), 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(getActivity()); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus5); + } else { + m.setBackgroundResource(R.drawable.dot_focus6); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @RequiresApi(api = Build.VERSION_CODES.O) + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case GETINDEX: +// closeProgressDialog(); +// dismissLoadingProgress(); + courseIndexBean = GsonTools.fromGsonToBean(resultJson, CourseIndexBean.class); + if("200".equals(courseIndexBean.getCode())&&courseIndexBean.getData()!=null) + { +// if(courseIndexBean.getData().getVideo_type_List()==null||courseIndexBean.getData().getVideo_type_List().size()<1) +// { +// nested.setVisibility(View.GONE); +// ToastUtil.showToast("暂无数据"); +// return; +// } + + List list=new ArrayList<>(); + List idlist=new ArrayList<>();; + List tlist=new ArrayList<>(); + List tname=new ArrayList<>(); + for(CourseIndexBean.VideoListBean videoListBean:courseIndexBean.getData().getScroll_list()) + { + list.add(videoListBean.getSroll_img()); + idlist.add(videoListBean.getId()+""); + tlist.add(videoListBean.getTags()+""); + tname.add(videoListBean.getTitle()+""); + } + String savem=String.join(",",list); + String savemid=String.join(",",idlist); + SharePrefUtil.saveString(getActivity(),"scroll_im",savem); + SharePrefUtil.saveString(getActivity(),"scroll_im_id",savemid); + initDot(courseIndexBean.getData().getScroll_list().size()); + if(dotList!=null&&dotList.size()>0) + { + mViewPager = new RollViewPager(getActivity(), dotList, + R.drawable.dot_focus5, R.drawable.dot_focus6, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",idlist.get(position)+""); +// intent.putExtra("from_here","course_home"); + startActivity(intent); + + + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); + + // top图片地址 + mViewPager.setUriList((ArrayList) list); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + l_im.removeAllViews(); + l_im.addView(mViewPager); + } + + if(courseAdapter==null) + { + courseAdapter=new CourseAdapter(getActivity(),courseIndexBean.getData().getSpecial_type_list()); + recyclerView.setAdapter(courseAdapter); + courseAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + listener.type(courseIndexBean.getData().getVideo_type_List().get(position).getType_id(), + Type_XIAOKE,courseIndexBean.getData().getVideo_type_List().get(position).getType_name()); + } + }); + } + else + { + courseAdapter.notifyDataSetChanged(); + } + if(firstAdapter==null) + { + firstAdapter=new CourseFirstAdapter(getActivity(),courseIndexBean.getData().getFirst_type_list()); + recyclerviewf.setAdapter(firstAdapter); + firstAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + listener.type(courseIndexBean.getData().getFirst_type_list().get(position).getId(), + Type_GANRAN,courseIndexBean.getData().getFirst_type_list().get(position).getName()); + } + }); + } + else + { + firstAdapter.notifyDataSetChanged(); + } + type_names=new ArrayList<>(); + type_names.clear(); + + for(CourseIndexBean.VideoBean videoBean:courseIndexBean.getData().getVideo_type_List()) + { + type_names.add(videoBean.getType_name()); + } + for(int i=0;i0) + { + switch (type_names.get(i)) + { + case "精品小课": + r_jingpin.setVisibility(View.VISIBLE); + recyclerviewt.setVisibility(View.VISIBLE); + xiaoType_id=courseIndexBean.getData().getVideo_type_List().get(i).getType_id(); +// tv_n1.setText(""+courseIndexBean.getData().getVideo_type_List().get(0).getType_name()); + if(courseTuiAdapter==null) + { + courseTuiAdapter=new CourseTuiAdapter(getActivity(),courseIndexBean.getData().getVideo_type_List().get(i).getVideo_list()); + recyclerviewt.setAdapter(courseTuiAdapter); + int finalI = i; + courseTuiAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); +// intent.putExtra("from_here","course_home"); + intent.putExtra("excellentcourse_id",courseIndexBean.getData().getVideo_type_List().get(finalI).getVideo_list().get(position).getId()+""); + startActivity(intent); + + } + }); + } + else + { + courseTuiAdapter.notifyDataSetChanged(); + } + break; + case "学完返现": + r_xuewan.setVisibility(View.VISIBLE); + l_xuewan.setVisibility(View.VISIBLE); + xueType_id=courseIndexBean.getData().getVideo_type_List().get(i).getType_id(); + if(courseIndexBean.getData().getVideo_type_List().get(i).getVideo_list().size()<3) + { + l_fanxian2.setVisibility(View.GONE); + l_fanxian1.setVisibility(View.VISIBLE); + } + else + { + l_fanxian2.setVisibility(View.VISIBLE); + l_fanxian1.setVisibility(View.VISIBLE); + } + for(int j=0;j0) + { + listener.type(xiaoType_id,Type_XIAOKE + ,"精品小课"); + } + else + { + ToastUtil.showToast("暂无更多"); + } + } else if (id == R.id.more_2) { + if(courseIndexBean!=null&&courseIndexBean.getData()!=null&& + courseIndexBean.getData().getVideo_type_List()!=null + &&courseIndexBean.getData().getVideo_type_List().size()>0) + { + listener.type(wType_id,Type_XIAOKE + ,"热门课程"); + } + else + { + ToastUtil.showToast("暂无更多"); + } + } else if (id == R.id.more_3) { + if(courseIndexBean!=null&&courseIndexBean.getData()!=null&& + courseIndexBean.getData().getVideo_type_List()!=null + &&courseIndexBean.getData().getVideo_type_List().size()>0) + { + listener.type(xueType_id,Type_XIAOKE + ,"学完返现"); + } + else + { + ToastUtil.showToast("暂无更多"); + } + } else if (id == R.id.more_4) { + if(courseIndexBean!=null&&courseIndexBean.getData()!=null&& + courseIndexBean.getData().getVideo_type_List()!=null + &&courseIndexBean.getData().getVideo_type_List().size()>0) + { + listener.type(fuType_id,Type_XIAOKE + ,"福利课堂"); + } + else + { + ToastUtil.showToast("暂无更多"); + } + } + } +// +// @Override +// public void onLazyBeforeView() { +// +// } +// +// @Override +// public void onLazyAfterView() { +// +// } +// +// @Override +// public void onVisible() { +// +// } +// +// @Override +// public void onInvisible() { +// +// } +// +// @Override +// public void initImmersionBar() { +//// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true) +//// .fitsSystemWindows(true) //使用该属性,必须指定状态栏颜色 +//// .statusBarColor(R.color.red) +////// .titleBar(R.id.toolbar) +//// .init(); +// +//// ImmersionBar.setTitleBar(this, mToolbar); +// } +// +// @Override +// public boolean immersionBarEnabled() { +// return true; +// } + + public interface JumpCourseListener + { + void type(String first_type,String self_type,String name);//self_type判断是一级还是特殊,一级是0,小课是1 + } + + @Override + public void onResume() { + super.onResume(); + MobclickAgent.onEvent(getActivity(),EXPERT_CLASS_QUALITY); + needreportPage("肝胆精品课"); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + MobclickAgent.onEvent(getActivity(),EXPERT_CLASS_QUALITY); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExpenditureFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExpenditureFragment.java new file mode 100644 index 0000000..2ef4fcb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ExpenditureFragment.java @@ -0,0 +1,260 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.IntentFilter; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.util.Log; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PointListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BonusPointsListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ExpenditureFragment extends BaseFragment implements OnCallBackFromNet{ + + private CustomProgressDialog pd; + private PullToRefreshListView ptrLv; + private PullToRefreshListView lv_visit; + private List beans; + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; +// private LocalReceiver localReceiver; + private int startPage = 1; + private BonusPointsListBean fromJsonBean; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private Handler handler = new Handler() { + private PointListAdapter pointListAdapter; + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + ll_empty.setVisibility(View.VISIBLE); + lv_visit.setMode(Mode.DISABLED); + return; + } + setAdapter(); + lv_visit.onRefreshComplete(); + if (beans.size() < 4||fromJsonBean.getData().getList().size()==0) {//当数量少于4或无更多,则不让其上拉加载 + lv_visit.setMode(Mode.PULL_FROM_START); + }else{ + lv_visit.setMode(Mode.BOTH); + } + + pd.dismiss(); + + + break; + default: + break; + } + + } + private void setAdapter() { + // TODO Auto-generated method stub + if (pointListAdapter == null) { + pointListAdapter = new PointListAdapter(beans, getActivity()); + lv_visit.setAdapter(pointListAdapter); + } else { + pointListAdapter.notifyDataSetChanged(); + } + } + }; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_pointlist); + lv_visit = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + lv_visit.setMode(Mode.BOTH); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + initListViewTipText(); + lv_visit.setEmptyView(ll_empty); + beans = new ArrayList<>(); + pd.show(); + + +// localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); +// intentFilter = new IntentFilter(); +// intentFilter.addAction("SIGNIN_ACTION"); +// localReceiver = new LocalReceiver(); +// //注册本地接收器 +// localBroadcastManager.registerReceiver(localReceiver,intentFilter); + + return view; + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + +@Override +public void onResume() { + // TODO Auto-generated method stub + getData(); + super.onResume(); +} + +// private class LocalReceiver extends BroadcastReceiver { +// @Override +// public void onReceive(Context context, Intent intent) { +// boolean booleanExtra = intent.getBooleanExtra("sign", false); +// if (booleanExtra) { +// getData(); +// } +// } +// } + + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + sendJsonPostParamtoNetSignMD5(Url.bonusPointsPayList, param, 1, this); + } + + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + lv_visit.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_visit + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_visit.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub + startPage = 1; + getData(); + } + private void geneItems() { + // TODO Auto-generated method stub + startPage++; + getData(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(getActivity(), + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + pd.dismiss(); + //注销本地接收器 +// localBroadcastManager.unregisterReceiver(localReceiver); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("WXEntryActivity",resultCode+"resultCode "+resultJson); + switch (resultCode) { + case 1: + if (TextUtils.isEmpty(resultJson)) { + pd.dismiss(); + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, BonusPointsListBean.class); + if (startPage==1) { + if (beans.size() != 0) { + beans.clear(); + startPage = 1; + } + }else{ + if (fromJsonBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + + } + } + if (fromJsonBean.getData()!=null){ + beans.addAll(fromJsonBean.getData().getList()); + } + handler.sendEmptyMessage(GET_DATA_SUCCESS); + break; + + default: + break; + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/FuMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/FuMessageFragment.java new file mode 100644 index 0000000..4dd044f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/FuMessageFragment.java @@ -0,0 +1,231 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MessageAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.umeng.NewSystemMessageActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link FuMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class FuMessageFragment extends BaseFragment implements AdapterView.OnItemClickListener, OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + + public FuMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment FuMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static FuMessageFragment newInstance(String param1, String param2) { + FuMessageFragment fragment = new FuMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } + + // @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_fu_message, container, false); +// } + + MessageBean messageBeans; + private NewSystemMessageActivity newSystemMessageActivity; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (NewSystemMessageActivity) getActivity(); + if (view == null) + view = UIUtils.inflate(R.layout.fragment_fu_message); + +// if (getArguments() != null) { +// messageBeans = (ArrayList)getArguments().getSerializable("messagebean"); +// } + ptrLv = view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty = view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到福利通知哦"); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("1",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("1",page+""); + } + }); + + initMessage("1",1+""); + + return view; + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { +// goActivity(messageBeans.getData().getList().get(i-1).getExtra().getType(), null); + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),0); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("1",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDepartmentFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDepartmentFragment.java new file mode 100644 index 0000000..6b366ea --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDepartmentFragment.java @@ -0,0 +1,762 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout.LayoutParams; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.HospitalDetialActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.adapter.GanDanHospitalAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.GanDanHospitalBean; +import cn.shangyu.gdxzExpert.bean.HospitalRollListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GanDanDepartmentFragment extends BaseFragment implements + OnClickListener, OnCallBackFromNet, OnItemClickListener { + private View view; + public static String urlNew = Url.getKeShiIndexRoll; + private PullToRefreshListView ptrLv; + private View topNewsView; + private LinearLayout dotLl; + private LinearLayout mViewPagerLay; + private ArrayList urlList; + private RollViewPager mViewPager; + private ArrayList dotList; + private GanDanHospitalAdapter mAdapter; + private int page = 1; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + public TextView tv_load_fail; + private LinearLayout ll_hos_select; + private View v_lone; + private String areaid = "", type = "", sort = ""; + private String title = ""; + private DrawableCenterButtonR mDb_province, mDb_city, mDb_sort; + private GridView gv_province; + private SQLiteDatabase db; + private ArrayList provinceList; + public static String DataList = Url.getGanDanKeShi; + GridAdapter mProAdapter; + private int ProNumber; + private LinearLayout mLl_sort; + private LinearLayout mLl_follow, mLl_time; + private TextView mTv_follow, mTv_time; + private ImageView mIv_follow, mIv_time; + private ImageView iv; + private LinearLayout ll_group; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + view = UIUtils.inflate(R.layout.fragment_hospital); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_hospital); + + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + iv = (ImageView) view.findViewById(R.id.iv); + ll_group = (LinearLayout) view.findViewById(R.id.ll_group); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + gv_province = (GridView) view.findViewById(R.id.gv_province); + mLl_sort = (LinearLayout) view.findViewById(R.id.ll_sort); + mLl_follow = (LinearLayout) view.findViewById(R.id.ll_follow); + mLl_time = (LinearLayout) view.findViewById(R.id.ll_time); + mTv_follow = (TextView) view.findViewById(R.id.tv_follow); + mTv_time = (TextView) view.findViewById(R.id.tv_time); + mIv_follow = (ImageView) view.findViewById(R.id.iv_follow); + mIv_time = (ImageView) view.findViewById(R.id.iv_time); + topNewsView = UIUtils.inflate(R.layout.layout_roll_testing_view); + dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); + mViewPagerLay = (LinearLayout) topNewsView + .findViewById(R.id.top_news_viewpager); + ll_hos_select = (LinearLayout) topNewsView + .findViewById(R.id.ll_hos_select); + mDb_province = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_province); + mDb_city = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_city); + mDb_sort = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_sort); + + v_lone = topNewsView.findViewById(R.id.v_roll_bottom); + v_lone.setVisibility(View.VISIBLE); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + ptrLv.setMode(Mode.BOTH); + + // 设置只有下拉刷新模式 + // newsAdapter = new NewsAdapter(mActivity); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = mActivity.getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + mViewPagerLay.setLayoutParams(ivLp); + ll_hos_select.setVisibility(View.VISIBLE); + ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(iv.getLayoutParams()); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin); + layoutParams.width = width ; + layoutParams.height = height +dp2px(40); + iv.setLayoutParams(layoutParams); + initLisenter(); + getIndexRoll(); + getHospitalList(); + new InitAreaTask().execute(); + return view; + } + public int dp2px(float dpValue){ + final float scale=getActivity().getResources().getDisplayMetrics().density; + + return (int)(dpValue*scale+0.5f); + } + public void initLisenter() { + mDb_province.setOnClickListener(this); + mDb_city.setOnClickListener(this); + mDb_sort.setOnClickListener(this); + ptrLv.setOnItemClickListener(this); + mLl_follow.setOnClickListener(this); + mLl_time.setOnClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getHospitalList(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getHospitalList(); + } + }); + } + + public static final int GET_ROLL_DATA = 101; + public static final int GET_HOSPTIAL_DATA = 102; + + private void getIndexRoll() { + Map param = new HashMap(); + sendJsonPostParamtoNet(urlNew, param, GET_ROLL_DATA, + GanDanDepartmentFragment.this); + } + + private void getHospitalList() { + Map param = new HashMap(); + param.put("page", page); + param.put("areaid", areaid); + param.put("type", type); + param.put("title", title); + param.put("sort", sort); + sendJsonPostParamtoNet(DataList, param, GET_HOSPTIAL_DATA, + GanDanDepartmentFragment.this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + int position = arg2 - headerViewsCount; + Intent intent = new Intent(mActivity, HospitalDetialActivity.class); + intent.setType("department"); + intent.putExtra("hospital_uuid", gdHospitalList.get(position).getUuid()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_ROLL_DATA: + processRollData(resultJson); + break; + case GET_HOSPTIAL_DATA: + processData(resultJson); + break; + default: + break; + } + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.dcb_province) { + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if(province.size()<34){ + ToastUtil.showMessage("正在读取数据,请稍后再试"); + return; + } + gv_province.setVisibility(View.VISIBLE); + if (mProAdapter == null) { + mProAdapter = new GridAdapter(province); + gv_province.setAdapter(mProAdapter); + } else { + mProAdapter.getDates(province); + mProAdapter.notifyDataSetChanged(); + } + + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + // TODO Auto-generated method stub + page = 1; + String pro = province.get(arg2); + if(pro.length()>5){ + pro=pro.substring(0, 5)+"..."; + } + mDb_province.setText(pro); + if (!mDb_city.getText().equals("城市")) { + mDb_city.setText("城市"); + // cityId = null; + // sec_city.setBackgroundDrawable(getResources() + // .getDrawable(R.drawable.province_city_pressed)); + mDb_city.setTextColor(UIUtils + .getColor(R.color.tab_text_nor)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_normal); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_city.setCompoundDrawables(null, null, icon_new, + null); + } + + // cityId = null; + areaid = provinceList.get(arg2).get_id(); + gv_province.setVisibility(View.GONE); + // searchDocotor(1, false); + type = "1"; + getHospitalList(); + ProNumber = arg2; + mDb_province.setTextColor(UIUtils + .getColor(R.color.top_title)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_province.setCompoundDrawables(null, null, icon_new, + null); + + } + }); + } else if (id == R.id.dcb_city) { + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + if (mDb_province.getText().toString().equals("省份")) { + ToastUtil.showMessage("请先选择省份"); + return; + } + + gv_province.setVisibility(View.VISIBLE); + if (mProAdapter == null) { + mProAdapter = new GridAdapter(city.get(ProNumber)); + } else { + mProAdapter.getDates(city.get(ProNumber)); + } + gv_province.setAdapter(mProAdapter); + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + String tv_city = city.get(ProNumber).get(arg2); + mDb_city.setText(tv_city); + + mDb_city.setTextColor(UIUtils.getColor(R.color.top_title)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_city.setCompoundDrawables(null, null, icon_new, null); + gv_province.setVisibility(View.GONE); + // showSearchDoctor(); + // cityId = + // cityIdList.get(ProNumber).get(arg2).get_id(); + // searchDocotor(1, false); + page = 1; + areaid = cityIdList.get(ProNumber).get(arg2).get_id(); + gv_province.setVisibility(View.GONE); + // searchDocotor(1, false); + type = "2"; + getHospitalList(); + } + }); + } else if (id == R.id.dcb_sort) { + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + mLl_sort.setVisibility(View.VISIBLE); + } else if (id == R.id.ll_follow) { + mTv_time.setTextColor(mActivity.getResources().getColor( + R.color.text_color)); + mTv_follow.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mIv_follow.setVisibility(View.VISIBLE); + mIv_time.setVisibility(View.GONE); + mLl_sort.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.guanzhushu)); + chengeImg(); + sort = "1"; + getHospitalList(); + } else if (id == R.id.ll_time) { + mTv_time.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mTv_follow.setTextColor(mActivity.getResources().getColor( + R.color.text_color)); + mIv_follow.setVisibility(View.GONE); + mIv_time.setVisibility(View.VISIBLE); + mLl_sort.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.tianjiashijian)); + chengeImg(); + sort = ""; + getHospitalList(); + } + } + + HospitalRollListBean bean; + + private void processRollData(String result) { + // TODO Auto-generated method stub + bean = GsonTools.fromGsonToBean(result, HospitalRollListBean.class);// + if (!StringUtil.isOneToCode(bean.code)) { + if (bean.data != null && bean.data.size() > 0) { + urlList = new ArrayList(); + for (int i = 0; i < bean.data.size(); i++) { + if (!TextUtils.isEmpty(bean.data.get(i).getHeadImg())) { + urlList.add(Url.urlHtml + bean.data.get(i).getHeadImg());// //封面图片 + } else { + urlList.add(""); + } + } + // 轮播图的点 + initDot(bean.data.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + + bean.data.get(position).getPath()); + intent.putExtra("title", "肝胆医院"); + intent.putExtra("summary", "名院名科名医,来肝胆相照做\"名\"星"); + intent.putExtra("flag", 1); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + ptrLv.getRefreshableView().addHeaderView(topNewsView); + } + + if (mAdapter == null) { + mAdapter = new GanDanHospitalAdapter(mActivity, false); + } + ptrLv.setAdapter(mAdapter); + + } + + } + + GanDanHospitalBean HospitalBean; + private List gdHospitalList = new ArrayList<>(); + + private void processData(String result) { + // TODO Auto-generated method stub + HospitalBean = GsonTools.fromGsonToBean(result, + GanDanHospitalBean.class); + + if (page == 1 && !HospitalBean.code.equals("1")) { + ToastUtil.showMessage(HospitalBean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + gdHospitalList.clear(); + // 数据为空 + + if (HospitalBean == null || HospitalBean.data.getList() == null + || HospitalBean.data.getList().size() == 0) { + onLoaded(); + setLastUpdateTime(); + + } else { + ll_empty.setVisibility(View.GONE); + gdHospitalList.addAll(HospitalBean.data.getList()); + } + } else { + // 加载更多下一页时候e + if (HospitalBean == null || HospitalBean.data.getList() == null + || HospitalBean.data.getList().size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + gdHospitalList.addAll(HospitalBean.data.getList()); + + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new GanDanHospitalAdapter(gdHospitalList, mActivity, + false); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + + mAdapter.getDatas(gdHospitalList); + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = HospitalBean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + + // 加载城市数据,耗时操作 + private class InitAreaTask extends AsyncTask { + + public InitAreaTask() { + // showProgressDialog("加载中..."); + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + // closeProgressDialog(); + if (result) { + } else { + ToastUtil.showToast("城市数据初始化失败"); + } + } + + } + + // 省市区list + private ArrayList province = new ArrayList(); + private ArrayList> city = new ArrayList>(); + private ArrayList>> county = new ArrayList>>(); + private ArrayList> cityIdList = new ArrayList>(); + private ArrayList>> countyIdList = new ArrayList>>(); + + /* + * 实例化城市,从数据库检出城市列表 + */ + private boolean areaData() { + SQLdm s = new SQLdm(); + db = s.openDatabase(mActivity); + provinceList = new ArrayList(); + if (db != null) { + db.beginTransaction(); + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + // cityProvince.setFullName(cursor.getString(cursor.getColumnIndex("fullName"))); + // cityProvince.setParent(cursor.getString(cursor.getColumnIndex("parent"))); + // cityProvince.setTreePath(cursor.getString(cursor.getColumnIndex("treePath"))); + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + // LogUtil.i("省id="+cityProvince.get_id()+"FullName="+cityProvince.getFullName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + // city.setFullName(cursorCity.getString(cursorCity.getColumnIndex("fullName"))); + // city.setParent(cursorCity.getString(cursorCity.getColumnIndex("parent"))); + // city.setTreePath(cursorCity.getString(cursorCity.getColumnIndex("treePath"))); + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + // LogUtil.i("市id="+city.get_id()+"FullName="+city.getFullName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // cityDis.setFullName(cursorDisctict.getString(cursorDisctict.getColumnIndex("fullName"))); + // cityDis.setParent(cursorDisctict.getString(cursorDisctict.getColumnIndex("parent"))); + // cityDis.setTreePath(cursorDisctict.getString(cursorDisctict.getColumnIndex("treePath"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + // LogUtil.i("区id="+cityDis.get_id()+"FullName="+cityDis.getFullName()); + } + // 如果只有市区没有区县,为了不为空,则手动添加“”; + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + // LogUtil.i("moveToNext()="+cursorDisctict.moveToNext() + + // "moveToFirst()=" + cursorDisctict.moveToFirst()); + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 + db.endTransaction(); + return true; + } else { + return false; + } + } + + // 显示省份跟市区的adapter类 + class GridAdapter extends BaseAdapter { + private ArrayList list; + + public GridAdapter(ArrayList list) { + this.list = list; + } + + public void getDates(ArrayList list) { + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_province_city); + } + TextView data = (TextView) arg1.findViewById(R.id.tv_pro_city); + data.setText(list.get(arg0)); + return arg1; + } + } + public void chengeImg(){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDoctorFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDoctorFragment.java new file mode 100644 index 0000000..ecd64e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanDoctorFragment.java @@ -0,0 +1,812 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout.LayoutParams; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ExpertDetailActivity; +import cn.shangyu.gdxzExpert.activity.HospitalDetialActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.adapter.GanDanDoctorAdapter; +import cn.shangyu.gdxzExpert.adapter.GanDanHospitalAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.GandanDoctorListBean; +import cn.shangyu.gdxzExpert.bean.HospitalRollListBean; +import cn.shangyu.gdxzExpert.fragment.GanDanHospitalFragment.GridAdapter; +import cn.shangyu.gdxzExpert.fragment.GanDanHospitalFragment.InitAreaTask; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +public class GanDanDoctorFragment extends BaseFragment implements +OnClickListener, OnCallBackFromNet, OnItemClickListener { + private View view; + public static String urlNew = Url.getHospitalIndexRoll; + private PullToRefreshListView ptrLv; + private View topNewsView; + private LinearLayout dotLl; + private LinearLayout mViewPagerLay; + private ArrayList urlList; + private RollViewPager mViewPager; + private ArrayList dotList; + private GanDanHospitalAdapter mAdapter; + private int page = 1; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + public TextView tv_load_fail; + private LinearLayout ll_hos_select; + private View v_lone; + private String areaid = "", type = "", sort = ""; + private String title = ""; + private DrawableCenterButtonR mDb_province, mDb_city, mDb_sort; + private GridView gv_province; + private SQLiteDatabase db; + private ArrayList provinceList; + public static String doctorList = Url.ganDanExpertList; + GridAdapter mProAdapter; + private int ProNumber; + private LinearLayout mLl_sort; + private LinearLayout mLl_follow, mLl_time,ll_zixun; + public static boolean isRb = false; + private TextView mTv_follow, mTv_time,tv_zixun; + private ImageView mIv_follow, mIv_time,iv_zixun; + private GanDanDoctorAdapter ganDanDoctorAdapter; + + private ImageView iv; + private LinearLayout ll_group; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + view = UIUtils.inflate(R.layout.fragment_doctor); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_hospital); + + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + iv = (ImageView) view.findViewById(R.id.iv); + ll_group = (LinearLayout) view.findViewById(R.id.ll_group); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + gv_province = (GridView) view.findViewById(R.id.gv_province); + mLl_sort = (LinearLayout) view.findViewById(R.id.ll_sort); + mLl_follow = (LinearLayout) view.findViewById(R.id.ll_follow); + ll_zixun = (LinearLayout) view.findViewById(R.id.ll_zixun); + mLl_time = (LinearLayout) view.findViewById(R.id.ll_time); + mTv_follow = (TextView) view.findViewById(R.id.tv_follow); + tv_zixun = (TextView) view.findViewById(R.id.tv_zixun); + mTv_time = (TextView) view.findViewById(R.id.tv_time); + mIv_follow = (ImageView) view.findViewById(R.id.iv_follow); + iv_zixun = (ImageView) view.findViewById(R.id.iv_zixun); + mIv_time = (ImageView) view.findViewById(R.id.iv_time); + topNewsView = UIUtils.inflate(R.layout.layout_roll_testing_view); + dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); + mViewPagerLay = (LinearLayout) topNewsView.findViewById(R.id.top_news_viewpager); + ll_hos_select = (LinearLayout) topNewsView +.findViewById(R.id.ll_hos_select); + mDb_province = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_province); + mDb_city = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_city); + mDb_sort = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_sort); + + v_lone = topNewsView.findViewById(R.id.v_roll_bottom); + v_lone.setVisibility(View.VISIBLE); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + ptrLv.setMode(Mode.BOTH); + + // 设置只有下拉刷新模式 + // newsAdapter = new NewsAdapter(mActivity); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = mActivity.getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + mViewPagerLay.setLayoutParams(ivLp); + ll_hos_select.setVisibility(View.VISIBLE); + + ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(iv.getLayoutParams()); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin); + layoutParams.width = width ; + layoutParams.height = height +dp2px(40); + iv.setLayoutParams(layoutParams); + + + initLisenter(); + getIndexRoll(); + + new InitAreaTask().execute(); + return view; + } + + + + public void initLisenter() { + mDb_province.setOnClickListener(this); + mDb_city.setOnClickListener(this); + mDb_sort.setOnClickListener(this); + ptrLv.setOnItemClickListener(this); + mLl_follow.setOnClickListener(this); + mLl_time.setOnClickListener(this); + ll_zixun.setOnClickListener(this); + mLl_sort.setOnClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getHospitalList(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getHospitalList(); + } + }); + } + public int dp2px(float dpValue){ + final float scale=getActivity().getResources().getDisplayMetrics().density; + + return (int)(dpValue*scale+0.5f); + } + + public static final int GET_ROLL_DATA = 101; + public static final int GET_DOCTOR_DATA = 102; + + private void getIndexRoll() { + Map param = new HashMap(); + sendJsonPostParamtoNet(urlNew, param, GET_ROLL_DATA, + GanDanDoctorFragment.this); + } + + private void getHospitalList() { + Map param = new HashMap(); + param.put("page", page); + param.put("areaid", areaid); + param.put("type", type); + param.put("title", title); + param.put("sort", sort); +// param.put("is_start", 0); + sendJsonPostParamtoNet(doctorList, param, GET_DOCTOR_DATA, + GanDanDoctorFragment.this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + + int ssss = ptrLv.getRefreshableView().getHeaderViewsCount(); + Intent intent = new Intent(mActivity,ExpertDetailActivity.class); + intent.putExtra("uuid", gandanDoctorList.get(arg2 - ssss).getExpert_uuid()); + if (!TextUtils.isEmpty(gandanDoctorList.get(arg2 - ssss).getExpert_uuid())) { + startActivity(intent); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_ROLL_DATA: + processRollData(resultJson); + getHospitalList(); + break; + case GET_DOCTOR_DATA: + processData(resultJson); + break; + default: + break; + } + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.ll_sort) { + // 空操作 + } else if (id == R.id.dcb_province) { + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if(province.size()<34){ + ToastUtil.showMessage("正在读取数据,请稍后再试"); + return; + } + gv_province.setVisibility(View.VISIBLE); +// MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(gv_province.getLayoutParams()); +// LogUtil.e("dpTop = "+dpTop); +// int dpRight = dp2px( 10); +// int dpLeft=dp2px( 10); +// margin.setMargins(dpLeft, dpTop, dpRight, 0); + + + + if (mProAdapter == null) { + mProAdapter = new GridAdapter(province); + gv_province.setAdapter(mProAdapter); + } else { + mProAdapter.getDates(province); + mProAdapter.notifyDataSetChanged(); + } + + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + // TODO Auto-generated method stub + page = 1; + String pro = province.get(arg2); + if(pro.length()>5){ + pro=pro.substring(0, 5)+"..."; + } + mDb_province.setText(pro); + if (!mDb_city.getText().equals("城市")) { + mDb_city.setText("城市"); + // cityId = null; + // sec_city.setBackgroundDrawable(getResources() + // .getDrawable(R.drawable.province_city_pressed)); + mDb_city.setTextColor(UIUtils + .getColor(R.color.tab_text_nor)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_normal); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_city.setCompoundDrawables(null, null, icon_new, + null); + } + + // cityId = null; + areaid = provinceList.get(arg2).get_id(); + gv_province.setVisibility(View.GONE); + // searchDocotor(1, false); + type = "1"; + getHospitalList(); + ProNumber = arg2; + mDb_province.setTextColor(UIUtils + .getColor(R.color.top_title)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_province.setCompoundDrawables(null, null, icon_new, + null); + + } + }); + } else if (id == R.id.dcb_city) { + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + if (mDb_province.getText().toString().equals("省份")) { + ToastUtil.showMessage("请先选择省份"); + return; + } + + gv_province.setVisibility(View.VISIBLE); + if (mProAdapter == null) { + mProAdapter = new GridAdapter(city.get(ProNumber)); + } else { + mProAdapter.getDates(city.get(ProNumber)); + } + gv_province.setAdapter(mProAdapter); + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + String tv_city = city.get(ProNumber).get(arg2); + mDb_city.setText(tv_city); + + mDb_city.setTextColor(UIUtils.getColor(R.color.top_title)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_city.setCompoundDrawables(null, null, icon_new, null); + gv_province.setVisibility(View.GONE); + // showSearchDoctor(); + // cityId = + // cityIdList.get(ProNumber).get(arg2).get_id(); + // searchDocotor(1, false); + page = 1; + areaid = cityIdList.get(ProNumber).get(arg2).get_id(); + gv_province.setVisibility(View.GONE); + // searchDocotor(1, false); + type = "2"; + getHospitalList(); + } + }); + } else if (id == R.id.dcb_sort) { + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + mLl_sort.setVisibility(View.VISIBLE); + } else if (id == R.id.ll_follow) { + mTv_time.setTextColor(mActivity.getResources().getColor( + R.color.text_color)); + mTv_follow.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mIv_follow.setVisibility(View.VISIBLE); + mIv_time.setVisibility(View.GONE); + mLl_sort.setVisibility(View.GONE); + tv_zixun.setTextColor(UIUtils.getColor(R.color.text_color)); + iv_zixun.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.suifanghuanzheshu)); + chengeImg(); + sort = "1"; + getHospitalList(); + } else if (id == R.id.ll_time) { + mTv_time.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mTv_follow.setTextColor(mActivity.getResources().getColor( + R.color.text_color)); + mIv_follow.setVisibility(View.GONE); + mIv_time.setVisibility(View.VISIBLE); + mLl_sort.setVisibility(View.GONE); + tv_zixun.setTextColor(UIUtils.getColor(R.color.text_color)); + iv_zixun.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.tianjiashijian)); + chengeImg(); + sort = ""; + getHospitalList(); + } else if (id == R.id.ll_zixun) {//公益咨询数 + tv_zixun.setTextColor(UIUtils.getColor(R.color.top_title)); + iv_zixun.setVisibility(View.VISIBLE); + mTv_time.setTextColor(UIUtils.getColor(R.color.text_color)); + mTv_follow.setTextColor(UIUtils.getColor(R.color.text_color)); + mIv_follow.setVisibility(View.GONE); + mIv_time.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.gongyizixunshu)); + chengeImg(); + page=1; + mLl_sort.setVisibility(View.GONE); + sort = "2"; + getHospitalList(); + } + } + + HospitalRollListBean bean; + + private void processRollData(String result) { + // TODO Auto-generated method stub + bean = GsonTools.fromGsonToBean(result, HospitalRollListBean.class);// + if (!StringUtil.isOneToCode(bean.code)) { + if (bean.data != null && bean.data.size() > 0) { + urlList = new ArrayList(); + for (int i = 0; i < bean.data.size(); i++) { + if (!TextUtils.isEmpty(bean.data.get(i).getHeadImg())) { + urlList.add(Url.urlHtml + bean.data.get(i).getHeadImg());// //封面图片 + } else { + urlList.add(""); + } + } + // 轮播图的点 + initDot(bean.data.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + + bean.data.get(position).getPath()); + intent.putExtra("title", "肝胆医院"); + intent.putExtra("summary", "名院名科名医,来肝胆相照做\"名\"星"); + intent.putExtra("flag", 1); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + ptrLv.getRefreshableView().addHeaderView(topNewsView); + } + + if (mAdapter == null) { + mAdapter = new GanDanHospitalAdapter(mActivity, true); + } + ptrLv.setAdapter(mAdapter); + + } + + } + + private GandanDoctorListBean gandanDoctorListBean; + private List gandanDoctorList = new ArrayList<>(); + + private void processData(String result) { + // TODO Auto-generated method stub +// LogUtil.e(result); + gandanDoctorListBean = GsonTools.fromGsonToBean(result, + GandanDoctorListBean.class); + if (page == 1 && gandanDoctorListBean.getCode()!=1) { + ToastUtil.showMessage(gandanDoctorListBean.getMessage()); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + gandanDoctorList.clear(); + // 数据为空 + if (gandanDoctorListBean == null || gandanDoctorListBean.getData().getList() == null|| gandanDoctorListBean.getData().getList().size() == 0) { + onLoaded(); + setLastUpdateTime(); + } else { + ll_empty.setVisibility(View.GONE); + gandanDoctorList.addAll(gandanDoctorListBean.getData().getList()); + } + } else { + // 加载更多下一页时候e + if (gandanDoctorListBean == null || gandanDoctorListBean.getData().getList() == null + || gandanDoctorListBean.getData().getList().size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + gandanDoctorList.addAll(gandanDoctorListBean.getData().getList()); + ptrLv.setVisibility(View.VISIBLE); + } + + if (ganDanDoctorAdapter == null) { +// LogUtil.e("这是当adapter为空"); + ganDanDoctorAdapter = new GanDanDoctorAdapter(gandanDoctorList, mActivity,true); + ptrLv.getRefreshableView().setAdapter(ganDanDoctorAdapter); + } else { + ganDanDoctorAdapter.getDatas(gandanDoctorList); + ganDanDoctorAdapter.notifyDataSetChanged(); + + } + + + // 得到总页码数 + long totalPage = gandanDoctorListBean.getData().getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + setLastUpdateTime(); + + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + + // 加载城市数据,耗时操作 + public class InitAreaTask extends AsyncTask { + + public InitAreaTask() { + // showProgressDialog("加载中..."); + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + // closeProgressDialog(); + if (result) { + } else { + ToastUtil.showToast("城市数据初始化失败"); + } + } + + } + + // 省市区list + private ArrayList province = new ArrayList(); + private ArrayList> city = new ArrayList>(); + private ArrayList>> county = new ArrayList>>(); + private ArrayList> cityIdList = new ArrayList>(); + private ArrayList>> countyIdList = new ArrayList>>(); + + /* + * 实例化城市,从数据库检出城市列表 + */ + private boolean areaData() { + SQLdm s = new SQLdm(); + db = s.openDatabase(mActivity); + provinceList = new ArrayList(); + if (db != null) { + db.beginTransaction(); + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + // cityProvince.setFullName(cursor.getString(cursor.getColumnIndex("fullName"))); + // cityProvince.setParent(cursor.getString(cursor.getColumnIndex("parent"))); + // cityProvince.setTreePath(cursor.getString(cursor.getColumnIndex("treePath"))); + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + // LogUtil.i("省id="+cityProvince.get_id()+"FullName="+cityProvince.getFullName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + // city.setFullName(cursorCity.getString(cursorCity.getColumnIndex("fullName"))); + // city.setParent(cursorCity.getString(cursorCity.getColumnIndex("parent"))); + // city.setTreePath(cursorCity.getString(cursorCity.getColumnIndex("treePath"))); + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + // LogUtil.i("市id="+city.get_id()+"FullName="+city.getFullName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // cityDis.setFullName(cursorDisctict.getString(cursorDisctict.getColumnIndex("fullName"))); + // cityDis.setParent(cursorDisctict.getString(cursorDisctict.getColumnIndex("parent"))); + // cityDis.setTreePath(cursorDisctict.getString(cursorDisctict.getColumnIndex("treePath"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + // LogUtil.i("区id="+cityDis.get_id()+"FullName="+cityDis.getFullName()); + } + // 如果只有市区没有区县,为了不为空,则手动添加“”; + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + // LogUtil.i("moveToNext()="+cursorDisctict.moveToNext() + + // "moveToFirst()=" + cursorDisctict.moveToFirst()); + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 + db.endTransaction(); + return true; + } else { + return false; + } + } + + // 显示省份跟市区的adapter类 + class GridAdapter extends BaseAdapter { + private ArrayList list; + + public GridAdapter(ArrayList list) { + this.list = list; + } + + public void getDates(ArrayList list) { + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_province_city); + } + TextView data = (TextView) arg1.findViewById(R.id.tv_pro_city); + data.setText(list.get(arg0)); + return arg1; + } + } + public void chengeImg(){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanHospitalFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanHospitalFragment.java new file mode 100644 index 0000000..4cbc42b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanDanHospitalFragment.java @@ -0,0 +1,765 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.LinearLayout.LayoutParams; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.HospitalDetialActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.adapter.GanDanHospitalAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.GanDanHospitalBean; +import cn.shangyu.gdxzExpert.bean.HospitalRollListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class GanDanHospitalFragment extends BaseFragment implements + OnClickListener, OnCallBackFromNet, OnItemClickListener { + private View view; + public static String urlNew = Url.getHospitalIndexRoll; + private PullToRefreshListView ptrLv; + private View topNewsView; + private LinearLayout dotLl; + private LinearLayout mViewPagerLay; + private ArrayList urlList; + private RollViewPager mViewPager; + private ArrayList dotList; + private GanDanHospitalAdapter mAdapter; + private int page = 1; + private LinearLayout ll_empty; + private TextView tv_empty_msg; + public TextView tv_load_fail; + private LinearLayout ll_hos_select; + private View v_lone; + private String areaid = "", type = "", sort = ""; + private String title = ""; + private DrawableCenterButtonR mDb_province, mDb_city, mDb_sort; + private GridView gv_province; + private SQLiteDatabase db; + private ArrayList provinceList; + public static String DataList = Url.getGanDanHospital; + GridAdapter mProAdapter; + private int ProNumber; + private LinearLayout mLl_sort; + private LinearLayout mLl_follow, mLl_time; + public static boolean isRb = false; + private TextView mTv_follow, mTv_time; + private ImageView mIv_follow, mIv_time; + private ImageView iv; + private LinearLayout ll_group; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + view = UIUtils.inflate(R.layout.fragment_hospital); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_hospital); + + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + iv = (ImageView) view.findViewById(R.id.iv); + ll_group = (LinearLayout) view.findViewById(R.id.ll_group); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + gv_province = (GridView) view.findViewById(R.id.gv_province); + mLl_sort = (LinearLayout) view.findViewById(R.id.ll_sort); + mLl_follow = (LinearLayout) view.findViewById(R.id.ll_follow); + mLl_time = (LinearLayout) view.findViewById(R.id.ll_time); + mTv_follow = (TextView) view.findViewById(R.id.tv_follow); + mTv_time = (TextView) view.findViewById(R.id.tv_time); + mIv_follow = (ImageView) view.findViewById(R.id.iv_follow); + mIv_time = (ImageView) view.findViewById(R.id.iv_time); + topNewsView = UIUtils.inflate(R.layout.layout_roll_testing_view); + dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); + mViewPagerLay = (LinearLayout) topNewsView.findViewById(R.id.top_news_viewpager); + ll_hos_select = (LinearLayout) topNewsView + .findViewById(R.id.ll_hos_select); + mDb_province = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_province); + mDb_city = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_city); + mDb_sort = (DrawableCenterButtonR) topNewsView + .findViewById(R.id.dcb_sort); + + v_lone = topNewsView.findViewById(R.id.v_roll_bottom); + v_lone.setVisibility(View.VISIBLE); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂时没有数据"); + ptrLv.setMode(Mode.BOTH); + + // 设置只有下拉刷新模式 + // newsAdapter = new NewsAdapter(mActivity); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = mActivity.getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + mViewPagerLay.setLayoutParams(ivLp); + if (isRb) { + ll_hos_select.setVisibility(View.VISIBLE); + } else { + ll_hos_select.setVisibility(View.GONE); + } + + ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(iv.getLayoutParams()); + LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(margin); + layoutParams.width = width ; + layoutParams.height = height + dp2px(40); + + iv.setLayoutParams(layoutParams); + initLisenter(); + getIndexRoll(); + getHospitalList(); + new InitAreaTask().execute(); + return view; + } + public int dp2px(float dpValue){ + final float scale=getActivity().getResources().getDisplayMetrics().density; + + return (int)(dpValue*scale+0.5f); + } + public void initLisenter() { + mDb_province.setOnClickListener(this); + mDb_city.setOnClickListener(this); + mDb_sort.setOnClickListener(this); + ptrLv.setOnItemClickListener(this); + mLl_follow.setOnClickListener(this); + mLl_time.setOnClickListener(this); + + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getHospitalList(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getHospitalList(); + } + }); + } + + public static final int GET_ROLL_DATA = 101; + public static final int GET_HOSPTIAL_DATA = 102; + + private void getIndexRoll() { + Map param = new HashMap(); + sendJsonPostParamtoNet(urlNew, param, GET_ROLL_DATA, + GanDanHospitalFragment.this); + } + + private void getHospitalList() { + Map param = new HashMap(); + param.put("page", page); + param.put("areaid", areaid); + param.put("type", type); + param.put("title", title); + param.put("sort", sort); + sendJsonPostParamtoNet(DataList, param, GET_HOSPTIAL_DATA, + GanDanHospitalFragment.this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + // TODO Auto-generated method stub + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + int position = arg2 - headerViewsCount; + Intent intent = new Intent(mActivity, HospitalDetialActivity.class); + intent.setType("hospital"); + intent.putExtra("hospital_uuid", gdHospitalList.get(position).getUuid()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case GET_ROLL_DATA: + processRollData(resultJson); + break; + case GET_HOSPTIAL_DATA: + processData(resultJson); + break; + default: + break; + } + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.dcb_province) { + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if(province.size()<34){ + ToastUtil.showMessage("正在读取数据,请稍后再试"); + return; + } + gv_province.setVisibility(View.VISIBLE); + if (mProAdapter == null) { + mProAdapter = new GridAdapter(province); + gv_province.setAdapter(mProAdapter); + } else { + mProAdapter.getDates(province); + mProAdapter.notifyDataSetChanged(); + } + + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + // TODO Auto-generated method stub + page = 1; + String pro = province.get(arg2); + if(pro.length()>5){ + pro=pro.substring(0, 5)+"..."; + } + mDb_province.setText(pro); + if (!mDb_city.getText().equals("城市")) { + mDb_city.setText("城市"); + // cityId = null; + // sec_city.setBackgroundDrawable(getResources() + // .getDrawable(R.drawable.province_city_pressed)); + mDb_city.setTextColor(UIUtils + .getColor(R.color.tab_text_nor)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_normal); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_city.setCompoundDrawables(null, null, icon_new, + null); + } + + // cityId = null; + areaid = provinceList.get(arg2).get_id(); + gv_province.setVisibility(View.GONE); + // searchDocotor(1, false); + type = "1"; + getHospitalList(); + ProNumber = arg2; + mDb_province.setTextColor(UIUtils + .getColor(R.color.top_title)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_province.setCompoundDrawables(null, null, icon_new, + null); + + } + }); + } else if (id == R.id.dcb_city) { + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + if (mDb_province.getText().toString().equals("省份")) { + ToastUtil.showMessage("请先选择省份"); + return; + } + + gv_province.setVisibility(View.VISIBLE); + if (mProAdapter == null) { + mProAdapter = new GridAdapter(city.get(ProNumber)); + } else { + mProAdapter.getDates(city.get(ProNumber)); + } + gv_province.setAdapter(mProAdapter); + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View arg1, + int arg2, long arg3) { + String tv_city = city.get(ProNumber).get(arg2); + mDb_city.setText(tv_city); + + mDb_city.setTextColor(UIUtils.getColor(R.color.top_title)); + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_city.setCompoundDrawables(null, null, icon_new, null); + gv_province.setVisibility(View.GONE); + // showSearchDoctor(); + // cityId = + // cityIdList.get(ProNumber).get(arg2).get_id(); + // searchDocotor(1, false); + page = 1; + areaid = cityIdList.get(ProNumber).get(arg2).get_id(); + gv_province.setVisibility(View.GONE); + // searchDocotor(1, false); + type = "2"; + getHospitalList(); + } + }); + } else if (id == R.id.dcb_sort) { + if (gv_province.getVisibility() == View.VISIBLE) { + gv_province.setVisibility(View.GONE); + return; + } + if (mLl_sort.getVisibility() == View.VISIBLE) { + mLl_sort.setVisibility(View.GONE); + return; + } + mLl_sort.setVisibility(View.VISIBLE); + } else if (id == R.id.ll_follow) { + mTv_time.setTextColor(mActivity.getResources().getColor( + R.color.text_color)); + mTv_follow.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mIv_follow.setVisibility(View.VISIBLE); + mIv_time.setVisibility(View.GONE); + mLl_sort.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.guanzhushu)); + chengeImg(); + sort = "1"; + getHospitalList(); + } else if (id == R.id.ll_time) { + mTv_time.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mTv_follow.setTextColor(mActivity.getResources().getColor( + R.color.text_color)); + mIv_follow.setVisibility(View.GONE); + mIv_time.setVisibility(View.VISIBLE); + mLl_sort.setVisibility(View.GONE); + mDb_sort.setText(getResources().getString(R.string.tianjiashijian)); + chengeImg(); + sort = ""; + getHospitalList(); + } + } + + HospitalRollListBean bean; + + private void processRollData(String result) { + // TODO Auto-generated method stub + bean = GsonTools.fromGsonToBean(result, HospitalRollListBean.class);// + if (!StringUtil.isOneToCode(bean.code)) { + if (bean.data != null && bean.data.size() > 0) { + urlList = new ArrayList(); + for (int i = 0; i < bean.data.size(); i++) { + if (!TextUtils.isEmpty(bean.data.get(i).getHeadImg())) { + urlList.add(Url.urlHtml + bean.data.get(i).getHeadImg());// //封面图片 + } else { + urlList.add(""); + } + } + // 轮播图的点 + initDot(bean.data.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + + Intent intent = new Intent(mActivity,NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml+ bean.data.get(position).getPath()); + intent.putExtra("title", "肝胆医院"); + intent.putExtra("summary", "名院名科名医,来肝胆相照做\"名\"星"); + intent.putExtra("flag", 1); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + ptrLv.getRefreshableView().addHeaderView(topNewsView); + } + + if (mAdapter == null) { + mAdapter = new GanDanHospitalAdapter(mActivity, true); + } + ptrLv.setAdapter(mAdapter); + + } + + } + + GanDanHospitalBean HospitalBean; + private List gdHospitalList = new ArrayList<>(); + + private void processData(String result) { + // TODO Auto-generated method stub + HospitalBean = GsonTools.fromGsonToBean(result, + GanDanHospitalBean.class); + if (page == 1 && !HospitalBean.code.equals("1")) { + ToastUtil.showMessage(HospitalBean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + gdHospitalList.clear(); + // 数据为空 + + if (HospitalBean == null || HospitalBean.data.getList() == null + || HospitalBean.data.getList().size() == 0) { + onLoaded(); + setLastUpdateTime(); + + } else { + ll_empty.setVisibility(View.GONE); + gdHospitalList.addAll(HospitalBean.data.getList()); + } + } else { + // 加载更多下一页时候e + if (HospitalBean == null || HospitalBean.data.getList() == null + || HospitalBean.data.getList().size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + gdHospitalList.addAll(HospitalBean.data.getList()); + + } + + if (mAdapter == null) { + mAdapter = new GanDanHospitalAdapter(gdHospitalList, mActivity, + true); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + + mAdapter.getDatas(gdHospitalList); + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = HospitalBean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + + // 加载城市数据,耗时操作 + public class InitAreaTask extends AsyncTask { + + public InitAreaTask() { + // showProgressDialog("加载中..."); + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + // closeProgressDialog(); + if (result) { + } else { + ToastUtil.showToast("城市数据初始化失败"); + } + } + + } + + // 省市区list + private ArrayList province = new ArrayList(); + private ArrayList> city = new ArrayList>(); + private ArrayList>> county = new ArrayList>>(); + private ArrayList> cityIdList = new ArrayList>(); + private ArrayList>> countyIdList = new ArrayList>>(); + + /* + * 实例化城市,从数据库检出城市列表 + */ + private boolean areaData() { + SQLdm s = new SQLdm(); + db = s.openDatabase(mActivity); + provinceList = new ArrayList(); + if (db != null) { + db.beginTransaction(); + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + // cityProvince.setFullName(cursor.getString(cursor.getColumnIndex("fullName"))); + // cityProvince.setParent(cursor.getString(cursor.getColumnIndex("parent"))); + // cityProvince.setTreePath(cursor.getString(cursor.getColumnIndex("treePath"))); + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + // LogUtil.i("省id="+cityProvince.get_id()+"FullName="+cityProvince.getFullName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + // city.setFullName(cursorCity.getString(cursorCity.getColumnIndex("fullName"))); + // city.setParent(cursorCity.getString(cursorCity.getColumnIndex("parent"))); + // city.setTreePath(cursorCity.getString(cursorCity.getColumnIndex("treePath"))); + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + // LogUtil.i("市id="+city.get_id()+"FullName="+city.getFullName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // cityDis.setFullName(cursorDisctict.getString(cursorDisctict.getColumnIndex("fullName"))); + // cityDis.setParent(cursorDisctict.getString(cursorDisctict.getColumnIndex("parent"))); + // cityDis.setTreePath(cursorDisctict.getString(cursorDisctict.getColumnIndex("treePath"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + // LogUtil.i("区id="+cityDis.get_id()+"FullName="+cityDis.getFullName()); + } + // 如果只有市区没有区县,为了不为空,则手动添加“”; + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + // LogUtil.i("moveToNext()="+cursorDisctict.moveToNext() + + // "moveToFirst()=" + cursorDisctict.moveToFirst()); + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 + db.endTransaction(); + return true; + } else { + return false; + } + } + + // 显示省份跟市区的adapter类 + class GridAdapter extends BaseAdapter { + private ArrayList list; + + public GridAdapter(ArrayList list) { + this.list = list; + } + + public void getDates(ArrayList list) { + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_province_city); + } + TextView data = (TextView) arg1.findViewById(R.id.tv_pro_city); + data.setText(list.get(arg0)); + return arg1; + } + } + public void chengeImg(){ + Drawable icon_new = UIUtils.getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanExFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanExFragment.java new file mode 100644 index 0000000..1ba0ea1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GanExFragment.java @@ -0,0 +1,662 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.Url.getMoreByFirstType; +import static cn.shangyu.gdxzExpert.utils.Url.listExcellencourseSecondType; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.view.View; +import android.view.WindowManager; +import android.widget.AbsListView; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.SearchClassActivity; +import cn.shangyu.gdxzExpert.adapter.CourseFirstListAdapter; +import cn.shangyu.gdxzExpert.adapter.SelectCourseAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CourseGanExBean; +import cn.shangyu.gdxzExpert.bean.CourseIconBean; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.BackHandlerHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +public class GanExFragment extends BaseFragment implements + OnCallBackFromNet, AdapterView.OnItemClickListener, BackHandlerHelper.FragmentBackHandler, View.OnClickListener { + + PullToRefreshListView ptrLv; + List data=new ArrayList<>(); + private CourseFirstListAdapter tuiAdapter; + private int page = 1,ypPosition=0,sPosition=0; + private String first_type,second_type=""; + private LinearLayout dotLl,l_im; + private ArrayList dotList; + private RollViewPager mViewPager; + ImageView top_back_layout,top_right; + TextView top_title; + DrawableCenterButtonR dcb_type,dcb_s; + SelectCourseAdapter selectCourseAdapter,adapter; + ListView list_view,list_views; + private List list=new ArrayList<>(); + private List listid=new ArrayList<>(); + private List lists=new ArrayList<>(); + private CourseIconBean courseIconBean; + TextView tv_d,tv_f; + Boolean isDiscount=false,isFree=false; + String dis="",free=""; + private WindowManager mWindowManager; + private WindowManager.LayoutParams mWindowLayoutParams; +// private View footerView; + private boolean isShowing=false; + private Toolbar mToolbar; +// RelativeLayout r_h; +// private RadioGroup rg_course; + + RelativeLayout r_rr; + + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_gan_ex); + mToolbar=view.findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + Bundle bundle =this.getArguments(); + first_type = bundle.getString("first_type"); + top_back_layout=view.findViewById(R.id.top_back_layout); + r_rr=view.findViewById(R.id.r_rr); +// footerView = UIUtils.inflate(R.layout.class_footer); + top_right=view.findViewById(R.id.top_right); + top_title=view.findViewById(R.id.top_title); + tv_f=view.findViewById(R.id.tv_f); + tv_d=view.findViewById(R.id.tv_d); +// r_h=view.findViewById(R.id.r_h); + tv_f.setOnClickListener(this); + tv_d.setOnClickListener(this); +// rg_course=view.findViewById(R.id.rg_course); +// rg_course.setOnCheckedChangeListener(this); + mWindowManager = (WindowManager)getActivity(). getSystemService(Context.WINDOW_SERVICE); + top_title.setText(bundle.getString("top_title")); + top_right.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), SearchClassActivity.class); + startActivity(intent); + } + }); + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (BackHandlerHelper.handleBackPress(getActivity())) { +// getActivity().getSupportFragmentManager().popBackStack(); + int a=1; + } + else + { + getActivity().finish(); + } + + } + }); + dotLl = view.findViewById(R.id.dots_ll1); + l_im=view.findViewById(R.id.l_im); + ptrLv = (PullToRefreshListView)view. findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + + ll_empty=view.findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 +// ptrLv.getRefreshableView().addFooterView(footerView); + + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + +// ptrLv.setOnScrollListener(new AbsListView.OnScrollListener() { +// @Override +// public void onScrollStateChanged(AbsListView view, int scrollState) { +// switch (scrollState) { +// case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: +// // 手指触屏拉动准备滚动,只触发一次 顺序: 1 +// +// break; +//// case AbsListView.OnScrollListener.SCROLL_STATE_FLING: +//// // 持续滚动开始,只触发一次 顺序: 2 +//// +//// break; +//// case AbsListView.OnScrollListener.SCROLL_STATE_IDLE: +//// // 整个滚动事件结束,只触发一次 顺序: 4 +//// +//// break; +//// default: +//// break; +// +// } +// } +// +// @Override +// public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { +// if ((firstVisibleItem + visibleItemCount) == totalItemCount) { +// View lastVisibleItemView = view.getChildAt(view.getChildCount() - 1); +// if (lastVisibleItemView != null && lastVisibleItemView.getBottom() == view.getHeight()) { +// view.findViewById(R.id.r_h).setVisibility(View.GONE); +// } +// } +// +// +// +// } +// }); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + { + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + if(sPosition==0) + getCourse( first_type,page+"",second_type,"",free,""); + else + { + getCourse( first_type,page+"",second_type,"",dis,sPosition-1+""); + } + + } + }); + list_view=view.findViewById(R.id.list_view); + list_views=view.findViewById(R.id.list_views); + dcb_type=view.findViewById(R.id.dcb_type); + dcb_s=view.findViewById(R.id.dcb_s); + dcb_type.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(list_view.getVisibility()==View.VISIBLE) + { + list_view.setVisibility(View.GONE); + r_rr.setVisibility(View.GONE); + return; + } + r_rr.setVisibility(View.VISIBLE); + list_view.setVisibility(View.VISIBLE); + list_views.setVisibility(View.GONE); + if(list.size()<1) + { + getSecondType(first_type); + }else + { + if( selectCourseAdapter==null) + { + + selectCourseAdapter=new SelectCourseAdapter(list); +// selectCourseAdapter.setPosition(ypPosition); + list_view.setAdapter(selectCourseAdapter); + + } + else + { + selectCourseAdapter.setPosition(ypPosition); + selectCourseAdapter.notifyDataSetChanged(); + + } + } + + + + } + }); + dcb_s.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(list_views.getVisibility()==View.VISIBLE) + { + list_views.setVisibility(View.GONE); + r_rr.setVisibility(View.GONE); + return; + } + r_rr.setVisibility(View.VISIBLE); + list_views.setVisibility(View.VISIBLE); + list_view.setVisibility(View.GONE); + if(adapter==null) + { + lists.clear(); + lists.add("默认排序"); + lists.add("最新上架"); + lists.add("人气最高"); + lists.add("课时数"); + lists.add("价格从低到高"); + lists.add("价格从高到低"); + adapter=new SelectCourseAdapter(lists); +// adapter.setPosition(sPosition); + list_views.setAdapter(adapter); + + + } + else + { + adapter.setPosition(sPosition); + adapter.notifyDataSetChanged(); + } + + + } + }); + list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + list_view.setVisibility(View.GONE); + chengeImg(dcb_type,list.get(position)); + page=1; + ypPosition=position; + second_type=listid.get(ypPosition); + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + }); + list_views.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + list_views.setVisibility(View.GONE); + page=1; + chengeImg(dcb_s,lists.get(position)); + sPosition=position; + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + { + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + } + }); + initDot(); + intiData(); + return view; + } + public boolean isListViewReachBottomEdge(final AbsListView listView) { + boolean result = false; + if (listView.getLastVisiblePosition() == (listView.getCount() - 1)) { + final View bottomChildView = listView.getChildAt(listView.getLastVisiblePosition() - listView.getFirstVisiblePosition()); + result = (listView.getHeight() >= bottomChildView.getBottom()); + }; + return result; + } + //显示悬停布局 +// public void show1() { +// isShowing = true; +// mWindowLayoutParams = new WindowManager.LayoutParams(); +// mWindowLayoutParams.format = PixelFormat.TRANSLUCENT; //图片之外的其他地方透明 +// mWindowLayoutParams.gravity = Gravity.BOTTOM; +// mWindowLayoutParams.y = 300;//设置悬停布局显示的Y坐标 +// mWindowLayoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; +// mWindowLayoutParams.height = CommonUtil.dip2px(getActivity(), 50);//设置悬停布局显示的高度 +// mWindowLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE +// | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; +// +// +// +// //添加悬停布局 +// mWindowManager.addView(footerView, mWindowLayoutParams); +// } + + private void initDot() { + String s=SharePrefUtil.getString(getActivity(),"scroll_im",""); + String sid= SharePrefUtil.getString(getActivity(),"scroll_im_id",""); + if(StringUtil.isEmpty(s)) + { + return; + } + List list = Arrays.asList(s.split(",")); + List newlist = new ArrayList(list); + List listid = Arrays.asList(sid.split(",")); + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < newlist.size(); i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(getActivity(), 6), CommonUtil.dip2px( + getActivity(), 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(getActivity()); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus5); + } else { + m.setBackgroundResource(R.drawable.dot_focus6); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + mViewPager = new RollViewPager(getActivity(), dotList, + R.drawable.dot_focus5, R.drawable.dot_focus6, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",listid.get(position)); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); + + // top图片地址 + mViewPager.setUriList((ArrayList) newlist); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + l_im.removeAllViews(); + l_im.addView(mViewPager); + } + } + private void intiData() + { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getCourse( first_type,page+"",second_type,free,dis,""); + getSecondType(first_type); + } + private void getSecondType(String first_id) + { + Map param = new HashMap<>(); + param.put("first_id",first_id); + sendJsonPostParamtoNetSignMD5(listExcellencourseSecondType,param,102,this); + } + private void getCourse(String first_type,String page,String second_type,String free,String discount_type,String sort) + { +// showLoadingProgress(); + Map param = new HashMap<>(); + param.put("first_type",first_type); + param.put("page",page); + param.put("second_type",second_type); + param.put("free",free); + param.put("discount_type",discount_type); + param.put("sort",sort); + sendJsonPostParamtoNetSignMD5(getMoreByFirstType,param,101,this); + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + CourseGanExBean courseGanExBean; + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) { + case 101: +// dismissLoadingProgress(); + courseGanExBean = GsonTools.fromGsonToBean(resultJson, CourseGanExBean.class); + if ("200".equals(courseGanExBean.getCode())) { + if (page == 1) { + data.clear(); + if (courseGanExBean.getData() == null || courseGanExBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(courseGanExBean.getData().getList()); + } + } else { + data.addAll(courseGanExBean.getData().getList()); + } + + + if (tuiAdapter == null) { + tuiAdapter = new CourseFirstListAdapter(getActivity(), data); + + ptrLv.getRefreshableView().setAdapter(tuiAdapter); + } else { + tuiAdapter.notifyDataSetChanged(); + } + onLoaded(); + if (page > 1) { + // 是否有更多 + if (courseGanExBean.getData()== null || courseGanExBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = courseGanExBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(courseGanExBean.getMessage() + ""); + } + + break; + case 102: + courseIconBean=GsonTools.fromGsonToBean(resultJson,CourseIconBean.class); + if ("200".equals(courseIconBean.getCode())) + { + list.clear(); + list.add("全部课程"); + listid.clear(); + listid.add(""); + for(CourseIconBean.DataBean dataBean:courseIconBean.getData()) + { + list.add(dataBean.getName()); + listid.add(dataBean.getId()); + } + + selectCourseAdapter=new SelectCourseAdapter(list); + list_view.setAdapter(selectCourseAdapter); +// selectCourseAdapter.setPosition(ypPosition); + + } + else + { + ToastUtil.showToast(courseGanExBean.getMessage() + ""); + } + break; + } + + } + + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position-1).getId()+""); + startActivity(intent); + + + } + public void chengeImg(DrawableCenterButtonR mDb_sort, String text){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_xia); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } + @Override + public void onDetach() { + super.onDetach(); + tuiAdapter=null; + + } + @Override + public boolean onBackPressed() { + return BackHandlerHelper.handleBackPress(this); + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_d) { + page=1; + if(isDiscount) + { + isDiscount=false; + free=""; + dis=""; + tv_d.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + tv_f.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + { + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + } + else + { + isDiscount=true; + free=""; + dis="1"; + tv_d.setTextColor(UIUtils.getColor(R.color.top_title)); + tv_f.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + { + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + } + } else if (id == R.id.tv_f) { + page=1; + if(isFree) + { + isFree=false; + free=""; + dis=""; + tv_f.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + tv_d.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + { + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + } + else + { + isFree=true; + free="1"; + dis=""; + tv_f.setTextColor(UIUtils.getColor(R.color.top_title)); + tv_d.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + if(sPosition==0) + getCourse( first_type,page+"",second_type,free,dis,""); + else + { + getCourse( first_type,page+"",second_type,free,dis,sPosition-1+""); + } + } + } + } + +// @Override +// public void onLazyBeforeView() { +// +// } +// +// @Override +// public void onLazyAfterView() { +// +// } + +// @Override +// public void onVisible() { +// +// } +// +// @Override +// public void onInvisible() { +// +// } +// +// @Override +// public void initImmersionBar() { +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(R.id.toolbar).init(); +// } +// +// @Override +// public boolean immersionBarEnabled() { +// return true; +// } + +// @Override +// public void onCheckedChanged(RadioGroup group, int checkedId) { +// switch (checkedId) +// { +// case R.id.rb_excellent: +// rg_course.setBackground(getResources().getDrawable(R.drawable.unpress1)); +// ((CourseActivity)getActivity()).rb_excellent.setChecked(true); +// break; +// case R.id.rb_mine: +// ((CourseActivity)getActivity()).rb_mine.setChecked(false); +// break; +// } +// } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GetWelfAreFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GetWelfAreFragment.java new file mode 100644 index 0000000..66ca1d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/GetWelfAreFragment.java @@ -0,0 +1,378 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; + +import android.app.AlertDialog; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyLibraryActivity; +import cn.shangyu.gdxzExpert.activity.UpanExchangeActivity; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.GetWelfarePageBean; +import cn.shangyu.gdxzExpert.big.activity.BigCoursewareActivity; +import cn.shangyu.gdxzExpert.big.activity.BigMyLibraryActivity; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.big.activity.BigVideoActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/18. + */ + +public class GetWelfAreFragment extends BaseFragment implements View.OnClickListener,OnCallBackFromNet{ + private View view; + private TextView tv_newpatient_num,tv_newpatient_num1,tv_shipin_newpatient_num,tv_kejian_newpatient_num,tv_kecheng_newpatient_num,wen,xinzeng7,tv_wnum,tv_duihuan; + private TextView tv_num,tv_wfnum,tv_spnum,tv_kjnum,tv_kcnum,tv_unum; + private RelativeLayout rl_jifen,rl_wanfang,rl_shipin,rl_kejian,rl_kecheng,rl_upan,rl_upan_null,rl_wenxian; + private TextView tv_lijilingqu,tv_wflijilingqu,tv_splijilingqu,tv_kjlijilingqu,tv_kclijilingqu,tv_ulijilingqu; + private TextView tv_num1,tv_wfnum1,tv_spnum1,tv_kjnum1,tv_kcnum1; + private LinearLayout ll_jifen,ll_wanfang,ll_shipin,ll_kejian,ll_kecheng,ll_upan,ll_upannull; + public static final int USEWELFAREPAGE = 201; + private TextView xinzeng,xinzeng1,xinzeng2,xinzeng3,xinzeng4,xinzeng5; + private TextView tv_wfdanwei,tv_spdanwei,tv_kjdanwei,tv_kcdanwei,tv_danwei; + private int upnum=0,wenxiannum=0; + + @Override + public View onCreateSuccessedView() { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_welfare_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_welfare); + } + initView(); + initOnClick(); + initData(); + return view; + } + private void initView() { + tv_newpatient_num = view.findViewById(R.id.tv_newpatient_num);//积分新随访 + tv_newpatient_num1 = view.findViewById(R.id.tv_newpatient_num1);//万方新随访 + tv_shipin_newpatient_num = view.findViewById(R.id.tv_shipin_newpatient_num);//视频新随访 + tv_kejian_newpatient_num = view.findViewById(R.id.tv_kejian_newpatient_num);//课件新随访 + tv_kecheng_newpatient_num = view.findViewById(R.id.tv_kecheng_newpatient_num);//课程新随访 + rl_wenxian=view.findViewById(R.id.rl_wenxian); + xinzeng7=view.findViewById(R.id.xinzeng7); + tv_wnum=view.findViewById(R.id.tv_wnum); + tv_duihuan=view.findViewById(R.id.tv_duihuan); + wen=view.findViewById(R.id.wen); + rl_jifen = view.findViewById(R.id.rl_jifen);//积分 + rl_wanfang = view.findViewById(R.id.rl_wanfang);//万方 + rl_shipin = view.findViewById(R.id.rl_shipin);//视频 + rl_kejian = view.findViewById(R.id.rl_kejian);//课件 + rl_kecheng = view.findViewById(R.id.rl_kecheng);//课程 + rl_upan = view.findViewById(R.id.rl_upan);//U盘 + rl_upan_null = view.findViewById(R.id.rl_upan_null);//U盘null + + tv_num = view.findViewById(R.id.tv_num);//积分个数 + tv_wfnum = view.findViewById(R.id.tv_wfnum);//万方个数 + tv_spnum = view.findViewById(R.id.tv_spnum);//视频个数 + + tv_kjnum = view.findViewById(R.id.tv_kjnum);//课件个数 + tv_kcnum = view.findViewById(R.id.tv_kcnum);//课程个数 + tv_unum = view.findViewById(R.id.tv_unum);//U盘个数 + + + tv_lijilingqu = view.findViewById(R.id.tv_lijilingqu);//积分立即领取 + tv_wflijilingqu = view.findViewById(R.id.tv_wflijilingqu);//万方立即领取 + tv_splijilingqu = view.findViewById(R.id.tv_splijilingqu);//视频立即领取 + tv_kjlijilingqu = view.findViewById(R.id.tv_kjlijilingqu);//课件立即领取 + tv_kclijilingqu = view.findViewById(R.id.tv_kclijilingqu);//课程立即领取 + tv_ulijilingqu = view.findViewById(R.id.tv_ulijilingqu);//U盘立即领取 + + + tv_num1 = view.findViewById(R.id.tv_num1);//赠送积分 + tv_wfnum1 = view.findViewById(R.id.tv_wfnum1);//赠送万方 + tv_spnum1 = view.findViewById(R.id.tv_spnum1);//赠送视频 + tv_kjnum1 = view.findViewById(R.id.tv_kjnum1);//赠送课件 + tv_kcnum1 = view.findViewById(R.id.tv_kcnum1);//赠送课程 + + ll_jifen = view.findViewById(R.id.ll_jifen);//积分赠送 + ll_wanfang = view.findViewById(R.id.ll_wanfang);//万方赠送 + ll_shipin = view.findViewById(R.id.ll_shipin);//视频赠送 + ll_kejian = view.findViewById(R.id.ll_kejian);//课件赠送 + ll_kecheng = view.findViewById(R.id.ll_kecheng);//课程赠送 + ll_upan = view.findViewById(R.id.ll_upan);//U赠送 + ll_upannull = view.findViewById(R.id.ll_upannull);//U赠送null + + + xinzeng = view.findViewById(R.id.xinzeng);//积分新增 + xinzeng1 = view.findViewById(R.id.xinzeng1);//万方新增 + xinzeng2 = view.findViewById(R.id.xinzeng2);//视频新增 + xinzeng3 = view.findViewById(R.id.xinzeng3);//课件新增 + xinzeng4 = view.findViewById(R.id.xinzeng4);//精品新增 + xinzeng5 = view.findViewById(R.id.xinzeng5);//U盘新增 + + tv_wfdanwei = view.findViewById(R.id.tv_wfdanwei);//万方单位 + tv_spdanwei = view.findViewById(R.id.tv_spdanwei);//视频单位 + tv_kjdanwei = view.findViewById(R.id.tv_kjdanwei);//课件单位 + tv_kcdanwei = view.findViewById(R.id.tv_kcdanwei);//精品单位 + tv_danwei = view.findViewById(R.id.tv_danwei);//积分单位 + + ll_jifen.setVisibility(View.GONE); + ll_wanfang.setVisibility(View.GONE); + ll_shipin.setVisibility(View.GONE); + ll_kejian.setVisibility(View.GONE); + ll_kecheng.setVisibility(View.GONE); + + tv_lijilingqu.setVisibility(View.VISIBLE); + tv_wflijilingqu.setVisibility(View.VISIBLE); + tv_splijilingqu.setVisibility(View.VISIBLE); + tv_kjlijilingqu.setVisibility(View.VISIBLE); + tv_kclijilingqu.setVisibility(View.VISIBLE); + + + tv_newpatient_num.setVisibility(View.GONE); + tv_newpatient_num1.setVisibility(View.GONE); + tv_shipin_newpatient_num.setVisibility(View.GONE); + tv_kejian_newpatient_num.setVisibility(View.GONE); + tv_kecheng_newpatient_num.setVisibility(View.GONE); + + rl_upan_null.setVisibility(View.GONE); + + tv_lijilingqu.setText("兑换礼品"); + tv_wflijilingqu.setText("前往下载"); + tv_splijilingqu.setText("前往下载"); + tv_kjlijilingqu.setText("前往下载"); + tv_kclijilingqu.setText("前往兑换"); + tv_ulijilingqu.setText("前往兑换"); + + + } + + private void initData() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.useWelfarePage,map,USEWELFAREPAGE,this); + } + + private void initOnClick() { + tv_lijilingqu.setOnClickListener(this); + tv_wflijilingqu.setOnClickListener(this); + tv_splijilingqu.setOnClickListener(this); + tv_kjlijilingqu.setOnClickListener(this); + tv_kclijilingqu.setOnClickListener(this); + tv_ulijilingqu.setOnClickListener(this); + tv_duihuan.setOnClickListener(this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.tv_lijilingqu) { + if(BigModule()) + { + startActivity(new Intent(getActivity(), BigPointsMallActivity.class)); + } + else + { + startActivity(new Intent(getActivity(), PointsMallActivity.class)); + } + } else if (id == R.id.tv_splijilingqu) { + if(BigModule()) + { + startActivity(new Intent(getActivity(), BigVideoActivity.class)); + } + else + { + startActivity(new Intent(getActivity(), VideoActivity.class)); + } + } else if (id == R.id.tv_kjlijilingqu) { + if(BigModule()) + { + startActivity(new Intent(getActivity(), BigCoursewareActivity.class)); + } + else + { + startActivity(new Intent(getActivity(), CoursewareActivity.class)); + } + } else if (id == R.id.tv_kclijilingqu) { + startActivity(new Intent(getActivity(), QualityCourseActivity.class)); + } else if (id == R.id.tv_wflijilingqu) { + Intent intentwf = new Intent(); + if(BigModule()) + { + intentwf.setClass(getActivity(), BigMyLibraryActivity.class); + } + else + { + intentwf.setClass(getActivity(),MyLibraryActivity.class); + } +// Intent intentwf = new Intent(getActivity(),MyLibraryActivity.class); + intentwf.putExtra("search", "searchStr"); + startActivity(intentwf); + } else if (id == R.id.tv_ulijilingqu) { + Intent intent = new Intent(getActivity(),UpanExchangeActivity.class); + intent.putExtra("upannum",upnum); + startActivity(intent); + } else if (id == R.id.tv_duihuan) { + if(wenxiannum<1) + { + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_notification, null); + AlertDialog dialog4 = new AlertDialog.Builder( + getActivity()).create(); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + tv_tishi.setText("肝胆相照平台协助查找文献次数已经用完,谢谢您的支持"); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + dialog4.show(); + Window window =dialog4.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog4.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog4.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog4.dismiss(); + + + + } + }); + } + else + { + if(CommonUtil.BigModule()) + { + Intent intentwf1 = new Intent(getActivity(), + BigMyLibraryActivity.class); + intentwf1.putExtra("search", "searchStr"); + startActivity(intentwf1); + } + else + { + Intent intentwf1 = new Intent(getActivity(), + MyLibraryActivity.class); + intentwf1.putExtra("search", "searchStr"); + startActivity(intentwf1); + } +// Intent intent1 = new Intent(getActivity(), FindHelpActivity.class); +// startActivity(intent1); + } + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case USEWELFAREPAGE: + LogUtil.i("USEWELFAREPAGE = "+resultJson); + GetWelfarePageBean getWelfarePageBean = GsonTools.fromGsonToBean(resultJson, GetWelfarePageBean.class); + if (getWelfarePageBean!=null&&"200".equals(getWelfarePageBean.getCode())){ + for (int i = 0;i1) + { + upnum=Integer.valueOf(dataBean.getLeft_result().substring(0,dataBean.getLeft_result().length()-1)); + } + if (upnum>0){ + rl_upan.setVisibility(View.VISIBLE); + xinzeng5.setText("剩余兑换"); + tv_unum.setText(upnum+""); + tv_ulijilingqu.setVisibility(View.VISIBLE); + ll_upan.setVisibility(View.GONE); + }else { + upnum=0; + rl_upan.setVisibility(View.GONE); + } + } + } + } + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HepatopathyInfoFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HepatopathyInfoFragment.java new file mode 100644 index 0000000..f4f3748 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HepatopathyInfoFragment.java @@ -0,0 +1,106 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Bundle; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.InterrogationPatientInfoBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.DrugView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +/** + * Created by WANGChengXin on 2019/7/18. + * 肝病信息 + */ + +public class HepatopathyInfoFragment extends BaseFragment { + private ArrayList list; + private View view; + private InterrogationPatientInfoBean.DataBean data; + private TextView tv_isgohospital,tv_state,tv_long,tv_drug,tv_contant; + private LinearLayout ll_yongyaoqingkuang; + private RelativeLayout rl_other; + + @Override + public View onCreateSuccessedView() { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_hepatopathyinfo_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_hepatopathyinfo); + } + + Bundle bundle = getArguments(); + data = (InterrogationPatientInfoBean.DataBean)bundle.getSerializable("data"); + + initView(); + setData(); + return view; + } + + private void setData() { + if (data.getGo_hospital()==0){ + tv_isgohospital.setText("否"); + }else { + tv_isgohospital.setText("是"); + } + tv_long.setText(data.getDisease_date()); + tv_state.setText(data.getLiver_status()); + tv_drug.setText(data.getBoolean_medication()); + String medication_info = data.getMedication_info(); + if (StringUtil.isEmpty(medication_info)){ + ll_yongyaoqingkuang.setVisibility(View.GONE); + }else { + ll_yongyaoqingkuang.setVisibility(View.VISIBLE); + tv_contant.setText(medication_info); + } + DrugView vg_drug = view.findViewById(R.id.vg_drug); + list = new ArrayList<>(); + String other_disease = data.getOther_disease(); + if (!StringUtil.isEmpty(other_disease)){ + String[] split = other_disease.split(","); + for (int i = 0;i DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + // 历史公益咨询接口地址 + private static String consultListHis = Url.getconsultListHis; + // 请求页码 + private int page = 1; + private int totalPage = 0; + private String expertUuid; + private HttpHandler httpHandler; + private static HistoryPublicServiceFragment instance; + RelativeLayout mLl; + + public static HistoryPublicServiceFragment getInstance() { + // if (instance == null) { + // instance = new HistoryPublicServiceFragment(); + // } + return instance; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + instance = this; + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_new_consult_big); + } + else { + view = UIUtils.inflate(R.layout.fragment_new_consult); + } + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_new_consult);// 下拉刷新的listview控件 + + // //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mLl = (RelativeLayout) view.findViewById(R.id.consult_backg); + mLl.setVisibility(View.GONE); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未解答公益咨询"); + + expertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + + // 设置下拉与上啦都可以用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getList(consultListHis, page, true); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getList(consultListHis, page, false); + } + }); +// getList(consultListHis, page, true); +// initData(); + + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + // String result = SharePrefUtil + // .getString(mActivity, consultListHis, null); + // + // if (StringUtil.notEmpty(result)) { + // processData(result, 1, true); + // } else { + // showLoadingProgress(); + // } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + // 显示加载框 + + } + + @Override + public void onResume() { + super.onResume(); + getList(consultListHis, page, true); + initData(); + } + + Boolean isRefresh; + + /** + * 请求服务器。列表数据 getPatientList + * + * @param loadUrl + * void + * @param page + */ + private void getList(final String loadUrl, final int page, + final boolean isRefresh) { + this.isRefresh=isRefresh; + Map map = new HashMap<>(); + map.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(loadUrl,map,102,this); + +// // 封装参数 +// RequestParams params = new RequestParams(); +// +// params.addBodyParameter("expertUuid", expertUuid); +// params.addBodyParameter("page", String.valueOf(page)); + // LogUtils.i("==" + loadUrl + " page==" + + // page+"expertUuid:"+expertUuid); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// if (page == 1) { +// SharePrefUtil.saveString(mActivity, loadUrl, +// info.result); +// } +// LogUtil.i("info.result = "+info.result); +// processData(info.result, page, isRefresh); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + * @param page + */ + private void processData(String result, int page, boolean isRefresh) { + LogUtil.e("result = "+result); + ConsultListBeanHis bean = GsonTools.fromGsonToBean(result, + ConsultListBeanHis.class); + if (!"200".equals(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("ssss" + bean.data.list.size()); + if (bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data.list); + } + } else { + // 加载更多下一页时候 + DataList.addAll(bean.data.list); + } + + // 当缓存时间大于10分钟则刷新数据 + /* + * String time = SharePrefUtil.getString(mActivity, + * "key_HistoryPublicServiceFragment_date", ""); boolean isInsert = + * SharePrefUtil.getBoolean(mActivity, "key_Historyps_isInsert", false); + * if (!StringUtil.isBland(time)) { int minute = + * DateUtil.compareTime(time, 10); if (minute > 10 || !isInsert) { + * //插入患者信息 insertPatient(DataList); //保存缓存的时间 + * SharePrefUtil.saveString(mActivity, + * "key_HistoryPublicServiceFragment_date", + * DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + * SharePrefUtil.saveBoolean(mActivity, "key_Historyps_isInsert", true); + * } } + */ + // 插入患者信息 + insertPatient(DataList); + + showAdapter(); + + // 完成刷新 + onLoaded(); + // 得到总页码数 + totalPage = bean.data.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (!isRefresh) { + ToastUtil.showToast("没有更多历史咨询了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + /** + * 插入患者信息 insertPatient + * + * @param dataList + * void + */ + public void insertPatient(final ArrayList dataList) { + new Thread(new Runnable() { + @Override + public void run() { + // TODO Auto-generated method stub + for (int i = 0; i < dataList.size(); i++) { + String patientUuid = dataList.get(i).getPatientUuid(); + String realName = dataList.get(i).getRealName(); + String photo = dataList.get(i).getPhoto(); + String mobile = dataList.get(i).getMobile(); + int sex = dataList.get(i).getSex(); + PatientModel patientModel = new PatientModel( + Constant.Patient_AppKey + patientUuid); + if (!StringUtil.isEmpty(realName)) { + patientModel.setRealName(realName); + } + if (!StringUtil.isEmpty(photo)) { + patientModel.setPhoto(photo); + } + if (!StringUtil.isEmpty(mobile)) { + patientModel.setMobile(mobile); + } + patientModel.setSex(sex); + patientModel.setType(Constant.typeConsult); + PatientSqlManager.insertPatient(patientModel, + Constant.typeConsult); + // LogUtil.i("HistoryPublicServiceFragment","patientModel="+patientModel.toString()); + } + } + }).start(); + } + + private void showAdapter() { + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ConsultAdapter(mActivity, true, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + } + + /** + * 刷新列表,更新红点提示 noticeUpdateUncount + * + * void + */ + public void noticeUpdateUncount() { + // 实例化适配器 + showAdapter(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + DataList patient; + LogUtil.i("position:" + position); + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + patient = DataList.get(position- ptrLv.getRefreshableView().getHeaderViewsCount()); + } else { + patient = DataList.get(position); + } + String mobile = patient.getMobile(); + String patientUuid = patient.getPatientUuid(); + int state = patient.getState(); + LogUtil.i("mobile:" + mobile + " realName:" + patient.getRealName()); + + if (!TextUtils.isEmpty(patientUuid)) { + if(patient.getUuid().toLowerCase().equals(UserInfoHelper.getUserDisplayName(patient.getUuid()))) + { + startwithId(getActivity(), patientUuid,null,null,consult,state+"",patient.getUuid(),patient.getRealName()); + } + else + { + startwithId(getActivity(), patientUuid,null,null,consult,state+"",patient.getUuid()); + } + +// SessionHelper.startP2PSession(getActivity(), patientUuid,consult,state+""); +// CCPAppManager.startChattingAction(mActivity, +// Constant.Patient_AppKey + patientUuid, +// patient.getRealName(), "2,1,1," + patient.getUuid(), +// patient.getPatientUuid(), state,false); + }else { +// SessionHelper.startP2PSession(getActivity(), patientUuid.toLowerCase(),consult); +// CCPAppManager.startChattingAction(mActivity, +// Constant.Patient_AppKey + patientUuid, +// "", "2,1,1," + patient.getUuid(), +// patient.getPatientUuid(), state,false); + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 102: + if (page == 1) { + SharePrefUtil.saveString(mActivity, consultListHis, + resultJson); + } + processData(resultJson, page, isRefresh); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HistoryPublicServiceFragment1.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HistoryPublicServiceFragment1.java new file mode 100644 index 0000000..f05ec88 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HistoryPublicServiceFragment1.java @@ -0,0 +1,393 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GetInterrogationActivity; +import cn.shangyu.gdxzExpert.activity.QuestionListActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ListNewInterrogationBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateGetAge; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/6/18.(多对一解惑(我已回答)) + */ + +public class HistoryPublicServiceFragment1 extends BaseFragment implements AdapterView.OnItemClickListener,OnCallBackFromNet { + + private OneToMoreAdapter ListAdapter; + private ArrayList DataList = new ArrayList<>(); + private PullToRefreshListView ptrLv; + // 历史公益咨询接口地址 + private static String consultListHis = Url.getconsultListHis; + // 请求页码 + private int page = 1; + private int totalPage = 0; + private String expertUuid; + private HttpHandler httpHandler; + private static HistoryPublicServiceFragment1 instance; + public static final int LISTMYANSWEREDINTERROGATION = 200; + private boolean isRefresh = true; + + + public static HistoryPublicServiceFragment1 getInstance() { + // if (instance == null) { + // instance = new HistoryPublicServiceFragment(); + // } + return instance; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + instance = this; + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_new_consult1_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_new_consult1); + } + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_new_consult);// 下拉刷新的listview控件 + + // //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未解答公益咨询"); + + expertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + + // 设置下拉与上啦都可以用 + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + isRefresh = true; + getList(); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + isRefresh = false; + getList(); + } + }); + getList(); + + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public LoadingPage.ResultState onLoad() { + return null; + } + + + + /** + * 请求服务器。列表数据 getPatientList + * + * @param + * + * @param + */ + private void getList() { + + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + showProgressDialog("正在加载"); + Map map = new HashMap<>(); + map.put("page",page+""); + sendJsonPostParamtoNetSignMD5(Url.listMyAnsweredInterrogation,map,LISTMYANSWEREDINTERROGATION,this); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param + * @param + */ + private void processData(String result) { + + ListNewInterrogationBean bean = GsonTools.fromGsonToBean(result, + ListNewInterrogationBean.class); + if (bean==null) { + ToastUtil.showToast(bean.getMessage()); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("ssss" + bean.getData().getList().size()); + if (bean.getData() == null || bean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.getData().getList()); + } + } else { + // 加载更多下一页时候 + DataList.addAll(bean.getData().getList()); + } + + showAdapter(); + + // 完成刷新 + onLoaded(); + // 得到总页码数 + boolean isLastPage = bean.getData().isIsLastPage(); + // 是否有更多 + if (isLastPage) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + + + private void showAdapter() { + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new OneToMoreAdapter(); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + } + + /** + * 刷新列表,更新红点提示 noticeUpdateUncount + * + * void + */ + public void noticeUpdateUncount() { + // 实例化适配器 + showAdapter(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + int answer_num = DataList.get(p).getAnswer_num(); + Intent intent; + if (answer_num==0){ + intent = new Intent(getActivity(), QuestionListActivity.class); + }else + intent = new Intent(getActivity(), GetInterrogationActivity.class); + intent.putExtra("step1_uuid",DataList.get(p).getStep1_uuid()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case LISTMYANSWEREDINTERROGATION: + LogUtil.i("LISTMYANSWEREDINTERROGATION = "+resultJson); + processData(resultJson); + break; + } + } + class OneToMoreAdapter extends BaseAdapter { + private SimpleDateFormat simpleDateFormat; + + @Override + public int getCount() { + return DataList.size(); + } + + @Override + public Object getItem(int position) { + return DataList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_onetomore_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_onetomore); + } + vh = new ViewHolder(); + vh.tv_name = (TextView) convertView.findViewById(R.id.tv_name); + vh.tv_info = (TextView) convertView.findViewById(R.id.tv_info); + vh.tv_data = (TextView) convertView.findViewById(R.id.tv_data); + vh.tv_type = (TextView) convertView.findViewById(R.id.tv_type); + vh.tv_contant = (TextView) convertView.findViewById(R.id.tv_contant); + vh.tv_answer = (TextView) convertView.findViewById(R.id.tv_answer); + vh.iv_redpoint = (ImageView) convertView.findViewById(R.id.iv_redpoint); + vh.tv_xing=convertView.findViewById(R.id.tv_xing); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if("0".equals(DataList.get(position).getUser_status())) + { + vh.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + vh.tv_xing.setVisibility(View.GONE); + vh.tv_info.setVisibility(View.GONE); + } + else + { + vh.tv_name.setText(DataList.get(position).getName().subSequence(0,1)); + vh.tv_xing.setVisibility(View.VISIBLE); + vh.tv_info.setVisibility(View.VISIBLE); + } +// vh.tv_name.setText(DataList.get(position).getName().subSequence(0,1)); + vh.tv_type.setText(DataList.get(position).getDisease_name()); + vh.tv_contant.setText(DataList.get(position).getDisease_describe()); + vh.tv_data.setText(DataList.get(position).getCreate_date().split(" ")[0]); + String s = DataList.get(position).getBirthday().split(" ")[0]; + if (simpleDateFormat==null){ + simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + } + int age = 0; + try { + Date parse = simpleDateFormat.parse(s); + age = DateGetAge.getAge(parse); + } catch (Exception e) { + e.printStackTrace(); + } + if (DataList.get(position).getSex()==0){ + vh.tv_info.setText("(男 "+age+"岁)"); + }else { + vh.tv_info.setText("(女 "+age+"岁)"); + } + int answer_num = DataList.get(position).getAnswer_num(); + if (answer_num!=0){ + vh.tv_answer.setText(DataList.get(position).getAnswer_num()+"位医生已回答"); + vh.iv_redpoint.setVisibility(View.GONE); + vh.tv_answer.setTextColor(Color.parseColor("#8D2316")); + }else { + vh.tv_answer.setText("暂未有医生回答"); + vh.iv_redpoint.setVisibility(View.VISIBLE); + vh.tv_answer.setTextColor(Color.parseColor("#666666")); + } + + + return convertView; + } + } + + class ViewHolder { + TextView tv_name, tv_info,tv_data,tv_type,tv_contant,tv_answer,tv_xing; + ImageView iv_redpoint; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeFragment.java new file mode 100644 index 0000000..58537a3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeFragment.java @@ -0,0 +1,1914 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.FragmentManager; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Typeface; +import android.graphics.drawable.AnimationDrawable; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.lidroid.xutils.util.LogUtils; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.SystemMessageObserver; +import com.netease.nimlib.sdk.msg.model.CustomNotification; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.activity.CasediscussionActivity; +import cn.shangyu.gdxzExpert.activity.CourseActivity; +import cn.shangyu.gdxzExpert.activity.GDEventDetailTopActivity; +import cn.shangyu.gdxzExpert.activity.GanDanEventActivity; +import cn.shangyu.gdxzExpert.activity.GroupingActivity; +import cn.shangyu.gdxzExpert.activity.HeroListActivity; +import cn.shangyu.gdxzExpert.activity.LoginActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.MoocimglActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.MyLibraryActivity; +import cn.shangyu.gdxzExpert.activity.MyPatientActivity; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.MyUserIconActivity; +import cn.shangyu.gdxzExpert.activity.NavigationActivity; +import cn.shangyu.gdxzExpert.activity.NewPatientActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.activity.PublicConsultationActivity; +import cn.shangyu.gdxzExpert.activity.SendGroupMsgListActivity; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.activity.ZhiBoActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ConsultListBean; +import cn.shangyu.gdxzExpert.bean.GetAppActivityBean; +import cn.shangyu.gdxzExpert.bean.GetUserIconBean; +import cn.shangyu.gdxzExpert.bean.HeroBean; +import cn.shangyu.gdxzExpert.bean.HomeList; +import cn.shangyu.gdxzExpert.bean.HomeList.HomeBean; +import cn.shangyu.gdxzExpert.bean.HomeModalBean; +import cn.shangyu.gdxzExpert.bean.NewListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.ZengshuBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.main.ReminderItem; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.DestroyActivityUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.MyUserIconUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.view.pullable.PullableScrollView; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import static cn.shangyu.gdxzExpert.activity.MainActivity.GETWELFARENOTICE; +import static cn.shangyu.gdxzExpert.fragment.HomeNewFragment.GETHOMEMODAL; +import static cn.shangyu.gdxzExpert.utils.Url.urlHtml; + +/** + * HomeFragment.java + * + * @author ssy + * @date 2015-8-31 下午2:35:14 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:主fragment + */ +public class HomeFragment extends BaseFragment implements OnClickListener,OnCallBackFromNet, OnCallBackFromActivity { + + private View topNewsView; + private View view; + // private RelativeLayout rl_topview; + // private TextView tv_homefoot; + // private LinearLayout mViewPagerLay; + // private LinearLayout dotLl; + // private TextView topNewsTitle; + private ArrayList dotList; + private ArrayList titleList; + private ArrayList urlList; + private RelativeLayout topview; + private BadgeView badgePatienMsg; + private BadgeView badgeWelfarelMsg; + private BadgeView badgeWelfarerMsg; + private BadgeView badgePublicMsg; + private BadgeView badgePublicServiceMsg; + private LinearLayout ll_my_patient; + private LinearLayout ll_my_vip; + private LinearLayout ll_my_public; + private RelativeLayout ll_my_keyan; + private RelativeLayout ll_my_library; + private LinearLayout ll_my_chat,ll_23; + private ImageView iv_my_patient; + private ImageView iv_my_public; + // private LayoutParams bottom_view; + PullableScrollView sv_pull; + private TextView mTv_zhibo, mTv_taolun, mTv_huodong, mTv_video; + private static HomeFragment instance; + private LinearLayout mLl_zhibo, mLl_taolun, mLl_huodong, mLl_video; + private ImageView mIv_zhibo, mIv_taolun, mIv_huodong, mIv_video; + private ImageView mIv_moocimg1,mIv_moocimg2,mIv_moocimg3,mIv_moocimg4; + String ExpertUuid; + private MainActivity mainActivity; + + // 2.0.0 + private ImageView mIv_pic; + private TextView mIv_name, mIv_hospitalName, mIv_positionName, + mIv_flowerNum, mIv_patientNum,mTv_consultNum; + private LinearLayout ll_my_college; + private LinearLayout ll_my_testing; + private LinearLayout ll_my_hospital; + private String moocurl1,moocurl2,moocurl3,moocurl4; + public static final int HERO2019= 2019; + public static final int GETAPPACTIVITY= 200; + public static final int URL_PATH= 222; + public static final int GETUSERICON= 223; + private TextView mBt_navi; + private Button bt_yingxiongbang; + private ImageView bt_fuilzengshu; + private ImageView iv_5zhe;// + private HttpHelper.HttpResult httpResult; + private ImageView home_modal,close_modal,home_modal_1; + public static Boolean ismodalshow =false; + public static Boolean ismodalshownow =false; + @SuppressLint("HandlerLeak") + Handler mHandler1 = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + String s = DateUtil.timestamp2Date(resultData, "yyyy-MM-dd"); +// boolean dateOneBigger = DateUtil.isDateOneBigger(s, "2020-02-26");//25号显示 + boolean dateOneBigger = true; + boolean isganyan = DateUtil.isDateOneBigger(s, "2020-03-21");//20号显示 + if (dateOneBigger){ +// iv_5zhe.setVisibility(View.VISIBLE); + Constant.IV_5ZHE = 1; + } + if (!isganyan){ + iv_ganyan.setVisibility(View.VISIBLE); + } + } + }; + }; + private ImageView iv_ganyan; + private int form;//赠书活动,1:1web_view 2原生弹框 + private String url_path;//赠书活动内容接口 + private String zengshuName; + private ImageView iv_home1; + private ImageView iv_home2; + private TextView tv_text1; + private TextView tv_text2; + private List list; + public final static int MYUSERICON = 2222; + private String name1; + private String img1; + private String img2; + private String name2; + private static Boolean receive_notice=false; + private LocalBroadcastManager localBroadcastManager1; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + private RelativeLayout ll_patient_new; + private LinearLayout ll_patient_group; + private LinearLayout ll_group_sendmsg; + private LinearLayout ll_home_outpaient; + private ImageView iv_new_patient; + + public static HomeFragment getInstance() { + // if (instance == null) { + // instance = new HomeFragment(); + // } + return instance; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + instance = this; + view = UIUtils.inflate(R.layout.fragment_home); + topNewsView = inflater.inflate(R.layout.layout_roll_view, null); + + // tv_homefoot = (TextView) view.findViewById(R.id.tv_homefoot); + topview = (RelativeLayout) view.findViewById(R.id.topview); + sv_pull = (PullableScrollView) view.findViewById(R.id.sv_pull); + ll_my_patient = (LinearLayout) view.findViewById(R.id.ll_my_patient);// 我的患者 + ll_my_vip = view.findViewById(R.id.ll_my_vip);// 我的vip +// iv_5zhe = view.findViewById(R.id.iv_5zhe);// 我的vip + iv_ganyan = view.findViewById(R.id.iv_ganyan);// 我的肝炎 + ll_my_public = (LinearLayout) view.findViewById(R.id.ll_my_public);// 我的公益咨询 + ll_my_keyan = view.findViewById(R.id.ll_my_keyan);// 我的科研 + ll_my_library = view.findViewById(R.id.ll_my_library);// 我的图书馆 + ll_my_chat = (LinearLayout) view.findViewById(R.id.ll_my_chat);// 圈内交流 + ll_23 = (LinearLayout) view.findViewById(R.id.ll_23);// 圈内交流 + mIv_moocimg1 = (ImageView) view.findViewById(R.id.iv_rmoocimg1); + mIv_moocimg2 = (ImageView) view.findViewById(R.id.iv_rmoocimg2); + mIv_moocimg3 = (ImageView) view.findViewById(R.id.iv_rmoocimg3); + mIv_moocimg4 = (ImageView) view.findViewById(R.id.iv_rmoocimg4); + + mTv_zhibo = (TextView) view.findViewById(R.id.tv_home_zhibo); + // + mTv_taolun = (TextView) view.findViewById(R.id.tv_home_taolun); + mTv_huodong = (TextView) view.findViewById(R.id.tv_home_huodong); + mTv_video = (TextView) view.findViewById(R.id.tv_home_video); + mLl_zhibo = (LinearLayout) view.findViewById(R.id.ll_home_zhibo); + mLl_taolun = (LinearLayout) view.findViewById(R.id.ll_home_taolun); + mLl_huodong = (LinearLayout) view.findViewById(R.id.ll_home_huodong); + mLl_video = (LinearLayout) view.findViewById(R.id.ll_home_video); + + mIv_zhibo = (ImageView) view.findViewById(R.id.iv_home_zhibo); + mIv_taolun = (ImageView) view.findViewById(R.id.iv_home_taolun); + mIv_huodong = (ImageView) view.findViewById(R.id.iv_home_huodong); + mIv_video = (ImageView) view.findViewById(R.id.iv_home_video); + + mIv_pic = (ImageView) view.findViewById(R.id.pic); + mIv_name = (TextView) view.findViewById(R.id.doctor_name); + mIv_hospitalName = (TextView) view.findViewById(R.id.hospitalName); + mIv_positionName = (TextView) view.findViewById(R.id.positionName); +// mTv_consultNum=(TextView) view.findViewById(R.id.tv_consultnum); +// mIv_flowerNum = (TextView) view.findViewById(R.id.tv_flowernum); +// mIv_patientNum = (TextView) view.findViewById(R.id.tv_patientnum); + ll_my_college = (LinearLayout) view.findViewById(R.id.ll_my_college); + ll_my_testing = (LinearLayout) view.findViewById(R.id.ll_my_testing); + ll_my_hospital = (LinearLayout) view.findViewById(R.id.ll_my_hospital); + home_modal =view.findViewById(R.id.home_modal); + close_modal =view.findViewById(R.id.close_modal); + home_modal_1=view.findViewById(R.id.home_modal_1); + + initData(); + + + + // 患者提醒 + iv_my_patient = (ImageView) view.findViewById(R.id.iv_my_patient); + badgePatienMsg = new BadgeView(mActivity, iv_my_patient); + badgePatienMsg.setBackgroundResource(R.drawable.unread_dot); + badgePatienMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + + + // 公益咨询提醒 + iv_my_public = (ImageView) view.findViewById(R.id.iv_my_public); + badgePublicServiceMsg = new BadgeView(mActivity, iv_my_public); + badgePublicServiceMsg.setBackgroundResource(R.drawable.unread_dot); + badgePublicServiceMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + + // 公益咨询提醒 + iv_my_public = (ImageView) view.findViewById(R.id.iv_my_public); + badgePublicMsg = new BadgeView(mActivity, iv_my_public); + badgePublicMsg.setBackgroundResource(R.drawable.unread_dot); + badgePublicMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + + + mBt_navi=view.findViewById(R.id.bt_navi); + bt_yingxiongbang = view.findViewById(R.id.bt_yingxiongbang); + bt_fuilzengshu = view.findViewById(R.id.bt_fuilzengshu); + + iv_home1 = view.findViewById(R.id.iv_home1); + iv_home2 = view.findViewById(R.id.iv_home2); + tv_text1 = view.findViewById(R.id.tv_text1); + tv_text2 = view.findViewById(R.id.tv_text2); + badgeWelfarelMsg=new BadgeView(mActivity, iv_home1); + badgeWelfarelMsg.setBackgroundResource(R.drawable.unread_dot); + badgeWelfarelMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + badgeWelfarerMsg=new BadgeView(mActivity, iv_home2); + badgeWelfarerMsg.setBackgroundResource(R.drawable.unread_dot); + badgeWelfarerMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + ll_patient_new = view.findViewById(R.id.ll_patient_new); + ll_patient_group = view.findViewById(R.id.ll_patient_group); + ll_group_sendmsg = view.findViewById(R.id.ll_group_sendmsg); + ll_home_outpaient = view.findViewById(R.id.ll_home_outpaient); + iv_new_patient = view.findViewById(R.id.iv_new_patient); + + + //得到AssetManager + AssetManager mgr=getActivity().getAssets(); + //根据路径得到Typeface + Typeface tf=Typeface.createFromAsset(mgr, "SourceHanSansCN-Medium.otf"); + mIv_name.setTypeface(tf); + + + localBroadcastManager1 = LocalBroadcastManager.getInstance(getActivity()); + intentFilter = new IntentFilter(); + intentFilter.addAction("MyUserIconActivity"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager1.registerReceiver(localReceiver,intentFilter); + list = new ArrayList<>(); +// isHeroList(); + is5zhe(); + bt_yingxiongbang.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intentgandanxyb = new Intent(mActivity, HeroListActivity.class); + mActivity.startActivity(intentgandanxyb); + } + }); + bt_fuilzengshu.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (form==2){ + getUrl_path(); + }else { + Intent intent =new Intent(getActivity(),NewsDetailActivity.class); + intent.putExtra("url",url_path); + intent.putExtra("title",zengshuName); + intent.putExtra("flag",1); + intent.putExtra("summary","肝胆相照®肝胆病在线公共服务平台"); + startActivity(intent); + } + + } + }); + DestroyActivityUtil.destoryActivity("LoginActivity"); + getZengshuInfo(); + getUserIcon(); + registerMsgUnreadInfoObserver(true); +// registerCustomMessageObservers(true); + registerSystemMessageObservers(true); + registerObservers(true); +/** + * 创建消息渠道 + * */ + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + try { + NotificationManager notificationManager = (NotificationManager)getActivity(). getSystemService(Context.NOTIFICATION_SERVICE); + +// String groupId_1 = "随访消息"; +// String groupName_1 = "随访消息"; +// NotificationChannelGroup group5 = new NotificationChannelGroup(groupId_1, groupName_1); +// notificationManager.createNotificationChannelGroup(group5); + + String channelId1 = "随访消息"; + String channelName1 = "随访消息"; + int importance1 = NotificationManager.IMPORTANCE_HIGH; + NotificationChannel channel1 = new NotificationChannel(channelId1, channelName1, importance1); + + notificationManager.createNotificationChannel(channel1); + }catch (Exception e){ + + } + + } + + showRedUnCount(); + InitLisenter(); + getHomeModal(); + return view; + } + + @Override + public void getmessage(Boolean receive_notice) { + this.receive_notice=receive_notice; + + } + + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + LogUtil.i("我的应用修改"); + name1 = intent.getStringExtra("name1"); + img1 = intent.getStringExtra("img1"); + name2 = intent.getStringExtra("name2"); + img2 = intent.getStringExtra("img2"); + tv_text1.setText(name1); + tv_text2.setText(name2); + badgeWelfarerMsg.hide(); + badgeWelfarelMsg.hide(); + if("我的福利".equals(name2)&&receive_notice&&badgeWelfarerMsg!=null) + { + badgeWelfarerMsg.show(); + } + else if("我的福利".equals(name1)&&receive_notice&&badgeWelfarerMsg!=null) + { + badgeWelfarelMsg.show(); + } + ImageLoader.getInstance().displayImage( + urlHtml + img1, + iv_home1, ImageOptions.getImageOptions() + ); + ImageLoader.getInstance().displayImage( + urlHtml + img2, + iv_home2, ImageOptions.getImageOptions() + ); + } + } + /** + * 获取动态弹框,如年终总结 + */ + private void getHomeModal() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.homeModalurl,map,GETHOMEMODAL,this); + + + } + + //专家获得动态图标 + private void getUserIcon() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getUserIcon,map,GETUSERICON,this); + } + + private void getUrl_path() { + Map map = new HashMap<>(); + LogUtil.i("url_path = "+Url.url_path+url_path); + sendJsonPostParamtoNetSignMD5(Url.url_path+url_path,map,URL_PATH,this); + } + + //福利赠书 + private void getZengshuInfo() { + Map map = new HashMap<>(); + map.put("id","6"); + sendJsonPostParamtoNetSignMD5(Url.getAppActivity,map,GETAPPACTIVITY,this); + } + + private void showFuliZengshuDailog(ZengshuBean bean1) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_fulizengshu, null); + TextView tv_rennum = layout.findViewById(R.id.tv_rennum); + TextView tv_bennum = layout.findViewById(R.id.tv_bennum); + ImageView iv_fuli_close = layout.findViewById(R.id.iv_fuli_close); + Button btn_canyu = layout.findViewById(R.id.btn_canyu); + tv_rennum.setText(bean1.getData().getPatient_num()+""); + tv_bennum.setText(bean1.getData().getBook_num()+""); + final Dialog dialog = new AlertDialog.Builder( + getActivity()).create(); + dialog.setCancelable(false); + dialog.show(); + dialog.getWindow().setContentView(layout); + + iv_fuli_close.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_canyu.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(getActivity(), MyQrCodeActivity.class); + startActivity(intent); + dialog.dismiss(); + } + }); + + } + /** + * 是否显示5折 + * */ + private void is5zhe() { + new Thread(){ + @Override + public void run() { + super.run(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + TimestampBean bean = GsonTools.fromGsonToBean( httpResult.getString(), TimestampBean.class); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + Message message = new Message(); + message.what = 200; + message.obj = bean.getTimestamp(); + mHandler1.sendMessage(message); + } + } catch (Exception e) { +// ToastUtil.showMessage("数据异常,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + } + } + }.start(); + } + + private void isHeroList() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.hero2019,map,HERO2019,this); + } + // private ImageView mIv_zhibo, mIv_taolun, mIv_huodong; + // private TextView mTv_zhibo, mTv_taolun, mTv_huodong; + public void InitLisenter() { + mainActivity = (MainActivity) getActivity(); +// mainActivity.layout_top.getBackground().setAlpha(0); + mIv_moocimg1.setOnClickListener(this); + mIv_moocimg2.setOnClickListener(this); + mIv_moocimg3.setOnClickListener(this); + mIv_moocimg4.setOnClickListener(this); + mIv_zhibo.setOnClickListener(this); + mIv_taolun.setOnClickListener(this); + mIv_huodong.setOnClickListener(this); + mIv_video.setOnClickListener(this); + mBt_navi.setOnClickListener(this); + mTv_zhibo.setOnClickListener(this); + mTv_taolun.setOnClickListener(this); + mTv_huodong.setOnClickListener(this); + mTv_video.setOnClickListener(this); + ll_my_patient.setOnClickListener(this); + ll_my_vip.setOnClickListener(this); + ll_my_public.setOnClickListener(this); + ll_my_keyan.setOnClickListener(this); + ll_my_library.setOnClickListener(this); + ll_my_chat.setOnClickListener(this); + ll_my_hospital.setOnClickListener(this); + ll_my_testing.setOnClickListener(this); + ll_my_college.setOnClickListener(this); + mIv_pic.setOnClickListener(this); + ll_home_outpaient.setOnClickListener(this); + ll_patient_new.setOnClickListener(this); + ll_patient_group.setOnClickListener(this); + ll_group_sendmsg.setOnClickListener(this); + home_modal.setOnClickListener(this); + close_modal.setOnClickListener(this); + sv_pull.setOnScrollChangedListener(new PullableScrollView.OnScrollChangedListener() { + + @Override + public void onScrollChanged(ScrollView who, int l, int t, int oldl, + int oldt) { + // TODO Auto-generated method stub + if (topview != null && topview.getHeight() > 0) { + // define it for scroll height + int lHeight = topview.getHeight(); + if (t < lHeight) {// = + int progress = (int) (new Float(t) / new Float(lHeight) * 255);// 255 +// mainActivity.layout_top.getBackground().setAlpha( +// progress); + } else { +// mainActivity.layout_top.getBackground().setAlpha(255); + } + } + } + }); + + } + + /* + * public void onEventMainThread(EvenBusEvent event) { + * + * String msg = "onEventMainThread收到了消息:" + + * event.getmMsg()+event.getmType(); // String type = event.getmType(); // + * if ("1".equals(type)) {//1.公益咨询 // // } showRedUnCount(); LogUtil.v(msg); + * } + */ + + + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + // EventBus.getDefault().unregister(this); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + registerMsgUnreadInfoObserver(false); +// registerCustomMessageObservers(false); + registerSystemMessageObservers(false); + registerObservers(false); + + } + + private void initData() { + ExpertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + // 加载轮播图 + // processData(); + // 活动条目] + String photo = SharePrefUtil.getString(mActivity, "photo", null); + String hospitalName = SharePrefUtil.getString(mActivity, + "hospitalName", null); + String positionName = SharePrefUtil.getString(mActivity, + "positionName", null); + String realName = SharePrefUtil.getString(mActivity, "realName", null); + if (realName != null && !"null".equals(realName)) { + mIv_name.setText(realName); + + } + +// if (hospitalName != null && !"null".equals(hospitalName)) { +// mIv_hospitalName.setText(hospitalName); +// +// } + if (positionName != null && !"null".equals(positionName)) { + mIv_positionName.setText(positionName); + } + if (photo != null && !"null".equals(photo)) { + ImageLoader.getInstance().displayImage(urlHtml + photo,mIv_pic,ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray)); + } + + } + + // 实例化轮播图的点 + private void initDot(int size) { + dotList = new ArrayList(); + // dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + // dotLl.addView(m); + dotList.add(m); + } + } + + // public void processData() { + // + // String result = SharePrefUtil.getString(mActivity, + // Url.getnewsRollIndex, null); + // LogUtil.i("result==" + result); + // if (!TextUtils.isEmpty(result)) { + // GetTopViewSp(result); + // } else { + // // GetTopViewNet(); + // } + // if (instance != null && !getActivity().isFinishing()) { + // GetTopViewNet(); + // } + // } + + private void GetTopViewNet() { + + Map paramMap = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getnewsRollIndexNew, paramMap, 2, this); + +// HttpHelper.loadData(HttpMethod.POST, Url.getnewsRollIndex, null, +// new RequestCallBack() { +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// // TODO Auto-generated method stub +// } +// +// @Override +// public void onSuccess(ResponseInfo arg0) { +// // TODO Auto-generated method stub +// // LogUtil.i("首页轮播图==" + arg0.result); +// // 把返回的结果保存到sp +// SharePrefUtil.saveString(mActivity,Url.getnewsRollIndex, arg0.result); +// if (mViewPager != null) { +// mViewPager.stopRunning(); +// } +// GetTopViewSp(arg0.result); +// } +// }); + } + + private int patientCount = 0; + private int consultCount = 0; + private RollViewPager mViewPager; + private ECAlertDialog buildAlert; + private FragmentManager fm; + private NewListBean bean; + + private void GetTopViewSp(String result) { + bean = GsonTools.fromGsonToBean(result, NewListBean.class); + if (bean.data != null && bean.data.size() > 0) { + titleList = new ArrayList(); + urlList = new ArrayList(); + for (int i = 0; i < bean.data.size(); i++) { + titleList.add(bean.data.get(i).title); + if (!TextUtils.isEmpty(bean.data.get(i).headImg)) { + urlList.add(urlHtml + bean.data.get(i).headImg);// //封面图片 + } else { + urlList.add("");// + } + } + // 轮播图的点 + initDot(bean.data.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + String url = urlHtml + + bean.data.get(position).path; + String title = bean.data.get(position).title; + String summary = bean.data.get(position).summary; + String imgs = bean.data.get(position).headImg; + String newsuuid = bean.data.get(position).uuid; + String agreenum = bean.data.get(position).agreenum; + String readnum = bean.data.get(position).readnum; + intent.putExtra("newsfsuuuid", newsuuid); + intent.putExtra("newsfagreenum", agreenum); + intent.putExtra("newsfreadnum", readnum); + intent.putExtra("url", url); + // intent.putExtra("title", title); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsTitle", title); + intent.putExtra("summary", summary); + intent.putExtra("imageUrl", urlHtml + imgs); + intent.putExtra("flag", 5); + mActivity.startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // mViewPager.setTitle(topNewsTitle, titleList); + // mViewPager.startRoll(); + // + // // mViewPager.WordLight(); + // mViewPagerLay.removeAllViews(); + // mViewPagerLay.addView(mViewPager); + topview.removeAllViews(); + // topview.addView(topNewsView); + } + } + + public void getScienceList() { + // 封装参数 + RequestParams params = new RequestParams(); + // 1 专家端 2 患者端 + params.addBodyParameter("atype", 1 + ""); + params.addBodyParameter("uuid", ExpertUuid); + httpHandler = HttpHelper.loadData(HttpMethod.POST, Url.getExpertroll, + params, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(mActivity, + // Url.getExpertroll, + // info.result); + processData1(info.result); + +// Log.i("TAG", "result = "+info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /* + * "视频简介*标题*阅读数*封面图片地址*发布人" + */ + String[] VideoStr = null; + private HomeBean zhiboBean, taolunBean, huodongBean, videoBean; + private AnimationDrawable animationDrawable; + public void processData1(String result) {// + mTv_zhibo.setText(""); + mTv_taolun.setText(""); + mTv_huodong.setText(""); + mTv_video.setText(""); + LogUtil.i("包含首页广告栏 = "+result); + HomeList bean = null; + try { + bean = GsonTools.fromGsonToBean(result, HomeList.class); + //今日直播标识(0 无直播 >0 有直播) + if (bean.isOnlineToday>0){ + MainActivity.mMainActivity.iv_zhibo.setVisibility(View.VISIBLE); + mIv_zhibo.setImageResource(R.drawable.todaylive); + animationDrawable = (AnimationDrawable) mIv_zhibo.getDrawable(); + animationDrawable.start(); + } + //本地广播 + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); + Intent intent = new Intent("LOCAL_ACTION"); + intent.putExtra("issign", bean.signIn); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean == null || bean.data == null || bean.data.size() == 0) { + mLl_zhibo.setVisibility(View.GONE); + mLl_taolun.setVisibility(View.GONE); + mLl_huodong.setVisibility(View.GONE); + mLl_video.setVisibility(View.GONE); + } else { + for (int i = 0; i < bean.data.size(); i++) { + // 小类1新闻,2会议,3肝胆家园,4病例讨论,5病例分享,6肝胆活动,7科普文章 + if ("2".equals(bean.data.get(i).getBtype())) { + mTv_zhibo.setText(bean.data.get(i).getTitle()); + zhiboBean = bean.data.get(i); + } + if ("4".equals(bean.data.get(i).getBtype())) { + mTv_taolun.setText(bean.data.get(i).getTitle()); + taolunBean = bean.data.get(i); + } + if ("6".equals(bean.data.get(i).getBtype())) { + mTv_huodong.setText(bean.data.get(i).getTitle()); + huodongBean = bean.data.get(i); + } + if ("8".equals(bean.data.get(i).getBtype())) { + mTv_video.setText(bean.data.get(i).getTitle()); + videoBean = bean.data.get(i); + String sssss = bean.data.get(i).getContent(); + if (sssss.contains("★")) { + VideoStr = bean.data.get(i).getContent().split("★"); + } + + } + + } + if (StringUtil.isEmpty(mTv_zhibo.getText().toString())) { + mLl_zhibo.setVisibility(View.GONE); + } else { + mLl_zhibo.setVisibility(View.VISIBLE); + } + if (StringUtil.isEmpty(mTv_taolun.getText().toString())) { + mLl_taolun.setVisibility(View.GONE); + } else { + mLl_taolun.setVisibility(View.VISIBLE); + } + if (StringUtil.isEmpty(mTv_huodong.getText().toString())) { + mLl_huodong.setVisibility(View.GONE); + } else { + mLl_huodong.setVisibility(View.VISIBLE); + } + if (StringUtil.isEmpty(mTv_video.getText().toString())) { + mLl_video.setVisibility(View.GONE); + } else { + mLl_video.setVisibility(View.VISIBLE); + } + if (bean.expert == null||bean.expert.state!=6) { + // 专家账号信息为null 进入登录页面 + handleLogout(false); + } + if (bean != null && bean.expert != null + && bean.expert.realName != null + && !"null".equals(bean.expert.realName)) { + mIv_name.setText(bean.expert.realName); + + + } + +// if (bean != null && bean.expert != null +// && bean.expert.hospitalName != null +// && !"null".equals(bean.expert.hospitalName)) { +// mIv_hospitalName.setText(bean.expert.hospitalName); +// } + if (bean != null && bean.expert != null + && bean.expert.positionName != null + && !"null".equals(bean.expert.positionName)) { + mIv_positionName.setText(bean.expert.positionName); + } + if (bean != null && bean.expert != null + && bean.expert.photo != null + && !"null".equals(bean.expert.photo)) { + ImageLoader.getInstance().displayImage(urlHtml + bean.expert.photo,mIv_pic,ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray)); + } + SharePrefUtil.saveInt(getActivity(),"ConsultTotalNum",bean.ConsultTotalNum); + SharePrefUtil.saveInt(getActivity(),"pingFlowewrnum",bean.pingFlowewrnum); + SharePrefUtil.saveInt(getActivity(),"expertApplyNum",bean.expertApplyNum); +// mTv_consultNum.setText(":" + bean.ConsultTotalNum); +// mIv_flowerNum.setText(":" + bean.pingFlowewrnum); +// mIv_patientNum.setText(":" + bean.expertApplyNum); + if (bean != null && bean.expert != null && bean.moocswitch != null&& bean.moocswitch.equals("1")) { + switch (bean.getAdlist().size()) { + case 1: + mIv_moocimg1.setVisibility(View.VISIBLE); + mIv_moocimg2.setVisibility(View.GONE); + mIv_moocimg3.setVisibility(View.GONE); + mIv_moocimg4.setVisibility(View.GONE); + ll_23.setVisibility(View.GONE); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(0).getImg(),mIv_moocimg1,ImageOptions.getImageOptions(R.drawable.shouyegg_long)); + moocurl1 = bean.getAdlist().get(0).getUrl(); + break; + case 2: + if (bean.getAdlist().get(0).getPosition()==1) { + mIv_moocimg1.setVisibility(View.VISIBLE); + mIv_moocimg2.setVisibility(View.GONE); + mIv_moocimg3.setVisibility(View.GONE); + mIv_moocimg4.setVisibility(View.VISIBLE); + ll_23.setVisibility(View.GONE); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(0).getImg(),mIv_moocimg1,ImageOptions.getImageOptions(R.drawable.shouyegg_long)); + moocurl1 = bean.getAdlist().get(0).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(1).getImg(),mIv_moocimg4,ImageOptions.getImageOptions(R.drawable.shouyegg_long)); + moocurl4 = bean.getAdlist().get(1).getUrl(); + }else { + mIv_moocimg1.setVisibility(View.GONE); + mIv_moocimg2.setVisibility(View.VISIBLE); + mIv_moocimg3.setVisibility(View.VISIBLE); + mIv_moocimg4.setVisibility(View.GONE); + ll_23.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(0).getImg(),mIv_moocimg2,ImageOptions.getImageOptions(R.drawable.shouyegg_short)); + moocurl2 = bean.getAdlist().get(0).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(1).getImg(),mIv_moocimg3,ImageOptions.getImageOptions(R.drawable.shouyegg_short)); + moocurl3 = bean.getAdlist().get(1).getUrl(); + } + + break; + case 3: + ll_23.setVisibility(View.VISIBLE); + mIv_moocimg1.setVisibility(View.VISIBLE); + mIv_moocimg2.setVisibility(View.VISIBLE); + mIv_moocimg3.setVisibility(View.VISIBLE); + mIv_moocimg4.setVisibility(View.GONE); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(0).getImg(),mIv_moocimg1,ImageOptions.getImageOptions(R.drawable.shouyegg_long)); + moocurl1 = bean.getAdlist().get(0).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(1).getImg(),mIv_moocimg2,ImageOptions.getImageOptions(R.drawable.shouyegg_short)); + moocurl2 = bean.getAdlist().get(1).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(2).getImg(),mIv_moocimg3,ImageOptions.getImageOptions(R.drawable.shouyegg_short)); + moocurl3 = bean.getAdlist().get(2).getUrl(); + break; + case 4: + mIv_moocimg1.setVisibility(View.VISIBLE); + mIv_moocimg2.setVisibility(View.VISIBLE); + mIv_moocimg3.setVisibility(View.VISIBLE); + ll_23.setVisibility(View.VISIBLE); + mIv_moocimg4.setVisibility(View.VISIBLE); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(0).getImg(),mIv_moocimg1,ImageOptions.getImageOptions(R.drawable.shouyegg_long)); + moocurl1 = bean.getAdlist().get(0).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(1).getImg(),mIv_moocimg2,ImageOptions.getImageOptions(R.drawable.shouyegg_short)); + moocurl2 = bean.getAdlist().get(1).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(2).getImg(),mIv_moocimg3,ImageOptions.getImageOptions(R.drawable.shouyegg_short)); + moocurl3 = bean.getAdlist().get(2).getUrl(); + ImageLoader.getInstance().displayImage(urlHtml + bean.getAdlist().get(3).getImg(),mIv_moocimg4,ImageOptions.getImageOptions(R.drawable.shouyegg_long)); + moocurl4 = bean.getAdlist().get(3).getUrl(); + break; + } + + } else { + mIv_moocimg1.setVisibility(View.GONE); + mIv_moocimg2.setVisibility(View.GONE); + mIv_moocimg3.setVisibility(View.GONE); + mIv_moocimg4.setVisibility(View.GONE); + } + } + + +// handleLogout(false); + } + + private void handleLogout(boolean isNotice) { + // ECProgressDialog mPostingdialog = new ECProgressDialog(this, + // R.string.posting_logout); + // mPostingdialog.show(); + ToastUtil.showMessage("专家账号信息为空"); + showProgressDialog(getString(R.string.posting_logout)); + /** + * 需要在此判断专家是否登陆,信息是否完整 + * + * */ + startActivity(new Intent(getContext(), LoginActivity.class)); + try { + SDKCoreHelper.logout(isNotice); + }catch (Exception e){ + + } + + + + + + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + @Override + public void onClick(View v) { + Intent intent; + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.ll_patient_new) {//患者审核 + startActivity( new Intent(getActivity(), NewPatientActivity.class)); + } else if (id == R.id.ll_patient_group) {//患者分组 + startActivity( new Intent(getActivity(), GroupingActivity.class)); + } else if (id == R.id.ll_group_sendmsg) {//群发消息 +// Intent intent3213 = new Intent(getActivity(), GuanggaoDetailActivity.class); +// intent3213.putExtra("moocurl", "https://live.polyv.cn/watch/1633941"); +// startActivity(intent3213); + startActivity(new Intent(getActivity(), SendGroupMsgListActivity.class)); + } else if (id == R.id.ll_home_outpaient) {//出诊计划 + startActivity(new Intent(getActivity(), OutofPatientNoticeActivity.class)); + } else if (id == R.id.ll_my_patient) { + // 我的患者页面 + intent = new Intent(getFrameActivity(), MyPatientActivity.class); + startActivity(intent); + } else if (id == R.id.close_modal) { + close_modal.setVisibility(View.GONE); + home_modal.setVisibility(View.GONE); + home_modal_1.setVisibility(View.GONE); + ismodalshow=false; + } else if (id == R.id.home_modal) { + close_modal.setVisibility(View.GONE); + home_modal.setVisibility(View.GONE); + home_modal_1.setVisibility(View.GONE); + ismodalshow=false; + + if(homeModalBean!=null&&homeModalBean.getData()!=null&&homeModalBean.getData().getUrl_path()!=null) + { + + Intent broadc = new Intent(mActivity, NewsDetailActivity.class); + if(homeModalBean.getData().getUrl_path().contains("?")) + { + broadc.putExtra("url",homeModalBean.getData().getUrl_path()+"&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + else + { + broadc.putExtra("url",homeModalBean.getData().getUrl_path()+"?&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + if(homeModalBean.getData().getName().contains("{{name}}")||homeModalBean.getData().getNote().contains("{{name}}")) + { + broadc.putExtra("newsTitle",homeModalBean.getData().getName().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + broadc.putExtra("summary",homeModalBean.getData().getNote().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + + } + else + { + broadc.putExtra("newsTitle",homeModalBean.getData().getName()); + broadc.putExtra("summary",homeModalBean.getData().getNote()); + } + broadc.putExtra("title","肝胆相照"); + + broadc.putExtra("homemodal","yes"); + + broadc.putExtra("flag", 1); + startActivity(broadc); + } + } else if (id == R.id.ll_my_keyan) { + // 我的科研 + //收费 +// if(homeModalBean!=null&&homeModalBean.getData()!=null&&homeModalBean.getData().getUrl_path()!=null) +// { +// Intent broadc = new Intent(mActivity, NewsDetailActivity.class); +// if(homeModalBean.getData().getUrl_path().contains("?")) +// { +// broadc.putExtra("url",homeModalBean.getData().getUrl_path()+"&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); +// } +// else +// { +// broadc.putExtra("url",homeModalBean.getData().getUrl_path()+"?&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); +// } +// if(homeModalBean.getData().getName().contains("{{name}}")||homeModalBean.getData().getNote().contains("{{name}}")) +// { +// broadc.putExtra("newsTitle",homeModalBean.getData().getName().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); +// broadc.putExtra("summary",homeModalBean.getData().getNote().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); +// +// } +// else +// { +// broadc.putExtra("newsTitle",homeModalBean.getData().getName()); +// broadc.putExtra("summary",homeModalBean.getData().getNote()); +// } +// broadc.putExtra("title","肝胆相照"); +// broadc.putExtra("homemodal","yes"); +// broadc.putExtra("flag", 1); +// startActivity(broadc); +// } + + Toast.makeText(getActivity(), "暂未开放", Toast.LENGTH_SHORT).show(); +// ToastUtil.showMessage("暂未开放"); +// intent = new Intent(mActivity, MyScientificResearchActivity.class); +// startActivity(intent); + } else if (id == R.id.ll_my_vip) { + // 我的VIP + // intent = new Intent(getFrameActivity(), MyVIPActivity.class); + // startActivity(intent); + startActivity(new Intent(mActivity, VideoActivity.class)); + } else if (id == R.id.ll_my_public) { + // 公益咨询 +// intent = new Intent(mActivity, PublicServiceActivity.class); + intent = new Intent(mActivity, PublicConsultationActivity.class); + startActivity(intent); + } else if (id == R.id.ll_my_chat) { + // 圈里交流 + // startActivity(new Intent(mActivity, MyCicleActivity.class)); + // startActivity(new Intent(mActivity,GanDanEventActivity.class));// + // 积分商城 +// startActivity(new Intent(mActivity, PointsMallActivity.class)); + Intent intent1 = new Intent(mActivity, CourseActivity.class); + startActivity(intent1); + } else if (id == R.id.ll_my_library) { + // 我的图书馆 + intent = new Intent(mActivity, MyLibraryActivity.class); + startActivity(intent); + } else if (id == R.id.tv_home_zhibo) { + if (zhiboBean == null) { + ToastUtil.showMessage("数据异常,请到肝胆会议处观看"); + return; + } + Intent meetintent = new Intent(mActivity, ZhiBoActivity.class); + meetintent.putExtra("newsTitle", zhiboBean.getTitle()); + meetintent.putExtra("url", zhiboBean.getPath()); + meetintent.putExtra("summary", zhiboBean.getContent()); + meetintent.setType("zhibo"); + startActivity(meetintent); + } else if (id == R.id.tv_home_video) { + if (!StringUtil.empty(VideoStr) && VideoStr.length == 5) { + Intent videointent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + videointent.putExtra("startNow", false); + videointent.putExtra("isVlmsOnline", false); + videointent.putExtra("url", videoBean.getPath()); + videointent.putExtra("uuid", videoBean.getArticle_uuid()); + videointent.putExtra("note", VideoStr[0]); + videointent.putExtra("title", VideoStr[1]); + videointent.putExtra("readnum", VideoStr[2]); + videointent.putExtra("imgpath", VideoStr[3]); + videointent.putExtra("public_name", VideoStr[4]); + startActivity(videointent); + } else { + ToastUtil.showMessage("服务器异常 ,请到肝胆会议处观看!"); + } + } else if (id == R.id.tv_home_taolun) { + if (taolunBean == null) { + ToastUtil.showMessage("数据异常,请到病例交流去查看"); + return; + } + Intent taolunintent = new Intent(mActivity, + CaseCussionDetailActivity.class); + taolunintent.putExtra("uuid", taolunBean.getArticle_uuid()); + startActivity(taolunintent); + } else if (id == R.id.tv_home_huodong) { + if (huodongBean == null) { + ToastUtil.showMessage("数据异常,请稍候刷新在查看"); + return; + } + Intent huodongintent = new Intent(mActivity, + GDEventDetailTopActivity.class); + huodongintent.putExtra("uuid", huodongBean.getArticle_uuid()); + huodongintent.putExtra("url", urlHtml + huodongBean.getPath()); + huodongintent.putExtra("newsTitle", huodongBean.getTitle()); + huodongintent.putExtra("summary", "肝胆活动"); + huodongintent.putExtra("imageUrl", + urlHtml + huodongBean.getImage()); + huodongintent.setType("event"); + startActivity(huodongintent); + } else if (id == R.id.iv_home_zhibo) { + MainActivity activity = (MainActivity) getActivity(); + activity.mRb_meeting.setChecked(true); + } else if (id == R.id.iv_home_taolun) { + startActivity(new Intent(mActivity, CasediscussionActivity.class)); + } else if (id == R.id.iv_home_huodong) { + startActivity(new Intent(mActivity, GanDanEventActivity.class)); + } else if (id == R.id.iv_home_video) { + startActivity(new Intent(mActivity, VideoActivity.class)); + } else if (id == R.id.iv_rmoocimg1) { + +// startActivity(new Intent(mainActivity, AccumulatePointsActivity.class)); + + if (!TextUtils.isEmpty(moocurl1)) { + Intent intent3 = new Intent(mActivity, MoocimglActivity.class); + intent3.putExtra("moocurl", moocurl1); + startActivity(intent3); + } + } else if (id == R.id.iv_rmoocimg2) { + if (!TextUtils.isEmpty(moocurl2)) { + Intent intent23 = new Intent(mActivity, MoocimglActivity.class); + intent23.putExtra("moocurl", moocurl2); + startActivity(intent23); +// Intent intent23 = new Intent(UIUtils.getContext(), +// AdvertActivity.class); +// intent23.putExtra("patientmoocurlStr",moocurl2); +// +// // ToastUtil.showMessage("patientmoocurlStr"+patientmoocurlStr); +// startActivity(intent23); + } + } else if (id == R.id.iv_rmoocimg3) { + if (!TextUtils.isEmpty(moocurl3)) { + Intent intent33 = new Intent(mActivity, MoocimglActivity.class); + intent33.putExtra("moocurl", moocurl3); + startActivity(intent33); + } + } else if (id == R.id.iv_rmoocimg4) { + if (!TextUtils.isEmpty(moocurl4)) { + Intent intent43 = new Intent(mActivity, MoocimglActivity.class); + intent43.putExtra("moocurl", moocurl4); + startActivity(intent43); + } + } else if (id == R.id.ll_my_college) {//肝胆时讯 +// startActivity(new Intent(mActivity, GDLiveBroadcastActivity.class)); +// startActivity(new Intent(mActivity, GandanConsultActivity.class)); + MyUserIconUtil.myIntent(mActivity,name1); + } else if (id == R.id.ll_my_hospital) {//更多 +// startActivity(new Intent(mActivity, GanDanHospitalActivity.class)); + startActivityForResult(new Intent(mActivity, MyUserIconActivity.class),MYUSERICON); + } else if (id == R.id.ll_my_testing) { + // 肝病检测 +// startActivity(new Intent(mActivity, TestingActivity.class)); + MyUserIconUtil.myIntent(mActivity,name2); + } else if (id == R.id.pic) { + if (!UIUtils.isNetWorkConnected(getActivity())) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + return; + } + startActivity(new Intent(mActivity, MyDetailInfoActivity.class)); + } else if (id == R.id.bt_navi) { + // 快速导航 + Intent intentNavi=new Intent(mActivity, NavigationActivity.class); + startActivity(intentNavi); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + LogUtil.i("requestCode = "+requestCode); + LogUtil.i("resultCode = "+resultCode); + + if (requestCode == 0xa) { + if (data == null) { + return; + } + } else if (resultCode != Activity.RESULT_OK) { + LogUtil.d("onActivityResult: bail due to resultCode=" + resultCode); + return; + } + if (requestCode == 0xa) { + String result_data = data.getStringExtra("result_data"); + if (TextUtils.isEmpty(result_data) + || result_data.trim().length() == 0) { + ToastUtil.showToast(getResources().getString( + R.string.mobile_list_empty)); + return; + } + CCPAppManager.startChattingAction(HomeFragment.this.getActivity(), + result_data, result_data, "2,1,2,0", null, true, 0); + } + + } + + private String applyListUrl = Url.getapplyList; + + @Override + public void onResume() { + // WordLight(); + super.onResume(); + + String newsuuid = SharePrefUtil + .getString(mActivity, "callnewsUuid", ""); + if (bean != null) { + if (!newsuuid.equals("")) { + for (int i = 0; i < bean.data.size(); i++) { + if (bean.data.get(i).getUuid().equals(newsuuid)) { + + bean.data.get(i).setReadnum(SharePrefUtil.getString(mActivity, + "callnewsread", "")); + bean.data.get(i).setAgreenum(SharePrefUtil.getString(mActivity, + "callnewsagree", "")); + } + } + } + } + SharePrefUtil.clear(mActivity, "callnewsUuid"); +// getScienceList(); + getNewtroll(); +// showRedUnCount(); + getNewPatientList(applyListUrl); + getNewPublic(); + getWelfareNotice(); + if (mViewPager != null && isStop) { + mViewPager.startRoll(); + } + + + } + private void getWelfareNotice() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getWelfareNotice,map,GETWELFARENOTICE,this); + } + private void getNewtroll() { + // TODO Auto-generated method stub + Map param = new HashMap(); + param.put("uuid", ExpertUuid); + Log.i("TAG", "user_uuid = "+ExpertUuid); + Log.i("TAG", "Url= "+Url.expertrollNew); + sendJsonPostParamtoNetSignMD5(Url.expertrollNew, param, 1, this); + + } + + boolean isStop = false; + + private HttpHandler httpHandler; + + /** + * 请求服务器。列表数据 getPatientList + * + * @param + * + * @param + */ + + public void getNewPublic() { + + // 封装参数 + RequestParams params = new RequestParams(); + // 判断是否是公益咨询列表还是抢答公益咨询,page = 0表示是抢答的接口 + + params.addBodyParameter("expertUuid", ExpertUuid); + params.addBodyParameter("page", 1 + ""); + + httpHandler = HttpHelper.loadData(HttpMethod.POST, + Url.getnewConsultList, params, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + ConsultListBean bean = GsonTools.fromGsonToBean( + info.result, ConsultListBean.class); +// if (bean != null && bean.data != null +// && bean.data.size() > 0) { +// if (badgePublicMsg != null) { +// badgePublicMsg.show(); +// } +// } else { +// if (badgePublicMsg != null) { +// badgePublicMsg.hide(); +// } +// } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + + } + }); + + } + + private boolean isHaveMessage = false; + private boolean isHaveNewPer = false; + + public void showRedUnCount() { + // 后面放消息红点,应放在我的患者的,进口出,显示红点,或者底部导航 + OnUpdateMsgUnreadCounts(); + + } + /** + * 注册未读消息数量观察者 + */ + private void registerMsgUnreadInfoObserver(boolean register) { + if (register) { + ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback(){ + + @Override + public void onUnreadNumChanged(ReminderItem item) { + showRedUnCount(); + } + }); + } else { + ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback(){ + + @Override + public void onUnreadNumChanged(ReminderItem item) { + + } + }); + } + } + private void registerCustomMessageObservers(boolean register) { + NIMClient.getService(MsgServiceObserve.class).observeCustomNotification( + customNotificationObserver, register); + } + + Observer customNotificationObserver = (Observer) notification -> { + +// // 处理自定义通知消息 +// Notification notification1 = new NotificationCompat.Builder(getActivity(),"随访消息") +// .setAutoCancel(true) +// .setContentTitle(notification.getFromAccount()) +// .setContentText(notification.getContent()) +// .setWhen(System.currentTimeMillis()) +// .setSmallIcon(R.drawable.ic_launcher) +// //设置红色 +//// .setColor(Color.parseColor("#F00606")) +// .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)) +//// .setContentIntent(pendingIntent) +// .build(); +// ((NotificationManager)getActivity().getSystemService(Context.NOTIFICATION_SERVICE)).notify(55, notification1); + showRedUnCount(); + + + }; + + /** + * 注册/注销系统消息未读数变化 + */ + private void registerSystemMessageObservers(boolean register) { + NIMClient.getService(SystemMessageObserver.class).observeUnreadCountChange( + sysMsgUnreadCountChangedObserver, register); + } + private Observer sysMsgUnreadCountChangedObserver = (Observer) unreadCount -> { + showRedUnCount(); +// SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unreadCount); +// ReminderManager.getInstance().updateContactUnreadNum(unreadCount); + }; + private void registerObservers(boolean register) + { + MsgServiceObserve service = NIMClient.getService(MsgServiceObserve.class); + service.observeReceiveMessage(messageReceiverObserver, register); + service.observeRecentContact(messageObserver, register); + } + private Observer> messageReceiverObserver = new Observer>() { + + @Override + public void onEvent(List imMessages) { + showRedUnCount(); + } + }; + + Observer> messageObserver = new Observer>() { + + @Override + public void onEvent(List recentContacts) { + + showRedUnCount(); + } + }; + + /** + * 显示是否有新的患者申请红点提示 + */ + public void showNewPatientRed() { + if (badgePatienMsg != null) { + if (count > 0) { + isHaveNewPer = true; + badgePatienMsg.show(); + iv_new_patient.setVisibility(View.VISIBLE); + } else { + if (!isHaveMessage) { + badgePatienMsg.hide(); + iv_new_patient.setVisibility(View.GONE); + } + + } + } + } + + @Override + public void onStop() { + // TODO Auto-generated method stub + isStop = true; + if (mViewPager != null) { + mViewPager.stopRunning(); + } + super.onStop(); + } + + /** + * 统计未读消息数,以后要区分我的患者,朋友圈,公益咨询,这个有点复杂 OnUpdateMsgUnreadCounts + * + * void + */ + public void OnUpdateMsgUnreadCounts() { + requestSystemMessageUnreadCount(); + + // int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); + // int notifyUnreadCount = IMessageSqlManager.getUnNotifyUnreadCount(); +// int consultUnreadCount = IMessageSqlManager +// .getUnByTypeUnreadCount(Constant.typeConsult); +// int patientUnreadCount = IMessageSqlManager +// .getUnByTypeUnreadCount(Constant.typePatient); +// int patientConsultUnreadCount = IMessageSqlManager +// .getUnByTypeUnreadCount(Constant.typePatientConsult); + // if (unreadCount >= notifyUnreadCount) { +// patientCount = patientUnreadCount + patientConsultUnreadCount; +// +// consultCount = consultUnreadCount; + + + LogUtil.i("consultCount = "+consultCount+",patientCount = "+patientCount); + } + /** + * 查询系统消息未读数 + */ + private void requestSystemMessageUnreadCount() { +// List types = new ArrayList<>(); +// types.add(SystemMessageType.AddFriend); +// +// // 将“添加好友”类型的系统通知设为已读 +// NIMClient.getService(SystemMessageService.class).resetSystemMessageUnreadCountByType(types); +// patientCount =SystemMessageUnreadManager.getInstance().getSysMsgUnreadCount(); + patientCount =NIMClient.getService(MsgService.class).getTotalUnreadCount(); + consultCount =0; + NIMClient.getService(MsgService.class).queryRecentContacts() + .setCallback(new RequestCallbackWrapper>() { + @Override + public void onResult(int code, List recents, Throwable e) { + // recents参数即为最近联系人列表(最近会话列表) + if (code != ResponseCode.RES_SUCCESS || recents == null) { + + } + else + { + Iterator it = recents.iterator(); + while (it.hasNext()) { + RecentContact loadedRecent = it.next(); + if(loadedRecent.getUnreadCount()>0) + { + + if (!PatientSqlManager.isPatient(Constant.Patient_AppKey + loadedRecent.getContactId())) + { + consultCount = loadedRecent.getUnreadCount(); + patientCount=patientCount-loadedRecent.getUnreadCount(); + } + } + + + } + } + + if (badgePatienMsg != null) { + if (patientCount < 1) { + if (!isHaveNewPer) { + badgePatienMsg.hide(); + + } + + } else { + isHaveMessage = true; + badgePatienMsg.show(); + + } + } + if (badgePublicServiceMsg != null) { + if (consultCount<1) { + badgePublicServiceMsg.hide(); + } else { + badgePublicServiceMsg.show(); + } + } + } + }); + + /** + * 查询指定类型的系统通知未读数总和 + * + * @param types 系统通知类型集合 + * @return 指定类型的系统通知未读数总和 + */ +// public int querySystemMessageUnreadCountByType(List types); + + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + } + }; + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + String uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + HttpHandler httpHandlerNewPatient = HttpHelper.loadData( + HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(MyPatientActivity.this, + // loadUrl,info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // SharePrefUtil.saveString(mActivity, loadUrl,""); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + int count = 0; + + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + count = 0; + // 数据为空 + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + + showNewPatientRed(); + + } + private HomeModalBean homeModalBean; + + //分享 + private String url = "https://www.baidu.com/"; + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + switch (resultCode) { + case GETHOMEMODAL: + + Gson gson1=new Gson(); + homeModalBean=gson1.fromJson(resultJson, HomeModalBean.class); + if(homeModalBean!=null) + { + if(homeModalBean.getData()!=null) + { + if(!StringUtil.isEmpty(homeModalBean.getData().getImg())) + { + ImageLoader + .getInstance() + .displayImage( + urlHtml+homeModalBean.getData().getImg(), + home_modal, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); +// Calendar calendar = Calendar.getInstance(); +// int day = calendar.get(Calendar.DAY_OF_MONTH); +// int getday=SharePrefUtil.getInt(mActivity, "home_modal", -1);每天弹一次 + if(!ismodalshownow) + { + +// SharePrefUtil.saveInt(mActivity, "home_modal", day); + close_modal.setVisibility(View.VISIBLE); + home_modal.setVisibility(View.VISIBLE); + home_modal_1.setVisibility(View.VISIBLE); + ismodalshow=true; + ismodalshownow=true; + + home_modal_1.setClickable(true); + + + + + } + else + { + ismodalshow=false; + } + + + } + + } + } + break; + case GETWELFARENOTICE: + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))) { + receive_notice = jsonObject.optBoolean("receive_notice");//有福利待领取情况 + if (receive_notice) { + if("我的福利".equals(name2)&&receive_notice&&badgeWelfarerMsg!=null) + { + badgeWelfarerMsg.show(); + } + else if("我的福利".equals(name1)&&receive_notice&&badgeWelfarerMsg!=null) + { + badgeWelfarelMsg.show(); + } + } + else + { + if(badgeWelfarerMsg!=null) + { + badgeWelfarerMsg.hide(); + badgeWelfarelMsg.hide(); + } + + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case GETUSERICON: + LogUtils.e("GETUSERICON = "+resultJson); + GetUserIconBean getUserIconBean = GsonTools.fromGsonToBean(resultJson, GetUserIconBean.class); + if (getUserIconBean!=null&&"200".equals(getUserIconBean.getCode())){ + for (int i = 0;i0){ + name1 = list.get(0).getName(); + tv_text1.setText(name1); + if("我的福利".equals(name1)&&receive_notice&&badgeWelfarerMsg!=null) + { + badgeWelfarelMsg.show(); + } + Bitmap discCacheImage = getDiscCacheImage(urlHtml + list.get(0).getImg()); + if (discCacheImage!=null){ + LogUtil.i("discCacheImage"); + iv_home1.setImageBitmap(discCacheImage); + }else { + ImageLoader.getInstance().displayImage( + urlHtml + list.get(0).getImg(), + iv_home1,ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } + + + } + if(list.size()>1){ + name2 = list.get(1).getName(); + tv_text2.setText(name2); + + Bitmap discCacheImage = getDiscCacheImage(urlHtml + list.get(1).getImg()); + if (discCacheImage!=null){ + iv_home2.setImageBitmap(discCacheImage); + }else { + ImageLoader.getInstance().displayImage( + urlHtml + list.get(1).getImg(), + iv_home2,ImageOptions.getImageOptions(R.drawable.default_news_iv)); + } + if("我的福利".equals(name2)&&receive_notice&&badgeWelfarerMsg!=null) + { + badgeWelfarerMsg.show(); + } + + } + + } + break; + case URL_PATH: + LogUtil.i("URL_PATH = "+resultJson); + ZengshuBean zengshuBean = GsonTools.fromGsonToBean(resultJson, ZengshuBean.class); + showFuliZengshuDailog(zengshuBean); + break; + case GETAPPACTIVITY: + LogUtil.i("GETAPPACTIVITY = "+resultJson); + GetAppActivityBean bean1 = GsonTools.fromGsonToBean(resultJson, GetAppActivityBean.class); + GetAppActivityBean.DataBean data = bean1.getData(); + if (data!=null&&"200".equals(bean1.getCode())){ + ImageLoader.getInstance().displayImage( + urlHtml + data.getImg(), + bt_fuilzengshu + ); + bt_fuilzengshu.setVisibility(View.VISIBLE); + form = data.getForm(); + url_path = data.getUrl_path(); + zengshuName = data.getName(); + Constant.from = form; + Constant.url_path = url_path; + Constant.zengshuName = zengshuName; + Constant.Img = data.getImg(); + } + break; + case 1: + Log.i("resultJson", "resultJson = "+resultJson); + processData1(resultJson); + break; + + case 2: + SharePrefUtil.saveString(mActivity,Url.getnewsRollIndexNew, resultJson); + if (mViewPager != null) { + mViewPager.stopRunning(); + } + GetTopViewSp(resultJson); + break; + case HERO2019: + LogUtil.i("HERO2019 = "+resultJson); + HeroBean heroBean = GsonTools.fromGsonToBean(resultJson, HeroBean.class); + Constant.HERO2019 = heroBean.getData().getStatus(); + Constant.HERO2019url_path = heroBean.getData().getUrl_path(); + if (Constant.HERO2019==1){ + bt_yingxiongbang.setVisibility(View.VISIBLE); + }else { + bt_yingxiongbang.setVisibility(View.GONE); + } + + break; + } + + } + +// // 返回键按下时会被调用   +// public boolean onKeyDown(int keyCode, KeyEvent event){ +// if(keyCode == event.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){ +// closeProgressDialog(); +// return true; +// } +// return false; +// } + + + public static Bitmap getDiscCacheImage(String uri){//这里的uri一般就是图片网址 + Bitmap bitmap = ImageLoader.getInstance().getMemoryCache().get(uri); + try { + if (bitmap == null) { + String path = ImageLoader.getInstance().getDiskCache().get(uri).getPath(); + if (!TextUtils.isEmpty(path)) { + bitmap = BitmapFactory.decodeFile(path); + } + } + return bitmap; + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + + + return null; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeNewFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeNewFragment.java new file mode 100644 index 0000000..ce837d9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HomeNewFragment.java @@ -0,0 +1,2098 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static android.content.Context.MODE_PRIVATE; +import static com.taobao.accs.ACCSManager.mContext; +import static cn.shangyu.gdxzExpert.activity.MainActivity.GETWELFARENOTICE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_CLASS_QUALITY; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_CLASS_QUALITY_MORE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_COURSEWARE_MORE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_GUIDE_MORE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_ICON_CLASS_QUALITY; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_ICON_COURSEWARE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_MEETING; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_PLAYBACK; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_PLAYBACK_MORE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_PROJECT; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_PROJECT_CHANGE; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_HOME_SHUFFLING; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_HOME_STAY; +import static cn.shangyu.gdxzExpert.utils.UIUtils.isBackground; +import static cn.shangyu.gdxzExpert.utils.Url.getapplyList; +import static cn.shangyu.gdxzExpert.utils.Url.unReadList; +import static cn.shangyu.gdxzExpert.utils.Url.urlHtml; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.GridLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.RequiresApi; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.gongwen.marqueen.MarqueeFactory; +import com.gongwen.marqueen.MarqueeView; +import com.gongwen.marqueen.util.OnItemClickListener; +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.SystemMessageObserver; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.stx.xhb.androidx.XBanner; +import com.tencent.mm.opensdk.modelbiz.WXOpenCustomerServiceChat; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CourseActivity; +import cn.shangyu.gdxzExpert.activity.CoursewareActivity; +import cn.shangyu.gdxzExpert.activity.HeroListActivity; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.MyLibraryActivity; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.MyUserIconActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.activity.ZhiBoActivity; +import cn.shangyu.gdxzExpert.adapter.CellAdapter; +import cn.shangyu.gdxzExpert.adapter.ComplexViewMF; +import cn.shangyu.gdxzExpert.adapter.JingAdapter; +import cn.shangyu.gdxzExpert.adapter.KejianAdapter; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CustomViewsInfo; +import cn.shangyu.gdxzExpert.bean.GetAppActivityBean; +import cn.shangyu.gdxzExpert.bean.HeroBean; +import cn.shangyu.gdxzExpert.bean.HomeBean; +import cn.shangyu.gdxzExpert.bean.HomeModalBean; +import cn.shangyu.gdxzExpert.bean.MessageNumBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.ZengshuBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.main.ReminderItem; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.DestroyActivityUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.MyUserIconUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.NormalItemView; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.view.pullable.PullableScrollView; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; +import io.dcloud.feature.sdk.DCSDKInitConfig; +import io.dcloud.feature.sdk.DCUniMPSDK; +import io.dcloud.feature.sdk.Interface.IUniMP; +import io.dcloud.feature.sdk.MenuActionSheetItem; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.PageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +public class HomeNewFragment extends BaseFragment implements OnClickListener,OnCallBackFromNet, OnCallBackFromActivity { + + public static final int GETHOMEMODAL = 333; + private View view; + private BadgeView badgePatienMsg; + + private ImageView iv_my_patient; + + PullableScrollView sv_pull; + private static HomeNewFragment instance; + String ExpertUuid; + private MainActivity mainActivity; + + public static final int HERO2019= 2019; + public static final int GETAPPACTIVITY= 200; + public static final int URL_PATH= 222; +// public static final int GETUSERICON= 223; + private Button bt_yingxiongbang; + private ImageView bt_fuilzengshu; + private HttpHelper.HttpResult httpResult; + private ImageView home_modal,close_modal,home_modal_1; + public static Boolean ismodalshow =false; + public static Boolean ismodalshownow =false; + RecyclerView recycler_jin,recycler_kejian,home_rv;//精品课,课件分享,八宫格 + GridLayout grid_layout;//精彩回放 + JingAdapter jingAdapter;//精品课 + KejianAdapter kejianAdapter; + CellAdapter cellAdapter;//八宫格 + List imageViewList=new ArrayList<>(); + private ImageView im_1,im_2,im_3;//专题E站 + List esite_list=new ArrayList<>(); + int huan=0; + RelativeLayout more,more1,more2,more3; + Boolean isfirst=true; + Boolean isscoll=false; + MarqueeView marqueeView;//直播 + @SuppressLint("HandlerLeak") + Handler mHandler1 = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + String s = DateUtil.timestamp2Date(resultData, "yyyy-MM-dd"); + boolean dateOneBigger = true; +// boolean isganyan = DateUtil.isDateOneBigger(s, "2020-03-21");//20号显示 + if (dateOneBigger){ + Constant.IV_5ZHE = 1; + } + + } + }; + }; + private int form;//赠书活动,1:1web_view 2原生弹框 + private String url_path;//赠书活动内容接口 + private String zengshuName; + + public final static int MYUSERICON = 2222; + private String name1,name3; + private String img1; + private String img2,img3; + private String name2; + private static Boolean receive_notice=false; + private LocalBroadcastManager localBroadcastManager1; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + XBanner banner;//轮播图 + RelativeLayout r_banner; + PageNavigationView tab; + private NavigationController navigationController; + private String colortop=""; + RelativeLayout r_ezhan,r_jingpin; + LinearLayout l_change; + RelativeLayout r_huifang,r_r_huifang,r_kejian; + private MessageNumBean messageNumBean; + ImageView fl; + public static HomeNewFragment getInstance() { + return instance; + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + instance = this; + mainActivity = (MainActivity) getActivity(); +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) mainActivity.layout.getLayoutParams(); + p.setMargins(0,0, 0, 0); + mainActivity.layout.requestLayout(); + view = UIUtils.inflate(R.layout.fragment_home_new); + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = view.findViewById(R.id.ll_load_progress); + tv_load_fail = view.findViewById(R.id.tv_load_fail); + r_banner=view.findViewById(R.id.r_banner); + isfirst=true; + r_ezhan=view.findViewById(R.id.r_ezhan); + r_jingpin=view.findViewById(R.id.r_jingpin); + l_change=view.findViewById(R.id.l_change); + r_huifang=view.findViewById(R.id.r_huifang); + r_kejian=view.findViewById(R.id.r_kejian); + r_r_huifang=view.findViewById(R.id.r_r_huifang); + banner = view.findViewById(R.id.banner); + marqueeView=view.findViewById(R.id.marqueeView); + sv_pull = (PullableScrollView) view.findViewById(R.id.sv_pull); + home_rv=view.findViewById(R.id.home_rv); + home_rv.setLayoutManager(new GridLayoutManager(getActivity(), 4, LinearLayoutManager.VERTICAL, false)); + recycler_jin=view.findViewById(R.id.recycler_jin); + recycler_kejian=view.findViewById(R.id.recycler_kejian); + tab= view.findViewById(R.id.tab); + grid_layout=view.findViewById(R.id.grid_layout); + im_1=view.findViewById(R.id.im_1); + im_2=view.findViewById(R.id.im_2); + im_3=view.findViewById(R.id.im_3); + more=view.findViewById(R.id.more); + more1=view.findViewById(R.id.more1); + more2=view.findViewById(R.id.more2); + more3=view.findViewById(R.id.more3); + im_1.setOnClickListener(this); + im_2.setOnClickListener(this); + im_3.setOnClickListener(this); + more.setOnClickListener(this); + more1.setOnClickListener(this); + more2.setOnClickListener(this); + more3.setOnClickListener(this); + imageViewList.clear(); + imageViewList.add(im_1); + imageViewList.add(im_2); + imageViewList.add(im_3); + home_modal =view.findViewById(R.id.home_modal); + close_modal =view.findViewById(R.id.close_modal); + home_modal_1=view.findViewById(R.id.home_modal_1); + + // 患者提醒 + iv_my_patient = (ImageView) view.findViewById(R.id.iv_my_patient); + badgePatienMsg = new BadgeView(mActivity, iv_my_patient); + badgePatienMsg.setBackgroundResource(R.drawable.unread_dot); + badgePatienMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + + fl=view.findViewById(R.id.fl); + fl.setOnClickListener(this); + + bt_yingxiongbang = view.findViewById(R.id.bt_yingxiongbang); + bt_fuilzengshu = view.findViewById(R.id.bt_fuilzengshu); + + localBroadcastManager1 = LocalBroadcastManager.getInstance(getActivity()); + intentFilter = new IntentFilter(); + intentFilter.addAction("MyUserIconActivity"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager1.registerReceiver(localReceiver,intentFilter); + is5zhe(); + bt_yingxiongbang.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intentgandanxyb = new Intent(mActivity, HeroListActivity.class); + mActivity.startActivity(intentgandanxyb); + } + }); + bt_fuilzengshu.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if (form==2){ + getUrl_path(); + }else { + + Intent intent =new Intent(getActivity(),NewsDetailActivity.class); + intent.putExtra("url",url_path); + intent.putExtra("title",zengshuName); + intent.putExtra("flag",1); + intent.putExtra("need_back",true); + intent.putExtra("summary","肝胆相照®肝胆病在线公共服务平台"); + startActivity(intent); + } + + } + }); + initKejian(); + initData(); + + + DestroyActivityUtil.destoryActivity("LoginActivity"); + getZengshuInfo(); +// getUserIcon(); + registerMsgUnreadInfoObserver(true); + registerSystemMessageObservers(true); + registerObservers(true); +/** + * 创建消息渠道 + * */ + +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { +// try { +// NotificationManager notificationManager = (NotificationManager)getActivity(). getSystemService(Context.NOTIFICATION_SERVICE); +// String channelId1 = "随访消息"; +// String channelName1 = "随访消息"; +// int importance1 = NotificationManager.IMPORTANCE_HIGH; +// NotificationChannel channel1 = new NotificationChannel(channelId1, channelName1, importance1); +// +// notificationManager.createNotificationChannel(channel1); +// }catch (Exception e){ +// +// } +// +// } + +// showRedUnCount(); + InitLisenter(); + getHomeModal(); + + return view; + } + private void initKejian() + { + + LinearLayoutManager linearLayoutManagerv = new LinearLayoutManager(getActivity()); + linearLayoutManagerv.setOrientation(LinearLayoutManager.HORIZONTAL); + recycler_jin.setLayoutManager(linearLayoutManagerv); + + + //注意这里调用了custom()方法 + navigationController = tab.custom() + .addItem(newItem("实用指南")) + .addItem(newItem("课件分享")) + .build(); + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + + // 选中时触发 + if(index==0) + { + kejianlist.clear(); + kejianlist.addAll(guide_ist); + kejianAdapter.setGuide(true); + } + else + { + kejianlist.clear(); + kejianlist.addAll(gandanfile_list); + kejianAdapter.setGuide(false); + } + kejianAdapter.notifyDataSetChanged(); + } + }); + + + //设置item间距,30dp + recycler_jin.addItemDecoration(new SpaceItemDecoration(15,0)); + + LinearLayoutManager linearLayoutManagerv1 = new LinearLayoutManager(getActivity()); + linearLayoutManagerv1.setOrientation(LinearLayoutManager.VERTICAL); + recycler_kejian.setLayoutManager(linearLayoutManagerv1); + recycler_kejian.addItemDecoration(new SpaceItemDecoration(0,10)); + + } + //创建一个Item + private BaseTabItem newItem(String text){ + NormalItemView normalItemView = new NormalItemView(getActivity()); + normalItemView.initialize(text); + return normalItemView; + } + + @RequiresApi(api = Build.VERSION_CODES.N) + private void initzhibo() + { + if(mettingBeans==null||mettingBeans.size()<1) + { + marqueeView.setVisibility(View.GONE); + return; + } + HomeBean.MettingBean mettingBeanicon=mettingBeans.stream() + .filter(customer -> "1".equals(customer.getState())||"2".equals(customer.getState())) + .findAny() + .orElse(null); + if(mettingBeanicon==null) + { + marqueeView.setVisibility(View.GONE); + return; + } + mettingBeansNew.clear(); + Boolean hastoday=false; + + + for(HomeBean.MettingBean mettingBean :mettingBeans) + { + if("1".equals(mettingBean.getState())||"2".equals(mettingBean.getState())) + { + mettingBeansNew.add(mettingBean); +// if(hastoday)原来的逻辑 +// { +// if(isSameDay(new Date(Long.valueOf(mettingBean.getBegin_date_timestamp())), +// new Date(System.currentTimeMillis()))) +// { +// +// mettingBeansNew.add(mettingBean); +// } +// } +// else +// { +// if(isSameDay(new Date(Long.valueOf(mettingBean.getBegin_date_timestamp())), +// new Date(System.currentTimeMillis()))) +// { +// hastoday=true; +// mettingBeansNew.clear(); +// +// } +// mettingBeansNew.add(mettingBean); +// } + + + } + + } + + marqueeView.setVisibility(View.VISIBLE); + MarqueeFactory marqueeFactory = new ComplexViewMF(getActivity()); + marqueeFactory.setData(mettingBeansNew); + marqueeView.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClickListener(RelativeLayout mView, HomeBean.MettingBean mData, int mPosition) { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_MEETING); + Intent intent = new Intent(mActivity, ZhiBoActivity.class); + intent.putExtra("newsTitle", mData.getTitle()); + intent.putExtra("url",mData.getLiveurl()) ; + intent.putExtra("summary", mData.getTitle()); + intent.setType("zhibo"); + startActivity(intent); + } + }); +// marqueeView4.setInAndOutAnim(R.anim.in_top, R.anim.out_bottom); + marqueeView.setMarqueeFactory(marqueeFactory); + marqueeView.startFlipping(); + } + /** + * 精彩回放 + * @param video_list + */ + private void initHuiFang(List video_list) + { + r_r_huifang.setVisibility(View.VISIBLE); + r_huifang.setVisibility(View.VISIBLE); + grid_layout.removeAllViews(); + if(video_list==null||video_list.size()<1) + { + r_r_huifang.setVisibility(View.GONE); + r_huifang.setVisibility(View.GONE); + return; + } + int size=0; + if(video_list.size()<5) + { + grid_layout.setRowCount((int) Math.ceil(video_list.size()/2)); + size=video_list.size(); + } + else + { + grid_layout.setRowCount(2); + size=4; + } + grid_layout.setColumnCount(2); + for (int i = 0; i < size; i++) { +// for (int j = 0; j < 2; j++) { + View view1 = UIUtils.inflate(R.layout.hui_item); + RelativeLayout r_c=view1.findViewById(R.id.r_c); + RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams((int) ((getResources().getDisplayMetrics().widthPixels- CommonUtil.dip2px(getActivity(), 15) ) / 2f), + ViewGroup.LayoutParams.MATCH_PARENT); + r_c.setLayoutParams(params1); + ImageView im_c=view1.findViewById(R.id.im_c); + TextView tv_n=view1.findViewById(R.id.tv_n); + tv_n.setText(video_list.get(i).getName()); + Glide.with(getActivity()).asBitmap().load(video_list.get(i).getImgpath()) + .into(im_c); + int finalI = i; + view1.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_PLAYBACK); + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(mActivity, VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + intent.putExtra("startNow", false); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("url", video_list.get(finalI).getPolyv_uuid()); + intent.putExtra("uuid", video_list.get(finalI).getUuid()); + intent.putExtra("note", video_list.get(finalI).getName()); + intent.putExtra("title", video_list.get(finalI).getName()); + intent.putExtra("readnum",""); + intent.putExtra("imgpath", video_list.get(finalI).getImgpath()); + intent.putExtra("public_name",video_list.get(finalI).getName()); + startActivity(intent); + } + }); + //设置它的行 和 权重 有了权重才能水平均匀分布 +// //由于方法重载,注意这个地方的1.0f 必须是float, +// GridLayout.Spec rowSpec = GridLayout.spec(i, 1.0f); +// GridLayout.Spec columnSpec = GridLayout.spec(j, 1.0f); +// GridLayout.LayoutParams params = new GridLayout.LayoutParams(); +// //左边的靠左,右边的靠右,中间的居中,默认居中 +// switch (i%2) { +// case 0: +// params.setGravity(Gravity.LEFT); +// break; +// case 1: +// params.setGravity(Gravity.RIGHT); +// break; +// case 2: +// params.setGravity(Gravity.RIGHT); +// break; +// default: +// params.setGravity(Gravity.CENTER); +//// break; +// } +// view1.setLayoutParams(params); + grid_layout.addView(view1); +// } + } + + } + + List>lists=new ArrayList<>(); + /** + * 专题E站 换一换 + * @param esite_list + */ + private void initchangeE(List esite_list) + { + lists.clear(); + List temlist=new ArrayList<>(); + temlist.clear(); + r_ezhan.setVisibility(View.VISIBLE); + l_change.setVisibility(View.VISIBLE); + if(esite_list==null||esite_list.size()<1) + { + l_change.setVisibility(View.GONE); + r_ezhan.setVisibility(View.GONE); + return; + } + if(esite_list.size()>3) + { + more.setVisibility(View.VISIBLE); + switch (esite_list.size()%3) + { + case 0: + initlist(); + break; + case 1: + initlist(); + temlist.add(esite_list.get(esite_list.size()-1)); + temlist.add(esite_list.get(0)); + temlist.add(esite_list.get(1)); + lists.add(temlist); + break; + case 2: + initlist(); + temlist.add(esite_list.get(esite_list.size()-2)); + temlist.add(esite_list.get(esite_list.size()-1)); + temlist.add(esite_list.get(0)); + lists.add(temlist); + break; + } + changeEsite(); + } + else + { + more.setVisibility(View.GONE); + lists.add(esite_list); + im_1.setVisibility(View.GONE); + im_2.setVisibility(View.GONE); + im_3.setVisibility(View.GONE); + for(int i=0;i list=new ArrayList<>(); + for (;i<=esite_list.size();i++) + { + list.add(esite_list.get(i-1)); + if(i%3==0) + { + i++; + break; + } + } + lists.add(list); + } + } + + /** + * 轮播图 + */ + private void initBanner( List datas) + { + List data = new ArrayList<>(); + for (HomeBean.NewsBean bean:datas) + { + data.add(new CustomViewsInfo(bean)); + } + + if(data.size()==1) + { + banner.setPointsIsVisible(false); + } + else + { + + banner.setPointsIsVisible(true); + } + String realName = SharePrefUtil.getString(mActivity, "realName", null); + + banner.setBannerData(R.layout.home_guanggao, data); + banner.loadImage(new XBanner.XBannerAdapter() { + @Override + public void loadBanner(XBanner banner, Object model, View view, int position) { + TextView mIv_name = view.findViewById(R.id.doctor_name); + TextView mIv_positionName = view.findViewById(R.id.positionName); + ImageView im_gg=view.findViewById(R.id.im_gg); + if(position==0) + { + +// //得到AssetManager +// AssetManager mgr=getActivity().getAssets(); +// //根据路径得到Typeface +// Typeface tf=Typeface.createFromAsset(mgr, "SourceHanSansCN-Medium.otf"); +// mIv_name.setTypeface(tf); + + String positionName = SharePrefUtil.getString(mActivity, + "hospitalName", null); +// mIv_name.setText("麦麦提图尔洪·阿不都茹苏力专家工作室"); +// String realName = SharePrefUtil.getString(mActivity, "realName", null); + if (realName != null && !"null".equals(realName)) { + mIv_name.setText(realName+"专家工作室"); + + } + + if (positionName != null && !"null".equals(positionName)) { + mIv_positionName.setText(positionName); + } + + mIv_name.setVisibility(View.VISIBLE); + mIv_positionName.setVisibility(View.VISIBLE); + +// Glide.with(getActivity()).asBitmap().load(R.drawable.home_new_bg) +// .into(im_gg); + } + else + { + mIv_name.setVisibility(View.GONE); + mIv_positionName.setVisibility(View.GONE); + + + } + Glide.with(getActivity()).asBitmap().load(((CustomViewsInfo) model).getXBannerUrl()) + .apply(new RequestOptions().error(R.drawable.default_news_iv)) + .into(im_gg); + } + }); + banner.setOnItemClickListener(new XBanner.OnItemClickListener() { + @Override + public void onItemClick(XBanner banner, Object model, View view, int position) { +// reportBean rbens=new reportBean(); +// rbens.setUser_id(Constant.Report_userId); +// rbens.setApp_key(Constant.Repotr_app_key); +// rbens.setOs(CommUtil.Repotr_os); +// rbens.setDevice(CommUtil.getDeviceName()); +// rbens.setDevice_type(CommUtil.getDeviceType()); +// rbens.setApp_version(CommUtil.getVersionName()); +// rbens.setNetwork_carrier(CommUtil.getCarrierName); +// rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); +// rbens.setEvent_nickname("login"); +// rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); +// reportBeans.add(rbens); +// startReport(reportBeans); + + MobclickAgent.onEvent(mainActivity, EXPERT_HOME_SHUFFLING); + if(position==0) + { + startActivity(new Intent(mActivity, MyDetailInfoActivity.class)); + needreportHome("首页",realName+"专家工作室"); + } + else + { + Intent intent =new Intent(getActivity(),NewsDetailActivity.class); + intent.putExtra("url",((CustomViewsInfo) model).getNewsUrl()); + intent.putExtra("newsTitle",((CustomViewsInfo) model).getXBannerTitle()); + intent.putExtra("title", "新闻详情"); + intent.putExtra("flag",1); + intent.putExtra("newsuuid", ((CustomViewsInfo) model).uuid()); + intent.putExtra("summary","肝胆相照®肝胆病在线公共服务平台"); + startActivity(intent); + needreportHome("首页",((CustomViewsInfo) model).getXBannerTitle()); + } +// Toast.makeText(getActivity(), "点击了" + position, Toast.LENGTH_SHORT).show(); + } + }); + } + + @Override + public void getmessage(Boolean receive_notice) { + this.receive_notice=receive_notice; + + } +// +// @Override +// public void onLazyBeforeView() { +// +// } +// +// @Override +// public void onLazyAfterView() { +// +// } +// +// @Override +// public void onVisible() { +// +// } +// +// @Override +// public void onInvisible() { +// +// } +// +// @Override +// public void initImmersionBar() { +//// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true) +//// .titleBar(mainActivity.mToolbar) +////// .statusBarView(top_view1).init() +////// .navigationBarColor(R.color.colorPrimary) +//// .init(); +//// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); +// } +// +// @Override +// public boolean immersionBarEnabled() { +// return true; +// } + + private class LocalReceiver extends BroadcastReceiver { + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onReceive(Context context, Intent intent) { + LogUtil.i("我的应用修改"); + name1 = intent.getStringExtra("name1"); + img1 = intent.getStringExtra("img1"); + name2 = intent.getStringExtra("name2"); + img2 = intent.getStringExtra("img2"); + name3 = intent.getStringExtra("name3"); + img3 = intent.getStringExtra("img3"); + replaceIcon(); + showFuliRed(receive_notice); + + } + } + /** + * 获取动态弹框,如年终总结 + */ + private void getHomeModal() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.homeModalurl,map,GETHOMEMODAL,this); + + + } + private CustomProgressDialog pd; + /** + * 获取新首页数据 + */ + private void getHomeData() { + + showLoadingProgress(); +// showProgressDialog("加载中"); +// pd = new CustomProgressDialog(mainActivity, "请稍候"); +// pd.show(); + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.myHomeNew,map,111,this); +// sendJsonPostParamtoNetSignMD5(unReadList,map,112,this); + + } + public void initMessage() + { + Map map=new HashMap<>(); + sendJsonPostParamtoNetSignMD5(unReadList,map,112,this); + } + + //专家获得动态图标 +// private void getUserIcon() { +// Map map = new HashMap<>(); +// sendJsonPostParamtoNetSignMD5(Url.getUserIcon,map,GETUSERICON,this); +// } + + private void getUrl_path() { + Map map = new HashMap<>(); + LogUtil.i("url_path = "+Url.url_path+url_path); + sendJsonPostParamtoNetSignMD5(Url.url_path+url_path,map,URL_PATH,this); + } + + //福利赠书 + private void getZengshuInfo() { + Map map = new HashMap<>(); + map.put("id","6"); + sendJsonPostParamtoNetSignMD5(Url.getAppActivity,map,GETAPPACTIVITY,this); + } + + private void showFuliZengshuDailog(ZengshuBean bean1) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_fulizengshu, null); + TextView tv_rennum = layout.findViewById(R.id.tv_rennum); + TextView tv_bennum = layout.findViewById(R.id.tv_bennum); + ImageView iv_fuli_close = layout.findViewById(R.id.iv_fuli_close); + Button btn_canyu = layout.findViewById(R.id.btn_canyu); + tv_rennum.setText(bean1.getData().getPatient_num()+""); + tv_bennum.setText(bean1.getData().getBook_num()+""); + final Dialog dialog = new AlertDialog.Builder( + getActivity()).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + iv_fuli_close.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_canyu.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(getActivity(), MyQrCodeActivity.class); + startActivity(intent); + dialog.dismiss(); + } + }); + + } + /** + * 是否显示5折 + * */ + private void is5zhe() { + new Thread(){ + @Override + public void run() { + super.run(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + TimestampBean bean = GsonTools.fromGsonToBean( httpResult.getString(), TimestampBean.class); + Message message = new Message(); + message.what = 200; + message.obj = bean.getTimestamp(); + mHandler1.sendMessage(message); + } + } catch (Exception e) { +// ToastUtil.showMessage("数据异常,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + } + } + }.start(); + } + + public void InitLisenter() { + + mainActivity.mToolbar.getBackground().setAlpha(0); +// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,(int) ((getResources().getDisplayMetrics().widthPixels / 2.1f))); +// r_banner.setLayoutParams(params); + home_modal.setOnClickListener(this); + close_modal.setOnClickListener(this); + sv_pull.setOnScrollChangedListener(new PullableScrollView.OnScrollChangedListener() { + + @Override + public void onScrollChanged(ScrollView who, int l, int t, int oldl, + int oldt) { + // TODO Auto-generated method stub + isscoll=true; + if (banner != null && banner.getHeight() > 0) { + // define it for scroll height + int lHeight = banner.getHeight(); + if (t < lHeight) {// = + int progress = (int) (new Float(t) / new Float(lHeight) * 255);// 255 +// ImmersionBar.with(getActivity()) +// .addViewSupportTransformColor( mainActivity.mToolbar, Color.parseColor(colortop)) +// .barAlpha(progress) +// .init(); + mainActivity.mToolbar.setBackgroundColor(Color.parseColor(colortop)); + mainActivity.mToolbar.getBackground().setAlpha(progress); + } else { + mainActivity.mToolbar.getBackground().setAlpha(255); + } + } + } + }); + + } + + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + registerMsgUnreadInfoObserver(false); + registerSystemMessageObservers(false); + registerObservers(false); + + } + SQLiteDatabase db; + CoursewareBookDownloadSqlManager sq; + private void initData() { + ExpertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + + if(mainActivity!=null) + { + db= mainActivity.openOrCreateDatabase("courseware.db", MODE_PRIVATE, null); + sq = new CoursewareBookDownloadSqlManager(db); + } + + + getHomeData(); + + } + + + private int patientCount = 0; + private int consultCount = 0; + + private void handleLogout(boolean isNotice) { + ToastUtil.showMessage("专家账号信息为空"); + showProgressDialog(getString(R.string.posting_logout)); + /** + * 需要在此判断专家是否登陆,信息是否完整 + * + * */ + startActivity(new Intent(getContext(), LoginNewActivity.class)); + try { + SDKCoreHelper.logout(isNotice); + }catch (Exception e){ + + } + + + + + + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + private void initEzhanWeb(String url) + { +// Intent intent=new Intent(getActivity(), WebActivity.class); +// intent.putExtra("url",url); +// intent.putExtra("title",""); +// intent.putExtra("need_share","1"); +// startActivity(intent); + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_PROJECT); + Intent intent11 = new Intent(mActivity, NewsDetailActivity.class); + intent11.putExtra("url", url); + intent11.putExtra("title","专题e站"); + intent11.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); + intent11.putExtra("flag", 1); + startActivity(intent11); + } + + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.fl) { + // 判断当前版本是否支持拉起客服会话 + openWx(); + } else if (id == R.id.more1) { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_CLASS_QUALITY_MORE); + Intent intent1 = new Intent(mActivity, CourseActivity.class); + startActivity(intent1); + } else if (id == R.id.more2) { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_PLAYBACK_MORE); + Intent intent2 = new Intent(mActivity, VideoActivity.class); + startActivity(intent2); + } else if (id == R.id.more3) { + if(navigationController.getSelected()==0) + { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_GUIDE_MORE); + startActivity(new Intent(mActivity, MyLibraryActivity.class)); + } + else + { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_COURSEWARE_MORE); + startActivity(new Intent(mActivity, CoursewareActivity.class)); + } + } else if (id == R.id.im_1) { + initEzhanWeb(lists.get(huan).get(0).getUrl()); +// Intent intent11 = new Intent(mActivity, NewsDetailActivity.class); +// intent11.putExtra("url", lists.get(huan).get(0).getUrl()); +// intent11.putExtra("title","专题e站"); +// intent11.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); +// intent11.putExtra("flag", 1); +// startActivity(intent11); + } else if (id == R.id.im_2) { + initEzhanWeb(lists.get(huan).get(1).getUrl()); +// Intent intent12 = new Intent(mActivity, NewsDetailActivity.class); +// intent12.putExtra("url", lists.get(huan).get(1).getUrl()); +// intent12.putExtra("title","专题e站"); +// intent12.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); +// intent12.putExtra("flag", 1); +// startActivity(intent12); + } else if (id == R.id.im_3) { + initEzhanWeb(lists.get(huan).get(2).getUrl()); +// Intent intent13 = new Intent(mActivity, NewsDetailActivity.class); +// intent13.putExtra("url", lists.get(huan).get(2).getUrl()); +// intent13.putExtra("title","专题e站"); +// intent13.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); +// intent13.putExtra("flag", 1); +// startActivity(intent13); + } else if (id == R.id.more) { + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_PROJECT_CHANGE); + if(huan httpHandlerNewPatient = HttpHelper.loadData( + HttpRequest.HttpMethod.POST, getapplyList, params, + new RequestCallBack() { + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onSuccess(ResponseInfo info) { + + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + } + }); + } + /** + * 解析并处理数据 + * + * @param result + */ + + @RequiresApi(api = Build.VERSION_CODES.N) + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + int count = 0; + if(bean!=null&&bean.data!=null) + { + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + } + if(count>0) + { + findIcon("我的患者",true,true); + } + else + { + findIcon("我的患者",false,true); + } + + + + } + private void getWelfareNotice() { + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getWelfareNotice,map,GETWELFARENOTICE,this); + } + + boolean isStop = false; + + private HttpHandler httpHandler; + + /** + * 请求服务器。列表数据 getPatientList + * + * @param + * + * @param + */ + +// public void getNewPublic() { +// +// // 封装参数 +// RequestParams params = new RequestParams(); +// // 判断是否是公益咨询列表还是抢答公益咨询,page = 0表示是抢答的接口 +// +// params.addBodyParameter("expertUuid", ExpertUuid); +// params.addBodyParameter("page", 1 + ""); +// +// httpHandler = HttpHelper.loadData(HttpMethod.POST, +// Url.getnewConsultList, params, new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// ConsultListBean bean = GsonTools.fromGsonToBean( +// info.result, ConsultListBean.class); +// if (bean != null && bean.data != null +// && bean.data.size() > 0) { +// if (badgePublicMsg != null) { +// badgePublicMsg.show(); +// } +// } else { +// if (badgePublicMsg != null) { +// badgePublicMsg.hide(); +// } +// } +// +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// +// } +// }); +// +// } + +// private boolean isHaveMessage = false; +// private boolean isHaveNewPer = false; + + public void showRedUnCount() { + // 后面放消息红点,应放在我的患者的,进口出,显示红点,或者底部导航 + OnUpdateMsgUnreadCounts(); + + } + /** + * 注册未读消息数量观察者 + */ + private void registerMsgUnreadInfoObserver(boolean register) { + if (register) { + ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback(){ + + @Override + public void onUnreadNumChanged(ReminderItem item) { + showRedUnCount(); + } + }); + } else { + ReminderManager.getInstance().registerUnreadNumChangedCallback(new ReminderManager.UnreadNumChangedCallback(){ + + @Override + public void onUnreadNumChanged(ReminderItem item) { + + } + }); + } + } + + + + /** + * 注册/注销系统消息未读数变化 + */ + private void registerSystemMessageObservers(boolean register) { + NIMClient.getService(SystemMessageObserver.class).observeUnreadCountChange( + sysMsgUnreadCountChangedObserver, register); + } + private Observer sysMsgUnreadCountChangedObserver = (Observer) unreadCount -> { + showRedUnCount(); + }; + private void registerObservers(boolean register) + { + MsgServiceObserve service = NIMClient.getService(MsgServiceObserve.class); + service.observeReceiveMessage(messageReceiverObserver, register); + service.observeRecentContact(messageObserver, register); + } + private Observer> messageReceiverObserver = new Observer>() { + + @Override + public void onEvent(List imMessages) { + showRedUnCount(); + } + }; + + Observer> messageObserver = new Observer>() { + + @Override + public void onEvent(List recentContacts) { + + showRedUnCount(); + } + }; + + /** + * 显示是否有新的患者申请红点提示 + */ +// public void showNewPatientRed() { +// if (badgePatienMsg != null) { +// if (count > 0) { +// isHaveNewPer = true; +// badgePatienMsg.show(); +// } else { +// if (!isHaveMessage) { +// badgePatienMsg.hide(); +// } +// +// } +// } +// } + + @Override + public void onStop() { + // TODO Auto-generated method stub + super.onStop(); + isStop = true; + if(isBackground()) + { + isfirst=true; + } + } + + /** + * 统计未读消息数,以后要区分我的患者,朋友圈,公益咨询,这个有点复杂 OnUpdateMsgUnreadCounts + * + * void + */ + public void OnUpdateMsgUnreadCounts() { + requestSystemMessageUnreadCount(); + + } + /** + * 查询系统消息未读数 + */ + private void requestSystemMessageUnreadCount() { + patientCount =NIMClient.getService(MsgService.class).getTotalUnreadCount(); + consultCount =0; + NIMClient.getService(MsgService.class).queryRecentContacts() + .setCallback(new RequestCallbackWrapper>() { + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onResult(int code, List recents, Throwable e) { + // recents参数即为最近联系人列表(最近会话列表) + if (code != ResponseCode.RES_SUCCESS || recents == null) { + + } + else + { + Iterator it = recents.iterator(); + while (it.hasNext()) { + RecentContact loadedRecent = it.next(); +// Log.d("gdxzname","loadedRecent "+ UserInfoHelper.isPatient(loadedRecent.getContactId(), SessionTypeEnum.P2P)); + if(loadedRecent.getUnreadCount()>0) + { + + if (!PatientSqlManager.isPatient(Constant.Patient_AppKey + loadedRecent.getContactId())) + { + consultCount = loadedRecent.getUnreadCount(); + patientCount=patientCount-loadedRecent.getUnreadCount(); + } + } + + + } + } + if (patientCount < 1) { + findIcon("我的患者",false,false); + } else { +// isHaveMessage = true; + findIcon("我的患者",true,false); + } + + if (consultCount<1) { + findIcon("公益咨询",false,true); + + } else { + findIcon("公益咨询",true,true); + + } + + } + }); + + } + + + + private HomeModalBean homeModalBean; + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + + } + HomeBean homeBean; + List news_list; + List iconBeans=new ArrayList<>(); + private List video_list; + private List jing_list=new ArrayList<>(); + List guide_ist; + List gandanfile_list; + List kejianlist=new ArrayList<>(); + List mettingBeans=new ArrayList<>(); + List mettingBeansNew=new ArrayList<>(); + public void replaceIcon() + { + if(iconBeans!=null&&iconBeans.size()>6) + { + iconBeans.get(4).setName(name1); + iconBeans.get(5).setName(name2); + iconBeans.get(6).setName(name3); + iconBeans.get(4).setImg(urlHtml+img1); + iconBeans.get(5).setImg(urlHtml+img2); + iconBeans.get(6).setImg(urlHtml+img3); + if(cellAdapter!=null) + cellAdapter.notifyDataSetChanged(); + } + else + { +// ToastUtil.showToast("后台接口数据不足7个"); + } + + } + @RequiresApi(api = Build.VERSION_CODES.N) + public void showFuliRed(Boolean receive_notice) + { + findIcon("我的福利",receive_notice,false); + + + } + + /** + * 寻找对应的宫格并添加小红点,是否有两个条件(随访消息和患者申请,新的公益咨询和公益咨询消息两种情况) + * 公益咨询和我的福利和我的患者 + * @param name + * @param + */ + @RequiresApi(api = Build.VERSION_CODES.N) + private void findIcon(String name,Boolean condition,Boolean need2control) + { + HomeBean.IconBean icon = null; + if(iconBeans!=null&&iconBeans.size()>0) + { + icon=iconBeans.stream() + .filter(customer -> name.equals(customer.getName())) + .findAny() + .orElse(null); + + + } + if(condition) + { + if(icon!=null) + { + if(need2control) + { + + icon.setRed1(true); + } + else + { + icon.setRed(true); + } + + + } + + } + else + { + if(icon!=null) + { + + if(need2control) + { + + icon.setRed1(false); + } + else + { + icon.setRed(false); + } + + } + } + + if(cellAdapter!=null) + cellAdapter.notifyDataSetChanged(); +// return icon; + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("LoginTAG","home"+resultCode+resultJson); + switch (resultCode) { + case 1122: + JSONObject jsonObject = null; + + try { + jsonObject = new JSONObject(resultJson); + if ("200".equals(jsonObject.optString("code"))&&!jsonObject.isNull("data")) { + Constant.Report_userId= jsonObject.optJSONObject("data").optString("userId"); + Constant.Repotr_token=jsonObject.optJSONObject("data").optString("token"); + Constant.Repotr_app_key=jsonObject.optJSONObject("data").optString("appKey"); + startReport(null); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 112: + messageNumBean= GsonTools.fromGsonToBean(resultJson, MessageNumBean.class); + if("200".equals(messageNumBean.getCode())) + { + + if(messageNumBean.getData()!=null) + { + if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Welfare())&&Integer.valueOf(messageNumBean.getData().getModule_Welfare())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(mainActivity.badgeSysMsg!=null) + mainActivity.badgeSysMsg.show(); + + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Order())&&Integer.valueOf(messageNumBean.getData().getModule_Order())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(mainActivity.badgeSysMsg!=null) + mainActivity.badgeSysMsg.show(); + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Relation())&&Integer.valueOf(messageNumBean.getData().getModule_Relation())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(mainActivity.badgeSysMsg!=null) + mainActivity.badgeSysMsg.show(); + } + + else if(!StringUtil.isEmpty(messageNumBean.getData().getModule_Comment())&&Integer.valueOf(messageNumBean.getData().getModule_Comment())>0) + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); + if(mainActivity.badgeSysMsg!=null) + mainActivity.badgeSysMsg.show(); + } + else + { + SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", false); + if(mainActivity.badgeSysMsg!=null) + mainActivity.badgeSysMsg.hide(); + } + + } + } + break; + case 111: + dismissLoadingProgress(); +// closeProgressDialog(); +// pd.dismiss(); + if(getActivity()==null) + { +// ToastUtil.showToast("您的操作太频繁了,请稍后再试"); + return; + } + homeBean=GsonTools.fromGsonToBean(resultJson,HomeBean.class); + if("200".equals(homeBean.getCode())) + { + if(homeBean.getData()!=null) + { + if(homeBean.getData().getExpertDetail()==null) + { + handleLogout(false); + return; + } + news_list=homeBean.getData().getNews_list(); + iconBeans.clear(); + iconBeans.addAll(homeBean.getData().getIcons_list()); + if(news_list!=null&&news_list.size()>0) + { + colortop=news_list.get(0).getColor(); + if(!isscoll) + { + + mainActivity.mToolbar.setBackgroundColor(Color.parseColor(colortop)); + mainActivity.mToolbar.getBackground().setAlpha(0); + } + + } + mettingBeans.clear(); + mettingBeans.addAll(homeBean.getData().getMeeting_list()); + esite_list.clear(); + esite_list.addAll(homeBean.getData().getEsite_list()); + guide_ist=homeBean.getData().getGuide_ist(); + gandanfile_list=homeBean.getData().getGandanfile_list(); + kejianlist.clear(); + if(isfirst||navigationController!=null&&navigationController.getSelected()==0) + { + kejianlist.addAll(guide_ist); + } + else + { + kejianlist.addAll(gandanfile_list); + } + if(kejianlist!=null&&kejianlist.size()>0|| + guide_ist!=null&&guide_ist.size()>0 + ||gandanfile_list!=null&&gandanfile_list.size()>0) + { + r_kejian.setVisibility(View.VISIBLE); + } + else + { + r_kejian.setVisibility(View.GONE); + } + + + initzhibo(); + initchangeE(esite_list); + initBanner(news_list); + initGongge(iconBeans); + jing_list.clear(); + jing_list.addAll(homeBean.getData().getExcellencourse_list()); + if(jing_list==null||jing_list.size()<1) + { + r_jingpin.setVisibility(View.GONE); + recycler_jin.setVisibility(View.GONE); + } + else + { + r_jingpin.setVisibility(View.VISIBLE); + recycler_jin.setVisibility(View.VISIBLE); + } + if(jingAdapter==null) + { + jingAdapter=new JingAdapter(getActivity(),jing_list); + recycler_jin.setAdapter(jingAdapter); + jingAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + MobclickAgent.onEvent(mainActivity, EXPERT_HOME_CLASS_QUALITY); + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",jing_list.get(position).getId()+""); + startActivity(intent); + } + }); + + } + else + { + jingAdapter.notifyDataSetChanged(); + } + if(kejianAdapter==null) + { + kejianAdapter=new KejianAdapter(getActivity(),kejianlist); + kejianAdapter.setGuide(true); + recycler_kejian.setAdapter(kejianAdapter); + + } + else + { + + kejianAdapter.notifyDataSetChanged(); + } + + video_list=homeBean.getData().getVideo_list(); + initHuiFang(video_list); + if(homeBean.getData().getWelfare_notice()!=null + &&!StringUtil.isEmpty(homeBean.getData().getWelfare_notice().getReceive_notice())) + { + receive_notice=Boolean.valueOf(homeBean.getData().getWelfare_notice().getReceive_notice()); + showFuliRed(receive_notice); + } +// String has_unread=homeBean.getData().getHas_unread(); +// if("0".equals(has_unread)) +// { +// SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", false); +// if(mainActivity.badgeSysMsg!=null) +// mainActivity.badgeSysMsg.hide(); +// +// } +// else +// { +// SharePrefUtil.saveBoolean(mActivity, "isHaveSysMsg", true); +// if(mainActivity.badgeSysMsg!=null) +// mainActivity.badgeSysMsg.show(); +// } + if(homeBean.getData().getConsult_list()!=null&& + !StringUtil.isEmpty(homeBean.getData().getConsult_list().getCount())) + { + if(Integer.valueOf(homeBean.getData().getConsult_list().getCount())>0) + { + + findIcon("公益咨询",true,false); + + + } + else + { + findIcon("公益咨询",false,false); + } + } + //本地广播 + LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getActivity()); + Intent intent = new Intent("LOCAL_ACTION1"); + intent.putExtra("issign", homeBean.getData().getSign_in()); + //发送本地广播 + localBroadcastManager.sendBroadcast(intent); + if ("1".equals(homeBean.getData().getIsOnlineToday())){ + MainActivity.mMainActivity.iv_zhibo.setVisibility(View.VISIBLE); + } + } +// getWelfareNotice(); + } + else + { + handleLogout(false); + ToastUtil.showToast(homeBean.getMessage()); + } + isfirst=false; + break; + case GETHOMEMODAL: + + Gson gson1=new Gson(); + homeModalBean=gson1.fromJson(resultJson, HomeModalBean.class); + if(homeModalBean!=null) + { + if(homeModalBean.getData()!=null) + { + if(!StringUtil.isEmpty(homeModalBean.getData().getImg())) + { + ImageLoader + .getInstance() + .displayImage( + urlHtml+homeModalBean.getData().getImg(), + home_modal, + ImageOptions + .getImageOptions(R.drawable.img_gandan_house)); + if(!ismodalshownow) + { + close_modal.setVisibility(View.VISIBLE); + home_modal.setVisibility(View.VISIBLE); + home_modal_1.setVisibility(View.VISIBLE); + ismodalshow=true; + ismodalshownow=true; + + home_modal_1.setClickable(true); + + + + + } + else + { + ismodalshow=false; + } + + + } + + } + } + break; +// case GETWELFARENOTICE: +// JSONObject jsonObject = null; +// try { +// jsonObject = new JSONObject(resultJson); +// if ("200".equals(jsonObject.optString("code"))) { +// receive_notice = jsonObject.optBoolean("receive_notice");//有福利待领取情况 +// showFuliRed(receive_notice); +//// if (receive_notice) { +// +//// if("我的福利".equals(name2)&&receive_notice&&badgeWelfarerMsg!=null) +//// { +//// badgeWelfarerMsg.show(); +//// } +//// else if("我的福利".equals(name1)&&receive_notice&&badgeWelfarerMsg!=null) +//// { +//// badgeWelfarelMsg.show(); +//// } +//// } +//// else +//// { +//// if(badgeWelfarerMsg!=null) +//// { +//// badgeWelfarerMsg.hide(); +//// badgeWelfarelMsg.hide(); +//// } +//// +//// } +// } +// } catch (JSONException e) { +// e.printStackTrace(); +// } +// +// break; +// case GETUSERICON: +// LogUtils.e("GETUSERICON = "+resultJson); +// GetUserIconBean getUserIconBean = GsonTools.fromGsonToBean(resultJson, GetUserIconBean.class); +// if (getUserIconBean!=null&&"200".equals(getUserIconBean.getCode())){ +// for (int i = 0;i0){ +// name1 = list.get(0).getName(); +//// tv_text1.setText(name1); +// if("我的福利".equals(name1)&&receive_notice&&badgeWelfarerMsg!=null) +// { +// badgeWelfarelMsg.show(); +// } +// Bitmap discCacheImage = getDiscCacheImage(urlHtml + list.get(0).getImg()); +// if (discCacheImage!=null){ +// LogUtil.i("discCacheImage"); +// iv_home1.setImageBitmap(discCacheImage); +// }else { +// ImageLoader.getInstance().displayImage( +// urlHtml + list.get(0).getImg(), +// iv_home1,ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// } +// +// +// } +// if(list.size()>1){ +// name2 = list.get(1).getName(); +//// tv_text2.setText(name2); +// +// Bitmap discCacheImage = getDiscCacheImage(urlHtml + list.get(1).getImg()); +// if (discCacheImage!=null){ +// iv_home2.setImageBitmap(discCacheImage); +// }else { +// ImageLoader.getInstance().displayImage( +// urlHtml + list.get(1).getImg(), +// iv_home2,ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// } +// if("我的福利".equals(name2)&&receive_notice&&badgeWelfarerMsg!=null) +// { +// badgeWelfarerMsg.show(); +// } +// +// } +// +// } +// break; + case URL_PATH: + LogUtil.i("URL_PATH = "+resultJson); + ZengshuBean zengshuBean = GsonTools.fromGsonToBean(resultJson, ZengshuBean.class); + showFuliZengshuDailog(zengshuBean); + break; + case GETAPPACTIVITY: + LogUtil.i("GETAPPACTIVITY = "+resultJson); + GetAppActivityBean bean1 = GsonTools.fromGsonToBean(resultJson, GetAppActivityBean.class); + GetAppActivityBean.DataBean data = bean1.getData(); + if (data!=null&&"200".equals(bean1.getCode())){ + ImageLoader.getInstance().displayImage( + urlHtml + data.getImg(), + bt_fuilzengshu + ); + bt_fuilzengshu.setVisibility(View.VISIBLE); + form = data.getForm(); + url_path = data.getUrl_path(); + zengshuName = data.getName(); + Constant.from = form; + Constant.url_path = url_path; + Constant.zengshuName = zengshuName; + Constant.Img = data.getImg(); + } + break; + + case HERO2019: + LogUtil.i("HERO2019 = "+resultJson); + HeroBean heroBean = GsonTools.fromGsonToBean(resultJson, HeroBean.class); + Constant.HERO2019 = heroBean.getData().getStatus(); + Constant.HERO2019url_path = heroBean.getData().getUrl_path(); + if (Constant.HERO2019==1){ + bt_yingxiongbang.setVisibility(View.VISIBLE); + }else { + bt_yingxiongbang.setVisibility(View.GONE); + } + + break; + } + + } + + @RequiresApi(api = Build.VERSION_CODES.N) + private void initGongge(List iconBeans) { + + if(cellAdapter==null) + { +// HomeBean.IconBean icon=iconBeans.stream() +// .filter(customer -> "指南杂志".equals(customer.getName())) +// .findAny() +// .orElse(null); +// iconBeans.remove(icon);去掉指南杂志 + cellAdapter=new CellAdapter(getActivity(),iconBeans); + home_rv.setAdapter(cellAdapter); + cellAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + if(position==iconBeans.size()) + { + startActivityForResult(new Intent(mActivity, MyUserIconActivity.class),MYUSERICON); + } + else + { + if ("精品课".equals(iconBeans.get(position).getName())){ + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_ICON_CLASS_QUALITY); + + }else if ("肝胆课件".equals(iconBeans.get(position).getName())){ + MobclickAgent.onEvent(mainActivity,EXPERT_HOME_ICON_COURSEWARE); + + } + MyUserIconUtil.myIntent(mActivity,iconBeans.get(position).getName()); + } + } + }); + } + else + { + cellAdapter.notifyDataSetChanged(); + } + showRedUnCount(); + getNewPatientList(); + } + + + public static Bitmap getDiscCacheImage(String uri){//这里的uri一般就是图片网址 + Bitmap bitmap = ImageLoader.getInstance().getMemoryCache().get(uri); + try { + if (bitmap == null) { + String path = ImageLoader.getInstance().getDiskCache().get(uri).getPath(); + if (!TextUtils.isEmpty(path)) { + bitmap = BitmapFactory.decodeFile(path); + } + } + return bitmap; + } catch (Exception e) { + // TODO: handle exception + e.printStackTrace(); + } + + + return null; + } + +// public void initReport() +// { +// +// Map map = new HashMap<>(); +// sendJsonPostParamtoNetSignMD5(Url.getTagToken,map,1122,this); +// +// +// } + + private void openWx() { + if (mainActivity==null) + { + return; + } + WXOpenCustomerServiceChat.Req req = new WXOpenCustomerServiceChat.Req(); + req.corpId = "wwc72af5440141e84e"; // 企业ID + req.url = "https://work.weixin.qq.com/kfid/kfceb116f7032dbbb91"; // 客服URL + mainActivity.api.sendReq(req); + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuiMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuiMessageFragment.java new file mode 100644 index 0000000..0e17fe3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuiMessageFragment.java @@ -0,0 +1,293 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.graphics.Color; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.umeng.NewSystemMessageActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link HuiMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class HuiMessageFragment extends BaseFragment implements AdapterView.OnItemClickListener, OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + + public HuiMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment HuiMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static HuiMessageFragment newInstance(String param1, String param2) { + HuiMessageFragment fragment = new HuiMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_hui_message, container, false); +// } + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + MessageBean messageBeans; + private NewSystemMessageActivity newSystemMessageActivity; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (NewSystemMessageActivity) getActivity(); + if(view==null) + view = UIUtils.inflate(R.layout.fragment_hui_message); + ptrLv = view. findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + TextView tv_empty_msg=view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到回复通知哦"); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("4",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("4",page+""); + + } + }); + initMessage("4",page+""); + return view; + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),3); +// goActivity(messageBeans.getData().getList().get(i-1).getExtra().getType(), null); goActivity(messageBeans.getData().getList().get(i).getExtra().getType(), null); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + public class MessageAdapter extends BaseAdapter + { + private List list; + public MessageAdapter(List messageBeans) { + list=messageBeans; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int i) { + return list.get(i); + } + + @Override + public long getItemId(int i) { + return i; + } + + @Override + public View getView(int i, View view, ViewGroup viewGroup) { + ViewHolder viewHolder; + if (view == null) { + viewHolder = new ViewHolder(); + view = UIUtils.inflate(R.layout.message_back_item); + viewHolder.tv_time = view.findViewById(R.id.tv_time); + viewHolder. tv_title = view.findViewById(R.id.tv_title); + viewHolder. tv_content = view.findViewById(R.id.tv_content); + viewHolder.im_head=view.findViewById(R.id.im_head); + + view.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) view.getTag(); + } + viewHolder.tv_time.setText(list.get(i).getCreate_date()); + viewHolder. tv_title.setText(list.get(i).getExtra().getUser_name()); + viewHolder. tv_content.setText(list.get(i).getContent()); + if("1".equals(list.get(i).getIs_read())) + { + viewHolder. tv_title.setTextColor(Color.parseColor("#333333")); + } + else + { + viewHolder. tv_title.setTextColor(Color.parseColor("#EB322D")); + } + if (!TextUtils.isEmpty(list.get(i).getExtra().getUser_photo())) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + list.get(i).getExtra().getUser_photo(), viewHolder.im_head); + } + return view; + } + public class ViewHolder{ + TextView tv_time,tv_title,tv_content; + ImageView im_head; + + } + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("4",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuodongFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuodongFragment.java new file mode 100644 index 0000000..1712bc5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/HuodongFragment.java @@ -0,0 +1,271 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GanDanHouseDetialActivity; +import cn.shangyu.gdxzExpert.adapter.GanDanHouseAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.HouseBean; +import cn.shangyu.gdxzExpert.bean.HouseBean.HouseList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class HuodongFragment extends BaseFragment implements OnCallBackFromNet { + + private PullToRefreshListView ptrLv; + private HttpHandler httpHandler; + public int page = 1; + private GanDanHouseAdapter casediscussionAdapter; + private List casediscussion = new ArrayList(); + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + SharePrefUtil.saveString(mActivity, + Url.getInteractionList,resultJson); + processData(resultJson); + break; + } + + } + + public interface OnHuodongRefreshListener { + void onHuodongRefresh(String url); + } + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_casediscussion); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未有活动"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + + ptrLv.getRefreshableView().setOnItemClickListener( + new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + Intent intent = new Intent(mActivity, + GanDanHouseDetialActivity.class); + intent.putExtra("uuid", casediscussion + .get(position - 1).getUuid()); + mActivity.startActivity(intent); + + } + }); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getNewsList(Url.getInteractionList, true, false, page); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getNewsList(Url.getInteractionList, false, false, page); + } + }); + post(); + return view; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + String commentuuid = SharePrefUtil.getString(mActivity, "commentuuid", + ""); + int commentnum = SharePrefUtil.getInt(mActivity, "commentnum", -1); + if (!StringUtil.isEmpty(commentuuid) && commentnum != -1) { + if (casediscussion.size() > 0) { + + for (int i = 0; i < casediscussion.size(); i++) { + if (casediscussion.get(i).getUuid().equals(commentuuid)) { + casediscussion.get(i).setCommentnum(commentnum + ""); + casediscussionAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "commentuuid"); + SharePrefUtil.clear(mActivity, "commentnum"); + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + } + + private void post() { + // TODO Auto-generated method stub + String result = SharePrefUtil.getString(mActivity, + Url.getInteractionList, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + page = 1; + getNewsList(Url.getInteractionList, true, false, page); + } + + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + + /** + * 请求服务器 getNewsList + */ + public void getNewsList(final String loadUrl, final boolean isRefresh, + final boolean isTopNews, final int page) { + Map map=new HashMap<>(); + map.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(loadUrl,map,101,this); +// String uuuid = SharePrefUtil +// .getString(getActivity(), Constant.uuid, ""); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(mActivity, +// Url.getInteractionList, info.result); +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + HouseBean bean = GsonTools.fromGsonToBean(result, HouseBean.class); + if (!"200".equals(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + casediscussion.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.list.size()); + if (bean.data.list == null || bean.data.list.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + casediscussion.addAll(bean.data.list); + } + } else { + casediscussion.addAll(bean.data.list); + } + // 实例化适配器 + if (casediscussionAdapter == null) { + casediscussionAdapter = new GanDanHouseAdapter(casediscussion, + mActivity); + ptrLv.getRefreshableView().setAdapter(casediscussionAdapter); + } else { + casediscussionAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.data.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多活动了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/InteractionFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/InteractionFragment.java new file mode 100644 index 0000000..4adb23f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/InteractionFragment.java @@ -0,0 +1,21 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.view.View; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class InteractionFragment extends BaseFragment { + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + return null; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceClassFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceClassFragment.java new file mode 100644 index 0000000..7388712 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceClassFragment.java @@ -0,0 +1,163 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.os.Build; +import android.os.Bundle; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.WebSettings; +import android.widget.TextView; + +import java.util.List; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.RecyclerView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.widget.NestedScrollWebView; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link IntroduceClassFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class IntroduceClassFragment extends Fragment{ + + +// private RecyclerView mRecyclerView; + +// private List mDatas; + NestedScrollWebView wv; + public static IntroduceClassFragment newInstance(String param1) { + IntroduceClassFragment fragment = new IntroduceClassFragment(); + Bundle args = new Bundle(); + args.putString("descs", param1); + fragment.setArguments(args); + return fragment; + } + String de; + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View v=inflater.inflate(R.layout.fragment_introduce__class_, container, false); +// X5WebView.initHardwareAccelerate(getActivity()); + wv = v.findViewById(R.id.wb); + Bundle bundle = getArguments(); + de=bundle.getString("descs")+""; + WebSettings webSetting = wv.getSettings(); +// webSetting.setJavaScriptEnabled(true); +// webSetting.setJavaScriptCanOpenWindowsAutomatically(true); +// webSetting.setAllowFileAccess(true); +// webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); +// webSetting.setSupportZoom(true); +// webSetting.setBuiltInZoomControls(true); +// webSetting.setUseWideViewPort(true); +// webSetting.setSupportMultipleWindows(true); +// webSetting.setLoadWithOverviewMode(true); +// webSetting.setAppCacheEnabled(true); +// webSetting.setDomStorageEnabled(true); +// webSetting.setGeolocationEnabled(true); +// webSetting.setAppCacheMaxSize(Long.MAX_VALUE);; +// webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND); +// webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE); +// webSetting.setBlockNetworkImage(false); // 解决图片不显示 + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ + webSetting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + wv.loadDataWithBaseURL(null, de, "text/html", "utf-8", null); + return v; + } + + + + @Override + public void onDestroy() { + super.onDestroy(); + if(wv!=null) + wv.destroy(); + } + // @Override +// public View onCreateSuccessedView() { +// View v= UIUtils.inflate(R.layout.fragment_introduce__class_); +// X5WebView.initHardwareAccelerate(getActivity()); +// wv = v.findViewById(R.id.wb); +// Bundle bundle = getArguments(); +// String de=bundle.getString("descs")+""; +//// wv.getSettings().setDefaultTextEncodingName("utf-8"); +//// wv.getSettings().setTextSize(WebSettings.TextSize.LARGEST); +//// wv.getSettings().setSupportZoom(true); +//// wv.getSettings().setTextZoom(150); +//// setupWebView(); +// wv.loadDataWithBaseURL(null, de, "text/html", "utf-8", null); +// +//// initData(); +//// mRecyclerView = (RecyclerView) v.findViewById(R.id.recyclerview); +//// mRecyclerView.setLayoutManager(new LinearLayoutManager(mRecyclerView.getContext())); +//// mRecyclerView.setAdapter(new RecyclerAdapter(mRecyclerView.getContext(), mDatas)); +// return v; +// } +// @JavascriptInterface +// public void resize(final float height) { +// getActivity().runOnUiThread(new Runnable() { +// @Override +// public void run() { +// wv.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density))); +// } +// }); +// } + + + + + + + +// private void initData() { +// mDatas = new ArrayList<>(); +// mDatas.clear();; +// Bundle bundle = getArguments(); +// String de=bundle.getString("descs")+""; +// mDatas.add(de); +// +// } + + + + public class RecyclerAdapter extends RecyclerView.Adapter { + private Context mContext; + private List mDatas; + + public RecyclerAdapter(Context context, List datas) { + mContext = context; + mDatas = datas; + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new MyViewHolder(LayoutInflater.from( + mContext).inflate(R.layout.item_main, parent, false)); + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + holder.tv.setText(Html.fromHtml(mDatas.get(position))); + } + + @Override + public int getItemCount() { + return mDatas.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder { + TextView tv; + + public MyViewHolder(View view) { + super(view); + tv = (TextView) view.findViewById(R.id.tv_num); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceDetailFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceDetailFragment.java new file mode 100644 index 0000000..195796f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceDetailFragment.java @@ -0,0 +1,534 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseExpandableListAdapter; +import android.widget.ExpandableListAdapter; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import java.io.Serializable; +import java.util.List; + +import androidx.core.widget.NestedScrollView; +import androidx.fragment.app.Fragment; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ClassDetailBean; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link IntroduceDetailFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class IntroduceDetailFragment extends Fragment { + + + private int finalI,finalJ; + + public IntroduceDetailFragment() { + // Required empty public constructor + } + private ChooseListener chooseListener; + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @return A new instance of fragment introduce_Deyail_Fragment. + */ + // TODO: Rename and change types and number of parameters + public static IntroduceDetailFragment newInstance(List list,String Excellentcourse_first_title_id,String openid,String isbuy) { + IntroduceDetailFragment fragment = new IntroduceDetailFragment(); + Bundle args = new Bundle(); + args.putSerializable("serializablelist", (Serializable) list); + args.putString("Excellentcourse_first_title_id",Excellentcourse_first_title_id); + args.putString("openid",openid); + args.putString("isbuy",isbuy); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + if(context instanceof ChooseListener) + { + chooseListener = (ChooseListener)context; + } else{ + throw new IllegalArgumentException("activity must implements ChooseListener"); + } + } + + List excellentcourse_first_title_list; + ClsaaExpandAdapter adapter; + private String Excellentcourse_first_title_id,openid,isbuy; +// private int expandedNum=-1;//第几位展开 + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + CommentExpandableListView expandableListView; + NestedScrollView scroll; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view=inflater.inflate(R.layout.fragment_introduce__deyail_, container, false); + expandableListView = view.findViewById(R.id.detail_expandableListView); + scroll= view.findViewById(R.id.scroll); + excellentcourse_first_title_list= (List) getArguments().getSerializable("serializablelist"); + Excellentcourse_first_title_id=getArguments().getString("Excellentcourse_first_title_id"); + isbuy=getArguments().getString("isbuy"); + openid=getArguments().getString("openid"); + initExpandableListView(); + return view; + } + private void initExpandableListView() + { + expandableListView.setGroupIndicator(null); + adapter=new ClsaaExpandAdapter(getActivity(),excellentcourse_first_title_list); + expandableListView.setAdapter(adapter); + +// setExpandedListViewHeightBasedOnChildren(expandableListView, excellentcourse_first_title_list.size()-1); + expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { + @Override + public boolean onGroupClick(ExpandableListView expandableListView, View view, int groupPosition, long l) { +// setListViewHeight(expandableListView, groupPosition); + if(expandableListView.isGroupExpanded(groupPosition)) + { + expandableListView.collapseGroup(groupPosition); + + } + else + { + expandableListView.expandGroup(groupPosition); + + + } + + return true; + } + }); + if(excellentcourse_first_title_list!=null&&excellentcourse_first_title_list.size()>0) + { + if(!StringUtil.isEmpty(Excellentcourse_first_title_id)) + { + flag: for (int i=0;ilist; + private Context context; + + public ClsaaExpandAdapter(Context context,Listlist) { + this.list=list; + this.context=context; + + } + + @Override + public int getGroupCount() { + return list.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + + if(list.get(groupPosition).getExcellentcourse_second_title_list()!=null + &&list.get(groupPosition).getExcellentcourse_second_title_list().size()>0) + return list.get(groupPosition).getExcellentcourse_second_title_list().size(); + else + return 0; + + + } + + @Override + public Object getGroup(int groupPosition) { + return list.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return list.get(groupPosition).getExcellentcourse_second_title_list().get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.first_item, parent, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + if(isExpanded) + groupHolder.im_z.setImageDrawable(getResources().getDrawable(R.drawable.zhankai)); + else + groupHolder.im_z.setImageDrawable(getResources().getDrawable(R.drawable.shouqi)); + + if(groupPosition==0&&getGroupCount()==1) + { + groupHolder.tv_fn.setText(list.get(groupPosition).getTitle()); + } + else if(groupPosition<11) + { + groupHolder.tv_fn.setText(NUMS[groupPosition]+"、"+list.get(groupPosition).getTitle()); + } + else if(groupPosition%10==0) + { + groupHolder.tv_fn.setText(NUMS[groupPosition/10]+NUMS[9]+"、"+list.get(groupPosition).getTitle()); + } + else + { + groupHolder.tv_fn.setText(NUMS[groupPosition/10]+NUMS[9]+NUMS[groupPosition%10]+"、"+list.get(groupPosition).getTitle()); + } + + +// groupHolder.r_f.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if(expandedNum==groupPosition) +// { +// expandedNum=-1; +// notifyDataSetChanged(); +// } +// else +// { +// expandedNum=groupPosition; +// expandableListView.expandGroup(expandedNum); +// notifyDataSetChanged(); +// } +// } +// }); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildHolder childHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.second_item, parent, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + }else { + childHolder = (ChildHolder) convertView.getTag(); + } + + switch (list.get(groupPosition). + getExcellentcourse_second_title_list().get(childPosition).getType()) + { + case "0": + childHolder.tv_s.setVisibility(View.VISIBLE); + childHolder.im_s.setVisibility(View.GONE); + childHolder.jingdu.setVisibility(View.GONE); + childHolder.jingdu1.setVisibility(View.GONE); + + break; + case "1": + if("1".equals(isbuy)) + { + childHolder.im_s.setVisibility(View.INVISIBLE); + childHolder.tv_s.setVisibility(View.INVISIBLE); + if("2".equals(list.get(groupPosition). + getExcellentcourse_second_title_list().get(childPosition).getStatus())) + { + childHolder.jingdu.setVisibility(View.GONE); + childHolder.jingdu1.setVisibility(View.GONE); + } + else + { + childHolder.jingdu.setVisibility(View.VISIBLE); + childHolder.jingdu1.setVisibility(View.VISIBLE); + + if(!StringUtil.isEmpty(list.get(groupPosition).getExcellentcourse_second_title_list().get(childPosition).getDuration())) + { + if("0%".equals(list.get(groupPosition).getExcellentcourse_second_title_list().get(childPosition).getDuration())) + { + childHolder.jingdu.setText("未学"); + childHolder.jingdu.setTextColor(Color.parseColor("#666666")); + } + else if("100%".equals(list.get(groupPosition).getExcellentcourse_second_title_list().get(childPosition).getDuration())) + { + childHolder.jingdu.setText("已学完"); + childHolder.jingdu.setTextColor(Color.parseColor("#FD0808")); + } + else + { + childHolder.jingdu.setText("已学"+list.get(groupPosition).getExcellentcourse_second_title_list().get(childPosition).getDuration()); + childHolder.jingdu.setTextColor(Color.parseColor("#666666")); + } + + } + else + { + childHolder.jingdu.setText("未学"); + childHolder.jingdu.setTextColor(Color.parseColor("#666666")); + } + } + + } + else + { + childHolder.jingdu.setVisibility(View.GONE); + childHolder.jingdu1.setVisibility(View.GONE); + + childHolder.im_s.setVisibility(View.VISIBLE); + childHolder.tv_s.setVisibility(View.GONE); + } + + break; + } +// Date date = new Date(System.currentTimeMillis()); +// int[]time=getTimeSpan(simpleDateFormat.format(date),list.get(groupPosition). +// getExcellentcourse_second_title_list().get(childPosition).get); + if(list.get(groupPosition). + getExcellentcourse_second_title_list().get(childPosition).getIs_new()) + { + childHolder.tv_new.setVisibility(View.VISIBLE); + } + else + { + childHolder.tv_new.setVisibility(View.GONE); + } + if("2".equals(list.get(groupPosition). + getExcellentcourse_second_title_list().get(childPosition).getStatus())) + { + childHolder.tv_sn.setText("待上线"); + childHolder.tv_sn.setTextColor(Color.parseColor("#FD0808")); + } + else + { + childHolder.tv_sn.setText("时长:"+list.get(groupPosition). + getExcellentcourse_second_title_list().get(childPosition).getTime()); + childHolder.tv_sn.setTextColor(Color.parseColor("#666666")); + } + + childHolder.tv_fn.setText(childPosition+1+"、"+list.get(groupPosition). + getExcellentcourse_second_title_list().get(childPosition).getTitle()); + if(mGroupPosition==groupPosition&&mChildPosition==childPosition) + { + childHolder.tv_fn.setTextColor(getResources().getColor(R.color.btn_title)); + } + else + { + childHolder.tv_fn.setTextColor(Color.parseColor("#666666")); + + } + + return convertView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return true; + } + private int mGroupPosition=-1,mChildPosition=-1; + //定义一个方法 把mGroupPosition和mChildPosition进行设置 并notifyDataSetChanged(); + public void setSelcetPosition(int mGroupPosition,int mChildPosition){ + this.mGroupPosition = mGroupPosition; + this.mChildPosition = mChildPosition; + notifyDataSetChanged(); + } + } + + public final String NUMS[]={"一","二","三","四","五","六","七","八","九","十"}; + class GroupHolder + { + TextView tv_fn; + ImageView im_z; + RelativeLayout r_f; + public GroupHolder(View view) { + tv_fn=view.findViewById(R.id.tv_fn); + im_z=view.findViewById(R.id.im_z); + r_f=view.findViewById(R.id.r_f); + } + } + class ChildHolder + { + TextView tv_fn,tv_sn,tv_s,jingdu,jingdu1; + ImageView tv_new; + ImageView im_s; + public ChildHolder(View view) { + tv_fn=view.findViewById(R.id.tv_fn); + tv_sn=view.findViewById(R.id.tv_sn); + im_s=view.findViewById(R.id.im_s); + tv_s=view.findViewById(R.id.tv_s); + jingdu=view.findViewById(R.id.jingdu); + jingdu1=view.findViewById(R.id.jingdu1); + tv_new=view.findViewById(R.id.tv_new); + } + } + + public interface ChooseListener + { + void chosecourse(String excellentcourse_id,Boolean startnow); + } + /** + * 可扩展listview展开时调用 + * + * @param listView + * @param groupPosition + */ + public static void setExpandedListViewHeightBasedOnChildren( + ExpandableListView listView, int groupPosition) { + ExpandableListAdapter listAdapter = listView.getExpandableListAdapter(); + if (listAdapter == null) { + return; + } + View listItem = listAdapter.getChildView(groupPosition, 0, true, null, + listView); + listItem.measure(0, 0); + int appendHeight = 0; + for (int i = 0; i < listAdapter.getChildrenCount(groupPosition); i++) { + appendHeight += listItem.getMeasuredHeight(); + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); +// Log.d(TAG, "Expand params.height" + params.height); + params.height += appendHeight; + listView.setLayoutParams(params); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceEvaluateFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceEvaluateFragment.java new file mode 100644 index 0000000..ceb405a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/IntroduceEvaluateFragment.java @@ -0,0 +1,837 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseExpandableListAdapter; +import android.widget.ExpandableListView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.core.widget.NestedScrollView; +import androidx.fragment.app.Fragment; + +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.scwang.smart.refresh.layout.SmartRefreshLayout; +import com.scwang.smart.refresh.layout.api.RefreshFooter; +import com.scwang.smart.refresh.layout.api.RefreshHeader; +import com.scwang.smart.refresh.layout.api.RefreshLayout; +import com.scwang.smart.refresh.layout.constant.RefreshState; +import com.scwang.smart.refresh.layout.listener.OnMultiListener; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.EvaluateActivity; +import cn.shangyu.gdxzExpert.activity.SettingFeedbackActivity; +import cn.shangyu.gdxzExpert.bean.CourseEvaBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayoutNew; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; +import cn.shangyu.gdxzExpert.widget.goodratingbar.MaterialRatingBar; +import cn.shangyu.gdxzExpert.widget.goodratingbar.MaterialRatingBarOld; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link IntroduceEvaluateFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class IntroduceEvaluateFragment extends Fragment implements AdapterView.OnItemClickListener{ + + + private String excellentcourse_id,isbuy,p_id; + private EvaExpandAdapter adapter; + private String type,starnum,comment_num; + + public IntroduceEvaluateFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * @return A new instance of fragment IntroduceEvaluateFragment. + */ + // TODO: Rename and change types and number of parameters + public static IntroduceEvaluateFragment newInstance(String excellentcourse_id,String type,String isbuy,String starnum,String comment_num) { + IntroduceEvaluateFragment fragment = new IntroduceEvaluateFragment(); + Bundle args = new Bundle(); + args.putString("excellentcourse_id", excellentcourse_id); + args.putString("type",type); + args.putString("isbuy",isbuy); + args.putString("starnum",starnum); + args.putString("comment_num",comment_num); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + MaterialRatingBarOld materialRatingBar; + TextView tv_none; + LinearLayout r_notr,l_eva; + public boolean isAllEva=true; + ImageView im_eva; + CommentExpandableListView expandableListView; + List list=new ArrayList<>(); +// LinearLayout ll_empty_bg; +// RefreshHeaderWrapper refreshHeaderWrapper; + LinearLayout classicsFooter,Footer; + SmartRefreshLayout refreshLayout; + NestedScrollView scroll; + private int page = 1; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view= inflater.inflate(R.layout.fragment_introduce_evaluate, container, false); + excellentcourse_id=getArguments().getString("excellentcourse_id"); + isbuy=getArguments().getString("isbuy"); + type=getArguments().getString("type"); + starnum=getArguments().getString("starnum"); + comment_num=getArguments().getString("comment_num"); + materialRatingBar=view.findViewById(R.id.not_ratingbar); + materialRatingBar.setIsIndicator(true); + r_notr=view.findViewById(R.id.r_notr); + l_eva=view.findViewById(R.id.l_eva); + im_eva=view.findViewById(R.id.im_eva); + tv_none=view.findViewById(R.id.tv_none); +// ll_empty_bg=view.findViewById(R.id.ll_empty_bg); + expandableListView = view.findViewById(R.id.com_expandableListView); + refreshLayout=view.findViewById(R.id.refreshLayout); +// refreshHeaderWrapper=view.findViewById(R.id.fresh_header); + classicsFooter=view.findViewById(R.id.r_head); + scroll= view.findViewById(R.id.scroll); + Footer=view.findViewById(R.id.r_foot); + if(StringUtil.isEmpty(comment_num)||Integer.valueOf(comment_num)<1) + { + l_eva.setVisibility(View.GONE); + tv_none.setVisibility(View.VISIBLE); + } + else + { + l_eva.setVisibility(View.VISIBLE); + tv_none.setVisibility(View.GONE); + } + TweenAnimLoadingLayoutNew tweenAnimLoadingLayoutNew=new TweenAnimLoadingLayoutNew(getActivity(),null,true); + TweenAnimLoadingLayoutNew tweenAnimLoadingLayout=new TweenAnimLoadingLayoutNew(getActivity(),null,false); + classicsFooter.addView(tweenAnimLoadingLayoutNew ); + Footer.addView(tweenAnimLoadingLayout); + refreshLayout.setOnMultiListener(new OnMultiListener() { + @Override + public void onHeaderMoving(RefreshHeader header, boolean isDragging, float percent, int offset, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderReleased(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderStartAnimator(RefreshHeader header, int headerHeight, int maxDragHeight) { + + } + + @Override + public void onHeaderFinish(RefreshHeader header, boolean success) { + tweenAnimLoadingLayoutNew.releaseToRefresh(); + } + + @Override + public void onFooterMoving(RefreshFooter footer, boolean isDragging, float percent, int offset, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterReleased(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterStartAnimator(RefreshFooter footer, int footerHeight, int maxDragHeight) { + + } + + @Override + public void onFooterFinish(RefreshFooter footer, boolean success) { + tweenAnimLoadingLayout.releaseToRefresh(); + } + + @Override + public void onLoadMore(@NonNull RefreshLayout refreshLayout) { + page++; + tweenAnimLoadingLayout.refreshing(); + if(isAllEva) + { + EvaDetail(excellentcourse_id,page+""); + } + + else + { + EvaDetailUser(excellentcourse_id,page+""); + } + +// refreshLayout.finishLoadMore(2000); + + } + + @Override + public void onRefresh(@NonNull RefreshLayout refreshLayout) { + page=1; + tweenAnimLoadingLayoutNew.refreshing(); + if(isAllEva) + { + EvaDetail(excellentcourse_id,page+""); + } + + else + { + EvaDetailUser(excellentcourse_id,page+""); + } +// refreshLayout.finishRefresh(2000); + } + + @Override + public void onStateChanged(@NonNull RefreshLayout refreshLayout, @NonNull RefreshState oldState, @NonNull RefreshState newState) { + + } + }); + + + +// refreshHeaderWrapper.addView +// (new TweenAnimLoadingLayout(getActivity(), PullToRefreshBase.Mode.PULL_FROM_START,VERTICAL,null)); + + l_eva.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + page=1; + if(isAllEva) + { + isAllEva=false; + im_eva.setImageResource(R.drawable.my_eva); + EvaDetailUser(excellentcourse_id,page+""); + } + else + { + + isAllEva=true; + im_eva.setImageResource(R.drawable.all_eva); + EvaDetail(excellentcourse_id,page+""); + + } + + } + }); + + r_notr.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if("1".equals(isbuy)) + { + Intent intent=new Intent(getActivity(), EvaluateActivity.class); + intent.putExtra("excellentcourse_id",excellentcourse_id); + intent.putExtra("p_id",""); + intent.putExtra("type",type); + intent.putExtra("starnum",starnum); + startActivityForResult(intent,301); + } + else + { + ToastUtil.showToast("您还未购买课程"); + } + + } + }); + + if("1".equals(type)) + { + r_notr.setVisibility(View.GONE); + } + else + { + r_notr.setVisibility(View.VISIBLE); + } + +// EvaDetail(excellentcourse_id,page+""); + return view; + } + + @Override + public void onResume() { + super.onResume(); + scroll.smoothScrollTo(0, 0); + if(isAllEva) + { + + page=1; + EvaDetail(excellentcourse_id,page+""); + } + + } + + private void initExpandableListView() + { + expandableListView.setGroupIndicator(null); + adapter=new EvaExpandAdapter(getActivity(),list); + expandableListView.setAdapter(adapter); + if(list!=null&&list.size()>0) + { + for (int i=0;i map = new HashMap<>(); + map.put("excellentcourse_id",excellentcourse_id); + map.put("page",page); + sendJsonPostParamNoResultMD5(Url.listExcellencourseCommentByUser,map,101); + } + + private void EvaDetail(String excellentcourse_id,String page) { + Map map = new HashMap<>(); + map.put("excellentcourse_id",excellentcourse_id); + map.put("page",page); + sendJsonPostParamNoResultMD5(Url.listExcellencourseComment,map,101); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + + } + + class GroupHolder + { + TextView tv_n,bt_hf,tv_con,tv_time; + ImageView im_e; + MaterialRatingBar ratingbar; + public GroupHolder(View view) { + tv_n=view.findViewById(R.id.tv_n); + bt_hf=view.findViewById(R.id.bt_hf); + tv_con=view.findViewById(R.id.tv_con); + tv_time=view.findViewById(R.id.tv_time); + im_e=view.findViewById(R.id.im_e); + ratingbar=view.findViewById(R.id.ratingbar); + } + } + class ChildHolder + { + TextView tv_n,bt_hf,tv_con,tv_time; + ImageView im_e; + MaterialRatingBar ratingbar; + RelativeLayout line; + public ChildHolder(View view) { + tv_n=view.findViewById(R.id.tv_n); + bt_hf=view.findViewById(R.id.bt_hf); + tv_con=view.findViewById(R.id.tv_con); + tv_time=view.findViewById(R.id.tv_time); + im_e=view.findViewById(R.id.im_e); + ratingbar=view.findViewById(R.id.ratingbar); + line=view.findViewById(R.id.line); + } + } + public class EvaExpandAdapter extends BaseExpandableListAdapter + { + + private Context context; + private List list; + public EvaExpandAdapter(Context context, List list) { + this.context=context; + this.list=list; + } + private Handler handler = new Handler(Looper.getMainLooper()){ + @Override + public void handleMessage(Message msg) { + notifyDataSetChanged();//更新数据 + if(list==null||expandableListView==null) + return; + //必须重新伸缩之后才能更新数据 + for (int i = 0; i < getGroupCount(); i++) { + expandableListView.collapseGroup(i); + } + for (int i = 0; i < getGroupCount(); i++) { + expandableListView.expandGroup(i); + } + super.handleMessage(msg); + } + }; + + + /*供外界更新数据的方法*/ + public void refresh(CommentExpandableListView mExpandableListView, List list){ + handler.sendMessage(new Message()); + + } + + + @Override + public int getGroupCount() { + return list.size(); + } + + @Override + public int getChildrenCount(int groupPosition) { + if(list.get(groupPosition).getExcellentcourse_comment_list()!=null) + return list.get(groupPosition).getExcellentcourse_comment_list().size(); + else + return 0; + } + + @Override + public Object getGroup(int groupPosition) { + return list.get(groupPosition); + } + + @Override + public Object getChild(int groupPosition, int childPosition) { + return list.get(groupPosition).getExcellentcourse_comment_list().get(childPosition); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { + GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.first_eva_item, parent, false); + groupHolder = new GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (GroupHolder) convertView.getTag(); + } + if("0".equals(list.get(groupPosition).getUser_status())) + { + groupHolder.tv_n.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + groupHolder.tv_n.setText(list.get(groupPosition).getUser_name()); + } + + groupHolder.tv_con.setText(list.get(groupPosition).getComment()); + if("1".equals(list.get(groupPosition).getState())) + { + groupHolder.im_e.setVisibility(View.VISIBLE); + } + else + { + groupHolder.im_e.setVisibility(View.GONE); + } + groupHolder.bt_hf.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if("0".equals(list.get(groupPosition).getUser_status())) + { + ToastUtil.showMessage("该评论无法回复"); + return; + } + p_id=list.get(groupPosition).getId(); + Intent intent=new Intent(getActivity(), SettingFeedbackActivity.class); + intent.putExtra("name",list.get(groupPosition).getUser_name()); + intent.setType("commentC"); + startActivityForResult(intent,201); + } + }); + if(!StringUtil.isEmpty(list.get(groupPosition).getStar())) + { + groupHolder.ratingbar.setRating((float)(Integer.valueOf(list.get(groupPosition).getStar())/2.0)); + groupHolder.ratingbar.setIsIndicator(true); + } + + groupHolder.tv_con.setText(list.get(groupPosition).getComment()); + groupHolder.tv_time.setText(list.get(groupPosition).getCreate_date()); + return convertView; + } + + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { + ChildHolder childHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.second_eva_item, parent, false); + childHolder = new ChildHolder(convertView); + convertView.setTag(childHolder); + }else { + childHolder = (ChildHolder) convertView.getTag(); + } + if(isLastChild&&groupPosition!=getGroupCount()-1) + { + childHolder.line.setVisibility(View.VISIBLE); + } + else + { + childHolder.line.setVisibility(View.GONE); + } + if("0".equals(list.get(groupPosition).getExcellentcourse_comment_list().get(childPosition).getUser_status())) + { + childHolder.tv_n.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + childHolder.tv_n.setText(list.get(groupPosition).getExcellentcourse_comment_list().get(childPosition).getUser_name()); + } + + + childHolder.tv_con.setText(list.get(groupPosition).getExcellentcourse_comment_list().get(childPosition).getComment()); + childHolder.tv_time.setText(list.get(groupPosition).getExcellentcourse_comment_list().get(childPosition).getCreate_date()); + return convertView; + } + + @Override + public boolean isChildSelectable(int groupPosition, int childPosition) { + return false; + } + + } + + + public void sendJsonPostParamNoResultMD5(final String postUrl, final Map param, final int callType) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign1(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); +// Log.d("gdxz","string "+string); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)||"106".equals(optString)||"1".equals(optString)) { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + mHandler.sendMessage(msg); + }else { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + mHandler.sendMessage(msg); +// mHandler.sendEmptyMessage(0); + } + }else { + mHandler.sendEmptyMessage(0); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + mHandler.sendEmptyMessage(404); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + } + }); + + } + CourseEvaBean courseEvaBean; + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + +// closeProgressDialog(); + switch (msg.what){ + + case 102: + + try { + JSONObject jsonObject=new JSONObject((String)msg.obj); + if("200".equals(jsonObject.getString("code"))) + { + page=1; + EvaDetail(excellentcourse_id,page+""); + } + ToastUtil.showToast(jsonObject.getString("message")); + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + + case 0: + ToastUtil.showToast((String)msg.obj); + break; + + + case 101: + courseEvaBean=GsonTools.fromGsonToBean((String)msg.obj,CourseEvaBean.class); + + if ("200".equals(courseEvaBean.getCode())&&courseEvaBean.getData()!=null) + { + + if(page==1) + { + list.clear(); + if(adapter!=null) + adapter.refresh(expandableListView,list); + + } + list.addAll(courseEvaBean.getData().getList()); +// if(isAllEva) +// { +// Iterator it=list.iterator(); +// while (it.hasNext()) { +// CourseEvaBean.EvaBean bean1=it.next(); +// if("0".equals(bean1.getExamine_status())) +// { +// if(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean1.getUser_uuid())){ +// continue; +// } +// else +// { +// it.remove(); +// } +// } +// else +// { +// Iterator subit=bean1.getExcellentcourse_comment_list().iterator(); +// while (subit.hasNext()) { +// CourseEvaBean.sbuEvaBean bean2 = subit.next(); +// if ("0".equals(bean2.getExamine_status())) { +// if (SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean2.getUser_uuid())) { +// continue; +// } else { +// subit.remove(); +// } +// } +// } +// +// } +// } +// } + if (adapter == null) { + initExpandableListView(); + + } else { + adapter.refresh(expandableListView,list); + } + + int totlpage=courseEvaBean.getData().getPages(); + + + + if(page==1) + { + refreshLayout.finishRefresh(); + if(!isAllEva&&list==null||list.size()<1) + { + tv_none.setVisibility(View.VISIBLE); + } + else + { + tv_none.setVisibility(View.GONE); + } + } + else + { + if(courseEvaBean.getData().getList()==null||courseEvaBean.getData().getList().size()==0) + { + ToastUtil.showMessage("没有更多了"); + refreshLayout.setEnableLoadMore(false); + page--; + }else + { + refreshLayout.setEnableLoadMore(true); + } + + + refreshLayout.finishLoadMore(); + } + if(totlpage==1||totlpage map = new HashMap<>(); + map.put("excellentcourse_id",excellentcourse_id); + map.put("comment",comment); + map.put("p_id",p_id); + map.put("star",star); + map.put("type",type); + sendJsonPostParamNoResultMD5(Url.addExcellencourseComment,map,102); + + } + + @Override + public void onDetach() { + super.onDetach(); + adapter=null; + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KePuPublisheingFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KePuPublisheingFragment.java new file mode 100644 index 0000000..776097e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KePuPublisheingFragment.java @@ -0,0 +1,337 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewStub; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.KePuDetailActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PatientVideoActivity; +import cn.shangyu.gdxzExpert.adapter.PublishingAdapter; +import cn.shangyu.gdxzExpert.adapter.ScienceListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ScienceListBean; +import cn.shangyu.gdxzExpert.bean.ScienceListBean.ScienceData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class KePuPublisheingFragment extends BaseFragment implements + OnItemClickListener,OnCallBackFromNet { + + private PublishingAdapter mAdapter; + private ArrayList mList = new ArrayList(); + private PullToRefreshListView ptrLv; + + private String url = Url.getpolularScienceArticleListIsNotisThroughNew; + + public int page = 1; + private HttpHandler httpHandler; + private String uuid; + private Button bt_patient_video; + public interface OnKepuPublishingRefreshListener { + void onKepuPublishingRefresh(String url); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_kepu); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未提交科普"); + bt_patient_video = (Button) view.findViewById(R.id.bt_patient_video); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getScienceList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getScienceList(url); + } + }); + bt_patient_video.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intentvideo = new Intent(mActivity, PatientVideoActivity.class); + startActivity(intentvideo); + } + }); + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getScienceList(url); + } + + public void getScienceList(final String loadUrl) { + // 封装参数 + + Map param = new HashMap<>(); + param.put("expert_uuid", uuid); + param.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(loadUrl, param, 1, this); + +// RequestParams params = new RequestParams(); +// params.addBodyParameter("expert_uuid", uuid); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// if (page == 1) { +// SharePrefUtil.saveString(mActivity, loadUrl, +// info.result); +// // // 保存缓存的时间 +// // SharePrefUtil.saveString( +// // mActivity, +// // "key_kepu_fragment_cache_date", +// // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); +// } +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("getScienceList().onFailure = " + arg1); +// onLoaded(); +// if (page > 1) { +// page--; +// } +// // 显示网络错误布局 +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + ScienceListBean bean = GsonTools.fromGsonToBean(result, + ScienceListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data); + } + } else { + mList.addAll(bean.data); + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new PublishingAdapter(mActivity, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多科普了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + ScienceData data = (ScienceData) parent.getAdapter().getItem(position); + Intent intent = new Intent(mActivity, KePuDetailActivity.class); + // title = intent.getStringExtra("title"); + // time = intent.getStringExtra("time"); + // content = intent.getStringExtra("content"); + // uuid = intent.getStringExtra("articleUuid"); + intent.putExtra("title", data.topic); + intent.putExtra("time", data.submitDate); + intent.putExtra("content", data.content); + intent.putExtra("isOriginal", data.isOriginal+""); + intent.putExtra("articleUuid", data.getUuid()); + mActivity.startActivityForResult(intent, Constant.CONTRIBUTE_CODE2); + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + + + if (resultCode != Activity.RESULT_OK) { + return; + } else { + switch (requestCode) { + case Constant.CONTRIBUTE_CODE: + if (data != null) { + getScienceList(url); + } + break; + + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + if (page == 1) { + SharePrefUtil.saveString(mActivity, url, + resultJson); + // // 保存缓存的时间 + // SharePrefUtil.saveString( + // mActivity, + // "key_kepu_fragment_cache_date", + // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(resultJson); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KeepEducationFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KeepEducationFragment.java new file mode 100644 index 0000000..55e607c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KeepEducationFragment.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_EDUCATION_CLASS_QUALITY; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_TAB_EDUCATION_COURSEWARE; + +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; + +import com.umeng.analytics.MobclickAgent; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CasediscussionActivity; +import cn.shangyu.gdxzExpert.activity.CourseActivity; +import cn.shangyu.gdxzExpert.activity.CoursewareActivity; +import cn.shangyu.gdxzExpert.activity.GDLiveBroadcastActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.MyCicleActivity; +import cn.shangyu.gdxzExpert.activity.NewLessonsActivity; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/9. + */ + +public class KeepEducationFragment extends BaseFragment implements View.OnClickListener{ + private View view; + private RelativeLayout rl_hudong,rl_jingpini; + private RelativeLayout rl_kejian; + private RelativeLayout rl_casesuions; + private RelativeLayout rl_video; + private RelativeLayout rl_lczhaomu; + private RelativeLayout rl_office_work; + private RelativeLayout rl_casediscussion; + private MainActivity mainActivity; + + @Override + public View onCreateSuccessedView() { + mainActivity = (MainActivity) getActivity(); + // 检查 Activity 和 layout 是否为 null,防止 NullPointerException + if (mainActivity != null && mainActivity.layout != null && mainActivity.titleBarParams != null) { + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) mainActivity.layout.getLayoutParams(); + p.setMargins(0,mainActivity.titleBarParams.height, 0, 0); + mainActivity.layout.requestLayout(); + } + view = UIUtils.inflate(R.layout.fragment_keepeducation); + initview(); + initOnClick(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("继续教育"); + } + + private void initOnClick() { + rl_hudong.setOnClickListener(this); + rl_jingpini.setOnClickListener(this); + rl_kejian.setOnClickListener(this); + rl_casesuions.setOnClickListener(this); + rl_video.setOnClickListener(this); + rl_lczhaomu.setOnClickListener(this); + rl_office_work.setOnClickListener(this); + rl_casediscussion.setOnClickListener(this); + } + + private void initview() { + rl_hudong = view.findViewById(R.id.rl_hudong); + rl_jingpini=view.findViewById(R.id.rl_jingpini); + rl_kejian = view.findViewById(R.id.rl_kejian); + rl_casesuions = view.findViewById(R.id.rl_casesuions); + rl_video = view.findViewById(R.id.rl_video); + rl_lczhaomu = view.findViewById(R.id.rl_lczhaomu); + rl_office_work = view.findViewById(R.id.rl_office_work); + rl_casediscussion = view.findViewById(R.id.rl_casediscussion); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_jingpini) {//肝胆精品课 + MobclickAgent.onEvent(mActivity,EXPERT_TAB_EDUCATION_CLASS_QUALITY); + startActivity(new Intent(mActivity, CourseActivity.class)); + } else if (id == R.id.rl_hudong) {//现代肝病学院 + startActivity(new Intent(mActivity, GDLiveBroadcastActivity.class)); + } else if (id == R.id.rl_kejian) {//肝胆课件 + MobclickAgent.onEvent(mActivity,EXPERT_TAB_EDUCATION_COURSEWARE); + startActivity(new Intent(mActivity, CoursewareActivity.class)); + } else if (id == R.id.rl_casesuions) {//病例交流 + startActivity(new Intent(mActivity, CasediscussionActivity.class)); + } else if (id == R.id.rl_video) {//经典病例 + startActivity(new Intent(mActivity, MyCicleActivity.class)); + } else if (id == R.id.rl_lczhaomu) {//肝胆视频 + startActivity(new Intent(mActivity, VideoActivity.class)); + } else if (id == R.id.rl_office_work) {//精品课程 + startActivity( new Intent(mActivity, QualityCourseActivity.class)); + } else if (id == R.id.rl_casediscussion) {//新手教程 + startActivity(new Intent(mActivity, NewLessonsActivity.class)); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KepuPublishedFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KepuPublishedFragment.java new file mode 100644 index 0000000..bd0a443 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/KepuPublishedFragment.java @@ -0,0 +1,363 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PatientVideoActivity; +import cn.shangyu.gdxzExpert.adapter.ScienceListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ScienceListBean; +import cn.shangyu.gdxzExpert.bean.ScienceListBean.ScienceData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +/** + * 功能说明:我讲科普fragment 类名称:KepuFragment 类描述: 创建人:苏三元 时间:2015-9-24 下午1:44:42 + * 修改人:@author JIXiao + */ +public class KepuPublishedFragment extends BaseFragment implements OnItemClickListener,OnCallBackFromNet { + private ScienceListAdapter mAdapter; + private ArrayList mList = new ArrayList(); + private PullToRefreshListView ptrLv; + private String url = Url.getScienceListNew; + + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + private Button bt_patient_video; + public interface OnKepuRefreshListener { + void onKepuRefresh(String url); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_kepu); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + bt_patient_video = (Button) view.findViewById(R.id.bt_patient_video); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未提交科普"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getScienceList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getScienceList(url); + } + }); + bt_patient_video.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intentvideo = new Intent(mActivity, PatientVideoActivity.class); + startActivity(intentvideo); + } + }); + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 当缓存时间大于5分钟则刷新数据 + // String time = SharePrefUtil.getString(mActivity, + // "key_kepu_fragment_cache_date", ""); + // if (!StringUtil.isBland(time)) { + // int minute = DateUtil.compareTime(time, 5); + // if (minute > 5) { + // getScienceList(url); + // } + // } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getScienceList(url); + } + + public void getScienceList(final String loadUrl) { + // 封装参数 + Map param = new HashMap<>(); + param.put("expertUuid", uuid); + param.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(url, param, 1, this); + + +// RequestParams params = new RequestParams(); +// params.addBodyParameter("expertUuid", uuid); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// LogUtil.d("getScienceList().onSuccess info.result = " +// + info.result); +// if (page == 1) { +// SharePrefUtil.saveString(mActivity, loadUrl, +// info.result); +// // 保存缓存的时间 +// SharePrefUtil.saveString( +// mActivity, +// "key_kepu_fragment_cache_date", +// DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); +// } +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("getScienceList().onFailure = " + arg1); +// onLoaded(); +// if (page > 1) { +// page--; +// } +// // 显示网络错误布局 +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + ScienceListBean bean = GsonTools.fromGsonToBean(result, + ScienceListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data); + } + } else { + mList.addAll(bean.data); + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new ScienceListAdapter(mActivity, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多科普了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + ScienceData data = (ScienceData) parent.getAdapter().getItem(position); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + data.path); + // intent.putExtra("title", data.topic); + intent.putExtra("title", "科普详情"); + intent.putExtra("kepuuuid", data.uuid); + intent.putExtra("kepuagreenum", data.agreenum); + intent.putExtra("kepureadnum", data.readnum); + intent.putExtra("newsTitle", data.topic); + intent.putExtra("summary", data.summary); + intent.putExtra("imageUrl", Url.urlHtml + data.imgPath); + intent.putExtra("flag", 2); + // startActivity(intent); + startActivityForResult(intent, 112); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == 112) { + String uuid = data.getStringExtra("uuid"); + if (mList != null) { + for (int i = 0; i < mList.size(); i++) { + if (uuid.equals(mList.get(i).getUuid())) { + mList.get(i).setAgreenum( + data.getStringExtra("agreenum")); + mList.get(i).setReadnum(data.getStringExtra("readnum")); + } + } + } + mAdapter.notifyDataSetChanged(); + } + + if (resultCode != Activity.RESULT_OK) { + return; + } else { + switch (requestCode) { + case Constant.CONTRIBUTE_CODE: + if (data != null) { + getScienceList(url); + } + break; + + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + + if (page == 1) { + SharePrefUtil.saveString(mActivity, url, + resultJson); + // 保存缓存的时间 + SharePrefUtil.saveString( + mActivity, + "key_kepu_fragment_cache_date", + DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(resultJson); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/LibraryListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/LibraryListFragment.java new file mode 100644 index 0000000..dd8f0b4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/LibraryListFragment.java @@ -0,0 +1,222 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.List; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.LibraryListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.LibraryListBean; +import cn.shangyu.gdxzExpert.bean.LibraryListBean.LibraryData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +/** + * LibraryListFragment.java + * + * @author lifuang + * @date 2015-11-4 下午1:45:08 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:权威速递、常用工具列表 + */ +public class LibraryListFragment extends BaseFragment implements OnItemClickListener { + + private PullToRefreshListView ptrLv; + private TextView load_empty; + + private LibraryListAdapter mAdapter; + private List libraryList = new ArrayList<>(); + + private String url; + private int type; + + public static LibraryListFragment newInstance(int type) { + LibraryListFragment mFragment = new LibraryListFragment(); + Bundle bundle = new Bundle(); + bundle.putInt("type", type); + mFragment.setArguments(bundle); + return mFragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + type = getArguments().getInt("type"); +// url = getArguments().getString("loadUrl"); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_library_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 设置只有下拉刷新 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + getLibraryList(url); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + */ + private void initData() { + ptrLv.setMode(Mode.PULL_FROM_START); + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result, false); + } else { + // 显示加载框 + showLoadingProgress(); + } + getLibraryList(url); + } + + /** + * 获取书架列表 + * @param loadUrl + */ + private void getLibraryList(String loadUrl) { + if (BuildConfig.DEBUG) + LogUtil.i("==================== getLibraryList.loadUrl = " + loadUrl); + + if (StringUtil.isEmpty(loadUrl)) { + onLoaded(); + load_empty.setVisibility(View.VISIBLE); + return; + } + HttpHelper.loadData(HttpMethod.POST, loadUrl, null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess = " + info); + SharePrefUtil.saveString(mActivity, url, info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + onLoaded(); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + + LibraryListBean bean = GsonTools.fromGsonToBean(result, LibraryListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + ptrLv.setEmptyView(load_empty); + return; + } + // 初始化列表的数据 + libraryList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) {// bean.data.news + load_empty.setVisibility(View.VISIBLE); + } else { + load_empty.setVisibility(View.GONE); + libraryList.addAll(bean.data); + + } + + if (mAdapter == null) { + mAdapter = new LibraryListAdapter(mActivity, libraryList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + if (type == 1) { + + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MedicineBookFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MedicineBookFragment.java new file mode 100644 index 0000000..0e6179c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MedicineBookFragment.java @@ -0,0 +1,350 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import org.apache.http.message.BasicNameValuePair; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyLibraryActivity; +import cn.shangyu.gdxzExpert.activity.YKMediconActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MedicineBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.ConfigCacheUtil; +import cn.shangyu.gdxzExpert.utils.ConfigCacheUtil.ConfigCacheModel; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CustomClearEditText; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * MedicineBookFragment.java + * + * @author gaofei + * @date 2015-9-8 下午3:50:28 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:用药宝典的fragment + */ +public class MedicineBookFragment extends BaseFragment implements + OnItemClickListener, OnRefreshListener2, + OnCheckedChangeListener { + + private CustomProgressDialog pd; + private PullToRefreshListView lv_listview;// 下拉刷新的listview。 + private MedicineBean dataBean = null; + + private View view; + private Activity mActivity; + private GridView mGv_tag; + private int page = 1;// 页数默认1页 + private RelativeLayout load_empty;// 显示空页面 + private TextView tv_empty; + private TagsAdapter mAdapter; + private CustomClearEditText mEt_search; + private TextView mIv_search; + private List tags = new ArrayList(); + private List tags2 = new ArrayList(); + private RadioGroup mRg; + private RadioButton mRb_medicine,mRb_interaction; + public boolean interaction = false; + /** + * 处理联网请求后的数据 + */ + Handler handler = new Handler() { + public void handleMessage(Message msg) { + if (pd != null) { + pd.dismiss(); + } + switch (msg.what) { + + case 1: + String str = (String) msg.obj; + JSONObject objs; + JSONArray jsonArray = null; + try { + objs = new JSONObject(str); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + jsonArray = objs.getJSONArray("data"); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject data = jsonArray.getJSONObject(i); + String strs = data.getString("name"); + tags2.add(strs); + tags.add(strs); + } + mAdapter = new TagsAdapter(); + mGv_tag.setAdapter(mAdapter); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + break; + case 100: + ToastUtil.showMessage("网络异常"); + + break; + } + }; + + }; + + @Override + public void onAttach(Activity activity) { + // TODO Auto-generated method stub + super.onAttach(activity); + mActivity = activity; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + view = View.inflate(mActivity, R.layout.fragment_medicine_book, null); + + initView(); + String searchE = ConfigCacheUtil.getUrlCache("searchTexr", + ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT, mActivity); + if (searchE != null) { + mEt_search.setText(searchE); + } + + String result = ConfigCacheUtil.getUrlCache(Url.medicine, + ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT, mActivity); + + if (result != null) { + Message msg = Message.obtain(); + msg.obj = result; + msg.what = 2; + handler.sendMessage(msg); + } + interaction = false; + + if(MyLibraryActivity.isdrug){ + requestData(); + }else{ + mRb_interaction.setChecked(true); + } + initListener(); + return view; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + /** + * 初始化控件 + */ + private void initView() { + + mGv_tag = (GridView) view.findViewById(R.id.gv_medicine_tag); + mGv_tag.setOnItemClickListener(this); + mEt_search = (CustomClearEditText) view + .findViewById(R.id.et_book_expert); + mIv_search = (TextView) view.findViewById(R.id.tv_public_ser); + load_empty = (RelativeLayout) view.findViewById(R.id.empty); + tv_empty = (TextView) view.findViewById(R.id.tv_empty); + mRg = (RadioGroup) view.findViewById(R.id.rl_search); + mRb_medicine = (RadioButton) view.findViewById(R.id.bt_medicine); + mRb_interaction=(RadioButton) view.findViewById(R.id.bt_interaction); + tv_empty.setText("暂无药品说明"); + + } + + private void initListener() { + // TODO Auto-generated method stub + mRg.setOnCheckedChangeListener(this); + mEt_search.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + String getTag = mEt_search.getText().toString(); + if (!StringUtil.isEmpty(getTag)) { + Intent intent = new Intent(mActivity,YKMediconActivity.class); + intent.putExtra("seerchName", getTag); + intent.putExtra("interaction", interaction); + startActivity(intent); + + } else { + ToastUtil.showMessage("请输入药品名"); + } + + } + return false; + } + }); + mIv_search.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + String getTag = mEt_search.getText().toString(); + if (!StringUtil.isEmpty(getTag)) { + Intent intent = new Intent(mActivity,YKMediconActivity.class); + intent.putExtra("seerchName", getTag); + intent.putExtra("interaction", interaction); + startActivity(intent); + } else { + ToastUtil.showMessage("请输入药品名"); + } + } + }); + + } + + // String urls="http://sojn.ngrok.cc/app/patient/medicineByName"; + public void requestData() { + pd = new CustomProgressDialog(mActivity, "请稍候"); + pd.show(); + new Thread() { + public void run() { + try { + List parameters = new ArrayList(); + HttpResult httpResult = HttpHelper.post( + Url.getMedicineTagListNoPage, parameters);// 请求网络 + String result = httpResult.getString();// str为服务器返回的json串 + if (result != null) { + Message msg = Message.obtain(); + msg.obj = result; + msg.what = 1; + handler.sendMessage(msg); + } else { + handler.sendEmptyMessage(100); + } + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + handler.sendEmptyMessage(100); + } + }; + }.start(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + String getTag = tags.get(position); + mEt_search.setText(getTag); + Intent intent = new Intent(mActivity, YKMediconActivity.class); + intent.putExtra("seerchName", getTag); + intent.putExtra("interaction", interaction); + startActivity(intent); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public class TagsAdapter extends BaseAdapter { + @Override + public int getCount() { + // TODO Auto-generated method stub + return tags.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return tags.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(tags.get(position)); + // if (TagPosition != null && TagPosition.contains(position + "")) { + // tv_item.setEnabled(true); + // } else { + tv_item.setEnabled(false); + // } + + return view; + } + + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + switch (checkedId) { + case R.id.bt_medicine: + interaction = false; + mEt_search.setText(""); + tags.addAll(tags2); + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + }else{ + requestData(); + } + + break; + case R.id.bt_interaction: + interaction = true; + mEt_search.setText(""); + tags.clear(); + if (mAdapter != null) { + mAdapter.notifyDataSetChanged(); + } + break; + default: + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MeetingFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MeetingFragment.java new file mode 100644 index 0000000..96d0961 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MeetingFragment.java @@ -0,0 +1,986 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.Url.getNewMeetingList; +import static cn.shangyu.gdxzExpert.utils.Url.meetingListBySearchNew; + +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.drawable.Drawable; +import android.os.AsyncTask; +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GDEventDetailActivity; +import cn.shangyu.gdxzExpert.activity.HistoryActivity; +import cn.shangyu.gdxzExpert.activity.HistoryMettingActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.SettingZhiboFeedbackActivity; +import cn.shangyu.gdxzExpert.adapter.MeetingAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.MeetingBean; +import cn.shangyu.gdxzExpert.bean.MeetingBean.MeatingList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author ZHAODeWei 肝胆会议 2016 9 23添加直播 + */ +public class MeetingFragment extends BaseFragment implements + OnItemClickListener,OnClickListener,OnCallBackFromNet { + View view; + private PullToRefreshListView ptrLv; + private String url = getNewMeetingList; + + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + private List mList = new ArrayList(); + MeetingAdapter mAdapter; + private Button mBt_send_feed; +// private DragView mBt_send_feed; + private GridView gv_province; + private DrawableCenterButtonR dcb_address,dcb_time,dcb_class,dcb_live; + private ListView lv_time,lv_class; + private ArrayList list_time,list_class; + private int time_position = 13,class_position =13;//初始时间和地点 + private String chooseProvince ="" ;//选择的省份 + private int choose_time,choose_position;//选择的时间和地点 + private boolean is_live = true;//肝胆直播 + private String status = "";//肝胆直播 + private float X; + private float Y; + private ImageView last_meet; + private MainActivity mainActivity; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + if(getActivity() instanceof MainActivity) + { + mainActivity = (MainActivity) getActivity(); + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) mainActivity.layout.getLayoutParams(); + p.setMargins(0,mainActivity.titleBarParams.height, 0, 0); + mainActivity.layout.requestLayout(); + } + + view = UIUtils.inflate(R.layout.activity_meeting1); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + gv_province = (GridView) view.findViewById(R.id.gv_province); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mBt_send_feed = view.findViewById(R.id.bt_send_feed); + last_meet=view.findViewById(R.id.last_meet); + dcb_time = (DrawableCenterButtonR) view.findViewById(R.id.dcb_time); + dcb_address = (DrawableCenterButtonR) view.findViewById(R.id.dcb_address); + dcb_class = (DrawableCenterButtonR) view.findViewById(R.id.dcb_class); + dcb_live = (DrawableCenterButtonR) view.findViewById(R.id.dcb_live); + lv_time = (ListView) view.findViewById(R.id.lv_time); + lv_class = (ListView) view.findViewById(R.id.lv_class); + + + + dcb_time.setOnClickListener(this); + dcb_address.setOnClickListener(this); + dcb_class.setOnClickListener(this); + dcb_live.setOnClickListener(this); + last_meet.setOnClickListener(this); + + mBt_send_feed.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, + SettingZhiboFeedbackActivity.class); + startActivity(intent); + } + }); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无会议预告"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + String class_; + String time_; + if (class_position==13||class_position==14) { + class_ = ""; + }else { + class_ = choose_position+""; + } + if (time_position == 13||time_position == 14){ + time_ = ""; + }else { + time_ = choose_time+""; + } + meetingListBySearchNew(chooseProvince,page+"",class_,status,time_); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + String class_; + String time_; + if (class_position==13||class_position==14) { + class_ = ""; + }else { + class_ = choose_position+""; + } + if (time_position == 13||time_position == 14){ + time_ = ""; + }else { + time_ = choose_time+""; + } + meetingListBySearchNew(chooseProvince,page+"",class_,status,time_); + } + }); + initData(); + new InitAreaTask().execute(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("会议直播"); + } + + private void meetingListBySearchNew1(String location, String page, String type, String status, String month) { +// LogUtil.e("location = "+location); +// LogUtil.e("page = "+page); +// LogUtil.e("type = "+type); +// LogUtil.e("status = "+status); +// LogUtil.e("month"+month); + showLoadingProgress(); + Map param = new HashMap(); + param.put("page", page); + param.put("location", location); +// param.put("page", page); +// param.put("type", type); + param.put("status", status); + param.put("month", month); +// sendJsonPostParamtoNetSignMD5(Url.meetingListBySearchNew, param, 01, this); + sendJsonPostParamtoNetSignMD5(meetingListBySearchNew, param, 01, this); + } + + private void meetingListBySearchNew(String location,String page,String type,String status,String month) { +// LogUtil.e("location = "+location); +// LogUtil.e("page = "+page); +// LogUtil.e("type = "+type); +// LogUtil.e("status = "+status); +// LogUtil.e("month"+month); + showLoadingProgress(); + Map param = new HashMap(); + param.put("page", page); +// param.put("location", location); +// param.put("page", page); +// param.put("type", type); +// param.put("status", status); +// param.put("month", month); +//// Log.i("TAG", "location = "+location+",type = "+type+",status = "+status+",month = "+month); +// sendJsonPostParamtoNetSignMD5(Url.meetingListBySearchNew, param, 01, this); + sendJsonPostParamtoNetSignMD5(url + "V2", param, 01, this); + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + //String result = SharePrefUtil.getString(mActivity, url + "1", null);//wcx旧版 + String result = SharePrefUtil.getString(mActivity, url + "V2", null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + String class_; + String time_; + if (class_position==13||class_position==14) { + class_ = ""; + }else { + class_ = choose_position+""; + } + if (time_position == 13||time_position == 14){ + time_ = ""; + }else { + time_ = choose_time+""; + } + meetingListBySearchNew(chooseProvince,page+"",class_,status,time_); + //会议时间 + lv_time.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + time_position = position; + choose_time = position; + lv_time.setVisibility(View.GONE); + page = 1; + if (position==0) { + time_position = 14; + if (class_position==13||class_position==14) { + meetingListBySearchNew1(chooseProvince,page+"","",status,""); + }else { + meetingListBySearchNew1(chooseProvince,page+"",choose_position+"",status,""); + } + }else{ + choose_time = position - 1; + if (class_position==13||class_position==14) { + meetingListBySearchNew1(chooseProvince,page+"","",status,choose_time+""); + }else { + meetingListBySearchNew1(chooseProvince,page+"",choose_position+"",status,choose_time+""); + } + } + + + chengeImg(dcb_time,list_time.get(position)); + } + }); + //会议地点 + gv_province.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + gv_province.setVisibility(View.GONE); + String class_; + String time_; + if (class_position==13||class_position==14) { + class_ = ""; + }else { + class_ = choose_position+""; + } + if (time_position == 13||time_position == 14){ + time_ = ""; + }else { + time_ = choose_time+""; + } + + String substring = province.get(position).substring(0, 2); + chooseProvince = substring; + if (position == 0) { + chooseProvince = ""; + meetingListBySearchNew1("",page+"",class_,status,time_); + }else { + meetingListBySearchNew1(substring,page+"",class_,status,time_); + } + String shownameString; + if (province.get(position).length()>3) { + shownameString = province.get(position).substring(0, 3)+"..."; + }else { + shownameString = province.get(position); + } + chengeImg(dcb_address,shownameString); + } + }); + //会议类型 + lv_class.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + page = 1; + class_position = position; + choose_position = position; + if (position == 5) { + choose_position = 0; + } + if (position == 0) { + class_position = 14; + if (time_position == 13||time_position == 14) { + meetingListBySearchNew(chooseProvince,page+"","",status,""); + }else{ + meetingListBySearchNew(chooseProvince,page+"","",status,choose_time+""); + } + }else { + if (time_position == 13||time_position == 14) { + meetingListBySearchNew(chooseProvince,page+"",choose_position+"",status,""); + }else{ + meetingListBySearchNew(chooseProvince,page+"",choose_position+"",status,choose_time+""); + } + } + + lv_class.setVisibility(View.GONE); + chengeImg(dcb_class,list_class.get(position)); + } + }); + + } + + public List DatasList; + + public void getPosition() { + DatasList = new ArrayList(); + int count = 0; + for (int i = 0; i < mList.size(); i++) { + if (!DatasList.contains(mList.get(i).getBegin_date() + .substring(0, 7))) { + DatasList.add(mList.get(i).getBegin_date().substring(0, 7)); + // Positions.add(i + ""); + count = 0; + mList.get(i).setCount(count); + } else { + count++; + mList.get(i).setCount(count); + } + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new MeetingAdapter(mActivity, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + MeetingBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, MeetingBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// if (bean != null) { +// if (StringUtil.isOneToCode(bean.code)) { +// ToastUtil.showToast(bean.message); +// // 显示空布局 +// ptrLv.setEmptyView(ll_empty); +// // 完成刷新 +// onLoaded(); +// return; +// } +// } else { +// ptrLv.setEmptyView(ll_empty); +// // 完成刷新 +// onLoaded(); +// return; +// } + if (bean == null) + { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + getPosition(); + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.list.size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多会议了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.pages; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + +/* public void getMeetingList(final String url) { + + meetingListBySearchNew("",page+"","","",""); + +// RequestParams params = new RequestParams(); +// params.addBodyParameter("expertUuid", uuid); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, url, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// LogUtil.d("getScienceList().onSuccess info.result = " +// + info.result); +// if (page == 1) { +// SharePrefUtil.saveString(mActivity, url + "1", +// info.result); +// // // 保存缓存的时间 +// // SharePrefUtil.saveString( +// // mActivity, +// // "key_kepu_fragment_cache_date", +// // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); +// } +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("getScienceList().onFailure = " + arg1); +// onLoaded(); +// if (page > 1) { +// page--; +// } +// // 显示网络错误布局 +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } +*/ + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + + + // TODO Auto-generated method stub + // bookUuid = getIntent().getStringExtra("uuid"); + // url = getIntent().getStringExtra("url"); + // newsTitle = getIntent().getStringExtra("newsTitle");// 新闻的标题 + // summary = getIntent().getStringExtra("summary");// 新闻的摘要 + // imageUrl = getInten + Intent intent = new Intent(mActivity, GDEventDetailActivity.class); + intent.putExtra("newsTitle", mList.get(position - 1).getTitle()); + //intent.putExtra("url", Url.urlHtml + mList.get(position - 1).getPath());wcx旧版 + intent.putExtra("url", mList.get(position - 1).getPath()); + intent.putExtra("summary", mList.get(position - 1).getContent()); + intent.setType("meeting"); + startActivity(intent); + needreportDetail("会议直播", mList.get(position - 1).getTags(),mList.get(position - 1).getTitle()); + + } + + // 加载城市数据,耗时操作 + public class InitAreaTask extends AsyncTask { + + public InitAreaTask() { + // showProgressDialog("加载中..."); + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + // closeProgressDialog(); + if (result) { + } else { + ToastUtil.showToast(getActivity().getString(R.string.datafail)); + + } + } + + } + + + // 省市区list + private ArrayList province = new ArrayList(); + private ArrayList> city = new ArrayList>(); + private ArrayList>> county = new ArrayList>>(); + private ArrayList> cityIdList = new ArrayList>(); + private ArrayList>> countyIdList = new ArrayList>>(); + private SQLiteDatabase db; + private ArrayList provinceList; + GridAdapter mProAdapter; + private MeetingTimeAdapter mtimeAdapter,mclassAdapter; + /* + * 实例化城市,从数据库检出城市列表 + */ + private boolean areaData() { + SQLdm s = new SQLdm(); + db = s.openDatabase(mActivity); + provinceList = new ArrayList(); + if (db != null) { + db.beginTransaction(); + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + // cityProvince.setFullName(cursor.getString(cursor.getColumnIndex("fullName"))); + // cityProvince.setParent(cursor.getString(cursor.getColumnIndex("parent"))); + // cityProvince.setTreePath(cursor.getString(cursor.getColumnIndex("treePath"))); + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + // LogUtil.i("省id="+cityProvince.get_id()+"FullName="+cityProvince.getFullName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + // city.setFullName(cursorCity.getString(cursorCity.getColumnIndex("fullName"))); + // city.setParent(cursorCity.getString(cursorCity.getColumnIndex("parent"))); + // city.setTreePath(cursorCity.getString(cursorCity.getColumnIndex("treePath"))); + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + // LogUtil.i("市id="+city.get_id()+"FullName="+city.getFullName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // cityDis.setFullName(cursorDisctict.getString(cursorDisctict.getColumnIndex("fullName"))); + // cityDis.setParent(cursorDisctict.getString(cursorDisctict.getColumnIndex("parent"))); + // cityDis.setTreePath(cursorDisctict.getString(cursorDisctict.getColumnIndex("treePath"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + // LogUtil.i("区id="+cityDis.get_id()+"FullName="+cityDis.getFullName()); + } + // 如果只有市区没有区县,为了不为空,则手动添加“”; + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + // LogUtil.i("moveToNext()="+cursorDisctict.moveToNext() + + // "moveToFirst()=" + cursorDisctict.moveToFirst()); + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交 + db.endTransaction(); + return true; + } else { + return false; + } + } + + // 显示省份跟市区的adapter类 + class GridAdapter extends BaseAdapter { + private ArrayList list; + + public GridAdapter(ArrayList list) { + this.list = list; + } + + public void getDates(ArrayList list) { + this.list = list; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return 0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + if (arg1 == null) { + arg1 = UIUtils.inflate(R.layout.item_province_city); + } + TextView data = (TextView) arg1.findViewById(R.id.tv_pro_city); + data.setText(list.get(arg0)); + return arg1; + } + } + // 显示时间的adapter类 + class MeetingTimeAdapter extends BaseAdapter { + private ArrayList list; + private int position; + + public MeetingTimeAdapter(ArrayList list) { + this.list = list; + } + + public void setPosition(int position) { + this.position = position; + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return list.size(); + } + + @Override + public Object getItem(int arg0) { + // TODO Auto-generated method stub + return list.get(arg0); + } + + @Override + public long getItemId(int arg0) { + // TODO Auto-generated method stub + return arg0; + } + + @Override + public View getView(int arg0, View arg1, ViewGroup arg2) { + // TODO Auto-generated method stub + ViewHolder viewHolder; + if (arg1 == null) { + viewHolder = new ViewHolder(); + arg1 = UIUtils.inflate(R.layout.item_meeting_time); + viewHolder.tv_time = (TextView) arg1.findViewById(R.id.tv_time); + viewHolder. v_line = (View) arg1.findViewById(R.id.v_line); + viewHolder. iv_time = (ImageView) arg1.findViewById(R.id.iv_time); + arg1.setTag(viewHolder); + }else { + viewHolder = (ViewHolder) arg1.getTag(); + } + + viewHolder.tv_time.setText(list.get(arg0).toString()); + if (position==arg0) { + viewHolder.iv_time.setVisibility(View.VISIBLE); + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.top_title)); + viewHolder.tv_time.setTextColor(UIUtils.getColor(R.color.top_title)); + }else{ + viewHolder.v_line.setBackgroundColor(UIUtils.getColor(R.color.devider_line)); + viewHolder.tv_time.setTextColor(UIUtils.getColor(R.color.tab_text_nor)); + viewHolder.iv_time.setVisibility(View.GONE); + } + return arg1; + } + + class ViewHolder{ + TextView tv_time; + View v_line; + ImageView iv_time; + } + } + + + + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.last_meet) { + startActivity(new Intent(mActivity, HistoryMettingActivity.class)); + } else if (id == R.id.dcb_time) { + if (lv_time.getVisibility() == View.VISIBLE) { + lv_time.setVisibility(View.GONE); + return; + } + if (mtimeAdapter == null) { + list_time = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH)+1; + for(int i =month;i<13;i++){ + list_time.add(i+"月"); + + } + for(int i =1;i(); + list_class.add("所有会议"); + list_class.add("全国会议"); + list_class.add("省级会议"); + list_class.add("市级会议"); + list_class.add("国际会议"); + list_class.add("其他会议"); + mclassAdapter = new MeetingTimeAdapter(list_class); + mclassAdapter.setPosition(class_position); + lv_class.setAdapter(mclassAdapter); + } else { + if (class_position==14) { + mclassAdapter.setPosition(0); + }else { + mclassAdapter.setPosition(class_position); + } + + mclassAdapter.notifyDataSetChanged(); + } + lv_time.setVisibility(View.GONE); + gv_province.setVisibility(View.GONE); + lv_class.setVisibility(View.VISIBLE); + } else if (id == R.id.dcb_live) {//原来肝胆直播,现在回放 + Intent intent = new Intent(getActivity(), HistoryActivity.class); + intent.putExtra("title",getResources().getString(R.string.gandanhuifang)); + startActivity(intent); +// String class_; +// String time_; +// if (class_position==13||class_position==14) { +// class_ = ""; +// }else { +// class_ = choose_position+""; +// } +// if (time_position == 13||time_position == 14){ +// time_ = ""; +// }else { +// time_ = choose_time+""; +// } +// if (is_live) { +// status= "1"; +// dcb_live.setTextColor(mActivity.getResources().getColor( +// R.color.top_title)); +// is_live = false; +// }else { +// status= ""; +// dcb_live.setTextColor(mActivity.getResources().getColor( +// R.color.tab_text_nor)); +// is_live = true; +// } +// meetingListBySearchNew1(chooseProvince,page+"",class_,status,time_); +// lv_time.setVisibility(View.GONE); +// gv_province.setVisibility(View.GONE); +// lv_class.setVisibility(View.GONE); + } + } + + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub\ + if (page == 1) { +// SharePrefUtil.saveString(mActivity, url + "1", +// resultJson);wcx旧版 + SharePrefUtil.saveString(mActivity, url + "V2", + resultJson); + // // 保存缓存的时间 + // SharePrefUtil.saveString( + // mActivity, + // "key_kepu_fragment_cache_date", + // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(resultJson); + } + + + public void chengeImg(DrawableCenterButtonR mDb_sort,String text){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MinFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MinFragment.java new file mode 100644 index 0000000..12850fb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MinFragment.java @@ -0,0 +1,318 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_MY_CLASS_QUALITY; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_MY_CLASS_QUALITY_DETAIL; +import static cn.shangyu.gdxzExpert.utils.Url.listMyExcellencourse; + +import android.content.Intent; +import android.graphics.Color; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; + +import com.gyf.immersionbar.ImmersionBar; +import com.umeng.analytics.MobclickAgent; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.OrderListActivity; +import cn.shangyu.gdxzExpert.activity.SearchClassActivity; +import cn.shangyu.gdxzExpert.adapter.CourseMyListAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MyCourseBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link MinFragment#} factory method to + * create an instance of this fragment. + */ +public class MinFragment extends BaseFragment implements AdapterView.OnItemClickListener, OnCallBackFromNet, + RadioGroup.OnCheckedChangeListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +// private static final String ARG_PARAM1 = "param1"; +// private static final String ARG_PARAM2 = "param2"; + +// // TODO: Rename and change types of parameters +// private String mParam1; +// private String mParam2; +// +// public MinFragment() { +// // Required empty public constructor +// } +// +// /** +// * Use this factory method to create a new instance of +// * this fragment using the provided parameters. +// * +// * @param param1 Parameter 1. +// * @param param2 Parameter 2. +// * @return A new instance of fragment MinFragment. +// */ +// // TODO: Rename and change types and number of parameters +// public static MinFragment newInstance(String param1, String param2) { +// MinFragment fragment = new MinFragment(); +// Bundle args = new Bundle(); +// args.putString(ARG_PARAM1, param1); +// args.putString(ARG_PARAM2, param2); +// fragment.setArguments(args); +// return fragment; +// } + + + ImageView top_back_layout,top_right,im_order; + PullToRefreshListView ptrLv; + public View ll_empty; + int page=1; + String state="1"; + RadioButton studyed,studying; + private List data=new ArrayList<>(); + CourseMyListAdapter myListAdapter; + RadioGroup r_stu; + Toolbar mToolbar; + + @Override + public View onCreateSuccessedView() { + // Inflate the layout for this fragment + View view= UIUtils.inflate(R.layout.fragment_min); + mToolbar=view.findViewById(R.id.toolbar); + if(getActivity()!=null) + { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + } + + top_back_layout=view.findViewById(R.id.top_back_layout); + top_right=view.findViewById(R.id.top_right); + r_stu=view.findViewById(R.id.r_stu); + studyed=view.findViewById(R.id.studyed); + studying=view.findViewById(R.id.studying); + im_order=view.findViewById(R.id.im_order); + r_stu.setOnCheckedChangeListener(this); + top_right.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), SearchClassActivity.class); + startActivity(intent); + } + }); + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + getActivity().finish(); + + } + }); + im_order.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(getActivity(), OrderListActivity.class); + startActivity(intent); + + + } + }); + ptrLv = (PullToRefreshListView)view. findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getMyClass(state,page+""); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getMyClass(state,page+""); + + } + }); + getMyClass(state,page+""); + return view; + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + private void getMyClass(String state,String page) { + Map param = new HashMap<>(); + param.put("state",state); + param.put("page",page); + sendJsonPostParamtoNetSignMD5(listMyExcellencourse, param, 101, this); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + MobclickAgent.onEvent(getActivity(),EXPERT_MY_CLASS_QUALITY_DETAIL); + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position-1).getExcellencourse_id()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + MyCourseBean myCourseBean; + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + myCourseBean = GsonTools.fromGsonToBean(resultJson, MyCourseBean.class); + if ("200".equals(myCourseBean.getCode())) { + if (page == 1) { + data.clear(); + if (myCourseBean.getData() == null || myCourseBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(myCourseBean.getData().getList()); + } + }else { + data.addAll(myCourseBean.getData().getList()); + } + + if (myListAdapter == null) { + myListAdapter = new CourseMyListAdapter(getActivity(), data); + + ptrLv.getRefreshableView().setAdapter(myListAdapter); + } else { + myListAdapter.notifyDataSetChanged(); + } + onLoaded(); + if (page > 1) { + // 是否有更多 + if (myCourseBean.getData() == null || myCourseBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = myCourseBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(myCourseBean.getMessage() + ""); + } + break; + } + + } + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.studying) { + studyed.setTextColor(Color.parseColor("#666666")); + studying.setTextColor(Color.parseColor("#8B2316")); + page=1; + state="1"; + getMyClass(state,page+""); + } else if (checkedId == R.id.studyed) { + page=1; + state="2"; + studying.setTextColor(Color.parseColor("#666666")); + studyed.setTextColor(Color.parseColor("#8B2316")); + getMyClass(state,page+""); + } + } +// +// @Override +// public void onLazyBeforeView() { +// +// } +// +// @Override +// public void onLazyAfterView() { +// +// } +// +// @Override +// public void onVisible() { +// +// } +// +// @Override +// public void onInvisible() { +// +// } +// +// @Override +// public void initImmersionBar() { +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); +// } +// +// @Override +// public boolean immersionBarEnabled() { +// return true; +// } +@Override +public void onResume() { + super.onResume(); + MobclickAgent.onEvent(getActivity(),EXPERT_MY_CLASS_QUALITY); + needreportPage("我的课程"); +} + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + MobclickAgent.onEvent(getActivity(),EXPERT_MY_CLASS_QUALITY); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MoreToOneConsultFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MoreToOneConsultFragment.java new file mode 100644 index 0000000..cc1c90c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MoreToOneConsultFragment.java @@ -0,0 +1,193 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.view.View; +import android.widget.Button; +import android.widget.RadioGroup; + +import androidx.fragment.app.FragmentManager; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.viewbadger.BadgeView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/6/18.(多对一解惑) + */ + +public class MoreToOneConsultFragment extends BaseFragment implements RadioGroup.OnCheckedChangeListener { + + private RadioGroup main_radiogroup; + private FragmentManager fm; + private BadgeView badgePublicServiceMsg; + private int consultCount; + private Button bt_old; + private static MoreToOneConsultFragment instance; + private HistoryPublicServiceFragment1 myHistoryFragment; + public static MoreToOneConsultFragment getInstance() { +// if (instance == null) { +// instance = new PublicServiceActivity(); +// } + return instance; + } + +// @Override +// public void setTitle() { +// top_title.setText("公益咨询"); +// top_back_layout.setVisibility(View.VISIBLE); +// top_right_text.setVisibility(View.GONE); +// } + + @Override + public View onCreateSuccessedView() { + instance = this; + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_public_service_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_public_service); + } +// View view = UIUtils.inflate(R.layout.activity_public_service); + main_radiogroup = (RadioGroup) view.findViewById(R.id.main_radiogroup_public_service); + bt_old = (Button) view.findViewById(R.id.bt_old); + main_radiogroup.setOnCheckedChangeListener(this); + fm = getChildFragmentManager(); + changeNewService(); + + //公益咨询消息提醒 + badgePublicServiceMsg = new BadgeView(getContext(), bt_old); + badgePublicServiceMsg.setBackgroundResource(R.drawable.unread_dot); + badgePublicServiceMsg.setBadgeMargin(10, 10); + badgePublicServiceMsg.setBadgePosition(BadgeView.POSITION_TOP_RIGHT); + + if (badgePublicServiceMsg != null) { + if(consultCount == 0) { + badgePublicServiceMsg.hide(); + } else { + badgePublicServiceMsg.show(); + } + } + + return view; + } + + /*public void onEventMainThread(EvenBusEvent event) { + + String msg = "public收到了消息:" + event.getmMsg()+event.getmType(); + String type = event.getmType(); + if ("1".equals(type)) {//1.公益咨询 + showPublicRedUnCount(); + } + LogUtil.v(msg); + }*/ + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + needreportPage("多对一解惑"); + showPublicRedUnCount(); + + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } + + /** + * 显示红点 + * showPublicRedUnCount + * + * void + */ + public void showPublicRedUnCount() { + OnUpdateMsgUnreadCounts(); + //后面放消息红点,应放在我的患者的,进口出,显示红点,或者底部导航 + if (badgePublicServiceMsg != null) { + if(consultCount == 0) { + badgePublicServiceMsg.hide(); + } else { + badgePublicServiceMsg.show(); + } + } + if (myHistoryFragment != null) { +// int unreadCount = IMessageSqlManager.getBySessionIdUnreadCount(patientUuid,Constant.typeConsult); + myHistoryFragment.noticeUpdateUncount(); + } + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + public void onCheckedChanged(RadioGroup group, int checkedId) { + + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_new_service) { + changeNewService(); + } else if (checkedId == R.id.tab_rbn_old_service) { + changeHistoryService(); + } + } + /** + * 切换到新的咨询 + * changeNewService + * + * void + */ + private void changeNewService() { + NewPublicServiceFragment1 myNewFragment = new NewPublicServiceFragment1(); + fm.beginTransaction() + .replace(R.id.frame_container, myNewFragment).commit(); + } + + /** + * 切换到历史咨询 + * changeHistoryService + * + * void + */ + private void changeHistoryService() { + myHistoryFragment = new HistoryPublicServiceFragment1(); + fm.beginTransaction() + .replace(R.id.frame_container, myHistoryFragment).commit(); + } +// @Override +// protected void processClick(View v) { +// switch (v.getId()) { +// case R.id.top_right_text: +// break; +// +// default: +// break; +// } +// } + + /** + * 统计未读消息数,以后要区分我的患者,朋友圈,公益咨询,这个有点复杂 OnUpdateMsgUnreadCounts + * + * void + */ + public void OnUpdateMsgUnreadCounts() { +// int unreadCount = IMessageSqlManager.qureyAllSessionUnreadCount(); + int consultUnreadCount = IMessageSqlManager.getUnByTypeUnreadCount(Constant.typeConsult); +// int patientUnreadCount = IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient); +// if (unreadCount >= notifyUnreadCount) { + consultCount = consultUnreadCount; +// } + LogUtil.i("ps未读=consultUnreadCount="+consultUnreadCount); +// String msgPatientCount = count > 100 ? "..." : String.valueOf(count); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCasediscussionFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCasediscussionFragment.java new file mode 100644 index 0000000..f0bfedc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCasediscussionFragment.java @@ -0,0 +1,281 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.Casediscussion01Adapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MyCasediscussionBean; +import cn.shangyu.gdxzExpert.bean.MyCasediscussionBean.DataBean.MYCasediscussion; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyCasediscussionFragment extends BaseFragment implements OnCallBackFromNet { + + private PullToRefreshListView ptrLv; + private HttpHandler httpHandler; + private int page = 1; + private Casediscussion01Adapter casediscussionAdapter; + private List casediscussion = new ArrayList<>(); + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_casediscussion); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未提交病例"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + casediscussionAdapter = new Casediscussion01Adapter(mActivity, + casediscussion); + setLastUpdateTime(); + + ptrLv.setAdapter(casediscussionAdapter); + ptrLv.getRefreshableView().setOnItemClickListener( + new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + + } + }); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getNewsList(Url.getCaseDiscussListByExpertUuid, true, false, + page); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getNewsList(Url.getCaseDiscussListByExpertUuid, false, + false, page); + } + }); + post(); + return view; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + if(BaseApplication.getNotify() == true || BaseApplication.getNotifyexit() == true){ + page = 1; + getNewsList(Url.getCaseDiscussListByExpertUuid, true, false, page); + BaseApplication.setNotify(false); + BaseApplication.setNotifyexit(false); + } + String commentuuid = SharePrefUtil.getString(mActivity, "commentuuid", + ""); + int commentnum = SharePrefUtil.getInt(mActivity, "commentnum", -1); + if (!StringUtil.isEmpty(commentuuid) && commentnum != -1) { + if (casediscussion.size() > 0) { + + for (int i = 0; i < casediscussion.size(); i++) { + if (casediscussion.get(i).getUuid().equals(commentuuid)) { + casediscussion.get(i).setCommentNum(commentnum+""); + casediscussionAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "commentuuid"); + SharePrefUtil.clear(mActivity, "commentnum"); + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + } + + private void post() { + // TODO Auto-generated method stub + String result = SharePrefUtil.getString(mActivity,Url.getCaseDiscussListByExpertUuid,null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + page = 1; + getNewsList(Url.getCaseDiscussListByExpertUuid, true, false, page); + } + + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + + /** + * 请求服务器 getNewsList + */ + private void getNewsList(final String loadUrl, final boolean isRefresh, + final boolean isTopNews, final int page) { +// String uuuid = SharePrefUtil +// .getString(getActivity(), Constant.uuid, ""); + Map param = new HashMap<>(); + param.put("page", page+""); + + sendJsonPostParamtoNetSignMD5(Url.getCaseDiscussListByExpertUuid, param, + 101, this); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("page", String.valueOf(page)); +// params.addBodyParameter("expert_uuid", uuuid); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(mActivity, Url.getCaseDiscussListByExpertUuid, info.result); +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + MyCasediscussionBean bean=null; + try { + bean = GsonTools.fromGsonToBean(result, + MyCasediscussionBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// if (bean==null||StringUtil.isOneToCode(bean.getCode())) { +// if(bean==null){ +// ToastUtil.showToast("服务器数据错误"); +// }else{ +// ToastUtil.showToast(bean.getMessage()); +// } + if(!"200".equals(bean.getCode())) + { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + casediscussion.clear(); + // 数据为空 + if (bean.getData().getList() == null || bean.getData().getList().isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + casediscussion.addAll(bean.getData().getList()); + } + } else { + casediscussion.addAll(bean.getData().getList()); + } + // 实例化适配器 + if (casediscussionAdapter == null) { + casediscussionAdapter = new Casediscussion01Adapter(mActivity, + casediscussion); + ptrLv.getRefreshableView().setAdapter(casediscussionAdapter); + } else { + casediscussionAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.getTotalPage(); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多病历了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + SharePrefUtil.saveString(mActivity, Url.getCaseDiscussListByExpertUuid, resultJson); + processData(resultJson); + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCoolectCourseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCoolectCourseFragment.java new file mode 100644 index 0000000..33ca28a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyCoolectCourseFragment.java @@ -0,0 +1,348 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CourseOrderListBean; +import cn.shangyu.gdxzExpert.bean.CourseOrderListBean.CourseList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyCoolectCourseFragment extends BaseFragment { + View view; + private PullToRefreshListView ptrLv; + private String url = Url.getMyShare; + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + private List mList = new ArrayList(); + CourseAdapter mAdapter; + private TextView mTv_download_num,mTv_download_yuan; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_download_course_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_download_course); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + mTv_download_num=(TextView) view.findViewById(R.id.tv_mycourse_dlnum); + mTv_download_yuan=(TextView) view.findViewById(R.id.tv_mycourse_yuan); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无分享课件"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDateList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDateList(url); + } + }); + initData(); + return view; + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getDateList(url); + } + + public void getPosition() { + // 更新科普 + if (mAdapter == null) { + mAdapter = new CourseAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + CourseOrderListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, CourseOrderListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mTv_download_num.setText(bean.shareloadFileCount+""); + if(CommonUtil.BigModule()) + { + mTv_download_yuan.setText(String.format("%.2f", bean.shareTotalAccount/100.00)+"元"); + } + else + { + mTv_download_yuan.setText(String.format("%.2f", bean.shareTotalAccount/100.00)); + } + + mList.addAll(bean.data.getList()); + } + + } else { + mList.addAll(bean.data.getList()); + } + getPosition(); + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多课件了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getDateList(final String url) { + RequestParams params = new RequestParams(); + params.addBodyParameter("expert_uuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, url, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { +// System.out.println(" nfo.result == " + info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + onLoaded(); + if (page > 1) { + page--; + } + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + + } + +// @Override +// public void onItemClick(AdapterView parent, View view, int position, +// long id) { +// // TODO Auto-generated method stub +// Intent intent = new Intent(mActivity, CourseDetailOrderActivity.class); +// intent.putExtra("order_id", mList.get(position - 1).getOrder_id()); +// intent.putExtra("order_status", mList.get(position - 1) +// .getOrder_status()); +// intent.putExtra("providername", mList.get(position - 1) +// .getProvidername()); +// intent.putExtra("title", mList.get(position - 1).getTitle()); +// intent.putExtra("type", mList.get(position - 1).getType()); +// intent.putExtra("file_uuid", mList.get(position - 1).getUuid()); +// startActivity(intent); +// } + + public class CourseAdapter extends BaseAdapter { +// SimpleDateFormat sdf; + + public CourseAdapter() { + // TODO Auto-generated constructor stub +// sdf = new SimpleDateFormat("yyyy-MM-dd"); + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_course_downl_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_course_downl); + } + vh = new ViewHolder(); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.tv_item_course_title); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_item_course_time); + vh.mLl_type = (LinearLayout) convertView + .findViewById(R.id.ll_download_type); + vh.mTv_doc=(TextView) convertView.findViewById(R.id.tv_item_course_doc); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mLl_type.setVisibility(View.GONE); + vh.mTv_title.setText(mList.get(position).getTitle()); +// vh.mTv_time.setText(sdf.format(new Date(Long.parseLong(mList.get( +// position).getCreate_date()) * 1000))); + vh.mTv_time.setText(mList.get( + position).getCreate_date().substring(0,10)); + vh.mTv_title.setText(mList.get(position).getTitle()); + vh.mTv_doc.setText(mList.get(position).getDownloadername()); + return convertView; + } + + } + + public class ViewHolder { + TextView mTv_title, mTv_time,mTv_doc; + LinearLayout mLl_type; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyDownloadCourseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyDownloadCourseFragment.java new file mode 100644 index 0000000..8b96323 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyDownloadCourseFragment.java @@ -0,0 +1,364 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CourseDetailOrderActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CourseOrderListBean; +import cn.shangyu.gdxzExpert.bean.CourseOrderListBean.CourseList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyDownloadCourseFragment extends BaseFragment implements + OnItemClickListener { + View view; + private PullToRefreshListView ptrLv; + private String url = Url.getMyDownload; + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + private List mList = new ArrayList(); + CourseAdapter mAdapter; + private TextView mTv_download_num, mTv_download_yuan; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_download_course_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_download_course); + } + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + mTv_download_num = (TextView) view.findViewById(R.id.tv_mycourse_dlnum); + mTv_download_yuan = (TextView) view.findViewById(R.id.tv_mycourse_yuan); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无下载课件"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDateList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getDateList(url); + } + }); + initData(); + return view; + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + getDateList(url); + } + + public void getPosition() { + // 更新科普 + if (mAdapter == null) { + mAdapter = new CourseAdapter(); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + CourseOrderListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, CourseOrderListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data == null || bean.data.getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mTv_download_num.setText( bean.downloadFileCount+""); + if(CommonUtil.BigModule()) + { + mTv_download_yuan.setText( String.format("%.2f", bean.downloadTotalAccount/100.00)+"元"); + } + else + { + mTv_download_yuan.setText( String.format("%.2f", bean.downloadTotalAccount/100.00)); + } + + mList.addAll(bean.data.getList()); + } + + } else { + mList.addAll(bean.data.getList()); + } + getPosition(); + + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多课件了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.data.getTotalPage(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + public void getDateList(final String url) { + RequestParams params = new RequestParams(); + params.addBodyParameter("expert_uuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, url, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + Log.d("WXEntryActivity","info "+info.result); + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + onLoaded(); + if (page > 1) { + page--; + } + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, CourseDetailOrderActivity.class); + intent.putExtra("order_id", mList.get(position - 1).getOrder_id()); + intent.putExtra("order_status", mList.get(position - 1) + .getOrder_status()); + intent.putExtra("providername", mList.get(position - 1) + .getProvidername()); + intent.putExtra("title", mList.get(position - 1).getTitle()); + intent.putExtra("type", mList.get(position - 1).getType()); + intent.putExtra("file_uuid", mList.get(position - 1).getUuid()); + + startActivity(intent); + + } + + public class CourseAdapter extends BaseAdapter { +// SimpleDateFormat sdf; + + public CourseAdapter() { + // TODO Auto-generated constructor stub +// sdf = new SimpleDateFormat("yyyy-MM-dd"); + } + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_course_downl_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_course_downl); + } + vh = new ViewHolder(); + vh.mTv_title = (TextView) convertView + .findViewById(R.id.tv_item_course_title); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_item_course_time); + vh.mTv_type = (TextView) convertView + .findViewById(R.id.tv_item_course_type); + vh.mLl_doc = (LinearLayout) convertView + .findViewById(R.id.ll_download_doc); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mLl_doc.setVisibility(View.GONE); + vh.mTv_title.setText(mList.get(position).getTitle()); + vh.mTv_time.setText((mList.get( + position).getCreate_date()).substring(0,10)); + if (mList.get(position).getOrder_status().equals("canceled")) { + vh.mTv_type.setText("已取消"); + } else if (mList.get(position).getOrder_status().equals("paid")) { + vh.mTv_type.setText("已支付"); + } else { + vh.mTv_type.setText("待支付"); + } + vh.mTv_title.setText(mList.get(position).getTitle()); + + return convertView; + } + + } + + public class ViewHolder { + TextView mTv_title, mTv_time, mTv_type; + LinearLayout mLl_doc; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyFragment.java new file mode 100644 index 0000000..ad8400b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyFragment.java @@ -0,0 +1,843 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.zbar.lib.CaptureActivity; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import androidx.annotation.NonNull; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity; +import cn.shangyu.gdxzExpert.activity.BindWeChatActivity; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.LoveActivity; +import cn.shangyu.gdxzExpert.activity.MyAccount2Activity; +import cn.shangyu.gdxzExpert.activity.MyBankCardActivity; +import cn.shangyu.gdxzExpert.activity.MyBillActivity; +import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.MyDownLoadsActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyMindActivity; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.MyWelfAreActivity; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.activity.PoMessageActivity; +import cn.shangyu.gdxzExpert.activity.SendMindActivity; +import cn.shangyu.gdxzExpert.activity.SettingAndHelpActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean; +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean.InfoData; +import cn.shangyu.gdxzExpert.bean.ChangeMyInfoBean.SpecialData; +import cn.shangyu.gdxzExpert.bean.ExpertHonorBean; +import cn.shangyu.gdxzExpert.bean.GethonorDetailBean; +import cn.shangyu.gdxzExpert.bean.MyPointsBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.MyDownLoadVideoActivity; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.CircleImageView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +//import cn.shangyu.gdxzExpert.ecdemo.ui.huawei.PustDemoActivity; + +/** + * + * 功能说明:我的fragment 类名称:MyFragment 类描述: 创建人:苏三元 时间:2015-9-24 下午1:44:07 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class MyFragment extends BaseFragment implements OnClickListener,OnCallBackFromNet { + private CircleImageView pic; + private TextView name, tv_hospital; + + private Drawable rightDrawable; + private Drawable my_head_bg; + private TextView tv_position; + private TextView tv_office; + public static String getExpertByUuid = Url.getExpertByUuid;// 查看个人资料 + private TextView mTv_new_version; + private TextView mIv_flowerNum, mIv_patientNum,mTv_consultNum;; + private static final int EXPERTHONOR = 201; + private List honorList; + private TextView tv_rongyu1,tv_rongyu2,tv_rongyu3,tv_rongyu4,tv_rongyu5; + private LinearLayout ll_rongyu,ll_rongyu1; + private static final int GETHONORDETAIL = 202; + private static final int ISBOUNDWECHATBYUUID = 207; + private Dialog dialog; + private ImageView bt_wechat; + @SuppressLint("NewApi") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_my); + bt_wechat=view.findViewById(R.id.bt_wechat);//微信 + RelativeLayout rl_myhead = (RelativeLayout) view + .findViewById(R.id.myhead);// 顶部 + RelativeLayout myhead = (RelativeLayout) view + .findViewById(R.id.rl_myhead);// 顶部头像 + pic = (CircleImageView) view.findViewById(R.id.pic);// 我的头像 + name = (TextView) view.findViewById(R.id.name);// 我的姓名 + tv_hospital = (TextView) view.findViewById(R.id.tv_hospital);// 我的医院 + ll_rongyu = (LinearLayout) view.findViewById(R.id.ll_rongyu);// 我的荣誉 + ll_rongyu1 = (LinearLayout) view.findViewById(R.id.ll_rongyu1);// 我的荣誉 + tv_rongyu1 = (TextView) view.findViewById(R.id.tv_rongyu1);// 我的荣誉 + tv_rongyu2 = (TextView) view.findViewById(R.id.tv_rongyu2);// 我的荣誉 + tv_rongyu3 = (TextView) view.findViewById(R.id.tv_rongyu3);// 我的荣誉 + tv_rongyu4 = (TextView) view.findViewById(R.id.tv_rongyu4);// 我的荣誉 + tv_rongyu5 = (TextView) view.findViewById(R.id.tv_rongyu5);// 我的荣誉 + tv_position = (TextView) view.findViewById(R.id.tv_position);// 我的职称 + mTv_new_version = (TextView) view.findViewById(R.id.tv_new_version); + tv_office = (TextView) view.findViewById(R.id.tv_office);// 我的科室 + TextView mydata = (TextView) view.findViewById(R.id.mydata);// 我的账户 + TextView myservice = (TextView) view.findViewById(R.id.myservice);// 服务设置 + RelativeLayout myorders = (RelativeLayout) view + .findViewById(R.id.myorders);// 我的服务记录 + RelativeLayout myflowers = (RelativeLayout) view + .findViewById(R.id.myflowers);// 我收到的鲜花 + RelativeLayout myinformation = (RelativeLayout) view + .findViewById(R.id.myinformation);// 我发布的消息 + + RelativeLayout mycollection = (RelativeLayout) view + .findViewById(R.id.mycollection);// 我的收藏 + RelativeLayout myvideo = (RelativeLayout) view + .findViewById(R.id.myvideo);// 我的收藏 + RelativeLayout mydownload = (RelativeLayout) view + .findViewById(R.id.mydownload);// 我的下载 + + RelativeLayout mycard = (RelativeLayout) view.findViewById(R.id.mycard);// 常用银行卡 + // RelativeLayout mybill = (RelativeLayout) + // view.findViewById(R.id.mybill);//收益结算 + RelativeLayout my_qr_code = (RelativeLayout) view.findViewById(R.id.my_qr_code);// 我的二维码 + RelativeLayout rl_my_qr_sao = (RelativeLayout) view.findViewById(R.id.rl_my_qr_sao);// 扫一扫 + + RelativeLayout my_qr_love = (RelativeLayout) view + .findViewById(R.id.my_qr_love);// 爱心捐助 + RelativeLayout mysetting = (RelativeLayout) view + .findViewById(R.id.mysetting);// 设置与帮助 + + TextView mywork = (TextView) view.findViewById(R.id.mywork);// 我的工作表 + RelativeLayout mymind = (RelativeLayout) view + .findViewById(R.id.myminds);// 我的心意 + RelativeLayout myfapiao=view.findViewById(R.id.myfapiao);//我的发票 + RelativeLayout mywelfare = (RelativeLayout) view + .findViewById(R.id.mywelfare);// 我的福利 + RelativeLayout my_course = (RelativeLayout) view + .findViewById(R.id.my_courseware);// 我的课件 + RelativeLayout sendMind = (RelativeLayout) view + .findViewById(R.id.send_mind);// 送心意 + if (my_head_bg == null) { + my_head_bg = UIUtils.getDrawable(R.drawable.my_head_bg); + } + mTv_consultNum=(TextView) view.findViewById(R.id.tv_consultnum); + mIv_flowerNum = (TextView) view.findViewById(R.id.tv_flowernum); + mIv_patientNum = (TextView) view.findViewById(R.id.tv_patientnum); + int consultTotalNum = SharePrefUtil.getInt(mActivity, "ConsultTotalNum", 0); + int pingFlowewrnum = SharePrefUtil.getInt(mActivity, "pingFlowewrnum", 0); + int expertApplyNum = SharePrefUtil.getInt(mActivity, "expertApplyNum", 0); + mTv_consultNum.setText(":" + consultTotalNum); + mIv_flowerNum.setText(":" + pingFlowewrnum); + mIv_patientNum.setText(":" + expertApplyNum); + /****************************** 注意setBackground不支持4.0.4以下 ***************************************/ + // rl_myhead.setBackground(my_head_bg); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + rl_myhead.setBackground(my_head_bg); + } else { + rl_myhead.setBackgroundDrawable(my_head_bg); + } + + // 从sp文件里取出资料 + String realName = SharePrefUtil.getString(mActivity, "realName", null); + String mobile = SharePrefUtil.getString(mActivity, "mobile", null); + String photo = SharePrefUtil.getString(mActivity, "photo", null); + String hospitalName = SharePrefUtil.getString(mActivity, + "hospitalName", null); + String officeName = SharePrefUtil.getString(mActivity, "officeName", + null); + String positionName = SharePrefUtil.getString(mActivity, + "positionName", null); + int sex = SharePrefUtil.getInt(mActivity, "sex", 0); + LogUtil.i("realName==" + realName + " photo==" + photo + " mobile==" + + mobile); + // 回显到控件上 + if (realName != null && !"null".equals(realName)) { + name.setText(realName); + } + if (rightDrawable == null) { + rightDrawable = UIUtils.getDrawable(R.drawable.new_man); + } + if (1 == sex) {// 0男,1女 + rightDrawable = UIUtils.getDrawable(R.drawable.new_woman); + } + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + name.setCompoundDrawables(null, null, rightDrawable, null); + + if (hospitalName != null && !"null".equals(hospitalName)) { + tv_hospital.setText(hospitalName); + } + if (positionName != null && !"null".equals(positionName)) { + tv_position.setText(positionName); + } + if (officeName != null && !"null".equals(officeName)) { + tv_office.setText(officeName); + } + if (photo != null && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray)); + } + + int getisaccount = SharePrefUtil.getInt(mActivity, "GETISACCOUNT", 1); + if (0==getisaccount){ + mydata.setVisibility(View.GONE); + mymind.setVisibility(View.GONE); + my_course.setVisibility(View.GONE); + myflowers.setVisibility(View.GONE); + mycard.setVisibility(View.GONE); + } + + bt_wechat.setOnClickListener(this); + my_course.setOnClickListener(this); + mymind.setOnClickListener(this); + myfapiao.setOnClickListener(this); + myhead.setOnClickListener(this); + mydata.setOnClickListener(this); + myservice.setOnClickListener(this); + myorders.setOnClickListener(this); + myflowers.setOnClickListener(this); + myinformation.setOnClickListener(this); + mycollection.setOnClickListener(this); + mydownload.setOnClickListener(this); + mycard.setOnClickListener(this); + // mybill.setOnClickListener(this); + my_qr_code.setOnClickListener(this); + my_qr_love.setOnClickListener(this); + mysetting.setOnClickListener(this); + mywork.setOnClickListener(this); + sendMind.setOnClickListener(this); + myvideo.setOnClickListener(this); + mywelfare.setOnClickListener(this); + tv_rongyu1.setOnClickListener(this); + tv_rongyu2.setOnClickListener(this); + tv_rongyu3.setOnClickListener(this); + tv_rongyu4.setOnClickListener(this); + tv_rongyu5.setOnClickListener(this); + rl_my_qr_sao.setOnClickListener(this); + getList(getExpertByUuid); + getGroup(); + expertHonor();//专家荣誉 + return view; + } + + private void expertHonor() { + Map param = new HashMap<>(); + param.put("expert_uuid",SharePrefUtil.getString(mActivity, "uuid", "")); + sendJsonPostParamtoNetSignMD5(Url.expertHonor, param, EXPERTHONOR, this); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + my_head_bg.setCallback(null); + rightDrawable.setCallback(null); + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_wechat) {//微信 + startActivity(new Intent(mActivity, BindWeChatActivity.class)); + } else if (id == R.id.rl_myhead) {// 我 + // startActivity(new Intent(mActivity, LoginSetInfoActivity.class)); + if (!UIUtils.isNetWorkConnected(getActivity())) { + ToastUtil.showToast("网络不可用,请连接网络再试"); + return; + } + startActivityForResult(new Intent(mActivity, + MyDetailInfoActivity.class), Constant.INFO_CODE); + } else if (id == R.id.mydata) {// 我的账户 + // startActivity(new Intent(mActivity, MyAccountActivity.class)); + startActivity(new Intent(mActivity, MyAccount2Activity.class)); + } else if (id == R.id.myservice) {// 出诊计划 + startActivity(new Intent(mActivity, OutofPatientNoticeActivity.class)); + } else if (id == R.id.myorders) {// 交易记录 + startActivity(new Intent(mActivity, MyBillActivity.class)); + } else if (id == R.id.myflowers) {// 我的鲜花 + startActivity(new Intent(mActivity, MyFlowerActivity.class)); + } else if (id == R.id.myinformation) {// 我发布的消息 + startActivity(new Intent(mActivity, PoMessageActivity.class)); + } else if (id == R.id.mycollection) {// 我的收藏 + Intent intent = new Intent(mActivity, MyDownLoadsActivity.class); + intent.setType("collection"); + startActivity(intent); + } else if (id == R.id.myvideo) {// 我的视频 + Intent intentVideo = new Intent(mActivity, MyDownLoadVideoActivity.class); + startActivity(intentVideo); + } else if (id == R.id.mydownload) {// 我的下载 + Intent intent1 = new Intent(mActivity, MyDownLoadsActivity.class); + intent1.setType("download"); + startActivity(intent1); + } else if (id == R.id.mycard) {// 我的银行卡 + startActivity(new Intent(mActivity, MyBankCardActivity.class)); + // case R.id.mybill://收益结算 + // + // break; + } else if (id == R.id.my_qr_code) {// 我的二维码 + startActivity(new Intent(mActivity, MyQrCodeActivity.class)); + } else if (id == R.id.rl_my_qr_sao) {// 扫一扫 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(mActivity, Manifest.permission.CAMERA)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + startToCapture(); + } else { + PermissionsUtil.requestPermission(mActivity, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + //用户授予了访问读取短信的权限 + startToCapture(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读取短信的申请 + + } + + }, new String[]{Manifest.permission.CAMERA}); + } + + }else { + startToCapture(); + } + } else if (id == R.id.my_qr_love) {// 爱心捐助 + startActivity(new Intent(mActivity, LoveActivity.class)); + } else if (id == R.id.mysetting) {// 设置与帮助 + startActivity(new Intent(mActivity, SettingAndHelpActivity.class)); + } else if (id == R.id.mywork) {// 我的优惠券 + // startActivity(new Intent(mActivity, SendMindActivity.class)); + // startActivity(new Intent(mActivity, MyWorkTableActivity.class)); +// ToastUtil.showMessage("暂无优惠券"); + Intent intentpoints = new Intent(mActivity, AccumulatePointsActivity.class); + startActivity(intentpoints); + } else if (id == R.id.myminds) {// 我的心意 + startActivity(new Intent(mActivity, MyMindActivity.class)); + } else if (id == R.id.myfapiao) { + startActivity(new Intent(mActivity, FaPiaoActivity.class)); + } else if (id == R.id.send_mind) {// 送心意 + startActivity(new Intent(mActivity, SendMindActivity.class)); + // startActivity(new Intent(mActivity, MyWorkTableActivity.class)); + } else if (id == R.id.my_courseware) { + startActivity(new Intent(mActivity, MyCoursewareActivity.class)); + } else if (id == R.id.mywelfare) {//我的福利 + startActivity(new Intent(mActivity ,MyWelfAreActivity.class)); + } else if (id == R.id.tv_rongyu1) {//我的荣誉 + gethonorDetail(honorList.get(0).getId()); + } else if (id == R.id.tv_rongyu2) { + gethonorDetail(honorList.get(1).getId()); + } else if (id == R.id.tv_rongyu3) { + gethonorDetail(honorList.get(2).getId()); + } else if (id == R.id.tv_rongyu4) { + gethonorDetail(honorList.get(0).getId()); + } else if (id == R.id.tv_rongyu5) { + gethonorDetail(honorList.get(1).getId()); + } + } + //判断用户是否绑定过微信 + private void isBoundWechatByUuid() { + Map map = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.isBoundWechatByUuid,map,ISBOUNDWECHATBYUUID,this); + } + + private void startToCapture() { + startActivity(new Intent(mActivity, CaptureActivity.class)); + } + + private void gethonorDetail(int id) { + Map map = new HashMap<>(); + map.put("expert_uuid",SharePrefUtil.getString(mActivity, "uuid", "")); + map.put("id",id+""); + sendJsonPostParamtoNetSignMD5(Url.gethonorDetail,map,GETHONORDETAIL,this); + } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK + && requestCode == Constant.INFO_CODE) { + // 头像 + if (data != null) { + LogUtil.i("data=" + data + "p==" + data.getStringExtra("photo")); + ImageLoader + .getInstance() + .displayImage( + data.getStringExtra("photo"), + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray)); + } + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onResume() { + super.onResume(); + String officeName = SharePrefUtil.getString(mActivity, "officeName", + null); + String positionName = SharePrefUtil.getString(mActivity, + "positionName", null); + tv_position.setText(positionName); + tv_office.setText(officeName); + String photo = SharePrefUtil.getString(mActivity, "MyChangePhoto", ""); + if (!StringUtil.isBland(photo) && pic != null) { + ImageLoader + .getInstance() + .displayImage( + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray)); + SharePrefUtil.saveString(mActivity, "MyChangePhoto", null); + } + String isbound_wechat = SharePrefUtil.getString(mActivity, "isbound_wechat", ""); + if(!StringUtil.isEmpty(isbound_wechat)) + { + if(isbound_wechat.equals("yes")) + { + bt_wechat.setVisibility(View.GONE); + } + else + { + bt_wechat.setVisibility(View.VISIBLE); + } + } + else + { + isBoundWechatByUuid(); + } + } + + + + // 获取数据 + private void getList(final String loadUrl) { + String uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + RequestParams params = new RequestParams();// 封装参数 + // disease = tv_disease.getText().toString().trim(); + + params.addBodyParameter("uuid", uuid);// 唯一标识 必填 + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + // 获取数据 + String versionName; + private MyPointsBean fromJson; + + private void getGroup() { + versionName = UpdateVersionUtils.getVersionName(); + String uuid = SharePrefUtil.getString(mActivity, "uuid", ""); + RequestParams params = new RequestParams();// 封装参数 + // disease = tv_disease.getText().toString().trim(); + + params.addBodyParameter("currVer", "1");// 唯一标识 必填 + params.addBodyParameter("appType", String.valueOf(1));// 唯一标识 必填 + HttpHelper.loadData(HttpMethod.POST, Url.getUpdateApk, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + processDataGrup(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + private void processDataGrup(String result) { + // TODO Auto-generated method stub + if (result == null) { + return; + } + String code = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + + try { + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + String newVersion = jsonObject.getString("newVersion"); + if ("1".equals(code)&&!newVersion.equals(versionName)) { + if (UpdateVersionUtils.isUpdataInfo(versionName,newVersion)){ + mTv_new_version.setVisibility(View.VISIBLE); + }else { + mTv_new_version.setVisibility(View.GONE); + } + + } else { + mTv_new_version.setVisibility(View.GONE); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + } + + public void processData(String result) { + // TODO Auto-generated method stub + LogUtil.i("个人资料 = "+result); + ChangeMyInfoBean bean = GsonTools.fromGsonToBean(result, + ChangeMyInfoBean.class); + if ("1".equals(bean.code)) { + InfoData data = bean.expert; + if (data != null) { + String realName = data.realName; + int sex = data.sex; + String birthDate = data.birthDate; + String mobile = data.mobile; + String userName = data.userName; + String photo = data.photo; + String email = data.email; + String hospitalUuid = data.hospitalUuid; + String hospitalName = data.hospitalName; + String officeName = data.officeName; + String officePhone = data.officePhone; + String officeUuid = data.officeUuid; + String positionUuid = data.positionUuid; + String positionName = data.positionName; + String certificate = data.certificate; + String certificateImg = data.certificateImg; + String qrcode = data.qrcode; + String intro = data.intro; + String isStar = data.isStar; + // int countyId = data.countyId; + // int provId = data.provId; + // int cityId = data.cityId; + + // 保存个人资料到SP文件 + SharePrefUtil.saveString(mActivity, "qrcode", qrcode); + // SharePrefUtil.saveInt(ct, "cityId", cityId); + // SharePrefUtil.saveInt(ct, "countyId", countyId); + // SharePrefUtil.saveInt(ct, "provId", provId); + SharePrefUtil.saveInt(mActivity, "sex", sex); + SharePrefUtil.saveString(mActivity, "isStar", isStar); + + LogUtil.i("data==" + data.toString()); + + // 回显头像 + if (!StringUtil.isEmpty(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray)); + SharePrefUtil.saveString(mActivity, Constant.photo, photo); + } + // 回显姓名 + if (!StringUtil.isEmpty(realName)) { + name.setText(realName); + SharePrefUtil.saveString(mActivity, Constant.realName,realName); + } + // 手机号 + if (!StringUtil.isEmpty(userName) + && ValidateUtils.isMobileNum(userName)) { + SharePrefUtil.saveString(mActivity, + Constant.SP_IS_FIRST_NAME, Constant.mobile, + userName);// 手机号 + SharePrefUtil.saveString(mActivity, Constant.mobile, + userName); + } + // 性别 + if (0 == sex) { + rightDrawable = UIUtils.getDrawable(R.drawable.new_man); + } else { + rightDrawable = UIUtils.getDrawable(R.drawable.new_woman); + } + rightDrawable.setBounds(0, 0, rightDrawable.getMinimumWidth(), + rightDrawable.getMinimumHeight()); + name.setCompoundDrawables(null, null, rightDrawable, null); + + // 出生日期 + if (!StringUtil.isEmpty(birthDate)) { + SharePrefUtil.saveString(mActivity, "birthDate", birthDate); + } + // 邮箱 + if (!StringUtil.isEmpty(email)) { + SharePrefUtil.saveString(mActivity, "email", email); + } + // 医院名称 + if (!StringUtil.isEmpty(hospitalName)) { + tv_hospital.setText(hospitalName); + SharePrefUtil.saveString(mActivity, "hospitalUuid", + hospitalUuid); + SharePrefUtil.saveString(mActivity, "hospitalName", + hospitalName); + } + // 科室 + if (!StringUtil.isEmpty(officeName)) { + tv_office.setText(officeName); + SharePrefUtil.saveString(mActivity, "officeUuid", + officeUuid); + SharePrefUtil.saveString(mActivity, "officeName", + officeName); + } + // 科室电话 + if (!StringUtil.isEmpty(officePhone)) { + SharePrefUtil.saveString(mActivity, "officePhone", + officePhone); + } + // 职称 + if (!StringUtil.isEmpty(positionName)) { + tv_position.setText(positionName); + SharePrefUtil.saveString(mActivity, "positionUuid", + positionUuid); + SharePrefUtil.saveString(mActivity, "positionName", + positionName); + } + // 资格证书编号 + if (!StringUtil.isEmpty(certificate)) { + SharePrefUtil.saveString(mActivity, "certificate", + certificate); + } + // 证书图片 + if (!StringUtil.isEmpty(certificateImg)) { + SharePrefUtil.saveString(mActivity, "certificateImg", + certificateImg); + } + // 简介 + if (!StringUtil.isEmpty(intro)) { + SharePrefUtil.saveString(mActivity, "intro", intro); + } + + List special = bean.specialy;// 专长 + // 根据专长uuid进行查询专长名称 + if (special != null && special.size() > 0) { + String disease = ""; + String diseaseNames = ""; + for (int j = 0; j < special.size(); j++) { + disease += special.get(j).diseaseUuid + ","; + diseaseNames += special.get(j).diseaseName + "、"; + } + if (diseaseNames.length() > 0) { + // 去掉最后一个“、” + diseaseNames = diseaseNames.substring(0, + diseaseNames.length() - 1); + } + // 专长 + SharePrefUtil.saveString(mActivity, "disease", disease); + SharePrefUtil.saveString(mActivity, "diseaseName", + diseaseNames); + LogUtil.i("disease==" + disease + "diseaseNames==" + + diseaseNames); + } + + } + closeProgressDialog(); + } else { + closeProgressDialog(); + ToastUtil.showToast("资料加载失败,请重试"); + } + } + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case ISBOUNDWECHATBYUUID: + try { + JSONObject jsonObject1 = new JSONObject(resultJson); + String code1 = jsonObject1.getString("code"); + if ("200".equals(code1)){ + int isBound = jsonObject1.getInt("isBound"); + if (isBound==0){ + bt_wechat.setVisibility(View.VISIBLE); + + }else { + bt_wechat.setVisibility(View.GONE); + } + }else { + ToastUtil.showMessage(jsonObject1.getString("message")); + } + + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + break; + case EXPERTHONOR: + LogUtils.i("EXPERTHONOR = "+resultJson); + Gson gson1 = new Gson(); + ExpertHonorBean fromJsonBean1= gson1.fromJson(resultJson, ExpertHonorBean.class); + if (fromJsonBean1!=null&&"1".equals(fromJsonBean1.getCode())){ + honorList = fromJsonBean1.getHonorList(); + if (honorList.size()>2){ + ll_rongyu.setVisibility(View.VISIBLE); + + tv_rongyu1.setVisibility(View.VISIBLE); + tv_rongyu1.setText(honorList.get(0).getNick_name()); + tv_rongyu2.setVisibility(View.VISIBLE); + tv_rongyu2.setText(honorList.get(1).getNick_name()); + tv_rongyu3.setVisibility(View.VISIBLE); + tv_rongyu3.setText(honorList.get(2).getNick_name()); + }else { + ll_rongyu1.setVisibility(View.VISIBLE); + if (honorList.size()>0){ + tv_rongyu4.setVisibility(View.VISIBLE); + tv_rongyu4.setText(honorList.get(0).getNick_name()); + } + if (honorList.size()>1){ + tv_rongyu5.setVisibility(View.VISIBLE); + tv_rongyu5.setText(honorList.get(1).getNick_name()); + } + } + + + + + } + break; + case GETHONORDETAIL: + LogUtils.i("GETHONORDETAIL = "+resultJson); + Gson gson2 = new Gson(); + GethonorDetailBean fromJsonBean2= gson2.fromJson(resultJson, GethonorDetailBean.class); + if (fromJsonBean2!=null&&"1".equals(fromJsonBean2.getCode())){ + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.layout_yingxiongbang, null); + if (dialog==null){ + dialog = new AlertDialog.Builder(getActivity()).create(); + } + RelativeLayout rl_nickname = (RelativeLayout) layout.findViewById(R.id.rl_nickname); + TextView tv_context = (TextView) layout.findViewById(R.id.tv_context); + TextView tv_nick_name1 = (TextView) layout.findViewById(R.id.tv_nick_name1); + TextView tv_nick_name2 = (TextView) layout.findViewById(R.id.tv_nick_name2); + TextView tv_nick_name3 = (TextView) layout.findViewById(R.id.tv_nick_name3); + TextView tv_nick_name4 = (TextView) layout.findViewById(R.id.tv_nick_name4); + ImageView iv_img = (ImageView) layout.findViewById(R.id.iv_img); + View v_close = layout.findViewById(R.id.v_close); + TextView tv_title = (TextView) layout.findViewById(R.id.tv_title); + tv_context.setText(fromJsonBean2.getData().getNote()); + tv_title.setText(fromJsonBean2.getData().getTitle()); + ImageLoader.getInstance().displayImage(Url.urlHtml + fromJsonBean2.getData().getImg(), iv_img); + if (fromJsonBean2.getData().getHonorlist()!=null){ + rl_nickname.setVisibility(View.VISIBLE); + if (fromJsonBean2.getData().getHonorlist().size()>0){ + tv_nick_name1.setVisibility(View.VISIBLE); + tv_nick_name1.setText(fromJsonBean2.getData().getHonorlist().get(0).getNick_name()); + } + if (fromJsonBean2.getData().getHonorlist().size()>1){ + tv_nick_name2.setVisibility(View.VISIBLE); + tv_nick_name2.setText(fromJsonBean2.getData().getHonorlist().get(1).getNick_name()); + } + if (fromJsonBean2.getData().getHonorlist().size()>2){ + tv_nick_name3.setVisibility(View.VISIBLE); + tv_nick_name3.setText(fromJsonBean2.getData().getHonorlist().get(2).getNick_name()); + } + if (fromJsonBean2.getData().getHonorlist().size()>3){ + tv_nick_name4.setVisibility(View.VISIBLE); + tv_nick_name4.setText(fromJsonBean2.getData().getHonorlist().get(3).getNick_name()); + } + } + + dialog.show(); + dialog.getWindow().setContentView(layout); + v_close.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + } + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyHuodongFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyHuodongFragment.java new file mode 100644 index 0000000..f765c4f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyHuodongFragment.java @@ -0,0 +1,266 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GanDanHouseDetialActivity; +import cn.shangyu.gdxzExpert.adapter.GanDanHouseAdapter; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.HouseBean; +import cn.shangyu.gdxzExpert.bean.HouseBean.HouseList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyHuodongFragment extends BaseFragment implements OnCallBackFromNet { + + private PullToRefreshListView ptrLv; + private HttpHandler httpHandler; + public int page = 1; + private GanDanHouseAdapter casediscussionAdapter; + private List casediscussion = new ArrayList(); + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + SharePrefUtil.saveString(mActivity, Url.getInteractionListByExpertUuid, resultJson); + processData(resultJson); + break; + } + } + + public interface OnMyHuodongRefreshListener { + void onMyHuodongRefresh(String url); + } + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_casediscussion); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_case); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未有活动"); + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + + ptrLv.getRefreshableView().setOnItemClickListener( + new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + Intent intent = new Intent(mActivity, + GanDanHouseDetialActivity.class); + intent.putExtra("uuid", casediscussion + .get(position - 1).getUuid()); + mActivity.startActivity(intent); + + } + }); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getNewsList(Url.getInteractionListByExpertUuid, true, false, + page); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getNewsList(Url.getInteractionListByExpertUuid, false, false, + page); + } + }); + post(); + return view; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + if (BaseApplication.getNotify() == true + || BaseApplication.getNotifyexit() == true) { + page = 1; + getNewsList(Url.getInteractionListByExpertUuid, true, false, page); + BaseApplication.setNotify(false); + BaseApplication.setNotifyexit(false); + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public ResultState onLoad() { + + return ResultState.STATE_SUCCESSED; + } + + private void post() { + // TODO Auto-generated method stub + String result = SharePrefUtil.getString(mActivity, + Url.getInteractionListByExpertUuid, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + page = 1; + getNewsList(Url.getInteractionListByExpertUuid, true, false, page); + } + + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + + /** + * 请求服务器 getNewsList + */ + public void getNewsList(final String loadUrl, final boolean isRefresh, + final boolean isTopNews, final int page) { + Map param = new HashMap<>(); + param.put("page", page+""); + + sendJsonPostParamtoNetSignMD5(Url.getInteractionListByExpertUuid, param, + 101, this); +// String uuuid = SharePrefUtil +// .getString(getActivity(), Constant.uuid, ""); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("page", String.valueOf(page)); +// params.addBodyParameter("expert_uuid", uuuid); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// SharePrefUtil +// .saveString(mActivity, +// Url.getInteractionListByExpertUuid, +// info.result); +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + HouseBean bean = GsonTools.fromGsonToBean(result, HouseBean.class); + if(!"200".equals(bean.code)){ + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + casediscussion.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.list.size()); + if (bean.data.list == null || bean.data.list.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + casediscussion.addAll(bean.data.list); + } + } else { + casediscussion.addAll(bean.data.list); + } + // 实例化适配器 + if (casediscussionAdapter == null) { + casediscussionAdapter = new GanDanHouseAdapter(casediscussion, + mActivity); + ptrLv.getRefreshableView().setAdapter(casediscussionAdapter); + } else { + casediscussionAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多活动了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyNewFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyNewFragment.java new file mode 100644 index 0000000..2c2f040 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyNewFragment.java @@ -0,0 +1,966 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.Url.checkVersion; +import static cn.shangyu.gdxzExpert.utils.Url.getapplyList; +import static cn.shangyu.gdxzExpert.utils.Url.urlHtml; + +import android.app.AlertDialog; +import android.app.AppOpsManager; +import android.app.Dialog; +import android.app.NotificationManager; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.target.SimpleTarget; +import com.bumptech.glide.request.transition.Transition; +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.zaaach.transformerslayout.TransformersLayout; +import com.zaaach.transformerslayout.holder.Holder; +import com.zaaach.transformerslayout.holder.TransformersHolderCreator; +import com.zaaach.transformerslayout.listener.OnTransformersItemClickListener; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.MyBankCardActivity; +import cn.shangyu.gdxzExpert.activity.MyDetailInfoActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyFuliCardActivity; +import cn.shangyu.gdxzExpert.activity.MyPatientActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicConsultationActivity; +import cn.shangyu.gdxzExpert.activity.SettingAndHelpActivity; +import cn.shangyu.gdxzExpert.adapter.CellHonorAdapter; +import cn.shangyu.gdxzExpert.adapter.HonorAdapter; +import cn.shangyu.gdxzExpert.adapter.OnRecyclerViewItemClickListener; +import cn.shangyu.gdxzExpert.adapter.RollAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.AddBonusPointsSuccessBean; +import cn.shangyu.gdxzExpert.bean.GetAppActivityBean; +import cn.shangyu.gdxzExpert.bean.GethonorDetailBean; +import cn.shangyu.gdxzExpert.bean.IconBean; +import cn.shangyu.gdxzExpert.bean.MyNewBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GrayManager; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.MyUserIconUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * A simple {@link Fragment} subclass. + + * create an instance of this fragment. + */ +public class MyNewFragment extends BaseFragment implements View.OnClickListener, OnCallBackFromNet { + + + + View view; + RecyclerView recycler_honor; + HonorAdapter honorAdapter; + ImageView pic; + TextView tv_name; + TextView patient_num,tv_gongyi,tv_hua,tv_qiandao; + TransformersLayout trans_icon,trans_icon1,trans_icon2,trans_icon3; + RelativeLayout r_banck,r_shezhi,r_fapiao,r_filicard; + private String versionName; + LinearLayout l_g,l_p,l_h; + Boolean qiandao=false; + private AddBonusPointsSuccessBean addBonusPointsBean; + private MainActivity mainActivity; + private static final int GETHONORDETAIL = 202; + private Dialog dialog1; + RelativeLayout im_bg; + private int getisaccount; + RelativeLayout r_z; + ImageView bt_nianzong; + private TextView mTv_new_version; + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + mainActivity = (MainActivity) getActivity(); + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) mainActivity.layout.getLayoutParams(); + p.setMargins(0,mainActivity.titleBarParams.height, 0, 0); + mainActivity.layout.requestLayout(); + view = UIUtils.inflate(R.layout.fragment_my_new); + getisaccount = SharePrefUtil.getInt(mActivity, "GETISACCOUNT", 1); + r_z=view.findViewById(R.id.r_z); + im_bg=view.findViewById(R.id.im_bg); + r_fapiao=view.findViewById(R.id.r_fapiao); + r_banck=view.findViewById(R.id.r_banck); + r_filicard=view.findViewById(R.id.r_filicard); + bt_nianzong=view.findViewById(R.id.bt_nianzong); + mTv_new_version = view.findViewById(R.id.tv_new_version);//发现新版本 + if (getisaccount==0){ + r_banck.setVisibility(View.GONE); + r_z.setPadding(0,0,0,CommonUtil.dip2px(getActivity(),10)); + } + r_shezhi=view.findViewById(R.id.r_shezhi); + bt_nianzong.setOnClickListener(this); + r_filicard.setOnClickListener(this); + r_banck.setOnClickListener(this); + r_shezhi.setOnClickListener(this); + r_fapiao.setOnClickListener(this); + l_g=view.findViewById(R.id.l_g); + l_g.setOnClickListener(this); + l_h=view.findViewById(R.id.l_h); + l_h.setOnClickListener(this); + l_p=view.findViewById(R.id.l_p); + l_p.setOnClickListener(this); + recycler_honor=view.findViewById(R.id.recycler_honor); + LinearLayoutManager linearLayoutManagerv = new LinearLayoutManager(getActivity()); + linearLayoutManagerv.setOrientation(LinearLayoutManager.HORIZONTAL); + recycler_honor.setLayoutManager(linearLayoutManagerv); + pic=view.findViewById(R.id.pic); + pic.setOnClickListener(this); + tv_name=view.findViewById(R.id.tv_name); + patient_num=view.findViewById(R.id.patient_num); + tv_gongyi=view.findViewById(R.id.tv_gongyi); + tv_hua=view.findViewById(R.id.tv_hua); + tv_qiandao=view.findViewById(R.id.tv_qiandao); + tv_qiandao.setOnClickListener(this); + trans_icon=view.findViewById(R.id.trans_icon); + trans_icon1=view.findViewById(R.id.trans_icon1); + trans_icon2=view.findViewById(R.id.trans_icon2); + trans_icon3=view.findViewById(R.id.trans_icon3); + + initicon(); + initData(); + getMyData(); + getGroup(); + getzongjie(); + return view; + } + + List iconBeans3=new ArrayList<>(); + List iconBeans=new ArrayList<>(); + private void initicon() + { + iconBeans.clear(); + iconBeans.add(new IconBean(R.drawable.hzsh,"患者审核")); + iconBeans.add(new IconBean(R.drawable.hzfz,"患者分组")); + iconBeans.add(new IconBean(R.drawable.qfxz,"群发消息")); + iconBeans.add(new IconBean(R.drawable.sfewm,"随访二维码")); + iconBeans.add(new IconBean(R.drawable.czjh,"出诊计划")); + trans_icon.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans.get(position).getName()); + } + }) + .load(iconBeans, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + return R.layout.icon_item;//第二步使用的布局 + } + }); + List iconBeans1=new ArrayList<>(); + iconBeans1.add(new IconBean(R.drawable.wdsp,"我的视频")); + iconBeans1.add(new IconBean(R.drawable.wdkc,"我的课程")); + iconBeans1.add(new IconBean(R.drawable.wdxz,"我的下载")); + iconBeans1.add(new IconBean(R.drawable.wdsc,"我的收藏")); + trans_icon1.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans1.get(position).getName()); + } + }) + .load(iconBeans1, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + return R.layout.icon_item;//第二步使用的布局 + } + }); + List iconBeans2=new ArrayList<>(); + + if (getisaccount>0){ + iconBeans2.add(new IconBean(R.drawable.wdzh,"我的账户")); + } + + iconBeans2.add(new IconBean(R.drawable.wdjf,"我的积分")); + iconBeans2.add(new IconBean(R.drawable.wdfl,"我的福利")); + + if (getisaccount>0){ + iconBeans2.add(new IconBean(R.drawable.wdxh,"我的鲜花")); + iconBeans2.add(new IconBean(R.drawable.kjmx,"课件明细")); + } + + + iconBeans2.add(new IconBean(R.drawable.kcmx,"课程明细")); + iconBeans2.add(new IconBean(R.drawable.sxy,"送心意")); + + trans_icon2.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans2.get(position).getName()); + } + }) + .load(iconBeans2, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + + return R.layout.icon_item;//第二使用的布局 + } + }); + + iconBeans3.clear(); + iconBeans3.add(new IconBean(R.drawable.wxgl,"微信关联")); + iconBeans3.add(new IconBean(R.drawable.ghsjh,"更换手机号")); + if(isNotificationEnabled()) + { + iconBeans3.add(new IconBean(R.drawable.xxtx,"通知已开")); + } + else + { + iconBeans3.add(new IconBean(R.drawable.xxgb,"通知已关")); + } + versionName = UpdateVersionUtils.getVersionName(); + iconBeans3.add(new IconBean(R.drawable.fxxbb,"V"+ versionName)); + trans_icon3.apply(null)//options可为null + .addOnTransformersItemClickListener(new OnTransformersItemClickListener() { + @Override + public void onItemClick(int position) { + MyUserIconUtil.myIntent(mActivity,iconBeans3.get(position).getName()); + } + }) + .load(iconBeans3, new TransformersHolderCreator() { + @Override + public Holder createHolder(View itemView) { + return new RollAdapter(itemView); + } + @Override + public int getLayoutId() { + return R.layout.icon_item;//第二使用的布局 + } + }); + } + private void getGroup() { + Map param = new HashMap(); + sendJsonPostParamtoNetSignMD5(checkVersion,param,101,this); + + } + + private void processDataGrup(String resultJson) { + // TODO Auto-generated method stub + if (resultJson == null) { + return; + } + + String code = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + if("80002".equals(code)) + { + mTv_new_version.setVisibility(View.VISIBLE); + if(trans_icon3!=null&&iconBeans3.size()>3) + { + iconBeans3.get(3).setName("发现新版本"); + iconBeans3.get(3).setImg(R.drawable.fxbb); + trans_icon3.notifyDataChanged(iconBeans3); + + } + + } + else + { + return; + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + } + private void initData() + { + // 从sp文件里取出资料 + String realName = SharePrefUtil.getString(mActivity, "realName", ""); + tv_name.setText(realName); + String photo = SharePrefUtil.getString(mActivity, "photo", null); + if (photo != null && !"null".equals(photo)) { + ImageLoader + .getInstance() + .displayImage( + Url.urlHtml + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + } + } + //年终总结 + private void getzongjie() { + Map map = new HashMap<>(); + map.put("id","8"); + sendJsonPostParamtoNetSignMD5(Url.getAppActivity,map,200,this); + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("我的"); + getNewPatientList(); + String photo = SharePrefUtil.getString(mActivity, "MyChangePhoto", ""); + if (!StringUtil.isBland(photo) && pic != null) { + ImageLoader + .getInstance() + .displayImage( + photo, + pic, + ImageOptions + .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); + SharePrefUtil.saveString(mActivity, "MyChangePhoto", null); + } + if(trans_icon3!=null&&iconBeans3.size()>2) + { + if(isNotificationEnabled()) + { + iconBeans3.get(2).setName("通知已开"); + iconBeans3.get(2).setImg(R.drawable.xxtx); + } + else + { + iconBeans3.get(2).setName("通知已关"); + iconBeans3.get(2).setImg(R.drawable.xxgb); + } + trans_icon3.notifyDataChanged(iconBeans3); + } + + String isbound_wechat = SharePrefUtil.getString(mActivity, "isbound_wechat", ""); + if(!StringUtil.isEmpty(isbound_wechat)&&trans_icon3!=null&&iconBeans3.size()>0) + { + + if(isbound_wechat.equals("yes")) + { + iconBeans3.get(0).setName("微信解绑"); + iconBeans3.get(0).setImg(R.drawable.wxjb); + } + else + { + iconBeans3.get(0).setName("微信关联"); + iconBeans3.get(0).setImg(R.drawable.wxgl); + } + trans_icon3.notifyDataChanged(iconBeans3); + } + else + { + isBoundWechatByUuid(); + } + } + //判断用户是否绑定过微信 + private void isBoundWechatByUuid() { + Map map = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.isBoundWechatByUuid,map,207,this); + } + /** + * 获取新我的数据 + */ + private void getMyData() { +// showProgressDialog("加载中"); + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.myNew,map,111,this); + + + } + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * + */ + private void getNewPatientList() { + String uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + HttpHandler httpHandlerNewPatient = HttpHelper.loadData( + HttpRequest.HttpMethod.POST, getapplyList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + int count = 0; + if(bean!=null&&bean.data!=null) + { + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + } + if(count>0) + { + iconBeans.get(0).setRed(true); + trans_icon.notifyDataChanged(iconBeans); + } + else + { + iconBeans.get(0).setRed(false); + trans_icon.notifyDataChanged(iconBeans); + } + + + + } + private void qiandao() + { + showProgressDialog("请稍后"); + Map param = new HashMap<>(); + param.put("score_type","1"); + sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, 1, this); + } + private void showSignInDailog() { + // TODO Auto-generated method stub + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_signin, null); + TextView tv_gdxzday = (TextView) layout.findViewById(R.id.tv_gdxzday); + TextView tv_totalDay = (TextView) layout.findViewById(R.id.tv_totalDay); + TextView tv_continuous_day = (TextView) layout.findViewById(R.id.tv_continuous_day); + TextView tv_contenttext = (TextView) layout.findViewById(R.id.tv_text1); + ImageView iv_close = (ImageView) layout.findViewById(R.id.iv_close); + tv_gdxzday.setText("今天是我们相识的第"+addBonusPointsBean.getGdxzday()+"天"); + tv_totalDay.setText(addBonusPointsBean.getTotalDay()+""); + tv_continuous_day.setText(addBonusPointsBean.getContinuous_day()+""); + tv_contenttext.setText(addBonusPointsBean.getQuestionAndAnswer().getTitle()); + + final Dialog dialog = new AlertDialog.Builder(getActivity()).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0)); + GrayManager.getInstance().setLayerGrayType(dialog.getWindow().getDecorView()); + iv_close.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + tv_contenttext.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent broadc = new Intent(mActivity, NewsDetailActivity.class); + broadc.putExtra("url", Url.urlHtml+addBonusPointsBean.getQuestionAndAnswer().getPath()); + broadc.putExtra("newsTitle",addBonusPointsBean.getQuestionAndAnswer().getTitle()); + broadc.putExtra("summary", addBonusPointsBean.getQuestionAndAnswer().getSummary()); + broadc.putExtra("title", "新闻详情"); + broadc.putExtra("flag", 1); + startActivity(broadc); + dialog.dismiss(); + } + }); + + } + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public LoadingPage.ResultState onLoad() { + return null; + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_nianzong) { + if(bean1!=null&&bean1.getData()!=null&&bean1.getData().getUrl_path()!=null) + { + + Intent broadc = new Intent(mActivity, NewsDetailActivity.class); + if(bean1.getData().getUrl_path().contains("?")) + { + broadc.putExtra("url",bean1.getData().getUrl_path()+"&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + else + { + broadc.putExtra("url",bean1.getData().getUrl_path()+"?&user_uuid="+SharePrefUtil.getString(mActivity, Constant.uuid,"")); + } + if(bean1.getData().getName().contains("{{name}}")||bean1.getData().getNote().contains("{{name}}")) + { + broadc.putExtra("newsTitle",bean1.getData().getName().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + broadc.putExtra("summary",bean1.getData().getNote().replace("{{name}}",SharePrefUtil.getString(mActivity,Constant.realName,""))); + + } + else + { + broadc.putExtra("newsTitle",bean1.getData().getName()); + broadc.putExtra("summary",bean1.getData().getNote()); + } + broadc.putExtra("title","肝胆相照"); + + broadc.putExtra("homemodal","yes"); + + broadc.putExtra("flag", 1); + startActivity(broadc); + } + } else if (id == R.id.tv_qiandao) { + if(qiandao) + { + startActivity(new Intent(mActivity, PointsMallActivity.class)); + } + else + { + qiandao(); + } + } else if (id == R.id.l_g) { + startActivity(new Intent(mActivity, PublicConsultationActivity.class)); + } else if (id == R.id.l_p) { + startActivity(new Intent(mActivity, MyPatientActivity.class)); + } else if (id == R.id.l_h) { + startActivity(new Intent(mActivity, MyFlowerActivity.class)); + } else if (id == R.id.pic) { + startActivity(new Intent(mActivity, MyDetailInfoActivity.class)); + } else if (id == R.id.r_banck) { + startActivity(new Intent(mActivity, MyBankCardActivity.class)); + } else if (id == R.id.r_fapiao) { + startActivity(new Intent(mActivity, FaPiaoActivity.class)); + } else if (id == R.id.r_shezhi) { + startActivity(new Intent(mActivity, SettingAndHelpActivity.class)); + } else if (id == R.id.r_filicard) { + startActivity(new Intent(mActivity, MyFuliCardActivity.class)); + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + MyNewBean myNewBean; + List honorBeans; + GetAppActivityBean bean1; + List honorlistBeans=new ArrayList<>(); + CellHonorAdapter cellAdapter; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("LoginTAG","my"+resultCode+resultJson); + switch (resultCode) + { + case 101: + processDataGrup(resultJson); + break; + case 1: + closeProgressDialog(); + try { + JSONObject jsonObject = new JSONObject(resultJson); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(optString)) { +// ToastUtil.showMessage(message); + needreportSimple("signin"); + Constant.isRefreshpoint = true;//个人中心界面刷新 + Constant.isSignIn = true; + Gson gson = new Gson(); + addBonusPointsBean = gson.fromJson(resultJson, AddBonusPointsSuccessBean.class); + //点击签到 + showSignInDailog(); + getMyData(); + + }else if("201".equals(optString)){ + + ToastUtil.showMessage("今日已签到,每日只能签到一次"); + + }else{ + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case 207: + try { + + JSONObject jsonObject1 = new JSONObject(resultJson); + String code1 = jsonObject1.getString("code"); + if ("200".equals(code1)){ + int isBound = jsonObject1.getInt("isBound"); + if (isBound==1){ + if(trans_icon3!=null&&iconBeans3.size()>0) + { + iconBeans3.get(0).setName("微信解绑"); + iconBeans3.get(0).setImg(R.drawable.wxjb); + } + + }else { + iconBeans3.get(0).setName("微信关联"); + iconBeans3.get(0).setImg(R.drawable.wxgl); + } + trans_icon3.notifyDataChanged(iconBeans3); + }else { + ToastUtil.showMessage(jsonObject1.getString("message")); + } + + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + + } + break; + case 200: + bean1 = GsonTools.fromGsonToBean(resultJson, GetAppActivityBean.class); + GetAppActivityBean.DataBean data = bean1.getData(); + if (data!=null&&"200".equals(bean1.getCode())) { + ImageLoader.getInstance().displayImage( + urlHtml + data.getImg(), + bt_nianzong + ); + bt_nianzong.setVisibility(View.VISIBLE); + } + break; + case 111: +// closeProgressDialog(); + myNewBean= GsonTools.fromGsonToBean(resultJson,MyNewBean.class); + + if("200".equals(myNewBean.getCode())) + { + if(getActivity()==null) + return; + if(myNewBean.getData()!=null) + { + Glide.with(getActivity()) + .asBitmap() + .load(myNewBean.getData().getMyInfoBackGround()) + .into(new SimpleTarget() { + @Override + public void onResourceReady(Bitmap resource, Transition transition) { + Drawable drawable = new BitmapDrawable(resource); + im_bg.setBackground(drawable); + } + + }); + +// Glide.with(getActivity()).asBitmap().load(myNewBean.getData().getMyInfoBackGround()) +// .into(im_bg); + + patient_num.setText(myNewBean.getData().getExpert_apply_num()); + tv_gongyi.setText(myNewBean.getData().getConsult_total_num()); + tv_hua.setText(myNewBean.getData().getPing_flowewr_num()); + if("1".equals(myNewBean.getData().getSign_in())) + { + if(!StringUtil.isEmpty(myNewBean.getData().getTotal_points())) + { + if(Integer.valueOf(myNewBean.getData().getTotal_points())>=10000) + { + BigDecimal decimal= new BigDecimal(Integer.valueOf(myNewBean.getData().getTotal_points())/ 10000.00); +// BigDecimal decimal= new BigDecimal(15893/ 10000.00); + BigDecimal newdecimal= decimal.setScale(1, decimal.ROUND_DOWN); + tv_qiandao.setText(" "+newdecimal.doubleValue()+"万 "); + } + else + { + if(Integer.valueOf(myNewBean.getData().getTotal_points())<10) + { + tv_qiandao.setText(" "+myNewBean.getData().getTotal_points()+" "); + } + else + { + tv_qiandao.setText(" "+myNewBean.getData().getTotal_points()+" "); + } + + + } + + + } + else + { + tv_qiandao.setText(" 0 "); + } + tv_qiandao.setBackgroundResource(R.drawable.qd_bg); + tv_qiandao.setTextColor(Color.parseColor("#FFF13632")); + qiandao=true; + } + else + { + tv_qiandao.setText("签到"); + tv_qiandao.setBackgroundResource(R.drawable.qd1_bg); + tv_qiandao.setTextColor(Color.parseColor("#ffffff")); + qiandao=false; + } + int ranking =0; + if(!StringUtil.isEmpty(myNewBean.getData().getRanking())) + { + ranking=Integer.valueOf(myNewBean.getData().getRanking()); + } + + honorBeans=myNewBean.getData().getHonor_list(); + if(honorAdapter==null) + { + honorAdapter=new HonorAdapter(getActivity(),honorBeans,ranking); + recycler_honor.setAdapter(honorAdapter); + int finalRanking = ranking; + honorAdapter.setOnItemClickListener(new OnRecyclerViewItemClickListener() { + @Override + public void onItemClick(View view, int position) { + if(finalRanking >0&&position==0) + { + + } + else + { + if(finalRanking >0) + { + gethonorDetail(honorBeans.get(position-1).getId()); + } + else + { + gethonorDetail(honorBeans.get(position).getId()); + } + + } + + } + }); + + } + else + { + honorAdapter.notifyDataSetChanged(); + } + } + } + else + { + ToastUtil.showToast(myNewBean.getMsg()); + } + break; + case GETHONORDETAIL: + LogUtils.i("GETHONORDETAIL = "+resultJson); + Gson gson2 = new Gson(); + GethonorDetailBean fromJsonBean2= gson2.fromJson(resultJson, GethonorDetailBean.class); + if (fromJsonBean2!=null&&"1".equals(fromJsonBean2.getCode())){ + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.layout_yingxiongbang_new, null); + if (dialog1==null){ + dialog1 = new AlertDialog.Builder(getActivity(), ProgressDialog.THEME_HOLO_LIGHT).create(); + + } + RecyclerView re_nickname=layout.findViewById(R.id.re_nickname); + re_nickname.setLayoutManager(new GridLayoutManager(getActivity(), 2, LinearLayoutManager.VERTICAL, false)); +// RelativeLayout rl_nickname = (RelativeLayout) layout.findViewById(R.id.rl_nickname); + TextView tv_context = (TextView) layout.findViewById(R.id.tv_context); +// TextView tv_nick_name1 = (TextView) layout.findViewById(R.id.tv_nick_name1); +// TextView tv_nick_name2 = (TextView) layout.findViewById(R.id.tv_nick_name2); +// TextView tv_nick_name3 = (TextView) layout.findViewById(R.id.tv_nick_name3); +// TextView tv_nick_name4 = (TextView) layout.findViewById(R.id.tv_nick_name4); + ImageView iv_img = (ImageView) layout.findViewById(R.id.iv_img); + View v_close = layout.findViewById(R.id.v_close); + TextView tv_title = (TextView) layout.findViewById(R.id.tv_title); + tv_context.setText(fromJsonBean2.getData().getNote()); + tv_title.setText(fromJsonBean2.getData().getTitle()); + ImageLoader.getInstance().displayImage(Url.urlHtml + fromJsonBean2.getData().getImg(), iv_img); + honorlistBeans.clear(); + if (fromJsonBean2.getData().getHonorlist()!=null){ + honorlistBeans.addAll(fromJsonBean2.getData().getHonorlist()); + cellAdapter = new CellHonorAdapter(getActivity(), honorlistBeans); + re_nickname.setAdapter(cellAdapter); +// rl_nickname.setVisibility(View.VISIBLE); +// if (fromJsonBean2.getData().getHonorlist().size()>0){ +// tv_nick_name1.setVisibility(View.VISIBLE); +// tv_nick_name1.setText(fromJsonBean2.getData().getHonorlist().get(0).getNick_name()); +// } +// if (fromJsonBean2.getData().getHonorlist().size()>1){ +// tv_nick_name2.setVisibility(View.VISIBLE); +// tv_nick_name2.setText(fromJsonBean2.getData().getHonorlist().get(1).getNick_name()); +// } +// if (fromJsonBean2.getData().getHonorlist().size()>2){ +// tv_nick_name3.setVisibility(View.VISIBLE); +// tv_nick_name3.setText(fromJsonBean2.getData().getHonorlist().get(2).getNick_name()); +// } +// if (fromJsonBean2.getData().getHonorlist().size()>3){ +// tv_nick_name4.setVisibility(View.VISIBLE); +// tv_nick_name4.setText(fromJsonBean2.getData().getHonorlist().get(3).getNick_name()); +// } + } +// if(cellAdapter==null) { + +// } +// else +// { +// cellAdapter.notifyDataSetChanged(); +// } + dialog1.show(); + Window window =dialog1.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + GrayManager.getInstance().setLayerGrayType(dialog1.getWindow().getDecorView()); + v_close.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog1.dismiss(); + } + }); + + } + + break; + } + + } + private void gethonorDetail(String id) { + Map map = new HashMap<>(); + map.put("expert_uuid",SharePrefUtil.getString(mActivity, "uuid", "")); + map.put("id",id); + sendJsonPostParamtoNetSignMD5(Url.gethonorDetail,map,GETHONORDETAIL,this); + } + @RequiresApi(api = Build.VERSION_CODES.KITKAT) + private boolean isNotificationEnabled() { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + //8.0手机以上 + if (((NotificationManager)getActivity(). getSystemService(Context.NOTIFICATION_SERVICE)).getImportance() == NotificationManager.IMPORTANCE_NONE) { + + + return false; + } + } + + String CHECK_OP_NO_THROW = "checkOpNoThrow"; + String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION"; + + AppOpsManager mAppOps = (AppOpsManager)getActivity(). getSystemService(Context.APP_OPS_SERVICE); + ApplicationInfo appInfo = getActivity(). getApplicationInfo(); + String pkg = getActivity().getPackageName(); + int uid = appInfo.uid; + + Class appOpsClass = null; + + try { + appOpsClass = Class.forName(AppOpsManager.class.getName()); + Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, + String.class); + Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); + + int value = (Integer) opPostNotificationValue.get(Integer.class); + return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED); + + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initData(); + getMyData(); + getGroup(); + getzongjie(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyProjectFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyProjectFragment.java new file mode 100644 index 0000000..8d6cab2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/MyProjectFragment.java @@ -0,0 +1,522 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; +import static cn.shangyu.gdxzExpert.utils.Url.youangetRoleList; +import static cn.shangyu.gdxzExpert.utils.Url.youanselectRole; + +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.ListView; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; + +import com.google.gson.Gson; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyProjectsDetailActivity; +import cn.shangyu.gdxzExpert.adapter.MyProjectAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.proMyListBean; +import cn.shangyu.gdxzExpert.bean.proRoleBean; +import cn.shangyu.gdxzExpert.bean.proRoleTokenBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widge.pickerview.OptionsPopupWindow; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link MyProjectFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class MyProjectFragment extends BaseFragment implements AdapterView.OnItemClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public MyProjectFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment MyProjectFragment. + */ + // TODO: Rename and change types and number of parameters + public static MyProjectFragment newInstance(String param1, String param2) { + MyProjectFragment fragment = new MyProjectFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + PullToRefreshListView ptr; + MyProjectAdapter projectAdapter; + public int page=1; + View ll_empty; + public String keywords=""; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_my_project); + ptr=view.findViewById(R.id.lv_item_c); + ptr.setMode(PullToRefreshBase.Mode.BOTH); + ptr.setOnItemClickListener(this); + ptr.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page=1; + init(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + init(page+""); + } + }); + ll_empty=view.findViewById(R.id.ll_empty); + gettokens( Url.youanmyList); + return view; + } + String token=""; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } +// if(!request) +// { +// requesttips(url); +// return; +// } + + + sendJsonPostParamTokenMD5(getActivity(),new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + closeProgressDialog(); + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage(simpleBean.getMessage()); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private ECAlertDialog buildAlert; + Boolean request=false; + public void requesttips(String url) { + buildAlert = ECAlertDialog.buildAlert(getActivity(), "查询失败,请点击重试再次查询", "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + request=false; + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + buildAlert.dismiss(); + request=true; + gettokens(url); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + private void handletoken(String url) + { + if(url.contains(Url.youanmyList)) + { + init(page+""); + } + else if(url.contains(youangetRoleList)) + { + role(); + } + else if(url.contains(youanselectRole)) + { + setrole(); + } + } + proMyListBean bean; + private List list=new ArrayList<>(); + public void init(String pageNum) + { + projectQueryForm pro=new projectQueryForm(); + pro.setPageNum(pageNum); + pro.setPageSize("10"); + pro.setKeywords(keywords); + Map headers=new HashMap<>(); + if(token!=null) + { + headers.put("x-access-token",token); + } + + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url = Url.youanmyList; + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + ptr.onRefreshComplete(); + if(hasrealtoken(response)>0) + { + bean=GsonTools.fromGsonToBean(response, proMyListBean.class); + if(bean.getData()!=null) + { + if(page==1) + { + list.clear(); + } + list.addAll(bean.getData().getList()); + if(page==1&&list.size()==0) + { + + ptr.setEmptyView(ll_empty); + return; + } + if(page>bean.getData().getPages()) + { + page--; + ToastUtil.showToast("没有更多了"); + ptr.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } + else + { + ptr.setMode(PullToRefreshBase.Mode.BOTH); + } + + setadapter(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.youanmyList); + } + else if(hasrealtoken(response)==-1) + { + + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + private void setadapter() + { + if(projectAdapter==null) + { + projectAdapter =new MyProjectAdapter(list); + ptr.setAdapter(projectAdapter); + } + else + { + projectAdapter.notifyDataSetChanged(); + } + + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + String projectId,roleId,title,rolename; + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + if("0".equals(list.get(i-1).getProjectEmployeeStatus())) + { + popwindow(); + return; + } + projectId=list.get(i-1).getProjectId(); + if(!StringUtil.isEmpty(list.get(i-1).getNickname())) + { + title=list.get(i-1).getNickname(); + } + else + { + title=list.get(i-1).getName(); + } +// title=list.get(i-1).getName(); + role(); + } + + + public void popwindow() { + buildAlert = ECAlertDialog.buildAlert(getActivity(), "您无权限进入该项目", "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + proRoleBean roleBean; + private void role() + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + OkHttpUtils + .get() + .url(youangetRoleList+projectId) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + roleBean=GsonTools.fromGsonToBean(response, proRoleBean.class); + if(hasrealtoken(response)>0) + { + if(roleBean.getData()!=null) + { + handledata(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(youangetRoleList); + } + else if(hasrealtoken(response)==-1) + { + + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + + ArrayList optionsItems=new ArrayList<>(); + List roledata=new ArrayList<>(); + private void handledata() + { + optionsItems.clear(); + roledata.clear(); + roledata.addAll(roleBean.getData()); + for (proRoleBean.RoleBean roleBean1:roledata ) + { + optionsItems.add(roleBean1.getRoleName()); + } + + + showPwOptions("选择角色",optionsItems,ptr); + } + + /** + * 弹出单项选择框 void + */ + private OptionsPopupWindow pwOptions; + private void showPwOptions(String title, + final ArrayList optionsItems,View tv + ) { + pwOptions = new OptionsPopupWindow(getActivity(),""); + pwOptions.setPopupTitle(title); + pwOptions.setPicker(optionsItems); + int position = 0; + + pwOptions.setSelectOptions(position); + pwOptions.showAtLocation(tv, Gravity.BOTTOM, 0, 0); + // 监听确定选择按钮 + pwOptions + .setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + String tx = optionsItems.get(options1); + roleId=roledata.get(options1).getRoleId(); + rolename=roledata.get(options1).getRoleName(); + setrole(); + + + } + }); + } + proRoleTokenBean roleTokenBean; + private void setrole() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); +// Log.d("okhttp","User-Agent"+WebSettings.getDefaultUserAgent(getActivity())); + OkHttpUtils + .get() + .url(youanselectRole+projectId+"/"+roleId) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + roleTokenBean=GsonTools.fromGsonToBean(response, proRoleTokenBean.class); + if(hasrealtoken(response)>0) + { + if(roleTokenBean.getData()!=null) + { + handledata1(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens(youanselectRole); + } + else if(hasrealtoken(response)==-1) + { + + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + @RequiresApi(api = Build.VERSION_CODES.N) + private void handledata1() + { + token=roleTokenBean.getData().getToken(); + Log.d("okhttp","token"+token); + SharePrefUtil.saveString(getContext(),"x_access_token",token); + List menuList=roleTokenBean.getData().getMenuList(); + Boolean patientcase_add=false; + if(menuList!=null&&menuList.size()>0) { + proRoleTokenBean.MeanuBean meanuBean = menuList.stream() + .filter(customer -> "patientcase:add".equals(customer.getApiPerms())).findAny().orElse(null); + if (meanuBean != null) { + patientcase_add = true; + } else { + patientcase_add = false; + } + } + Intent intent=new Intent(getActivity(), MyProjectsDetailActivity.class); + intent.putExtra("title",title); + intent.putExtra("projectId",projectId); + intent.putExtra("patientcase_add",patientcase_add); + startActivity(intent); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment.java new file mode 100644 index 0000000..b5f3edf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment.java @@ -0,0 +1,519 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.AbsoluteSizeSpan; +import android.text.style.ForegroundColorSpan; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PublicServiceDetailsActivity; +import cn.shangyu.gdxzExpert.adapter.ConsultAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.ConsultListBean; +import cn.shangyu.gdxzExpert.bean.ConsultListBean.DataList; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * 类名称:NewPublicServiceFragment 功能说明:新的公益咨询fragment 创建人:苏三元 时间:2015-9-24 + * 下午1:43:01 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class NewPublicServiceFragment extends BaseFragment implements + OnItemClickListener, OnCallBackFromNet { + private ConsultAdapter ListAdapter; + private ArrayList DataList = new ArrayList<>(); + private PullToRefreshListView ptrLv; + // 新的公益咨询接口地址 + private static String newConsultList = Url.getnewConsultList; + // 抢答的接口 + private static String resConsult = Url.getresConsult; + // 请求页码 + private int page = 1; + private int totalPage = 0; + private String consultUuid; + private String expertUuid; + private DataList list; + private int p; + private ECAlertDialog buildAlert; + private HttpHandler httpHandler; + private TextView mTv_Consult_total, mTv_Consult_read; + + RelativeLayout mLl_Consult_top; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_new_consult_big); + } + else { + view = UIUtils.inflate(R.layout.fragment_new_consult); + } + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_new_consult);// 下拉刷新的listview控件 + + // //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mTv_Consult_total = (TextView) view.findViewById(R.id.tv_consult_total); + mLl_Consult_top = (RelativeLayout) view + .findViewById(R.id.consult_backg); + mTv_Consult_read = (TextView) view.findViewById(R.id.tv_consult_read); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无新公益咨询"); + // 设置下拉与上啦都可以用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getList(newConsultList, page, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getList(newConsultList, page, false); + } + }); + initData(savedInstanceState); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData(Bundle savedInstanceState) { + expertUuid = SharePrefUtil.getString(mActivity, "uuid", ""); + // String result = SharePrefUtil + // .getString(mActivity, newConsultList, null); + // if (StringUtil.notEmpty(result)) { + // processData(result, 1, true); + // } else { + // // 显示加载框 + // showLoadingProgress(); + // } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(newConsultList, page, true); + } + Boolean isRefresh; + + /** + * 请求服务器。列表数据 getPatientList + * + * @param loadUrl + * void + * @param page + */ + private void getList(final String loadUrl, final int page, + final boolean isRefresh) { + this.isRefresh=isRefresh; + Map map = new HashMap<>(); + map.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(loadUrl,map,102,this); + // 封装参数 +// RequestParams params = new RequestParams(); +// // 判断是否是公益咨询列表还是抢答公益咨询,page = 0表示是抢答的接口 +// if (page != 0) { +// params.addBodyParameter("expertUuid", expertUuid); +// params.addBodyParameter("page", String.valueOf(page)); +// } else { +// params.addBodyParameter("expertUuid", expertUuid); +// params.addBodyParameter("consultUuid", consultUuid); +// } +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// // 表示是抢答的 +// if (page == 0) { +// isState(info.result); +// return; +// } +// if (page == 1) { +// SharePrefUtil.saveString(mActivity, loadUrl, +// info.result); +// } +// processData(info.result, page, isRefresh); +// +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + * @param page + */ + private void processData(String result, int page, boolean isRefresh) { + LogUtil.i("result = "+result); + ConsultListBean bean = GsonTools.fromGsonToBean(result, + ConsultListBean.class); + if (!"200".equals(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + if (bean.data.yetDayTotalNum != 0) { + mLl_Consult_top.setVisibility(View.VISIBLE); + mTv_Consult_total.setText("昨天共有" + bean.data.yetDayTotalNum + "条公益咨询"); + String sss = mTv_Consult_total.getText().toString(); + Spannable span = new SpannableString(mTv_Consult_total.getText()); + span.setSpan(new AbsoluteSizeSpan(dip2px(mActivity, 25)), 4, + sss.indexOf("条"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + span.setSpan(new ForegroundColorSpan(Color.YELLOW), 4, + sss.indexOf("条"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + mTv_Consult_total.setText(span); + } else { + mLl_Consult_top.setVisibility(View.GONE); + } + if (bean.data.yetDayTotalnumEPNum != 0) { + mTv_Consult_read.setText("您回答了" + bean.data.yetDayTotalnumEPNum + + "条,谢谢您的支持!"); + String ssss = mTv_Consult_read.getText().toString(); + Spannable spans = new SpannableString(mTv_Consult_read.getText()); + spans.setSpan(new AbsoluteSizeSpan(dip2px(mActivity, 25)), 4, + ssss.indexOf("条"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + spans.setSpan(new ForegroundColorSpan(Color.YELLOW), 4, + ssss.indexOf("条"), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + mTv_Consult_read.setText(spans); + } else { + mTv_Consult_read.setText("邀请您一起参与"); + if(getActivity()==null||getActivity().getResources()==null) + { + + } + else + { + Drawable drawableLeft = getActivity().getResources().getDrawable( + R.drawable.consult_zero); + + mTv_Consult_read.setCompoundDrawablesWithIntrinsicBounds(null, + null, drawableLeft, null); + mTv_Consult_read.setCompoundDrawablePadding(4); + } + + + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 +// LogUtil.i("size:" + bean.data.consult_list.list.size()); + if (bean.data == null || bean.data.consult_list==null||bean.data.consult_list.list== null||bean.data.consult_list.list.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data.consult_list.list); + } + } else { + // 加载更多下一页时候 + DataList.addAll(bean.data.consult_list.list); + } + + showAdapter(); + + // 完成刷新 + onLoaded(); + // 得到总页码数 + totalPage = bean.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (!isRefresh) { + ToastUtil.showToast("没有更多咨询了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void showAdapter() { + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ConsultAdapter(mActivity, false, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + } + + /** + * 抢答数据解析处理 isState 1.抢答成功 2.该公益咨询已被抢答 + * + * @param result + * void + */ + protected void isState(String result) { + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + String states = bean.code;// 1.抢答成功 2.该公益咨询已被抢答 + String message = bean.message; + closeProgressDialog(); + if (states.equals("1")) { + ToastUtil.showToast("抢答成功"); + Intent intent = new Intent(mActivity, + PublicServiceDetailsActivity.class); + String realName = list.getRealName(); + String photo = list.getPhoto(); + String content = list.getContent(); + String patientUuid = list.getPatientUuid(); + String mobile = list.getMobile(); + String birthDate = list.getBirthDate(); + int sex = list.getSex(); + intent.putExtra("realName", realName); + intent.putExtra("photo", photo); + intent.putExtra("content", content); + intent.putExtra("patientUuid", patientUuid); + intent.putExtra("mobile", mobile); + intent.putExtra("consultUuid", list.getUuid()); + intent.putExtra("drungtype",list.getDiseaseName()); + intent.putExtra("createDate",list.getCreateDate()); + intent.putExtra("birthDate", birthDate); + intent.putExtra("sex", sex); + startActivity(intent); + } else if (states.equals("2")) { + + showAlertTips(message); + /* + * DialogUtil.getMyProDialog(mActivity, "确定", message, new + * OnClickListener() { + * + * @Override public void onClick(View v) { // TODO Auto-generated + * method stub DialogUtil.dismissMyAlertDialog(); // + * 刷新界面数据,去除无法抢答的咨询 // getList(newConsultList, page, true); + * DataList.remove(p); ListAdapter.notifyDataSetChanged(); } + * }).setProgressBarVisibility(View.GONE); + */ + } + } + + // 弹出对话框 + private void showAlertTips(String message) { + buildAlert = ECAlertDialog.buildAlert(mActivity, message, + R.string.dialog_btn_confim, + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DataList.remove(p); + ListAdapter.notifyDataSetChanged(); + if (buildAlert.isShowing()) { + buildAlert.dismiss(); + } + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + LogUtil.i("position:" + position); + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + list = DataList.get(p); + int state = list.getState();// 咨询状态(1.未回答2.已回答3.已关闭) + consultUuid = list.getUuid(); + String realName = list.getRealName(); + String photo = list.getPhoto(); + String content = list.getContent(); + String patientUuid = list.getPatientUuid(); + String mobile = list.getMobile(); + String birthDate = list.getBirthDate(); + int sex = list.getSex(); + // expertUuid = list.getExpertUuid(); + + LogUtil.i("consultUuid:" + consultUuid + "mobile:" + mobile + + " realName:" + realName + " state:" + state); + // 获取抢答 + // showProgressDialog("抢答请求中..."); + // getList(resConsult, 0, true); + + Intent intent = new Intent(mActivity,PublicServiceDetailsActivity.class); + intent.putExtra("realName", realName); + intent.putExtra("photo", photo); + intent.putExtra("content", content); + intent.putExtra("patientUuid", patientUuid); + intent.putExtra("mobile", mobile); + intent.putExtra("sex", sex); + intent.putExtra("birthDate", birthDate); + intent.putExtra("drungtype",list.getDiseaseName()); + intent.putExtra("createDate",list.getCreateDate()); + intent.putExtra("consultUuid", consultUuid); + startActivity(intent); + /* + * switch (state) { case 1: Intent intent = new Intent(mActivity, + * PublicServiceDetailsActivity.class); intent.putExtra("realName", + * list.realName); intent.putExtra("photo", list.photo); + * intent.putExtra("content", list.content); + * intent.putExtra("patientUuid", list.patientUuid); + * intent.putExtra("mobile", list.mobile); startActivity(intent); break; + * case 2: DialogUtil.getMyProDialog(mActivity, "确定", "问题已被回答,请回答其他问题", + * new OnClickListener() { + * + * @Override public void onClick(View v) { // TODO Auto-generated method + * stub DialogUtil.dismissMyAlertDialog(); + * + * } }).setProgressBarVisibility(View.GONE); break; case 3: + * DialogUtil.getMyProDialog(mActivity, "确定", "问题已关闭,请回答其他问题", new + * OnClickListener() { + * + * @Override public void onClick(View v) { // TODO Auto-generated method + * stub DialogUtil.dismissMyAlertDialog(); } + * }).setProgressBarVisibility(View.GONE); break; + * + * default: break; } + */ + + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 102: + if (page == 1) { + SharePrefUtil.saveString(mActivity, newConsultList, + resultJson); + } + processData(resultJson, page, isRefresh); + break; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment1.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment1.java new file mode 100644 index 0000000..83b1c2a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewPublicServiceFragment1.java @@ -0,0 +1,368 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.graphics.Color; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.http.HttpHandler; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GetInterrogationActivity; +import cn.shangyu.gdxzExpert.activity.QuestionListActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ConsultListBean; +import cn.shangyu.gdxzExpert.bean.ListNewInterrogationBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateGetAge; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/6/18.(多对一解惑(新的咨询)) + */ + +public class NewPublicServiceFragment1 extends BaseFragment implements AdapterView.OnItemClickListener,OnCallBackFromNet { + private OneToMoreAdapter ListAdapter; + private ArrayList DataList = new ArrayList<>(); + private PullToRefreshListView ptrLv; + private int page = 1; + private int totalPage = 0; + private String consultUuid; + private String expertUuid; + private ConsultListBean.DataList list; + private int p; + private ECAlertDialog buildAlert; + private HttpHandler httpHandler; + public static final int LISTNEWINTERROGATION = 200; + private boolean isRefresh = true; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_new_consult1_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_new_consult1); + } + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_new_consult);// 下拉刷新的listview控件 + + // //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无新公益咨询"); + // 设置下拉与上啦都可以用 + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + isRefresh = true; + getList(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + isRefresh = false; + getList(); + } + }); + getList(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public LoadingPage.ResultState onLoad() { + return null; + } + + + /** + * 请求服务器。列表数据 getPatientList + * + */ + private void getList() { + + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + showProgressDialog("正在加载"); + + Map map = new HashMap<>(); + map.put("page",page+""); + sendJsonPostParamtoNetSignMD5(Url.listNewInterrogation,map,LISTNEWINTERROGATION,this); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + /** + * 刷新最后时间 setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 刷新完成 onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param + * @param + */ + private void processData(String result) { + ListNewInterrogationBean bean = GsonTools.fromGsonToBean(result, + ListNewInterrogationBean.class); + if (bean==null) { + ToastUtil.showToast(bean.getMessage()); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + if (bean.getData() == null || bean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.getData().getList()); + } + } else { + // 加载更多下一页时候 + DataList.addAll(bean.getData().getList()); + } + + showAdapter(); + + // 完成刷新 + onLoaded(); + // 得到总页码数 + totalPage = bean.getData().getPageSize(); + boolean isLastPage = bean.getData().isIsLastPage(); + // 是否有更多 + if (isLastPage) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void showAdapter() { + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new OneToMoreAdapter(); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + } + + + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + LogUtil.i("position:" + position); + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + int answer_num = DataList.get(p).getAnswer_num(); + Intent intent; + if (answer_num==0){ + intent = new Intent(getActivity(), QuestionListActivity.class); + }else + intent = new Intent(getActivity(), GetInterrogationActivity.class); + intent.putExtra("step1_uuid",DataList.get(p).getStep1_uuid()); + startActivity(intent); + + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case LISTNEWINTERROGATION: + LogUtil.i("LISTNEWINTERROGATION = "+resultJson); + processData(resultJson); + break; + } + } + class OneToMoreAdapter extends BaseAdapter { + private SimpleDateFormat simpleDateFormat; + + @Override + public int getCount() { + return DataList.size(); + } + + @Override + public Object getItem(int position) { + return DataList.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_onetomore_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_onetomore); + } + + vh = new ViewHolder(); + vh.tv_name = (TextView) convertView.findViewById(R.id.tv_name); + vh.tv_info = (TextView) convertView.findViewById(R.id.tv_info); + vh.tv_data = (TextView) convertView.findViewById(R.id.tv_data); + vh.tv_type = (TextView) convertView.findViewById(R.id.tv_type); + vh.tv_contant = (TextView) convertView.findViewById(R.id.tv_contant); + vh.tv_answer = (TextView) convertView.findViewById(R.id.tv_answer); + vh.iv_redpoint = (ImageView) convertView.findViewById(R.id.iv_redpoint); + vh.tv_xing=convertView.findViewById(R.id.tv_xing); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + if("0".equals(DataList.get(position).getUser_status())) + { + vh.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + vh.tv_xing.setVisibility(View.GONE); + vh.tv_info.setVisibility(View.GONE); + } + else + { + vh.tv_name.setText(DataList.get(position).getName().subSequence(0,1)); + vh.tv_xing.setVisibility(View.VISIBLE); + vh.tv_info.setVisibility(View.VISIBLE); + } + + vh.tv_type.setText(DataList.get(position).getDisease_name()); + vh.tv_contant.setText(DataList.get(position).getDisease_describe()); + vh.tv_data.setText(DataList.get(position).getCreate_date().split(" ")[0]); + String s = DataList.get(position).getBirthday().split(" ")[0]; + if (simpleDateFormat==null){ + simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); + } + int age = 0; + try { + Date parse = simpleDateFormat.parse(s); + age = DateGetAge.getAge(parse); + } catch (Exception e) { + e.printStackTrace(); + } + if (DataList.get(position).getSex()==0){ + vh.tv_info.setText("(男 "+age+"岁)"); + }else { + vh.tv_info.setText("(女 "+age+"岁)"); + } + int answer_num = DataList.get(position).getAnswer_num(); + if (answer_num!=0){ + vh.tv_answer.setText(DataList.get(position).getAnswer_num()+"位医生已回答"); + vh.tv_answer.setTextColor(Color.parseColor("#8D2316")); + vh.iv_redpoint.setVisibility(View.GONE); + }else { + vh.tv_answer.setText("暂未有医生回答"); + vh.iv_redpoint.setVisibility(View.VISIBLE); + vh.tv_answer.setTextColor(Color.parseColor("#999999")); + } + + return convertView; + } + } + + class ViewHolder { + TextView tv_name, tv_info,tv_data,tv_type,tv_contant,tv_answer,tv_xing; + ImageView iv_redpoint; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewsFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewsFragment.java new file mode 100644 index 0000000..82273a9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/NewsFragment.java @@ -0,0 +1,872 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.adapter.NewsAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.NewListBean; +import cn.shangyu.gdxzExpert.bean.NewListBean.NewsList; +import cn.shangyu.gdxzExpert.bean.NewsTagListBean; +import cn.shangyu.gdxzExpert.bean.NewsTagListBean.newsTagList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * 类名称:NewsFragment 类描述: 功能说明:新闻fragment + */ +public class NewsFragment extends BaseFragment implements OnItemClickListener, + OnCheckedChangeListener,OnCallBackFromNet { + + private static final int PROO = 1; + private ArrayList dotList; + private LinearLayout dotLl; + private TextView topNewsTitle; + private LinearLayout mViewPagerLay; + private View topNewsView; + private NewsAdapter newsAdapter; + private ArrayList newsList = new ArrayList(); + private List taglist = new ArrayList(); + private PullToRefreshListView ptrLv; + private ArrayList titleList; + private ArrayList urlList; + private Boolean isall = false; + private String tagname = ""; + private int lastCheckd = -1; + // 请求页码 + private int page = 1; + private HttpHandler httpHandler; + private RollViewPager mViewPager; + private String newsuuid = ""; + private String agreenum = ""; + private String readnum = ""; + private String newstagid = ""; + private LinearLayout mLabel_one_news; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case PROO: + if (taglist.size() != 0) { + setLablistleData(); + } else { + break; + } + break; + + default: + break; + } + }; + }; + private CheckBox rb_news; + private boolean isrollRefresh; + private boolean isToprollNews; + + // private String versionName; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.fragment_news); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_news); + + // 加载布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mLabel_one_news = (LinearLayout) view.findViewById(R.id.label_news);// 初始化RadioGroup布局 + // mLabel_one_news.setOnCheckedChangeListener(this); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无肝胆新闻"); + + topNewsView = inflater.inflate(R.layout.layout_roll_view, null); + dotLl = (LinearLayout) topNewsView.findViewById(R.id.dots_ll); + topNewsTitle = (TextView) topNewsView.findViewById(R.id.top_news_title); + mViewPagerLay = (LinearLayout) topNewsView.findViewById(R.id.top_news_viewpager); + newsAdapter = new NewsAdapter(mActivity); + // 根据手机尺寸设置顶部轮播图的宽高 + int width = mActivity.getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = mViewPagerLay + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + + mViewPagerLay.setLayoutParams(ivLp); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // 加载顶部新闻 + getNewsRollList(Url.getnewsRollNew, true, true, 0); + page = 1; + if (isall) { + getNewsList(Url.getNewsListNew, true, false, page); + } else { + getNewsList(Url.getdefaultNewsListNew, true, false, page); + } + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + if (isall) { + getNewsList(Url.getNewsListNew, false, false, page); + } else { + getNewsList(Url.getdefaultNewsListNew, false, false, page); + } + // getNewsList(Url.getNewsList, false, false, page); + } + }); + // getAppInfo(); + post(); + // initData(); + AddListData(Url.getnewsTagList);// 获取标签列表 + // AddListData(Url.getnewsTagList);// 获取标签列表 + return view; + } + + private void post() { + // TODO Auto-generated method stub + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + // 加载顶部新闻 + getNewsRollList(Url.getnewsRollNew, true, true, 0); + // 加载新闻列表,为啥非要写两个接口。。。 + if (isall) { + getNewsList(Url.getNewsListNew, true, false, page); + } else { + getNewsList(Url.getdefaultNewsListNew, true, false, page); + } + + } + //加载顶部新闻 + private void getNewsRollList(final String loadUrl, final boolean isrollRefresh, + final boolean isToprollNews, final int page) { + this.isrollRefresh = isrollRefresh; + this.isToprollNews = isToprollNews; + Map param = new HashMap<>(); + if (page != 0) { + if (isall) { + param.put("newstagid", newstagid); + param.put("page", String.valueOf(page)); + } else { + param.put("page", String.valueOf(page)); + } + } + sendJsonPostParamtoNetSignMD5(loadUrl, param, 1, this); + + +// // TODO Auto-generated method stub +// RequestParams params = new RequestParams(); +// // page = 0表示顶部新闻 +// if (page != 0) { +// if (isall) { +// params.addBodyParameter("newstagid", newstagid); +// params.addBodyParameter("page", String.valueOf(page)); +// } else { +// params.addBodyParameter("page", String.valueOf(page)); +// } +// } else { +// params = null; +// } +// LogUtils.i("==" + loadUrl + "=page=" + page); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// LogUtil.d("response_json---" + info.result); +// +// processData(isRefresh, info.result, page, isTopNews); +// +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + + } + + private void AddListData(final String loadUrl) { + // pd = new CustomProgressDialog(ct, "正在添加中...."); + // pd.show(); + RequestParams params = new RequestParams();// 封装参数 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + // pd.dismiss(); + processssData(info.result); + SharePrefUtil.saveString(mActivity, Url.getnewsTagList, + info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // pd.dismiss(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + private void processssData(String result) { + NewsTagListBean bean = GsonTools.fromGsonToBean(result, + NewsTagListBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + taglist = bean.data; + // if(taglist != null){ + // setLableData(); + // } + handler.sendEmptyMessage(1); + } + + private static int curId = 300; + private static int lastId = 200; + + // 设置标签数据相关属性 + private void setLablistleData() { + getNewsList(Url.getdefaultNewsListNew, true, false, page); + for (int i = 0; i < taglist.size(); i++) { + int padding = dip2px(mActivity, 8);// 设置padding + rb_news = new CheckBox(mActivity); + rb_news.setBackgroundResource(R.drawable.selector_news_chexkbox_bg);// 设置radiobutton的背景selector + rb_news.setTextColor(mActivity.getResources().getColorStateList( + R.color.selector_news_check_text_bg));// 設置字体颜色 + rb_news.setButtonDrawable(android.R.color.transparent);// 去掉radiobutton的圆圈 + rb_news.setPadding(padding, padding, padding, padding);// 设置radiobutton的padding + rb_news.setText(taglist.get(i).getName()); + rb_news.setTextSize(14);// 设置字体大小 + RadioGroup.LayoutParams params_rb_news = new RadioGroup.LayoutParams( + RadioGroup.LayoutParams.WRAP_CONTENT, + RadioGroup.LayoutParams.WRAP_CONTENT);// 设置radiobutton的大小 + int margin = dip2px(mActivity, 4.5);// 設置radiobutton的外边距 + params_rb_news.setMargins(margin, 0, margin, 0); + mLabel_one_news.addView(rb_news, params_rb_news);// 設置radiobutton的大小 + rb_news.setId(i); + rb_news.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + page = 1; + if (isChecked) { + newstagid = taglist.get(buttonView.getId()).getId(); + tagname = taglist.get(buttonView.getId()).getName(); + tv_empty_msg.setText("暂无" + tagname); + curId = buttonView.getId(); + // Toast.makeText(mActivity, buttonView.getId() + "", + // Toast.LENGTH_SHORT).show(); + CheckBox c = (CheckBox) mLabel_one_news + .getChildAt(lastId); + if (c != null && lastId != buttonView.getId()) { + c.setChecked(false); + } + isall = true; + getNewsList(Url.getnewsListNew, true, false, page); + } else { + isall = false; + CheckBox lastOne = (CheckBox) mLabel_one_news + .getChildAt(curId); + if (curId == lastId && !lastOne.isChecked()) { + getNewsList(Url.getdefaultNewsListNew, true, false, + page); + isall = false; + } + } + lastId = buttonView.getId(); + } + }); + // 默认进来是设置第一个为选中状态 + // if (i == 0) { + // rb_news.setChecked(true); + // } + // 获取第一个标签下的新闻信息 + // requestData(1, false, mTabelList.get(0).getId()); + } + + } + + // dp到像素的转换 + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } + + // private String getAppInfo() { + // try { + // String pkName = mActivity.getPackageName(); + // versionName = mActivity.getPackageManager().getPackageInfo( + // pkName, 0).versionName; + // // int versionCode = mActivity.getPackageManager() + // // .getPackageInfo(pkName, 0).versionCode; + // } catch (Exception e) { + // } + // return null; + // } + /* + * private void init() { ILoadingLayout startLabels = + * ptrLv.getLoadingLayoutProxy(true, false); + * startLabels.setPullLabel("下拉刷新");// 刚下拉时,显示的提示 + * startLabels.setRefreshingLabel("正在载入...");// 刷新时 + * startLabels.setReleaseLabel("释放立即刷新");// 下来达到一定距离时,显示的提示 ILoadingLayout + * endLabels = ptrLv.getLoadingLayoutProxy(false, true); + * endLabels.setPullLabel("上拉加载更多");// 刚下拉时,显示的提示 + * endLabels.setRefreshingLabel("正在加载...");// 刷新时 + * endLabels.setReleaseLabel("释放加载更多");// 下来达到一定距离时,显示的提示 } + */ + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + @Override + public void onResume() { + super.onResume(); + String newsuuid = SharePrefUtil + .getString(mActivity, "callnewsUuid", ""); + if (bean != null) { + if (!newsuuid.equals("")) { + for (int i = 0; i < bean.data.size(); i++) { + if (bean.data.get(i).getUuid().equals(newsuuid)) { + + bean.data.get(i).setReadnum( + SharePrefUtil.getString(mActivity, + "callnewsread", "")); + bean.data.get(i).setAgreenum( + SharePrefUtil.getString(mActivity, + "callnewsagree", "")); + } + } + } + } + if (newsList != null) { + if (!newsuuid.equals("")) { + + for (int i = 0; i < newsList.size(); i++) { + if (newsList.get(i).getUuid().equals(newsuuid)) { + + newsList.get(i).setReadnum( + SharePrefUtil.getString(mActivity, + "callnewsread", "")); + newsList.get(i).setAgreenum( + SharePrefUtil.getString(mActivity, + "callnewsagree", "")); + } + } + if (newsAdapter != null) { + // newsList.addAll(bean1.data); + newsAdapter.getDatas(newsList); + newsAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "callnewsUuid"); + if (mViewPager != null && isStop) { + mViewPager.startRoll(); + } + } + + boolean isStop = false; + private boolean isRefresh; + private boolean isTopNews; + + public void initData() { + // String ver = SharePrefUtil.getString(mActivity, "version", null); + // if(versionName.equals(ver)){ + // String r = SharePrefUtil.getString(mActivity, Url.getnewsRoll, null); + // String result = SharePrefUtil.getString(mActivity, Url.getNewsList, + // null); + // if (!TextUtils.isEmpty(result) && !TextUtils.isEmpty(r)) { + // // sp有则解析顶部新闻 + // processData(true, r, page, true); + // // 解析新闻 + // processData(true, result, page, false); + // } else { + // // 显示加载框 + // showLoadingProgress(); + // } + // + // String taglist = SharePrefUtil.getString(mActivity, + // Url.getnewsTagList, null); + // if(!TextUtils.isEmpty(taglist)){ + // processData(taglist); + // }else{ + // // 显示加载框 + // showLoadingProgress(); + // } + // if (!CommonUtil.isNetworkAvailable()) { + // onLoaded(); + // ptrLv.setEmptyView(tv_load_fail); + // return; + // } + + // // 网络是否可用 + // if (!CommonUtil.isNetworkAvailable()) { + // onLoaded(); + // ptrLv.setEmptyView(tv_load_fail); + // return; + // } + // // 加载顶部新闻 + // getNewsList(Url.getnewsRoll, true, true, 0); + // // 加载新闻列表,为啥非要写两个接口。。。 + // getNewsList(Url.getNewsList, true, false, page); + // } + // //当缓存时间大于5分钟则刷新数据 + // String time = SharePrefUtil.getString(mActivity, + // "key_news_fragment_cache_date", ""); + // if (!StringUtil.isBland(time)) { + // int minute = DateUtil.compareTime(time, 5); + // if (minute > 5) { + // //加载顶部新闻 + // getNewsList(Url.getnewsRoll, true, true, 0); + // //加载新闻列表,为啥非要写两个接口。。。 + // getNewsList(Url.getNewsList, true, false, page); + // } + // } + // GetTopViewSp(result); + } + + /** + * 请求服务器 getNewsList + * + * @param loadUrl + * 地址 + * @param isRefresh + * 是否是刷新请求 + * @param isTopNews + * 是否是顶部新闻 + * @param page + * 页码 void + */ + private void getNewsList(final String loadUrl, final boolean isRefresh, + final boolean isTopNews, final int page) { + this.isRefresh = isRefresh; + this.isTopNews = isTopNews; + // 封装参数 + Map paramMap = new HashMap<>(); + if (page != 0) { + if (isall) { + paramMap.put("newstagid", newstagid); + paramMap.put("page", String.valueOf(page)); + } else { + paramMap.put("page", String.valueOf(page)); + } + } + sendJsonPostParamtoNetSignMD5(loadUrl, paramMap, 2, this); + +// RequestParams params = new RequestParams(); +// // page = 0表示顶部新闻 +// if (page != 0) { +// if (isall) { +// params.addBodyParameter("newstagid", newstagid); +// params.addBodyParameter("page", String.valueOf(page)); +// } else { +// params.addBodyParameter("page", String.valueOf(page)); +// } +// } else { +// params = null; +// } +// LogUtils.i("==" + loadUrl + "=page=" + page); +// httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// LogUtil.d("response_json---" + info.result); +// // 是否顶部 +// // if (isTopNews) { +// // // 保存顶部新闻到sp +// // SharePrefUtil.saveString(mActivity, +// // Url.getnewsRoll, info.result); +// // } else { +// // if (isRefresh) { +// // // 保存新闻到sp +// // SharePrefUtil.saveString(mActivity, +// // Url.getNewsList, info.result); +// // // 保存缓存的时间 +// // SharePrefUtil +// // .saveString( +// // mActivity, +// // "key_news_fragment_cache_date", +// // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); +// // } +// // } +// processData(isRefresh, info.result, page, isTopNews); +// +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(mActivity, 6), CommonUtil.dip2px( + mActivity, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(mActivity); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + } + } + + NewListBean bean; + NewListBean bean1; + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(final boolean isRefresh, String result, int page, + boolean isTop) { + + // bean = GsonTools.fromGsonToBean(result, NewListBean.class);// + // 测试的NewsListBean + if (isTop) { + bean = GsonTools.fromGsonToBean(result, NewListBean.class);// 测试的NewsListBean + if (!StringUtil.isOneToCode(bean.code)) { + if (bean.data != null && bean.data.size() > 0) { + titleList = new ArrayList(); + urlList = new ArrayList(); + for (int i = 0; i < bean.data.size(); i++) { + titleList.add(bean.data.get(i).title);// 标题 + if (!TextUtils.isEmpty(bean.data.get(i).headImg)) { + urlList.add(Url.urlHtml + bean.data.get(i).headImg);// //封面图片 + } else { + urlList.add("");// + } + } + // 轮播图的点 + initDot(bean.data.size()); + mViewPager = new RollViewPager(mActivity, dotList, + R.drawable.dot_focus, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + String url = Url.urlHtml + + bean.data.get(position).path; + String title = bean.data.get(position).title; + String summary = bean.data.get(position).summary; + String headImg = bean.data.get(position).headImg; + newsuuid = bean.data.get(position).uuid; + agreenum = bean.data.get(position).agreenum; + readnum = bean.data.get(position).readnum; + intent.putExtra("url", url); + // intent.putExtra("title", title); + intent.putExtra("newssuuuid", newsuuid); + intent.putExtra("newssagreenum", agreenum); + intent.putExtra("newssreadnum", readnum); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsTitle", title); + intent.putExtra("summary", summary); + intent.putExtra("imageUrl", Url.urlHtml + + headImg); + intent.putExtra("flag", 4); + mActivity.startActivity(intent); +// needreportDetail("肝胆新闻",bean.data.get(position).getTags(),bean.data.get(position).title); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, + LayoutParams.WRAP_CONTENT)); + // top图片地址 + mViewPager.setUriList(urlList); + // top标题 + mViewPager.setTitle(topNewsTitle, titleList); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + mViewPagerLay.removeAllViews(); + mViewPagerLay.addView(mViewPager); + } + LogUtil.i("Count==" + + ptrLv.getRefreshableView().getHeaderViewsCount()); + if (ptrLv.getRefreshableView().getHeaderViewsCount() <= 1) { + // 加载到listview里 + ptrLv.getRefreshableView().addHeaderView(topNewsView); + } + } + } else { + + bean1 = GsonTools.fromGsonToBean(result, NewListBean.class);// 测试的NewsListBean + if (StringUtil.isOneToCode(bean1.code)) { + ToastUtil.showToast(bean1.message);//参数错误 + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 是否是刷新,还是加载更多 + if (isRefresh) { + // 初始化新闻 + newsList.clear(); + // 数据为空 + if (bean1.data == null || bean1.data.size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + newsList.addAll(bean1.data); + } + } else { + newsList.addAll(bean1.data); + } + // 更新新闻 + if (isRefresh) { + // newsAdapter = new NewsAdapter(mActivity, newsList); + newsAdapter.getDatas(newsList); + ptrLv.getRefreshableView().setAdapter(newsAdapter); + } else { + newsAdapter.getDatas(newsList); + newsAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean1.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (!isRefresh) { + ToastUtil.showToast("没有更多新闻了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + NewsList news; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + LogUtil.i("position==" + position + "heard.." + headerViewsCount); + // 防止顶部轮播图没有内容,造成点击轮播图崩溃处理 + if (position == 1) { + return; + } + if (headerViewsCount > 0 && position >= headerViewsCount) { + news = newsList.get(position - headerViewsCount); + } else { + news = newsList.get(position); + } + // 把当前被点击的这条新闻的id存起来 1#2#3#4 + String readNewsIDArray = SharePrefUtil.getString(mActivity, + Constant.READ_NEWS_ID_ARRAY_KEY, null); + + String idArray = null; + if (TextUtils.isEmpty(readNewsIDArray)) { + // 新闻唯一标示id,采用新闻标题与新闻路径 + idArray = news.title + news.path; + } else { + idArray = readNewsIDArray + "#" + news.title + news.path; + } + SharePrefUtil.saveString(mActivity, Constant.READ_NEWS_ID_ARRAY_KEY, + idArray); + + // 通知ListView刷新 + newsAdapter.notifyDataSetChanged(); + + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + news.path); + // intent.putExtra("title", news.title); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", news.uuid); + intent.putExtra("newsagreenum", news.agreenum); + intent.putExtra("newsreadnum", news.readnum); + intent.putExtra("newsTitle", news.title); + intent.putExtra("summary", news.summary); + intent.putExtra("imageUrl", Url.urlHtml + news.headImg); + intent.putExtra("flag", 3); + intent.putExtra("getTags", news.getTags()); + mActivity.startActivity(intent); +// needreportDetail("肝胆新闻",news.getTags(),news.title); + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // newstagid = taglist.get(checkedId).getId(); + // page = 1; + // if (newstagid == 11) { + // tv_empty_msg.setText("暂无技术快讯"); + // } + // if (newstagid == 12) { + // tv_empty_msg.setText("暂无基地动态"); + // } + // if (newstagid == 13) { + // tv_empty_msg.setText("暂无专家动态"); + // } + // if (newstagid == 14) { + // tv_empty_msg.setText("暂无医学动态"); + // } + // getNewsList(Url.getnewsList, true, false, page); + + } + + @Override + public void onStop() { + // TODO Auto-generated method stub + isStop = true; + if (mViewPager != null) { + mViewPager.stopRunning(); + } + super.onStop(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub +// + switch (resultCode) { + case 1: + processData(isrollRefresh, resultJson, page, isToprollNews); + break; + case 2: + processData(isRefresh, resultJson, page, isTopNews); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OrderMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OrderMessageFragment.java new file mode 100644 index 0000000..cdb941b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OrderMessageFragment.java @@ -0,0 +1,223 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MessageAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.umeng.NewSystemMessageActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link OrderMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class OrderMessageFragment extends BaseFragment implements OnCallBackFromNet, AdapterView.OnItemClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + MessageBean messageBeans; + public OrderMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment OrderMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static OrderMessageFragment newInstance(String param1, String param2) { + OrderMessageFragment fragment = new OrderMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_order_message, container, false); +// } +private NewSystemMessageActivity newSystemMessageActivity; + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (NewSystemMessageActivity) getActivity(); + if(view==null) + view = UIUtils.inflate(R.layout.fragment_order_message); + ptrLv = view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty = view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到订单通知哦"); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("2",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("2",page+""); + } + }); + + initMessage("2",1+""); + return view; + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),1); + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("2",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OutpatientArrangementFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OutpatientArrangementFragment.java new file mode 100644 index 0000000..ee6952c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OutpatientArrangementFragment.java @@ -0,0 +1,479 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.text.TextPaint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AddOutpatientArrangement1Activity; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.activity.OutpatientInfoActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.ListOutPatientBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/1/8. + */ + +public class OutpatientArrangementFragment extends BaseFragment implements AdapterView.OnItemClickListener,OnCallBackFromNet,View.OnClickListener{ + + + private PullToRefreshListView lv_visit; + private CustomProgressDialog pd; + private OutpatientArrangementFragment outpatientArrangementFragment; + private static final int listOutPatient = 1; + private static final int deleteOutPatient = 2; + + private ListOutPatientBean fromJson; + private int page=1; + + private String note; + private String uuid; + @Override + public View onCreateSuccessedView() { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_outpatientarrangment_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_outpatientarrangment); + } + + lv_visit = view.findViewById(R.id.lv_item_case); + + ll_empty = View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + TextView tv_empty_msg = ll_empty.findViewById(R.id.tv_empty_msg); + LinearLayout ll_empty_bg = ll_empty.findViewById(R.id.ll_empty_bg); + if(CommonUtil.BigModule()) + { + ll_empty_bg.setBackgroundColor(getResources().getColor(R.color.big_bg)); + tv_empty_msg.setTextSize(18); + } + else + { + ll_empty_bg.setBackgroundColor(Color.parseColor("#e4e4e4")); + } + tv_empty_msg.setText("暂无门诊安排"); + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + pd.show(); + outpatientArrangementFragment = this; + lv_visit.setEmptyView(ll_empty); + lv_visit.setOnItemClickListener(this); + initData(); + lv_visit.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + initData(); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page=page+1; + initData(); + } + }); + + return view; + } + + + + @Override + public void onResume() { + super.onResume(); + initData(); + + } + + private void initData() { + Map param = new HashMap<>(); + param.put("page",page+""); + sendJsonPostParamtoNetSignMD5(Url.listOutPatient, param, listOutPatient, this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + List listout=new ArrayList<>(); + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("listOutPatient = "+resultJson); + pd.dismiss(); + switch (resultCode){ + case listOutPatient: + pd.dismiss(); + lv_visit.onRefreshComplete(); + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, ListOutPatientBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())){ + if (fromJson.getData().getList().size()==0){ + OutofPatientNoticeActivity.flagisListNotice = false; + } + if(fromJson.getData().getList()==null||fromJson.getData().getList().size()==0) + { + lv_visit.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } + else + { + lv_visit.setMode(PullToRefreshBase.Mode.BOTH); + } + if(page==1) + { + listout.clear(); + } + listout.addAll(fromJson.getData().getList()); + ListOutPatientAdapter adapter = new ListOutPatientAdapter(listout,getActivity()); + lv_visit.setAdapter(adapter); + } + break; + case deleteOutPatient: + Gson gson1 = new Gson(); + BaseBean fromJson1 = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson1!=null&&"200".equals(fromJson1.code)){ + initData(); + ToastUtil.showMessage("删除成功"); + OutofPatientNoticeActivity.flagisListNotice = true; + }else { + ToastUtil.showMessage("删除失败"); + } + break; + + } + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_send_feed) { + Intent intent1 = new Intent(getActivity(),OutpatientInfoActivity.class); + intent1.putExtra("note",note); + intent1.putExtra("uuid",uuid); + startActivity(intent1); + } + } + + class ListOutPatientAdapter extends BaseAdapter{ + private Context context; + private List list; + public ListOutPatientAdapter(List list,Context context) { + this.list = list; + this.context = context; + + } + + @Override + public int getCount() { + return list!=null&&list.size()>0?list.size():0; + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_outpetientarrangment_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_outpetientarrangment); + } + vh = new ViewHolder(); + vh.tv_week = convertView.findViewById(R.id.tv_week); + vh.tv_day = convertView.findViewById(R.id.tv_day); + vh.tv_hospital = convertView.findViewById(R.id.tv_hospital); + vh.tv_department = convertView.findViewById(R.id.tv_department); + vh.tv_address = convertView.findViewById(R.id.tv_address); + vh.tv_type1 = convertView.findViewById(R.id.tv_type1); + vh.tv_type = convertView.findViewById(R.id.tv_type); + vh.tv_edit = convertView.findViewById(R.id.tv_edit); + vh.tv_delete = convertView.findViewById(R.id.tv_delete); + vh.iv_edit = convertView.findViewById(R.id.iv_edit); + vh.iv_delete = convertView.findViewById(R.id.iv_delete); + + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.tv_week.setText(weekName(list.get(position).getWeek())); + vh.tv_day.setText(dayName(list.get(position).getDay())); + + String hospital_name = list.get(position).getHospital_name(); + String office_name = list.get(position).getOffice_name(); + final String location = list.get(position).getLocation(); + int type = list.get(position).getType(); + vh.tv_hospital.setText(hospital_name); + vh.tv_department.setText(office_name); + + switch (list.get(position).getType()){ + case 1: + vh.tv_type.setText("普通门诊"); + vh.tv_type1.setText("普通门诊"); + break; + case 2: + vh.tv_type.setText("专家门诊"); + vh.tv_type1.setText("专家门诊"); + break; + case 3: + vh.tv_type.setText("特需门诊"); + vh.tv_type1.setText("特需门诊"); + break; + case 4: + vh.tv_type.setText("专科/专病门诊"); + vh.tv_type1.setText("专科/专病门诊"); + break; + + } + ViewTreeObserver vto = vh.tv_address.getViewTreeObserver(); + final ViewHolder finalVh = vh; + + vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + TextPaint mTextPaint = finalVh.tv_address.getPaint(); + mTextPaint.setTextSize(finalVh.tv_address.getTextSize()); + int mTextViewWidth = (int) mTextPaint.measureText(location); + finalVh.tv_address.setText(location); + if (mTextViewWidth> finalVh.tv_address.getWidth()||mTextViewWidth>500){ + finalVh.tv_type.setVisibility(View.GONE); + finalVh.tv_type1.setVisibility(View.VISIBLE); + }else { + finalVh.tv_type.setVisibility(View.VISIBLE); + finalVh.tv_type1.setVisibility(View.GONE); + } + + } + }); + + vh.iv_delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isDelete(position); + } + }); + vh.tv_delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isDelete(position); + + } + }); + vh.iv_edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + isEdit(position); + + } + }); + vh.tv_edit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isEdit(position); + + } + }); + return convertView; + } + private void isEdit(final int position) { + LayoutInflater inflater = LayoutInflater.from(context); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(context).create(); + Button btn_sure = layout.findViewById(R.id.btn_sure); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_infotitle1 = layout.findViewById(R.id.tv_infotitle1); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("修改提示"); + tv_infotitle1.setText("您确定修改此条信息吗?"); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getContext(), AddOutpatientArrangement1Activity.class); + intent.putExtra("dataBean",list.get(position)); + startActivity(intent); + dialog.dismiss(); + } + }); + } + private void isDelete(final int position) { + LayoutInflater inflater = LayoutInflater.from(context); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + final Dialog dialog = new AlertDialog.Builder(context).create(); + Button btn_sure = layout.findViewById(R.id.btn_sure); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Map param = new HashMap<>(); + param.put("uuid",list.get(position).getUuid()); + sendJsonPostParamtoNetSignMD5(Url.deleteOutPatient, param, deleteOutPatient, outpatientArrangementFragment); + dialog.dismiss(); + } + }); + } + + + public class ViewHolder { + + public TextView tv_week, tv_day, tv_address,tv_type,tv_edit,tv_delete,tv_type1,tv_hospital,tv_department; + public ImageView iv_edit,iv_delete; + + + } + } + + + private String weekName(int week){ + String weekStr = null; + switch (week) { + case 1: + weekStr = "周一"; + break; + case 2: + weekStr = "周二"; + break; + case 3: + weekStr = "周三"; + break; + case 4: + weekStr = "周四"; + break; + case 5: + weekStr = "周五"; + break; + case 6: + weekStr = "周六"; + break; + case 7: + weekStr = "周日"; + break; + } + return weekStr; + } + + private String dayName(String day){ + String dayStr = null; + if ("a".equals(day)) { + dayStr = "上午"; + }else if ("b".equals(day)) { + dayStr = "下午"; + }else if ("c".equals(day)) { + dayStr = "晚上"; + }else if ("d".equals(day)) { + dayStr = "全天"; + } + return dayStr; + } + + private String typeName(int type){ + String typeStr = null; + switch (type) { + case 1: + typeStr = "普通门诊"; + break; + case 2: + typeStr = "专家门诊"; + break; + case 3: + typeStr = "特需门诊"; + break; + case 4: + typeStr = "专科/专病门诊"; + break; + } + return typeStr; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OverviewFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OverviewFragment.java new file mode 100644 index 0000000..36598bc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/OverviewFragment.java @@ -0,0 +1,792 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.chartcomposer.CustomStyleChartComposer.configureColorfulGradientAreaChart; +import static cn.shangyu.gdxzExpert.chartcomposer.CustomStyleChartComposer.configureLineChartAndSplineChartStyle; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.github.AAChartModel.AAChartCore.AAChartCreator.AAChartModel; +import com.github.AAChartModel.AAChartCore.AAChartCreator.AAChartView; +import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartLineDashStyleType; +import com.github.AAChartModel.AAChartCore.AAOptionsModel.AAOptions; +import com.github.gzuliyujiang.wheelpicker.DatePicker; +import com.github.gzuliyujiang.wheelpicker.annotation.DateMode; +import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; +import com.github.gzuliyujiang.wheelpicker.entity.DateEntity; +import com.github.gzuliyujiang.wheelpicker.widget.DateWheelLayout; +import com.google.gson.Gson; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.RankingActivity; +import cn.shangyu.gdxzExpert.activity.ResearchActivity; +import cn.shangyu.gdxzExpert.adapter.BarAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.RankingBean; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.proRuzuBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm; +import cn.shangyu.gdxzExpert.bean.projectQueryForm3; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.SpaceItemDecoration; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link OverviewFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class OverviewFragment extends BaseFragment implements View.OnClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public OverviewFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment OverviewFragment. + */ + // TODO: Rename and change types and number of parameters + public static OverviewFragment newInstance(String param1, String param2) { + OverviewFragment fragment = new OverviewFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + AAChartView AAChartView; + AAChartView AAChartView1; + + private RecyclerView recyclerView,recyclerView1; + BarAdapter adapter,adapter1; + TextView more,more1; + LinearLayout paihang,paihang1; + TextView tv_bir,tv_bir1,tv_bir3,tv_bir4; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_overview); + AAChartView=view.findViewById(R.id.AAChartView); + AAChartView1=view.findViewById(R.id.AAChartView1); + paihang=view.findViewById(R.id.paihang); + tv_bir= view.findViewById(R.id.tv_bir); + tv_bir1= view.findViewById(R.id.tv_bir1); + view.findViewById(R.id.tv_bir).setOnClickListener(this); + view.findViewById(R.id.tv_bir1).setOnClickListener(this); + tv_bir3= view.findViewById(R.id.tv_bir3); + tv_bir4= view.findViewById(R.id.tv_bir4); + view.findViewById(R.id.tv_bir3).setOnClickListener(this); + view.findViewById(R.id.tv_bir4).setOnClickListener(this); + recyclerView=view.findViewById(R.id.recyclerview); + more=view.findViewById(R.id.more); + more.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent=new Intent(getActivity(), RankingActivity.class); + intent.putExtra("url",Url.rankingListByHospital); + startActivity(intent); + + } + }); + paihang1=view.findViewById(R.id.paihang1); + recyclerView1=view.findViewById(R.id.recyclerview1); + more1=view.findViewById(R.id.more1); + more1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Intent intent=new Intent(getActivity(), RankingActivity.class); + intent.putExtra("url",Url.rankingListByUser); + startActivity(intent); + + } + }); + initdate(); + initdata(); + getdata1(); + return view; + } + public void getdata1() + { + getDayEcharsData(); + getAnalysisEcharsData(); + inits(); + inits1(); + + } + public void initdata() + { + + LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); + linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView.setLayoutManager(linearLayoutManager); + recyclerView.addItemDecoration(new SpaceItemDecoration(0,20)); + recyclerView.setNestedScrollingEnabled(false); + LinearLayoutManager linearLayoutManager1 = new LinearLayoutManager(getActivity()); + linearLayoutManager1.setOrientation(LinearLayoutManager.VERTICAL); + recyclerView1.setLayoutManager(linearLayoutManager1); + recyclerView1.addItemDecoration(new SpaceItemDecoration(0,20)); + recyclerView1.setNestedScrollingEnabled(false); +// AAOptions aaOptions = customChartLegendStyle(); +// AAChartView.aa_drawChartWithChartOptions(aaOptions); + + + + + } + proRuzuBean ruzuBean,ruzuBean2; + List data=new ArrayList<>(); + List data2=new ArrayList<>(); + private void getDayEcharsData() + { + token= SharePrefUtil.getString(getContext(),"x_access_token","");; + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token11 "+token); + String url1 = Url.getDayEcharsData; + OkHttpUtils + .get() + .url(url1) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + ruzuBean=GsonTools.fromGsonToBean(response,proRuzuBean.class); + if(ruzuBean.getData()!=null) + { + handledata1(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.getDayEcharsData); + } + else if(hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + private void getDayEcharsData1() + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + + String url1 = Url.getAnalysisEcharsData; + projectQueryForm3 pro=new projectQueryForm3(); + pro.setBeginDate(mUpTime1); + pro.setEndDate(endtiem1); + tv_bir3data=DateUtil.str2Date(mUpTime1, "yyyyMMdd"); + tv_bir4data=DateUtil.str2Date(endtiem1, "yyyyMMdd"); + pro.setSearchType("1"); + Log.d("okhttp"," "+new Gson().toJson(pro)); + OkHttpUtils + .postString() + .url(url1) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + ruzuBean=GsonTools.fromGsonToBean(response,proRuzuBean.class); + if(ruzuBean.getData()!=null) + { + handledata1(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens("nnnnn"); + } + else if(hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + Calendar dateAndTime; + int v_year, v_month; + private String mUpTime = null; + private String endtiem = null; + private String mUpTime1 = null; + private String endtiem1 = null; + private void initdate() + { + String s_month = v_month + ""; + dateAndTime = Calendar.getInstance(Locale.CHINA); + v_year = dateAndTime.get(Calendar.YEAR); + v_month = dateAndTime.get(Calendar.MONTH); + if (v_month < 9) { + s_month = "0" + (v_month + 1); + } else { + s_month = "" + (v_month + 1); + } + endtiem =v_year+"" + s_month; + if( dateAndTime.get(Calendar.MONTH)<9) + { + endtiem1=endtiem+"0" + dateAndTime.get(Calendar.DAY_OF_MONTH) ; + mUpTime=(v_year-1)+ s_month+"0" + dateAndTime.get(Calendar.DAY_OF_MONTH) ; + tv_bir4.setText(endtiem+"0" + dateAndTime.get(Calendar.DAY_OF_MONTH)); + + } + else + { + endtiem1=endtiem+ dateAndTime.get(Calendar.DAY_OF_MONTH) ; + mUpTime=(v_year-1)+ s_month+ dateAndTime.get(Calendar.DAY_OF_MONTH) ; + tv_bir4.setText(endtiem+ dateAndTime.get(Calendar.DAY_OF_MONTH)); + + } + + tv_bir3.setText(mUpTime); + tv_bir3data=DateUtil.str2Date(mUpTime, "yyyyMMdd"); + tv_bir4data=DateUtil.str2Date(tv_bir4.getText().toString(), "yyyyMMdd"); + dateAndTime.add(Calendar.MONTH, -5); + v_year = dateAndTime.get(Calendar.YEAR); + v_month = dateAndTime.get(Calendar.MONTH); + + if (v_month < 9) { + s_month = "0" + (v_month + 1); + } else { + s_month = "" + (v_month + 1); + } + mUpTime = v_year + s_month ; + + } + + private void getAnalysisEcharsData() + { + + token= SharePrefUtil.getString(getContext(),"x_access_token","");; + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp","x-access-token11 "+token); + Log.d("okhttp","mUpTime "+mUpTime+" "+endtiem); + projectQueryForm3 pro=new projectQueryForm3(); + pro.setBeginDate(mUpTime); + pro.setEndDate(endtiem); + tv_bir.setText(mUpTime); + tv_birdata=DateUtil.str2Date(mUpTime, "yyyyMM"); + tv_bir1data=DateUtil.str2Date(endtiem, "yyyyMM"); + tv_bir1.setText(endtiem); + pro.setSearchType("3"); + String url1 = Url.getAnalysisEcharsData; + OkHttpUtils + .postString() + .url(url1) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + ruzuBean2=GsonTools.fromGsonToBean(response,proRuzuBean.class); + if(ruzuBean2.getData()!=null) + { + handledata2(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.getAnalysisEcharsData); + } + else if(hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + List date=new ArrayList<>(); + List datas=new ArrayList<>(); + private void handledata1() + { + date.clear(); + datas.clear(); + data.clear(); + data.addAll(ruzuBean.getData()); + for (proRuzuBean.RuzuBean bean:data) + { + date.add(bean.getStatisticsDate()); + datas.add(bean.getNum()); + } + AAChartModel aaChartModel =configureColorfulGradientAreaChart(date.toArray((new String[]{})),datas.toArray((new Integer[]{}))); + AAOptions aaOptions = aaChartModel.aa_toAAOptions(); + aaOptions.yAxis.gridLineDashStyle(AAChartLineDashStyleType.Dash); + aaOptions.xAxis.gridLineDashStyle(AAChartLineDashStyleType.Dash); +// aaOptions.yAxis.labels.format = "{value} h";//给y轴添加单位 + AAChartView.aa_drawChartWithChartOptions(aaOptions); + } + + List date2=new ArrayList<>(); + List datas2=new ArrayList<>(); + private void handledata2() + { + date2.clear(); + datas2.clear(); + data2.clear(); + data2.addAll(ruzuBean2.getData()); + for (proRuzuBean.RuzuBean bean:data2) + { + date2.add(bean.getStatisticsDate()); + datas2.add(bean.getNum()); + } + AAChartModel aaChartModel1 =configureLineChartAndSplineChartStyle(date2.toArray((new String[]{})),datas2.toArray((new Integer[]{}))); + AAChartView1.aa_drawChartWithChartModel(aaChartModel1); + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + public void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(getActivity(),new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.getDayEcharsData)) + { + getDayEcharsData(); + } else if ((url.contains("nnnn"))) { + getDayEcharsData1(); + + } else if (url.contains(Url.getAnalysisEcharsData)) { + getAnalysisEcharsData(); + } else if (url.contains(Url.rankingListByHospital)) { + inits(); + } else if (url.contains(Url.rankingListByUser)) { + inits1(); + } + + + } + List list=new ArrayList<>(); + RankingBean rankingBean; + private void inits() + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + projectQueryForm pro=new projectQueryForm(); + pro.setPageNum("1"); + pro.setPageSize("5"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url = Url.rankingListByHospital; + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + rankingBean= GsonTools.fromGsonToBean(response, RankingBean.class); + if(rankingBean.getData()!=null) { + list.clear(); + list.addAll(rankingBean.getData().getList()); + setAdapter(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens( Url.rankingListByHospital); + } + else if(hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + List list1=new ArrayList<>(); + RankingBean rankingBean1; + private void inits1() + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + projectQueryForm pro=new projectQueryForm(); + pro.setPageNum("1"); + pro.setPageSize("5"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url = Url.rankingListByUser; + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + rankingBean1= GsonTools.fromGsonToBean(response, RankingBean.class); + if(rankingBean1.getData()!=null) { + list1.clear(); + list1.addAll(rankingBean1.getData().getList()); + setAdapter1(); + } + + } + else if(hasrealtoken(response)==0) + { + gettokens( Url.rankingListByUser); + } + else if(hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(getActivity(), ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + private void setAdapter1() + { + if(list1.size()>0) + { + if(list1.size()>5) + { + more1.setVisibility(View.VISIBLE); + } + else + { + more1.setVisibility(View.GONE); + } + paihang1.setVisibility(View.VISIBLE); + } + else + { + more1.setVisibility(View.GONE); + paihang1.setVisibility(View.GONE); + } + if(adapter1==null) + { + adapter1=new BarAdapter(getActivity(),list1); + recyclerView1.setAdapter(adapter1); + } + else + { + adapter1.notifyDataSetChanged(); + } + + } + private void setAdapter() + { + if(list.size()>0) + { + if(list.size()>5) + { + more.setVisibility(View.VISIBLE); + } + else + { + more.setVisibility(View.GONE); + } + paihang.setVisibility(View.VISIBLE); + } + else + { + more.setVisibility(View.GONE); + paihang.setVisibility(View.GONE); + } + if(adapter==null) + { + adapter=new BarAdapter(getActivity(),list); + recyclerView.setAdapter(adapter); + } + else + { + adapter.notifyDataSetChanged(); + } + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + Date tv_birdata=new Date(); + Date tv_bir1data=new Date(); + Date tv_bir3data=new Date(); + Date tv_bir4data=new Date(); + public void onYearMonth(String updattiime,TextView textView,Date date) { + DatePicker picker = new DatePicker(getActivity()); + picker.setBodyWidth(240); + DateWheelLayout wheelLayout = picker.getWheelLayout(); + wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.today(), DateEntity.target(date)); + wheelLayout.setDateMode(DateMode.YEAR_MONTH); + wheelLayout.setDateLabel("年", "月",""); + picker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + String tmptime; + if (month < 9) { + tmptime = year + "0" + month; + } + else + { + tmptime= year+ "" + month; + } + if("mUpTime".equals(updattiime)) + { + mUpTime=tmptime; + } + else + { + endtiem=tmptime; + } + + textView.setText(tmptime); + getAnalysisEcharsData(); +// getDayEcharsData1(); + } + }); + picker.show(); + } + + @Override + public void onClick(View view) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = view.getId(); + if (id == R.id.tv_bir) { + onYearMonth("mUpTime",tv_bir,tv_birdata); + } else if (id == R.id.tv_bir1) { + onYearMonth("endtiem",tv_bir1,tv_bir1data); + } else if (id == R.id.tv_bir3) { + onYearMonth1("mUpTime1",tv_bir3,tv_bir3data); + } else if (id == R.id.tv_bir4) { + onYearMonth1("endtiem1",tv_bir4,tv_bir4data); + } + } + public void onYearMonth1(String updattiime,TextView textView,Date date) { + DatePicker picker = new DatePicker(getActivity()); + picker.setBodyWidth(240); + DateWheelLayout wheelLayout = picker.getWheelLayout(); + wheelLayout.setRange(DateEntity.target(1900, 1, 1), DateEntity.today(), DateEntity.target(date)); + wheelLayout.setDateMode(DateMode.YEAR_MONTH_DAY); + wheelLayout.setDateLabel("年", "月","日"); + picker.setOnDatePickedListener(new OnDatePickedListener() { + @Override + public void onDatePicked(int year, int month, int day) { + String tmptime; + if (month < 9) { + tmptime = year + "0" + month; + } + else + { + tmptime= year+ "" + month; + } + if (day < 9) { + tmptime=tmptime+ "0" +day; + } + else + { + tmptime=tmptime+day; + } + if("mUpTime1".equals(updattiime)) + { + mUpTime1=tmptime; + } + else + { + endtiem1=tmptime; + } + + textView.setText(tmptime); + + getDayEcharsData1(); + } + }); + picker.show(); + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + getdata1(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientListFragment.java new file mode 100644 index 0000000..6f9e324 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientListFragment.java @@ -0,0 +1,777 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GroupingActivity; +import cn.shangyu.gdxzExpert.activity.MylanFollowActivity; +import cn.shangyu.gdxzExpert.activity.NewPatientActivity; +import cn.shangyu.gdxzExpert.adapter.PatientAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.big.activity.BiggNewPatientActivity; +import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.patientlist.CharacterParser; +import cn.shangyu.gdxzExpert.patientlist.PinyinComparator; +import cn.shangyu.gdxzExpert.patientlist.SideBar; +import cn.shangyu.gdxzExpert.patientlist.SideBar.OnTouchingLetterChangedListener; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +//import org.android.agoo.net.async.AsyncHttpClient; +//import org.android.agoo.net.async.AsyncHttpResponseHandler; + +/** + * + * 类名称:PatientListFragment 类描述:功能说明:患者列表fragment 创建人:苏三元 时间:2015-9-24 下午1:43:51 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class PatientListFragment extends BaseFragment implements + OnClickListener, OnItemClickListener, OnItemLongClickListener { + + private PatientAdapter patientAdapter; + private ArrayList PatientList = new ArrayList(); + private ListView ptrLv; + private TextView load_empty; + private RelativeLayout rl_new_patient, rl_group_patient; + private TextView Tvcount; + public static String PatientUrl = Url.getpatientList; + public static String CanclePatientUrl = Url.getcancleRes; + /** 当前联系人列表类型(TYPE_NORMAL查看、TYPE_SELECT联系人选择) */ + public static final int TYPE_NORMAL = 1; + public static final int TYPE_SELECT = 2; + private static final int REQUEST_OK = 100; + /** 列表类型 */ + private int mType; + private TextView showTvcount; + /** 当前选择联系人位置 */ + public static ArrayList positions = new ArrayList(); + private String uuid; + private HttpHandler httpHandler; + private String applyListUrl = Url.getapplyList; + private long count = 0; + private HttpHandler httpHandlerNewPatient; + private TextView tv_paint_count; + private static PatientListFragment instance; + private ImageView iv_gif, mIv_remove; + private RelativeLayout mRl_imageGif; + + private SideBar sideBar; + private TextView dialog; + /** + * 汉字转换成拼音的类 + */ + private CharacterParser characterParser; + + /** + * 根据拼音来排列ListView里面的数据类 + */ + private PinyinComparator pinyinComparator; + private TextView tv_patient_count; + + public static PatientListFragment getInstance() { + return instance; + } + + @SuppressWarnings("unchecked") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_patient_list_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_patient_list); + } + instance = this; + tv_paint_count = (TextView) view.findViewById(R.id.tv_paint_count); + ptrLv = (ListView) view.findViewById(R.id.lv_item_patient);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + mIv_remove = (ImageView) view.findViewById(R.id.iv_remove); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + + sideBar = (SideBar) view.findViewById(R.id.sidrbar); + dialog = (TextView) view.findViewById(R.id.dialog); + sideBar.setTextView(dialog); + + mRl_imageGif = (RelativeLayout) view.findViewById(R.id.rl_imagegif); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + iv_gif = (ImageView) view.findViewById(R.id.iv_imagegif); + // 新的患者布局,把此布局加到list的头部 + View v; + if(CommonUtil.BigModule()) + { + v = View.inflate(mActivity, R.layout.layout_new_patient_big, null); + } + else + { + v = View.inflate(mActivity, R.layout.layout_new_patient, null); + } + + // 进入患者申请的空间布局 + rl_new_patient = (RelativeLayout) v.findViewById(R.id.rl_new_patient); + rl_group_patient = (RelativeLayout) v.findViewById(R.id.rl_group_patient); + tv_patient_count = v.findViewById(R.id.tv_patient_count); + Button bt_mylan = view.findViewById(R.id.bt_mylan1); + if (Constant.isMaiLanExpert==1){ + bt_mylan.setVisibility(View.VISIBLE); + } + bt_mylan.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), MylanFollowActivity.class); +// Intent intent = new Intent(getActivity(), MylanFollow_upProjectActivity.class); + startActivity(intent); + } + }); + iv_gif.setOnClickListener(this); + mIv_remove.setOnClickListener(this); + rl_new_patient.setOnClickListener(this); + rl_group_patient.setOnClickListener(this); + ptrLv.setOnItemClickListener(this); + // // 设置只有下拉刷新 + // ptrLv.setMode(Mode.PULL_FROM_START); + // // 得到实际的ListView 设置点击 + // ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setOnItemLongClickListener(this); + // setLastUpdateTime(); + // ptrLv.setOnRefreshListener(new OnRefreshListener2() { + // @Override + // public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // // TODO Auto-generated method stub + // getPatientList(PatientUrl); + // + // // //获取有几个新的患者 + // getNewPatientList(applyListUrl); + // } + // + // @Override + // public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // // TODO Auto-generated method stub + // } + // }); + // 根据推送的来显示红点,与申请的数量 + Tvcount = (TextView) v.findViewById(R.id.tv_new_pt_count); + if (SharePrefUtil.getBoolean(mActivity, "isHaveNewPatient", false)) { + Tvcount.setVisibility(View.GONE); + } else { + Tvcount.setVisibility(View.GONE); + } + // [有%d个随访申请] + showTvcount = (TextView) v.findViewById(R.id.tv_new_count); + count = SharePrefUtil.getLong(mActivity, "new_patient_count", 0); + showNewPatientCount(count); + if (ptrLv.getHeaderViewsCount() <= 1) { + ptrLv.addHeaderView(v); + // ptrLv.getRefreshableView().addHeaderView(v); + } + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + characterParser = CharacterParser.getInstance(); + pinyinComparator = new PinyinComparator(); + // 设置右侧触摸监听 + sideBar.setOnTouchingLetterChangedListener(new OnTouchingLetterChangedListener() { + + @Override + public void onTouchingLetterChanged(String s) { + // 该字母首次出现的位置 + if (patientAdapter!=null){ + int position = patientAdapter.getPositionForSection(s.charAt(0)); + if (position != -1) { + ptrLv.setSelection(position + 1); + } + } + + + } + }); + uuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + // 从sp里取出上一次存的列表数据 + // String result = SharePrefUtil.getString(mActivity, PatientUrl, null);0 + // if (!TextUtils.isEmpty(result)) { + // processData(result, false); + // } else { + // 显示加载框 + showLoadingProgress(); + // } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + // 获取有几个新的患者 + getNewPatientList(applyListUrl); + + // //获取患者列表 + // getPatientList(PatientUrl); + + } + + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param loadUrl + * void + * @param + */ + private void getPatientList(final String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 +// uuid="qONMQd6G3bnWAFRa09f"; + params.addBodyParameter("expertUuid", uuid); +// LogUtil.i("uuid = "+uuid);//817130QwqpVljMMUxED//yu德顺 +// params.addBodyParameter("expertUuid", "D1fBDldNPLP3Z4aoiHq");//正式2千患者数据 + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(mActivity, PatientUrl, + info.result); + processData(info.result, true); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + // private void setLastUpdateTime() { + // String text = CommonUtil.getStringDate(); + // ptrLv.setLastUpdatedLabel(text); + // } + + private void onLoaded() { + dismissLoadingProgress(); + // ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, boolean isGetHttp) { + LogUtil.i("患者列表 = "+result); + PatientListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, PatientListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (StringUtil.isOneToCode(bean.code)) { + load_empty.setVisibility(View.VISIBLE); + ptrLv.setEmptyView(null); + return; + } + if (bean.data.size()>0){ + tv_patient_count.setText("(随访"+bean.data.size()+"人)"); + tv_patient_count.setVisibility(View.VISIBLE); + }else { + tv_patient_count.setVisibility(View.GONE); + } + + // 初始化患者列表的数据 + PatientList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) {// bean.data.news + load_empty.setVisibility(View.VISIBLE); + ptrLv.setEmptyView(null); + SharePrefUtil.saveLong(mActivity, "PatientList.size", 0); + } else { + load_empty.setVisibility(View.GONE); + PatientList.addAll((ArrayList) filledData(bean.data)); + long oldNum = SharePrefUtil.getLong(mActivity, "PatientNum", 0); + if (bean.data.size() / 10 > oldNum) { + mRl_imageGif.setVisibility(View.VISIBLE); + } + + SharePrefUtil.saveLong(mActivity, "PatientNum", + bean.data.size() / 10); + if (isGetHttp) { + // 插入患者等一些联系人到数据库 + // 这个应该在登入APP时候就应该进行获取列表,然后插入到数据库。 + + // 当缓存时间大于2分钟则刷新数据 + // String time = SharePrefUtil.getString(mActivity, + // "key_patientFragment_date", ""); + // if (!StringUtil.isBland(time)) { + // int minute = DateUtil.compareTime(time, 2); + // if (minute > 2) { + // //保存缓存的时间 + // SharePrefUtil.saveString(mActivity, + // "key_patientFragment_date", + // DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + // } + // } + // 插入患者信息 + insertPatient(PatientList); + + } + } + // PatientList = (ArrayList) filledData(PatientList); + // 根据a-z进行排序源数据 + if (patientAdapter == null) { + patientAdapter = new PatientAdapter(mActivity, PatientList); + ptrLv.setAdapter(patientAdapter); + } else { + patientAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 设置刷新的时间 + // setLastUpdateTime(); + // ArrayList List = + // PatientSqlManager.getPatientInfoList(Constant.typePatient); + // String[] str = new String[List.size()]; + // for (int i = 0; i < List.size(); i++) { + // LogUtil.i("数据库取出uuid=="+List.get(i).getUuid()+"name=="+List.get(i).getRealName()+"photo=="+List.get(i).getPhoto()); + // str[i] = List.get(i).getUuid(); + // LogUtil.i("姓名=="+PatientSqlManager.getPatientName(List.get(i).getUuid())); + // } + + } + + public void insertPatient(final ArrayList patientList) { + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + long oldSize = SharePrefUtil.getLong(mActivity, + "PatientList.size", patientList.size()); + if (oldSize > patientList.size()) { + PatientSqlManager.delAllPatientInfo(Constant.typePatient); + PatientSqlManager.delAllPatientInfo(Constant.typePatientConsult); + } + LogUtil.i("oldSize=" + oldSize + "PatientList=" + + patientList.size()); + PatientSqlManager.insertPatientList(patientList,Constant.typePatient); + SharePrefUtil.saveLong(mActivity, "PatientList.size", + patientList.size()); + } + }).start(); + } + + @Override + public void onClick(View v) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.rl_new_patient) { + if(CommonUtil.BigModule()) + { + // 启动患者申请处理的页面 + startActivityForResult(new Intent(mActivity, + BiggNewPatientActivity.class), REQUEST_OK); + SharePrefUtil.saveBoolean(CCPAppManager.getContext(), + "isHaveNewPatient", false); + } + else + { + // 启动患者申请处理的页面 + startActivityForResult(new Intent(mActivity, + NormNewPatientActivity.class), REQUEST_OK); + SharePrefUtil.saveBoolean(CCPAppManager.getContext(), + "isHaveNewPatient", false); + } + } else if (id == R.id.rl_group_patient) { + Intent intent = new Intent(mActivity, GroupingActivity.class); + startActivityForResult(intent, 201); + } else if (id == R.id.iv_remove) { + mRl_imageGif.setVisibility(View.GONE); + } else if (id == R.id.iv_imagegif) { + // 空操作 + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (requestCode == REQUEST_OK + && resultCode == NewPatientActivity.REQUEST_REFRESH) { + // 刷新list + getPatientList(PatientUrl); + LogUtil.i("刷新患者列表了"); + // //获取有几个新的患者 + getNewPatientList(applyListUrl); + count = SharePrefUtil.getLong(mActivity, "new_patient_count", 0); + showNewPatientCount(count); + } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + PatientData patient; + LogUtil.i("position:" + position); + if (position == 0) { + return; + } + if (mType != TYPE_NORMAL) { + // // 如果是选择联系人模式 + // Integer object = Integer.valueOf(_position); + // if(positions.contains(object)) { + // positions.remove(object); + // } else { + // positions.add(object); + // } + // notifyClick(positions.size()); + // mAdapter.notifyDataSetChanged(); + // return ; + } + + patient = PatientList.get(position - 1); + + String mobile = patient.mobile; + // LogUtil.i("mobile:"+mobile+" realName:"+patient.realName); + // if(!TextUtils.isEmpty(mobile)){ + // //根据手机号启动聊天页面 + // ECDeviceKit.getIMKitManager().startConversationActivity(mobile); + // } + +// if(CommonUtil.BigModule()) +// { + Intent intent = new Intent(mActivity, BigPatientActivity.class); + intent.putExtra("mobile", mobile); + intent.putExtra("realName", patient.realName); + intent.putExtra("patientUuid", patient.uuid); + intent.putExtra("photo", patient.photo); + intent.putExtra("birthDate", patient.birthDate); + intent.putExtra("type", Constant.typePatient); + // startActivity(intent);//启动患者详情界面 + startActivityForResult(intent, 222); +// } +// else +// { +// Intent intent = new Intent(mActivity, PatientActivity.class); +// intent.putExtra("mobile", mobile); +// intent.putExtra("realName", patient.realName); +// intent.putExtra("patientUuid", patient.uuid); +// intent.putExtra("photo", patient.photo); +// intent.putExtra("birthDate", patient.birthDate); +// intent.putExtra("type", Constant.typePatient); +// // startActivity(intent);//启动患者详情界面 +// startActivityForResult(intent, 222); +// } + + } + + @Override + public boolean onItemLongClick(AdapterView parent, View view, + int position, long arg3) { + // TODO Auto-generated method stub + PatientData patient; + final int p; + LogUtil.i("position:" + position); + if (position == 0) { + return false; + } else { + if (ptrLv.getHeaderViewsCount() > 0) { + p = position - ptrLv.getHeaderViewsCount(); + } else { + p = position; + } + patient = PatientList.get(p); + final String patientUuid = patient.uuid; + int type = patient.type;// 2只是vip,不可以解除,1,与3 可以解除 + if (2 == type) { + return false; + } + final ECListDialog dialog = new ECListDialog(getActivity(), + new String[] { getString(R.string.patient_delete, + patient.realName) }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + canclePatient(CanclePatientUrl, patientUuid, uuid, p); + dialog.dismiss(); + } + }); + dialog.setTitle("解除随访患者"); + dialog.show(); + return true; + } + } + + private void canclePatient(final String loadUrl, final String patientUuid, + String expertUuid, final int position) { + showProgressDialog("解除中..."); + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid", patientUuid); + params.addBodyParameter("expertUuid", expertUuid); + LogUtil.i("======" + loadUrl + " patientUuid=" + patientUuid+ "expertUuid" + expertUuid); + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + processCancleData(info.result, patientUuid, position); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("解除失败,请重试"); + } + }); + } + + protected void processCancleData(String result, String patientUuid, + int position) { + // TODO Auto-generated method stub + closeProgressDialog(); + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + if ("1".equals(bean.code)) { + ToastUtil.showToast(bean.message); + PatientList.remove(position); + patientAdapter.notifyDataSetChanged(); + if (PatientList.isEmpty()) { + load_empty.setVisibility(View.VISIBLE); + } + + // 从数据库里删除该患者 + PatientSqlManager.delPatientInfo(patientUuid); + // 获取患者列表 + getPatientList(PatientUrl); + } else { + ToastUtil.showToast("解除失败,请重试"); + } + } + + /** + * 请求网络,获取患者申请的列表 getNewPatientList ssy + * + * @param loadUrl + * 请求地址 void + */ + private void getNewPatientList(final String loadUrl) { + RequestParams params = new RequestParams(); + params.addBodyParameter("expertUuid", uuid); + httpHandlerNewPatient = HttpHelper.loadData(HttpMethod.POST, loadUrl, + params, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(mActivity, loadUrl,info.result); + + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + SharePrefUtil.saveString(mActivity, loadUrl, ""); + } + }); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + PatientListBean bean = GsonTools.fromGsonToBean(result, + PatientListBean.class); + // 数据为空 + count = 0; + if (bean.data == null || bean.data.size() == 0) { + SharePrefUtil.saveBoolean(mActivity, "isHaveNewPatient", false); + if (Tvcount.getVisibility() == View.VISIBLE) { + Tvcount.setVisibility(View.GONE); + } + } else { + for (int i = 0; i < bean.data.size(); i++) { + // 判断状态是否是待审核,加入待审核到list,其他的不显示 + if (1 == bean.data.get(i).status) { + count++; + } + } + + } + showNewPatientCount(count); + SharePrefUtil.saveLong(mActivity, "new_patient_count", count); + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + getPatientList(PatientUrl); + super.onResume(); + needreportPage("患者列表"); + if (Tvcount != null + && SharePrefUtil.getBoolean(mActivity, "isHaveNewPatient", + false)) { + Tvcount.setVisibility(View.GONE); + } else { + Tvcount.setVisibility(View.GONE); + } + // 获取有几个新的患者 + getNewPatientList(applyListUrl); + } + + /** + * 显示新的患者个数 showNewPatientCount + * + * @param count + * void + */ + public void showNewPatientCount(long count) { + if (count <= 0) { + if (showTvcount != null) { + showTvcount.setVisibility(View.GONE); + } + } else { + if (showTvcount != null) { + showTvcount.setVisibility(View.VISIBLE); + if (isAdded()) { + showTvcount.setText(UIUtils.getContext().getResources() + .getString(R.string.new_patient_count, count)); + } + } + } + } + + public void showNewPatientRed() { + if (Tvcount != null) { + Tvcount.setVisibility(View.VISIBLE); + } + } + + public void notifyChange() { + // TODO Auto-generated method stub + patientAdapter.notifyDataSetChanged(); + } + + public static void getInstance(Object patientList2) { + // TODO Auto-generated method stub + + } + + /** + * 为ListView填充数据 + * + * @param + * @return + */ + private List filledData(List data) { + ArrayList mSortList = new ArrayList(); + + for (int i = 0; i < data.size(); i++) { + PatientData sortModel = data.get(i); + + // 汉字转换成拼音 + if (StringUtil.isEmpty(data.get(i).getRealName())) { + sortModel.setSortLetters("#"); + } else { + String pinyin; + if (!StringUtil.isEmpty(data.get(i).nickname)){ + pinyin = characterParser.getSelling(data.get(i).nickname); + }else { + pinyin = characterParser.getSelling(data.get(i).getRealName()); + } + String sortString = pinyin.substring(0, 1).toUpperCase(); + LogUtil.i("sortString = "+sortString); + // 正则表达式,判断首字母是否是英文字母 + if (sortString.matches("[A-Z]")) { + sortModel.setSortLetters(sortString.toUpperCase()); + } else { + sortModel.setSortLetters("#"); + } + } + mSortList.add(sortModel); + } + Collections.sort(mSortList, pinyinComparator); + return mSortList; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientTeachFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientTeachFragment.java new file mode 100644 index 0000000..659b284 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PatientTeachFragment.java @@ -0,0 +1,669 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PatientVideoActivity; +import cn.shangyu.gdxzExpert.activity.PublicSearchActivity; +import cn.shangyu.gdxzExpert.adapter.PatientTeachAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean; +import cn.shangyu.gdxzExpert.bean.PatientTeachBean.PatientTBean; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButton; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PatientTeachFragment extends BaseFragment implements + OnClickListener, OnItemClickListener,OnCallBackFromNet { + private DrawableCenterButton search; + private DrawableCenterButtonR screen; + // private EditText search_text; + private int page = 1; + private HttpHandler httpHandler; + private PullToRefreshListView ptrLv; + private View view; + private String topic = "1"; + private DrawableCenterCheckBox mCb_Jx; + private View mV_line; + private RelativeLayout mRl_pop_screen; + private Button mBt_sure, mBt_reset; + private GridView mGv_screen; + private List TagPosition = null; + private ScreenAdapter mAdapter2; + private TagList mTagList; + private List Tags; + private Button bt_patient_video; + private MainActivity mainActivity; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + mainActivity = (MainActivity) getActivity(); + // 检查 Activity 是否存在且未销毁,以及 layout 是否已初始化 + if (mainActivity != null && mainActivity.layout != null && mainActivity.titleBarParams != null) { + ViewGroup.MarginLayoutParams p=(ViewGroup.MarginLayoutParams) mainActivity.layout.getLayoutParams(); + if (p != null) { + p.setMargins(0,mainActivity.titleBarParams.height, 0, 0); + mainActivity.layout.requestLayout(); + } + } + View view = UIUtils.inflate(R.layout.fragment_huanj); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_patient); + // 查询输入的内容 + // search_text = (EditText) view.findViewById(R.id.et_search_text); + // 点击查询按钮search + search = (DrawableCenterButton) view.findViewById(R.id.ib_search); + screen = (DrawableCenterButtonR) view.findViewById(R.id.bt_screen); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mV_line = view.findViewById(R.id.vline); + mRl_pop_screen = (RelativeLayout) view.findViewById(R.id.rl_pop_screen); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + mCb_Jx = (DrawableCenterCheckBox) view.findViewById(R.id.cb_kp_jx); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + bt_patient_video = (Button) view.findViewById(R.id.bt_patient_video); + mGv_screen.setOnItemClickListener( new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无患教信息"); + ptrLv.setMode(Mode.BOTH); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page = 1; + getPatientTList(topic); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getPatientTList(topic); + + } + }); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + // search_text.setOnEditorActionListener(new OnEditorActionListener() { + // @Override + // public boolean onEditorAction(TextView v, int actionId, + // KeyEvent event) { + // if (actionId == EditorInfo.IME_ACTION_SEARCH) { + // mCb_Jx.setChecked(false); + // page = 1; + // topic = search_text.getText().toString().trim(); + // getPatientTList(topic); + // return true; + // } + // return false; + // } + // + // }); + bt_patient_video.setOnClickListener(this); + mBt_sure.setOnClickListener(this); + screen.setOnClickListener(this); + search.setOnClickListener(this); + getPatientTList(topic); + getTagList(); + mCb_Jx.setOnCheckedChangeListener(new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, + boolean isChecked) { + // TODO Auto-generated method stub + page = 1; + if (isChecked) { + topic = "2"; + mCb_Jx.setText("最热"); + String result = SharePrefUtil.getString(mActivity, + Url.getPolularScienceArticleListByKeywordsNew + "R", + ""); + if (!StringUtil.isEmpty(result)) { + processData(result); + } else { + getPatientTList(topic); + } + + } else { + topic = "1"; + mCb_Jx.setText("最新"); + String result = SharePrefUtil.getString(mActivity, + Url.getPolularScienceArticleListByKeywordsNew + "X", + ""); + if (!StringUtil.isEmpty(result)) { + processData(result); + } else { + getPatientTList(topic); + } + } + + } + }); + return view; + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + /** + * 请求服务器 精华 + */ + private void getPatientJHTList() { + handler.sendEmptyMessage(301); + + Map params = new HashMap<>(); + params.put("page", String.valueOf(page)); + sendJsonPostParamtoNetSignMD5(Url.getPolularScienceArticleListInexpert4JingHuaNew, params, 1, this); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("page", String.valueOf(page)); +// httpHandler = HttpHelper.loadData(HttpMethod.POST,Url.getPolularScienceArticleListInexpert4JingHuaNew, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// if (page == 1) { +// SharePrefUtil.saveString(mActivity,Url.getPolularScienceArticleListInexpert4JingHuaNew,info.result); +// } +// +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + + /** + * 请求服务器 getNewsList + */ + private void getPatientTList(String topic) { + handler.sendEmptyMessage(301); + + Map param = new HashMap<>(); + param.put("page", String.valueOf(page)); + param.put("type", topic); + param.put("keywords", keywords.toString()); + sendJsonPostParamtoNetSignMD5(Url.getPolularScienceArticleListByKeywordsNew, param, 2, this); +// RequestParams params = new RequestParams(); +// params.addBodyParameter("page", String.valueOf(page)); +// params.addBodyParameter("type", topic); +// params.addBodyParameter("keywords", keywords.toString()); +// +// httpHandler = HttpHelper.loadData(HttpMethod.POST, +// Url.getPolularScienceArticleListByKeywords, params, +// new RequestCallBack() { +// +// @Override +// public void onSuccess(ResponseInfo info) { +// +// processData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); +// onLoaded(); +// ptrLv.setEmptyView(tv_load_fail); +// ToastUtil.showToast("请求失败,请重试"); +// } +// }); + + } + + private void onLoaded() { + dismissLoadingProgress(); + if (ptrLv != null) { + ptrLv.onRefreshComplete(); + } + + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + super.onResume(); + needreportPage("患教文库"); + String newsuuid = SharePrefUtil + .getString(mActivity, "callnewsUuid", ""); + if (data != null) { + if (!newsuuid.equals("")) { + + for (int i = 0; i < data.size(); i++) { + if (data.get(i).getUuid().equals(newsuuid)) { + + data.get(i).setReadnum( + SharePrefUtil.getString(mActivity, + "callnewsread", "")); + data.get(i).setAgreenum( + SharePrefUtil.getString(mActivity, + "callnewsagree", "")); + } + } + if (mAdapter != null) { + // newsList.addAll(bean1.data); + mAdapter.getDatas(data); + mAdapter.notifyDataSetChanged(); + } + } + } + SharePrefUtil.clear(mActivity, "callnewsUuid"); + } + + StringBuilder keywords = new StringBuilder(); + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_patient_video) { + Intent intentvideo = new Intent(mActivity, PatientVideoActivity.class); + startActivity(intentvideo); + } else if (id == R.id.ib_search) { + // mCb_Jx.setChecked(false); + // // topic = search_text.getText().toString().trim(); + // page = 1; + // getPatientTList(topic); + Intent intent = new Intent(mActivity, PublicSearchActivity.class); + intent.setType("science"); + startActivity(intent); + } else if (id == R.id.bt_screen) { + if (mTagList == null) { + getTagList(); + } + if (mRl_pop_screen.getVisibility() == View.GONE) { + mRl_pop_screen.setVisibility(View.VISIBLE); + + } else { + mRl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null) { + TagPosition.clear(); + for (int i = 0; i < mTagList.data.size(); i++) { + if (Tags != null&& Tags.contains(mTagList.data.get(i).getNAME())) { + TagPosition.add(i + ""); + } + } + mAdapter2.notifyDataSetChanged(); + } + + } + } else if (id == R.id.bt_sure) { + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + } + } + + mRl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null && TagPosition.size() != 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + screen.setCompoundDrawables(null, null, drawable, null); + screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + screen.setCompoundDrawables(null, null, drawable, null); + screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + page = 1; + keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + + } + getPatientTList(topic); + } + } + + private void getTagList() { + // TODO Auto-generated method stub + RequestParams params = new RequestParams(); + params.addBodyParameter("type", "4"); + HttpHelper.loadData(HttpMethod.POST, Url.getTagList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess info.result = " + + info.result); + SharePrefUtil.saveString(mActivity, Url.getTagList, + info.result); + processTage(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + } + }); + } + + // 标签解析 + public void processTage(String result) { +// LogUtil.i("标签解析result = "+result); + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + showLoadingProgress(); + } + }; + + public void getScreenItem() { + + } + + PatientTeachAdapter mAdapter; + List data = new ArrayList(); + + private void processData(String result) { + // TODO Auto-generated method stub + LogUtil.i("患教学堂 = "+result); + PatientTeachBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, PatientTeachBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (bean != null || bean.data == null || bean.data.size() == 0) { + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + } else { + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + + // 判断是下拉刷新还是加载更多 + if (page == 1) { + data.clear(); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(bean.data); + } + } else { + data.addAll(bean.data); + } + // 更新 + if (mAdapter == null) { + mAdapter = new PatientTeachAdapter(data); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (page > 1) { + // 是否有更多 + if (bean.data == null || bean.data.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多患教了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = bean.totalPage; + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + } else { + ptrLv.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + PatientTBean datas; + int headerViewsCount = ptrLv.getRefreshableView().getHeaderViewsCount(); + if (headerViewsCount > 0 && position >= headerViewsCount) { + datas = data.get(position - headerViewsCount); + } else { + datas = data.get(position); + + } + + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + datas.getPath()); + intent.putExtra("title", "患教详情"); + intent.putExtra("kepuuuid", datas.getUuid()); + intent.putExtra("kepuagreenum", datas.getAgreenum()); + intent.putExtra("kepureadnum", datas.getReadnum()); + intent.putExtra("newsTitle", datas.getTopic()); + intent.putExtra("summary", datas.getSummary()); + intent.putExtra("imageUrl", Url.urlHtml + datas.getImgPath()); + intent.putExtra("flag", 2); + intent.putExtra("getTags", datas.getTags()); + mActivity.startActivity(intent); +// needreportDetail("患教文库",datas.getTags(),datas.getTopic()); + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList.data.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("resultJson", resultCode+resultJson); + // TODO Auto-generated method stub + switch (resultCode) { + case 1: + if (page == 1) { + SharePrefUtil.saveString(mActivity,Url.getPolularScienceArticleListInexpert4JingHuaNew,resultJson); + } + if (resultJson!=null) { + processData(resultJson); + }else{ + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + + break; + case 2: + processData(resultJson); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ProjectManageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ProjectManageFragment.java new file mode 100644 index 0000000..5298815 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ProjectManageFragment.java @@ -0,0 +1,430 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import com.google.gson.Gson; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.CaseDetailActivity; +import cn.shangyu.gdxzExpert.activity.ResearchActivity; +import cn.shangyu.gdxzExpert.adapter.HbsagAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PatientCaseBean; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link ProjectManageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class ProjectManageFragment extends BaseFragment implements AdapterView.OnItemClickListener, View.OnClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public ProjectManageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment ProjectManageFragment. + */ + // TODO: Rename and change types and number of parameters + public static ProjectManageFragment newInstance(String param1, String param2) { + ProjectManageFragment fragment = new ProjectManageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + + PullToRefreshListView ptr; + HbsagAdapter hbsagAdapter; + ImageView select; + TextView search; + public int page=1; + View ll_empty; + EditText ss; + String keywords=""; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_project_manage); + ss=view.findViewById(R.id.ss); + ptr=view.findViewById(R.id.lv_item_c); + ptr.setMode(PullToRefreshBase.Mode.BOTH); + ptr.setOnItemClickListener(this); + select=view.findViewById(R.id.select); + select.setOnClickListener(this); + search=view.findViewById(R.id.search); + search.setOnClickListener(this); + ptr.setOnItemClickListener(this); + ptr.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page=1; + sdvStatus=null; + freezeFlag=null; + init(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + init(page+""); + } + }); + ll_empty=view.findViewById(R.id.ll_empty); + gettokens(Url.youanpatientcase); + return view; + } + String token= SharePrefUtil.getString(getContext(),"x_access_token",""); + public void gettokens(String url) + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); +// showProgressDialog("加载中"); + + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(getActivity(),new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.youanpatientcase)) + { + init(page+""); + } + } + PatientCaseBean caseBean; + List list=new ArrayList<>(); + private void init(String pageNum) + { + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + projectQueryForm pro=new projectQueryForm(); + pro.setPageNum(pageNum); + pro.setPageSize("10"); + pro.setKeywords(keywords); + if(sdvStatus!=null) + { + pro.setSdvStatus(sdvStatus); + } + if(freezeFlag!=null) + { + pro.setFreezeFlag(freezeFlag); + } + Log.d("okhttp",token+""+new Gson().toJson(pro)); + + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url = Url.youanpatientcase; + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + sdvStatus=null; + freezeFlag=null; + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + ptr.onRefreshComplete(); + if(hasrealtoken(response)>0) + { + caseBean= GsonTools.fromGsonToBean(response, PatientCaseBean.class); + if(caseBean.getData()!=null) + { + if(page==1) + { + list.clear(); + } + list.addAll(caseBean.getData().getList()); + if(page==1&&list.size()==0) + { + ptr.setEmptyView(ll_empty); + return; + } + if(page>caseBean.getData().getPages()) + { + page--; + ToastUtil.showToast("没有更多了"); + ptr.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } + else + { + ptr.setMode(PullToRefreshBase.Mode.BOTH); + } + + setadapter(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens( Url.youanpatientcase); + } + else if(hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(getActivity(), ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + private void setadapter() + { + if(hbsagAdapter==null) + { + hbsagAdapter=new HbsagAdapter(getActivity(),list); + ptr.setAdapter(hbsagAdapter); + } + else + { + hbsagAdapter.notifyDataSetChanged(); + } + + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + Intent intent=new Intent(getActivity(), CaseDetailActivity.class); + intent.putExtra("patientcaseId",list.get(i-1).getPatientcaseId()); + startActivity(intent); + } + + @Override + public void onClick(View view) { + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = view.getId(); + if (id == R.id.select) { + showwindow(view); + } else if (id == R.id.search) { +// if(ss.getText()==null||StringUtil.isEmpty(ss.getText().toString())) +// { +// ToastUtil.showMessage("搜索不能为空"); +// return; +// } + page =1; + keywords=ss.getText().toString(); + init(page+""); + hide(); + } + + } + + + String freezeFlag; + String sdvStatus; + public void showwindow(View view) + { + View content = LayoutInflater.from(getActivity()) + .inflate(R.layout.float_screen_dialog, null); + final PopupWindow popupWindow = new PopupWindow(content, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + + RadioButton tab_rbn_1=content.findViewById(R.id.tab_rbn_1); + RadioButton tab_rbn_2=content.findViewById(R.id.tab_rbn_2); + RadioButton tab_rbn_3=content.findViewById(R.id.tab_rbn_3); + RadioButton tab_rbn_11=content.findViewById(R.id.tab_rbn_11); + RadioButton tab_rbn_12=content.findViewById(R.id.tab_rbn_12); + TextView message=content.findViewById(android.R.id.message); + + TextView btn_cancel=content.findViewById(R.id.btn_cancel); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + popupWindow.dismiss(); + } + }); + message.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + page =1; + if(tab_rbn_1.isChecked()) + { + sdvStatus="0"; + } + else if(tab_rbn_2.isChecked()) + { + sdvStatus="1"; + } + else if(tab_rbn_3.isChecked()) + { + sdvStatus="2"; + } + if(tab_rbn_11.isChecked()) + { + freezeFlag="1"; + } + else if(tab_rbn_12.isChecked()) + { + freezeFlag="0"; + } + init(page+""); + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return false; + // 这里如果返回true的话,touch事件将被拦截 + // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss + } + + }); + + + popupWindow.showAtLocation(view, 0, 0, 0); + } + public void hide() + { + View view = getActivity().getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + @Override + public void onResume() { + super.onResume(); + if(caseBean!=null) + { + gettokens(Url.youanpatientcase); + } + + } + + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + page=1; + gettokens(Url.youanpatientcase); + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PubMedFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PubMedFragment.java new file mode 100644 index 0000000..37b2a0a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/PubMedFragment.java @@ -0,0 +1,124 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.graphics.Bitmap; +import android.view.View; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PubMedFragment extends BaseFragment { + String url = "http://www.pubmedchina.com/content/plugins/JianAi_weixin/pubmed1.html"; + // String url = "http://www.ncbi.nlm.nih.gov/m/pubmed/"; + View view; + private X5WebView mWebView; + private WebSettings settings; + public View loadingView; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + view = UIUtils.inflate(R.layout.activity_news_detail); + X5WebView.initHardwareAccelerate(getActivity()); + mWebView = view.findViewById(R.id.news_detail_wv); + loadingView = view.findViewById(R.id.loading_view); + dealNewsDetail(); + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + private void dealNewsDetail() { + // mWebView.setInitialScale(25); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + LogUtil.i("onPageFinished", "onPageFinished" + url); + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + loadurl(view, "file:///android_asset/error/error.html"); + } + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + // ToastUtil.showToast("加载失败,请检查网络"); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + // view.loadDataWithBaseURL(null, "", "text/html", "utf-8", + // null); + // loadfailView.setVisibility(View.VISIBLE); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + // intent = getIntent(); + // content = intent.getStringExtra("content"); + // mWebView.loadUrl(Url.urlHtml+content); + // mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); + loadurl(mWebView, url); + } + + public void dismissLoadingView() { + if (loadingView != null) { + loadingView.setVisibility(View.GONE); + } + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificMyFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificMyFragment.java new file mode 100644 index 0000000..56f5878 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificMyFragment.java @@ -0,0 +1,362 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.List; + +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ScientificDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ScientificBean; +import cn.shangyu.gdxzExpert.bean.ScientificBean.ScientificData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +/** + * 我的项目 + * + * 类名称:ScientificMyFragment + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-14 下午5:17:09 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class ScientificMyFragment extends BaseFragment implements OnItemClickListener { + + private ScientificAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + public static String myProjectUrl = Url.getmyProject; + private int page = 1; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_scientific_my_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_my);// 下拉刷新的listview控件 + + //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + //空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + //设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未申请平台项目"); + // 上拉加载不可用 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(myProjectUrl); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(myProjectUrl); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + * initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, myProjectUrl, null); + if (!TextUtils.isEmpty(result)) { + processData(result); + }else{ + //显示加载框 + showLoadingProgress(); + } + //网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(myProjectUrl); + } + + /** + * 请求服务器。获取患者列表数据 + * + * void + */ + private void getList(final String loadUrl) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (page == 1) { + SharePrefUtil.saveString(mActivity, loadUrl,info.result); + } + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + ToastUtil.showToast("请求失败,请重试"); + ptrLv.setEmptyView(tv_load_fail); + } + }); + } + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if(httpHandler!=null){ + httpHandler.cancel();//取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + ScientificBean bean = GsonTools.fromGsonToBean(result,ScientificBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + DataList.clear(); + // 数据为空 + if (bean.data == null || bean.data.size() == 0) { + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + DataList.addAll(bean.data); + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ScientificAdapter(DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + int totalPage = bean.totalPage; + //是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1){ + ToastUtil.showToast("没有更多科研了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class ScientificAdapter extends BaseAdapter { + + private List ScienceList; + public ScientificAdapter(ArrayList List) { + this.ScienceList = List; + } + + @Override + public int getCount() { + return ScienceList.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(mActivity, R.layout.item_scientific_my, null); + mHolder = new NewsViewHolder(); + mHolder.projectName = (TextView) convertView + .findViewById(R.id.item_projectName); + mHolder.applyerTime = (TextView) convertView + .findViewById(R.id.item_applyerTime); + mHolder.state = (TextView) convertView + .findViewById(R.id.item_state); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + ScientificData s = ScienceList.get(position); + mHolder.projectName.setText(s.projectName); + if (!TextUtils.isEmpty(s.applyerTimeStr) && s.applyerTimeStr.length() > 10) { + mHolder.applyerTime.setText("申请时间:"+s.applyerTimeStr.substring(0, 10)); + }else if (!TextUtils.isEmpty(s.applyerTimeStr)) { + mHolder.applyerTime.setText("申请时间:"+s.applyerTimeStr); + }else{ + mHolder.applyerTime.setText("申请时间:暂无"); + } + String state = s.state; + if ("0".equals(state)) { + state = "在线审核"; + }else if ("1".equals(state)) { + state = "邮寄材料"; + }else if ("2".equals(state)) { + state = "形式审查"; + }else if ("3".equals(state)) { + state = "专家委员会评审"; + }else if ("4".equals(state)) { + state = "评审通过"; + }else if ("5".equals(state)) { + state = "评审未通过"; + }else{ + state ="暂无"; + } + mHolder.state.setText(state); + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + private NewsViewHolder mHolder = null; + private HttpHandler httpHandler; + private class NewsViewHolder { + + public TextView state; + public TextView applyerTime; + public TextView projectName; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + ScientificData list = DataList.get(p); + String projectName = list.projectName;//项目名称 + String members = list.members;//提交者姓名 + String applyerCompany = list.applyerCompany;//提交单位 + String officeName = list.officeName;//科室名称 + String mobile = list.mobile;//科室名称 + String applyerTime = list.applyerTimeStr;//申请时间 + String email = list.email;//邮箱 + String state = list.state;//申请状态 + + Intent intent = new Intent(mActivity, ScientificDetailActivity.class); + intent.putExtra("projectName", projectName); + intent.putExtra("members", members); + intent.putExtra("applyerCompany", applyerCompany); + intent.putExtra("officeName", officeName); + intent.putExtra("mobile", mobile); + intent.putExtra("applyerTime", applyerTime); + intent.putExtra("email", email); + intent.putExtra("state", state); + startActivity(intent); + LogUtil.i("position:"+position+members); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificOtherFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificOtherFragment.java new file mode 100644 index 0000000..cd65b95 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificOtherFragment.java @@ -0,0 +1,352 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ScientificBean; +import cn.shangyu.gdxzExpert.bean.ScientificBean.ScientificData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +/** + * 其他项目 + * + * 类名称:ScientificOtherFragment + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-12-14 下午5:16:37 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class ScientificOtherFragment extends BaseFragment implements OnItemClickListener { + + private ScientificAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + public static String ScientificProject = Url.getscientificProject; + private int page = 1; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_scientific_other_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_other);// 下拉刷新的listview控件 + + //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + //设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无其他项目"); + + // 上拉加载不可用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(ScientificProject); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page = page + 1; + getList(ScientificProject); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + * initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, ScientificProject+"0", null); + if (!TextUtils.isEmpty(result)) { + processData(result); + }else{ + //显示加载框 + showLoadingProgress(); + } + //网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(ScientificProject); + } + + /** + * 请求服务器。获取患者列表数据 + * + * void + */ + private void getList(final String loadUrl) { + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("projectType", String.valueOf(0)); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (page == 1) { + SharePrefUtil.saveString(mActivity, loadUrl+"0",info.result); + } + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if(httpHandler!=null){ + httpHandler.cancel();//取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + ScientificBean bean = GsonTools.fromGsonToBean(result,ScientificBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data.size()); + if (bean.data == null || bean.data.size() == 0) { + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + DataList.addAll(bean.data); + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ScientificAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + int totalPage = bean.totalPage; + //是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1){ + ToastUtil.showToast("没有更多科研了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class ScientificAdapter extends BaseAdapter { + + private Context context; + private List List; + public ScientificAdapter(Context context, ArrayList List) { + this.context = context; + this.List = List; + } + + @Override + public int getCount() { + return List.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = View.inflate(context,R.layout.item_scientific_system, null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_scientific_image); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_scientific_title); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_scientific_date); + mHolder.tvSummary = (TextView) convertView + .findViewById(R.id.tv_scientific_summary); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + ScientificData s = List.get(position); + mHolder.tvTitle.setText(s.projectName); + if (!TextUtils.isEmpty(s.createDateStr) && s.createDateStr.length() >= 10) { + mHolder.tvDate.setText(s.createDateStr.substring(0, 10)); + }else if(!TextUtils.isEmpty(s.createDateStr)){ + mHolder.tvDate.setText(s.createDateStr); + } + if (!TextUtils.isEmpty(s.imgs)) { + ImageLoader.getInstance().displayImage(Url.urlHtml + s.imgs, mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + }else{ + mHolder.ivImage.setImageResource(R.drawable.default_news_iv); + } + if (!StringUtil.isEmpty(s.contentText)) { + mHolder.tvSummary.setText(s.contentText); + }else{ + mHolder.tvSummary.setText(""); + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + private HttpHandler httpHandler; + private class NewsViewHolder { + public TextView tvSummary; + public ImageView ivImage; + public TextView tvTitle; + public TextView tvDate; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + ScientificData list = DataList.get(p); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + list.path); + intent.putExtra("title","科研详情"); + intent.putExtra("newsTitle", list.projectName); + intent.putExtra("summary", list.contentText); + intent.putExtra("imageUrl", Url.urlHtml+list.imgs); + intent.putExtra("flag", 1); + mActivity.startActivity(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificSystemFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificSystemFragment.java new file mode 100644 index 0000000..85e973f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ScientificSystemFragment.java @@ -0,0 +1,403 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.provider.ContactsContract.Contacts.Data; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.ScientificBean; +import cn.shangyu.gdxzExpert.bean.ScientificBean.ScientificData; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +/** + * 平台项目 + * + * 类名称:ScientificSystemFragment 类描述:TODO 创建人:苏三元 时间:2015-12-14 下午4:57:17 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class ScientificSystemFragment extends BaseFragment implements + OnItemClickListener { + + private ScientificAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + private int page = 1; + Date newdata=new Date(); + /** + * 平台项目列表 + */ + public static String ScientificProject = Url.getscientificProject; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_scientific_system_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_system);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无平台项目"); + // 上拉加载不可用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(ScientificProject); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(ScientificProject); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, ScientificProject + + "1", null); + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + // 显示加载框 + showLoadingProgress(); + } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(ScientificProject); + } + + /** + * 请求服务器。获取患者列表数据 + * + * void + */ + private void getList(final String loadUrl) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("projectType", String.valueOf(1)); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + if (page == 1) { + SharePrefUtil.saveString(mActivity, loadUrl + "1", + info.result); + } + processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + ScientificBean bean = GsonTools.fromGsonToBean(result, + ScientificBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.data.size()); + if (bean.data == null || bean.data.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + DataList.addAll(bean.data); + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ScientificAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.totalPage; + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多科研了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class ScientificAdapter extends BaseAdapter { + + private Context context; + private List List; + + public ScientificAdapter(Context context, ArrayList List) { + this.context = context; + this.List = List; + } + + @Override + public int getCount() { + return List.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + NewsViewHolder mHolder= null; + if (convertView == null) { + convertView = View.inflate(context, + R.layout.item_scientific_system, null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_scientific_image); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_scientific_title); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_scientific_date); + mHolder.tvType = (TextView) convertView + .findViewById(R.id.tv_scientific_type); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + ScientificData s = List.get(position); + mHolder.tvTitle.setText(s.projectName); + if(!StringUtil.isEmpty(s.endDate)&&isCancle(s.endDate)){ + mHolder.tvType.setVisibility(View.VISIBLE); + mHolder.tvType.setText("已结束"); + // vh.mType.setBackground(UIUtils.getDrawable(R.drawable.bg_red)); + mHolder.tvType.setBackgroundDrawable(UIUtils + .getDrawable(R.drawable.bg_grays)); + }else{ + mHolder.tvType.setVisibility(View.VISIBLE); + mHolder.tvType.setText("进行中"); + // vh.mType.setBackground(UIUtils.getDrawable(R.drawable.bg_red)); + mHolder.tvType.setBackgroundDrawable(UIUtils + .getDrawable(R.drawable.bg_red)); + } + if (!TextUtils.isEmpty(s.createDateStr) + && s.createDateStr.length() >= 10) { + mHolder.tvDate.setText(s.createDateStr.substring(0, 10)); + } else if (!TextUtils.isEmpty(s.createDateStr)) { + mHolder.tvDate.setText(s.createDateStr); + } + if (!TextUtils.isEmpty(s.imgs)) { + ImageLoader.getInstance().displayImage( + Url.urlHtml + s.imgs, + mHolder.ivImage, + ImageOptions + .getImageOptions(R.drawable.default_news_iv)); + } else { + mHolder.ivImage.setImageResource(R.drawable.default_news_iv); + } + // if (!StringUtil.isEmpty(s.contentText)) { + // mHolder.tvSummary.setText(s.contentText); + // }else{ + // mHolder.tvSummary.setText(""); + // } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private HttpHandler httpHandler; + + private class NewsViewHolder { + // public TextView tvSummary; + public ImageView ivImage; + public TextView tvTitle; + public TextView tvDate; + public TextView tvType; + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + ScientificData list = DataList.get(p); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + list.path); + intent.putExtra("title", "科研详情"); + intent.putExtra("newsTitle", list.projectName); + intent.putExtra("summary", list.contentText); + intent.putExtra("imageUrl", Url.urlHtml + list.imgs); + intent.putExtra("flag", 1); + mActivity.startActivity(intent); + } + + public boolean isCancle(String time) { + //2017-08-30 00:00:00 + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date =null; + try { + date = sdf.parse(time); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(date!=null){ + return date.before(newdata); + } + + return false; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchLibiaryFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchLibiaryFragment.java new file mode 100644 index 0000000..8dda49c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchLibiaryFragment.java @@ -0,0 +1,171 @@ +package cn.shangyu.gdxzExpert.fragment; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import android.text.TextUtils; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnFocusChangeListener; +import android.widget.Button; +import android.widget.EditText; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class SearchLibiaryFragment extends BaseFragment implements + OnClickListener { + // private CustomProgressDialog pd; + private Button btsu; + private EditText literature_name; + private EditText literature_years; + private EditText literature_names; + private EditText mEt_search; + private String literaturename = ""; + private String literatureyears = ""; + private String literatureemail = ""; + private String expertUuid = ""; + private String literaturname = ""; + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.activity_mianfei_daicha); + literature_name = (EditText) view.findViewById(R.id.literature_name);// 文献名 + literature_name.setOnFocusChangeListener(onFocusAutoClearHintListener);// 设置输入框获得焦点hint提示消失 + literature_years = (EditText) view.findViewById(R.id.literature_years);// 年份 + literature_years.setOnFocusChangeListener(onFocusAutoClearHintListener); + literature_names = (EditText) view.findViewById(R.id.literature_na);// 期刊名字 + mEt_search = (EditText) view.findViewById(R.id.et_search_email);// 邮箱 名字 + literature_names.setOnFocusChangeListener(onFocusAutoClearHintListener); + btsu = (Button) view.findViewById(R.id.bt_sure);// 确定提交按钮 + btsu.setOnClickListener(this); + + return view; + } + + /** + * 设置输入框获得焦点hint提示消失 + */ + public static OnFocusChangeListener onFocusAutoClearHintListener = new OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + EditText textView = (EditText) v; + String hint; + if (hasFocus) { + hint = textView.getHint().toString(); + textView.setTag(hint); + textView.setHint(""); + } else { + hint = textView.getTag().toString(); + textView.setHint(hint); + } + } + }; + + // 提交请求 + private void btsu() { + literaturename = literature_name.getText().toString().trim(); + literatureyears = literature_years.getText().toString().trim(); + literaturname = literature_names.getText().toString().trim(); + literatureemail = mEt_search.getText().toString().trim(); + + if (!UIUtils.isNetWorkConnected(mActivity)) { + ToastUtil.showToast("网络暂时不可用"); + return; + } + if (TextUtils.isEmpty(literaturename)) { + ToastUtil.showToast("文献名称不能为空"); + literature_name.requestFocus(); + return; + } + if (TextUtils.isEmpty(literatureemail)) { + ToastUtil.showToast("邮箱不能为空"); + mEt_search.requestFocus(); + return; + } + boolean sssss=ValidateUtils.isValidEmail(literatureemail); + if (!ValidateUtils.isValidEmail(literatureemail)) { + + ToastUtil.showToast("请填写正确邮箱地址"); + mEt_search.requestFocus(); + return; + } + // pd = new CustomProgressDialog(mActivity, "提交中...."); + // pd.show(); + expertUuid = SharePrefUtil.getString(mActivity, Constant.uuid, ""); + + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid); + params.addBodyParameter("qkname", literaturname);// + params.addBodyParameter("email", literatureemail);// + params.addBodyParameter("qkyear", literatureyears); + params.addBodyParameter("literaturename", literaturename); + HttpHelper.loadData(HttpMethod.POST, Url.getsearchhelp, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + // pd.dismiss(); + String result = info.result; + LogUtil.i("result = "+result); + try { + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + if ("1".equals(code)){ + literature_name.setText(""); + literature_years.setText(""); + literature_names.setText(""); + mEt_search.setText(""); + + } + ToastUtil.showMessage(jsonObject.optString("message")); + + } catch (JSONException e) { + e.printStackTrace(); + } + + + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + ToastUtil.showMessage("提交失败,请稍候重试"); + // pd.dismiss(); + } + }); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.bt_sure) { + btsu(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchPaperFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchPaperFragment.java new file mode 100644 index 0000000..284c493 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SearchPaperFragment.java @@ -0,0 +1,485 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.Url.addLiteratureFind; +import static cn.shangyu.gdxzExpert.utils.ValidateUtils.isValidEmail; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.graphics.Color; +import android.os.Build; +import android.os.IBinder; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.fragment.app.Fragment; + +import com.google.gson.Gson; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.PaperAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MyPointsBean; +import cn.shangyu.gdxzExpert.bean.PaperBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.PageNavigationView; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link SearchPaperFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SearchPaperFragment extends BaseFragment implements OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +// private static final String ARG_PARAM1 = "param1"; +// private static final String ARG_PARAM2 = "param2"; +// +// // TODO: Rename and change types of parameters +// private String mParam1; +// private String mParam2; +// +// public SearchPaperFragment() { +// // Required empty public constructor +// } +// +// /** +// * Use this factory method to create a new instance of +// * this fragment using the provided parameters. +// * +// * @param param1 Parameter 1. +// * @param param2 Parameter 2. +// * @return A new instance of fragment SearchPaperFragment. +// */ +// // TODO: Rename and change types and number of parameters +// public static SearchPaperFragment newInstance(String param1, String param2) { +// SearchPaperFragment fragment = new SearchPaperFragment(); +// Bundle args = new Bundle(); +// args.putString(ARG_PARAM1, param1); +// args.putString(ARG_PARAM2, param2); +// fragment.setArguments(args); +// return fragment; +// } +// +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_search_paper, container, false); +// } + private PageNavigationView mGroup_library; + private NavigationController navigationController; + ListView listView; + private View TopView,botview; + List list=new ArrayList<>(); + PaperAdapter paperAdapter; + ImageView im_submit; + EditText emails; + int totalPoints,times; + LinearLayout ll; +// private ECAlertDialog buildAlert; + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.fragment_search_paper); + TopView = UIUtils.inflate(R.layout.paper_top); + botview= UIUtils.inflate(R.layout.papet_bottom); + emails=view.findViewById(R.id.literature_name); + im_submit=view.findViewById(R.id.im_submit); + ll=view.findViewById(R.id.ll); +// listView=view.findViewById(R.id.listView); +// listView.addHeaderView(TopView); +// listView.addFooterView(botview); + list.add(new PaperBean()); +// paperAdapter=new PaperAdapter(getActivity(),list); +// listView.setAdapter(paperAdapter); + setList(list); +// emails.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View view) { +// +// } +// }); + + + im_submit.setOnClickListener(new View.OnClickListener() { + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onClick(View view) { + hideSoftKeyboard(); + + if(!isValidEmail(emails.getText().toString())) + { + ToastUtil.showToast("邮件格式不正确"); + return; + } + + for(int i=0;i=list.size()) + { + submitPaper("您共提交"+list.size()+"篇文献代查,共使用"+list.size()+"次查找文献福利,是否确定提交?","确认提交"); + } + else if(times>0) + { + if(totalPoints>=((list.size()-times)*50)) + { + submitPaper("您共提交"+list.size()+"篇文献代查,共使用"+times+"次查找文献福利,消耗"+(list.size()-times)*50+"积分,是否确定提交?","确认提交"); + } + else + { + submitPaper("本次代查服务共消耗"+list.size()*50+"积分,您的积分不足,是否确定购买积分??","积分不足"); + } + } + else + { + if(totalPoints>=list.size()*50) + { + submitPaper("您共提交"+list.size()+"篇文献代查,共消耗"+list.size()*50+"积分,是否确定提交?","确认提交"); + } + else + { + submitPaper("本次代查服务共消耗"+list.size()*50+"积分,您的积分不足,是否确定购买积分??","积分不足"); + } + } + + + } + }); + return view; + } + public void setList(List list) { + if (list == null) { + throw new RuntimeException("list is null"); + } + ll.removeAllViews(); + int count = list.size(); + + for (int i = 0; i < count; i++) { + PaperBean bean = list.get(i); + View convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_search, null); + TextView tv1 = convertView + .findViewById(R.id.tv1); + ImageView im_1 = convertView + .findViewById(R.id.im_1); + EditText literature_name1 = convertView + .findViewById(R.id.literature_name1); + EditText literature_name2 = convertView + .findViewById(R.id.literature_name2); + EditText literature_name3 = convertView + .findViewById(R.id.literature_name3); + TextView tv_add=convertView.findViewById(R.id.tv_add); + RelativeLayout rr=convertView.findViewById(R.id.rr); + TextView tv_sheng=convertView.findViewById(R.id.tv_sheng); + + tv1.setText("文献"+(i+1)); + if(list.size()>1) + { + im_1.setVisibility(View.VISIBLE); + } + else + { + im_1.setVisibility(View.GONE); + } + if(list.size()<5&&(i== (list.size()-1))) + { + rr.setVisibility(View.VISIBLE); + tv_sheng.setText("还可添加"+(4-i)+"篇"); + } + else + { + rr.setVisibility(View.GONE); + tv_sheng.setText(""); + } + literature_name1.setText(list.get(i).getTitle()); + literature_name2.setText(list.get(i).getAuthor()); + literature_name3.setText(list.get(i).getName()); + int finalI = i; + im_1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + submitPaper("您是否确定删除该代查项?","确认删除", finalI); + + } + }); + tv_add.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + list.add(new PaperBean()); + setList(list); + + } + }); + literature_name1.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void afterTextChanged(Editable s) { + bean.setTitle(s.toString()); + } + }); + + literature_name2.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void afterTextChanged(Editable s) { + bean.setAuthor(s.toString()); + } + }); + literature_name3.addTextChangedListener(new SimpleTextWatcher() { + @Override + public void afterTextChanged(Editable s) { + bean.setName(s.toString()); + } + }); + ll. addView(convertView); + } + + } + @Override + public void onResume() { + super.onResume(); + needreportPage("期刊杂志"); + Points(); + } + private void submitPaper(String tishi,String infotitle,int i) + { + + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new, null); + AlertDialog dialog3 = new AlertDialog.Builder( + getActivity(),AlertDialog.THEME_HOLO_LIGHT).create(); + + Button btn_sure = layout.findViewById(R.id.btn_sure); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + TextView tv_infotitle=layout.findViewById(R.id.tv_infotitle); + btn_sure.setText("确定"); + btn_sure.setTextColor(Color.parseColor("#333333")); + btn_sure.setBackground(null); + btn_cancel.setText("取消"); + btn_cancel.setBackground(null); + tv_tishi.setText(tishi); + tv_infotitle.setText(infotitle); + tv_infotitle.setTextSize(19); + dialog3.show(); + Window window =dialog3.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + dialog3.dismiss(); + list.remove(i); + setList(list); + } + }); + + } + private void submitPaper(String tishi, String infotitle) + { + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new, null); + AlertDialog dialog3 = new AlertDialog.Builder( + getActivity(),AlertDialog.THEME_HOLO_LIGHT).create(); + + Button btn_sure = layout.findViewById(R.id.btn_sure); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + TextView tv_infotitle=layout.findViewById(R.id.tv_infotitle); + btn_sure.setText("确定"); + btn_sure.setTextColor(Color.parseColor("#333333")); + btn_sure.setBackground(null); + btn_cancel.setText("取消"); + btn_cancel.setBackground(null); + tv_tishi.setText(tishi); + tv_infotitle.setText(infotitle); + tv_infotitle.setTextSize(19); + dialog3.show(); + Window window =dialog3.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog3.dismiss(); + if(infotitle.contains("积分不足")) + { + Intent intent2 = new Intent(getActivity(), BuyIntegerActivty.class); + startActivity(intent2); + } + else + { + submit(); + } + + + } + }); + + } + private void Points() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.myBonusPoints, param, 1, this); + sendJsonPostParamtoNetSignMD5(Url.getDaiChaWelfareCount, param, 2, this); + + } + + private void submit() + { + Map param = new HashMap<>(); + param.put("email",emails.getText().toString().trim()); + param.put("literature_list",list); + sendJsonPostParamtoNetSignMD5Array(addLiteratureFind,param,101,this); + + + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity",resultCode+" "+resultJson); + switch (resultCode) + { + case 2: + try { + JSONObject object=new JSONObject(resultJson); + if("200".equals(object.getString("code"))) + { + times=object.getInt("data"); + } + else + { + ToastUtil.showToast(object.getString("msg")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 1: + Gson gson = new Gson(); + MyPointsBean fromJson = gson.fromJson(resultJson, MyPointsBean.class); + if (fromJson!=null&&"1".equals(fromJson.getCode())) { + totalPoints=fromJson.getTotalPoints() ; + } + break; + case 101: + try { + JSONObject object=new JSONObject(resultJson); + ToastUtil.showToast(object.getString("msg")); +// if("200".equals(object.getString("code"))) +// { +// +// } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + } + + } + + public abstract class SimpleTextWatcher implements TextWatcher { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + + } + + @Override + public void afterTextChanged(Editable s) { + + } + } + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) getActivity() + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = ((Activity) getActivity()).getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseCollectFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseCollectFragment.java new file mode 100644 index 0000000..c706bb6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseCollectFragment.java @@ -0,0 +1,308 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CircleCollectBIngliBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/12/30. + */ + +public class ShareCaseCollectFragment extends BaseFragment implements AdapterView.OnItemClickListener,OnCallBackFromNet{ + private ArrayList DataList = new ArrayList<>(); + private int page = 1; + private int type = 3; + private int totalPage = 0; + public static String CollectListUrl = Url.getcollectionList; + private PullToRefreshListView ptrLv; + private TextView load_empty; + private MessageAdapter ListAdapter; + + @Override + public View onCreateSuccessedView() { + View view = UIUtils.inflate(R.layout.activity_my_collect); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_collect);// 下拉刷新的listview控件 + // //处理正在加载,空,错误的布局 + load_empty = (TextView) view.findViewById(R.id.load_empty); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //设置下拉与上啦都可以用 + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + CollectListData(CollectListUrl, page, true); + } + + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + CollectListData(CollectListUrl, page, false); + } + }); +// initData(); + return view; + } + + + private void initData() { + String CollectListMessage = SharePrefUtil.getString(getActivity(), CollectListUrl, null); + if (TextUtils.isEmpty(CollectListMessage)) { + showProgressDialog("正在加载"); + }else{ + processData(CollectListMessage, page, true); + } + CollectListData(CollectListUrl, page, true); + } + @Override + public LoadingPage.ResultState onLoad() { + // TODO Auto-generated method stub + return LoadingPage.ResultState.STATE_SUCCESSED; + } + @Override + public void onResume() { + // TODO Auto-generated method stub + CollectListData(CollectListUrl, page, true); + super.onResume(); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + + class MessageAdapter extends BaseAdapter { + + List list; + + public MessageAdapter(List data) { + this.list=data; + // TODO Auto-generated constructor stub + } + @Override + public int getCount() { + return list.size(); + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + MessageAdapter.Holder holder; + if (convertView == null) { + //找到自定义item布局 并赋值给 convertView + if(CommonUtil.BigModule()) + { + convertView = View.inflate(getActivity(), R.layout.activity_shoucangbingli_list_item_big, null); + } + else + { + convertView = View.inflate(getActivity(), R.layout.activity_shoucangbingli_list_item, null); + } + holder = new MessageAdapter.Holder(); + holder.name = (TextView) convertView.findViewById(R.id.item_name_title); + convertView.setTag(holder); + } else { + holder = (MessageAdapter.Holder) convertView.getTag(); + } + final CircleCollectBIngliBean.Collection data = list.get(position); + if (!TextUtils.isEmpty(data.title)) { + holder.name.setText(data.title); + }else{ + holder.name.setText(""); + } + return convertView; + } + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return position; + } + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + public class Holder { + public ImageView iv_right; + public TextView tv_down; + public ImageView iv_down; + public TextView date; + public TextView name; + } + } + /** + * 请求服务器。获取经典病例收藏记录 + * CollectListData + * @param loadUrl + * void + */ + private void CollectListData(final String loadUrl, final int page, final boolean isRefresh) { + + + String expertUuid = SharePrefUtil.getString(getActivity(), Constant.uuid, "");//提取专家uuid + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("user_uuid",expertUuid);//传专家uuid + params.addBodyParameter("page", String.valueOf(page));//传page参数 + params.addBodyParameter("type",7+"");//传page参数 + HttpHelper.loadData(HttpRequest.HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { +// SharePrefUtil.saveString(getActivity(), loadUrl,info.result); + processData(info.result, page, isRefresh); + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(load_empty); + } + }); + } + /** + * 刷新最后时间 + * setLastUpdateTime + * + * void + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + /** + * 刷新完成 + * onLoaded + * + * void + */ + private void onLoaded() { + closeProgressDialog(); + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + /** + * 解析并处理数据 + * @param result + */ + private void processData(String result,int page, boolean isRefresh) { + LogUtil.i("收藏病例荟萃 = "+result); + CircleCollectBIngliBean bean = GsonTools.fromGsonToBean(result,CircleCollectBIngliBean.class); + closeProgressDialog(); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化消息列表的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data); + + if (bean.data== null || bean.data.size() == 0) { + load_empty.setVisibility(View.VISIBLE); + load_empty.setText("您暂未收藏病例荟萃"); + }else{ + load_empty.setVisibility(View.GONE); + DataList.addAll(bean.data); + } + } else { + //加载更多下一页时候e + DataList.addAll(bean.data); + + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new MessageAdapter(DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.totalPage ; + LogUtil.i("totalPage="+totalPage+"page="+page); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + + if(!isRefresh){ + ToastUtil.showMessage("没有更多收藏了"); + } + + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + }else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + CircleCollectBIngliBean.Collection list = DataList.get(p); + String path = list.path; + String bookuuid = list.other_uuid; + String agreenum = list.agreenum; + String readnum = list.readnum; + Intent intent = new Intent(getActivity(), NewsDetailActivity.class); + intent.putExtra("url",Url.urlHtml+path); + intent.putExtra("title","病例详情"); + intent.putExtra("collect",list.title); + intent.putExtra("newsTitle",list.title); + intent.putExtra("type", 7); + intent.putExtra("nfagreenum", 0+""); + intent.putExtra("nfreadnum", 0+""); + intent.putExtra("nfsuuuid",bookuuid); + intent.putExtra("npath",path); + intent.putExtra("flag", 10); + startActivity(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseFragment.java new file mode 100644 index 0000000..f44d42a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ShareCaseFragment.java @@ -0,0 +1,385 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CaseAssembleListBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 经典病例列表 + * 类名称:CicleFragment + */ +public class ShareCaseFragment extends BaseFragment implements OnItemClickListener { + + private ScicleAdapter ListAdapter; + private ArrayList DataList = new ArrayList<>(); + private PullToRefreshListView ptrLv; + private int page = 1; + public static String MedicalRecordShareList = Url.CaseAssembleList; + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_scientific_system_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_system);// 下拉刷新的listview控件 + + // 处理正在加载,空,错误的布局 + ll_loading = view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无病例荟萃"); + // 上拉加载不可用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(MedicalRecordShareList, page, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(MedicalRecordShareList, page, false); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } +// @Override +// public void onResume() { +// // TODO Auto-generated method stub +// getList(MedicalRecordShareList, page, false); +// super.onResume(); +// } + + + + + /** + * 实例化数据 initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, + MedicalRecordShareList + "1", null); +// if (!TextUtils.isEmpty(result)) { +// processData(result); +// } else { + // 显示加载框 + showLoadingProgress(); +// } + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(MedicalRecordShareList, page, true); + } + + /** + * 请求服务器。获取病历列表数据 + */ + private void getList(final String loadUrl, final int page, final boolean isRefresh) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + LogUtil.i("病例荟萃 = "+info.result); + if (page == 1) { + SharePrefUtil.saveString(mActivity, MedicalRecordShareList + "1", + info.result); + } + processData(info.result); + + } + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); +// if (page > 1) { +// page--; +// } + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + CaseAssembleListBean bean = GsonTools.fromGsonToBean(result, CaseAssembleListBean.class); + if (StringUtil.isOneToCode(bean.getCode())) { + ToastUtil.showToast(bean.getMessage()); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:" + bean.getData().getList().size()); + if (bean.getData().getList() == null || bean.getData().getList().isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.getData().getList()); + } + } else { + DataList.addAll(bean.getData().getList()); + } + // 实例化适配器 + if (ListAdapter == null) { + ListAdapter = new ScicleAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + int totalPage = bean.getData().getTotal(); + // 是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showToast("没有更多病例了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class ScicleAdapter extends BaseAdapter { + + private Context context; + private List List; + + public ScicleAdapter(Context context, ArrayList List) { + this.context = context; + this.List = List; + } + + @Override + public int getCount() { + return List.size(); + } + + @Override + public View getView(final int position, View convertView, + ViewGroup parent) { + + NewsViewHolder mHolder = null; + if (convertView == null) { + convertView = View + .inflate(context, R.layout.item_circles, null); + mHolder = new NewsViewHolder(); + mHolder.tvTitle = (TextView) convertView + .findViewById(R.id.tv_scientific_title); + mHolder.tvreadNum = (TextView) convertView + .findViewById(R.id.tv_collect_readNum); + mHolder.tvagree = (TextView) convertView + .findViewById(R.id.tv_collec_agree); + mHolder.tvdate = (TextView) convertView + .findViewById(R.id.tv_collec_date); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + // 给控件赋值. + CaseAssembleListBean.DataBean.ListBean s = List.get(position); + mHolder.tvTitle.setText(s.getTitle()); + + + //点赞和阅读量 + Double agree = Double.parseDouble(s.getAgreenum()+""); + if (agree > 10000) { + double agreeNum = (double) (Math.round((double) agree / 1000) / 10.0); + mHolder.tvagree.setText(agreeNum + "万"); + } else { + mHolder.tvagree.setText(s.getAgreenum()+""); + } + Double read = Double.parseDouble(s.getReadnum()+""); + if (read > 10000) { + double readNum = (double) (Math.round((double) read / 1000) / 10.0); + mHolder.tvreadNum.setText(readNum + "万"); + } else { + mHolder.tvreadNum.setText(s.getReadnum()+""); + } +// if (!TextUtils.isEmpty(s.create_date) && s.create_date.length() > 10) { +// mHolder.tvdate.setText(s.create_date.substring(5, 10)); +// }else + if(!TextUtils.isEmpty(s.getCreate_date())){ + mHolder.tvdate.setText(s.getCreate_date()); + } + + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + + private HttpHandler httpHandler; + + private class NewsViewHolder { + public TextView tvdate; + public TextView tvagree; + public TextView tvTitle; + public TextView tvreadNum; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + int p = 0; + if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + } + CaseAssembleListBean.DataBean.ListBean list = DataList.get(p); + Intent intent = new Intent(mActivity, NewsDetailActivity.class); + intent.putExtra("url",Url.urlHtml+list.getPath()); + intent.putExtra("title","病例详情"); + intent.putExtra("collect",list.getTitle()); + intent.putExtra("newsTitle",list.getTitle()); + intent.putExtra("type", 7); + intent.putExtra("nfagreenum", list.getAgreenum()+""); + intent.putExtra("nfreadnum", list.getReadnum()+""); + intent.putExtra("nfsuuuid", list.getUuid()); + intent.putExtra("npath", list.getPath()); + intent.putExtra("flag", 10); + //mActivity.startActivity(intent); + startActivityForResult(intent, 113); + } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + if (resultCode == 113) { + String uuid = data.getStringExtra("uuid"); + if (DataList != null) { + for (int i = 0; i < DataList.size(); i++) { + if (uuid.equals(DataList.get(i).getUuid())) { + DataList.get(i).setAgreenum(Integer.parseInt(data.getStringExtra("agreenum"))); + DataList.get(i).setReadnum(Integer.parseInt(data.getStringExtra("readnum"))); + } + } + } + ListAdapter.notifyDataSetChanged(); + } + super.onActivityResult(requestCode, resultCode, data); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SmallCourseFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SmallCourseFragment.java new file mode 100644 index 0000000..34ff6a2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SmallCourseFragment.java @@ -0,0 +1,552 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.Url.getMoreBySpeciaType; +import static cn.shangyu.gdxzExpert.utils.Url.listExcellencourseFirstType; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.appcompat.widget.Toolbar; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.SearchClassActivity; +import cn.shangyu.gdxzExpert.adapter.CourseFirstListAdapter; +import cn.shangyu.gdxzExpert.adapter.SelectCourseAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.CourseGanExBean; +import cn.shangyu.gdxzExpert.bean.CourseIconBean; +import cn.shangyu.gdxzExpert.bean.CourseIndexBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.BackHandlerHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + + +public class SmallCourseFragment extends BaseFragment implements + OnCallBackFromNet, AdapterView.OnItemClickListener, BackHandlerHelper.FragmentBackHandler { + + PullToRefreshListView ptrLv; + ListView list_view,list_views; + List data=new ArrayList<>(); + private CourseFirstListAdapter tuiAdapter; + private int page = 1,ypPosition=0,sPosition=0; + private String first_type=""; + private CourseGanExBean courseGanExBean; + private CourseIconBean courseIconBean; + private LinearLayout dotLl,l_im; + private ArrayList dotList; + private List list=new ArrayList<>(); + private List lists=new ArrayList<>(); + private List listid=new ArrayList<>(); + private RollViewPager mViewPager; + ImageView top_back_layout,top_right; + TextView top_title; + SelectCourseAdapter selectCourseAdapter,adapter; + DrawableCenterButtonR dcb_type,dcb_s; + private String special_type="",name; + private Toolbar mToolbar; + RelativeLayout r_rr; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_small_course); + mToolbar=view.findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + Bundle bundle =this.getArguments(); + special_type = bundle.getString("special_type"); +// special_type=first_type; + top_back_layout=view.findViewById(R.id.top_back_layout); + r_rr=view.findViewById(R.id.r_rr); + top_right=view.findViewById(R.id.top_right); + top_title=view.findViewById(R.id.top_title); + list_view=view.findViewById(R.id.list_view); + list_views=view.findViewById(R.id.list_views); + dcb_type=view.findViewById(R.id.dcb_type); + dcb_s=view.findViewById(R.id.dcb_s); + name=bundle.getString("top_title"); + if("为您推荐".equals(name)) + { + top_title.setText("近期热门"); + } + else + { + top_title.setText(name); + } + + top_right.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), SearchClassActivity.class); + startActivity(intent); + } + }); + + dcb_type.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(list_view.getVisibility()==View.VISIBLE) + { + list_view.setVisibility(View.GONE); + r_rr.setVisibility(View.GONE); + return; + } + r_rr.setVisibility(View.VISIBLE); + list_view.setVisibility(View.VISIBLE); + list_views.setVisibility(View.GONE); + if(list.size()<1) + { + getSecondType(); + }else + { + if( selectCourseAdapter==null) + { + + selectCourseAdapter=new SelectCourseAdapter(list); +// selectCourseAdapter.setPosition(ypPosition); + list_view.setAdapter(selectCourseAdapter); + + } + else + { + selectCourseAdapter.setPosition(ypPosition); + selectCourseAdapter.notifyDataSetChanged(); + + } + } + + + + } + }); + dcb_s.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(list_views.getVisibility()==View.VISIBLE) + { + list_views.setVisibility(View.GONE); + r_rr.setVisibility(View.GONE); + return; + } + r_rr.setVisibility(View.VISIBLE); + list_views.setVisibility(View.VISIBLE); + list_view.setVisibility(View.GONE); + if(adapter==null) + { + if("福利课堂".equals(name)) + { + lists.clear(); + lists.add("默认排序"); + lists.add("最新上架"); + lists.add("人气最高"); + lists.add("课时数"); + lists.add("奖励从低到高"); + lists.add("奖励从高到低"); + } + else + { + lists.clear(); + lists.add("默认排序"); + lists.add("最新上架"); + lists.add("人气最高"); + lists.add("课时数"); + lists.add("价格从低到高"); + lists.add("价格从高到低"); + } + + adapter=new SelectCourseAdapter(lists); +// adapter.setPosition(sPosition); + list_views.setAdapter(adapter); + + + } + else + { + adapter.setPosition(sPosition); + adapter.notifyDataSetChanged(); + } + + + } + }); + top_back_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (BackHandlerHelper.handleBackPress(getActivity())) { +// getActivity().getSupportFragmentManager().popBackStack(); +// int a=1; + } + else + { + getActivity().finish(); + } + } + }); + dotLl = view.findViewById(R.id.dots_ll1); + l_im=view.findViewById(R.id.l_im); + ptrLv = (PullToRefreshListView)view. findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty=view.findViewById(R.id.ll_empty); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; +// if(sPosition==0) +// getCourse( first_type,special_type,page+"",""); +// else +// { +// getCourse( first_type,special_type,page+"",sPosition-1+""); +// } + getdata(); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + getdata(); +// if(sPosition==0) +// getCourse( first_type,special_type,page+"",""); +// else +// { +// getCourse( first_type,special_type,page+"",sPosition-1+""); +// } + + } + }); + list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + list_view.setVisibility(View.GONE); + chengeImg(dcb_type,list.get(position)); + page=1; + ypPosition=position; + first_type=listid.get(ypPosition); + getdata(); +// if(sPosition==0) +// getCourse( first_type,special_type,page+"",""); +// else +// { +// getCourse( first_type,special_type,page+"",sPosition-1+""); +// } + } + }); + list_views.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + list_views.setVisibility(View.GONE); + sPosition=position; + page=1; + chengeImg(dcb_s,lists.get(position)); + getdata(); +// if(sPosition==0) +// getCourse( first_type,special_type,page+"",""); +// else +// { +// getCourse( first_type,special_type,page+"",sPosition-1+""); +// } + } + }); + initDot(); + intiData(); + return view; + } + private void getdata() + { + if(sPosition==0) + getCourse( first_type,special_type,page+"",""); + else + { + if("福利课堂".equals(name)) + { + if(sPosition>3) + { + getCourse( first_type,special_type,page+"",sPosition+1+""); + } + else + { + getCourse( first_type,special_type,page+"",sPosition-1+""); + } + } + else + { + getCourse( first_type,special_type,page+"",sPosition-1+""); + } + + } + } + private void initDot() { + String s= SharePrefUtil.getString(getActivity(),"scroll_im",""); + String sid= SharePrefUtil.getString(getActivity(),"scroll_im_id",""); + if(StringUtil.isEmpty(s)) + { + return; + } + List list = Arrays.asList(s.split(",")); + List listid = Arrays.asList(sid.split(",")); + List newlist = new ArrayList(list); + dotList = new ArrayList(); + dotLl.removeAllViews(); + for (int i = 0; i < newlist.size(); i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(getActivity(), 6), CommonUtil.dip2px( + getActivity(), 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(getActivity()); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus5); + } else { + m.setBackgroundResource(R.drawable.dot_focus6); + } + m.setLayoutParams(params); + dotLl.addView(m); + dotList.add(m); + mViewPager = new RollViewPager(getActivity(), dotList, + R.drawable.dot_focus5, R.drawable.dot_focus6, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",listid.get(position)); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)); + + // top图片地址 + mViewPager.setUriList((ArrayList) newlist); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + l_im.removeAllViews(); + l_im.addView(mViewPager); + } + } + private void intiData() + { + // 网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } +// if(sPosition==0) +// getCourse( first_type,special_type,page+"",""); +// else +// { +// getCourse( first_type,special_type,page+"",sPosition-1+""); +// } + getdata(); + getSecondType(); + } + private void getSecondType() + { + Map param = new HashMap<>(); +// param.put("first_id",first_id); + sendJsonPostParamtoNetSignMD5(listExcellencourseFirstType,param,102,this); + } + private void getCourse(String first_type,String special_type,String page,String sort) + { +// showLoadingProgress(); + Map param = new HashMap<>(); + param.put("first_type",first_type); + param.put("page",page); + param.put("special_type",special_type); + param.put("sort",sort); + sendJsonPostParamtoNetSignMD5(getMoreBySpeciaType,param,101,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Intent intent=new Intent(getActivity(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id",data.get(position-1).getId()+""); + startActivity(intent); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Log.d("WXEntryActivity","resultCode "+resultJson); + switch (resultCode) { + case 101: +// dismissLoadingProgress(); + courseGanExBean = GsonTools.fromGsonToBean(resultJson, CourseGanExBean.class); + if ("200".equals(courseGanExBean.getCode())) { + if (page == 1) { + data.clear(); + if (courseGanExBean.getData() == null || courseGanExBean.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + data.addAll(courseGanExBean.getData().getList()); + } + } + else { + data.addAll(courseGanExBean.getData().getList()); + } + if (tuiAdapter == null) { + tuiAdapter = new CourseFirstListAdapter(getActivity(), data); + + ptrLv.getRefreshableView().setAdapter(tuiAdapter); + } else { + tuiAdapter.notifyDataSetChanged(); + } + onLoaded(); + if (page > 1) { + // 是否有更多 + if (courseGanExBean.getData() == null || courseGanExBean.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = courseGanExBean.getData().getPages(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + else { + ToastUtil.showToast(courseGanExBean.getMessage() + ""); + } + break; + case 102: + courseIconBean=GsonTools.fromGsonToBean(resultJson,CourseIconBean.class); + if ("200".equals(courseIconBean.getCode())) + { + list.clear(); + list.add("全部课程"); + listid.clear(); + listid.add(""); + + for(CourseIconBean.DataBean dataBean:courseIconBean.getData()) + { + list.add(dataBean.getName()); + listid.add(dataBean.getId()); + } + + selectCourseAdapter=new SelectCourseAdapter(list); + list_view.setAdapter(selectCourseAdapter); +// selectCourseAdapter.setPosition(ypPosition); + + } + else + { + ToastUtil.showToast(courseGanExBean.getMessage() + ""); + } + break; + } + + } + private void onLoaded() { + + ptrLv.onRefreshComplete(); + } + + public void chengeImg(DrawableCenterButtonR mDb_sort, String text){ + Drawable icon_new = UIUtils + .getDrawable(R.drawable.triangle_green_xia); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(mActivity.getResources().getColor( + R.color.top_title)); + mDb_sort.setText(text); + } + @Override + public void onDetach() { + super.onDetach(); + tuiAdapter=null; + } + @Override + public boolean onBackPressed() { + return BackHandlerHelper.handleBackPress(this); + } + +// @Override +// public void onLazyBeforeView() { +// +// } +// +// @Override +// public void onLazyAfterView() { +// +// } +// +// @Override +// public void onVisible() { +// +// } +// +// @Override +// public void onInvisible() { +// +// } +// +// @Override +// public void initImmersionBar() { +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); +// } +// +// @Override +// public boolean immersionBarEnabled() { +// return true; +// } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/StopNoticeFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/StopNoticeFragment.java new file mode 100644 index 0000000..30f5982 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/StopNoticeFragment.java @@ -0,0 +1,295 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity.stopnum; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.graphics.Color; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.StopOutPatientListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/1/8. + */ + +public class StopNoticeFragment extends BaseFragment implements OnCallBackFromNet,AdapterView.OnItemClickListener{ + private PullToRefreshListView lv_visit; + private CustomProgressDialog pd; + private static final int StopOutPatientList = 1; + private static final int deleteStopOutPatient = 2; + private StopOutPatientListBean fromJson; + private String uuid; + private Dialog dialog1; + private StopNoticeFragment stopNoticeFragment; + private int position1; + + @Override + public View onCreateSuccessedView() { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_stopnotice_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_stopnotice); + } + lv_visit = view.findViewById(R.id.lv_item_case); + ll_empty = View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + TextView tv_empty_msg = ll_empty.findViewById(R.id.tv_empty_msg); + LinearLayout ll_empty_bg = ll_empty.findViewById(R.id.ll_empty_bg); + if(CommonUtil.BigModule()) + { + ll_empty_bg.setBackgroundColor(getResources().getColor(R.color.big_bg)); + tv_empty_msg.setTextSize(18); + } + else + { + ll_empty_bg.setBackgroundColor(Color.parseColor("#e4e4e4")); + } + + tv_empty_msg.setText("暂无停诊公告"); + lv_visit.setMode(PullToRefreshBase.Mode.DISABLED); + pd = new CustomProgressDialog(getActivity(), "请稍候"); + pd.show(); + initData(); + stopNoticeFragment = this; + lv_visit.setEmptyView(ll_empty); + lv_visit.setOnItemClickListener(this); + return view; + } + + @Override + public void onResume() { + super.onResume(); + initData(); + } + + private void initData() { + Map param = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.stopOutPatientList, param, StopOutPatientList, this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + pd.dismiss(); + LogUtil.i("resultJson = "+resultJson); + switch (resultCode){ + case StopOutPatientList: + Gson gson = new Gson(); + fromJson = gson.fromJson(resultJson, StopOutPatientListBean.class); + if (fromJson!=null&&"200".equals(fromJson.getCode())){ + stopnum = fromJson.getData().size(); + if (stopnum==0){//删除成功并且数量大于0 + OutofPatientNoticeActivity.flagisStopNotice = false; + } + StopOutPatientListAdapter adapter = new StopOutPatientListAdapter(fromJson.getData()); + lv_visit.setAdapter(adapter); + } + + break; + case deleteStopOutPatient: + Gson gson1 = new Gson(); + BaseBean fromJson1 = gson1.fromJson(resultJson, BaseBean.class); + if (fromJson1!=null&&"200".equals(fromJson1.code)){ + initData(); + ToastUtil.showMessage("删除成功"); + OutofPatientNoticeActivity.flagisStopNotice = true; + }else { + ToastUtil.showMessage("删除失败"); + } + break; + } + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { +// StopOutPatientListBean.DataBean dataBean = fromJson.getData().get(position-1); +// Intent intent = new Intent(getActivity(), ReleaseStopActivity.class); +// intent.putExtra("dataBean",dataBean); +// startActivity(intent); + } + + + class StopOutPatientListAdapter extends BaseAdapter{ + + private List data; + + public StopOutPatientListAdapter(List data) { + this.data = data; + } + + @Override + public int getCount() { + return data!=null&&data.size()>0?data.size():0; + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_stopnotice_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_stopnotice); + } + vh = new ViewHolder(); + vh.tv_datasign = convertView.findViewById(R.id.tv_datasign); + vh.tv_stopreason = convertView.findViewById(R.id.tv_stopreason); + vh.tv_stoptime1 = convertView.findViewById(R.id.tv_stoptime1); + vh.tv_stoptime2 = convertView.findViewById(R.id.tv_stoptime2); + vh.tv_stoptime3 = convertView.findViewById(R.id.tv_stoptime3); + vh.tv_beizhu = convertView.findViewById(R.id.tv_yishenbeizhu); + vh.iv_delete = convertView.findViewById(R.id.iv_delete); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + final StopOutPatientListBean.DataBean dataBean = data .get(position); + int type = dataBean.getType(); + switch (type) { + case 1: + vh.tv_stopreason.setText("出差"); + break; + case 2: + vh.tv_stopreason.setText("休假"); + break; + case 3: + vh.tv_stopreason.setText("临时安排"); + break; + case 4: + vh.tv_stopreason.setText("其他"); + break; + } + vh.tv_beizhu.setText(dataBean.getNote().toString().trim()); + String day = DateUtil.timestamp2Date(dataBean.getExpire_date()+"","yyyy-MM-dd"); + vh.tv_datasign.setText(day); + if (dataBean.getDate_list().size()>=1){ + vh.tv_stoptime1.setText(dataBean.getDate_list().get(0).getParam1()+" ~ "+dataBean.getDate_list().get(0).getParam2()); + } + if (dataBean.getDate_list().size()>=2){ + vh.tv_stoptime2.setText(dataBean.getDate_list().get(1).getParam1()+" ~ "+dataBean.getDate_list().get(1).getParam2()); + vh.tv_stoptime2.setVisibility(View.VISIBLE); + } + if (dataBean.getDate_list().size()>=3){ + vh.tv_stoptime3.setText(dataBean.getDate_list().get(2).getParam1()+" ~ "+dataBean.getDate_list().get(2).getParam2()); + vh.tv_stoptime3.setVisibility(View.VISIBLE); + } + + vh.iv_delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + isDelete(position,dataBean); + } + }); + + + return convertView; + } + + + + public class ViewHolder { + + public TextView tv_stopreason, tv_stoptime1, tv_stoptime2,tv_stoptime3,tv_beizhu,tv_datasign; + public ImageView iv_delete; + + } + + } + private void isDelete(int position,StopOutPatientListBean.DataBean dataBean) { + position1 = position; + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_isdelete, null); + + dialog1 = new AlertDialog.Builder(getActivity()).create(); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + uuid = dataBean.getUuid(); + dialog1.show(); + Window window =dialog1.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog1.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog1.dismiss(); + Map param = new HashMap<>(); + param.put("uuid",uuid); + LogUtil.i("uuid = "+uuid); + sendJsonPostParamtoNetSignMD5(Url.deleteStopOutPatient, param, deleteStopOutPatient, stopNoticeFragment); + + } + }); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuggestFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuggestFragment.java new file mode 100644 index 0000000..1c3b6eb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuggestFragment.java @@ -0,0 +1,272 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.ListView; + +import androidx.fragment.app.Fragment; + +import com.google.gson.Gson; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ProjectDetailActivity; +import cn.shangyu.gdxzExpert.adapter.ProjectAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.SuggestBean; +import cn.shangyu.gdxzExpert.bean.projectQueryForm; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import okhttp3.Call; +import okhttp3.MediaType; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link SuggestFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SuggestFragment extends BaseFragment implements AdapterView.OnItemClickListener, OnCallBackFromNet { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public SuggestFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment SuggestFragment. + */ + // TODO: Rename and change types and number of parameters + public static SuggestFragment newInstance(String param1, String param2) { + SuggestFragment fragment = new SuggestFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + PullToRefreshListView ptr; + ProjectAdapter projectAdapter; + public int page=1; + View ll_empty; + public String keywords=""; + @Override + public View onCreateSuccessedView() { + View view= UIUtils.inflate(R.layout.fragment_suggest); + ptr=view.findViewById(R.id.lv_item_c); + ptr.setMode(PullToRefreshBase.Mode.BOTH); + ptr.setOnItemClickListener(this); + ptr.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + page=1; + init(page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + init(page+""); + } + }); + ll_empty=view.findViewById(R.id.ll_empty); + gettokens(Url.youanlist); + + return view; + } + + String token; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)||token=="") + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(getActivity(),new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + closeProgressDialog(); + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.youanlist)) + { + init(page+""); + } + } +// List sortItemList=new ArrayList<>(); + SuggestBean suggestBean; + private List list=new ArrayList<>(); + public void init(String pageNum) + { + +// sortItemList.clear(); +// sortItemList.add(new sortItem(true,"")); + projectQueryForm pro=new projectQueryForm(); + pro.setPageNum(pageNum); + pro.setPageSize("10"); + pro.setKeywords(keywords); +// pro.setSortItemList(sortItemList); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url = Url.youanlist; + OkHttpUtils + .postString() + .url(url) + .headers(headers) + .content(new Gson().toJson(pro)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + ptr.onRefreshComplete(); + if(hasrealtoken(response)>0) + { + suggestBean=GsonTools.fromGsonToBean(response,SuggestBean.class); + if(suggestBean.getData()!=null) + { + if(page==1) + { + list.clear(); + } + list.addAll(suggestBean.getData().getList()); + if(page==1&&list.size()==0) + { + + ptr.setEmptyView(ll_empty); + return; + } + if(page>suggestBean.getData().getPages()) + { + page--; + ToastUtil.showToast("没有更多了"); + ptr.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } + else + { + ptr.setMode(PullToRefreshBase.Mode.BOTH); + } + + setadapter(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens( Url.youanlist); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + private void setadapter() + { + if(projectAdapter==null) + { + projectAdapter =new ProjectAdapter(list); + ptr.setAdapter(projectAdapter); + } + else + { + projectAdapter.notifyDataSetChanged(); + + } + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + Intent intent=new Intent(getActivity(), ProjectDetailActivity.class); + intent.putExtra("projectId",list.get(i-1).getProjectId()); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuiMessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuiMessageFragment.java new file mode 100644 index 0000000..451fd88 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/SuiMessageFragment.java @@ -0,0 +1,224 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.adapter.MessageAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.umeng.NewSystemMessageActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.Url.appMesageList; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link SuiMessageFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class SuiMessageFragment extends BaseFragment implements OnCallBackFromNet, AdapterView.OnItemClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + private View view; + PullToRefreshListView ptrLv; + public View ll_empty; + public int page = 1; + MessageAdapter messageAdapter; + List data=new ArrayList<>(); + MessageBean messageBeans; + private NewSystemMessageActivity newSystemMessageActivity; + public SuiMessageFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment SuiMessageFragment. + */ + // TODO: Rename and change types and number of parameters + public static SuiMessageFragment newInstance(String param1, String param2) { + SuiMessageFragment fragment = new SuiMessageFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + +// @Override +// public void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// if (getArguments() != null) { +// mParam1 = getArguments().getString(ARG_PARAM1); +// mParam2 = getArguments().getString(ARG_PARAM2); +// } +// } +// +// @Override +// public View onCreateView(LayoutInflater inflater, ViewGroup container, +// Bundle savedInstanceState) { +// // Inflate the layout for this fragment +// return inflater.inflate(R.layout.fragment_sui_message, container, false); +// } + + @Override + public View onCreateSuccessedView() { + newSystemMessageActivity= (NewSystemMessageActivity) getActivity(); + if(view==null) + view = UIUtils.inflate(R.layout.fragment_sui_message); + + ptrLv = view.findViewById(R.id.lv_item_c); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ll_empty = view.findViewById(R.id.ll_empty); + TextView tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂时还没有收到随访通知哦"); + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + newSystemMessageActivity.initMessage(); + initMessage("3",page+""); + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + page++; + newSystemMessageActivity.initMessage(); + initMessage("3",page+""); + } + }); + + initMessage("3",1+""); + return view; + } + public void initMessage(String module, String page) + { + showLoadingProgress(); + Map map=new HashMap<>(); + map.put("module",module); + map.put("page",page); + sendJsonPostParamtoNetSignMD5(appMesageList,map,101,this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode) + { + case 101: + closeProgressDialog(); + messageBeans = GsonTools.fromGsonToBean(resultJson, MessageBean.class); + if ("200".equals(messageBeans.getCode())) { + if (page == 1) { + data.clear(); + if (messageBeans.getData() == null || messageBeans.getData().getList().size() == 0) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + ptrLv.onRefreshComplete(); + return; + } else { + data.addAll(messageBeans.getData().getList()); + } + } else { + data.addAll(messageBeans.getData().getList()); + } + + + if (messageAdapter == null) { + messageAdapter = new MessageAdapter(data); + + ptrLv.getRefreshableView().setAdapter(messageAdapter); + } else { + messageAdapter.notifyDataSetChanged(); + } + ptrLv.onRefreshComplete(); + if (page > 1) { + // 是否有更多 + if (messageBeans.getData()== null || messageBeans.getData().getList().size() == 0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = messageBeans.getData().getPageSize(); + if (totalPage <= 1 || totalPage < page) { + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } else { + ToastUtil.showToast(messageBeans.getMessage() + ""); + } + break; + } + + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + data.get(i-1).setIs_read("1"); + messageAdapter.notifyDataSetChanged(); + if(newSystemMessageActivity==null) + return; + newSystemMessageActivity.goActivity(data.get(i-1).getExtra().getType(),data.get(i-1),2); + } + @Override + public void onHiddenChanged(boolean hidden) { + super.onHiddenChanged(hidden); + if(!hidden) + { + initMessage("3",page+""); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ToolsListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ToolsListFragment.java new file mode 100644 index 0000000..40e42f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/ToolsListFragment.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.ToolsActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.big.adapter.BigToolAdapter; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * LibraryListFragment.java + * + * @author lifuang + * @date 2015-11-4 下午1:45:08 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:常用工具列表 + */ +public class ToolsListFragment extends BaseFragment implements OnItemClickListener { + + private PullToRefreshListView ptrLv; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_library_list_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_library_list); + } + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_library);// 下拉刷新的listview控件 + + // 设置只有下拉刷新 + ptrLv.setMode(Mode.PULL_FROM_START); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + + initData(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("常用工具"); + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + */ + private void initData() { + ptrLv.setMode(Mode.DISABLED); + String[] strTools = getResources().getStringArray(R.array.tools_array_item); + if(CommonUtil.BigModule()) + { + ptrLv.getRefreshableView().setAdapter(new BigToolAdapter(mActivity, R.layout.bookself_item_big, R.id.item_name,strTools)); + } + else + { + ptrLv.getRefreshableView().setAdapter(new ArrayAdapter(mActivity, R.layout.item_list_tools, strTools)); + } + + } + + @Override + public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) { + int position = arg2 - ptrLv.getRefreshableView().getHeaderViewsCount(); + String title = ((TextView)(arg1.findViewById(R.id.item_name))).getText().toString(); + Intent intent = new Intent(mActivity, ToolsActivity.class); + if (position==0) { + intent.putExtra("position", position); + }else if (position==1) { + position=22; + intent.putExtra("position", position); + }else if (position == 2){ + position=23; + intent.putExtra("position", position); + }else{ + intent.putExtra("position", position-2);//之前每加一行多减去一 + } + intent.putExtra("title", title); + startActivity(intent); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipCompleteFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipCompleteFragment.java new file mode 100644 index 0000000..3691f07 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipCompleteFragment.java @@ -0,0 +1,489 @@ +package cn.shangyu.gdxzExpert.fragment; + +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONException; +import org.json.JSONObject; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PatientActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.VipOrderBean; +import cn.shangyu.gdxzExpert.bean.VipOrderBean.DataList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +/** + * 类描述:功能说明:已完成fragment + * 创建人:苏三元 + * 时间:2015-9-24 下午1:43:51 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class VipCompleteFragment extends BaseFragment implements OnItemClickListener { + + private VipOrderAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + /** + * 订单列表 + */ + public static String OrderListUrl = Url.getorderList; + //请求页码 + private int page = 1; + private int totalPage = 0; + private HttpHandler httpHandler; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_vip_complete_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_complete);// 下拉刷新的listview控件 + + //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + //设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("无已完成服务"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(OrderListUrl, page, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(OrderListUrl, page, false); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + * initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + String result = SharePrefUtil.getString(mActivity, OrderListUrl, null); + if (!TextUtils.isEmpty(result)) { + processData(result, page, true); + }else{ + //显示加载框 + showLoadingProgress(); + } + //网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + getList(OrderListUrl, page, true); + } + + /** + * 请求服务器。获取患者列表数据 + * + * void + */ + private void getList(final String loadUrl, final int page, final boolean isRefresh) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + params.addBodyParameter("status", "3");//1.待审核2.已审核3.已完成 + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("response_json---" + info.result); + SharePrefUtil.saveString(mActivity, loadUrl,info.result); + processData(info.result, page, isRefresh); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + //网络是否可用 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if(httpHandler!=null){ + httpHandler.cancel();//取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, int page, boolean isRefresh) { + + VipOrderBean bean = GsonTools.fromGsonToBean(result,VipOrderBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data.size()); + if (bean.data == null || bean.data.size() == 0) { + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + //加载更多下一页时候 + DataList.addAll(bean.data); + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new VipOrderAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.totalPage; + //是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (!isRefresh){ + ToastUtil.showToast("没有更多了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class VipOrderAdapter extends BaseAdapter { + + private Context context; + private List OrderList; + private String checkOrderUrl = Url.getcheckOrder; + public VipOrderAdapter(Context context, ArrayList List) { + this.context = context; + this.OrderList = List; + } + + @Override + public int getCount() { + return OrderList.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_vip_yiwancheng_list, + null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_vip_touxiang); + mHolder.tvType = (TextView) convertView + .findViewById(R.id.tv_vip_type);//类型,现在改为是否完成 + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_vip_date); + mHolder.tvYuYueDate = (TextView) convertView + .findViewById(R.id.tv_vip_yuyue_date); + mHolder.tvName = (TextView) convertView + .findViewById(R.id.tv_vip_name); + mHolder.tv_baoyueleft = (TextView) convertView + .findViewById(R.id.tv_baoyueleft);//包月剩余天数,现在改为服务类型 + mHolder.ll_bt = (LinearLayout) convertView + .findViewById(R.id.ll_bt); + mHolder.ll_bt.setVisibility(View.GONE); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + //服务类型 + String type = ""; + final DataList p = OrderList.get(position); + if ("1".equals(p.orderType)) {//电话 + type = "电话咨询"; + }else if ("2".equals(p.orderType)) {//门诊 + type = "门诊预约"; + }else if ("3".equals(p.orderType)) {//包月 + type = "按月定制"; + } + //改为类型 + mHolder.tv_baoyueleft.setText(type); + mHolder.tv_baoyueleft.setTextColor(getResources().getColor(R.color.top_title)); + //改为是完成,与取消,1.待审核2.已审核3.未通过审核 4.已关闭 5.审核前患者取消订单 6.审核后患者取消订单 7.审核后医生取消订单 8.已完成 9.已结算 +// mHolder.tvType.setTextColor(getResources().getColor(R.color.top_title)); + String orderStatus = p.orderStatus; + if ("1".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_pending_verify); + }else if ("2".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_verify); + }else if ("3".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_no_verify); + }else if ("4".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_close); + }else if ("5".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_patient_cancel); + }else if ("6".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_patient_cancel); + }else if ("7".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_expert_cancel); + }else if ("8".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_complete); + }else if ("9".equals(orderStatus)) { + orderStatus = getResources().getString(R.string.vip_order_complete_balance); + }else{ + orderStatus = getResources().getString(R.string.vip_order_complete); + } + mHolder.tvType.setText("服务状态:"+orderStatus); + mHolder.tvName.setText(p.realName); + //这个应为取消服务的时间,如专家取消,患者取消 +// mHolder.tvDate.setText(p.createDate); + if ("2".equals(p.orderType)) { + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() >= 13) { + if (12 >= Integer.valueOf(p.startDate.substring(11, 13))) { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 10)+" 上午"); + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 10)+" 下午"); + } + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate); + } + }else if ("3".equals(p.orderType)) {//包月 + String startDate = p.startDate; + String endDate = p.endDate; + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() > 10) { + startDate = p.startDate.substring(0, 10); + } + if (!TextUtils.isEmpty(p.endDate) && p.endDate.length() > 10) { + endDate = p.endDate.substring(0, 10); + } + mHolder.tvYuYueDate.setText("服务时间:"+startDate+" 至 "+endDate); + }else{ + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() >= 16) { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 16)); + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate); + } + } + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml+p.photo,mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray)); + }else{ + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray); + } + //头像点击进入患者详情 + mHolder.ivImage.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, PatientActivity.class); + intent.putExtra("realName", p.realName); + intent.putExtra("patientUuid", p.patientUuid); + startActivity(intent);//启动患者详情界面 + LogUtil.i("患者详情"+p.realName+OrderList.get(position).patientUuid); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + private NewsViewHolder mHolder = null; + private class NewsViewHolder { + public TextView tv_baoyueleft; + public LinearLayout ll_bt; + public TextView tvYuYueDate; + public TextView tvType; + public TextView tvName; + public ImageView ivImage; + public TextView tvDate; + } + + private void getNewPatient(final String loadUrl, String uuid, final String status, final int position) { + showProgressDialog("请求中..."); + RequestParams params = new RequestParams(); + params.addBodyParameter("uuid", uuid);//申请记录uuid + params.addBodyParameter("status", status);//状态(2.同意 3.拒绝) + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (("1").equals(retcode)) { + ToastUtil.showToast( "操作成功"); +// PatientList.remove(position); +// patientAdapter.notifyDataSetChanged(); +// NewPatientActivity.this.setResult(REQUEST_REFRESH); + }else{ + ToastUtil.showToast(message); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("操作失败,请稍候再试"); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub +// if (requestCode == REQUEST_OK && resultCode == NewPatientActivity.REQUEST_REFRESH) { +// //刷新list +// getList(OrderListUrl); +// LogUtil.i("刷新患者列表了"); +// } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // TODO Auto-generated method stub +// LogUtil.i("position:"+position); +// int p = 0; +// if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { +// p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); +// } +// +// DataList list = DataList.get(p); +// String orderNum = list.orderNum;//订单号 +// String orderType = list.orderType;//订单类型(1.电话2.门诊3.包月4.鲜花) + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipPendingFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipPendingFragment.java new file mode 100644 index 0000000..3f9c167 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipPendingFragment.java @@ -0,0 +1,522 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PatientActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.VipOrderBean; +import cn.shangyu.gdxzExpert.bean.VipOrderBean.DataList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * 类描述:功能说明:待审核fragment + * 创建人:苏三元 + * 时间:2015-9-24 下午1:43:51 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class VipPendingFragment extends BaseFragment implements OnItemClickListener { + + private VipOrderAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + /** + * 订单列表 + */ + public static String OrderListUrl = Url.getorderList; + //请求页码 + private int page = 1; + private int totalPage = 0; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_vip_pending_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_pending);// 下拉刷新的listview控件 + + //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + //空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + //设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("无待审核申请"); + // 上拉加载不可用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(OrderListUrl, page, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(OrderListUrl, page, false); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + * initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 +// String result = SharePrefUtil.getString(mActivity, OrderListUrl, null); +// if (!TextUtils.isEmpty(result)) { +// isFirst = false; +// processData(result); +// }else{ +// //显示加载框 +// showLoadingProgress(); +// } + //网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + //显示加载框 + showLoadingProgress(); + getList(OrderListUrl, page, true); + } + + /** + * 请求服务器。获取患者列表数据 + * + * void + */ + private void getList(final String loadUrl, final int page, final boolean isRefresh) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + params.addBodyParameter("status", "1");//1.待审核2.已审核3.已完成 + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("response_json---" + info.result); +// SharePrefUtil.saveString(mActivity, OrderListUrl,info.result); + processData(info.result, page, isRefresh); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if(httpHandler!=null){ + httpHandler.cancel();//取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, int page, boolean isRefresh) { + + VipOrderBean bean = GsonTools.fromGsonToBean(result,VipOrderBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data.size()); + if (bean.data == null || bean.data.size() == 0) { + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + //加载更多下一页时候 + DataList.addAll(bean.data); + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new VipOrderAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.totalPage; + //是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (!isRefresh){ + ToastUtil.showToast("没有更多了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class VipOrderAdapter extends BaseAdapter { + + private Context context; + private List OrderList; + private String checkOrderUrl = Url.getcheckOrder; + public VipOrderAdapter(Context context, ArrayList List) { + this.context = context; + this.OrderList = List; + } + + @Override + public int getCount() { + return OrderList.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_vip_pending_list, + null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_vip_touxiang); + mHolder.tvType = (TextView) convertView + .findViewById(R.id.tv_vip_type); + mHolder.tvYuYueDate = (TextView) convertView + .findViewById(R.id.tv_vip_yuyue_date); + mHolder.tvName = (TextView) convertView + .findViewById(R.id.tv_vip_name); + mHolder.tvVip = (TextView) convertView + .findViewById(R.id.tv_vip); + mHolder.tvDate = (TextView) convertView + .findViewById(R.id.tv_vip_date); + mHolder.btOk = (Button) convertView + .findViewById(R.id.bt_vip_ok); + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_vip_cancle); + mHolder.tvDate.setVisibility(View.VISIBLE); + + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + //服务类型 + String type = ""; + final DataList p = OrderList.get(position); + if ("1".equals(p.orderType)) {//电话 + type = "电话预约"; + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() >= 16) { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 16)); + }else{ + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate); + } + }else if ("2".equals(p.orderType)) {//门诊 + type = "门诊预约"; + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() >= 13) { + if (12 >= Integer.valueOf(p.startDate.substring(11, 13))) { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 10)+" 上午"); + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 10)+" 下午"); + } + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate); + } + }else if ("3".equals(p.orderType)) {//包月 + type = "按月定制"; + mHolder.tvYuYueDate.setText("服务时间:"+p.howLong+"个月"); + } + if ("1".equals(p.vip)) {//是vip + mHolder.tvVip.setVisibility(View.VISIBLE); + }else{ + mHolder.tvVip.setVisibility(View.GONE); + } + mHolder.tvType.setText(type); + mHolder.tvName.setText(p.realName); + if (!TextUtils.isEmpty(p.createDate) && p.createDate.length() >= 16) { + mHolder.tvDate.setText("申请时间:"+p.createDate.substring(0, 16)); + }else { + mHolder.tvDate.setText("申请时间:"+p.createDate); + } + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml+p.photo,mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray)); + }else{ + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray); + } + + mHolder.btOk.setVisibility(View.VISIBLE); + mHolder.btCancle.setVisibility(View.VISIBLE); + + //头像点击进入患者详情 + mHolder.ivImage.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, PatientActivity.class); + intent.putExtra("realName", p.realName); + intent.putExtra("patientUuid", p.patientUuid); + startActivity(intent);//启动患者详情界面 +// ToastUtil.showToast("患者详情"+p.realName+OrderList.get(position).patientUuid); + } + }); + + //同意 + mHolder.btOk.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("ok-position=="+position); + String orderNum = OrderList.get(position).orderNum; + LogUtil.i("orderNum"+p.orderNum+orderNum); + getCheckOrder(checkOrderUrl, orderNum, "2", position); + } + }); + + //拒绝 + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + private ECAlertDialog buildAlert; + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("cancle-position=="+position); + String des = "确定拒绝服务申请?"; + buildAlert = ECAlertDialog.buildAlert(context, des, + "否", "是", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 同意 + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + String orderNum = OrderList.get(position).orderNum; + getCheckOrder(checkOrderUrl, orderNum, "3", position); + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + private NewsViewHolder mHolder = null; + private HttpHandler httpHandler; + private class NewsViewHolder { + public TextView tvVip; + public TextView tvYuYueDate; + public TextView tvType; + public TextView tvName; + public Button btCancle; + public Button btOk; + public ImageView ivImage; + public TextView tvDate; + } + + private void getCheckOrder(final String loadUrl, String orderNum, final String status, final int position) { + showProgressDialog("提交中..."); + RequestParams params = new RequestParams(); + params.addBodyParameter("orderNum", orderNum);//订单号 + params.addBodyParameter("status", status);//状态(2.同意 3.拒绝) + + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if (("1").equals(retcode)) { + ToastUtil.showToast( "操作成功"); + DataList.remove(position); + ListAdapter.notifyDataSetChanged(); + if (DataList.isEmpty()) { + ptrLv.setEmptyView(ll_empty); + } + + }else{ + ToastUtil.showToast(message); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("操作失败,请稍候再试"); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub +// if (requestCode == REQUEST_OK && resultCode == NewPatientActivity.REQUEST_REFRESH) { +// //刷新list +// getList(OrderListUrl); +// LogUtil.i("刷新患者列表了"); +// } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // TODO Auto-generated method stub +// LogUtil.i("position:"+position); +// int p = 0; +// if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { +// p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); +// } +// +// DataList list = DataList.get(p); +// String orderNum = list.orderNum;//订单号 +// String orderType = list.orderType;//订单类型(1.电话2.门诊3.包月4.鲜花) + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipServicesFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipServicesFragment.java new file mode 100644 index 0000000..9c9e20a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VipServicesFragment.java @@ -0,0 +1,522 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PatientActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.VipOrderBean; +import cn.shangyu.gdxzExpert.bean.VipOrderBean.DataList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * 类描述:功能说明:服务中fragment + * 创建人:苏三元 + * 时间:2015-9-24 下午1:43:51 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class VipServicesFragment extends BaseFragment implements OnItemClickListener { + + private VipOrderAdapter ListAdapter; + private ArrayList DataList = new ArrayList(); + private PullToRefreshListView ptrLv; + /** + * 订单列表 + */ + public static String OrderListUrl = Url.getorderList; + //请求页码 + private int page = 1; + private int totalPage = 0; + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.fragment_vip_services_list); + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_service);// 下拉刷新的listview控件 + + //处理正在加载,空,错误的布局 + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + //空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + //设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("无正在进行服务"); + // 上拉加载不可用 + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = 1; + getList(OrderListUrl, page, true); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + page = page + 1; + getList(OrderListUrl, page, false); + } + }); + + initData(); + return view; + } + + @Override + public View onCreateSuccessedView() { + + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + /** + * 实例化数据 + * initData + * + * void + */ + public void initData() { + // 从sp里取出上一次存的列表数据 + // String result = SharePrefUtil.getString(mActivity, OrderListUrl, null); + // if (!TextUtils.isEmpty(result)) { + // isFirst = false; + // processData(result); + // }else{ + // //显示加载框 + // showLoadingProgress(); + // } + //网络是否可用 + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + return; + } + //显示加载框 + showLoadingProgress(); + getList(OrderListUrl, page, true); + } + + /** + * 请求服务器。获取患者列表数据 + * + * void + */ + private void getList(final String loadUrl, final int page, final boolean isRefresh) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + RequestParams params = new RequestParams();//封装参数 + params.addBodyParameter("expertUuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + params.addBodyParameter("status", "2");//1.待审核2.已审核3.已完成 + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(mActivity, OrderListUrl,info.result); + processData(info.result, page, isRefresh); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + onLoaded(); + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + + if(httpHandler!=null){ + httpHandler.cancel();//取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result, int page, boolean isRefresh) { + + VipOrderBean bean = GsonTools.fromGsonToBean(result,VipOrderBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } + //判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (isRefresh) { + // 初始化列表新闻的数据 + DataList.clear(); + // 数据为空 + LogUtil.i("size:"+ bean.data.size()); + if (bean.data == null || bean.data.size() == 0) { + //显示空布局 + ptrLv.setEmptyView(ll_empty); + //完成刷新 + onLoaded(); + return; + } else { + DataList.addAll(bean.data); + } + } else { + //加载更多下一页时候 + DataList.addAll(bean.data); + } + //实例化适配器 + if (ListAdapter == null) { + ListAdapter = new VipOrderAdapter(mActivity, DataList); + ptrLv.getRefreshableView().setAdapter(ListAdapter); + } else { + ListAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + //得到总页码数 + totalPage = bean.totalPage; + //是否有更多 + if (totalPage <= 1 || totalPage < page) { + if (!isRefresh){ + ToastUtil.showToast("没有更多了"); + } + ptrLv.setMode(Mode.PULL_FROM_START); + } else { + ptrLv.setMode(Mode.BOTH); + } + // 设置刷新的时间 + setLastUpdateTime(); + } + + public class VipOrderAdapter extends BaseAdapter { + + private Context context; + private List OrderList; + private String cancelOrderUrl = Url.getcancelOrder; + private int width; + public VipOrderAdapter(Context context, ArrayList List) { + this.context = context; + this.OrderList = List; + } + + @Override + public int getCount() { + return OrderList.size(); + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + convertView = View.inflate(context, R.layout.item_vip_service_list, + null); + mHolder = new NewsViewHolder(); + mHolder.ivImage = (ImageView) convertView + .findViewById(R.id.iv_vip_touxiang); + mHolder.tvType = (TextView) convertView + .findViewById(R.id.tv_vip_type); + mHolder.tvYuYueDate = (TextView) convertView + .findViewById(R.id.tv_vip_yuyue_date); + mHolder.tvName = (TextView) convertView + .findViewById(R.id.tv_vip_name); + mHolder.tv_baoyueleft = (TextView) convertView + .findViewById(R.id.tv_baoyueleft);//包月剩余天数 + mHolder.btCancle = (Button) convertView + .findViewById(R.id.bt_vip_cancle); + convertView.setTag(mHolder); + } else { + mHolder = (NewsViewHolder) convertView.getTag(); + } + + //服务类型 + String type = ""; + final DataList p = OrderList.get(position); + mHolder.tv_baoyueleft.setVisibility(View.GONE); + if ("1".equals(p.orderType)) {//电话 + type = "电话咨询"; + }else if ("2".equals(p.orderType)) {//门诊 + type = "门诊预约"; + }else if ("3".equals(p.orderType)) {//包月 + type = "按月定制"; + mHolder.tv_baoyueleft.setVisibility(View.VISIBLE); + if ("-1".equals(p.leftDay)) { + mHolder.tv_baoyueleft.setText("包月已到期"); + }else if (!TextUtils.isEmpty(p.leftDay)) { + mHolder.tv_baoyueleft.setText("包月剩余"+p.leftDay+"天"); + }else{ + mHolder.tv_baoyueleft.setVisibility(View.GONE); + } + } + mHolder.tvType.setText(type); + mHolder.tvName.setText(p.realName); + width = getActivity().getResources().getDisplayMetrics().widthPixels; + + if ("2".equals(p.orderType)) { + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() >= 13) { + if (12 >= Integer.valueOf(p.startDate.substring(11, 13))) { + + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 10)+" 上午"); + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 10)+" 下午"); + } + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate); + } + }else if ("3".equals(p.orderType)) {//包月 + String startDate = p.startDate; + String endDate = p.endDate; + + + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() > 10) { + + startDate = p.startDate.substring(0, 10); + } + if (!TextUtils.isEmpty(p.endDate) && p.endDate.length() > 10) { + endDate = p.endDate.substring(0, 10); + } + if(width < 720 ){ + startDate = p.startDate.substring(5, 10); + endDate = p.endDate.substring(5,10); + }else{ + startDate = p.startDate.substring(0, 10); + endDate = p.endDate.substring(0,10); + } + mHolder.tvYuYueDate.setText("服务时间:"+startDate+" 至 "+endDate); + }else{ + if (!TextUtils.isEmpty(p.startDate) && p.startDate.length() >= 16) { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate.substring(0, 16)); + }else { + mHolder.tvYuYueDate.setText("服务时间:"+p.startDate); + } + } + if (!TextUtils.isEmpty(p.photo) && !"null".equals(p.photo)) { + ImageLoader.getInstance().displayImage(Url.urlHtml+p.photo,mHolder.ivImage, + ImageOptions.getImageOptions(R.drawable.icon_touxiang_persion_gray)); + }else{ + mHolder.ivImage.setImageResource(R.drawable.icon_touxiang_persion_gray); + } + //头像点击进入患者详情 + mHolder.ivImage.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(mActivity, PatientActivity.class); + intent.putExtra("realName", p.realName); + intent.putExtra("patientUuid", p.patientUuid); + startActivity(intent);//启动患者详情界面 + LogUtil.i("患者详情"+p.realName+OrderList.get(position).patientUuid); + } + }); + + //取消服务 + mHolder.btCancle.setOnClickListener(new OnClickListener() { + + private ECAlertDialog buildAlert; + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LogUtil.i("ok-position=="+position); + String des = "确定取消服务?"; + buildAlert = ECAlertDialog.buildAlert(context, des, + "否", "是", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 同意 + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + String orderNum = OrderList.get(position).orderNum; + LogUtil.i("orderNum"+p.orderNum); + getCheckOrder(cancelOrderUrl, orderNum, position); + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + return convertView; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return 0; + } + + } + private NewsViewHolder mHolder = null; + private HttpHandler httpHandler; + private class NewsViewHolder { + public TextView tv_baoyueleft; + public TextView tvYuYueDate; + public TextView tvType; + public TextView tvName; + public Button btCancle; + public ImageView ivImage; + } + + private void getCheckOrder(final String loadUrl, String orderNum, final int position) { + showProgressDialog("提交中..."); + RequestParams params = new RequestParams(); + params.addBodyParameter("orderNum", orderNum);//订单号 + HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + try { + JSONObject objs = new JSONObject(info.result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + + if ("1".equals(retcode)) { + ToastUtil.showToast( "取消成功"); + DataList.remove(position); + ListAdapter.notifyDataSetChanged(); + }else{ + ToastUtil.showToast(message); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + ToastUtil.showToast("操作失败,请稍候再试"); + } + }); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + // if (requestCode == REQUEST_OK && resultCode == NewPatientActivity.REQUEST_REFRESH) { + // //刷新list + // getList(OrderListUrl); + // LogUtil.i("刷新患者列表了"); + // } + super.onActivityResult(requestCode, resultCode, data); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + // TODO Auto-generated method stub + // LogUtil.i("position:"+position); + // int p = 0; + // if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { + // p = position - ptrLv.getRefreshableView().getHeaderViewsCount(); + // } + + /** + * 订单详情 + */ + // public static String OrderDetailUrl = Url.getorderDetailt; + // params.addBodyParameter("orderNum", orderNum);//订单号 + // params.addBodyParameter("status", orderType);//订单类型(1.电话2.门诊3.包月4.鲜花) + // DataList list = DataList.get(p); + // String orderNum = list.orderNum;//订单号 + // String orderType = list.orderType;//订单类型(1.电话2.门诊3.包月4.鲜花) + // ToastUtil.showMsgCustomToast("uuid"+DataList.get(position).uuid+DataList.get(position).realName); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VisitPlanFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VisitPlanFragment.java new file mode 100644 index 0000000..bb00e5b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/VisitPlanFragment.java @@ -0,0 +1,384 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.app.Dialog; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.AdapterView.OnItemLongClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.VisitDerailActivity; +import cn.shangyu.gdxzExpert.adapter.VisitPlanAdapter; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.VisitPlanListBean; +import cn.shangyu.gdxzExpert.bean.VisitPlanListBean.Datas; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class VisitPlanFragment extends BaseFragment implements + OnItemClickListener, OnItemLongClickListener { + private VisitPlanAdapter mAdapter; + private ArrayList mList = new ArrayList(); + private PullToRefreshListView ptrLv; + private String url = Url.getFollowUpList; + private int page = 1; + private HttpHandler httpHandler; + private String uuid; + public static final int GET_ADD_DATA_BACK = 201; + + public interface OnKepuRefreshListener { + void onKepuRefresh(String url); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_visit_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_visit); + } + + ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_kepu); + + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("您暂未添加随访计划"); + + ptrLv.setMode(Mode.BOTH); + // 得到实际的ListView 设置点击 + ptrLv.getRefreshableView().setOnItemClickListener(this); + ptrLv.getRefreshableView().setOnItemLongClickListener(this); + setLastUpdateTime(); + ptrLv.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getScienceList(url); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page++; + getScienceList(url); + } + }); + + initData(); + return view; + } + + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public ResultState onLoad() { + return null; + } + + public void initData() { + uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + String result = SharePrefUtil.getString(mActivity, url, null); + if (!CommonUtil.isNetworkAvailable()) { + onLoaded(); + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + return; + } + if (!TextUtils.isEmpty(result)) { + processData(result); + } else { + showLoadingProgress(); + } + + getScienceList(url); + } + + public void getScienceList(final String loadUrl) { + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("expert_uuid", uuid); + params.addBodyParameter("page", String.valueOf(page)); + httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.d("getScienceList().onSuccess info.result = " + + info.result); + if (page == 1) { + SharePrefUtil.saveString(mActivity, loadUrl, + info.result); + // 保存缓存的时间 + SharePrefUtil.saveString( + mActivity, + "key_kepu_fragment_cache_date", + DateUtil.getCurDateStr("yyyy-MM-dd HH:mm:ss")); + } + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getScienceList().onFailure = " + arg1); + onLoaded(); + if (page > 1) { + page--; + } + // 显示网络错误布局 + ptrLv.setEmptyView(tv_load_fail); + ToastUtil.showToast("请求失败,请重试"); + } + }); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + VisitPlanListBean bean = GsonTools.fromGsonToBean(result, + VisitPlanListBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } + // 判断是下拉刷新还是加载更多 + if (page == 1) { + mList.clear(); + if (bean.data.list == null || bean.data.list.isEmpty()) { + // 显示空布局 + ptrLv.setEmptyView(ll_empty); + // 完成刷新 + onLoaded(); + return; + } else { + mList.addAll(bean.data.list); + } + } else { + mList.addAll(bean.data.list); + } + // 更新科普 + if (mAdapter == null) { + mAdapter = new VisitPlanAdapter(mActivity, mList); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.DatasList.clear(); + mAdapter.getPosition(); + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + // if (page > 1) { + // 是否有更多 + if (bean.data.list == null || bean.data.list.isEmpty()) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多随访计划了"); + ptrLv.setMode(Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + ptrLv.setMode(Mode.BOTH); + } + // } else if (page == 1) { + // // 得到总页码数 + // int totalPage = bean.totalPage; + // if (totalPage <= 1 || totalPage < page) { + // ptrLv.setMode(Mode.PULL_FROM_START); + // } + // } else { + // ptrLv.setMode(Mode.BOTH); + // } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + Intent intent = new Intent(mActivity, VisitDerailActivity.class); + intent.putExtra("patientDate", mList.get(position - 1).getDatetime()); + intent.putExtra("patientName", mList.get(position - 1).getPatientname()); + intent.putExtra("patientNote", mList.get(position - 1).getNote()); + intent.putExtra("patientuuid", mList.get(position - 1).getUuid()); + intent.setType("kan"); + startActivity(intent); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + + super.onActivityResult(requestCode, resultCode, data); + switch (resultCode) { + case GET_ADD_DATA_BACK: + page = 1; + getScienceList(url); + break; + default: + break; + } + } + + @Override + public void onResume() { + // TODO Auto-generated method stub + String add = SharePrefUtil.getString(mActivity, "adddate", ""); + if (add.equals("add")) { + SharePrefUtil.clear(mActivity, "adddate"); + page = 1; + getScienceList(url); + } + super.onResume(); + needreportPage("随访计划"); + } + + @Override + public boolean onItemLongClick(AdapterView arg0, View arg1, int arg2, + long arg3) { + // TODO Auto-generated method stub + // for (int i = 0; i < mAdapter.getCount(); i++) { + // View v = arg0.getChildAt(i); + // if (arg2 == i) { + // v.setBackgroundColor(Color.BLACK); + // } else { + // v.setBackgroundColor(Color.WHITE); + // } + // } + delVisit(arg2); + return true; + } + + private int DeletePosition = -1;// 删除随访的position + + public void delVisit(final int positions) { + final ECListDialog dialog = new ECListDialog(mActivity, + new String[] { getString(R.string.patient_delete, + "")}); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + DeletePosition = positions - 1; + deleteDataResult(); + dialog.dismiss(); + } + }); + dialog.setTitle("删除此随访"); + dialog.show(); + } + + public void deleteDataResult() { + + // 封装参数 + RequestParams params = new RequestParams(); + params.addBodyParameter("uuid", mList.get(DeletePosition).getUuid()); + httpHandler = HttpHelper.loadData(HttpMethod.POST, + Url.getDeleteFollowUp, params, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + BaseBean bean = GsonTools.fromGsonToBean(info.result, + BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + if (DeletePosition >= 0) { + mList.remove(DeletePosition); + mAdapter.DatasList.clear(); + mAdapter.getPosition(); + mAdapter.notifyDataSetChanged(); + if (mList.size() == 0) { + // mLoad_empty.setVisibility(View.VISIBLE); + page = 1; + getScienceList(url); + } + } + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WFSearchFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WFSearchFragment.java new file mode 100644 index 0000000..5e72e2c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WFSearchFragment.java @@ -0,0 +1,807 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.AnimationDrawable; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RadioGroup; +import android.widget.RadioGroup.OnCheckedChangeListener; +import android.widget.TextView; +import android.widget.TextView.OnEditorActionListener; + +import com.google.gson.Gson; +import com.lidroid.xutils.http.HttpHandler; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.BookDetailActivity; +import cn.shangyu.gdxzExpert.activity.SendMindActivity; +import cn.shangyu.gdxzExpert.adapter.WFArticleAdapter; +import cn.shangyu.gdxzExpert.adapter.WFArticleAdapter1; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.WFSearchListBean; +import cn.shangyu.gdxzExpert.bean.WFSearchListBean.RecordsBean; +import cn.shangyu.gdxzExpert.bean.WFYKArticleListBean; +import cn.shangyu.gdxzExpert.bean.WFYKArticleListBean.WFYKBean; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CustomClearEditText; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +/** + * + * @author zhaodewei 万方搜索 + */ + +public class WFSearchFragment extends BaseFragment implements + OnItemClickListener, OnClickListener { + private CustomClearEditText mEt_search; + private ImageView mIv_search; + // private TextView tv_empty; + private View view; + // private Activity mActivity; + private PullToRefreshListView listview; + private CustomProgressDialog pd; + private HttpHandler httpHandler; + int page = 1; + private String squery = null; + private RadioGroup mWFGroup; + // private List beanlists = new ArrayList(); + private WFArticleAdapter mWFAdapter;//医库 + private WFArticleAdapter1 mWFAdapter1;//万方 + ImageView image; + AnimationDrawable animation; + private Button mBt_send_mind; + + // All所有字段 Title标题 Author作者 Keyword关键词 + private String field = "All"; + private String searchType = "";//万方搜索类型:"","题名:","关键词:","作者:" + + // animation.start(); + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + // view = UIUtils.inflate(R.layout.fragment_wf_search); + return null; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // TODO Auto-generated method stub + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_wf_search_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_wf_search); + } + + initView(); + initListener(); + return view; + } + + private void initListener() { + mBt_send_mind.setOnClickListener(this); + mIv_search.setOnClickListener(this); + listview.setOnItemClickListener(this); + mWFGroup.setOnCheckedChangeListener(WFCheck); + mEt_search.setOnEditorActionListener(new OnEditorActionListener() { + + @Override + public boolean onEditorAction(TextView v, int actionId, + KeyEvent event) { + // TODO Auto-generated method stub + if (actionId == EditorInfo.IME_ACTION_SEARCH) { + squery = searchType+mEt_search.getText().toString().trim(); + if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + ToastUtil.showMessage("请输入搜索内容"); + return false; + } + showLoadingProgress(); + if (animation != null) { + animation.start(); + } + page = 1; + new Thread(networkTask2).start(); + } + return false; + } + }); + } + + /** + * 初始化控件 + */ + private void initView() { + + listview = (PullToRefreshListView) view.findViewById(R.id.lv_wfbook); + listview.setOnRefreshListener(new OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + new Thread(networkTask2).start(); + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page += 1; + new Thread(networkTask2).start(); + } + }); + ; + mEt_search = (CustomClearEditText) view + .findViewById(R.id.et_wfbook_expert); + mIv_search = (ImageView) view.findViewById(R.id.iv_wfbook_search); + // tv_empty = (TextView) view.findViewById(R.id.tv_empty); + mWFGroup = (RadioGroup) view + .findViewById(R.id.main_radiogroup_wflibrary); + // tv_empty.setText("暂无数据"); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view + .findViewById(R.id.ll_load_progress); + image = (ImageView) view.findViewById(R.id.iv_loading_mess); + tv_load_fail = (TextView) view.findViewById(R.id.tv_load_fail); + mBt_send_mind = (Button) view.findViewById(R.id.bt_send_mind); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + // squery = "cql.anywhere all "; + animation = (AnimationDrawable) image.getBackground(); + listview.setMode(Mode.DISABLED); + // getYKBookList(); + // new Thread(networkTask2).start(); + } + + // public void getBookList() { + // if (StringUtil.isEmpty(getQuery())) { + // ToastUtil.showMessage("请输入搜索内容"); + // return; + // } + // RequestParams params = new RequestParams(); + // params.addBodyParameter("query", getQuery()); + // params.addBodyParameter("token", Constant.WFToken); + // params.addBodyParameter("startIndex", page + ""); + // params.addBodyParameter("pageSize", 10 + ""); + // httpHandler = HttpHelper.loadData(HttpMethod.POST, SearchUrl, params, + // new RequestCallBack() { + // + // @Override + // public void onSuccess(ResponseInfo info) { + // LogUtil.d("getScienceList().onSuccess info.result = " + // + info.result); + // + // processData(info.result); + // } + // + // @Override + // public void onFailure(HttpException arg0, String arg1) { + // LogUtil.i("getScienceList().onFailure = " + arg1); + // // onLoaded(); + // if (page > 1) { + // page -= 10; + // } + // // 显示网络错误布局 + // // listview.setEmptyView(tv_load_fail); + // ToastUtil.showToast("请求失败,请重试"); + // } + // }); + // } + /** + * 解析并处理数据 + * 医库接口 + * @param result + */ + private List beanlists = new ArrayList();//医库 + private void processData(String result) { + Log.i("TAG","医库搜索结果 = "+result); + WFYKArticleListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, WFYKArticleListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("万方医学维护中"); + } + if (page == 1 && !bean.status) { + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + // ToastUtil.showMessage(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + // 数据为空 + + if (bean == null || bean.data == null + || bean.data.results.size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.data.results); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.data == null + || bean.data.results.size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + beanlists.addAll(bean.data.results); + + } + // 更新科普 + if (mWFAdapter == null) { + mWFAdapter = new WFArticleAdapter(mActivity, beanlists, ""); + listview.getRefreshableView().setAdapter(mWFAdapter); + } else { + mWFAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = (bean.data.total / 10) + 1; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + listview.setMode(Mode.PULL_FROM_START); + + } else { + listview.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return null; + } + + /** + * 万方接口 + * */ + private List beanlists1 = new ArrayList<>();//万方 + private void processData1(String str) { + // TODO Auto-generated method stub + Log.i("TAG","万方搜索结果 = "+str); + WFSearchListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(str, WFSearchListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + ToastUtil.showMessage("万方医学维护中"); + } + if (page == 1 && bean.getTotal()==0) { + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + // ToastUtil.showMessage(bean.message); + return; + } + // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists1.clear(); + // 数据为空 + if (bean == null || bean.getRecords() == null + || bean.getRecords().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂时没有数据"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + ll_empty.setVisibility(View.GONE); + beanlists1.addAll(bean.getRecords()); + } + } else { + // 加载更多下一页时候e + if (bean == null || bean.getRecords() == null + || bean.getRecords().size() == 0) { + onLoaded(); + ToastUtil.showMessage("没有更多数据了"); + return; + } + beanlists1.addAll(bean.getRecords()); + + } + + // 时间从大到小排序 +// Collections.sort(beanlists1); + + // 更新科普 + if (mWFAdapter1 == null) { + mWFAdapter1 = new WFArticleAdapter1(mActivity, beanlists1);//mWFAdapter = new WFArticleAdapter(mActivity, beanlists, "") + listview.getRefreshableView().setAdapter(mWFAdapter1); + } else { + mWFAdapter1.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = (bean.getTotal() / 10) + 1; + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + listview.setMode(Mode.PULL_FROM_START); + } else { + listview.setMode(Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + listview.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + if (animation.isRunning()) { + animation.stop(); + } + + listview.onRefreshComplete(); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int p = 0; + if (listview.getRefreshableView().getHeaderViewsCount() > 0) { + p = position - listview.getRefreshableView().getHeaderViewsCount(); + } +// WFYKBean list = beanlists.get(p);//医库 +// String libraryUuid = list.getId(); + + RecordsBean recordsBean = beanlists1.get(p);//万方 + + String libraryUuid = recordsBean.getArticleID(); + Intent intent = new Intent(mActivity, BookDetailActivity.class); + intent.putExtra("title", "杂志详情"); + intent.putExtra("articleId", libraryUuid); + if(!StringUtil.isEmpty(recordsBean.getSource())) + { + if(recordsBean.getSource().startsWith("中华")) + { + if(recordsBean.getSource().contains("中华肝脏外科手术学电子杂志")||recordsBean.getSource().contains("中华护理杂志") + ||recordsBean.getSource().contains("中华腔镜外科杂志")) + { + intent.putExtra("isneeddown", true); + } + else + { + intent.putExtra("isneeddown", false); + } + + } + else if(recordsBean.getSource().equals("药物不良反应杂志")) + { + intent.putExtra("isneeddown", false); + } + else + { + intent.putExtra("isneeddown", true); + } +// switch (recordsBean.getSource()) +// { +// case "中华医学杂志": +// case "中华儿科杂志": +// case "中华外科杂志": +// case "中华内科杂志": +// case "中华结核和呼吸杂志": +// case "中华肿瘤杂志": +// case "中华肝脏病杂志": +// case "中华普通外科杂志": +// case "中华消化杂志": +// case "中华传染病杂志": +// case "中华消化外科杂志": +// case "中华消化内镜杂志": +// case "中华临床感染病杂志": +// case "中华肾脏病杂志": +// case "中华胃肠外科杂志": +// case "中华炎性肠病杂志": +// case "中华实用儿科临床杂志": +// case "中华内分泌代谢杂志": +// case "中华胰腺病杂志": +// case "药物反应不良杂志": +// case "中华肝胆外科杂志": +// case "中华流行病学杂志": +// case "中华检验医学杂志": +// intent.putExtra("isneeddown", false); +// break; +// default: +// intent.putExtra("isneeddown", true); +// break; +// +// } + } + else + { + intent.putExtra("isneeddown", true); + } + + startActivity(intent); + } + + // public String getQuery() { + // String query = null; + // if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + // + // return null; + // } + // + // query = squery + "\"" + mEt_search.getText().toString().trim() + "\"" + // + " and DBID=WF_QK" + " and Date within \"" + initTime(-8) + // + " " + initTime(8) + "\" sortby date"; + // return query; + // + // } + + Calendar dateAndTime; + + public String initTime(int addyear) { + if (dateAndTime == null) { + dateAndTime = Calendar.getInstance(Locale.CHINA); + } + dateAndTime.add(Calendar.YEAR, addyear); + int year = dateAndTime.get(Calendar.YEAR); + int month = dateAndTime.get(Calendar.MONTH); + int day = dateAndTime.get(Calendar.DAY_OF_MONTH); + // DecimalFormat decimalFormat = new DecimalFormat("00"); + // String m = decimalFormat.format(month + 1); + // String d = decimalFormat.format(day); + // String returnTime = year + "-" + (month + 1) + "-" + day; + String returnTime = year + ""; + return returnTime; + + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + if (httpHandler != null) { + httpHandler.cancel();// 取消网络请求 + } + } + + OnCheckedChangeListener WFCheck = new OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + if (checkedId == R.id.tab_rbn_all) { + // 全部 + beanlists1.clear(); + mWFAdapter1 = null; + field = "All"; + searchType = ""; + // squery = "cql.anywhere all "; + squery = searchType+mEt_search.getText().toString().trim(); + if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + return; + } + showLoadingProgress(); + if (animation != null) { + animation.start(); + } + page = 1; + new Thread(networkTask2).start(); + } else if (checkedId == R.id.tab_rbn_title) { + // 标题 + beanlists1.clear(); + mWFAdapter1 = null; + // squery = "Title = "; + field = "Title"; + searchType = "题名:"; +// squery = mEt_search.getText().toString();//医库检索 + squery =searchType +mEt_search.getText().toString().trim();//万方检索 + if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + return; + } + showLoadingProgress(); + if (animation != null) { + animation.start(); + } + page = 1; + new Thread(networkTask2).start(); + } else if (checkedId == R.id.tab_rbn_keyword) { + // 关键字 + beanlists1.clear(); + mWFAdapter1 = null; + // squery = "KeyWords = "; + field = "Keyword"; + searchType = "关键词:"; +// squery = mEt_search.getText().toString(); + squery = searchType+mEt_search.getText().toString().trim();//万方检索 + if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + return; + } + showLoadingProgress(); + if (animation != null) { + animation.start(); + } + page = 1; + new Thread(networkTask2).start(); + } else if (checkedId == R.id.tab_rbn_writer) { + // 作者 + page = 1; + beanlists1.clear(); + mWFAdapter1 = null; + // squery = "Creator = "; + field = "Author"; + searchType = "作者:"; +// squery = mEt_search.getText().toString(); + squery = searchType+mEt_search.getText().toString().trim();//万方检索 + if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + return; + } + showLoadingProgress(); + if (animation != null) { + animation.start(); + } + page = 1; + new Thread(networkTask2).start(); + } + } + }; + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // AGP 8.0+ R.id 不再是 final 常量,不能用于 switch,改用 if-else + int id = v.getId(); + if (id == R.id.iv_wfbook_search) { + // 搜索 + /** 隐藏软键盘 **/ + View view = mActivity.getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) mActivity + .getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + squery = searchType+mEt_search.getText().toString().trim(); + if (StringUtil.isEmpty(mEt_search.getText().toString().trim())) { + ToastUtil.showMessage("请输入搜索内容"); + onLoaded(); + return; + } + showLoadingProgress(); + if (animation != null) { + animation.start(); + } + page = 1; + new Thread(networkTask2).start(); + } else if (id == R.id.bt_send_mind) { + Intent intent = new Intent(mActivity, SendMindActivity.class); + startActivity(intent); + } + } + + Runnable networkTask2 = new Runnable() { + + @Override + public void run() { + // TODO + + getTooken1(); + + } + }; + + /** + * 万方 + * */ + public void getTooken1() { + /* + * 参数封装 + */ + String decode = null; + try { + decode = URLEncoder.encode(squery, "utf-8"); + } catch (UnsupportedEncodingException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + String urlStringUtil = Url.WFSearch+"?query="+decode+"&type="+Constant.WFtype+"&token="+Constant.WFToken+"&StartIndex="+page+"&Sort=Date%20desc"; + Log.i("TAG", "万方搜索接口 = "+urlStringUtil); + try { + URL url = new URL(urlStringUtil); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setDoOutput(true); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = 102; + message.obj = new String(result); + handler.sendMessage(message); + }else { + Message message = new Message(); + message.what = 105; + handler.sendMessage(message); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showMessage("请求失败,请稍后重试"); + } + + } + /** + * 医库 + * */ + public void getTooken() { + /* + * 参数封装 + */ + Map param1 = new HashMap(); + param1.put("logic", "AND"); + param1.put("field", field); + param1.put("query", squery); + List> aa = new ArrayList>(); + aa.add((HashMap) param1); + Map param = new HashMap(); + param.put("source", "WF"); + param.put("database", "WF_QK"); + param.put("searchType", "Advanced"); + param.put("condition", aa); + param.put("page", page); + param.put("size", "10"); + param.put("startYear", initTime(-9)); + param.put("endYear", initTime(9)); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + data = params.getBytes(encoding); + URL url = new URL(Url.YKSearch); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setRequestProperty("token", Constant.YKToken); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type", + "application/x-javascript; charset=" + encoding); + conn.setRequestProperty("Content-Length", + String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String( + StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = 101; + message.obj = new String(result); + handler.sendMessage(message); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + + public Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + switch (msg.what) { + case 101: + try { + String str = (String) msg.obj; + JSONObject objs = new JSONObject(str); + // String message = objs.getString("message"); + // String data = objs.getString("data"); + processData(str); + } catch (JSONException e) { + e.printStackTrace(); + closeProgressDialog(); + + } + break; + + case 102: + String str = (String) msg.obj; + processData1(str); + + break; + case 105: + ToastUtil.showMessage("请求失败,请稍后重试"); + onLoaded(); + break; + } + + } + + }; +} + + + + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfAreFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfAreFragment.java new file mode 100644 index 0000000..3e3fa1e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfAreFragment.java @@ -0,0 +1,367 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.content.Intent; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.lidroid.xutils.util.LogUtils; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.UpanExchangeActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.GetWelfarePageBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/17. + */ + +public class WelfAreFragment extends BaseFragment implements OnCallBackFromNet,View.OnClickListener{ + private View view; + private TextView tv_newpatient_num,tv_newpatient_num1,tv_shipin_newpatient_num,tv_kejian_newpatient_num,tv_kecheng_newpatient_num; + private TextView tv_num,tv_wfnum,tv_spnum,tv_kjnum,tv_kcnum,tv_unum,tv_upnum; + private RelativeLayout rl_jifen,rl_wanfang,rl_shipin,rl_kejian,rl_kecheng,rl_upan,rl_upan_null,rl_wenxian; + private TextView tv_lijilingqu,tv_wflijilingqu,tv_splijilingqu,tv_kjlijilingqu,tv_kclijilingqu,tv_ulijilingqu,tv_uplijilingqu,wen,xinzeng7,tv_wnum,tv_duihuan; + private TextView tv_num1,tv_wfnum1,tv_spnum1,tv_kjnum1,tv_kcnum1,tv_unum1,tv_wdanwei; + private LinearLayout ll_jifen,ll_wanfang,ll_shipin,ll_kejian,ll_kecheng,ll_upan,ll_upannull; + public static final int GETWELFAREPAGE = 201; + public static final int RECEIVEWELFARE = 202; + + private TextView xinzeng,xinzeng1,xinzeng2,xinzeng3,xinzeng4,xinzeng5,xinzeng6; + private TextView jifen,wanfang,shipin,kejian,kecheng,upan,upan_null; + private TextView zengsongjifen,zengsxiazai,zengsxiazai1,zengsxiazai2,zengsxiazai3,zengsxiazai4; + private CustomProgressDialog pd; + private TextView tv_danwei,tv_danwei1; + private TextView tv_wfdanwei; + private Boolean isClickGetUP=false; + + @Override + public View onCreateSuccessedView() { + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.fragment_welfare_big); + } + else + { + view = UIUtils.inflate(R.layout.fragment_welfare); + } + initView(); + initData(); + initOnClick(); + return view; + } + + private void initOnClick() { + tv_lijilingqu.setOnClickListener(this); + tv_splijilingqu.setOnClickListener(this); + tv_wflijilingqu.setOnClickListener(this); + tv_kjlijilingqu.setOnClickListener(this); + tv_kclijilingqu.setOnClickListener(this); + tv_ulijilingqu.setOnClickListener(this); + } + + private void initView() { + tv_newpatient_num = view.findViewById(R.id.tv_newpatient_num);//积分新随访 + tv_newpatient_num1 = view.findViewById(R.id.tv_newpatient_num1);//万方新随访 + tv_shipin_newpatient_num = view.findViewById(R.id.tv_shipin_newpatient_num);//视频新随访 + tv_kejian_newpatient_num = view.findViewById(R.id.tv_kejian_newpatient_num);//课件新随访 + tv_kecheng_newpatient_num = view.findViewById(R.id.tv_kecheng_newpatient_num);//课程新随访 + rl_jifen = view.findViewById(R.id.rl_jifen);//积分 + rl_wanfang = view.findViewById(R.id.rl_wanfang);//万方 + rl_shipin = view.findViewById(R.id.rl_shipin);//视频 + rl_kejian = view.findViewById(R.id.rl_kejian);//课件 + rl_kecheng = view.findViewById(R.id.rl_kecheng);//课程 + rl_upan = view.findViewById(R.id.rl_upan);//U盘 + rl_upan_null = view.findViewById(R.id.rl_upan_null);//U盘null + tv_wdanwei=view.findViewById(R.id.tv_wdanwei); + tv_duihuan=view.findViewById(R.id.tv_duihuan); + wen=view.findViewById(R.id.wen); + rl_wenxian=view.findViewById(R.id.rl_wenxian); + tv_num = view.findViewById(R.id.tv_num);//积分个数 + tv_wfnum = view.findViewById(R.id.tv_wfnum);//万方个数 + tv_spnum = view.findViewById(R.id.tv_spnum);//视频个数 + tv_kjnum = view.findViewById(R.id.tv_kjnum);//课件个数 + tv_kcnum = view.findViewById(R.id.tv_kcnum);//课程个数 + tv_unum = view.findViewById(R.id.tv_unum);//U盘个数 + tv_upnum = view.findViewById(R.id.tv_upnum);//U盘个数 + tv_danwei = view.findViewById(R.id.tv_danwei);//U盘个数 + xinzeng7=view.findViewById(R.id.xinzeng7); + tv_wnum=view.findViewById(R.id.tv_wnum); + + tv_lijilingqu = view.findViewById(R.id.tv_lijilingqu);//积分立即领取 + tv_wflijilingqu = view.findViewById(R.id.tv_wflijilingqu);//万方立即领取 + tv_splijilingqu = view.findViewById(R.id.tv_splijilingqu);//视频立即领取 + tv_kjlijilingqu = view.findViewById(R.id.tv_kjlijilingqu);//课件立即领取 + tv_kclijilingqu = view.findViewById(R.id.tv_kclijilingqu);//课程立即领取 + tv_ulijilingqu = view.findViewById(R.id.tv_ulijilingqu);//U盘立即领取 + tv_uplijilingqu = view.findViewById(R.id.tv_uplijilingqu);//U盘立即领取 + + + tv_num1 = view.findViewById(R.id.tv_num1);//赠送积分 + tv_wfnum1 = view.findViewById(R.id.tv_wfnum1);//赠送万方 + tv_spnum1 = view.findViewById(R.id.tv_spnum1);//赠送视频 + tv_kjnum1 = view.findViewById(R.id.tv_kjnum1);//赠送课件 + tv_kcnum1 = view.findViewById(R.id.tv_kcnum1);//赠送课程 + tv_unum1 = view.findViewById(R.id.tv_unum1);//赠送课程 + + ll_jifen = view.findViewById(R.id.ll_jifen);//积分赠送 + ll_wanfang = view.findViewById(R.id.ll_wanfang);//万方赠送 + ll_shipin = view.findViewById(R.id.ll_shipin);//视频赠送 + ll_kejian = view.findViewById(R.id.ll_kejian);//课件赠送 + ll_kecheng = view.findViewById(R.id.ll_kecheng);//课程赠送 + ll_upan = view.findViewById(R.id.ll_upan);//U赠送 + ll_upannull = view.findViewById(R.id.ll_upannull);//U赠送null + + + xinzeng = view.findViewById(R.id.xinzeng);//积分新增 + xinzeng1 = view.findViewById(R.id.xinzeng1);//万方新增 + xinzeng2 = view.findViewById(R.id.xinzeng2);//视频新增 + xinzeng3 = view.findViewById(R.id.xinzeng3);//课件新增 + xinzeng4 = view.findViewById(R.id.xinzeng4);//精品新增 + xinzeng5 = view.findViewById(R.id.xinzeng5);//U盘新增 + xinzeng6 = view.findViewById(R.id.xinzeng6);//U盘新增 + + + jifen = view.findViewById(R.id.jifen); + wanfang = view.findViewById(R.id.wanfang); + shipin = view.findViewById(R.id.shipin); + kejian = view.findViewById(R.id.kejian); + kecheng = view.findViewById(R.id.kecheng); + upan = view.findViewById(R.id.upan); + upan_null = view.findViewById(R.id.upan_null); + + zengsongjifen = view.findViewById(R.id.zengsongjifen); + zengsxiazai = view.findViewById(R.id.zengsxiazai); + zengsxiazai1 = view.findViewById(R.id.zengsxiazai1); + zengsxiazai2 = view.findViewById(R.id.zengsxiazai2); + zengsxiazai3 = view.findViewById(R.id.zengsxiazai3); + zengsxiazai4 = view.findViewById(R.id.zengsxiazai4); + + tv_newpatient_num.setVisibility(View.GONE); + tv_newpatient_num1.setVisibility(View.GONE); + tv_shipin_newpatient_num.setVisibility(View.GONE); + tv_kejian_newpatient_num.setVisibility(View.GONE); + tv_kecheng_newpatient_num.setVisibility(View.GONE); + + + tv_wfdanwei = view.findViewById(R.id.tv_wfdanwei); + + + } + + private void initData() { + if (pd==null){ + pd = new CustomProgressDialog(getActivity(), "请稍候"); + } + pd.show(); + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getWelfarePage,map,GETWELFAREPAGE,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case GETWELFAREPAGE: + LogUtils.i("GETWELFAREPAGE = "+resultJson); + GetWelfarePageBean getWelfarePageBean = GsonTools.fromGsonToBean(resultJson, GetWelfarePageBean.class); + if (getWelfarePageBean!=null&&"200".equals(getWelfarePageBean.getCode())){ + for (int i = 0;i map = new HashMap<>(); + map.put("type",type); + sendJsonPostParamtoNetSignMD5(Url.receiveWelfare,map,RECEIVEWELFARE,this); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfareDetailFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfareDetailFragment.java new file mode 100644 index 0000000..334bcb6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/WelfareDetailFragment.java @@ -0,0 +1,236 @@ +package cn.shangyu.gdxzExpert.fragment; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.bean.WelfareListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2020/3/18. + */ + +public class WelfareDetailFragment extends BaseFragment implements OnCallBackFromNet { + private View view; + private PullToRefreshListView ptrLv; + private int page = 1; + private List beanlists = new ArrayList<>(); + private WelfareListAdapter mAdapter; + private String type; + public static final int WELFARELIST = 101; + + @Override + public View onCreateSuccessedView() { + view = UIUtils.inflate(R.layout.fragment_welfaredetail); + ptrLv = view.findViewById(R.id.lv_my_mind); + ll_loading = (FrameLayout) view.findViewById(R.id.ll_loading); + ll_load_progress = (LinearLayout) view.findViewById(R.id.ll_load_progress); + // 空布局,处理 + ll_empty = (LinearLayout) view.findViewById(R.id.ll_empty); + tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + // 设置空的提示信息,默认是“暂时没有数据” + tv_empty_msg.setText("暂无福利"); + // 得到实际的ListView 设置点击 + ptrLv.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh( + PullToRefreshBase refreshView) { + page = 1; + getDataResult(); + + } + + @Override + public void onPullUpToRefresh( + PullToRefreshBase refreshView) { + page = page + 1; + getDataResult(); + } + }); + + type = getArguments().getString("type"); + getDataResult(); + return view; + } + + private void getDataResult() { + Map param = new HashMap<>(); + param.put("type", type); + param.put("page", page + ""); + sendJsonPostParamtoNetSignMD5(Url.welfareList, param, WELFARELIST, this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + LogUtil.i("TYPE = "+type); + LogUtil.i("WELFARELIST = "+resultJson); + processData(resultJson); + } + /** + * 解析并处理数据 + * + * @param result + */ + private void processData(String result) { + + WelfareListBean bean = null; + try { + bean = GsonTools.fromGsonToBean(result, WelfareListBean.class); + } catch (Exception e) { + // TODO Auto-generated catch block + + } + // // 判断是下拉刷新还是加载更多,true表示是下拉刷新 + if (page == 1) { + // 初始化消息列表的数据 + beanlists.clear(); + if (bean != null) { + + } + // 数据为空 + if (bean == null || bean.getData() == null + || bean.getData().getList() == null + || bean.getData().getList().size() == 0) { + + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无福利"); + + onLoaded(); + setLastUpdateTime(); + return; + + } else { + + ll_empty.setVisibility(View.GONE); + beanlists.addAll(bean.getData().getList()); + } + } else { + // 加载更多下一页时候e + beanlists.addAll(bean.getData().getList()); + + } + // // 更新数据 + if (mAdapter == null) { + mAdapter = new WelfareListAdapter(beanlists); + ptrLv.getRefreshableView().setAdapter(mAdapter); + } else { + mAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + // 得到总页码数 + long totalPage = bean.getData().getTotal(); + if (totalPage <= 1 || totalPage < page) { + if (page != 1) { + ToastUtil.showMessage("没有更多数据了"); + } + ptrLv.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + + } else { + ptrLv.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + /** + * 数据加载完成时,取消加载动画 + */ + private void onLoaded() { + dismissLoadingProgress(); + ptrLv.onRefreshComplete(); + } + /** + * 设置刷新时间 + */ + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + + + class WelfareListAdapter extends BaseAdapter{ + + private List beanlists; + + public WelfareListAdapter(List beanlists) { + this.beanlists = beanlists; + } + + @Override + public int getCount() { + return beanlists.size(); + } + + @Override + public Object getItem(int position) { + return beanlists.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder vh = null; + if (convertView == null) { + convertView = UIUtils.inflate(R.layout.item_my_mind); + vh = new ViewHolder(); + vh.mTv_jine = (TextView) convertView + .findViewById(R.id.tv_my_mind_jine); + vh.mTv_time = (TextView) convertView + .findViewById(R.id.tv_my_mind_time); + vh.mTv_type = (TextView) convertView + .findViewById(R.id.tv_my_mind_type); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + vh.mTv_time.setText(beanlists.get(position).getName()); + vh.mTv_jine.setText(beanlists.get(position).getCreate_date().split(" ")[0]); + vh.mTv_type.setText(beanlists.get(position).getCount_num()+""); + return convertView; + } + + class ViewHolder { + TextView mTv_time, mTv_jine, mTv_type; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/fragment/YiganFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/YiganFragment.java new file mode 100644 index 0000000..3d38109 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/fragment/YiganFragment.java @@ -0,0 +1,2207 @@ +package cn.shangyu.gdxzExpert.fragment; + +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.hasrealtoken; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamTokenMD5; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.provider.MediaStore; +import android.text.Editable; +import android.text.InputType; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.InputMethodManager; +import android.webkit.WebSettings; +import android.widget.AdapterView; +import android.widget.CompoundButton; +import android.widget.EditText; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.PopupWindow; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PhotoAlbumActivity; +import cn.shangyu.gdxzExpert.activity.ResearchActivity; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.base.yongyaoTotalBean; +import cn.shangyu.gdxzExpert.bean.AddBitmaps; +import cn.shangyu.gdxzExpert.bean.AddCaseNewRecordAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBeanNew; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.ShowBean; +import cn.shangyu.gdxzExpert.bean.SimpleBean; +import cn.shangyu.gdxzExpert.bean.YearsBean; +import cn.shangyu.gdxzExpert.bean.imBean; +import cn.shangyu.gdxzExpert.bean.yongyaoBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.PhotoView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import cn.shangyu.gdxzExpert.widget.SimpleTextWatcher; +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link YiganFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class YiganFragment extends BaseFragment implements AdapterView.OnItemClickListener { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + private static final String ARG_PARAM3 = "param3"; + // TODO: Rename and change types of parameters + private String mParam1=""; + private String mParam2=""; + private String mParam3=""; + private String baseinfoDataStatus; + + public YiganFragment() { + + } + + + public static YiganFragment newInstance(String param1, String param2,String param3) { + YiganFragment fragment = new YiganFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + args.putString(ARG_PARAM3, param3); + fragment.setArguments(args); + return fragment; + } + + private GridView mGv_photos; + private Bitmap mAddBitmap; + private ArrayList mBitmaps; + private AddBitmaps mAddBitmaps; + private AddCaseNewRecordAdapter gv_adapter; + private RelativeLayout rl_addcase_bigphoto; + private ViewPager mPager; + private View selectedPhotoView; + private TextView ll_selected_carmera;// 从照相机 + private TextView ll_selected_photo;// 从相册 + private PopupWindow mPopupWindowDialog; + private TextView tv_cancel;// 取消 + private Uri photoUri;// 图片路径 + public static final int SELECT_PIC_BY_TACK_PHOTO = 101; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 102; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 103;// 照相 + private File temp; + + + View view; + RadioGroup grop; + + List yearsBeanList=new ArrayList<>(); + List showBean=new ArrayList<>(); + List ids=new ArrayList<>(); + yongyaoBean yongyaoBean; + TextView new_suifang; + @Override + public View onCreateSuccessedView() { + view= UIUtils.inflate(R.layout.fragment_yigan); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + mParam3 = getArguments().getString(ARG_PARAM3); + } + ((TextView)view.findViewById(R.id.sename)).setText(mParam1); + new_suifang=view.findViewById(R.id.new_suifang); + view.findViewById(R.id.change_data).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + hideSoftKeyboard(); + view.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认本数据项已全部完成?"); + } + },300); + } + }); + new_suifang.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + hideSoftKeyboard(); + view.postDelayed(new Runnable() { + @Override + public void run() { + popwindow("确认保存新的信息?"); + } + },300); + } + }); + initv(); + initView(); + initb(); + gettokens(Url.yongyaogetDetail); + return view; + } + private ECAlertDialog buildAlert; + public void popwindow(String content) { + buildAlert = ECAlertDialog.buildAlert(getActivity(), content, "取消", + "确认", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if(content.contains("保存")) + { + sendpre(); + hideSoftKeyboard(); + } + else{ + baseinfoDataStatus="2"; + sendpre(); + hideSoftKeyboard(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + } + public void initb() + { + if("入组后是否进行抗病毒治疗".equals(mParam1)) + { + Drawable drawable= getResources().getDrawable(R.drawable.yiwen); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + ids.clear(); + ids.add(R.id.liao1); + ids.add(R.id.liao2); + ids.add(R.id.liao3); + ids.add(R.id.liao4); + ids.add(R.id.liao5); + ids.add(R.id.liao6); + ids.add(R.id.liao7); + ids.add(R.id.liao8); + ids.add(R.id.liao9); + ids.add(R.id.liao10); + ids.add(R.id.liao11); + for (Integer i:ids) + { + if(i==R.id.liao8||i==R.id.liao9||i==R.id.liao10||i==R.id.liao11) + { + ((TextView)view.findViewById(i)).setText("使用疗程"); + } + if("2".equals(mParam3)) + { + ((TextView)view.findViewById(i)).setCompoundDrawablePadding(5); + ((TextView)view.findViewById(i)).setCompoundDrawablesWithIntrinsicBounds(null,null,drawable,null); + + view.findViewById(i).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + showyiwen("使用疗程",getString(R.string.liaochen)); + } + }); + } + + } + + } + } + public void showyiwen(String title,String content) + { + EasyWindow.with(getActivity()).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, title) + .setText(R.id.tv_tishi, content) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + } + }).show(); + } + private void initv() + {((EditText)view.findViewById(R.id.year28)).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)view.findViewById(R.id.year22)).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)view.findViewById(R.id.year25)).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)view.findViewById(R.id.year33)).setInputType(InputType.TYPE_CLASS_NUMBER); + grop=view.findViewById(R.id.grop); + grop.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(RadioGroup radioGroup, int i) { + if(i==R.id.tab_rbn_1) + { + view.findViewById(R.id.ll1).setVisibility(View.VISIBLE); + view.findViewById(R.id.tt1).setVisibility(View.VISIBLE); + view.findViewById(R.id.ll2).setVisibility(View.VISIBLE); + view.findViewById(R.id.tt2).setVisibility(View.VISIBLE); + } + else + { + view.findViewById(R.id.ll1).setVisibility(View.GONE); + view.findViewById(R.id.tt1).setVisibility(View.GONE); + view.findViewById(R.id.ll2).setVisibility(View.GONE); + view.findViewById(R.id.tt2).setVisibility(View.GONE); + } + + } + }); + + yearsBeanList.clear(); + yearsBeanList.add(new YearsBean(R.id.year1,R.id.month1,R.id.t1,0,0)); + yearsBeanList.add(new YearsBean(R.id.year2,R.id.month2,R.id.t2,0,0)); + yearsBeanList.add(new YearsBean(R.id.year3,R.id.month3,R.id.t3,0,0)); + yearsBeanList.add(new YearsBean(R.id.year4,R.id.month4,R.id.t4,0,0)); + yearsBeanList.add(new YearsBean(R.id.year5,R.id.month5,R.id.t5,0,0)); + yearsBeanList.add(new YearsBean(R.id.year7,R.id.month7,R.id.t7,0,0)); + yearsBeanList.add(new YearsBean(R.id.year9,R.id.month9,R.id.t9,0,0)); + yearsBeanList.add(new YearsBean(R.id.year10,R.id.month10,R.id.t10,0,0)); + yearsBeanList.add(new YearsBean(R.id.year12,R.id.month12,R.id.t12,0,0)); + yearsBeanList.add(new YearsBean(R.id.year11,R.id.month11,R.id.t11,0,0)); + yearsBeanList.add(new YearsBean(R.id.year14,R.id.month14,R.id.t14,0,0)); + yearsBeanList.add(new YearsBean(R.id.year17,R.id.month17,R.id.t17,0,0)); + yearsBeanList.add(new YearsBean(R.id.year19,R.id.month19,R.id.t19,0,0)); + yearsBeanList.add(new YearsBean(R.id.year20,R.id.month20,R.id.t20,0,0)); + + yearsBeanList.add(new YearsBean(R.id.year24,R.id.month24,R.id.t24,0,0)); + yearsBeanList.add(new YearsBean(R.id.year21,R.id.month21,R.id.t21,0,0)); + yearsBeanList.add(new YearsBean(R.id.year27,R.id.month27,R.id.t27,0,0)); + yearsBeanList.add(new YearsBean(R.id.year30,R.id.month30,R.id.t30,0,0)); + for (YearsBean bean:yearsBeanList) + { + ((EditText)view.findViewById(bean.getEditText())).setHint("输入年"); + ((EditText)view.findViewById(bean.getEditText())).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)view.findViewById(bean.getEditText())).addTextChangedListener(new SimpleTextWatcher() + { + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + bean.setYs1(Integer.valueOf(editable.toString())) ; + } + else + { + bean.setYs1(0); + } + setyear(bean.getT1(),bean.getYs1(),bean.getMs1()); + } + }); + ((EditText)view.findViewById(bean.getEditText2())).setHint("输入月"); + ((EditText)view.findViewById(bean.getEditText2())).setInputType(InputType.TYPE_CLASS_NUMBER); + ((EditText)view.findViewById(bean.getEditText2())).addTextChangedListener(new SimpleTextWatcher() + { + @Override + public void afterTextChanged(Editable editable) { + if(editable!=null&&!StringUtil.isEmpty(editable.toString())) + { + bean.setMs1(Integer.valueOf(editable.toString())); ; + } + else + { + bean.setMs1(0); + } + setyear(bean.getT1(),bean.getYs1(),bean.getMs1()); + } + }); + } + showBean.clear(); + if("1".equals(mParam3)) + { + + } + else + { + showBean.add(new ShowBean(R.id.tab_rbn_31,R.id.l1)); + showBean.add(new ShowBean(R.id.tab_rbn_41,R.id.kang1)); + showBean.add(new ShowBean(R.id.tab_rbn_61,R.id.l2)); + showBean.add(new ShowBean(R.id.tab_rbn_51,R.id.kang2)); + showBean.add(new ShowBean(R.id.tab_rbn_91,R.id.l3)); + showBean.add(new ShowBean(R.id.tab_rbn_101,R.id.kang3)); + showBean.add(new ShowBean(R.id.tab_rbn_131,R.id.l4)); + showBean.add(new ShowBean(R.id.tab_rbn_141,R.id.kang4)); + showBean.add(new ShowBean(R.id.tab_rbn_151,R.id.l5)); + showBean.add(new ShowBean(R.id.tab_rbn_161,R.id.kang5)); + showBean.add(new ShowBean(R.id.tab_rbn_171,R.id.l6)); + showBean.add(new ShowBean(R.id.tab_rbn_181,R.id.kang6)); + showBean.add(new ShowBean(R.id.tab_rbn_191,R.id.l7)); + showBean.add(new ShowBean(R.id.tab_rbn_201,R.id.kang7)); + + showBean.add(new ShowBean(R.id.tab_rbn_241,R.id.l24)); + showBean.add(new ShowBean(R.id.tab_rbn_211,R.id.l21)); + showBean.add(new ShowBean(R.id.tab_rbn_271,R.id.l27)); + showBean.add(new ShowBean(R.id.tab_rbn_301,R.id.l30)); + + for(ShowBean bean:showBean) + { + ((RadioButton)view.findViewById(bean.getRadio())).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean b) { + if(b) + { + view.findViewById(bean.getLiner()).setVisibility(View.VISIBLE); + } + else + { + view.findViewById(bean.getLiner()).setVisibility(View.GONE); + } + } + }); + } + } + + + + } + private void setyear(int id,int y1,int mon1) + { + ((TextView)view.findViewById(id)).setText("("+String.format("%.2f", y1+mon1/12.00)+"年"+")"); + } + private void initView() { + + mGv_photos = (GridView) view.findViewById(R.id.gv_case_photos); + + rl_addcase_bigphoto = view.findViewById(R.id.rl_addcase_bigphoto); + mPager = (ViewPager) view.findViewById(R.id.pager); + + mAddBitmap = BitmapFactory.decodeResource(getResources(), + R.drawable.new_selected); + mBitmaps = new ArrayList(); + mAddBitmaps = new AddBitmaps(true, mAddBitmap, null); +// mBitmaps.add(mAddBitmaps); + gv_adapter = new AddCaseNewRecordAdapter(mActivity, mBitmaps, mAddBitmaps); + mGv_photos.setOnItemClickListener(this); + mGv_photos.setAdapter(gv_adapter); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + hideSoftKeyboard(); + if (mBitmaps.get(position).isAdd()) { + selectedPhotoView = UIUtils.inflate(R.layout.activity_selected_photo2); + ll_selected_carmera = (TextView) selectedPhotoView + .findViewById(R.id.btn_camera); + ll_selected_photo = (TextView) selectedPhotoView + .findViewById(R.id.btn_img); + tv_cancel = (TextView) selectedPhotoView + .findViewById(R.id.btn_cancle); + ImageView imageView = (ImageView) selectedPhotoView + .findViewById(R.id.imageView); + imageView.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + initSelectedHeadPopupwindow(); + if (mPopupWindowDialog != null) { + mPopupWindowDialog.showAtLocation(this.view, Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, ImmersionBar.getNavigationBarHeight(this)); + } + selectedPhoto(); + } else { + rl_addcase_bigphoto.setVisibility(View.VISIBLE); + PagerSetAdapter(position); + } + } + + /** + * 初始化头像选择pop + */ + private void initSelectedHeadPopupwindow() { + // TODO Auto-generated method stub + mPopupWindowDialog = new PopupWindow(selectedPhotoView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + mPopupWindowDialog.setFocusable(true); + mPopupWindowDialog.update(); + mPopupWindowDialog.setBackgroundDrawable(new BitmapDrawable( + getResources(), (Bitmap) null)); + mPopupWindowDialog.setOutsideTouchable(true); + } + /** + * 选择图片 + */ + private void selectedPhoto() { + // TODO Auto-generated method stub + + ll_selected_carmera.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + takePhoto11();// 拍照获取 + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + takePhoto11();// 拍照获取 + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + takePhoto();// 拍照获取 + } + + + + } + }); + + ll_selected_photo.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限,读写内存,网络定位,打电话,读取短信,录音,通讯录 + Intent intent = new Intent(mActivity, PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent, + SELECT_PIC_BY_PICK_PHOTO); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent = new Intent(getActivity(), PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 + + + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + Intent intent = new Intent(getActivity(), PhotoAlbumActivity.class); + intent.putExtra("photonum", "" + (mBitmaps.size() - 1)); + intent.putExtra("maxphotonum",9); + startActivityForResult(intent,SELECT_PIC_BY_PICK_PHOTO); + } + + } + + + }); + tv_cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (mPopupWindowDialog != null + && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + } + }); + + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + photoUri = FileProvider.getUriForFile(getActivity(),getActivity().getPackageName() + ".fileprovider", + photoFile); + SharePrefUtil.saveString(getActivity(), "photoUri", + photoUri + ""); + + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(getActivity(), getActivity().getApplicationContext().getPackageName() + ".fileprovider", photoFile)); + + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } + } + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName = null; + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = getUriForFile(getActivity(),new File(Environment.getExternalStorageDirectory(), fileName)); +// photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), fileName)); + // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + SharePrefUtil.saveString(getActivity(), + "photoUri", photoUri + ""); + startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(getActivity(), "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + public static Uri getUriForFile(Context context, File file) { + if (context == null || file == null) { + throw new NullPointerException(); + } + Uri uri; + if (Build.VERSION.SDK_INT >= 24) { + uri = FileProvider.getUriForFile(context.getApplicationContext(), "cn.shangyu.gdxzExpert.fileprovider", file); + } else { + uri = Uri.fromFile(file); + } + return uri; + } + public void PagerSetAdapter(int p) { + ((BaseActivity)getActivity()).layout_top.setVisibility(View.GONE); + mPager.setPageMargin((int) (getResources().getDisplayMetrics().density * 15)); + mPager.setAdapter(new PagerAdapter() { + @Override + public int getCount() { + for (int i = 0; i < mBitmaps.size(); i++) { + if (mBitmaps.get(i).isAdd()) { + return mBitmaps.size() - 1; + } + } + return mBitmaps.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + PhotoView view = new PhotoView(getActivity()); + view.enable(); + view.setScaleType(ImageView.ScaleType.FIT_CENTER); + if (!mBitmaps.get(position).isAdd()) { + view.setImageBitmap(mBitmaps.get(position).getBitmap()); + } + view.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + rl_addcase_bigphoto.setVisibility(View.GONE); + ((BaseActivity)getActivity()).layout_top.setVisibility(View.VISIBLE); + } + }); + container.addView(view); + return view; + } + + @Override + public void destroyItem(ViewGroup container, int position, + Object object) { + container.removeView((View) object); + } + }); + mPager.setCurrentItem(p); + } + private ArrayList paths; + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (mPopupWindowDialog != null && mPopupWindowDialog.isShowing()) { + mPopupWindowDialog.dismiss(); + } + LogUtil.i("requestCode = "+requestCode); + switch (requestCode) { + case SELECT_PIC_BY_PICK_PHOTO: + if (data == null) { + break; + } + paths = (ArrayList) data.getSerializableExtra("photos"); + mBitmaps.remove(mAddBitmaps); + showProgressDialog(""); + new Thread() { + public void run() { + for (int i = 0; i < paths.size(); i++) { + InputStream is; + try { + is = new FileInputStream(paths.get(i).getPath()); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(paths.get(i).getPath(), + opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(is, + null, opts); + mBitmaps.add(new AddBitmaps(false, bitmap, null)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + handler.sendEmptyMessage(HANDLER_PHOTOS); + }; + }.start(); + break; + case SELECT_PIC_BY_TACK_PHOTO: + photoUri = Uri.parse(SharePrefUtil.getString( + getActivity(), "photoUri", "")); + + if (photoUri == null) { + Toast.makeText(getActivity(), "选择图片文件出错", Toast.LENGTH_LONG).show(); + return; + } + cropImage(photoUri); + break; + case PHOTO_RESOULT: + Bundle d = data.getExtras(); + if (d != null) { + Bitmap bm = d.getParcelable("data"); + SimpleDateFormat sdf = new SimpleDateFormat("MMddhhmmss"); + Date dt = new Date(); + String picN = "cy" + sdf.format(dt) + ".jpg"; + temp = new File(getActivity().getCacheDir(), picN);// 放到 + if (temp.exists()) + temp.delete(); + try { + temp.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + bm.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream( + temp)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + if (!bm.isRecycled()) { + bm.recycle(); + bm = null; + } + + } + break; + default: + break; + } + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + private void cropImage(Uri uri) { + ImageLoader.getInstance().loadImage(photoUri + "", + new SimpleImageLoadingListener() { + @Override + public void onLoadingComplete(String imageUri, View view, + Bitmap loadedImage) { + // TODO Auto-generated method stub + super.onLoadingComplete(imageUri, view, loadedImage); + + // 拍照图片压缩 + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, + stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 500) {// 判断如果图片大于500kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + loadedImage.compress( + Bitmap.CompressFormat.JPEG, options, + stream);// 这里压缩50%,把压缩后的数据存放到baos中 + if (stream.toByteArray().length / 1024 < 500) { + break; + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + mBitmaps.remove(mAddBitmaps); + mBitmaps.add(new AddBitmaps(false, loadedImage, null)); + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + } + }); + } + private static final int HANDLER_PHOTOS = 3; + private Handler handler = new Handler() { + public void handleMessage(android.os.Message msg) { + switch (msg.what) { + case HANDLER_PHOTOS: + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + closeProgressDialog(); + gv_adapter.notifyDataSetChanged(); + break; + + default: + break; + } + }; + }; + public List imgs= new ArrayList<>(); + yongyaoTotalBean totalBean; + private void yongyaogetDetail() + { + showProgressDialog("加载中"); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + Log.d("okhttp","x-access-token"+token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url = Url.yongyaogetDetail+mParam2; + OkHttpUtils + .get() + .url(url) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + closeProgressDialog(); + + if(hasrealtoken(response)>0) + { + totalBean= GsonTools.fromGsonToBean(response, yongyaoTotalBean.class); + if(totalBean.getData()!=null) + { + baseinfoDataStatus=totalBean.getData().getDataStatus(); + yongyaoBean=totalBean.getData(); + hanledata(); + } + + + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.yongyaogetDetail); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + private void hanledata() + { + if(yongyaoBean.getImgPath()!=null&&yongyaoBean.getImgPath().size()>0) + { + imgs.addAll(yongyaoBean.getImgPath()); + } + if(yongyaoBean.getImgPath()!=null) + { + for(imBean urlBean:yongyaoBean.getImgPath()) + { + mBitmaps.add(new AddBitmaps(false, null, urlBean.getFileUrl())); + } + } + + if (mBitmaps.size() < 9) { + mBitmaps.add(mAddBitmaps); + } + gv_adapter.notifyDataSetChanged(); + if("1".equals(yongyaoBean.getTreatFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_1)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTreatFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_2)).setChecked(true); + } + + + + + if("1".equals(yongyaoBean.getEtvFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_31)).setChecked(true); + } + else if("0".equals(yongyaoBean.getEtvFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_32)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getEtvDurationYear())) + { + ((EditText)view.findViewById(R.id.year1)).setText(yongyaoBean.getEtvDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getEtvDurationMonth())) + { + ((EditText)view.findViewById(R.id.month1)).setText(yongyaoBean.getEtvDurationMonth()); + } + if("1".equals(yongyaoBean.getEtvStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_41)).setChecked(true); + } + else if("0".equals(yongyaoBean.getEtvStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_42)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getEtvStopYear())) + { + ((EditText)view.findViewById(R.id.year2)).setText(yongyaoBean.getEtvStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getEtvStopMonth())) + { + ((EditText)view.findViewById(R.id.month2)).setText(yongyaoBean.getEtvStopMonth()); + } + + + if("1".equals(yongyaoBean.getTdfFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_61)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTdfFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_62)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getTdfDurationYear())) + { + ((EditText)view.findViewById(R.id.year3)).setText(yongyaoBean.getTdfDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getTdfDurationMonth())) + { + ((EditText)view.findViewById(R.id.month3)).setText(yongyaoBean.getTdfDurationMonth()); + } + if("1".equals(yongyaoBean.getTdfStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_51)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTdfStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_52)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getTdfStopYear())) + { + ((EditText)view.findViewById(R.id.year4)).setText(yongyaoBean.getTdfStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getTdfStopMonth())) + { + ((EditText)view.findViewById(R.id.month4)).setText(yongyaoBean.getTdfStopMonth()); + } + + + if("1".equals(yongyaoBean.getTafFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_91)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTafFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_92)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getTafDurationYear())) + { + ((EditText)view.findViewById(R.id.year5)).setText(yongyaoBean.getTafDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getTafDurationMonth())) + { + ((EditText)view.findViewById(R.id.month5)).setText(yongyaoBean.getTafDurationMonth()); + } + if("1".equals(yongyaoBean.getTafStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_101)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTafStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_102)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getTafStopYear())) + { + ((EditText)view.findViewById(R.id.year7)).setText(yongyaoBean.getTafStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getTafStopMonth())) + { + ((EditText)view.findViewById(R.id.month7)).setText(yongyaoBean.getTafStopMonth()); + } + + + if("1".equals(yongyaoBean.getAdvFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_131)).setChecked(true); + } + else if("0".equals(yongyaoBean.getAdvFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_132)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getAdvDurationYear())) + { + ((EditText)view.findViewById(R.id.year9)).setText(yongyaoBean.getAdvDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getAdvDurationMonth())) + { + ((EditText)view.findViewById(R.id.month9)).setText(yongyaoBean.getAdvDurationMonth()); + } + if("1".equals(yongyaoBean.getAdvStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_141)).setChecked(true); + } + else if("0".equals(yongyaoBean.getAdvStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_142)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getAdvStopYear())) + { + ((EditText)view.findViewById(R.id.year10)).setText(yongyaoBean.getAdvStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getAdvStopMonth())) + { + ((EditText)view.findViewById(R.id.month10)).setText(yongyaoBean.getAdvStopMonth()); + } + + + if("1".equals(yongyaoBean.getTmfFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_151)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTmfFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_152)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getTmfDurationYear())) + { + ((EditText)view.findViewById(R.id.year12)).setText(yongyaoBean.getTmfDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getTmfDurationMonth())) + { + ((EditText)view.findViewById(R.id.month12)).setText(yongyaoBean.getTmfDurationMonth()); + } + if("1".equals(yongyaoBean.getTmfStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_161)).setChecked(true); + } + else if("0".equals(yongyaoBean.getTmfStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_162)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getTmfStopYear())) + { + ((EditText)view.findViewById(R.id.year11)).setText(yongyaoBean.getTmfStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getTmfStopMonth())) + { + ((EditText)view.findViewById(R.id.month11)).setText(yongyaoBean.getTmfStopMonth()); + } + + + if("1".equals(yongyaoBean.getLdtFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_171)).setChecked(true); + } + else if("0".equals(yongyaoBean.getLdtFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_172)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationYear())) + { + ((EditText)view.findViewById(R.id.year17)).setText(yongyaoBean.getLdtDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationMonth())) + { + ((EditText)view.findViewById(R.id.month17)).setText(yongyaoBean.getLdtDurationMonth()); + } + if("1".equals(yongyaoBean.getLdtStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_181)).setChecked(true); + } + else if("0".equals(yongyaoBean.getLdtStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_182)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getLdtStopYear())) + { + ((EditText)view.findViewById(R.id.year14)).setText(yongyaoBean.getLdtStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getLdtStopMonth())) + { + ((EditText)view.findViewById(R.id.month14)).setText(yongyaoBean.getLdtStopMonth()); + } + + +// if("1".equals(yongyaoBean.getLdtFlag())) +// { +// ((RadioButton)view.findViewById(R.id.tab_rbn_171)).setChecked(true); +// } +// else if("0".equals(yongyaoBean.getLdtFlag())) +// { +// ((RadioButton)view.findViewById(R.id.tab_rbn_172)).setChecked(true); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationYear())) +// { +// ((EditText)view.findViewById(R.id.year17)).setText(yongyaoBean.getLdtDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationMonth())) +// { +// ((EditText)view.findViewById(R.id.month17)).setText(yongyaoBean.getLdtDurationMonth()); +// } +// if("1".equals(yongyaoBean.getLdtStopFlag())) +// { +// ((RadioButton)view.findViewById(R.id.tab_rbn_181)).setChecked(true); +// } +// else if("0".equals(yongyaoBean.getLdtStopFlag())) +// { +// ((RadioButton)view.findViewById(R.id.tab_rbn_182)).setChecked(true); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtStopYear())) +// { +// ((EditText)view.findViewById(R.id.year14)).setText(yongyaoBean.getLdtStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtStopMonth())) +// { +// ((EditText)view.findViewById(R.id.month14)).setText(yongyaoBean.getLdtStopMonth()); +// } + + + + + if("1".equals(yongyaoBean.getLamFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_191)).setChecked(true); + } + else if("0".equals(yongyaoBean.getLamFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_192)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getLamDurationYear())) + { + ((EditText)view.findViewById(R.id.year19)).setText(yongyaoBean.getLamDurationYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getLamDurationMonth())) + { + ((EditText)view.findViewById(R.id.month19)).setText(yongyaoBean.getLamDurationMonth()); + } + if("1".equals(yongyaoBean.getLamStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_201)).setChecked(true); + } + else if("0".equals(yongyaoBean.getLamStopFlag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_202)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getLamStopYear())) + { + ((EditText)view.findViewById(R.id.year20)).setText(yongyaoBean.getLamStopYear()); + } + if(!StringUtil.isEmpty(yongyaoBean.getLamStopMonth())) + { + ((EditText)view.findViewById(R.id.month20)).setText(yongyaoBean.getLamStopMonth()); + } + + + if("1".equals(yongyaoBean.getPeg0flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_241)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg0flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_242)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg0year())) + { + ((EditText)view.findViewById(R.id.year24)).setText(yongyaoBean.getPeg0year()); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg0month())) + { + ((EditText)view.findViewById(R.id.month24)).setText(yongyaoBean.getPeg0month()); + } + if("1".equals(yongyaoBean.getPeg0continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_251)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg0continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_252)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg0course())) + { + ((EditText)view.findViewById(R.id.year25)).setText(yongyaoBean.getPeg0course()); + } + if("1".equals(yongyaoBean.getPeg0unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_261)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg0unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_262)).setChecked(true); + } + + + + + if("1".equals(yongyaoBean.getPeg90flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_211)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg90flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_212)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg90year())) + { + ((EditText)view.findViewById(R.id.year21)).setText(yongyaoBean.getPeg90year()); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg90month())) + { + ((EditText)view.findViewById(R.id.month21)).setText(yongyaoBean.getPeg90month()); + } + if("1".equals(yongyaoBean.getPeg90continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_221)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg90continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_222)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg90course())) + { + ((EditText)view.findViewById(R.id.year22)).setText(yongyaoBean.getPeg90course()); + } + if("1".equals(yongyaoBean.getPeg90unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_231)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg90unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_232)).setChecked(true); + } + + + if("1".equals(yongyaoBean.getPeg135flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_271)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg135flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_272)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg135year())) + { + ((EditText)view.findViewById(R.id.year27)).setText(yongyaoBean.getPeg135year()); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg135month())) + { + ((EditText)view.findViewById(R.id.month27)).setText(yongyaoBean.getPeg135month()); + } + if("1".equals(yongyaoBean.getPeg135continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_281)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg135continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_282)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg135course())) + { + ((EditText)view.findViewById(R.id.year28)).setText(yongyaoBean.getPeg135course()); + } + if("1".equals(yongyaoBean.getPeg135unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_291)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg135unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_292)).setChecked(true); + } + + + if("1".equals(yongyaoBean.getPeg180flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_301)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg180flag())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_302)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg180year())) + { + ((EditText)view.findViewById(R.id.year30)).setText(yongyaoBean.getPeg180year()); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg180month())) + { + ((EditText)view.findViewById(R.id.month30)).setText(yongyaoBean.getPeg180month()); + } + if("1".equals(yongyaoBean.getPeg180continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_321)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg180continuous())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_322)).setChecked(true); + } + if(!StringUtil.isEmpty(yongyaoBean.getPeg180course())) + { + ((EditText)view.findViewById(R.id.year33)).setText(yongyaoBean.getPeg180course()); + } + if("1".equals(yongyaoBean.getPeg180unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_341)).setChecked(true); + } + else if("0".equals(yongyaoBean.getPeg180unite())) + { + ((RadioButton)view.findViewById(R.id.tab_rbn_342)).setChecked(true); + } + + } + String token= SharePrefUtil.getString(getContext(),"x_access_token","");; + private void gettokens(String url) + { +// showProgressDialog("加载中"); + token= SharePrefUtil.getString(getContext(),"x_access_token",""); + if(!StringUtil.isEmpty(token)) + { + handletoken(url); + return; + } + sendJsonPostParamTokenMD5(getActivity(),new OnCallBackFromNet() { + @Override + public void onCallbackFromThread(String resultJson) { + Log.d("okhttp",resultJson); + SimpleBean simpleBean = GsonTools.fromGsonToBean(resultJson,SimpleBean.class); + token=simpleBean.getData(); + if(token==null) + { + ToastUtil.showMessage("Token异常"); + return; + } + SharePrefUtil.saveString(getContext(),"x_access_token",token); + handletoken(url); + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + } + }); + } + private void handletoken(String url) + { + if(url.contains(Url.yongyaogetDetail)) + { + yongyaogetDetail(); + } + else if(url.contains(Url.yongyaoupdate)) + { + updatedata(); + } + else + { + sendimg(url); + } + + + } + + + private void sendpre() + { + if (mBitmaps.contains(mAddBitmaps)) { + mBitmaps.remove(mAddBitmaps); + } + Log.d("okhttp",""+imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()||mBitmaps.size()==0) + { + updatedata(); + } + else + { + new Thread(new Runnable() { + @Override + public void run() { + for(AddBitmaps bitmaps:mBitmaps) + { + if (!StringUtil.isEmpty(bitmaps.getPath())) + { + continue; + } + String path="android"+System.currentTimeMillis(); + Base64Util.saveBitmapAsJpg(bitmaps.getBitmap(),path); + sendimg(path+".jpg"); + } + } + }).start(); + }}; + private void sendimg(String fileKey) + { + Map paras=new HashMap<>(); + paras.put("fileKey",fileKey); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + String url1 = Url.generatePresignedUrl; + OkHttpUtils + .get() + .url(url1) + .params(paras) + .headers(headers) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"sendimg"); + + if(hasrealtoken(response)>0) + { + SimpleBean bean=GsonTools.fromGsonToBean(response,SimpleBean.class); + if(bean.getData()!=null) + { + new Thread( + new Runnable() { + @Override + public void run() { + postfile(bean.getData(),fileKey); + } + } + ).start(); + } + } + else if(hasrealtoken(response)==0) + { + gettokens(fileKey); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); + } + + } + }); + } + public void statract() + { + Intent intent=new Intent(getActivity(), ResearchActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + intent.putExtra("typename","myproject"); + startActivity(intent); + return; + } + public void postfile( String url, String localFile) + { + + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 上传文件的URL + File file = new File(file1,localFile); + String contentType = "application/gdxz-stream"; +// 通过签名URL上传文件。 + OkHttpClient client = new OkHttpClient(); + Request putRequest = new Request.Builder() + .url(url) + .put(RequestBody.create(MediaType.parse(contentType), file)) + .build(); + client.newCall(putRequest).enqueue(new okhttp3.Callback() { + + + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); + Log.d("okhttp ","IOException "+ e.toString()); + + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + Log.d("okhttp ","response "+ response); + String str=url.split("\\?")[0]; + Log.d("okhttp ","str "+ str); + imBean tag=new imBean(); + tag.setFileUrl(str); + tag.setFileKey(str.replace("http://realyworld.oss-cn-beijing.aliyuncs.com/","")); + imgs.add(tag); + Log.d("okhttp ","imgs "+ imgs.size()+" "+mBitmaps.size()); + if(imgs.size()==mBitmaps.size()) + { + updatedata(); + } + } + }); + } + private void updatedata() + { + yongyaoBean yongyaoBean1=new yongyaoBean(); + if(((RadioButton)view.findViewById(R.id.tab_rbn_1)).isChecked()) + { + yongyaoBean1.setTreatFlag("1"); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_2)).isChecked()) + { + yongyaoBean1.setTreatFlag("0"); + } + else + { + ToastUtil.showToast(mParam1+"为必填项"); + return; + } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_31)).isChecked()) + { + yongyaoBean1.setEtvFlag("1"); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_32)).isChecked()) + { + yongyaoBean1.setEtvFlag("0"); + } +// if(!StringUtil.isEmpty(yongyaoBean.getEtvDurationYear())) +// { + yongyaoBean1.setEtvDurationYear( ((EditText)view.findViewById(R.id.year1)).getText().toString()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getEtvDurationMonth())) +// { + yongyaoBean1.setEtvDurationMonth( ((EditText)view.findViewById(R.id.month1)).getText().toString()); + +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_41)).isChecked()) + { + yongyaoBean1.setEtvStopFlag("1"); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_42)).isChecked()) + { + yongyaoBean1.setEtvStopFlag("0"); + } +// if(!StringUtil.isEmpty(yongyaoBean.getEtvStopYear())) +// { + yongyaoBean1.setEtvStopYear( ((EditText)view.findViewById(R.id.year2)).getText().toString()); +// ((EditText)view.findViewById(R.id.year2)).setText(yongyaoBean.getEtvStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getEtvStopMonth())) +// { + yongyaoBean1.setEtvStopMonth( ((EditText)view.findViewById(R.id.month2)).getText().toString()); +// ((EditText)view.findViewById(R.id.month2)).setText(yongyaoBean.getEtvStopMonth()); +// } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_61)).isChecked()) + { + yongyaoBean1.setTdfFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_61)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_62)).isChecked()) + { + yongyaoBean1.setTdfFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_62)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTdfDurationYear())) +// { + yongyaoBean1.setTdfDurationYear(((EditText)view.findViewById(R.id.year3)).getText().toString()); +// ((EditText)view.findViewById(R.id.year3)).setText(yongyaoBean.getTdfDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTdfDurationMonth())) +// { + yongyaoBean1.setTdfDurationMonth( ((EditText)view.findViewById(R.id.month3)).getText().toString()); +// ((EditText)view.findViewById(R.id.month3)).setText(yongyaoBean.getTdfDurationMonth()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_51)).isChecked()) + { + yongyaoBean1.setTdfStopFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_51)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_52)).isChecked()) + { + yongyaoBean1.setTdfStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_52)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTdfStopYear())) +// { + yongyaoBean1.setTdfStopYear(((EditText)view.findViewById(R.id.year4)).getText().toString()); +// ((EditText)view.findViewById(R.id.year4)).setText(yongyaoBean.getTdfStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTdfStopMonth())) +// { + yongyaoBean1.setTdfStopMonth(((EditText)view.findViewById(R.id.month4)).getText().toString()); +// ((EditText)view.findViewById(R.id.month4)).setText(yongyaoBean.getTdfStopMonth()); +// } + + + if( ((RadioButton)view.findViewById(R.id.tab_rbn_91)).isChecked()) + { + yongyaoBean1.setTafFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_91)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_92)).isChecked()) + { + yongyaoBean1.setTafFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_92)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTafDurationYear())) +// { + yongyaoBean1.setTafDurationYear(((EditText)view.findViewById(R.id.year5)).getText().toString()); +// ((EditText)view.findViewById(R.id.year5)).setText(yongyaoBean.getTafDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTafDurationMonth())) +// { + yongyaoBean1.setTafDurationMonth(((EditText)view.findViewById(R.id.month5)).getText().toString()); +// ((EditText)view.findViewById(R.id.month5)).setText(yongyaoBean.getTafDurationMonth()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_101)).isChecked()) + { + yongyaoBean1.setTafStopFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_101)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_102)).isChecked()) + { + yongyaoBean1.setTafStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_102)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTafStopYear())) +// { + yongyaoBean1.setTafStopYear(((EditText)view.findViewById(R.id.year7)).getText().toString()); +// ((EditText)view.findViewById(R.id.year7)).setText(yongyaoBean.getTafStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTafStopMonth())) +// { + yongyaoBean1.setTafStopMonth(((EditText)view.findViewById(R.id.month7)).getText().toString()); +// ((EditText)view.findViewById(R.id.month7)).setText(yongyaoBean.getTafStopMonth()); +// } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_131)).isChecked()) + { + yongyaoBean1.setAdvFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_131)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_132)).isChecked()) + { + yongyaoBean1.setAdvFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_132)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getAdvDurationYear())) +// { + yongyaoBean1.setAdvDurationYear(((EditText)view.findViewById(R.id.year9)).getText().toString()); +// ((EditText)view.findViewById(R.id.year9)).setText(yongyaoBean.getAdvDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getAdvDurationMonth())) +// { + yongyaoBean1.setAdvDurationMonth(((EditText)view.findViewById(R.id.month9)).getText().toString()); +// ((EditText)view.findViewById(R.id.month9)).setText(yongyaoBean.getAdvDurationMonth()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_141)).isChecked()) + { + yongyaoBean1.setAdvStopFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_141)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_142)).isChecked()) + { + yongyaoBean1.setAdvStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_142)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getAdvStopYear())) +// { + yongyaoBean1.setAdvStopYear(((EditText)view.findViewById(R.id.year10)).getText().toString()); +// ((EditText)view.findViewById(R.id.year10)).setText(yongyaoBean.getAdvStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getAdvStopMonth())) +// { + yongyaoBean1.setAdvStopMonth(((EditText)view.findViewById(R.id.month10)).getText().toString()); +// ((EditText)view.findViewById(R.id.month10)).setText(yongyaoBean.getAdvStopMonth()); +// } + + + if( ((RadioButton)view.findViewById(R.id.tab_rbn_151)).isChecked()) + { + yongyaoBean1.setTmfFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_151)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_152)).isChecked()) + { + yongyaoBean1.setTmfFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_152)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTmfDurationYear())) +// { + yongyaoBean1.setTmfDurationYear(((EditText)view.findViewById(R.id.year12)).getText().toString()); +// ((EditText)view.findViewById(R.id.year12)).setText(yongyaoBean.getTmfDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTmfDurationMonth())) +// { + yongyaoBean1.setTmfDurationMonth( ((EditText)view.findViewById(R.id.month12)).getText().toString()); +// ((EditText)view.findViewById(R.id.month12)).setText(yongyaoBean.getTmfDurationMonth()); +// } + if( ((RadioButton)view.findViewById(R.id.tab_rbn_161)).isChecked()) + { + yongyaoBean1.setTmfStopFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_161)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_162)).isChecked()) + { + yongyaoBean1.setTmfStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_162)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTmfStopYear())) +// { + yongyaoBean1.setTmfStopYear(((EditText)view.findViewById(R.id.year11)).getText().toString()); +// ((EditText)view.findViewById(R.id.year11)).setText(yongyaoBean.getTmfStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTmfStopMonth())) +// { + yongyaoBean1.setTmfStopMonth(((EditText)view.findViewById(R.id.month11)).getText().toString()); +// ((EditText)view.findViewById(R.id.month11)).setText(yongyaoBean.getTmfStopMonth()); +// } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_171)).isChecked()) + { + yongyaoBean1.setLdtFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_171)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_172)).isChecked()) + { + yongyaoBean1.setLdtFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_172)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationYear())) +// { + yongyaoBean1.setLdtDurationYear( ((EditText)view.findViewById(R.id.year17)).getText().toString()); +// ((EditText)view.findViewById(R.id.year17)).setText(yongyaoBean.getLdtDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationMonth())) +// { + yongyaoBean1.setLdtDurationMonth(((EditText)view.findViewById(R.id.month17)).getText().toString()); +// ((EditText)view.findViewById(R.id.month17)).setText(yongyaoBean.getLdtDurationMonth()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_181)).isChecked()) + { + yongyaoBean1.setLdtStopFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_181)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_182)).isChecked()) + { + yongyaoBean1.setLdtStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_182)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getTmfStopYear())) +// { + yongyaoBean1.setLdtStopYear(((EditText)view.findViewById(R.id.year14)).getText().toString()); +// ((EditText)view.findViewById(R.id.year14)).setText(yongyaoBean.getTmfStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getTmfStopMonth())) +// { + yongyaoBean1.setLdtStopMonth( ((EditText)view.findViewById(R.id.month14)).getText().toString()); +// ((EditText)view.findViewById(R.id.month14)).setText(yongyaoBean.getTmfStopMonth()); +// } + + +// if( ((RadioButton)view.findViewById(R.id.tab_rbn_171)).isChecked()) +// { +// yongyaoBean1.setLdtFlag("1"); +//// ((RadioButton)view.findViewById(R.id.tab_rbn_171)).setChecked(true); +// } +// else if(((RadioButton)view.findViewById(R.id.tab_rbn_172)).isChecked()) +// { +// yongyaoBean1.setLdtFlag("0"); +//// ((RadioButton)view.findViewById(R.id.tab_rbn_172)).setChecked(true); +// } +//// if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationYear())) +//// { +// yongyaoBean.setLdtDurationYear(((EditText)view.findViewById(R.id.year17)).getText().toString()); +//// ((EditText)view.findViewById(R.id.year17)).setText(yongyaoBean.getLdtDurationYear()); +//// } +//// if(!StringUtil.isEmpty(yongyaoBean.getLdtDurationMonth())) +//// { +// yongyaoBean1.setLdtDurationMonth(((EditText)view.findViewById(R.id.month17)).getText().toString()); +//// ((EditText)view.findViewById(R.id.month17)).setText(yongyaoBean.getLdtDurationMonth()); +//// } +// if("1".equals(yongyaoBean.getLdtStopFlag())) +// { +// yongyaoBean1.setLdtStopFlag("1"); +//// ((RadioButton)view.findViewById(R.id.tab_rbn_181)).setChecked(true); +// } +// else if("0".equals(yongyaoBean.getLdtStopFlag())) +// { +// yongyaoBean1.setLdtStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_182)).setChecked(true); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtStopYear())) +// { +// ((EditText)view.findViewById(R.id.year14)).setText(yongyaoBean.getLdtStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLdtStopMonth())) +// { +// ((EditText)view.findViewById(R.id.month14)).setText(yongyaoBean.getLdtStopMonth()); +// } + + + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_191)).isChecked()) + { + yongyaoBean1.setLamFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_191)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_192)).isChecked()) + { + yongyaoBean1.setLamFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_192)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getLamDurationYear())) +// { + yongyaoBean1.setLamDurationYear( ((EditText)view.findViewById(R.id.year19)).getText().toString()); +// ((EditText)view.findViewById(R.id.year19)).setText(yongyaoBean.getLamDurationYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLamDurationMonth())) +// { + yongyaoBean1.setLamDurationMonth(((EditText)view.findViewById(R.id.month19)).getText().toString()); +// ((EditText)view.findViewById(R.id.month19)).setText(yongyaoBean.getLamDurationMonth()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_201)).isChecked()) + { + yongyaoBean1.setLamStopFlag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_201)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_202)).isChecked()) + { + yongyaoBean1.setLamStopFlag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_202)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getLamStopYear())) +// { + yongyaoBean1.setLamStopYear(((EditText)view.findViewById(R.id.year20)).getText().toString()); +// ((EditText)view.findViewById(R.id.year20)).setText(yongyaoBean.getLamStopYear()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getLamStopMonth())) +// { + yongyaoBean1.setLamStopMonth(((EditText)view.findViewById(R.id.month20)).getText().toString()); +// ((EditText)view.findViewById(R.id.month20)).setText(yongyaoBean.getLamStopMonth()); +// } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_241)).isChecked()) + { + yongyaoBean1.setPeg0flag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_241)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_242)).isChecked()) + { + yongyaoBean1.setPeg0flag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_242)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg0year())) +// { + yongyaoBean1.setPeg0year( ((EditText)view.findViewById(R.id.year24)).getText().toString()); +// ((EditText)view.findViewById(R.id.year24)).setText(yongyaoBean.getPeg0year()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg0month())) +// { + yongyaoBean1.setPeg0month(((EditText)view.findViewById(R.id.month24)).getText().toString()); +// ((EditText)view.findViewById(R.id.month24)).setText(yongyaoBean.getPeg0month()); +// } + if( ((RadioButton)view.findViewById(R.id.tab_rbn_251)).isChecked()) + { + yongyaoBean1.setPeg0continuous("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_251)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_252)).isChecked()) + { + yongyaoBean1.setPeg0continuous("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_252)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg0course())) +// { + yongyaoBean1.setPeg0course(((EditText)view.findViewById(R.id.year25)).getText().toString()); +// ((EditText)view.findViewById(R.id.year25)).setText(yongyaoBean.getPeg0course()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_261)).isChecked()) + { + yongyaoBean1.setPeg0unite("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_261)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_262)).isChecked()) + { + yongyaoBean1.setPeg0unite("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_262)).setChecked(true); + } + + + + + if( ((RadioButton)view.findViewById(R.id.tab_rbn_211)).isChecked()) + { + yongyaoBean1.setPeg90flag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_211)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_212)).isChecked()) + { + yongyaoBean1.setPeg90flag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_212)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg90year())) +// { + yongyaoBean1.setPeg90year( ((EditText)view.findViewById(R.id.year21)).getText().toString()); +// ((EditText)view.findViewById(R.id.year21)).setText(yongyaoBean.getPeg0year()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg90month())) +// { + yongyaoBean1.setPeg90month(((EditText)view.findViewById(R.id.month21)).getText().toString()); +// ((EditText)view.findViewById(R.id.month21)).setText(yongyaoBean.getPeg0month()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_221)).isChecked()) + { + yongyaoBean1.setPeg90continuous("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_221)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_222)).isChecked()) + { + yongyaoBean1.setPeg90continuous("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_222)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg90course())) +// { + yongyaoBean1.setPeg90course(((EditText)view.findViewById(R.id.year22)).getText().toString()); +// ((EditText)view.findViewById(R.id.year22)).setText(yongyaoBean.getPeg0course()); +// } + if( ((RadioButton)view.findViewById(R.id.tab_rbn_231)).isChecked()) + { + yongyaoBean1.setPeg90unite("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_231)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_232)).isChecked()) + { + yongyaoBean1.setPeg90unite("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_232)).setChecked(true); + } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_271)).isChecked()) + { + yongyaoBean1.setPeg135flag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_271)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_272)).isChecked()) + { + yongyaoBean1.setPeg135flag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_272)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg135year())) +// { + yongyaoBean1.setPeg135year( ((EditText)view.findViewById(R.id.year27)).getText().toString()); +// ((EditText)view.findViewById(R.id.year27)).setText(yongyaoBean.getPeg0year()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg135month())) +// { + yongyaoBean1.setPeg135month(((EditText)view.findViewById(R.id.month27)).getText().toString()); +// ((EditText)view.findViewById(R.id.month27)).setText(yongyaoBean.getPeg0month()); +// } + if( ((RadioButton)view.findViewById(R.id.tab_rbn_281)).isChecked()) + { + yongyaoBean1.setPeg135continuous("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_281)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_282)).isChecked()) + { + yongyaoBean1.setPeg135continuous("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_282)).setChecked(true); + } + if(!StringUtil.isEmpty(((EditText)view.findViewById(R.id.year28)).getText().toString())) + { + yongyaoBean1.setPeg135course(((EditText)view.findViewById(R.id.year28)).getText().toString()); +// ((EditText)view.findViewById(R.id.year28)).setText(yongyaoBean.getPeg0course()); + } + if( ((RadioButton)view.findViewById(R.id.tab_rbn_291)).isChecked()) + { + yongyaoBean1.setPeg135unite("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_291)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_292)).isChecked()) + { + yongyaoBean1.setPeg135unite("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_292)).setChecked(true); + } + + + if(((RadioButton)view.findViewById(R.id.tab_rbn_301)).isChecked()) + { + yongyaoBean1.setPeg180flag("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_301)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_302)).isChecked()) + { + yongyaoBean1.setPeg180flag("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_302)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg180year())) +// { + yongyaoBean1.setPeg180year(((EditText)view.findViewById(R.id.year30)).getText().toString()); +// ((EditText)view.findViewById(R.id.year30)).setText(yongyaoBean.getPeg0year()); +// } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg180month())) +// { + yongyaoBean1.setPeg180month(((EditText)view.findViewById(R.id.month30)).getText().toString()); +// ((EditText)view.findViewById(R.id.month30)).setText(yongyaoBean.getPeg0month()); +// } + if(((RadioButton)view.findViewById(R.id.tab_rbn_321)).isChecked()) + { + yongyaoBean1.setPeg180continuous("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_321)).setChecked(true); + } + else if(((RadioButton)view.findViewById(R.id.tab_rbn_322)).isChecked()) + { + yongyaoBean1.setPeg180continuous("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_322)).setChecked(true); + } +// if(!StringUtil.isEmpty(yongyaoBean.getPeg180course())) +// { + yongyaoBean1.setPeg180course(((EditText)view.findViewById(R.id.year33)).getText().toString()); +// ((EditText)view.findViewById(R.id.year33)).setText(yongyaoBean.getPeg0course()); +// } + if( ((RadioButton)view.findViewById(R.id.tab_rbn_341)).isChecked()) + { + yongyaoBean1.setPeg180unite("1"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_341)).setChecked(true); + } + else if( ((RadioButton)view.findViewById(R.id.tab_rbn_342)).isChecked()) + { + yongyaoBean1.setPeg180unite("0"); +// ((RadioButton)view.findViewById(R.id.tab_rbn_342)).setChecked(true); + } + if(baseinfoDataStatus!=null) + { + yongyaoBean1.setDataStatus(baseinfoDataStatus); + } + yongyaoBean1.setImgPath(imgs); + yongyaoBean1.setYongyaoId(mParam2); + Map headers=new HashMap<>(); + headers.put("x-access-token",token); + headers.put("User-Agent", WebSettings.getDefaultUserAgent(UIUtils.getContext())+" "+ UpdateVersionUtils.getVersionName()); + Log.d("okhttp",""+new Gson().toJson(yongyaoBean1)); + OkHttpUtils + .postString() + .url(Url.yongyaoupdate) + .headers(headers) + .content(new Gson().toJson(yongyaoBean1)) + .mediaType(MediaType.parse("application/json; charset=utf-8")) + .build() + .execute(new StringCallback() + { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e.toString()); + + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"response"); + + if(hasrealtoken(response)>0) + { + getActivity().finish(); + } + else if(hasrealtoken(response)==0) + { + gettokens(Url.yongyaoupdate); + } + else if (hasrealtoken(response)==-1) + { + statract(); + } + else + { + BaseBeanNew baseBeanNew=GsonTools.fromGsonToBean(response,BaseBeanNew.class); + ToastUtil.showToast(baseBeanNew.getMsg()); +// ToastUtil.showToast(response); + } + + } + }); + } + + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) getActivity() + .getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = ((Activity) getActivity()).getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpClientFactory.java b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpClientFactory.java new file mode 100644 index 0000000..20f7b11 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpClientFactory.java @@ -0,0 +1,188 @@ +package cn.shangyu.gdxzExpert.http; + +import java.io.IOException; +import java.io.InputStream; +import java.net.Socket; +import java.net.UnknownHostException; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.util.zip.GZIPInputStream; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + + + + + +import org.apache.http.Header; +import org.apache.http.HeaderElement; +import org.apache.http.HttpEntity; +import org.apache.http.HttpRequest; +import org.apache.http.HttpRequestInterceptor; +import org.apache.http.HttpResponse; +import org.apache.http.HttpResponseInterceptor; +import org.apache.http.HttpVersion; +import org.apache.http.client.params.HttpClientParams; +import org.apache.http.conn.params.ConnManagerParams; +import org.apache.http.conn.params.ConnPerRouteBean; +import org.apache.http.conn.scheme.PlainSocketFactory; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.entity.HttpEntityWrapper; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.params.HttpProtocolParams; +import org.apache.http.protocol.HTTP; +import org.apache.http.protocol.HttpContext; + + + + + +public class HttpClientFactory { + /** http请求最大并发连接数 */ + private static final int MAX_CONNECTIONS = 10; + /** 超时时间 */ + private static final int TIMEOUT = 10 * 1000; + /** 缓存大小 */ + private static final int SOCKET_BUFFER_SIZE = 8 * 1024; // 8KB + /** 错误尝试次数,错误异常表请在RetryHandler添加 */ + private static final int MAX_RETRIES = 5; + private static final String HEADER_ACCEPT_ENCODING = "Accept-Encoding"; + private static final String ENCODING_GZIP = "gzip"; + + public static DefaultHttpClient create(boolean isHttps) { + HttpParams params = createHttpParams(); + DefaultHttpClient httpClient = null; + if (isHttps) { + // 支持http与https + SchemeRegistry schemeRegistry = new SchemeRegistry(); + schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); + schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); + // ThreadSafeClientConnManager线程安全管理类 + ThreadSafeClientConnManager cm = new ThreadSafeClientConnManager(params, schemeRegistry); + httpClient = new DefaultHttpClient(cm, params); + } else { + httpClient = new DefaultHttpClient(params); + } + return httpClient; + } + + private static HttpParams createHttpParams() { + final HttpParams params = new BasicHttpParams(); + // 设置是否启用旧连接检查,默认是开启的。关闭这个旧连接检查可以提高一点点性能,但是增加了I/O错误的风险(当服务端关闭连接时)。 + // 开启这个选项则在每次使用老的连接之前都会检查连接是否可用,这个耗时大概在15-30ms之间 + HttpConnectionParams.setStaleCheckingEnabled(params, false); + HttpConnectionParams.setConnectionTimeout(params, TIMEOUT);// 设置链接超时时间 + HttpConnectionParams.setSoTimeout(params, TIMEOUT);// 设置socket超时时间 + HttpConnectionParams.setSocketBufferSize(params, SOCKET_BUFFER_SIZE);// 设置缓存大小 + HttpConnectionParams.setTcpNoDelay(params, true);// 是否不使用延迟发送(true为不延迟) + HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); // 设置协议版本 + HttpProtocolParams.setUseExpectContinue(params, true);// 设置异常处理机制 + HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);// 设置编码 + HttpClientParams.setRedirecting(params, false);// 设置是否采用重定向 + + ConnManagerParams.setTimeout(params, TIMEOUT);// 设置超时 + ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRouteBean(MAX_CONNECTIONS));// 多线程最大连接数 + ConnManagerParams.setMaxTotalConnections(params, 10); // 多线程总连接数 + return params; + } + + private static void createHttpClient(DefaultHttpClient httpClient) { + // 添加request的拦截器,添加必要的头信息 + httpClient.addRequestInterceptor(new HttpRequestInterceptor() { + public void process(HttpRequest request, HttpContext context) { + if (!request.containsHeader(HEADER_ACCEPT_ENCODING)) { + request.addHeader(HEADER_ACCEPT_ENCODING, ENCODING_GZIP); + } + } + }); + + // 添加response拦截器,预先对response进行一些处理 + httpClient.addResponseInterceptor(new HttpResponseInterceptor() { + public void process(HttpResponse response, HttpContext context) { + final HttpEntity entity = response.getEntity(); + if (entity == null) { + return; + } + final Header encoding = entity.getContentEncoding(); + if (encoding != null) { + for (HeaderElement element : encoding.getElements()) { + // 如果是以GZIP压缩的数据,利用内部的填充器包装一层Gzip的流 + if (element.getName().equalsIgnoreCase(ENCODING_GZIP)) { + response.setEntity(new InflatingEntity(response.getEntity())); + break; + } + } + } + } + }); + // 设置重试次数 + httpClient.setHttpRequestRetryHandler(new HttpRetry(MAX_RETRIES)); + } + + /** 当服务器返回的数据是以Gzip压缩的过后的数据,填充Response返回的实体数据 (Description),则返回GZIP解压流 */ + private static class InflatingEntity extends HttpEntityWrapper { + public InflatingEntity(HttpEntity wrapped) { + super(wrapped); + } + + @Override + public InputStream getContent() throws IOException { + return new GZIPInputStream(wrappedEntity.getContent()); + } + + // 因为数据是压缩数据,所以实际长度无法估计,可以返回-1 + @Override + public long getContentLength() { + return -1; + } + } + + /** 自定义的安全套接字协议的实现,目前采用默认的,未使用到 */ + private static class SSLSocketFactoryEx extends SSLSocketFactory { + // 此类的实例表示安全套接字协议的实现,它充当用于安全套接字工厂或 SSLEngine 的工厂。用可选的一组密钥和信任管理器及安全随机字节源初始化此类。 + SSLContext sslContext = SSLContext.getInstance("TLS"); + + public SSLSocketFactoryEx(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { + super(truststore); + // TrustManager负责管理做出信任决定时使用的的信任材料,也负责决定是否接受同位体提供的凭据。 + // X509TrustManager此接口的实例管理使用哪一个 X509 证书来验证远端的安全套接字。决定是根据信任的证书授权、证书撤消列表、在线状态检查或其他方式做出的。 + TrustManager tm = new X509TrustManager() { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null;// 返回受验证同位体信任的认证中心的数组。 + } + + @Override + public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { + // 给出同位体提供的部分或完整的证书链,构建到可信任的根的证书路径,并且返回是否可以确认和信任将其用于基于验证类型的客户端 SSL 验证。 + } + + @Override + public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws java.security.cert.CertificateException { + // 给出同位体提供的部分或完整的证书链,构建到可信任的根的证书路径,并且返回是否可以确认和信任将其用于基于验证类型的服务器 SSL 验证。 + } + }; + sslContext.init(null, new TrustManager[]{tm}, null); + } + + @Override + public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { + return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); + } + + @Override + public Socket createSocket() throws IOException { + return sslContext.getSocketFactory().createSocket(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java new file mode 100644 index 0000000..0473e3d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpHelper.java @@ -0,0 +1,386 @@ +package cn.shangyu.gdxzExpert.http; + +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.StatusLine; +import org.apache.http.client.HttpClient; +import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; +import org.apache.http.impl.client.AbstractHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.protocol.BasicHttpContext; +import org.apache.http.protocol.HttpContext; +import org.apache.http.protocol.SyncBasicHttpContext; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.util.List; + +import cn.shangyu.gdxzExpert.utils.IoUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +public class HttpHelper { + // public static final String URL = "http://10.0.2.2:8080/"; + + /** get请求,获取返回字符串内容 */ + public static HttpResult get(String url) { + HttpGet httpGet = new HttpGet(url); + return execute(url, httpGet); + } + /** get请求,获取返回字符串内容 */ + public static HttpResult tokenget(String url) { + HttpGet httpGet = new HttpGet(url); + return execute(url, httpGet); + } + + + /** post请求,获取返回字符串内容 */ + public static HttpResult post(String url, + List parameters) { + + HttpPost httpPost = new HttpPost(url); + if (parameters != null) { + UrlEncodedFormEntity entity; + try { + entity = new UrlEncodedFormEntity(parameters, "UTF-8"); + + httpPost.setEntity(entity); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return execute(url, httpPost); + } + + /** post请求,获取返回字符串内容 */ + public static HttpResult tokenPost(String url, + List parameters, String token) { + + HttpPost httpPost = new HttpPost(url); + if (parameters != null) { + UrlEncodedFormEntity entity; + try { + entity = new UrlEncodedFormEntity(parameters, "UTF-8"); + httpPost.addHeader("token", token); // 认证token + httpPost.setEntity(entity); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return execute(url, httpPost); + } + + /** + * + * loadData 采用xutils的方法获取,请求服务器 + * + * @param method + * @param url + * @param params + * @param callback + * void + * @return + */ + public static HttpUtils http = new HttpUtils(); +// + public static HttpHandler loadData(HttpRequest.HttpMethod method, + String url, RequestParams params, RequestCallBack callback) { + if (http == null) { + http = new HttpUtils(); + + } + http.configCurrentHttpCacheExpiry(1000 * 1); + // 设置线程数 + http.configRequestThreadPoolSize(10); + if (params != null) { +// if (params.getQueryStringParams() != null) +// LogUtil.d(url + params.getQueryStringParams().toString()); + } else { + params = new RequestParams(); + } + // if (0 == CommonUtil.isNetworkAvailable(UIUtils.getContext())) { + // ToastUtil.showToast("无网络,请检查网络连接!"); + // } + // else { + // http.send(method, url, params, callback); + // } + HttpHandler cancleHttp = http.send(method, url, params,callback); + // if(cancleHttp!=null){ + // cancleHttp.cancel();//取消网络请求 + // } + return cancleHttp; + } + + // /** post请求,上传图片和文字。获取返回字符串内容 */ + // /** + // * 仅同时上传文件和参数时使用 + // * @param url 请求地址 + // * @param param 参数 + // * @param file 文件 + // * @return 服务器端返回的 + // */ + // + // public static String postTextAndFile(String url, Map + // param,File file) { + // HttpPost httpPost = new HttpPost(url); + // HttpClient httpClient=new DefaultHttpClient(); + // MultipartEntity entity = new MultipartEntity(); + // if (param != null && !param.isEmpty()) { + // for (Map.Entry entry : param.entrySet()) { + // try { + // if (entry.getValue() != null + // && entry.getValue().trim().length() > 0) { + // entity.addPart(entry.getKey(),new StringBody(entry.getValue(), + // Charset.forName(org.apache.http.protocol.HTTP.UTF_8))); + // } + // } catch (UnsupportedEncodingException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // } + // } + // // 添加文件参数 + // if (file != null && file.exists()) { + // entity.addPart("file", new FileBody(file)); + // } + // httpPost.setEntity(entity); + // try { + // HttpResponse response = httpClient.execute(httpPost); + // int stateCode = response.getStatusLine().getStatusCode(); + // if (stateCode == HttpStatus.SC_OK) { + // HttpEntity result = response.getEntity(); + // if (result != null) { + // InputStream is = result.getContent(); + // String str = stream2String(is); + // return str; + // } + // } + // } catch (ClientProtocolException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } catch (IllegalStateException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } catch (IOException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // return null; + // } + public static String stream2String(InputStream is) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + int len = -1; + byte[] bys = new byte[1024]; + try { + while ((len = is.read(bys)) != -1) { + baos.write(bys, 0, len); + } + return new String(baos.toByteArray()); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * + * @param url + * 下载路径 + * @return + */ + public static HttpResult download(String url) { + HttpGet httpGet = new HttpGet(url); + return execute(url, httpGet); + } + + /** + * 执行网络访问 retryHandler 重试机制,暂且不考虑,如有需要在打开 + * + * @param url + * @param requestBase + * @return + */ + private static HttpResult execute(String url, HttpRequestBase requestBase) { + boolean isHttps = url.startsWith("https://");// 判断是否需要采用https\ + AbstractHttpClient httpClient = HttpClientFactory.create(isHttps); +// httpClient = (AbstractHttpClient) WebClientDevWrapper.wrapClient(httpClient); + HttpContext httpContext = new SyncBasicHttpContext( + new BasicHttpContext()); + HttpRequestRetryHandler retryHandler = httpClient + .getHttpRequestRetryHandler();// 获取重试机制 + int retryCount = 0; + boolean retry = true; + while (retry) { + try { + HttpResponse response = httpClient.execute(requestBase,httpContext);// 访问网络 + if (response != null) { + return new HttpResult(response, httpClient, requestBase); + } + } catch (Exception e) { + IOException ioException = new IOException(e.getMessage()); + // retry = retryHandler.retryRequest(ioException, ++retryCount, + // httpContext);// 把错误异常交给重试机制,以判断是否需要采取从事 + retry = false; + e.printStackTrace(); + } + } + return null; + } + + /** http的返回结果的封装,可以直接从中获取返回的字符串或者流 */ + public static class HttpResult { + private HttpResponse mResponse; + private InputStream mIn; + private String mStr; + private HttpClient mHttpClient; + private HttpRequestBase mRequestBase; + + public HttpResult(HttpResponse response, HttpClient httpClient, + HttpRequestBase requestBase) { + mResponse = response; + mHttpClient = httpClient; + mRequestBase = requestBase; + } + + public int getCode() { + StatusLine status = mResponse.getStatusLine(); + return status.getStatusCode(); + } + + /** 从结果中获取字符串,一旦获取,会自动关流,并且把字符串保存,方便下次获取 */ + public String getString() { + if (!StringUtil.isEmpty(mStr)) { + return mStr; + } + InputStream inputStream = getInputStream(); + ByteArrayOutputStream out = null; + if (inputStream != null) { + try { + out = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024 * 4]; + int len = -1; + while ((len = inputStream.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + byte[] data = out.toByteArray(); + mStr = new String(data, "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } finally { + IoUtils.close(out); + close(); + } + } + return mStr; + } + + /** 获取流,需要使用完毕后调用close方法关闭网络连接 */ + public InputStream getInputStream() { + if (mIn == null && getCode() < 300) { + HttpEntity entity = mResponse.getEntity(); + try { + mIn = entity.getContent(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return mIn; + } + + /** 关闭网络连接 */ + public void close() { + if (mRequestBase != null) { + mRequestBase.abort(); + } + IoUtils.close(mIn); + if (mHttpClient != null) { + mHttpClient.getConnectionManager().closeExpiredConnections(); + } + } + } + /** http的返回结果的封装,可以直接从中获取返回的字符串或者流 */ + // public static class HttpResult { + // private HttpResponse mResponse; + // private InputStream mIn; + // private String mStr; + // private HttpClient mHttpClient; + // private HttpRequestBase mRequestBase; + // + // public HttpResult(HttpResponse response, HttpClient httpClient, + // HttpRequestBase requestBase) { + // mResponse = response; + // mHttpClient = httpClient; + // mRequestBase = requestBase; + // } + // + // public int getCode() { + // StatusLine status = mResponse.getStatusLine(); + // return status.getStatusCode(); + // } + // + // /** 从结果中获取字符串,一旦获取,会自动关流,并且把字符串保存,方便下次获取 */ + // public String getString() { + // if (!StringUtil.isEmpty(mStr)) { + // return mStr; + // } + // InputStream inputStream = getInputStream(); + // ByteArrayOutputStream out = null; + // if (inputStream != null) { + // try { + // out = new ByteArrayOutputStream(); + // byte[] buffer = new byte[1024 * 4]; + // int len = -1; + // while ((len = inputStream.read(buffer)) != -1) { + // out.write(buffer, 0, len); + // } + // byte[] data = out.toByteArray(); + // mStr = new String(data, "utf-8"); + // } catch (Exception e) { + // e.printStackTrace(); + // } finally { + // IoUtils.close(out); + // close(); + // } + // } + // return mStr; + // } + // + // /** 获取流,需要使用完毕后调用close方法关闭网络连接 */ + // public InputStream getInputStream() { + // if (mIn == null && getCode() < 300) { + // HttpEntity entity = mResponse.getEntity(); + // try { + // mIn = entity.getContent(); + // } catch (Exception e) { + // e.printStackTrace(); + // } + // } + // return mIn; + // } + // + // /** 关闭网络连接 */ + // public void close() { + // if (mRequestBase != null) { + // mRequestBase.abort(); + // } + // IoUtils.close(mIn); + // if (mHttpClient != null) { + // mHttpClient.getConnectionManager().closeExpiredConnections(); + // } + // } + // } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpRetry.java b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpRetry.java new file mode 100644 index 0000000..2ed1c7a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/http/HttpRetry.java @@ -0,0 +1,78 @@ +package cn.shangyu.gdxzExpert.http; + +import java.io.IOException; +import java.io.InterruptedIOException; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.util.HashSet; + +import javax.net.ssl.SSLHandshakeException; + +import org.apache.http.NoHttpResponseException; +import org.apache.http.client.HttpRequestRetryHandler; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.protocol.ExecutionContext; +import org.apache.http.protocol.HttpContext; + +import android.os.SystemClock; + +public class HttpRetry implements HttpRequestRetryHandler{ + // 重试休息的时间 + private static final int RETRY_SLEEP_TIME_MILLIS = 1000; + // 网络异常,继续 + private static HashSet> exceptionWhitelist = new HashSet>(); + // 用户异常,不继续(如,用户中断线程) + private static HashSet> exceptionBlacklist = new HashSet>(); + + static { + // 以下异常不需要重试,这样异常都是用于造成或者是一些重试也无效的异常 + exceptionWhitelist.add(NoHttpResponseException.class);// 连上了服务器但是没有Response + exceptionWhitelist.add(UnknownHostException.class);// host出了问题,一般是由于网络故障 + exceptionWhitelist.add(SocketException.class);// Socket问题,一般是由于网络故障 + // 以下异常可以重试 + exceptionBlacklist.add(InterruptedIOException.class);// 连接中断,一般是由于连接超时引起 + exceptionBlacklist.add(SSLHandshakeException.class);// SSL握手失败 + } + + private final int maxRetries; + + public HttpRetry(int maxRetries) { + this.maxRetries = maxRetries; + } + + public boolean retryRequest(IOException exception, int executionCount, HttpContext context) { + boolean retry = true; + // 请求是否到达 + Boolean b = (Boolean) context.getAttribute(ExecutionContext.HTTP_REQ_SENT); + boolean sent = (b != null && b.booleanValue()); + + if (executionCount > maxRetries) { + // 尝试次数超过用户定义的测试 + retry = false; + } else if (exceptionBlacklist.contains(exception.getClass())) { + // 线程被用户中断,则不继续尝试 + retry = false; + } else if (exceptionWhitelist.contains(exception.getClass())) { + // 出现的异常需要被重试 + retry = true; + } else if (!sent) { + // 请求没有到达 + retry = true; + } + // 如果需要重试 + if (retry) { + // 获取request + HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST); + // POST请求难道就不需要重试? + //retry = currentReq != null && !"POST".equals(currentReq.getMethod()); + retry = currentReq != null; + } + if (retry) { + // 休眠1秒钟后再继续尝试 + SystemClock.sleep(RETRY_SLEEP_TIME_MILLIS); + } else { + exception.printStackTrace(); + } + return retry; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromActivity.java new file mode 100644 index 0000000..100ce8e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromActivity.java @@ -0,0 +1,5 @@ +package cn.shangyu.gdxzExpert.http; + +public interface OnCallBackFromActivity { + void getmessage(Boolean receive_notice); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromNet.java b/app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromNet.java new file mode 100644 index 0000000..7a7c83f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/http/OnCallBackFromNet.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.http; + +import java.io.Serializable; +/** + * + * @author zhaodewei + * 结果的回调到 activity + * + */ +public interface OnCallBackFromNet extends Serializable{ + public void onCallbackFromThread(String resultJson); + public void onCallBackFromThread(String resultJson, int resultCode); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/listener/InteractiveListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/listener/InteractiveListener.java new file mode 100644 index 0000000..b97a5d4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/listener/InteractiveListener.java @@ -0,0 +1,5 @@ +package cn.shangyu.gdxzExpert.listener; + +public interface InteractiveListener { + void dosth(); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/manager/ThreadManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/manager/ThreadManager.java new file mode 100644 index 0000000..3b03751 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/manager/ThreadManager.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.manager; + +import java.util.concurrent.Executors; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor.AbortPolicy; +import java.util.concurrent.TimeUnit; +/** + * + * ThreadManager.java + * @author gaofei + * @date 2015-8-31 下午3:53:27 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:线程池管理 + */ +public class ThreadManager { + private static ThreadProxyPool threadProxyPool; + private static Object object = new Object(); + + public static ThreadProxyPool getThreadProxyPool(){ + synchronized (object) { + if(threadProxyPool == null){ + threadProxyPool = new ThreadProxyPool(10,10, 5L); + } + return threadProxyPool; + } + } + + public static class ThreadProxyPool{ + private int corePoolSize; + private int maximumPoolSize; + private long keepAliveTime; + private ThreadPoolExecutor threadPoolExecutor; + public ThreadProxyPool(int corePoolSize,int maximumPoolSize,long keepAliveTime) { + this.corePoolSize = corePoolSize; + this.maximumPoolSize = maximumPoolSize; + this.keepAliveTime = keepAliveTime; + } + //在子线程中执行任务的方法 + public void execute(Runnable runnable){ + if(runnable == null){ + return ; + } + if(threadPoolExecutor==null || threadPoolExecutor.isShutdown()){ + threadPoolExecutor = new ThreadPoolExecutor( + //核心线程数 + corePoolSize, + //最大线程数 + maximumPoolSize, + //线程存活时间 + keepAliveTime, + //存活时间单位 + TimeUnit.MILLISECONDS, + //存放任务的队列 + new LinkedBlockingQueue(), + //创建线程工程 + Executors.defaultThreadFactory(), + //异常处理方式 + new AbortPolicy()); + } + + threadPoolExecutor.execute(runnable); + } + + public void cancel(Runnable runnable){ + if(runnable!=null && threadPoolExecutor!=null && !threadPoolExecutor.isShutdown()){ + //从线程池中将任务移除出去 + threadPoolExecutor.getQueue().remove(runnable); + } + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoCache.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoCache.java new file mode 100644 index 0000000..cc158c0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoCache.java @@ -0,0 +1,66 @@ +package cn.shangyu.gdxzExpert.netease; + +import android.content.Context; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; + +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by jezhee on 2/20/15. + */ +public class DemoCache { + + private static Context context; + + private static String account; + + private static StatusBarNotificationConfig notificationConfig; + + public static void clear() { + account = null; + } + + public static String getAccount() { + return account; + } + + private static boolean mainTaskLaunching; + + public static void setAccount(String account) { + DemoCache.account = account; + NimUIKit.setAccount(account); +// AVChatKit.setAccount(account); +// RTSKit.setAccount(account); + } + + public static void setNotificationConfig(StatusBarNotificationConfig notificationConfig) { + DemoCache.notificationConfig = notificationConfig; + } + + public static StatusBarNotificationConfig getNotificationConfig() { + return notificationConfig; + } + + public static Context getContext() { + return UIUtils.getContext(); + } + + public static void setContext(Context context) { + DemoCache.context = context.getApplicationContext(); + +// AVChatKit.setContext(context); +// RTSKit.setContext(context); + } + + public static void setMainTaskLaunching(boolean mainTaskLaunching) { + DemoCache.mainTaskLaunching = mainTaskLaunching; + +// AVChatKit.setMainTaskLaunching(mainTaskLaunching); + } + + public static boolean isMainTaskLaunching() { + return mainTaskLaunching; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoPrivatizationConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoPrivatizationConfig.java new file mode 100644 index 0000000..fca3d14 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/DemoPrivatizationConfig.java @@ -0,0 +1,284 @@ +package cn.shangyu.gdxzExpert.netease; + +import android.content.Context; +import android.content.SharedPreferences; +import androidx.annotation.NonNull; +import android.text.TextUtils; + +import com.netease.nim.uikit.common.util.collection.CollectionUtil; +import com.netease.nimlib.push.net.lbs.IPVersion; +import com.netease.nimlib.push.packet.asymmetric.AsymmetricType; +import com.netease.nimlib.push.packet.symmetry.SymmetryType; +import com.netease.nimlib.sdk.NimHandshakeType; +import com.netease.nimlib.sdk.ServerAddresses; + +import org.json.JSONException; +import org.json.JSONObject; + + + +/** + * 网易云信私有化配置项 + */ +public class DemoPrivatizationConfig { + + /// BASIC + private static final String KEY_APP_KEY = "appkey"; + + private static final String KEY_MODULE = "module"; + + private static final String KEY_VERSION = "version"; + + private static final String KEY_HAND_SHAKE_TYPE = "hand_shake_type"; + + /// MAIN LINK + private static final String KEY_LBS = "lbs"; + + private static final String KEY_LINK = "link"; + + /// NOS UPLOAD + private static final String KEY_HTTPS_ENABLED = "https_enabled"; + + private static final String KEY_NOS_LBS = "nos_lbs"; + + private static final String KEY_NOS_UPLOADER = "nos_uploader"; + + private static final String KEY_NOS_UPLOADER_HOST = "nos_uploader_host"; + + /// NOS DOWNLOAD + private static final String KEY_NOS_DOWNLOADER = "nos_downloader"; + + private static final String KEY_NOS_ACCELERATE = "nos_accelerate"; + + private static final String KEY_NOS_ACCELERATE_HOST = "nos_accelerate_host"; + + private static final String KEY_NOS_ACCELERATE_HOST_LIST = "nos_accelerate_host_list"; + + private static final String KEY_NOS_CDN_ENABLE = "nos_cdn_enable"; + + /// SERVER + private static final String KEY_NT_SERVER = "nt_server"; + + // 握手协议(国密) + private static final String KEY_DEDICATED_CLUSTE_FLAG = "dedicated_cluste_flag"; + private static final String KEY_NEGO_KEY_NECA = "nego_key_neca"; + private static final String KEY_NEGO_KEY_ENCA_KEY_VERSION = "nego_key_enca_key_version"; + private static final String KEY_NEGO_KEY_ENCA_KEY_PARTA = "nego_key_enca_key_parta"; + private static final String KEY_NEGO_KEY_ENCA_KEY_PARTB = "nego_key_enca_key_partb"; + private static final String KEY_COMM_ENCA = "comm_enca"; + + // IM IPv6 + private static final String KEY_LINK_IPV6 = "link_ipv6"; + private static final String KEY_IP_PROTOCOL_VERSION = "ip_protocol_version"; + private static final String KEY_PROBE_IPV4_URL = "probe_ipv4_url"; + private static final String KEY_PROBE_IPV6_URL = "probe_ipv6_url"; + + + private static final String SHARE_NAME = "nim_demo_private_config"; + + private static final String KEY_CONFIG_ENABLE = "private_config_enable"; + + private static final String KEY_CONFIG_JSON = "private_config_json"; + + + private static final String KEY_CHAT_ROOM_LIST_URL = "chatroomDemoListUrl"; + + + private static final String BUCKET_NAME_PLACE_HOLDER = "{bucket}"; + + private static final String OBJECT_PLACE_HOLDER = "{object}"; + + + private static final String CONFIG_URL = "config_private_url"; + + private static final String YSF_DEFALUT_URL_LABEL = "ysf_defalut_url_label"; + + private static final String YSF_DA_URL_LABEL = "ysf_da_url_label"; + + private static String appKey; + + public static String getAppKey(Context context) { + if (isPrivateDisable(context)) { + return null; + } + if (appKey != null) { + return appKey; + } + JSONObject jsonObject = getConfig(context); + if (jsonObject == null) { + return null; + } + try { + appKey = jsonObject.getString(KEY_APP_KEY); + } catch (JSONException e) { + e.printStackTrace(); + } + return appKey; + } + + + public static ServerAddresses getServerAddresses(Context context) { + if (isPrivateDisable(context)) { + return null; + } + return parseAddresses(getConfig(context)); + } + + + public static void updateConfig(String config, Context context) { + if (TextUtils.isEmpty(config)) { + return; + } + getSP(context).edit().putString(KEY_CONFIG_JSON, config).apply(); + } + + + public static String getChatListRoomUrl(Context context) { + return getConfig(context).optString(KEY_CHAT_ROOM_LIST_URL); + } + + public static String getConfigUrl(Context context) { + return getSP(context).getString(CONFIG_URL, null); + } + + public static void saveConfigUrl(Context context, String url) { + getSP(context).edit().putString(CONFIG_URL, url).apply(); + } + + public static void saveYsfDefaultUrl(Context context, String ysfDefaultUrl) { + getSP(context).edit().putString(YSF_DEFALUT_URL_LABEL, ysfDefaultUrl).apply(); + } + + public static void saveYsfDaUrl(Context context, String ysfDaUrl) { + getSP(context).edit().putString(YSF_DA_URL_LABEL, ysfDaUrl).apply(); + } + + public static String getYsfDefalutUrlLabel(Context context) { + return getSP(context).getString(YSF_DEFALUT_URL_LABEL, null); + } + + public static String getYsfDaUrlLabel(Context context) { + return getSP(context).getString(YSF_DA_URL_LABEL, null); + } + + public static void enablePrivateConfig(boolean enable, Context context) { + getSP(context).edit().putBoolean(KEY_CONFIG_ENABLE, enable).apply(); + } + + public static boolean isPrivateDisable(Context context) { + return !getSP(context).getBoolean(KEY_CONFIG_ENABLE, false); + } + + public static JSONObject getConfig(Context context) { + String configStr = getSP(context).getString(KEY_CONFIG_JSON, null); + if (TextUtils.isEmpty(configStr)) { + return null; + } + return parse(configStr); + } + + public static ServerAddresses checkConfigAndModifyConfig(String config) { + JSONObject jsonObject = parse(config); + return parseAddresses(jsonObject); + } + + private static ServerAddresses parseAddresses(JSONObject jsonObject) { + if (jsonObject == null) { + return null; + } + ServerAddresses addresses = new ServerAddresses(); + addresses.handshakeType = NimHandshakeType.value(jsonObject.optInt(KEY_HAND_SHAKE_TYPE, NimHandshakeType.V1.getValue())); + addresses.module = jsonObject.optString(KEY_MODULE); + addresses.publicKeyVersion = jsonObject.optInt(KEY_VERSION, 0); + addresses.lbs = jsonObject.optString(KEY_LBS); + addresses.defaultLink = jsonObject.optString(KEY_LINK); + addresses.nosUploadLbs = jsonObject.optString(KEY_NOS_LBS); + addresses.nosUploadDefaultLink = jsonObject.optString(KEY_NOS_UPLOADER); + addresses.nosUpload = jsonObject.optString(KEY_NOS_UPLOADER_HOST); + addresses.nosSupportHttps = jsonObject.optBoolean(KEY_HTTPS_ENABLED, false); + addresses.nosDownloadUrlFormat = jsonObject.optString(KEY_NOS_DOWNLOADER); + addresses.nosDownload = jsonObject.optString(KEY_NOS_ACCELERATE_HOST); + addresses.nosDownloadSet = CollectionUtil.createStringSetFromJSONArray(jsonObject.optJSONArray(KEY_NOS_ACCELERATE_HOST_LIST)); + addresses.nosCdnEnable = jsonObject.optBoolean(KEY_NOS_CDN_ENABLE); + addresses.nosAccess = jsonObject.optString(KEY_NOS_ACCELERATE); + addresses.ntServerAddress = jsonObject.optString(KEY_NT_SERVER); + addresses.dedicatedClusteFlag = jsonObject.optInt(KEY_DEDICATED_CLUSTE_FLAG); + addresses.negoKeyNeca = AsymmetricType.value(jsonObject.optInt(KEY_NEGO_KEY_NECA, AsymmetricType.RSA.getValue())); + addresses.negoKeyEncaKeyVersion = jsonObject.optInt(KEY_NEGO_KEY_ENCA_KEY_VERSION); + addresses.negoKeyEncaKeyParta = jsonObject.optString(KEY_NEGO_KEY_ENCA_KEY_PARTA); + addresses.negoKeyEncaKeyPartb = jsonObject.optString(KEY_NEGO_KEY_ENCA_KEY_PARTB); + addresses.commEnca = SymmetryType.value(jsonObject.optInt(KEY_COMM_ENCA, SymmetryType.RC4.getValue())); + addresses.linkIpv6 = jsonObject.optString(KEY_LINK_IPV6); + addresses.ipProtocolVersion = IPVersion.value(jsonObject.optInt(KEY_IP_PROTOCOL_VERSION, IPVersion.IPV4.getValue())); + addresses.probeIpv4Url = jsonObject.optString(KEY_PROBE_IPV4_URL); + addresses.probeIpv6Url = jsonObject.optString(KEY_PROBE_IPV6_URL); + appKey = jsonObject.optString(KEY_APP_KEY); + autoAdjust(addresses); + checkValid(addresses); + return addresses; + } + + private static void checkValid(ServerAddresses addresses) { + if (TextUtils.isEmpty(addresses.lbs)) { + throw new IllegalArgumentException("ServerAddresses lbs is null"); + } + if (TextUtils.isEmpty(addresses.nosUploadLbs)) { + throw new IllegalArgumentException("ServerAddresses nosUploadLbs is null"); + } + if (TextUtils.isEmpty(addresses.defaultLink)) { + throw new IllegalArgumentException("ServerAddresses defaultLink is null"); + } + if (TextUtils.isEmpty(addresses.nosUploadDefaultLink)) { + throw new IllegalArgumentException("ServerAddresses nosUploadDefaultLink is null"); + } + if (TextUtils.isEmpty(addresses.nosDownloadUrlFormat)) { + throw new IllegalArgumentException("ServerAddresses nosDownloadUrlFormat is null"); + } + if (!checkFormatValid(addresses.nosDownloadUrlFormat)) { + throw new IllegalArgumentException("ServerAddresses nosDownloadUrlFormat is illegal"); + } + if (addresses.nosSupportHttps && TextUtils.isEmpty(addresses.nosUpload)) { + throw new IllegalArgumentException("ServerAddresses nosSupportHttps is true , but nosUpload is null"); + } + } + + /** + * 自动调整字段,避免去改其他地方的逻辑 + */ + private static void autoAdjust(@NonNull ServerAddresses addresses) { + addresses.module = TextUtils.isEmpty(addresses.module) ? null : addresses.module; + addresses.lbs = TextUtils.isEmpty(addresses.lbs) ? null : addresses.lbs; + addresses.defaultLink = TextUtils.isEmpty(addresses.defaultLink) ? null : addresses.defaultLink; + addresses.nosUploadLbs = TextUtils.isEmpty(addresses.nosUploadLbs) ? null : addresses.nosUploadLbs; + addresses.nosUploadDefaultLink = TextUtils.isEmpty(addresses.nosUploadDefaultLink) ? null : addresses.nosUploadDefaultLink; + addresses.nosUpload = TextUtils.isEmpty(addresses.nosUpload) ? null : addresses.nosUpload; + addresses.nosDownloadUrlFormat = TextUtils.isEmpty(addresses.nosDownloadUrlFormat) ? null : addresses.nosDownloadUrlFormat; + addresses.nosDownload = TextUtils.isEmpty(addresses.nosDownload) ? null : addresses.nosDownload; + addresses.nosAccess = TextUtils.isEmpty(addresses.nosAccess) ? null : addresses.nosAccess; + addresses.ntServerAddress = TextUtils.isEmpty(addresses.ntServerAddress) ? null : addresses.ntServerAddress; + addresses.negoKeyEncaKeyParta = TextUtils.isEmpty(addresses.negoKeyEncaKeyParta) ? null : addresses.negoKeyEncaKeyParta; + addresses.negoKeyEncaKeyPartb = TextUtils.isEmpty(addresses.negoKeyEncaKeyPartb) ? null : addresses.negoKeyEncaKeyPartb; + addresses.linkIpv6 = TextUtils.isEmpty(addresses.linkIpv6) ? null : addresses.linkIpv6; + addresses.probeIpv4Url = TextUtils.isEmpty(addresses.probeIpv4Url) ? null : addresses.probeIpv4Url; + addresses.probeIpv6Url = TextUtils.isEmpty(addresses.probeIpv6Url) ? null : addresses.probeIpv6Url; + appKey = TextUtils.isEmpty(appKey) ? null : appKey; + } + + private static SharedPreferences getSP(Context context) { + return context.getSharedPreferences(SHARE_NAME, Context.MODE_PRIVATE); + } + + private static JSONObject parse(String json) { + try { + return new JSONObject(json); + } catch (JSONException e) { + return null; + } + } + + + private static boolean checkFormatValid(String format) { + return !TextUtils.isEmpty(format) && format.contains(BUCKET_NAME_PLACE_HOLDER) && format.contains( + OBJECT_PLACE_HOLDER); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/NIMInitManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/NIMInitManager.java new file mode 100644 index 0000000..a6197d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/NIMInitManager.java @@ -0,0 +1,126 @@ +package cn.shangyu.gdxzExpert.netease; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.NimStrings; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.model.BroadcastMessage; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.event.OnlineStateEventManager; + +/** + * Created by hzchenkang on 2017/9/26. + * 用于初始化时,注册全局的广播、云信观察者等等云信相关业务 + */ + +public class NIMInitManager { + + private static final String TAG = "NIMInitManager"; + + private NIMInitManager() { + } + + private static class InstanceHolder { + static NIMInitManager receivers = new NIMInitManager(); + } + + public static NIMInitManager getInstance() { + return InstanceHolder.receivers; + } + + public void init(boolean register) { + // 注册通知消息过滤器 + registerIMMessageFilter(); + + // 注册语言变化监听广播 + registerLocaleReceiver(register); + + // 注册全局云信sdk 观察者 + registerGlobalObservers(register); + + // 初始化在线状态事件 + OnlineStateEventManager.init(); + } + + private void registerGlobalObservers(boolean register) { + // 注册云信全员广播 + registerBroadcastMessages(register); + } + + private void registerLocaleReceiver(boolean register) { + if (register) { + updateLocale(); + IntentFilter filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED); + DemoCache.getContext().registerReceiver(localeReceiver, filter); + } else { + DemoCache.getContext().unregisterReceiver(localeReceiver); + } + } + + private BroadcastReceiver localeReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)) { + updateLocale(); + } + } + }; + + private void updateLocale() { + Context context = DemoCache.getContext(); + NimStrings strings = new NimStrings(); + strings.status_bar_multi_messages_incoming = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_multi_messages_incoming); + strings.status_bar_image_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_image_message); + strings.status_bar_audio_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_audio_message); + strings.status_bar_custom_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_custom_message); + strings.status_bar_file_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_file_message); + strings.status_bar_location_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_location_message); + strings.status_bar_notification_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_notification_message); + strings.status_bar_ticker_text = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_ticker_text); + strings.status_bar_unsupported_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_unsupported_message); + strings.status_bar_video_message = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_video_message); + strings.status_bar_hidden_message_content = context.getString(com.netease.nim.uikit.R.string.nim_status_bar_hidden_msg_content); + NIMClient.updateStrings(strings); + } + + /** + * 通知消息过滤器(如果过滤则该消息不存储不上报) + */ + private void registerIMMessageFilter() { + NIMClient.getService(MsgService.class).registerIMMessageFilter(message -> { +// if (UserPreferences.getMsgIgnore() && message.getAttachment() != null) { +//// if (message.getAttachment() instanceof UpdateTeamAttachment) { +//// UpdateTeamAttachment attachment = (UpdateTeamAttachment) message.getAttachment(); +//// for (Map.Entry field : attachment.getUpdatedFields().entrySet()) { +//// if (field.getKey() == TeamFieldEnum.ICON) { +//// return true; +//// } +//// } +//// } +//// else if (message.getAttachment() instanceof AVChatAttachment) { +//// return false;// 是否过滤音视频消息 +//// } +// } + return false; + }); + } + + /** + * 注册云信全服广播接收器 + * + * @param register + */ + private void registerBroadcastMessages(boolean register) { + NIMClient.getService(MsgServiceObserve.class).observeBroadcastMessage( + (Observer) broadcastMessage -> ToastHelper.showToast(DemoCache.getContext(), "收到全员广播 :" + broadcastMessage.getContent()), register); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/NimSDKOptionConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/NimSDKOptionConfig.java new file mode 100644 index 0000000..470fdc2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/NimSDKOptionConfig.java @@ -0,0 +1,223 @@ +package cn.shangyu.gdxzExpert.netease; + +import android.content.Context; +import android.graphics.Color; +import android.media.RingtoneManager; +import android.os.Environment; +import android.text.TextUtils; + +import com.netease.nim.uikit.api.wrapper.MessageRevokeTip; +import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderThumbBase; +import com.netease.nimlib.sdk.NosTokenSceneConfig; +import com.netease.nimlib.sdk.NotificationFoldStyle; +import com.netease.nimlib.sdk.SDKOptions; +import com.netease.nimlib.sdk.ServerAddresses; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.mixpush.MixPushConfig; +import com.netease.nimlib.sdk.msg.MessageNotifierCustomization; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import java.io.IOException; + +import cn.shangyu.gdxzExpert.netease.config.NimUserInfoProvider; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; + +//import com.netease.nim.demo.config.preference.UserPreferences; +//import com.netease.nim.demo.main.activity.WelcomeActivity; + +/** + * Created by hzchenkang on 2017/9/26. + *

+ * 云信sdk 自定义的SDK选项设置 + */ + +public class NimSDKOptionConfig { + + public static SDKOptions getSDKOptions(Context context) { + SDKOptions options = new SDKOptions(); + // 如果将新消息通知提醒托管给SDK完成,需要添加以下配置。 + initStatusBarNotificationConfig(options); + // 配置 APP 保存图片/语音/文件/log等数据的目录 + options.sdkStorageRootPath = getAppCacheDir(context) + "/nim"; // 可以不设置,那么将采用默认路径 + // 配置是否需要预下载附件缩略图 + options.preloadAttach = true; + // 配置附件缩略图的尺寸大小 + options.thumbnailSize = MsgViewHolderThumbBase.getImageMaxEdge(); + // 通知栏显示用户昵称和头像 + options.userInfoProvider = new NimUserInfoProvider(DemoCache.getContext()); + // 定制通知栏提醒文案(可选,如果不定制将采用SDK默认文案) + options.messageNotifierCustomization = messageNotifierCustomization; + // 在线多端同步未读数 + options.sessionReadAck = true; + // 动图的缩略图直接下载原图 + options.animatedImageThumbnailEnabled = true; + // 采用异步加载SDK + options.asyncInitSDK = true; + // 是否是弱IM场景 + options.reducedIM = false; + // 是否检查manifest 配置,调试阶段打开,调试通过之后请关掉 + options.checkManifestConfig = false; + // 是否启用群消息已读功能,默认关闭 + options.enableTeamMsgAck = true; + // 打开消息撤回未读数-1的开关 + options.shouldConsiderRevokedMessageUnreadCount = true; + // 云信私有化配置项 + configServerAddress(options, context); + options.mixPushConfig = buildMixPushConfig(); + // options.mNosTokenSceneConfig = createNosTokenScene(); + options.loginCustomTag = "登录自定义字段"; + options.useXLog = false; + // 会话置顶是否漫游 + options.notifyStickTopSession = true; + + return options; + } + + public static final String TEST_NOS_SCENE_KEY = "test_nos_scene_key"; + + /** + * nos 场景配置 + */ + private static NosTokenSceneConfig createNosTokenScene() { + NosTokenSceneConfig nosTokenSceneConfig = new NosTokenSceneConfig(); + nosTokenSceneConfig.updateDefaultIMSceneExpireTime(1); + nosTokenSceneConfig.updateDefaultProfileSceneExpireTime(2); + // scene key 建议常量化,这样使用起来比较方便 + nosTokenSceneConfig.appendCustomScene(TEST_NOS_SCENE_KEY, 4); + return nosTokenSceneConfig; + } + + /** + * 配置 APP 保存图片/语音/文件/log等数据的目录 + * 这里示例用SD卡的应用扩展存储目录 + */ + public static String getAppCacheDir(Context context) { + String storageRootPath = null; + try { + // SD卡应用扩展存储区(APP卸载后,该目录下被清除,用户也可以在设置界面中手动清除),请根据APP对数据缓存的重要性及生命周期来决定是否采用此缓存目录. + // 该存储区在API 19以上不需要写权限,即可配置 + if (context.getExternalCacheDir() != null) { + storageRootPath = context.getExternalCacheDir().getCanonicalPath(); + } + } catch (IOException e) { + e.printStackTrace(); + } + if (TextUtils.isEmpty(storageRootPath)) { + // SD卡应用公共存储区(APP卸载后,该目录不会被清除,下载安装APP后,缓存数据依然可以被加载。SDK默认使用此目录),该存储区域需要写权限! + storageRootPath = Environment.getExternalStorageDirectory() + "/" + DemoCache.getContext().getPackageName(); + } + return storageRootPath; + } + + private static void configServerAddress(final SDKOptions options, Context context) { + ServerAddresses serverConfig = DemoPrivatizationConfig.getServerAddresses(context); + if (serverConfig != null) { + options.serverConfig = serverConfig; + } + String appKey = DemoPrivatizationConfig.getAppKey(context); + if (!TextUtils.isEmpty(appKey)) { + options.appKey = appKey; + } + } + + private static void initStatusBarNotificationConfig(SDKOptions options) { + // load 应用的状态栏配置 + StatusBarNotificationConfig config = loadStatusBarNotificationConfig(); + // load 用户的 StatusBarNotificationConfig 设置项 + StatusBarNotificationConfig userConfig = UserPreferences.getStatusConfig(); +// StatusBarNotificationConfig userConfig =null; + if (userConfig == null) { + userConfig = config; + } else { + // 新增的 UserPreferences 存储项更新,兼容 3.4 及以前版本 + // 新增 notificationColor 存储,兼容3.6以前版本 + // APP默认 StatusBarNotificationConfig 配置修改后,使其生效 + userConfig.notificationEntrance = config.notificationEntrance; + userConfig.notificationFolded = config.notificationFolded; + userConfig.notificationFoldStyle = config.notificationFoldStyle; + userConfig.notificationColor = config.notificationColor; + } + // 持久化生效 + UserPreferences.setStatusConfig(userConfig); + // SDK statusBarNotificationConfig 生效 + options.statusBarNotificationConfig = userConfig; + } + + // 这里开发者可以自定义该应用初始的 StatusBarNotificationConfig + private static StatusBarNotificationConfig loadStatusBarNotificationConfig() { + StatusBarNotificationConfig config = new StatusBarNotificationConfig(); + // 点击通知需要跳转到的界面 +// config.notificationEntrance = NewPatientActivity.class; +// config.notificationSmallIconId = R.drawable.ic_stat_notify_msg; +// config.notificationColor = DemoCache.getContext().getResources().getColor(R.color.color_blue_3a9efb); + // 通知铃声的uri字符串 +// config.notificationSound = "android.resource://com.netease.nim.demo/raw/msg"; + config.notificationSound= String.valueOf(RingtoneManager.getActualDefaultRingtoneUri(DemoCache.getContext(), RingtoneManager.TYPE_NOTIFICATION)); + config.ring=true; + config.notificationFolded = true; + // config.notificationFolded = false; + config.notificationFoldStyle = NotificationFoldStyle.ALL; + config.downTimeEnableNotification = true; + // 呼吸灯配置 + config.ledARGB = Color.GREEN; + config.ledOnMs = 1000; + config.ledOffMs = 1500; + // 是否APP ICON显示未读数红点(Android O有效) + config.showBadge = true; + // save cache,留做切换账号备用 + DemoCache.setNotificationConfig(config); + return config; + } + + private static MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() { + + @Override + public String makeNotifyContent(String nick, IMMessage message) { + return null; // 采用SDK默认文案 + } + + @Override + public String makeTicker(String nick, IMMessage message) { + return null; // 采用SDK默认文案 + } + + @Override + public String makeRevokeMsgTip(String revokeAccount, IMMessage item) { + return MessageRevokeTip.getRevokeTipContent(item, revokeAccount); + } + }; + + private static MixPushConfig buildMixPushConfig() { + // 第三方推送配置 + MixPushConfig config = new MixPushConfig(); + // 小米推送 + config.xmAppId = "2882303761517470793"; + config.xmAppKey = "5431747048793"; + config.xmCertificateName = "Expert_Mi_Push"; + + + // 华为推送 + config.hwAppId = "10526652"; + config.hwCertificateName = "Expert_Hw_push_f"; + + + // 魅族推送 + config.mzAppId = "111710"; + config.mzAppKey = "282bdd3a37ec4f898f47c5bbbf9d2369"; + config.mzCertificateName = "DEMO_MZ_PUSH"; + + // fcm 推送,适用于海外用户,不使用fcm请不要配置 + config.fcmCertificateName = "DEMO_FCM_PUSH"; + + + // vivo推送 + config.vivoCertificateName = "Expert_Vi_Push"; + + // oppo推送 + config.oppoAppId = "3364888"; + config.oppoAppKey = "75D5Vqsg63wok0S0w4SKog0w8"; + config.oppoAppSercet = "416a4f5eF822ddcB73B627Cc310636D7"; + config.oppoCertificateName = "Expert_Op_Push"; + return config; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/activity/MessageInfoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/activity/MessageInfoActivity.java new file mode 100644 index 0000000..9b41845 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/activity/MessageInfoActivity.java @@ -0,0 +1,181 @@ +package cn.shangyu.gdxzExpert.netease.activity; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.wrapper.NimToolBarOptions; +import com.netease.nim.uikit.business.contact.selector.activity.ContactSelectActivity; +import com.netease.nim.uikit.business.team.helper.TeamHelper; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.activity.ToolBarOptions; +import com.netease.nim.uikit.common.activity.UI; +import com.netease.nim.uikit.common.ui.imageview.HeadImageView; +import com.netease.nim.uikit.common.ui.widget.SwitchButton; +import com.netease.nim.uikit.common.util.sys.NetworkUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.friend.FriendService; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.contact.UserProfileActivity; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; + +/** + * Created by hzxuwen on 2015/10/13. + */ +public class MessageInfoActivity extends UI { + private final static String EXTRA_ACCOUNT = "EXTRA_ACCOUNT"; + private static final int REQUEST_CODE_NORMAL = 1; + // data + private String account; + // view + private SwitchButton switchButton; + + public static void startActivity(Context context, String account) { + Intent intent = new Intent(); + intent.setClass(context, MessageInfoActivity.class); + intent.putExtra(EXTRA_ACCOUNT, account); + context.startActivity(intent); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.message_info_activity); + + ToolBarOptions options = new NimToolBarOptions(); + options.titleId = com.netease.nim.uikit.R.string.message_info; + options.navigateId = com.netease.nim.uikit.R.drawable.actionbar_dark_back_icon; + setToolBar(R.id.toolbar, options); + + account = getIntent().getStringExtra(EXTRA_ACCOUNT); + findViews(); + } + + @Override + protected void onResume() { + super.onResume(); + updateSwitchBtn(); + } + + private void findViews() { + HeadImageView userHead = (HeadImageView) findViewById(R.id.user_layout).findViewById(com.netease.nim.uikit.R.id.imageViewHeader); + TextView userName = (TextView) findViewById(R.id.user_layout).findViewById(com.netease.nim.uikit.R.id.textViewName); + userHead.loadBuddyAvatar(account); + userName.setText(UserInfoHelper.getUserDisplayName(account)); + userHead.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + openUserProfile(); + } + }); + + ((TextView) findViewById(R.id.create_team_layout).findViewById(com.netease.nim.uikit.R.id.textViewName)).setText(com.netease.nim.uikit.R.string.create_normal_team); + HeadImageView addImage = (HeadImageView) findViewById(R.id.create_team_layout).findViewById(com.netease.nim.uikit.R.id.imageViewHeader); + addImage.setBackgroundResource(com.netease.nim.uikit.R.drawable.nim_team_member_add_selector); + addImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createTeamMsg(); + } + }); + + ((TextView) findViewById(R.id.toggle_layout).findViewById(com.netease.nim.uikit.R.id.user_profile_title)).setText(com.netease.nim.uikit.R.string.msg_notice); + switchButton = (SwitchButton) findViewById(R.id.toggle_layout).findViewById(com.netease.nim.uikit.R.id.user_profile_toggle); + switchButton.setOnChangedListener(onChangedListener); + } + + private void updateSwitchBtn() { + boolean notice = NIMClient.getService(FriendService.class).isNeedMessageNotify(account); + switchButton.setCheck(notice); + } + + private SwitchButton.OnChangedListener onChangedListener = new SwitchButton.OnChangedListener() { + @Override + public void OnChanged(View v, final boolean checkState) { + if (!NetworkUtil.isNetAvailable(MessageInfoActivity.this)) { + ToastHelper.showToast(MessageInfoActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + switchButton.setCheck(!checkState); + return; + } + + NIMClient.getService(FriendService.class).setMessageNotify(account, checkState).setCallback(new RequestCallback() { + @Override + public void onSuccess(Void param) { + if (checkState) { + ToastHelper.showToast(MessageInfoActivity.this, "开启消息提醒成功"); + } else { + ToastHelper.showToast(MessageInfoActivity.this, "关闭消息提醒成功"); + } + } + + @Override + public void onFailed(int code) { + if (code == 408) { + ToastHelper.showToast(MessageInfoActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + } else { + ToastHelper.showToast(MessageInfoActivity.this, "on failed:" + code); + } + switchButton.setCheck(!checkState); + } + + @Override + public void onException(Throwable exception) { + + } + }); + } + }; + + private void openUserProfile() { + UserProfileActivity.start(this, account); + } + + /** + * 创建群聊 + */ + private void createTeamMsg() { + ArrayList memberAccounts = new ArrayList<>(); + memberAccounts.add(account); + ContactSelectActivity.Option option = TeamHelper.getCreateContactSelectOption(memberAccounts, 50); + NimUIKit.startContactSelector(this, option, REQUEST_CODE_NORMAL);// 创建群 + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == Activity.RESULT_OK) { + if (requestCode == REQUEST_CODE_NORMAL) { + final ArrayList selected = data.getStringArrayListExtra(ContactSelectActivity.RESULT_DATA); +// if (selected != null && !selected.isEmpty()) { +// TeamCreateHelper.createNormalTeam(MessageInfoActivity.this, selected, true, new RequestCallback() { +// @Override +// public void onSuccess(CreateTeamResult param) { +// finish(); +// } +// +// @Override +// public void onFailed(int code) { +// +// } +// +// @Override +// public void onException(Throwable exception) { +// +// } +// }); +// } else { + ToastHelper.showToast(DemoCache.getContext(), "请选择至少一个联系人!"); + } + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/bagder/Badger.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/bagder/Badger.java new file mode 100644 index 0000000..9708efc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/bagder/Badger.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.netease.bagder; + +import android.os.Handler; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.framework.infra.Handlers; + +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import me.leolin.shortcutbadger.ShortcutBadger; + +/** + * APP图标未读数红点更新接口 + * https://github.com/leolin310148/ShortcutBadger + *

+ * Created by huangjun on 2017/7/25. + */ + +public class Badger { + + private static final String TAG = "Badger"; + + private static Handler handler; + + private static boolean support = true; + public static volatile int unreadFollow= SharePrefUtil.getInt(UIUtils.getContext(),"unreadFollow",0); + public static void saveUnreadFollow() + { + SharePrefUtil.saveInt(UIUtils.getContext(),"unreadFollow",unreadFollow); + } + + public static void updateBadgerCount(final int unreadCount) { + if (!support) { + return; // O版本及以上不再支持 + } + if (handler == null) { + handler = Handlers.sharedInstance().newHandler("Badger"); + } + handler.removeCallbacksAndMessages(null); + handler.postDelayed(new Runnable() { + + @Override + public void run() { + int badgerCount = unreadCount+unreadFollow; + if (badgerCount < 0) { + badgerCount = 0; + } else if (badgerCount > 99) { + badgerCount = 99; + } + boolean res = ShortcutBadger.applyCount(NimUIKit.getContext(), badgerCount); + if (!res) { + support = false; // 如果失败就不要再使用了! + } +// Log.i(TAG, "update badger count " + (res ? "success" : "failed")); + } + }, 200); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigCommonRecentViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigCommonRecentViewHolder.java new file mode 100644 index 0000000..4eb6126 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigCommonRecentViewHolder.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.netease.big; + + +import android.text.TextUtils; + +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseQuickAdapter; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +public class BigCommonRecentViewHolder extends BigRecentViewHolder { + + BigCommonRecentViewHolder(BaseQuickAdapter adapter) { + super(adapter); + } + + @Override + protected String getContent(RecentContact recent) { + return descOfMsg(recent); + } + + @Override + protected String getOnlineStateContent(RecentContact recent) { + if (recent.getSessionType() == SessionTypeEnum.P2P && NimUIKitImpl.enableOnlineState()) { + return NimUIKitImpl.getOnlineStateContentProvider().getSimpleDisplay(recent.getContactId()); + } else { + return super.getOnlineStateContent(recent); + } + } + + String descOfMsg(RecentContact recent) { + if(recent.getExtension()!=null&&recent.getExtension().get(Extras.CAO_GAO)!=null + && !TextUtils.isEmpty(recent.getExtension().get(Extras.CAO_GAO).toString()) && !"".equalsIgnoreCase(recent.getExtension().get(Extras.CAO_GAO).toString()) + && !"null".equalsIgnoreCase(recent.getExtension().get(Extras.CAO_GAO).toString())) + { + return Extras.CAO_GAO_TI_HUAN+recent.getExtension().get(Extras.CAO_GAO); + } + else if (recent.getMsgType() == MsgTypeEnum.text) { + return recent.getContent(); + } else if (recent.getMsgType() == MsgTypeEnum.tip) { + String digest = null; + if (getCallback() != null) { + digest = getCallback().getDigestOfTipMsg(recent); + } + + if (digest == null) { + digest = NimUIKitImpl.getRecentCustomization().getDefaultDigest(recent); + } + + return digest; + } else if (recent.getAttachment() != null) { + String digest = null; + if (getCallback() != null) { + digest = getCallback().getDigestOfAttachment(recent, recent.getAttachment()); + } + + if (digest == null) { + digest = NimUIKitImpl.getRecentCustomization().getDefaultDigest(recent); + } + + return digest; + } else if (recent.getSessionType() == SessionTypeEnum.Ysf) { + return recent.getContent(); + } + + return "[未知]"; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigRecentViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigRecentViewHolder.java new file mode 100644 index 0000000..8763c69 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/big/BigRecentViewHolder.java @@ -0,0 +1,314 @@ +package cn.shangyu.gdxzExpert.netease.big; + +import android.graphics.drawable.AnimationDrawable; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.business.recent.RecentContactsCallback; +import com.netease.nim.uikit.business.session.emoji.MoonUtil; +import com.netease.nim.uikit.common.framework.infra.Handlers; +import com.netease.nim.uikit.common.ui.drop.DropFake; +import com.netease.nim.uikit.common.ui.drop.DropManager; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseQuickAdapter; +import com.netease.nim.uikit.common.ui.recyclerview.holder.BaseViewHolder; +import com.netease.nim.uikit.common.ui.recyclerview.holder.RecyclerViewHolder; +import com.netease.nim.uikit.common.util.sys.ScreenUtil; +import com.netease.nim.uikit.common.util.sys.TimeUtil; +import com.netease.nim.uikit.impl.cache.StickTopCache; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.nos.NosService; +import com.netease.nimlib.sdk.nos.model.NosThumbParam; +import com.netease.nimlib.sdk.nos.util.NosThumbImageUtil; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.ptop.RecentContactAdapter; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +public abstract class BigRecentViewHolder extends RecyclerViewHolder { + + public BigRecentViewHolder(BaseQuickAdapter adapter) { + super(adapter); + } + + private int lastUnreadCount = 0; + + protected RelativeLayout portraitPanel; + + protected ImageView imgHead; + + protected TextView tvNickname; + + protected TextView tvMessage; + + protected TextView tvDatetime; + + // 消息发送错误状态标记,目前没有逻辑处理 + protected ImageView imgMsgStatus; + + protected View bottomLine; + + protected View topLine; + + // 未读红点(一个占坑,一个全屏动画) + protected DropFake tvUnread; + + private ImageView imgUnreadExplosion; + + protected TextView tvOnlineState; + + private static Integer labelWidth; + + // 子类覆写 + protected abstract String getContent(RecentContact recent); + + @Override + public void convert(BaseViewHolder holder, RecentContact data, int position, boolean isScrolling) { + inflate(holder, data); + refresh(holder, data, position); + } + + public void inflate(BaseViewHolder holder, final RecentContact recent) { + this.portraitPanel = holder.getView(R.id.portrait_panel); + this.imgHead = holder.getView(R.id.img_head); + this.tvNickname = holder.getView(R.id.tv_nickname); + this.tvMessage = holder.getView(R.id.tv_message); + this.tvUnread = holder.getView(R.id.unread_number_tip); + this.imgUnreadExplosion = holder.getView(R.id.unread_number_explosion); + this.tvDatetime = holder.getView(R.id.tv_date_time); + this.imgMsgStatus = holder.getView(R.id.img_msg_status); + this.bottomLine = holder.getView(R.id.bottom_line); + this.topLine = holder.getView(R.id.top_line); + this.tvOnlineState = holder.getView(R.id.tv_online_state); + holder.addOnClickListener(R.id.unread_number_tip); + this.tvUnread.setTouchListener(new DropFake.ITouchListener() { + + @Override + public void onDown() { + DropManager.getInstance().setCurrentId(recent); + DropManager.getInstance().down(tvUnread, tvUnread.getText()); + } + + @Override + public void onMove(float curX, float curY) { + DropManager.getInstance().move(curX, curY); + } + + @Override + public void onUp() { + DropManager.getInstance().up(); + } + }); + } + + public void refresh(BaseViewHolder holder, RecentContact recent, final int position) { + // unread count animation + boolean shouldBoom = lastUnreadCount > 0 && recent.getUnreadCount() == 0; // 未读数从N->0执行爆裂动画; + lastUnreadCount = recent.getUnreadCount(); + updateBackground(holder, recent, position); + loadPortrait(recent); + updateNickLabel( + UserInfoHelper.getUserTitleName(recent.getContactId(), recent.getSessionType()) + ); + updateOnlineState(recent); + updateMsgLabel(holder, recent); + updateNewIndicator(recent); + if (shouldBoom) { + Object o = DropManager.getInstance().getCurrentId(); + if (o instanceof String && o.equals("0")) { + imgUnreadExplosion.setImageResource(com.netease.nim.uikit.R.drawable.nim_explosion); + imgUnreadExplosion.setVisibility(View.VISIBLE); + Handlers.sharedHandler(holder.getContext()).post(() -> { + ((AnimationDrawable) imgUnreadExplosion.getDrawable()).start(); + // 解决部分手机动画无法播放的问题(例如华为荣耀) + getAdapter().notifyItemChanged(getAdapter().getViewHolderPosition(position)); + }); + } + } else { + imgUnreadExplosion.setVisibility(View.GONE); + } + } + + private void updateBackground(BaseViewHolder holder, RecentContact recent, int position) { + topLine.setVisibility(getAdapter().isFirstDataItem(position) ? View.GONE : View.VISIBLE); + bottomLine.setVisibility(getAdapter().isLastDataItem(position) ? View.VISIBLE : View.GONE); + holder.getConvertView().setBackgroundResource(recent == null || StickTopCache.isStickTop(recent) ? + com.netease.nim.uikit.R.drawable.nim_recent_contact_sticky_selecter : com.netease.nim.uikit.R.drawable.nim_touch_bg); + } + + protected void loadPortrait(RecentContact recent) { + // 设置头像 + if (recent.getSessionType() == SessionTypeEnum.P2P) { +// imgHead.loadBuddyAvatar(recent.getContactId()); + + if(!StringUtil.isEmpty(UserInfoHelper.getUserDisplayPhoto(recent.getContactId()))) + { + loadAvatar("",UserInfoHelper.getUserDisplayPhoto(recent.getContactId())); + + + } + else + { + loadBuddyAvatar(recent.getContactId()); + } + + } else if (recent.getSessionType() == SessionTypeEnum.Team) { +// Team team = NimUIKit.getTeamProvider().getTeamById(recent.getContactId()); +// loadTeamIconByTeam(team); + } else if (recent.getSessionType() == SessionTypeEnum.SUPER_TEAM) { +// SuperTeam team = NimUIKit.getSuperTeamProvider().getTeamById(recent.getContactId()); +// loadSuperTeamIconByTeam(team); + } else if (recent.getSessionType() == SessionTypeEnum.Ysf) { + imgHead.setImageResource(com.netease.nim.uikit.R.drawable.nim_ic_ysf_default_icon); + } + } + /** + * 加载用户头像(默认大小的缩略图) + * + * @param url 头像地址 + */ + public void loadAvatar(String roomId, final String url) { + changeUrlBeforeLoad(roomId, url, R.drawable.icon_touxiang_persion_gray_big, 54); + } + + + /** + * 如果图片是上传到云信服务器,并且用户开启了文件安全功能,那么这里可能是短链,需要先换成源链才能下载。 + * 如果没有使用云信存储或没开启文件安全,那么不用这样做 + */ + private void changeUrlBeforeLoad(String roomId, final String url, final int defaultResId, + final int thumbSize) { + if (TextUtils.isEmpty(url)) { + // avoid useless call + loadImage(url, defaultResId, thumbSize); + } else { + /* + * 若使用网易云信云存储,这里可以设置下载图片的压缩尺寸,生成下载URL + * 如果图片来源是非网易云信云存储,请不要使用NosThumbImageUtil + */ + NIMClient.getService(NosService.class).getOriginUrlFromShortUrl(url).setCallback( + new RequestCallbackWrapper() { + + @Override + public void onResult(int code, String result, Throwable exception) { + if (TextUtils.isEmpty(result)) { + result = url; + } + final String thumbUrl = makeAvatarThumbNosUrl(result, thumbSize); + loadImage(thumbUrl, defaultResId, thumbSize); + } + }); + } + } + /** + * 生成头像缩略图NOS URL地址(用作ImageLoader缓存的key) + */ + private static String makeAvatarThumbNosUrl(final String url, final int thumbSize) { + if (TextUtils.isEmpty(url)) { + return url; + } + return thumbSize > 0 ? NosThumbImageUtil.makeImageThumbUrl(url, + NosThumbParam.ThumbType.Crop, + thumbSize, thumbSize) : url; + } + /** + * ImageLoader异步加载 + */ + private void loadImage(final String url, final int defaultResId, final int thumbSize) { + RequestOptions requestOptions = new RequestOptions().centerCrop().placeholder(defaultResId) + .error(defaultResId).override(thumbSize, + thumbSize); + Glide.with(getContext().getApplicationContext()).asBitmap().load(url).apply(requestOptions) + .into(imgHead); + } + /** + * 加载用户头像(默认大小的缩略图) + * + * @param account 用户账号 + */ + public void loadBuddyAvatar(String account) { + loadAvatar("", NimUIKit.getContactProvider().getAlias(account)); + + } + + private void updateNewIndicator(RecentContact recent) { + int unreadNum = recent.getUnreadCount(); + tvUnread.setVisibility(unreadNum > 0 ? View.VISIBLE : View.GONE); + tvUnread.setText(unreadCountShowRule(unreadNum)); + } + + private void updateMsgLabel(BaseViewHolder holder, RecentContact recent) { + // 显示消息具体内容 + MoonUtil.identifyRecentVHFaceExpressionAndTags(holder.getContext(), tvMessage, getContent(recent), -1, 0.45f); + //tvMessage.setText(getContent()); + MsgStatusEnum status = recent.getMsgStatus(); + if (status == null) { + imgMsgStatus.setVisibility(View.GONE); + } else { + switch (status) { + case fail: + imgMsgStatus.setImageResource(com.netease.nim.uikit.R.drawable.nim_g_ic_failed_small); + imgMsgStatus.setVisibility(View.VISIBLE); + break; + case sending: + imgMsgStatus.setImageResource(com.netease.nim.uikit.R.drawable.nim_recent_contact_ic_sending); + imgMsgStatus.setVisibility(View.VISIBLE); + break; + default: + imgMsgStatus.setVisibility(View.GONE); + break; + } + } + String timeString = TimeUtil.getTimeShowString(recent.getTime(), true); + tvDatetime.setText(timeString); + } + + protected String getOnlineStateContent(RecentContact recent) { + return ""; + } + + protected void updateOnlineState(RecentContact recent) { + if (recent.getSessionType() == SessionTypeEnum.Team || recent.getSessionType() == SessionTypeEnum.SUPER_TEAM) { + tvOnlineState.setVisibility(View.GONE); + } else { + String onlineStateContent = getOnlineStateContent(recent); + if (TextUtils.isEmpty(onlineStateContent)) { + tvOnlineState.setVisibility(View.GONE); + } else { + tvOnlineState.setVisibility(View.VISIBLE); + tvOnlineState.setText(getOnlineStateContent(recent)); + } + } + } + + protected void updateNickLabel(String nick) { + if (labelWidth == null) { + labelWidth = ScreenUtil.screenWidth - ScreenUtil.dip2px(120); // 减去固定的头像和时间宽度; + } + if (labelWidth > 0) { + tvNickname.setMaxWidth(labelWidth); + } + tvNickname.setText(nick); + } + + protected String unreadCountShowRule(int unread) { + unread = Math.min(unread, 99); + return String.valueOf(unread); + } + + protected RecentContactsCallback getCallback() { + return ((RecentContactAdapter) getAdapter()).getCallback(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomActivity.java new file mode 100644 index 0000000..f91401a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomActivity.java @@ -0,0 +1,283 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.business.chatroom.fragment.ChatRoomMessageFragment; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.activity.UI; +import com.netease.nim.uikit.common.ui.dialog.DialogMaker; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.AbortableFuture; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.chatroom.ChatRoomService; +import com.netease.nimlib.sdk.chatroom.ChatRoomServiceObserver; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomInfo; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomStatusChangeData; +import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomData; +import com.netease.nimlib.sdk.chatroom.model.EnterChatRoomResultData; + +import java.util.Collections; +import java.util.Random; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.constants.EnterMode; +import cn.shangyu.gdxzExpert.netease.constants.Extras; +import cn.shangyu.gdxzExpert.netease.thridparty.ChatRoomHttpClient; + +/** + * 聊天室 + * Created by hzxuwen on 2015/12/14. + */ +public class ChatRoomActivity extends UI { + + private static final String TAG = ChatRoomActivity.class.getSimpleName(); + + /** + * 聊天室基本信息 + */ + private String roomId; + + private String appKey, account, pwd, link; + + private int mode = EnterMode.NORMAL; + + private ChatRoomInfo roomInfo; + + private boolean hasEnterSuccess = false; // 是否已经成功登录聊天室 + + private ChatRoomFragment fragment; + + /** + * 子页面 + */ + private ChatRoomMessageFragment messageFragment; + + private AbortableFuture enterRequest; + + public static void start(Context context, String roomId, int mode, String appKey, + String account, String pwd, String link) { + Intent intent = new Intent(); + intent.setClass(context, ChatRoomActivity.class); + intent.putExtra(Extras.ROOM_ID, roomId); + intent.putExtra(Extras.MODE, mode); + intent.putExtra(Extras.APP_KEY, appKey); + intent.putExtra(Extras.ACCOUNT, account); + intent.putExtra(Extras.PWD, pwd); + intent.putExtra(Extras.LINK, link); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + context.startActivity(intent); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.chat_room_activity); + boolean ok = getIntentData(); + if (!ok) { + finish(); + return; + } + // 注册监听 + registerObservers(true); + // 登录聊天室 + enterRoom(); + } + private boolean getIntentData() { + roomId = getIntent().getStringExtra(Extras.ROOM_ID); + mode = getIntent().getIntExtra(Extras.MODE, EnterMode.NORMAL); + appKey = getIntent().getStringExtra(Extras.APP_KEY); + account = getIntent().getStringExtra(Extras.ACCOUNT); + pwd = getIntent().getStringExtra(Extras.PWD); + if (mode == EnterMode.INDEPENDENT) { + if (TextUtils.isEmpty(appKey)) { + ToastHelper.showToast(ChatRoomActivity.this, + getString(R.string.independent_mode_error)); + return false; + } + } + link = getIntent().getStringExtra(Extras.LINK); + return true; + } + + @Override + protected void onDestroy() { + super.onDestroy(); + registerObservers(false); + } + + @Override + public void onBackPressed() { + if (messageFragment == null || !messageFragment.onBackPressed()) { + super.onBackPressed(); + } + logoutChatRoom(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (messageFragment != null) { + messageFragment.onActivityResult(requestCode, resultCode, data); + } + } + + private void enterRoom() { + DialogMaker.showProgressDialog(this, null, "", true, dialog -> { + if (enterRequest != null) { + enterRequest.abort(); + onLoginDone(); + finish(); + } + }).setCanceledOnTouchOutside(false); + hasEnterSuccess = false; + EnterChatRoomData data = new EnterChatRoomData(roomId); + if (mode == EnterMode.INDEPENDENT) { + data.setAppKey(appKey); + data.setIndependentMode((roomId, account) -> { + if (TextUtils.isEmpty(link)) { + ChatRoomHttpClient client = ChatRoomHttpClient.getInstance(); + return client.fetchChatRoomAddress(roomId, appKey, account); + } + return Collections.singletonList(link); + }, account, pwd); + if (TextUtils.isEmpty(account)) { + data.setNick(String.format("soduku%s", new Random().nextInt(100))); + data.setAvatar( + "https://nim.nosdn.127.net/MTAxMTAxMA==/bmltYV8yNDM0MzQ4OV8xNTMyMDUzNzM3ODkzXzJlNGQ3ZjA5LWI2MjgtNDNiNy1hZTIwLTBhYTgzMjZhYzBjZQ==?thumbnail=540x540&imageView&tostatic=0"); + } + } + enterRequest = NIMClient.getService(ChatRoomService.class).enterChatRoomEx(data, 1); + enterRequest.setCallback(new RequestCallback() { + + @Override + public void onSuccess(EnterChatRoomResultData result) { + onLoginDone(); + roomInfo = result.getRoomInfo(); + NimUIKit.enterChatRoomSuccess(result, false); + initChatRoomFragment(); + initMessageFragment(); + hasEnterSuccess = true; + } + + @Override + public void onFailed(int code) { + onLoginDone(); + if (code == ResponseCode.RES_CHATROOM_BLACKLIST) { + ToastHelper.showToast(ChatRoomActivity.this, "你已被拉入黑名单,不能再进入"); + } else if (code == ResponseCode.RES_ENONEXIST) { + ToastHelper.showToast(ChatRoomActivity.this, "聊天室不存在"); + } else { + ToastHelper.showToast(ChatRoomActivity.this, + "enter chat room failed, code=" + code); + } + finish(); + } + + @Override + public void onException(Throwable exception) { + onLoginDone(); + ToastHelper.showToast(ChatRoomActivity.this, + "enter chat room exception, e=" + exception.getMessage()); + finish(); + } + }); + } + + private void registerObservers(boolean register) { + NIMClient.getService(ChatRoomServiceObserver.class).observeOnlineStatus(onlineStatus, + register); + NIMClient.getService(ChatRoomServiceObserver.class).observeKickOutEvent(kickOutObserver, + register); + } + + private void logoutChatRoom() { + NIMClient.getService(ChatRoomService.class).exitChatRoom(roomId); + onExitedChatRoom(); + } + + public void onExitedChatRoom() { + NimUIKit.exitedChatRoom(roomId); + finish(); + } + + Observer onlineStatus = new Observer() { + + @Override + public void onEvent(ChatRoomStatusChangeData chatRoomStatusChangeData) { + if (!chatRoomStatusChangeData.roomId.equals(roomId)) { + return; + } + if (chatRoomStatusChangeData.status == StatusCode.CONNECTING) { + DialogMaker.updateLoadingMessage("连接中..."); + } else if (chatRoomStatusChangeData.status == StatusCode.LOGINING) { + DialogMaker.updateLoadingMessage("登录中..."); + } else if (chatRoomStatusChangeData.status == StatusCode.LOGINED) { + if (fragment != null) { + fragment.updateOnlineStatus(true); + } + } else if (chatRoomStatusChangeData.status == StatusCode.UNLOGIN) { + if (fragment != null) { + fragment.updateOnlineStatus(false); + } + // 登录成功后,断网重连交给云信SDK,如果重连失败,可以查询具体失败的原因 + if (hasEnterSuccess) { + int code = NIMClient.getService(ChatRoomService.class).getEnterErrorCode(roomId); + ToastHelper.showToast(ChatRoomActivity.this, "getEnterErrorCode=" + code); + LogUtil.d(TAG, "chat room enter error code:" + code); + } + } else if (chatRoomStatusChangeData.status == StatusCode.NET_BROKEN) { + if (fragment != null) { + fragment.updateOnlineStatus(false); + } + ToastHelper.showToast(ChatRoomActivity.this, R.string.net_broken); + } + LogUtil.i(TAG, "chat room online status changed to " + + chatRoomStatusChangeData.status.name()); + } + }; + + Observer kickOutObserver = (Observer) chatRoomKickOutEvent -> { + ToastHelper.showToast(ChatRoomActivity.this, + "被踢出聊天室,原因:" + chatRoomKickOutEvent.getReason()); + onExitedChatRoom(); + }; + + private void initChatRoomFragment() { + fragment = (ChatRoomFragment) getSupportFragmentManager().findFragmentById(R.id.chat_rooms_fragment); + if (fragment != null) { + fragment.updateView(); + } else { + // 如果Fragment还未Create完成,延迟初始化 + getHandler().postDelayed(this::initChatRoomFragment, 50); + } + } + + private void initMessageFragment() { + messageFragment = (ChatRoomMessageFragment) getSupportFragmentManager().findFragmentById( + R.id.chat_room_message_fragment); + if (messageFragment != null) { + messageFragment.init(roomId); + } else { + // 如果Fragment还未Create完成,延迟初始化 + getHandler().postDelayed(this::initMessageFragment, 50); + } + } + + private void onLoginDone() { + enterRequest = null; + DialogMaker.dismissProgressDialog(); + } + + public ChatRoomInfo getRoomInfo() { + return roomInfo; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomFragment.java new file mode 100644 index 0000000..02e9718 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomFragment.java @@ -0,0 +1,169 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import android.os.Bundle; +import androidx.viewpager.widget.ViewPager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.chatroom.ChatRoomService; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.ui.PagerSlidingTabStrip; + +/** + * 聊天室顶层fragment + * Created by hzxuwen on 2015/12/14. + */ +public class ChatRoomFragment extends ChatRoomTabFragment implements + ViewPager.OnPageChangeListener { + + private PagerSlidingTabStrip tabs; + + private ViewPager viewPager; + + private ChatRoomTabPagerAdapter adapter; + + private int scrollState; + + private ImageView imageView; + + private TextView statusText; + + private static final boolean SHOW_BARRAGE = false; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + protected void onInit() { + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.chat_room_fragment, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findViews(); + setupPager(); + setupTabs(); + } + + public void updateOnlineStatus(boolean isOnline) { + statusText.setVisibility(isOnline ? View.GONE : View.VISIBLE); + } + + public void updateView() { +// ChatRoomHelper.setCoverImage(((ChatRoomActivity) getActivity()).getRoomInfo().getRoomId(), +// imageView, true); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } + + private void findViews() { + imageView = findView(R.id.chat_room_view); + statusText = findView(R.id.online_status); + final ImageView backImage = findView(R.id.back_arrow); + tabs = findView(R.id.chat_room_tabs); + viewPager = findView(R.id.chat_room_viewpager); + backImage.setOnClickListener(v -> { + NIMClient.getService(ChatRoomService.class).exitChatRoom( + ((ChatRoomActivity) getActivity()).getRoomInfo().getRoomId()); + ((ChatRoomActivity) getActivity()).onExitedChatRoom(); + }); + // 是否演示弹幕控件 +// if (SHOW_BARRAGE) { +// ViewStub barrageViewStub = findView(R.id.barrage_view_stub); +// barrageViewStub.inflate(); +// View barrageViewRoot = findView(R.id.barrage_view_after_inflate); +// final BarrageSurfaceView barrageView = barrageViewRoot.findViewById(R.id.barrage_view); +// final String barrageText1 = "欢迎进入直播间"; +// final String barrageText2 = "Welcome to live room"; +// Handlers.sharedHandler(getActivity()).postDelayed(() -> { +// BarrageConfig config = new BarrageConfig(); +// config.setDuration(4500); +// // 初始化弹幕控件 +// barrageView.init(config); +// for (int i = 1; i <= 200; i++) { +// barrageView.addTextBarrage((i % 2 == 0 ? barrageText1 : barrageText2) + i); +// } +// }, 1000); +// } + } + + private void setupPager() { + // CACHE COUNT + adapter = new ChatRoomTabPagerAdapter(getFragmentManager(), getActivity(), viewPager); + viewPager.setOffscreenPageLimit(adapter.getCacheCount()); + // page swtich animation +// viewPager.setPageTransformer(true, new FadeInOutPageTransformer()); + // ADAPTER + viewPager.setAdapter(adapter); + // TAKE OVER CHANGE + viewPager.addOnPageChangeListener(this); + } + + private void setupTabs() { + tabs.setOnCustomTabListener(new PagerSlidingTabStrip.OnCustomTabListener() { + + @Override + public int getTabLayoutResId(int position) { + return R.layout.chat_room_tab_layout; + } + + @Override + public boolean screenAdaptation() { + return true; + } + }); + tabs.setViewPager(viewPager); + tabs.setOnTabClickListener(adapter); + tabs.setOnTabDoubleTapListener(adapter); + } + + /******************** + * OnPageChangeListener + **************************/ + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + // TO TABS + tabs.onPageScrolled(position, positionOffset, positionOffsetPixels); + // TO ADAPTER + adapter.onPageScrolled(position); + } + + @Override + public void onPageSelected(int position) { + // TO TABS + tabs.onPageSelected(position); + selectPage(position); + } + + @Override + public void onPageScrollStateChanged(int state) { + // TO TABS + tabs.onPageScrollStateChanged(state); + scrollState = state; + selectPage(viewPager.getCurrentItem()); + } + + private void selectPage(int page) { + // TO PAGE + if (scrollState == ViewPager.SCROLL_STATE_IDLE) { + adapter.onPageSelected(viewPager.getCurrentItem()); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomSessionHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomSessionHelper.java new file mode 100644 index 0000000..8c51558 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomSessionHelper.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.chatroom.ChatRoomSessionCustomization; +import com.netease.nim.uikit.business.session.actions.BaseAction; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.netease.session.action.EasyAction; +import cn.shangyu.gdxzExpert.netease.session.action.ShoppingAction; +import cn.shangyu.gdxzExpert.netease.session.action.TeachAction; +import cn.shangyu.gdxzExpert.netease.session.action.VisitAction; + +/** + * UIKit自定义聊天室消息界面用法展示类 + *

+ * Created by huangjun on 2017/9/18. + */ + +public class ChatRoomSessionHelper { + + public static void init() { + registerViewHolders(); + NimUIKit.setCommonChatRoomSessionCustomization(getChatRoomSessionCustomization()); + } + + private static void registerViewHolders() { +// NimUIKit.registerChatRoomMsgItemViewHolder(GuessAttachment.class, ChatRoomMsgViewHolderGuess.class); + } + + private static ChatRoomSessionCustomization getChatRoomSessionCustomization() { + ArrayList actions = new ArrayList<>(); +// actions.add(new GuessAction()); + actions.add(new EasyAction()); + actions.add(new TeachAction()); + actions.add(new VisitAction()); + actions.add(new ShoppingAction()); + ChatRoomSessionCustomization customization = new ChatRoomSessionCustomization(); + customization.actions = actions; + return customization; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTab.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTab.java new file mode 100644 index 0000000..f649cba --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTab.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + + +import cn.shangyu.gdxzExpert.R; + +/** + * Created by hzxuwen on 2015/12/14. + */ +public enum ChatRoomTab { + CHAT_ROOM_MESSAGE(0, MessageTabFragment.class, com.netease.nim.uikit.R.string.chat_room_message, R.layout.chat_room_message_tab), + MASTER(1, MasterTabFragment.class, com.netease.nim.uikit.R.string.chat_room_master, R.layout.chat_room_master_tab), +// ONLINE_PEOPLE(2, OnlinePeopleTabFragment.class, R.string.chat_room_online_people, R.layout.chat_room_people_tab); +ONLINE_PEOPLE(2, MasterTabFragment.class, com.netease.nim.uikit.R.string.chat_room_master, R.layout.chat_room_master_tab); + + public final int tabIndex; + + public final Class clazz; + + public final int resId; + + public final int fragmentId; + + public final int layoutId; + + ChatRoomTab(int index, Class clazz, int resId, int layoutId) { + this.tabIndex = index; + this.clazz = clazz; + this.resId = resId; + this.fragmentId = index; + this.layoutId = layoutId; + } + + public static final ChatRoomTab fromTabIndex(int tabIndex) { + for (ChatRoomTab value : ChatRoomTab.values()) { + if (value.tabIndex == tabIndex) { + return value; + } + } + + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabFragment.java new file mode 100644 index 0000000..bacab8a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabFragment.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.netease.nim.uikit.common.fragment.TabFragment; + +import cn.shangyu.gdxzExpert.R; + +/** + * Created by hzxuwen on 2015/12/14. + */ +public abstract class ChatRoomTabFragment extends TabFragment { + private boolean loaded = false; + + private ChatRoomTab tabData; + + protected abstract void onInit(); + + protected boolean inited() { + return loaded; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.main_tab_fragment_container, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + public void attachTabData(ChatRoomTab tabData) { + this.tabData = tabData; + } + + @Override + public void onCurrent() { + super.onCurrent(); + + if (!loaded && loadRealLayout()) { + loaded = true; + onInit(); + } + } + + private boolean loadRealLayout() { + ViewGroup root = (ViewGroup) getView(); + if (root != null) { + root.removeAllViewsInLayout(); + View.inflate(root.getContext(), tabData.layoutId, root); + } + return root != null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabPagerAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabPagerAdapter.java new file mode 100644 index 0000000..2192818 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/ChatRoomTabPagerAdapter.java @@ -0,0 +1,69 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import android.content.Context; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.viewpager.widget.ViewPager; + +import java.util.List; + +import cn.shangyu.gdxzExpert.netease.ui.SlidingTabPagerAdapter; + + +/** + * 聊天室主TAB适配器 + * Created by hzxuwen on 2015/12/14. + */ +public class ChatRoomTabPagerAdapter extends SlidingTabPagerAdapter { + public ChatRoomTabPagerAdapter(FragmentManager fm, Context context, ViewPager pager) { + super(fm, ChatRoomTab.values().length, context.getApplicationContext(), pager); + + for (ChatRoomTab tab : ChatRoomTab.values()) { + try { + ChatRoomTabFragment fragment = null; + + List fs = fm.getFragments(); + if (fs != null) { + for (Fragment f : fs) { + if (f.getClass() == tab.clazz) { + fragment = (ChatRoomTabFragment) f; + break; + } + } + } + + if (fragment == null) { + fragment = tab.clazz.newInstance(); + } + + fragment.setState(this); + fragment.attachTabData(tab); + + fragments[tab.tabIndex] = fragment; + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + @Override + public int getCacheCount() { + return ChatRoomTab.values().length; + } + + @Override + public int getCount() { + return ChatRoomTab.values().length; + } + + @Override + public CharSequence getPageTitle(int position) { + ChatRoomTab tab = ChatRoomTab.fromTabIndex(position); + + int resId = tab != null ? tab.resId : 0; + + return resId != 0 ? context.getText(resId) : ""; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterFragment.java new file mode 100644 index 0000000..326b135 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterFragment.java @@ -0,0 +1,141 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.fragment.TFragment; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.chatroom.ChatRoomService; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomInfo; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomMember; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.widget.ChatRoomImageView; + +/** + * 聊天室主播fragment + * Created by hzxuwen on 2015/12/17. + */ +public class MasterFragment extends TFragment { + + private static final String TAG = MasterFragment.class.getSimpleName(); + + private ChatRoomImageView imageView; + + private TextView nameText; + + private TextView countText; + + private TextView announceText; + + private LinearLayout announceLayout; + + private LinearLayout noAnnounceLayout; + + private ChatRoomMember master; + + private long lastClickTime = 0; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return inflater.inflate(R.layout.master_fragment, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findViews(); + } + + public void onCurrent() { + if (!isFastClick()) { + fetchRoomInfo(); + } + } + + /** + * 频率控制,至少间隔一分钟 + * + * @return + */ + private boolean isFastClick() { + long current = System.currentTimeMillis(); + long time = current - lastClickTime; + if (0 < time && time < 60000) { + return true; + } + lastClickTime = current; + return false; + } + + private void findViews() { + imageView = findView(R.id.master_head_image); + imageView.loadAvatarByUrl("", ""); // 网络不好的时候,设置一个默认头像 + nameText = findView(R.id.master_name); + countText = findView(R.id.online_total); + announceText = findView(R.id.announce_content); + announceLayout = findView(R.id.announce_layout); + noAnnounceLayout = findView(R.id.no_announce_layout); + } + + private void fetchRoomInfo() { + String roomId = ((ChatRoomActivity) getActivity()).getRoomInfo().getRoomId(); + NIMClient.getService(ChatRoomService.class).fetchRoomInfo(roomId).setCallback( + new RequestCallback() { + + @Override + public void onSuccess(ChatRoomInfo param) { + getChatRoomMaster(param); + } + + @Override + public void onFailed(int code) { + LogUtil.d(TAG, "fetch room info failed:" + code); + } + + @Override + public void onException(Throwable exception) { + LogUtil.d(TAG, "fetch room info exception:" + exception); + } + }); + } + + private void getChatRoomMaster(final ChatRoomInfo roomInfo) { + master = NimUIKit.getChatRoomProvider().getChatRoomMember(roomInfo.getRoomId(), + roomInfo.getCreator()); + if (master != null) { + updateView(roomInfo); + } else { + NimUIKit.getChatRoomProvider().fetchMember(roomInfo.getRoomId(), roomInfo.getCreator(), + (success, result, code) -> { + if (success) { + master = result; + updateView(roomInfo); + } + }); + } + } + + private void updateView(ChatRoomInfo chatRoomInfo) { + imageView.loadAvatarByUrl(master.getRoomId(), master.getAvatar()); + nameText.setText(TextUtils.isEmpty(master.getNick()) ? "" : master.getNick()); + countText.setText(String.valueOf(chatRoomInfo.getOnlineUserCount())); + if (TextUtils.isEmpty(chatRoomInfo.getAnnouncement())) { + noAnnounceLayout.setVisibility(View.VISIBLE); + announceLayout.setVisibility(View.GONE); + } else { + announceLayout.setVisibility(View.VISIBLE); + noAnnounceLayout.setVisibility(View.GONE); + announceText.setText(chatRoomInfo.getAnnouncement()); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterTabFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterTabFragment.java new file mode 100644 index 0000000..cf17377 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MasterTabFragment.java @@ -0,0 +1,27 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + + +import cn.shangyu.gdxzExpert.R; + +/** + * 主播基类fragment + * Created by hzxuwen on 2015/12/14. + */ +public class MasterTabFragment extends ChatRoomTabFragment { + + private MasterFragment fragment; + + @Override + protected void onInit() { + fragment = (MasterFragment) getActivity().getSupportFragmentManager().findFragmentById( + R.id.master_fragment); + } + + @Override + public void onCurrent() { + super.onCurrent(); + if (fragment != null) { + fragment.onCurrent(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MessageTabFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MessageTabFragment.java new file mode 100644 index 0000000..0f5004c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/chatroom/MessageTabFragment.java @@ -0,0 +1,59 @@ +package cn.shangyu.gdxzExpert.netease.chatroom; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.netease.nim.uikit.business.chatroom.fragment.ChatRoomMessageFragment; + +import cn.shangyu.gdxzExpert.R; + +/** + * 直播互动基类fragment + * Created by hzxuwen on 2015/12/14. + */ +public class MessageTabFragment extends ChatRoomTabFragment { + + private ChatRoomMessageFragment fragment; + + public MessageTabFragment() { + this.setContainerId(ChatRoomTab.CHAT_ROOM_MESSAGE.fragmentId); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + return super.onCreateView(inflater, container, savedInstanceState); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + onCurrent(); + } + + @Override + protected void onInit() { + findViews(); + } + + @Override + public void onCurrent() { + super.onCurrent(); + } + + @Override + public void onLeave() { + super.onLeave(); + if (fragment != null) { + fragment.onLeave(); + } + } + + private void findViews() { + fragment = (ChatRoomMessageFragment) getActivity().getSupportFragmentManager() + .findFragmentById( + R.id.chat_room_message_fragment); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DefaultContactProvider.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DefaultContactProvider.java new file mode 100644 index 0000000..eb489ac --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DefaultContactProvider.java @@ -0,0 +1,44 @@ +package cn.shangyu.gdxzExpert.netease.config; + +import com.netease.nim.uikit.api.model.contact.ContactProvider; +import com.netease.nim.uikit.impl.cache.FriendDataCache; + +import java.util.List; + +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; + +/** + * UIKit默认的通讯录(联系人)数据源提供者, + * Created by hzchenkang on 2016/12/19. + */ + +public class DefaultContactProvider implements ContactProvider { + + @Override + public List getUserInfoOfMyFriends() { + return FriendDataCache.getInstance().getMyFriendAccounts(); + } + + @Override + public int getMyFriendsCount() { + return FriendDataCache.getInstance().getMyFriendCounts(); + } + + @Override + public String getAlias(String account) { + + return UserInfoHelper.getUserDisplayPhoto(account); + + +// Friend friend = FriendDataCache.getInstance().getFriendByAccount(account); +// if (friend != null && !TextUtils.isEmpty(friend.getAlias())) { +// return friend.getAlias(); +// } +// return null; + } + + @Override + public boolean isMyFriend(String account) { + return FriendDataCache.getInstance().isMyFriend(account); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DemoServers.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DemoServers.java new file mode 100644 index 0000000..c8ff9c2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/DemoServers.java @@ -0,0 +1,18 @@ +package cn.shangyu.gdxzExpert.netease.config; + +public class DemoServers { + + // + // 好友列表信息服务器地址 + // + private static final String API_SERVER_TEST = "http://apptest.netease.im/api/"; // 测试 + private static final String API_SERVER = "https://app.netease.im/api/"; // 线上 + + public static String apiServer() { + return ServerConfig.testServer() ? API_SERVER_TEST : API_SERVER; + } + + public static String chatRoomAPIServer() { + return apiServer() + "chatroom/"; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ExtraOptions.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ExtraOptions.java new file mode 100644 index 0000000..358f119 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ExtraOptions.java @@ -0,0 +1,11 @@ +package cn.shangyu.gdxzExpert.netease.config; + +/** + * Created by jezhee on 4/19/15. + */ +public class ExtraOptions { + + public static void provide() { + /// EMPTY NOW + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/LogoutHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/LogoutHelper.java new file mode 100644 index 0000000..1e052a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/LogoutHelper.java @@ -0,0 +1,72 @@ +package cn.shangyu.gdxzExpert.netease.config; + + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.IS_BIG_MUDULE; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.showGuideView; + +import android.content.Intent; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.auth.AuthService; + +import java.io.Serializable; +import java.util.List; + +import cn.shangyu.gdxzExpert.ecdemo.ui.SDKCoreHelper; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * 注销帮助类 + * Created by huangjun on 2015/10/8. + */ +public class LogoutHelper { + public static String addUMTokenuuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + + public static void logout() { + Boolean isbig=CommonUtil.BigModule(); + Boolean guideView=SharePrefUtil.getBoolean(UIUtils.getContext(),showGuideView,true); + addUMTokenuuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + SharePrefUtil.saveString(UIUtils.getContext(), Constant.yx_accid, ""); + SharePrefUtil.saveString(UIUtils.getContext(), Constant.yx_token, ""); + SharePrefUtil.saveString(UIUtils.getContext(), "isbound_wechat", ""); + SharePrefUtil.clear(UIUtils.getContext(), "isLogin"); + startReport(null); + +// Constant.Repotr_token=""; +// SharePrefUtil.clear(UIUtils.getContext(), SharePrefUtil.getString(UIUtils.getContext(), Constant.SP_IS_FIRST_NAME, +// Constant.mobile, "") + "my_provinceId"); +// SharePrefUtil.clear(UIUtils.getContext(), SharePrefUtil.getString(UIUtils.getContext(), Constant.SP_IS_FIRST_NAME, +// Constant.mobile, "") + "my_cityId"); +// SharePrefUtil.clear(UIUtils.getContext(), SharePrefUtil.getString(UIUtils.getContext(), Constant.SP_IS_FIRST_NAME, +// Constant.mobile, "") + "my_disctictId"); +// SharePrefUtil.clear(UIUtils.getContext(), Constant.SP_IS_FIRST_NAME); + DataCleanManager.cleanApplicationData(UIUtils.getContext()); + SDKCoreHelper.logout(true); + // 清理缓存&注销监听&清除状态 + NimUIKit.logout(); + DemoCache.clear(); + NIMClient.getService(AuthService.class).logout(); + SharePrefUtil.saveBoolean(UIUtils.getContext(),IS_BIG_MUDULE,isbig); + SharePrefUtil.saveBoolean(UIUtils.getContext(),showGuideView,guideView); + } + public static void startReport(List list) + { + Intent intent = new Intent(UIUtils.getContext(), ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + UIUtils.getContext().startService(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/NimUserInfoProvider.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/NimUserInfoProvider.java new file mode 100644 index 0000000..e92db91 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/NimUserInfoProvider.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.netease.config; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; + +import com.netease.nim.uikit.R; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.business.team.helper.TeamHelper; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.nos.NosService; +import com.netease.nimlib.sdk.superteam.SuperTeam; +import com.netease.nimlib.sdk.team.model.Team; +import com.netease.nimlib.sdk.uinfo.UserInfoProvider; +import com.netease.nimlib.sdk.uinfo.model.UserInfo; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; + +/** + * 初始化sdk 需要的用户信息提供者,现主要用于内置通知提醒获取昵称和头像 + *

+ * 注意不要与 IUserInfoProvider 混淆,后者是 UIKit 与 demo 之间的数据共享接口 + *

+ */ + +public class NimUserInfoProvider implements UserInfoProvider { + + private Context context; + + public NimUserInfoProvider(Context context) { + this.context = context; + } + + @Override + public UserInfo getUserInfo(String account) { + return NimUIKit.getUserInfoProvider().getUserInfo(account); + } + + @Override + public Bitmap getAvatarForMessageNotifier(SessionTypeEnum sessionType, String sessionId) { + /* + * 注意:这里最好从缓存里拿,如果加载时间过长会导致通知栏延迟弹出!该函数在后台线程执行! + */ + Bitmap bm = null; + int defResId = R.drawable.icon_touxiang_persion_gray_big; + CountDownLatch countDownLatch = new CountDownLatch(1); + final String[] originUrl = new String[1]; + if (SessionTypeEnum.P2P == sessionType) { + UserInfo user = getUserInfo(sessionId); + originUrl[0]=UserInfoHelper.getUserDisplayPhoto(sessionId); +// originUrl[0] = user != null ? user.getAvatar() : null; + } else if (SessionTypeEnum.Team == sessionType) { + Team team = NimUIKit.getTeamProvider().getTeamById(sessionId); + originUrl[0] = team != null ? team.getIcon() : null; + } else if (SessionTypeEnum.SUPER_TEAM == sessionType) { + SuperTeam team = NimUIKit.getSuperTeamProvider().getTeamById(sessionId); + originUrl[0] = team != null ? team.getIcon() : null; + } + NIMClient.getService(NosService.class).getOriginUrlFromShortUrl(originUrl[0]).setCallback( + new RequestCallbackWrapper() { + + @Override + public void onResult(int code, String result, Throwable exception) { + originUrl[0] = result; + countDownLatch.countDown(); + } + }); + try { + countDownLatch.await(200, TimeUnit.MILLISECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + if (!TextUtils.isEmpty(originUrl[0])) { + bm = NimUIKit.getImageLoaderKit().getNotificationBitmapFromCache(originUrl[0]); + } + if (bm == null) { + if (SessionTypeEnum.Team == sessionType || SessionTypeEnum.SUPER_TEAM == sessionType) { + defResId = R.drawable.nim_avatar_group; + } + Drawable drawable = context.getResources().getDrawable(defResId); + if (drawable instanceof BitmapDrawable) { + bm = ((BitmapDrawable) drawable).getBitmap(); + } + } + return bm; + } + + @Override + public String getDisplayTitleForMessageNotifier(IMMessage message) { + return null; + } + + @Override + public String getDisplayNameForMessageNotifier(String account, String sessionId, + SessionTypeEnum sessionType) { + String nick = null; + if (sessionType == SessionTypeEnum.P2P) { +// nick = NimUIKit.getContactProvider().getAlias(account); + nick= UserInfoHelper.getUserDisplayName(account); + } else if (sessionType == SessionTypeEnum.Team) { + nick = NimUIKit.getContactProvider().getAlias(account); + if (TextUtils.isEmpty(nick)) { + nick = TeamHelper.getTeamNick(sessionId, account); + } + } + if (TextUtils.isEmpty(nick)) { + return null; // 返回null,交给sdk处理。如果对方有设置nick,sdk会显示nick + } + return nick; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerConfig.java new file mode 100644 index 0000000..40626a3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerConfig.java @@ -0,0 +1,19 @@ +package cn.shangyu.gdxzExpert.netease.config; + +public final class ServerConfig { + + public enum ServerEnv { + TEST("t"), + PRE_REL("p"), + REL("r"),; + String tag; + + ServerEnv(String tag) { + this.tag = tag; + } + } + + public static boolean testServer() { + return ServerEnvs.SERVER == ServerEnv.TEST; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerEnvs.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerEnvs.java new file mode 100644 index 0000000..5af5868 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/ServerEnvs.java @@ -0,0 +1,12 @@ +package cn.shangyu.gdxzExpert.netease.config; + +final class ServerEnvs { + + // + // ENVs + // DEFAULT Env.REL + // + + static final ServerConfig.ServerEnv SERVER = ServerConfig.ServerEnv.REL; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/Preferences.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/Preferences.java new file mode 100644 index 0000000..284e653 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/Preferences.java @@ -0,0 +1,99 @@ +package cn.shangyu.gdxzExpert.netease.config.preference; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.netease.nimlib.push.net.lbs.IPVersion; +import com.netease.nimlib.push.packet.asymmetric.AsymmetricType; +import com.netease.nimlib.push.packet.symmetry.SymmetryType; +import com.netease.nimlib.sdk.NimHandshakeType; + +import cn.shangyu.gdxzExpert.netease.DemoCache; + +/** + * Created by hzxuwen on 2015/4/13. + */ +public class Preferences { + private static final String KEY_USER_ACCOUNT = "account"; + private static final String KEY_USER_TOKEN = "token"; + private static final String KEY_HANDSHAKE = "handshake"; + private static final String KEY_ASYMMETRIC = "asymmetric"; + private static final String KEY_SYMMETRY = "symmetry"; + private static final String KEY_IPV = "ipv"; + + public static void saveUserAccount(String account) { + saveString(KEY_USER_ACCOUNT, account); + } + + public static String getUserAccount() { + return getString(KEY_USER_ACCOUNT); + } + + public static void saveUserToken(String token) { + saveString(KEY_USER_TOKEN, token); + } + + public static String getUserToken() { + return getString(KEY_USER_TOKEN); + } + + public static void saveHandshakeType(NimHandshakeType handshakeType) { + saveInt(KEY_HANDSHAKE, handshakeType.getValue()); + } + + public static NimHandshakeType getHandshakeType() { + return NimHandshakeType.value(getInt(KEY_HANDSHAKE, NimHandshakeType.V1.getValue())); + } + + public static void saveAsymmetric(AsymmetricType asymmetric) { + saveInt(KEY_ASYMMETRIC, asymmetric.getValue()); + } + + public static AsymmetricType getAsymmetric() { + return AsymmetricType.value(getInt(KEY_ASYMMETRIC)); + } + + public static void saveSymmetry(SymmetryType symmetry) { + saveInt(KEY_SYMMETRY, symmetry.getValue()); + } + + public static SymmetryType getSymmetry() { + return SymmetryType.value(getInt(KEY_SYMMETRY)); + } + + public static void saveIpv(IPVersion ipv) { + saveInt(KEY_IPV, ipv.getValue()); + } + + public static IPVersion getIpv() { + return IPVersion.value(getInt(KEY_IPV)); + } + + private static void saveInt(String key, int value) { + SharedPreferences.Editor editor = getSharedPreferences().edit(); + editor.putInt(key, value); + editor.commit(); + } + + private static int getInt(String key) { + return getSharedPreferences().getInt(key, 0); + } + + private static int getInt(String key, int defaultValue) { + return getSharedPreferences().getInt(key, defaultValue); + } + + private static void saveString(String key, String value) { + SharedPreferences.Editor editor = getSharedPreferences().edit(); + editor.putString(key, value); + editor.commit(); + } + + private static String getString(String key) { + return getSharedPreferences().getString(key, null); + } + + static SharedPreferences getSharedPreferences() { + return DemoCache.getContext().getSharedPreferences("Demo", Context.MODE_PRIVATE); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/UserPreferences.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/UserPreferences.java new file mode 100644 index 0000000..5e8010c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/config/preference/UserPreferences.java @@ -0,0 +1,283 @@ +package cn.shangyu.gdxzExpert.netease.config.preference; + +import android.app.Activity; +import android.content.Context; +import android.content.SharedPreferences; + +import com.alibaba.fastjson.JSONObject; +import com.netease.nimlib.sdk.NotificationFoldStyle; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; + +import cn.shangyu.gdxzExpert.netease.DemoCache; + +/** + * Created by hzxuwen on 2015/4/13. + */ +public class UserPreferences { + + private final static String KEY_DOWNTIME_TOGGLE = "down_time_toggle"; + + private final static String KEY_SB_NOTIFY_TOGGLE = "sb_notify_toggle"; + + private final static String KEY_OFFLINE_PUSH = "offline_push"; + + private final static String KEY_TEAM_ANNOUNCE_CLOSED = "team_announce_closed"; + + private final static String KEY_STATUS_BAR_NOTIFICATION_CONFIG = "KEY_STATUS_BAR_NOTIFICATION_CONFIG"; + + // 测试过滤通知 + private final static String KEY_MSG_IGNORE = "KEY_MSG_IGNORE"; + + // 响铃配置 + private final static String KEY_RING_TOGGLE = "KEY_RING_TOGGLE"; + + // 震动配置 + private final static String KEY_VIBRATE_TOGGLE = "KEY_VIBRATE_TOGGLE"; + + // 呼吸灯配置 + private final static String KEY_LED_TOGGLE = "KEY_LED_TOGGLE"; + + // 通知栏标题配置 + private final static String KEY_NOTICE_CONTENT_TOGGLE = "KEY_NOTICE_CONTENT_TOGGLE"; + + // 删除好友同时删除备注 + private final static String KEY_DELETE_FRIEND_AND_DELETE_ALIAS = "KEY_DELETE_FRIEND_AND_DELETE_ALIAS"; + + // 保存在线状态订阅时间 + private final static String KEY_SUBSCRIBE_TIME = "KEY_SUBSCRIBE_TIME"; + + /*************************no disturb begin***************************************/ + public static final String DOWN_TIME_BEGIN = "downTimeBegin"; + + public static final String DOWN_TIME_END = "downTimeEnd"; + + public static final String DOWN_TIME_TOGGLE = "downTimeToggle"; + + public static final String DOWN_TIME_ENABLE_NOTIFICATION = "downTimeEnableNotification"; + + public static final String RING = "ring"; + + public static final String VIBRATE = "vibrate"; + + public static final String NOTIFICATION_SMALL_ICON_ID = "notificationSmallIconId"; + + public static final String NOTIFICATION_SOUND = "notificationSound"; + + public static final String HIDE_CONTENT = "hideContent"; + + public static final String LEDARGB = "ledargb"; + + public static final String LEDONMS = "ledonms"; + + public static final String LEDOFFMS = "ledoffms"; + + public static final String TITLE_ONLY_SHOW_APP_NAME = "titleOnlyShowAppName"; + + public static final String NOTIFICATION_FOLDED = "notificationFolded"; + + public static final String NOTIFICATION_FOLD_TYPE = "notificationFoldType"; + + public static final String NOTIFICATION_ENTRANCE = "notificationEntrance"; + + public static final String NOTIFICATION_COLOR = "notificationColor"; + + /**************************no disturb end************************************/ + + public static void setMsgIgnore(boolean enable) { + saveBoolean(KEY_MSG_IGNORE, enable); + } + + public static boolean getMsgIgnore() { + return getBoolean(KEY_MSG_IGNORE, false); + } + + public static void setNotificationToggle(boolean on) { + saveBoolean(KEY_SB_NOTIFY_TOGGLE, on); + } + + public static boolean getNotificationToggle() { + return getBoolean(KEY_SB_NOTIFY_TOGGLE, true); + } + + public static void setRingToggle(boolean on) { + saveBoolean(KEY_RING_TOGGLE, on); + } + + public static boolean getRingToggle() { + return getBoolean(KEY_RING_TOGGLE, true); + } + + public static void setVibrateToggle(boolean on) { + saveBoolean(KEY_VIBRATE_TOGGLE, on); + } + + public static boolean getVibrateToggle() { + return getBoolean(KEY_VIBRATE_TOGGLE, true); + } + + public static void setLedToggle(boolean on) { + saveBoolean(KEY_LED_TOGGLE, on); + } + + public static boolean getLedToggle() { + return getBoolean(KEY_LED_TOGGLE, true); + } + + public static boolean getNoticeContentToggle() { + return getBoolean(KEY_NOTICE_CONTENT_TOGGLE, false); + } + + + public static void setNoticeContentToggle(boolean on) { + saveBoolean(KEY_NOTICE_CONTENT_TOGGLE, on); + } + + public static boolean isDeleteFriendAndDeleteAlias() { + return getBoolean(KEY_DELETE_FRIEND_AND_DELETE_ALIAS, false); + } + + public static void setDeleteFriendAndDeleteAlias(boolean on) { + saveBoolean(KEY_DELETE_FRIEND_AND_DELETE_ALIAS, on); + } + + public static void setDownTimeToggle(boolean on) { + saveBoolean(KEY_DOWNTIME_TOGGLE, on); + } + + public static boolean getDownTimeToggle() { + return getBoolean(KEY_DOWNTIME_TOGGLE, false); + } + + public static void setStatusConfig(StatusBarNotificationConfig config) { + saveStatusBarNotificationConfig(KEY_STATUS_BAR_NOTIFICATION_CONFIG, config); + } + + public static StatusBarNotificationConfig getStatusConfig() { + return getConfig(KEY_STATUS_BAR_NOTIFICATION_CONFIG); + } + + public static void setTeamAnnounceClosed(String teamId, boolean closed) { + saveBoolean(KEY_TEAM_ANNOUNCE_CLOSED + teamId, closed); + } + + public static boolean getTeamAnnounceClosed(String teamId) { + return getBoolean(KEY_TEAM_ANNOUNCE_CLOSED + teamId, false); + } + + public static void setOnlineStateSubsTime(long time) { + saveLong(KEY_SUBSCRIBE_TIME, time); + } + + public static long getOnlineStateSubsTime() { + return getLong(KEY_SUBSCRIBE_TIME, 0); + } + + private static StatusBarNotificationConfig getConfig(String key) { + StatusBarNotificationConfig config = new StatusBarNotificationConfig(); + String jsonString = getSharedPreferences().getString(key, ""); + try { + JSONObject jsonObject = JSONObject.parseObject(jsonString); + if (jsonObject == null) { + return null; + } + config.downTimeBegin = jsonObject.getString(DOWN_TIME_BEGIN); + config.downTimeEnd = jsonObject.getString(DOWN_TIME_END); + config.downTimeToggle = jsonObject.getBoolean(DOWN_TIME_TOGGLE); + + Boolean downTimeEnableNotification = jsonObject.getBoolean(DOWN_TIME_ENABLE_NOTIFICATION); + config.downTimeEnableNotification = downTimeEnableNotification == null ? true : downTimeEnableNotification; + Boolean ring = jsonObject.getBoolean(RING); + config.ring = ring == null ? true : ring; + Boolean vibrate = jsonObject.getBoolean(VIBRATE); + config.vibrate = vibrate == null ? true : vibrate; + + config.notificationSmallIconId = jsonObject.getIntValue(NOTIFICATION_SMALL_ICON_ID); + config.notificationSound = jsonObject.getString(NOTIFICATION_SOUND); + config.hideContent = jsonObject.getBooleanValue(HIDE_CONTENT); + config.ledARGB = jsonObject.getIntValue(LEDARGB); + config.ledOnMs = jsonObject.getIntValue(LEDONMS); + config.ledOffMs = jsonObject.getIntValue(LEDOFFMS); + config.titleOnlyShowAppName = jsonObject.getBooleanValue(TITLE_ONLY_SHOW_APP_NAME); + + Boolean notificationFolded = jsonObject.getBoolean(NOTIFICATION_FOLDED); + config.notificationFolded = notificationFolded == null ? true : notificationFolded; + + Integer notificationFoldType = jsonObject.getInteger(NOTIFICATION_FOLD_TYPE); + config.notificationFoldStyle = notificationFoldType == null ? null : NotificationFoldStyle.value(notificationFoldType); + if( jsonObject.getString(NOTIFICATION_ENTRANCE)!=null) + { + config.notificationEntrance = (Class) Class.forName( + jsonObject.getString(NOTIFICATION_ENTRANCE)); + } + + config.notificationColor = jsonObject.getInteger(NOTIFICATION_COLOR); + } catch (Exception e) { + e.printStackTrace(); + } + return config; + } + + private static void saveStatusBarNotificationConfig(String key, StatusBarNotificationConfig config) { + SharedPreferences.Editor editor = getSharedPreferences().edit(); + JSONObject jsonObject = new JSONObject(); + try { + jsonObject.put(DOWN_TIME_BEGIN, config.downTimeBegin); + jsonObject.put(DOWN_TIME_END, config.downTimeEnd); + jsonObject.put(DOWN_TIME_TOGGLE, config.downTimeToggle); + jsonObject.put(DOWN_TIME_ENABLE_NOTIFICATION, config.downTimeEnableNotification); + jsonObject.put(RING, config.ring); + jsonObject.put(VIBRATE, config.vibrate); + jsonObject.put(NOTIFICATION_SMALL_ICON_ID, config.notificationSmallIconId); + jsonObject.put(NOTIFICATION_SOUND, config.notificationSound); + jsonObject.put(HIDE_CONTENT, config.hideContent); + jsonObject.put(LEDARGB, config.ledARGB); + jsonObject.put(LEDONMS, config.ledOnMs); + jsonObject.put(LEDOFFMS, config.ledOffMs); + jsonObject.put(TITLE_ONLY_SHOW_APP_NAME, config.titleOnlyShowAppName); + jsonObject.put(NOTIFICATION_FOLDED, config.notificationFolded); + jsonObject.put(NOTIFICATION_FOLD_TYPE, config.notificationFoldStyle.getValue()); + if (config.notificationEntrance != null) { + jsonObject.put(NOTIFICATION_ENTRANCE, config.notificationEntrance.getName()); + } + jsonObject.put(NOTIFICATION_COLOR, config.notificationColor); + } catch (Exception e) { + e.printStackTrace(); + } + editor.putString(key, jsonObject.toString()); + editor.commit(); + } + + private static boolean getBoolean(String key, boolean value) { + return getSharedPreferences().getBoolean(key, value); + } + + private static void saveBoolean(String key, boolean value) { + SharedPreferences.Editor editor = getSharedPreferences().edit(); + editor.putBoolean(key, value); + editor.commit(); + } + + private static void saveInt(String key, int value) { + SharedPreferences.Editor editor = getSharedPreferences().edit(); + editor.putInt(key, value); + editor.commit(); + } + + private static int getInt(String key, int value) { + return getSharedPreferences().getInt(key, value); + } + + private static void saveLong(String key, long value) { + SharedPreferences.Editor editor = getSharedPreferences().edit(); + editor.putLong(key, value); + editor.commit(); + } + + private static long getLong(String key, long value) { + return getSharedPreferences().getLong(key, value); + } + + static SharedPreferences getSharedPreferences() { + return DemoCache.getContext().getSharedPreferences("Demo." + DemoCache.getAccount(), Context.MODE_PRIVATE); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/EnterMode.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/EnterMode.java new file mode 100644 index 0000000..964a1f7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/EnterMode.java @@ -0,0 +1,11 @@ +package cn.shangyu.gdxzExpert.netease.constants; + +/** + * Created by hzsunyj on 2019-09-03. + */ +public interface EnterMode { + + int NORMAL = 0; + + int INDEPENDENT = 1; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/Extras.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/Extras.java new file mode 100644 index 0000000..d598fee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/constants/Extras.java @@ -0,0 +1,19 @@ +package cn.shangyu.gdxzExpert.netease.constants; + +/** + * Created by hzsunyj on 2019-09-03. + */ +public interface Extras { + + String MODE= "mode"; + + String APP_KEY = "app_key"; + + String ACCOUNT = "account"; + + String PWD = "pwd"; + + String ROOM_ID = "room_id"; + + String LINK = "link"; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHelper.java new file mode 100644 index 0000000..be4ba30 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHelper.java @@ -0,0 +1,38 @@ +package cn.shangyu.gdxzExpert.netease.contact; + +import android.content.Context; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.contact.ContactEventListener; + +/** + * UIKit联系人列表定制展示类 + *

+ * Created by huangjun on 2015/9/11. + */ +public class ContactHelper { + + public static void init() { + setContactEventListener(); + } + + private static void setContactEventListener() { + NimUIKit.setContactEventListener(new ContactEventListener() { + @Override + public void onItemClick(Context context, String account) { + UserProfileActivity.start(context, account); + } + + @Override + public void onItemLongClick(Context context, String account) { + + } + + @Override + public void onAvatarClick(Context context, String account) { + UserProfileActivity.start(context, account); + } + }); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHttpClient.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHttpClient.java new file mode 100644 index 0000000..83d491a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/ContactHttpClient.java @@ -0,0 +1,135 @@ +package cn.shangyu.gdxzExpert.netease.contact; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; + +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import com.netease.nim.uikit.common.http.NimHttpClient; +import com.netease.nim.uikit.common.util.string.MD5; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.config.DemoServers; + +/** + * 通讯录数据获取协议的实现 + *

+ * Created by huangjun on 2015/3/6. + */ +public class ContactHttpClient { + private static final String TAG = "ContactHttpClient"; + + // code + private static final int RESULT_CODE_SUCCESS = 200; + + // api + private static final String API_NAME_REGISTER = "createDemoUser"; + + // header + private static final String HEADER_KEY_APP_KEY = "appkey"; + private static final String HEADER_CONTENT_TYPE = "Content-Type"; + private static final String HEADER_USER_AGENT = "User-Agent"; + + // request + private static final String REQUEST_USER_NAME = "username"; + private static final String REQUEST_NICK_NAME = "nickname"; + private static final String REQUEST_PASSWORD = "password"; + + // result + private static final String RESULT_KEY_RES = "res"; + private static final String RESULT_KEY_ERROR_MSG = "errmsg"; + + + public interface ContactHttpCallback { + void onSuccess(T t); + + void onFailed(int code, String errorMsg); + } + + private static ContactHttpClient instance; + + public static synchronized ContactHttpClient getInstance() { + if (instance == null) { + instance = new ContactHttpClient(); + } + + return instance; + } + + private ContactHttpClient() { + NimHttpClient.getInstance().init(DemoCache.getContext()); + } + + + /** + * 向应用服务器创建账号(注册账号) + * 由应用服务器调用WEB SDK接口将新注册的用户数据同步到云信服务器 + */ + public void register(String account, String nickName, String password, final ContactHttpCallback callback) { + String url = DemoServers.apiServer() + API_NAME_REGISTER; + password = MD5.getStringMD5(password); + try { + nickName = URLEncoder.encode(nickName, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + Map headers = new HashMap<>(1); + String appKey = readAppKey(); + headers.put(HEADER_CONTENT_TYPE, "application/x-www-form-urlencoded; charset=utf-8"); + headers.put(HEADER_USER_AGENT, "nim_demo_android"); + headers.put(HEADER_KEY_APP_KEY, appKey); + + StringBuilder body = new StringBuilder(); + body.append(REQUEST_USER_NAME).append("=").append(account.toLowerCase()).append("&") + .append(REQUEST_NICK_NAME).append("=").append(nickName).append("&") + .append(REQUEST_PASSWORD).append("=").append(password); + String bodyString = body.toString(); + + NimHttpClient.getInstance().execute(url, headers, bodyString, new NimHttpClient.NimHttpCallback() { + @Override + public void onResponse(String response, int code, Throwable exception) { + if (code != 200 || exception != null) { + String errMsg = exception != null ? exception.getMessage() : "null"; +// LogUtil.e(TAG, "register failed : code = " + code + ", errorMsg = " + errMsg); + if (callback != null) { + callback.onFailed(code, errMsg); + } + return; + } + + try { + JSONObject resObj = JSONObject.parseObject(response); + int resCode = resObj.getIntValue(RESULT_KEY_RES); + if (resCode == RESULT_CODE_SUCCESS) { + callback.onSuccess(null); + } else { + String error = resObj.getString(RESULT_KEY_ERROR_MSG); + callback.onFailed(resCode, error); + } + } catch (JSONException e) { + callback.onFailed(-1, e.getMessage()); + } + } + }); + } + + private String readAppKey() { + try { + ApplicationInfo appInfo = DemoCache.getContext(). + getPackageManager(). + getApplicationInfo(DemoCache.getContext().getPackageName(), PackageManager.GET_META_DATA); + if (appInfo != null) { + return appInfo.metaData.getString("com.netease.nim.appKey"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserConstant.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserConstant.java new file mode 100644 index 0000000..32f55af --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserConstant.java @@ -0,0 +1,14 @@ +package cn.shangyu.gdxzExpert.netease.contact; + +/** + * Created by hzxuwen on 2015/9/17. + */ +public class UserConstant { + public static final int KEY_NICKNAME = 1; + public static final int KEY_GENDER = 2; + public static final int KEY_BIRTH = 3; + public static final int KEY_PHONE = 4; + public static final int KEY_EMAIL = 5; + public static final int KEY_SIGNATURE = 6; + public static final int KEY_ALIAS = 7; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserProfileActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserProfileActivity.java new file mode 100644 index 0000000..8ee2c2e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserProfileActivity.java @@ -0,0 +1,644 @@ +package cn.shangyu.gdxzExpert.netease.contact; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.SimpleCallback; +import com.netease.nim.uikit.api.model.contact.ContactChangedObserver; +import com.netease.nim.uikit.api.wrapper.NimToolBarOptions; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.activity.ToolBarOptions; +import com.netease.nim.uikit.common.activity.UI; +import com.netease.nim.uikit.common.ui.dialog.DialogMaker; +import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialog; +import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper; +import com.netease.nim.uikit.common.ui.dialog.EasyEditDialog; +import com.netease.nim.uikit.common.ui.imageview.HeadImageView; +import com.netease.nim.uikit.common.ui.widget.SwitchButton; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.common.util.sys.NetworkUtil; +import com.netease.nim.uikit.impl.cache.StickTopCache; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.friend.FriendService; +import com.netease.nimlib.sdk.friend.FriendServiceObserve; +import com.netease.nimlib.sdk.friend.constant.VerifyType; +import com.netease.nimlib.sdk.friend.model.AddFriendData; +import com.netease.nimlib.sdk.friend.model.MuteListChangedNotify; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.msg.model.StickTopSessionInfo; +import com.netease.nimlib.sdk.uinfo.constant.GenderEnum; +import com.netease.nimlib.sdk.uinfo.model.NimUserInfo; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; + +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +/** + * 用户资料页面 + * Created by huangjun on 2015/8/11. + */ +public class UserProfileActivity extends UI { + + private static final String TAG = UserProfileActivity.class.getSimpleName(); + + private final boolean FLAG_ADD_FRIEND_DIRECTLY = true; // 是否直接加为好友开关,false为需要好友申请 + + private final String KEY_BLACK_LIST = "black_list"; + + private final String KEY_MSG_NOTICE = "msg_notice"; + + private final String KEY_RECENT_STICKY = "recent_contacts_sticky"; + + private String account; + + // 基本信息 + private HeadImageView headImageView; + + private TextView nameText; + + private ImageView genderImage; + + private TextView accountText; + + private TextView birthdayText; + + private TextView mobileText; + + private TextView emailText; + + private TextView signatureText; + + private RelativeLayout birthdayLayout; + + private RelativeLayout phoneLayout; + + private RelativeLayout emailLayout; + + private RelativeLayout signatureLayout; + + private RelativeLayout aliasLayout; + + private TextView nickText; + + // 开关 + private ViewGroup toggleLayout; + + private Button addFriendBtn; + + private Button removeFriendBtn; + + private Button chatBtn; + + private SwitchButton blackSwitch; + + private SwitchButton noticeSwitch; + + private SwitchButton stickySwitch; + + public static void start(Context context, String account) { + Intent intent = new Intent(); + intent.setClass(context, UserProfileActivity.class); + intent.putExtra(Extras.EXTRA_ACCOUNT, account); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + context.startActivity(intent); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.user_profile_activity); + account = getIntent().getStringExtra(Extras.EXTRA_ACCOUNT); + if (TextUtils.isEmpty(account)) { + ToastHelper.showToast(UserProfileActivity.this, "传入的帐号为空"); + finish(); + return; + } + ToolBarOptions options = new NimToolBarOptions(); + options.titleId = com.netease.nim.uikit.R.string.user_profile; + setToolBar(R.id.toolbar, options); + initActionbar(); + findViews(); + registerObserver(true); + } + + @Override + protected void onResume() { + super.onResume(); + updateUserInfo(); + updateToggleView(); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + registerObserver(false); + } + + private void registerObserver(boolean register) { + NimUIKit.getContactChangedObservable().registerObserver(friendDataChangedObserver, register); + NIMClient.getService(FriendServiceObserve.class).observeMuteListChangedNotify(muteListChangedNotifyObserver, + register); + } + + Observer muteListChangedNotifyObserver = new Observer() { + + @Override + public void onEvent(MuteListChangedNotify notify) { + setToggleBtn(noticeSwitch, !notify.isMute()); + } + }; + + ContactChangedObserver friendDataChangedObserver = new ContactChangedObserver() { + + @Override + public void onAddedOrUpdatedFriends(List account) { + updateUserOperatorView(); + } + + @Override + public void onDeletedFriends(List account) { + updateUserOperatorView(); + } + + @Override + public void onAddUserToBlackList(List account) { + updateUserOperatorView(); + } + + @Override + public void onRemoveUserFromBlackList(List account) { + updateUserOperatorView(); + } + }; + + private void findViews() { + headImageView = findView(R.id.user_head_image); + nameText = findView(R.id.user_name); + genderImage = findView(R.id.gender_img); + accountText = findView(R.id.user_account); + toggleLayout = findView(R.id.toggle_layout); + addFriendBtn = findView(R.id.add_buddy); + chatBtn = findView(R.id.begin_chat); + removeFriendBtn = findView(R.id.remove_buddy); + birthdayLayout = findView(R.id.birthday); + nickText = findView(R.id.user_nick); + birthdayText = birthdayLayout.findViewById(com.netease.nim.uikit.R.id.value); + phoneLayout = findView(R.id.phone); + mobileText = phoneLayout.findViewById(com.netease.nim.uikit.R.id.value); + emailLayout = findView(R.id.email); + emailText = emailLayout.findViewById(com.netease.nim.uikit.R.id.value); + signatureLayout = findView(R.id.signature); + signatureText = signatureLayout.findViewById(com.netease.nim.uikit.R.id.value); + aliasLayout = findView(R.id.alias); + ((TextView) birthdayLayout.findViewById(R.id.attribute)).setText(com.netease.nim.uikit.R.string.birthday); + ((TextView) phoneLayout.findViewById(R.id.attribute)).setText(com.netease.nim.uikit.R.string.phone); + ((TextView) emailLayout.findViewById(R.id.attribute)).setText(com.netease.nim.uikit.R.string.email); + ((TextView) signatureLayout.findViewById(R.id.attribute)).setText(com.netease.nim.uikit.R.string.signature); + ((TextView) aliasLayout.findViewById(R.id.attribute)).setText(com.netease.nim.uikit.R.string.alias); + addFriendBtn.setOnClickListener(onClickListener); + chatBtn.setOnClickListener(onClickListener); + removeFriendBtn.setOnClickListener(onClickListener); +// aliasLayout.setOnClickListener(v -> UserProfileEditItemActivity.startActivity(UserProfileActivity.this, UserConstant.KEY_ALIAS, account)); + } + + private void initActionbar() { + TextView toolbarView = findView(com.netease.nim.uikit.R.id.action_bar_right_clickable_textview); + if (!TextUtils.equals(account, DemoCache.getAccount())) { + toolbarView.setVisibility(View.GONE); + return; + } else { + toolbarView.setVisibility(View.VISIBLE); + } + toolbarView.setText(com.netease.nim.uikit.R.string.edit); +// toolbarView.setOnClickListener(v -> UserProfileSettingActivity.start(UserProfileActivity.this, account)); + } + + private void setToggleBtn(SwitchButton btn, boolean isChecked) { + btn.setCheck(isChecked); + } + + private void updateUserInfo() { + if (NimUIKit.getUserInfoProvider().getUserInfo(account) != null) { + updateUserInfoView(); + return; + } + NimUIKit.getUserInfoProvider().getUserInfoAsync(account, (SimpleCallback) (success, result, code) -> updateUserInfoView()); + } + + private void updateUserInfoView() { + accountText.setText("帐号:" + account); + headImageView.loadBuddyAvatar(account); + if (TextUtils.equals(account, DemoCache.getAccount())) { + nameText.setText(UserInfoHelper.getUserName(account)); + } + final NimUserInfo userInfo = (NimUserInfo) NimUIKit.getUserInfoProvider().getUserInfo(account); + if (userInfo == null) { + LogUtil.e(TAG, "userInfo is null when updateUserInfoView"); + return; + } + if (userInfo.getGenderEnum() == GenderEnum.MALE) { + genderImage.setVisibility(View.VISIBLE); + genderImage.setBackgroundResource(com.netease.nim.uikit.R.drawable.nim_male); + } else if (userInfo.getGenderEnum() == GenderEnum.FEMALE) { + genderImage.setVisibility(View.VISIBLE); + genderImage.setBackgroundResource(R.drawable.nim_female); + } else { + genderImage.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(userInfo.getBirthday())) { + birthdayLayout.setVisibility(View.VISIBLE); + birthdayText.setText(userInfo.getBirthday()); + } else { + birthdayLayout.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(userInfo.getMobile())) { + phoneLayout.setVisibility(View.VISIBLE); + mobileText.setText(userInfo.getMobile()); + } else { + phoneLayout.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(userInfo.getEmail())) { + emailLayout.setVisibility(View.VISIBLE); + emailText.setText(userInfo.getEmail()); + } else { + emailLayout.setVisibility(View.GONE); + } + if (!TextUtils.isEmpty(userInfo.getSignature())) { + signatureLayout.setVisibility(View.VISIBLE); + signatureText.setText(userInfo.getSignature()); + } else { + signatureLayout.setVisibility(View.GONE); + } + + } + + private void updateUserOperatorView() { + chatBtn.setVisibility(View.VISIBLE); + if (NIMClient.getService(FriendService.class).isMyFriend(account)) { + removeFriendBtn.setVisibility(View.VISIBLE); + addFriendBtn.setVisibility(View.GONE); + updateAlias(true); + } else { + addFriendBtn.setVisibility(View.VISIBLE); + removeFriendBtn.setVisibility(View.GONE); + updateAlias(false); + } + } + + private void updateToggleView() { + if (DemoCache.getAccount() != null && !DemoCache.getAccount().equals(account)) { + boolean black = NIMClient.getService(FriendService.class).isInBlackList(account); + boolean notice = NIMClient.getService(FriendService.class).isNeedMessageNotify(account); + if (blackSwitch == null) { + blackSwitch = addToggleItemView(KEY_BLACK_LIST, com.netease.nim.uikit.R.string.black_list, black); + } else { + setToggleBtn(blackSwitch, black); + } + if (noticeSwitch == null) { + noticeSwitch = addToggleItemView(KEY_MSG_NOTICE, com.netease.nim.uikit.R.string.msg_notice, notice); + } else { + setToggleBtn(noticeSwitch, notice); + } + if (NIMClient.getService(FriendService.class).isMyFriend(account)) { + RecentContact recentContact = NIMClient.getService(MsgService.class).queryRecentContact(account, + SessionTypeEnum.P2P); + boolean isSticky = StickTopCache.isStickTop(account, SessionTypeEnum.P2P); + if (stickySwitch == null) { + stickySwitch = addToggleItemView(KEY_RECENT_STICKY, com.netease.nim.uikit.R.string.recent_sticky, isSticky); + } else { + setToggleBtn(stickySwitch, isSticky); + } + } + updateUserOperatorView(); + } + } + + + private SwitchButton addToggleItemView(String key, int titleResId, boolean initState) { + ViewGroup vp = (ViewGroup) getLayoutInflater().inflate(com.netease.nim.uikit.R.layout.nim_user_profile_toggle_item, null); + ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, + (int) getResources() + .getDimension(com.netease.nim.uikit.R.dimen.isetting_item_height)); + vp.setLayoutParams(vlp); + TextView titleText = vp.findViewById(com.netease.nim.uikit.R.id.user_profile_title); + titleText.setText(titleResId); + SwitchButton switchButton = vp.findViewById(com.netease.nim.uikit.R.id.user_profile_toggle); + switchButton.setCheck(initState); + switchButton.setOnChangedListener(onChangedListener); + switchButton.setTag(key); + toggleLayout.addView(vp); + return switchButton; + } + + private void updateAlias(boolean isFriend) { + if (isFriend) { + aliasLayout.setVisibility(View.VISIBLE); + aliasLayout.findViewById(com.netease.nim.uikit.R.id.arrow_right).setVisibility(View.VISIBLE); + String alias = NimUIKit.getContactProvider().getAlias(account); + String name = UserInfoHelper.getUserName(account); + if (!TextUtils.isEmpty(alias)) { + nickText.setVisibility(View.VISIBLE); + nameText.setText(alias); + nickText.setText("昵称:" + name); + } else { + nickText.setVisibility(View.GONE); + nameText.setText(name); + } + } else { + aliasLayout.setVisibility(View.GONE); + aliasLayout.findViewById(com.netease.nim.uikit.R.id.arrow_right).setVisibility(View.GONE); + nickText.setVisibility(View.GONE); + nameText.setText(UserInfoHelper.getUserName(account)); + } + } + + private SwitchButton.OnChangedListener onChangedListener = (v, checkState) -> { + final String key = (String) v.getTag(); + if (KEY_RECENT_STICKY.equals(key)) { + updateSticky(checkState); + }else if (key.equals(KEY_BLACK_LIST)) { + updateBlack(checkState); + } else if (key.equals(KEY_MSG_NOTICE)) { + updateNotice(checkState); + } + }; + + private void updateNotice(boolean checkState) { + if (!NetworkUtil.isNetAvailable(UserProfileActivity.this)) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + noticeSwitch.setCheck(!checkState); + return; + } + NIMClient.getService(FriendService.class).setMessageNotify(account, checkState).setCallback( + new RequestCallback() { + + @Override + public void onSuccess(Void param) { + if (checkState) { + ToastHelper.showToast(UserProfileActivity.this, "开启消息提醒成功"); + } else { + ToastHelper.showToast(UserProfileActivity.this, "关闭消息提醒成功"); + } + } + + @Override + public void onFailed(int code) { + if (code == 408) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + } else { + ToastHelper.showToast(UserProfileActivity.this, "on failed:" + code); + } + noticeSwitch.setCheck(!checkState); + } + + @Override + public void onException(Throwable exception) { + } + }); + } + + private void updateBlack(boolean checkState) { + if (!NetworkUtil.isNetAvailable(UserProfileActivity.this)) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + blackSwitch.setCheck(!checkState); + return; + } + if (checkState) { + NIMClient.getService(FriendService.class).addToBlackList(account).setCallback( + new RequestCallback() { + + @Override + public void onSuccess(Void param) { + ToastHelper.showToast(UserProfileActivity.this, "加入黑名单成功"); + } + + @Override + public void onFailed(int code) { + if (code == 408) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + } else { + ToastHelper.showToast(UserProfileActivity.this, "on failed:" + code); + } + blackSwitch.setCheck(false); + } + + @Override + public void onException(Throwable exception) { + } + }); + } else { + NIMClient.getService(FriendService.class).removeFromBlackList(account).setCallback( + new RequestCallback() { + + @Override + public void onSuccess(Void param) { + ToastHelper.showToast(UserProfileActivity.this, "移除黑名单成功"); + } + + @Override + public void onFailed(int code) { + if (code == 408) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + } else { + ToastHelper.showToast(UserProfileActivity.this, "on failed:" + code); + } + blackSwitch.setCheck(true); + } + + @Override + public void onException(Throwable exception) { + } + }); + } + } + + private void updateSticky(boolean checkState) { + MsgService msgService = NIMClient.getService(MsgService.class); + //查询之前是不是存在会话记录 + RecentContact recentContactFromDB = msgService.queryRecentContact(account, SessionTypeEnum.P2P); + //置顶 + if (checkState) { + //如果之前不存在,创建一条空的会话记录 + final RecentContact recent = recentContactFromDB != null ? recentContactFromDB : + msgService.createEmptyRecentContact(account, SessionTypeEnum.P2P, 0, System.currentTimeMillis(), true); + // 执行置顶操作 + msgService.addStickTopSession(account, SessionTypeEnum.P2P, "").setCallback(new RequestCallbackWrapper() { + @Override + public void onResult(int code, StickTopSessionInfo result, Throwable exception) { + if (ResponseCode.RES_SUCCESS == code) { + StickTopCache.recordStickTop(result, true); + msgService.updateRecentAndNotify(recent); + } + } + }); + } + //取消置顶 + else { + msgService.removeStickTopSession(account, SessionTypeEnum.P2P, "").setCallback(new RequestCallbackWrapper() { + @Override + public void onResult(int code, Void result, Throwable exception) { + if (ResponseCode.RES_SUCCESS == code && recentContactFromDB != null) { + StickTopCache.recordStickTop(account, SessionTypeEnum.P2P, false); + msgService.updateRecentAndNotify(recentContactFromDB); + } + } + }); + + } + } + + private View.OnClickListener onClickListener = new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (v == addFriendBtn) { + if (FLAG_ADD_FRIEND_DIRECTLY) { + doAddFriend(null, true); // 直接加为好友 + } else { + onAddFriendByVerify(); // 发起好友验证请求 + } + } else if (v == removeFriendBtn) { + onRemoveFriend(); + } else if (v == chatBtn) { + onChat(); + } + } + }; + + /** + * 通过验证方式添加好友 + */ + private void onAddFriendByVerify() { + final EasyEditDialog requestDialog = new EasyEditDialog(this); + requestDialog.setEditTextMaxLength(32); + requestDialog.setTitle(getString(com.netease.nim.uikit.R.string.add_friend_verify_tip)); + requestDialog.addNegativeButtonListener(com.netease.nim.uikit.R.string.cancel, v -> requestDialog.dismiss()); + requestDialog.addPositiveButtonListener(com.netease.nim.uikit.R.string.send, v -> { + requestDialog.dismiss(); + String msg = requestDialog.getEditMessage(); + doAddFriend(msg, false); + }); + requestDialog.setOnCancelListener(dialog -> { + }); + requestDialog.show(); + } + + private void doAddFriend(String msg, boolean addDirectly) { + if (!NetworkUtil.isNetAvailable(this)) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + return; + } + if (!TextUtils.isEmpty(account) && account.equals(DemoCache.getAccount())) { + ToastHelper.showToast(UserProfileActivity.this, "不能加自己为好友"); + return; + } + final VerifyType verifyType = addDirectly ? VerifyType.DIRECT_ADD : VerifyType.VERIFY_REQUEST; + DialogMaker.showProgressDialog(this, "", true); + NIMClient.getService(FriendService.class).addFriend(new AddFriendData(account, verifyType, msg)).setCallback( + new RequestCallback() { + + @Override + public void onSuccess(Void param) { + DialogMaker.dismissProgressDialog(); + updateUserOperatorView(); + if (VerifyType.DIRECT_ADD == verifyType) { + ToastHelper.showToast(UserProfileActivity.this, "添加好友成功"); + } else { + ToastHelper.showToast(UserProfileActivity.this, "添加好友请求发送成功"); + } + } + + @Override + public void onFailed(int code) { + DialogMaker.dismissProgressDialog(); + if (code == 408) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + } else { + ToastHelper.showToast(UserProfileActivity.this, "on failed:" + code); + } + } + + @Override + public void onException(Throwable exception) { + DialogMaker.dismissProgressDialog(); + } + }); + Log.i(TAG, "onAddFriendByVerify"); + } + + private void onRemoveFriend() { + Log.i(TAG, "onRemoveFriend"); + if (!NetworkUtil.isNetAvailable(this)) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + return; + } + EasyAlertDialog dialog = EasyAlertDialogHelper.createOkCancelDiolag(this, getString(com.netease.nim.uikit.R.string.remove_friend), getString(com.netease.nim.uikit.R.string.remove_friend_tip), true, new EasyAlertDialogHelper.OnDialogActionListener() { + + @Override + public void doCancelAction() { + } + + @Override + public void doOkAction() { + DialogMaker.showProgressDialog(UserProfileActivity.this, "", true); + boolean deleteAlias = UserPreferences.isDeleteFriendAndDeleteAlias(); + NIMClient.getService(FriendService.class).deleteFriend(account, deleteAlias).setCallback( + new RequestCallback() { + + @Override + public void onSuccess(Void param) { + DialogMaker.dismissProgressDialog(); + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.remove_friend_success); + finish(); + } + + @Override + public void onFailed(int code) { + DialogMaker.dismissProgressDialog(); + if (code == 408) { + ToastHelper.showToast(UserProfileActivity.this, com.netease.nim.uikit.R.string.network_is_not_available); + } else { + ToastHelper.showToast(UserProfileActivity.this, "on failed:" + code); + } + } + + @Override + public void onException(Throwable exception) { + DialogMaker.dismissProgressDialog(); + } + }); + } + }); + if (!isFinishing() && !isDestroyedCompatible()) { + dialog.show(); + } + } + + private void onChat() { + Log.i(TAG, "onChat"); + SessionHelper.startP2PSession(this, account,general,""); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserUpdateHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserUpdateHelper.java new file mode 100644 index 0000000..33490e0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/contact/UserUpdateHelper.java @@ -0,0 +1,48 @@ +package cn.shangyu.gdxzExpert.netease.contact; + + +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.uinfo.UserService; +import com.netease.nimlib.sdk.uinfo.constant.UserInfoFieldEnum; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created by hzxuwen on 2015/9/17. + */ +public class UserUpdateHelper { + private static final String TAG = UserUpdateHelper.class.getSimpleName(); + + /** + * 更新用户资料 + */ + public static void update(final UserInfoFieldEnum field, final Object value, RequestCallbackWrapper callback) { + Map fields = new HashMap<>(1); + fields.put(field, value); + update(fields, callback); + } + + private static void update(final Map fields, final RequestCallbackWrapper callback) { + NIMClient.getService(UserService.class).updateUserInfo(fields).setCallback(new RequestCallbackWrapper() { + @Override + public void onResult(int code, Void result, Throwable exception) { + + if (code == ResponseCode.RES_SUCCESS) { + LogUtil.i(TAG, "update userInfo success, update fields count=" + fields.size()); + } else { + if (exception != null) { +// ToastHelper.showToast(DemoCache.getContext(), R.string.user_info_update_failed); + LogUtil.i(TAG, "update userInfo failed, exception=" + exception.getMessage()); + } + } + if (callback != null) { + callback.onResult(code, result, exception); + } + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/DemoOnlineStateContentProvider.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/DemoOnlineStateContentProvider.java new file mode 100644 index 0000000..b89b783 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/DemoOnlineStateContentProvider.java @@ -0,0 +1,45 @@ +package cn.shangyu.gdxzExpert.netease.event; + +import android.text.TextUtils; + +import com.netease.nim.uikit.api.model.main.OnlineStateContentProvider; + +import cn.shangyu.gdxzExpert.netease.DemoCache; + +/** + * Created by hzchenkang on 2017/3/31. + */ + +public class DemoOnlineStateContentProvider implements OnlineStateContentProvider { + + @Override + public String getSimpleDisplay(String account) { + String content = getDisplayContent(account, true); + if (!TextUtils.isEmpty(content)) { + content = "[" + content + "]"; + } + return content; + } + + @Override + public String getDetailDisplay(String account) { + return getDisplayContent(account, false); + } + + private String getDisplayContent(String account, boolean simple) { + if (account == null || account.equals(DemoCache.getAccount())) { + return ""; + } + + // 被过滤掉的直接显示在线,如机器人 + if (OnlineStateEventSubscribe.subscribeFilter(account)) { + return "在线"; + } + + // 检查是否订阅过 + OnlineStateEventManager.checkSubscribe(account); + + OnlineState onlineState = OnlineStateEventCache.getOnlineState(account); + return OnlineStateEventManager.getOnlineClientContent(DemoCache.getContext(), onlineState, simple); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/EventFilter.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/EventFilter.java new file mode 100644 index 0000000..736f755 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/EventFilter.java @@ -0,0 +1,92 @@ +package cn.shangyu.gdxzExpert.netease.event; + +import com.netease.nimlib.sdk.event.model.Event; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by hzchenkang on 2017/4/10. + */ + +public class EventFilter { + + private Map timeFilter; + + private EventFilter() { + timeFilter = new HashMap<>(); + } + + private static class Instance { + private static EventFilter instance = new EventFilter(); + } + + public static EventFilter getInstance() { + return Instance.instance; + } + + /** + * 一般地,先发布事件先下发,但是可能存在同一事件先后顺序错乱的情况,因为事件以最后时间为准,因此这里过滤掉无效旧的事件 + * + * @param events + * @return + */ + public List filterOlderEvent(List events) { + if (events == null || events.isEmpty()) { + return null; + } + List results = new ArrayList<>(); + for (Event event : events) { + KeyModel key = new KeyModel(event.getEventType(), event.getPublisherAccount()); + long eventTime = event.getPublishTime(); + + if (timeFilter.containsKey(key)) { + long lastEventTime = timeFilter.get(key); + if (eventTime < lastEventTime) { + continue; + } + } + timeFilter.put(key, eventTime); + results.add(event); + } + return results; + } + + private static class KeyModel { + private int eventType; + private String id = ""; + + public KeyModel(int eventType, String id) { + this.eventType = eventType; + this.id = id; + } + + @Override + public int hashCode() { + if (id == null) { + return eventType; + } else { + return eventType + 32 * id.hashCode(); + } + } + + @Override + public boolean equals(Object o) { + if (o == null || !(o instanceof KeyModel)) { + return false; + } + KeyModel other = (KeyModel) o; + if (eventType == other.eventType) { + if (id == null) { + return other.id == null; + } else { + return id.equals(other.id); + } + } else { + return false; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/NetStateCode.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/NetStateCode.java new file mode 100644 index 0000000..be8a4f2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/NetStateCode.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.netease.event; + +public enum NetStateCode { + /** + * 未知 + */ + Unkown(0), + /** + * wifi + */ + Wifi(1), + /** + * WWAN + */ + WWAN(2), + /** + * 2G + */ + _2G(3), + /** + * 3G + */ + _3G(4), + /** + * 4G + */ + _4G(5); + + private int value; + + NetStateCode(int netState) { + this.value = netState; + } + + public int getValue() { + return value; + } + + public static NetStateCode getNetStateCode(int value) { + switch (value) { + case 0: + return Unkown; + case 1: + return Wifi; + case 2: + return WWAN; + case 3: + return _2G; + case 4: + return _3G; + case 5: + return _4G; + default: + return null; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineState.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineState.java new file mode 100644 index 0000000..62ffbc8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineState.java @@ -0,0 +1,62 @@ +package cn.shangyu.gdxzExpert.netease.event; + +/** + * 在线状态 + */ + +public class OnlineState { + + /** + * 客户端类型,参照 {@link com.netease.nimlib.sdk.auth.ClientType} + */ + private int onlineClient; + + /** + * 网络状态,WIFI,4G,3G,2G + */ + private NetStateCode netState; + + /** + * 在线状态,0 在线 1 忙碌 2 离开 + */ + private OnlineStateCode onlineState; + + public OnlineState(int onlineClient, int netState, int onlineState) { + this.onlineClient = onlineClient; + this.netState = NetStateCode.getNetStateCode(netState); + this.onlineState = OnlineStateCode.getOnlineStateCode(onlineState); + } + + public OnlineState(int onlineClient, NetStateCode netState, OnlineStateCode onlineState) { + this.onlineClient = onlineClient; + this.netState = netState; + this.onlineState = onlineState; + } + + /** + * 获取在线状态 + * + * @return onlineState + */ + public OnlineStateCode getOnlineState() { + return onlineState; + } + + /** + * 获取在线客户端类型 + * + * @return onlineClient + */ + public int getOnlineClient() { + return onlineClient; + } + + /** + * 获取网络状态 + * + * @return netState + */ + public NetStateCode getNetState() { + return netState; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateCode.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateCode.java new file mode 100644 index 0000000..cae8791 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateCode.java @@ -0,0 +1,40 @@ +package cn.shangyu.gdxzExpert.netease.event; + +public enum OnlineStateCode { + /** + * 在线 + */ + Online(0), + /** + * 忙碌 + */ + Busy(1), + /** + * 离线 + */ + Offline(2); + + + private int value; + + OnlineStateCode(int netState) { + this.value = netState; + } + + public int getValue() { + return value; + } + + public static OnlineStateCode getOnlineStateCode(int value) { + switch (value) { + case 0: + return Online; + case 1: + return Busy; + case 2: + return Offline; + default: + return null; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventCache.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventCache.java new file mode 100644 index 0000000..c30e8d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventCache.java @@ -0,0 +1,65 @@ +package cn.shangyu.gdxzExpert.netease.event; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * Created by hzchenkang on 2017/4/11. + */ + +public class OnlineStateEventCache { + + private static Map onlineStateCache = new HashMap<>(); + + // 管理在线状态订阅账号 + private static Set subscribeAccounts = new HashSet<>(); + + public static OnlineState getOnlineState(String account) { + return onlineStateCache.get(account); + } + + public static void cacheOnlineState(String account, OnlineState state) { + onlineStateCache.put(account, state); + } + + public static void removeOnlineState(List accounts) { + if (accounts != null && !accounts.isEmpty()) { + for (String account : accounts) { + onlineStateCache.remove(account); + } + } + } + + public static void addSubsAccounts(List accounts) { + subscribeAccounts.addAll(accounts); + } + + public static void addSubsAccount(String accounts) { + subscribeAccounts.add(accounts); + } + + public static boolean hasSubscribed(String account) { + return subscribeAccounts.contains(account); + } + + public static void removeSubsAccounts(List accounts) { + subscribeAccounts.removeAll(accounts); + } + + public static List getSubsAccounts() { + return new ArrayList<>(subscribeAccounts); + } + + public static void resetCache() { + onlineStateCache.clear(); + subscribeAccounts.clear(); + } + + public static void clearSubsAccounts() { + subscribeAccounts.clear(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventConfig.java new file mode 100644 index 0000000..d18bfe4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventConfig.java @@ -0,0 +1,46 @@ +package cn.shangyu.gdxzExpert.netease.event; + +import android.text.TextUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +/** + * 在线状态事件扩展字段 config 格式 + */ + +public class OnlineStateEventConfig { + + // 多端在线状态配置解析 + public static final String KEY_NET_STATE = "net_state"; + public static final String KEY_ONLINE_STATE = "online_state"; //0 在线 1忙碌 2离开"; + + + public static String buildConfig(int netState, int onlineState) { + JSONObject json = new JSONObject(); + try { + json.put(KEY_NET_STATE, netState); + json.put(KEY_ONLINE_STATE, onlineState); + } catch (JSONException e) { + e.printStackTrace(); + } + return json.toString(); + } + + public static OnlineState parseConfig(String config, int clientType) { + if (TextUtils.isEmpty(config)) { + return null; + } + OnlineState state = null; + try { + JSONObject json = new JSONObject(config); + int netState = json.getInt(KEY_NET_STATE); + int onlineState = json.getInt(KEY_ONLINE_STATE); + state = new OnlineState(clientType, netState, onlineState); + } catch (JSONException e) { + e.printStackTrace(); + } + return state; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventManager.java new file mode 100644 index 0000000..26271df --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventManager.java @@ -0,0 +1,450 @@ +package cn.shangyu.gdxzExpert.netease.event; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.contact.ContactChangedObserver; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.common.util.sys.NetworkUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.AuthServiceObserver; +import com.netease.nimlib.sdk.auth.ClientType; +import com.netease.nimlib.sdk.event.EventSubscribeService; +import com.netease.nimlib.sdk.event.EventSubscribeServiceObserver; +import com.netease.nimlib.sdk.event.model.Event; +import com.netease.nimlib.sdk.event.model.NimOnlineStateEvent; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.DemoCache; + +/** + * 在线状态事件管理 + */ + +public class OnlineStateEventManager { + + /** + * 发布事件有效期7天 + */ + private static final long EVENT_EXPIRY = 60 * 60 * 24 * 7; + + private static final String NET_TYPE_2G = "2G"; + private static final String NET_TYPE_3G = "3G"; + private static final String NET_TYPE_4G = "4G"; + private static final String NET_TYPE_WIFI = "WiFi"; + private static final String UNKNOWN = "未知"; + + // 已发布的网络状态 + private static int pubNetState = -1; + + private static boolean enable = false; + + + public static void init() { + if (!enableOnlineStateEvent()) { + return; + } + registerEventObserver(true); + registerOnlineStatusObserver(); + + NimUIKit.getContactChangedObservable().registerObserver(observer, true); + registerNetTypeChangeObserver(); + } + + private static ContactChangedObserver observer = new ContactChangedObserver() { + @Override + public void onAddedOrUpdatedFriends(List accounts) { + if (accounts == null || accounts.isEmpty()) { + return; + } + List subs = new ArrayList<>(); + for (String account : accounts) { + if (!OnlineStateEventCache.hasSubscribed(account)) { + subs.add(account); + } + } + LogUtil.ui("added or updated friends subscribe online state " + subs); + OnlineStateEventSubscribe.subscribeOnlineStateEvent(subs, OnlineStateEventSubscribe.SUBSCRIBE_EXPIRY); + } + + @Override + public void onDeletedFriends(final List accounts) { + // 如果最近会话里面存在该用户,则不取消订阅 + if (accounts == null || accounts.isEmpty()) { + return; + } + NIMClient.getService(MsgService.class).queryRecentContacts().setCallback(new RequestCallbackWrapper>() { + @Override + public void onResult(int code, List result, Throwable exception) { + // 取消订阅名单 + List unSubs = new ArrayList<>(); + + if (code != ResponseCode.RES_SUCCESS || result == null) { + unSubs = accounts; + } else { + Set recentContactSet = new HashSet<>(); + for (RecentContact recentContact : result) { + if (recentContact.getSessionType() == SessionTypeEnum.P2P) { + recentContactSet.add(recentContact.getContactId()); + } + } + for (String account : accounts) { + if (!recentContactSet.contains(account)) { + unSubs.add(account); + } + } + } + if (!unSubs.isEmpty()) { + OnlineStateEventSubscribe.unSubscribeOnlineStateEvent(unSubs); + } + } + }); + } + + @Override + public void onAddUserToBlackList(List account) { + + } + + @Override + public void onRemoveUserFromBlackList(List account) { + + } + }; + + /** + * 在登陆状态变为已登录之后,发布自己的在线状态,订阅事件 + */ + private static void registerOnlineStatusObserver() { + NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(new Observer() { + @Override + public void onEvent(StatusCode statusCode) { + if (statusCode != StatusCode.LOGINED) { + return; + } + + LogUtil.ui("status change to login so publish state and subscribe"); + + // 发布自己的在线状态 + pubNetState = -1; + publishOnlineStateEvent(false); + + // 订阅在线状态,包括好友以及最近联系人 + OnlineStateEventSubscribe.initSubscribes(); + + } + }, true); + } + + private static BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + String action = intent.getAction(); + if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { + NetworkInfo info = cm.getActiveNetworkInfo(); + if (info == null || !info.isAvailable()) { + return; + } + LogUtil.ui("BroadcastReceiver CONNECTIVITY_ACTION " + info.getType() + info.getTypeName() + info.getExtraInfo()); + if (NIMClient.getStatus() == StatusCode.LOGINED) { + publishOnlineStateEvent(false); + } + } + } + }; + + private static void registerNetTypeChangeObserver() { + IntentFilter filter = new IntentFilter(); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + DemoCache.getContext().registerReceiver(receiver, filter); + } + + /** + * 注册事件观察者 + * + * @param register + */ + private static void registerEventObserver(boolean register) { + NIMClient.getService(EventSubscribeServiceObserver.class).observeEventChanged(new Observer>() { + @Override + public void onEvent(List events) { + // 过滤掉旧的事件 + events = EventFilter.getInstance().filterOlderEvent(events); + if (events == null) { + return; + } + // 筛选出在线状态事件 + List onlineStateEvents = new ArrayList<>(); + for (int i = 0; i < events.size(); i++) { + Event e = events.get(i); + if (NimOnlineStateEvent.isOnlineStateEvent(e)) { + onlineStateEvents.add(e); + } + } + // 处理在线状态事件 + receivedOnlineStateEvents(onlineStateEvents); + } + }, register); + } + + /** + * 从事件中获取该账户的多端在线状态信息 + * + * @param event + * @return + */ + private static Map getOnlineStateFromEvent(Event event) { + if (!NimOnlineStateEvent.isOnlineStateEvent(event)) { + return null; + } + // 解析 + List clients = NimOnlineStateEvent.getOnlineClients(event); + if (clients == null) { + return null; + } + Map onlineStates = new HashMap<>(); + for (int i = 0; i < clients.size(); i++) { + int clientType = clients.get(i); + OnlineState state = OnlineStateEventConfig.parseConfig(event.getConfigByClient(clientType), clientType); + if (state == null) { + state = new OnlineState(clientType, NetStateCode.Unkown, OnlineStateCode.Online); + } + onlineStates.put(clientType, state); + } + + return onlineStates; + } + + /** + * 构建一个在线状态事件 + * + * @param netState 当前在线网络状态 + * @param syncSelfEnable 是否多端同步 + * @param broadcastOnlineOnly 是否只广播给在线用户 + * @param expiry 事件有效期,单位秒 + * @return event + */ + public static Event buildOnlineStateEvent(int netState, int onlineState, boolean syncSelfEnable, boolean broadcastOnlineOnly, long expiry) { + Event event = new Event(NimOnlineStateEvent.EVENT_TYPE, NimOnlineStateEvent.MODIFY_EVENT_CONFIG, expiry); + event.setSyncSelfEnable(syncSelfEnable); + event.setBroadcastOnlineOnly(broadcastOnlineOnly); + event.setConfig(OnlineStateEventConfig.buildConfig(netState, onlineState)); + return event; + } + + /** + * 接收到在线状态事件 + * + * @param events + */ + private static void receivedOnlineStateEvents(List events) { + + Set changed = new HashSet(); + for (Event event : events) { + if (NimOnlineStateEvent.isOnlineStateEvent(event)) { + // 获取优先级最高的在线客户端的状态 + OnlineState state = getDisplayOnlineState(event); + changed.add(event.getPublisherAccount()); + // 将事件缓存 + OnlineStateEventCache.cacheOnlineState(event.getPublisherAccount(), state); + LogUtil.ui("received and cached onlineState of account " + event.getPublisherAccount()); + } + } + // 如果 UIKit 使用在线状态功能,则通知在线状态变化 + if (NimUIKit.enableOnlineState()) { + NimUIKit.getOnlineStateChangeObservable().notifyOnlineStateChange(changed); + } + } + + /** + * 发布自己在线状态 + */ + public static void publishOnlineStateEvent(boolean force) { + if (!enable) { + return; + } + int netState = getNetWorkTypeName(DemoCache.getContext()); + if (!force && netState == pubNetState) { + return; + } + pubNetState = netState; + Event event = buildOnlineStateEvent(netState, OnlineStateCode.Online.getValue(), true, false, EVENT_EXPIRY); + LogUtil.ui("publish online event value = " + event.getEventValue() + " config = " + event.getConfig()); + NIMClient.getService(EventSubscribeService.class).publishEvent(event); + } + + // 获取网络类型 + private static int getNetWorkTypeName(Context context) { + return NetworkUtil.getNetworkTypeForLink(context); + } + + /** + * 多端在线时展示规则 PC > Mac > IOS/Android > Web + */ + public static OnlineState getDisplayOnlineState(Event event) { + + // 获取多端的在线信息 + Map multiClientStates = getOnlineStateFromEvent(event); + + // 取优先级最高的展示 + if (multiClientStates == null || multiClientStates.isEmpty()) { + return null; + } + + OnlineState result; + + if (isOnline(result = multiClientStates.get(ClientType.Windows))) { + return result; + } else if (isOnline(result = multiClientStates.get(ClientType.MAC))) { + return result; + } else if (isOnline(result = multiClientStates.get(ClientType.iOS))) { + return result; + } else if (isOnline(result = multiClientStates.get(ClientType.Android))) { + return result; + } else if (isOnline(result = multiClientStates.get(ClientType.Web))) { + return result; + } + return null; + } + + private static boolean isOnline(OnlineState state) { + return state != null && state.getOnlineState() != (OnlineStateCode.Offline); + } + + private static boolean validNetType(OnlineState state) { + if (state == null) { + return false; + } + NetStateCode netState = state.getNetState(); + return netState != null && netState != NetStateCode.Unkown; + } + + /** + * 在线状态显示文案 + * + * @param context + * @param state + * @param simple + * @return + */ + public static String getOnlineClientContent(Context context, OnlineState state, boolean simple) { + if (!enable) { + return null; + } + // 离线 + if (!isOnline(state)) { + return context.getString(com.netease.nim.uikit.R.string.off_line); + } + // 忙碌 + if (state.getOnlineState() == OnlineStateCode.Busy) { + return context.getString(com.netease.nim.uikit.R.string.on_line_busy); + } + int type = state.getOnlineClient(); + String result = null; + switch (type) { + case ClientType.Windows: + result = context.getString(com.netease.nim.uikit.R.string.on_line_pc); + break; + case ClientType.MAC: + result = context.getString(com.netease.nim.uikit.R.string.on_line_mac); + break; + case ClientType.Web: + result = context.getString(com.netease.nim.uikit.R.string.on_line_web); + break; + case ClientType.Android: + result = getMobileOnlineClientString(context, state, false, simple); + break; + case ClientType.iOS: + result = getMobileOnlineClientString(context, state, true, simple); + break; + default: + break; + } + return result; + } + + private static String getMobileOnlineClientString(Context context, OnlineState state, boolean ios, boolean simple) { + String result; + String client = ios ? context.getString(com.netease.nim.uikit.R.string.client_ios) : context.getString(com.netease.nim.uikit.R.string.client_aos); + if (!validNetType(state)) { + result = client + context.getString(com.netease.nim.uikit.R.string.on_line); + } else { + if (simple) { + // 简单展示 + result = getDisplayNetState(state.getNetState()) + context.getString(com.netease.nim.uikit.R.string.on_line); + } else { + // 详细展示 + result = client + " - " + getDisplayNetState(state.getNetState()) + context.getString(com.netease.nim.uikit.R.string.on_line); + } + } + return result; + } + + private static String getDisplayNetState(NetStateCode netStateCode) { + if (netStateCode == null || netStateCode == NetStateCode.Unkown) { + return UNKNOWN; + } + if (netStateCode == NetStateCode._2G) { + return NET_TYPE_2G; + } else if (netStateCode == NetStateCode._3G) { + return NET_TYPE_3G; + } else if (netStateCode == NetStateCode._4G) { + return NET_TYPE_4G; + } else { + return NET_TYPE_WIFI; + } + } + + /** + * 检查是否已经订阅过 + * + * @param account + */ + public static void checkSubscribe(String account) { + if (!enable) { + return; + } + if (OnlineStateEventSubscribe.subscribeFilter(account)) { + return; + } + // 未曾订阅过 + if (!OnlineStateEventCache.hasSubscribed(account)) { + List accounts = new ArrayList<>(1); + accounts.add(account); + LogUtil.ui("display online state but not subscribe " + account); + OnlineStateEventSubscribe.subscribeOnlineStateEvent(accounts, OnlineStateEventSubscribe.SUBSCRIBE_EXPIRY); + } + } + + public static boolean isEnable() { + return enable; + } + + /** + * 允许在线状态事件,开发者开通在线状态后修改此处直接返回true + */ + private static boolean enableOnlineStateEvent() { + String packageName = DemoCache.getContext().getPackageName(); + return enable = (packageName != null && packageName.equals("com.netease.nim.demo")); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventSubscribe.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventSubscribe.java new file mode 100644 index 0000000..64f166e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/event/OnlineStateEventSubscribe.java @@ -0,0 +1,234 @@ +package cn.shangyu.gdxzExpert.netease.event; + +import android.os.Handler; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.framework.infra.Handlers; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.event.EventSubscribeService; +import com.netease.nimlib.sdk.event.model.EventSubscribeRequest; +import com.netease.nimlib.sdk.event.model.NimOnlineStateEvent; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.Iterator; +import java.util.List; + +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.config.preference.UserPreferences; + +/** + * Created by chenkang on 2017/4/26. + */ + +public class OnlineStateEventSubscribe { + + // 订阅好友并同步当前在线状态的频率控制30 s,对同一账号连续2次订阅时间间隔在30s 以上 + private static final long SUBS_FREQ = 30 * 1000; + + private static long lastSubsTime = -1; + + private static boolean initSubsFinished = true; + + private static boolean waitInitSubs = false; + // 订阅有效期 1天,单位秒 + public static final long SUBSCRIBE_EXPIRY = 60 * 60 * 24; + + public static void initSubscribes() { + + // 正在进行 + if (waitInitSubs || !initSubsFinished) { + return; + } + + final long timeInterval = getSubsTimeInterval(); + if (timeInterval <= SUBS_FREQ) { + waitInitSubs = true; + long delay = SUBS_FREQ - timeInterval + 1000; + LogUtil.ui("time interval short than 30 and init subscribe delay " + delay); + Handler handler = Handlers.sharedHandler(DemoCache.getContext()); + handler.postDelayed(new Runnable() { + @Override + public void run() { + // 延迟订阅 + waitInitSubs = false; + initSubscribes(); + } + }, delay); + return; + } + + initSubsFinished = false; + + // 重置事件、订阅关系缓存 + OnlineStateEventCache.resetCache(); + + // 重置订阅有效期管理 + SubscribeExpiryManager.reset(); + + // 订阅好友、最近联系人中非好友的在线状态事件 + subscribeAllOnlineStateEvent(); + } + + + private static long getSubsTimeInterval() { + if (lastSubsTime < 0) { + lastSubsTime = UserPreferences.getOnlineStateSubsTime(); + } + return System.currentTimeMillis() - lastSubsTime; + } + + private static void updateLastSubsTime() { + lastSubsTime = System.currentTimeMillis(); + UserPreferences.setOnlineStateSubsTime(lastSubsTime); + } + + + /** + * 订阅好友、最近联系人的在线状态事件 + */ + public static void subscribeAllOnlineStateEvent() { + final List accounts = NimUIKit.getContactProvider().getUserInfoOfMyFriends(); + filter(accounts); + NIMClient.getService(MsgService.class).queryRecentContacts().setCallback(new RequestCallbackWrapper>() { + @Override + public void onResult(int code, List result, Throwable exception) { + if (result != null && !result.isEmpty()) { + for (RecentContact recentContact : result) { + if (recentContact.getSessionType() == SessionTypeEnum.Team) { + continue; + } + String id = recentContact.getContactId(); + if (!NimUIKit.getContactProvider().isMyFriend(id)) { + accounts.add(id); + } + } + } + initSubsFinished = true; + if (accounts.isEmpty()) { + return; + } + LogUtil.ui("subscribe friends and recentContact " + accounts); + + subscribeOnlineStateEvent(accounts, SUBSCRIBE_EXPIRY); + } + }); + } + + + /** + * 订阅指定账号的在线状态事件 + * + * @param accounts 目标账号 + */ + public static void subscribeOnlineStateEvent(final List accounts, long expiry) { + if (waitInitSubs || !initSubsFinished || accounts == null || accounts.isEmpty()) { + return; + } + filter(accounts); + LogUtil.ui("do subscribe onlineStateEvent accounts = " + accounts); + EventSubscribeRequest eventSubscribeRequest = new EventSubscribeRequest(); + eventSubscribeRequest.setEventType(NimOnlineStateEvent.EVENT_TYPE); + eventSubscribeRequest.setPublishers(accounts); + eventSubscribeRequest.setExpiry(expiry); + eventSubscribeRequest.setSyncCurrentValue(true); + + OnlineStateEventCache.addSubsAccounts(accounts); + + updateLastSubsTime(); + NIMClient.getService(EventSubscribeService.class).subscribeEvent(eventSubscribeRequest).setCallback(new RequestCallbackWrapper>() { + @Override + public void onResult(int code, List result, Throwable exception) { + if (code == ResponseCode.RES_SUCCESS) { + // 可能网络比较慢,所以再更新一把时间 + updateLastSubsTime(); + SubscribeExpiryManager.subscribeSuccess(); + if (result != null) { + // 部分订阅失败的账号。。。 + OnlineStateEventCache.removeSubsAccounts(result); + } + } else { + OnlineStateEventCache.removeSubsAccounts(accounts); + } + } + }); + } + + private static void filter(final List accounts) { + Iterator iterator = accounts.iterator(); + while (iterator.hasNext()) { + String s = iterator.next(); + if (subscribeFilter(s)) { + iterator.remove(); + } + } + } + + // 机器人账号不订阅 + public static boolean subscribeFilter(String account) { + return NimUIKit.getRobotInfoProvider().getRobotByAccount(account) != null; + } + + /** + * 取消订阅指定账号的在线状态事件 + * + * @param accounts 目标账号 + */ + public static void unSubscribeOnlineStateEvent(List accounts) { + if (accounts == null || accounts.isEmpty()) { + return; + } + LogUtil.ui("unSubscribe OnlineStateEvent " + accounts); + + OnlineStateEventCache.removeSubsAccounts(accounts); + OnlineStateEventCache.removeOnlineState(accounts); + + EventSubscribeRequest eventSubscribeRequest = new EventSubscribeRequest(); + eventSubscribeRequest.setEventType(NimOnlineStateEvent.EVENT_TYPE); + eventSubscribeRequest.setPublishers(accounts); + + NIMClient.getService(EventSubscribeService.class).unSubscribeEvent(eventSubscribeRequest); + } + + /** + * 订阅有效期管理,快到期时重新订阅 + */ + private static class SubscribeExpiryManager { + + private static boolean firstSubs = true; + + public static void reset() { + LogUtil.ui("time task reset"); + Handler handler = Handlers.sharedHandler(DemoCache.getContext()); + handler.removeCallbacks(runnable); + firstSubs = true; + } + + private static Runnable runnable = new Runnable() { + @Override + public void run() { + // 如果不是好友并且不在最近联系人里面,则不会续订 + LogUtil.ui("time task subscribe again"); + initSubscribes(); + } + }; + + private static void startTimeTask() { + LogUtil.ui("time task start"); + Handler handler = Handlers.sharedHandler(DemoCache.getContext()); + handler.removeCallbacks(runnable); + handler.postDelayed(runnable, SUBSCRIBE_EXPIRY * 1000); + } + + public static void subscribeSuccess() { + if (firstSubs) { + firstSubs = false; + startTimeTask(); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/CustomNotificationCache.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/CustomNotificationCache.java new file mode 100644 index 0000000..d8eee86 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/CustomNotificationCache.java @@ -0,0 +1,38 @@ +package cn.shangyu.gdxzExpert.netease.main; + +import com.netease.nimlib.sdk.msg.model.CustomNotification; + +import java.util.LinkedList; +import java.util.List; + +/** + * 自定义通知缓存 + *

+ * Created by huangjun on 2015/5/29. + */ +public class CustomNotificationCache { + + public static CustomNotificationCache getInstance() { + return InstanceHolder.instance; + } + + private List notifications = new LinkedList<>(); + + public void addCustomNotification(CustomNotification notification) { + if (notification == null) { + return; + } + + if (!notifications.contains(notification)) { + notifications.add(0, notification); + } + } + + public List getCustomNotification() { + return notifications; + } + + public static class InstanceHolder { + public final static CustomNotificationCache instance = new CustomNotificationCache(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/MainActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/MainActivity.java new file mode 100644 index 0000000..6526ab6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/MainActivity.java @@ -0,0 +1,528 @@ +package cn.shangyu.gdxzExpert.netease.main; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.main.LoginSyncDataStatusObserver; +import com.netease.nim.uikit.business.contact.selector.activity.ContactSelectActivity; +import com.netease.nim.uikit.business.team.helper.TeamHelper; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.activity.UI; +import com.netease.nim.uikit.common.ui.dialog.DialogMaker; +import com.netease.nim.uikit.common.ui.drop.DropManager; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.support.permission.MPermission; +import com.netease.nim.uikit.support.permission.annotation.OnMPermissionDenied; +import com.netease.nim.uikit.support.permission.annotation.OnMPermissionGranted; +import com.netease.nim.uikit.support.permission.annotation.OnMPermissionNeverAskAgain; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.NimIntent; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.friend.FriendService; +import com.netease.nimlib.sdk.friend.constant.VerifyType; +import com.netease.nimlib.sdk.friend.model.AddFriendData; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.SystemMessageObserver; +import com.netease.nimlib.sdk.msg.SystemMessageService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.CustomNotification; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.ArrayList; + +import androidx.annotation.NonNull; +import androidx.viewpager.widget.ViewPager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.ui.settings.SettingsActivity; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.main.adapter.MainTabPagerAdapter; +import cn.shangyu.gdxzExpert.netease.model.MainTab; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.netease.ui.FadeInOutPageTransformer; +import cn.shangyu.gdxzExpert.netease.ui.PagerSlidingTabStrip; + +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +/** + * 主界面 + * Created by huangjun on 2015/3/25. + */ +public class MainActivity extends UI implements ViewPager.OnPageChangeListener, + ReminderManager.UnreadNumChangedCallback { + + private static final String EXTRA_APP_QUIT = "APP_QUIT"; + + private static final int REQUEST_CODE_NORMAL = 1; + + private static final int REQUEST_CODE_ADVANCED = 2; + + private static final int BASIC_PERMISSION_REQUEST_CODE = 100; + + private static final String[] BASIC_PERMISSIONS = new String[]{ + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.CAMERA, + Manifest.permission.READ_PHONE_STATE, + Manifest.permission.RECORD_AUDIO, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION}; + + + private PagerSlidingTabStrip tabs; + + private ViewPager pager; + + private int scrollState; + + private MainTabPagerAdapter adapter; + + + private boolean isFirstIn; + + private Observer sysMsgUnreadCountChangedObserver = (Observer) unreadCount -> { + SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unreadCount); + ReminderManager.getInstance().updateContactUnreadNum(unreadCount); + }; + + + public static void start(Context context) { + start(context, null); + } + + public static void start(Context context, Intent extras) { + Intent intent = new Intent(); + intent.setClass(context, MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + if (extras != null) { + intent.putExtras(extras); + } + context.startActivity(intent); + } + + // 注销 + public static void logout(Context context, boolean quit) { + Intent extra = new Intent(); + extra.putExtra(EXTRA_APP_QUIT, quit); + start(context, extra); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); +// setToolBar(R.id.toolbar, R.string.app_name, R.drawable.actionbar_dark_logo); + setTitle(R.string.app_name); + isFirstIn = true; + //不保留后台活动,从厂商推送进聊天页面,会无法退出聊天页面 + if (savedInstanceState == null && parseIntent()) { + return; + } + init(); + addFriends(); + } + + private void init() { + observerSyncDataComplete(); + findViews(); + setupPager(); + setupTabs(); + registerMsgUnreadInfoObserver(true); + registerSystemMessageObservers(true); + registerCustomMessageObservers(true); + requestSystemMessageUnreadCount(); + initUnreadCover(); + requestBasicPermission(); + } + + private void addFriends() + { + NIMClient.getService(FriendService.class).addFriend(new AddFriendData("gdxz_ad01", VerifyType.DIRECT_ADD, "hello")); + } + private boolean parseIntent() { + Intent intent = getIntent(); + if (intent.hasExtra(EXTRA_APP_QUIT)) { + intent.removeExtra(EXTRA_APP_QUIT); + onLogout(); + return true; + } + if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT)) { + IMMessage message = (IMMessage) intent.getSerializableExtra( + NimIntent.EXTRA_NOTIFY_CONTENT); + intent.removeExtra(NimIntent.EXTRA_NOTIFY_CONTENT); + switch (message.getSessionType()) { + case P2P: + SessionHelper.startP2PSession(this, message.getSessionId(),general,""); + break; + case Team: + SessionHelper.startTeamSession(this, message.getSessionId()); + break; + } + return true; + } +// if (intent.hasExtra(AVChatActivity.INTENT_ACTION_AVCHAT) && +// AVChatProfile.getInstance().isAVChatting()) { +// intent.removeExtra(AVChatActivity.INTENT_ACTION_AVCHAT); +// Intent localIntent = new Intent(); +// localIntent.setClass(this, AVChatActivity.class); +// startActivity(localIntent); +// return true; +// } +// String account = intent.getStringExtra(AVChatExtras.EXTRA_ACCOUNT); +// if (intent.hasExtra(AVChatExtras.EXTRA_FROM_NOTIFICATION) && !TextUtils.isEmpty(account)) { +// intent.removeExtra(AVChatExtras.EXTRA_FROM_NOTIFICATION); +// SessionHelper.startP2PSession(this, account); +// return true; +// } + return false; + } + + private void observerSyncDataComplete() { + boolean syncCompleted = LoginSyncDataStatusObserver.getInstance() + .observeSyncDataCompletedEvent( + (Observer) v -> DialogMaker + .dismissProgressDialog()); + //如果数据没有同步完成,弹个进度Dialog + if (!syncCompleted) { + DialogMaker.showProgressDialog(MainActivity.this, getString(com.netease.nim.uikit.R.string.prepare_data)) + .setCanceledOnTouchOutside(false); + } + } + + private void findViews() { + tabs = findView(R.id.tabs); + pager = findView(R.id.main_tab_pager); + } + + private void setupPager() { + adapter = new MainTabPagerAdapter(getSupportFragmentManager(), this, pager); + pager.setOffscreenPageLimit(adapter.getCacheCount()); + pager.setPageTransformer(true, new FadeInOutPageTransformer()); + pager.setAdapter(adapter); + pager.setOnPageChangeListener(this); + } + + private void setupTabs() { + tabs.setOnCustomTabListener(new PagerSlidingTabStrip.OnCustomTabListener() { + + @Override + public int getTabLayoutResId(int position) { + return R.layout.tab_layout_main; + } + + @Override + public boolean screenAdaptation() { + return true; + } + }); + tabs.setViewPager(pager); + tabs.setOnTabClickListener(adapter); + tabs.setOnTabDoubleTapListener(adapter); + } + + + /** + * 注册未读消息数量观察者 + */ + private void registerMsgUnreadInfoObserver(boolean register) { + if (register) { + ReminderManager.getInstance().registerUnreadNumChangedCallback(this); + } else { + ReminderManager.getInstance().unregisterUnreadNumChangedCallback(this); + } + } + + /** + * 注册/注销系统消息未读数变化 + */ + private void registerSystemMessageObservers(boolean register) { + NIMClient.getService(SystemMessageObserver.class).observeUnreadCountChange( + sysMsgUnreadCountChangedObserver, register); + } + + // sample + Observer customNotificationObserver = (Observer) notification -> { + // 处理自定义通知消息 + LogUtil.i("demo", "receive custom notification: " + notification.getContent() + " from :" + + notification.getSessionId() + "/" + notification.getSessionType() + + "unread=" + (notification.getConfig() == null ? "" : notification.getConfig().enableUnreadCount + " " + "push=" + + notification.getConfig().enablePush + " nick=" + + notification.getConfig().enablePushNick)); + try { + JSONObject obj = JSONObject.parseObject(notification.getContent()); + if (obj != null && obj.getIntValue("id") == 2) { + // 加入缓存中 + CustomNotificationCache.getInstance().addCustomNotification(notification); + // Toast + String content = obj.getString("content"); + String tip = String.format("自定义消息[%s]:%s", notification.getFromAccount(), content); + ToastHelper.showToast(MainActivity.this, tip); + } + } catch (JSONException e) { + LogUtil.e("demo", e.getMessage()); + } + }; + + private void registerCustomMessageObservers(boolean register) { + NIMClient.getService(MsgServiceObserve.class).observeCustomNotification( + customNotificationObserver, register); + } + + /** + * 查询系统消息未读数 + */ + private void requestSystemMessageUnreadCount() { + int unread = NIMClient.getService(SystemMessageService.class) + .querySystemMessageUnreadCountBlock(); + SystemMessageUnreadManager.getInstance().setSysMsgUnreadCount(unread); + ReminderManager.getInstance().updateContactUnreadNum(unread); + } + + //初始化未读红点动画 + private void initUnreadCover() { + DropManager.getInstance().init(this, findView(R.id.unread_cover), (id, explosive) -> { + if (id == null || !explosive) { + return; + } + if (id instanceof RecentContact) { + RecentContact r = (RecentContact) id; + NIMClient.getService(MsgService.class).clearUnreadCount(r.getContactId(), + r.getSessionType()); + return; + } + if (id instanceof String) { + if (((String) id).contentEquals("0")) { + NIMClient.getService(MsgService.class).clearAllUnreadCount(); + } else if (((String) id).contentEquals("1")) { + NIMClient.getService(SystemMessageService.class) + .resetSystemMessageUnreadCount(); + } + } + }); + } + + private void requestBasicPermission() { + MPermission.printMPermissionResult(true, this, BASIC_PERMISSIONS); + MPermission.with(MainActivity.this).setRequestCode(BASIC_PERMISSION_REQUEST_CODE) + .permissions(BASIC_PERMISSIONS).request(); + } + + private void onLogout() { + Preferences.saveUserToken(""); + // 清理缓存&注销监听 +// LogoutHelper.logout(); + // 启动登录 +// LoginActivity.start(this); + finish(); + } + + private void selectPage() { + if (scrollState == ViewPager.SCROLL_STATE_IDLE) { + adapter.onPageSelected(pager.getCurrentItem()); + } + } + + /** + * 设置最近联系人的消息为已读 + *

+ * account, 聊天对象帐号,或者以下两个值: + * {@link MsgService#MSG_CHATTING_ACCOUNT_ALL} 目前没有与任何人对话,但能看到消息提醒(比如在消息列表界面),不需要在状态栏做消息通知 + * {@link MsgService#MSG_CHATTING_ACCOUNT_NONE} 目前没有与任何人对话,需要状态栏消息通知 + */ + private void enableMsgNotification(boolean enable) { + boolean msg = (pager.getCurrentItem() != MainTab.RECENT_CONTACTS.tabIndex); + if (enable | msg) { + NIMClient.getService(MsgService.class).setChattingAccount( + MsgService.MSG_CHATTING_ACCOUNT_NONE, SessionTypeEnum.None); + } else { + NIMClient.getService(MsgService.class).setChattingAccount( + MsgService.MSG_CHATTING_ACCOUNT_ALL, SessionTypeEnum.None); + } + } + + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(com.netease.nim.uikit.R.menu.main_activity_menu, menu); + super.onCreateOptionsMenu(menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case com.netease.nim.uikit.R.id.about: + startActivity(new Intent(MainActivity.this, SettingsActivity.class)); + break; + case com.netease.nim.uikit.R.id.view_cloud_session: +// RecentSessionActivity.start(this); + break; + case com.netease.nim.uikit.R.id.create_normal_team: + ContactSelectActivity.Option option = TeamHelper.getCreateContactSelectOption(null, + 50); + NimUIKit.startContactSelector(MainActivity.this, option, REQUEST_CODE_NORMAL); + break; + case com.netease.nim.uikit.R.id.create_regular_team: + ContactSelectActivity.Option advancedOption = TeamHelper + .getCreateContactSelectOption(null, 50); + NimUIKit.startContactSelector(MainActivity.this, advancedOption, + REQUEST_CODE_ADVANCED); + break; + case com.netease.nim.uikit.R.id.search_advanced_team: +// AdvancedTeamSearchActivity.start(MainActivity.this); + break; + case R.id.add_buddy: +// AddFriendActivity.start(MainActivity.this); + break; + case com.netease.nim.uikit.R.id.search_btn: +// GlobalSearchActivity.start(MainActivity.this); + break; + case com.netease.nim.uikit.R.id.enter_ysf: +// Unicorn.openServiceActivity(this, "七鱼测试", null); + break; + default: + break; + } + return super.onOptionsItemSelected(item); + } + + @Override + protected void onNewIntent(Intent intent) { + setIntent(intent); + parseIntent(); + } + + @Override + public void onResume() { + super.onResume(); + // 第一次 , 三方通知唤起进会话页面之类的,不会走初始化过程 + boolean temp = isFirstIn; + isFirstIn = false; + if (pager == null && temp) { + return; + } + //如果不是第一次进 , eg: 其他页面back + if (pager == null) { + init(); + } + enableMsgNotification(false); + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + outState.clear(); + } + + @Override + public void onPause() { + super.onPause(); + if (pager == null) { + return; + } + enableMsgNotification(true); + } + + @Override + public void onDestroy() { + registerMsgUnreadInfoObserver(false); + registerSystemMessageObservers(false); + registerCustomMessageObservers(false); + DropManager.getInstance().destroy(); + super.onDestroy(); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (resultCode != Activity.RESULT_OK) { + return; + } + if (requestCode == REQUEST_CODE_NORMAL) { + final ArrayList selected = data.getStringArrayListExtra( + ContactSelectActivity.RESULT_DATA); + if (selected != null && !selected.isEmpty()) { +// TeamCreateHelper.createNormalTeam(MainActivity.this, selected, false, null); + } else { + ToastHelper.showToast(MainActivity.this, "请选择至少一个联系人!"); + } + } else if (requestCode == REQUEST_CODE_ADVANCED) { + final ArrayList selected = data.getStringArrayListExtra( + ContactSelectActivity.RESULT_DATA); +// TeamCreateHelper.createAdvancedTeam(MainActivity.this, selected); + } + } + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + tabs.onPageScrolled(position, positionOffset, positionOffsetPixels); + adapter.onPageScrolled(position); + } + + @Override + public void onPageSelected(int position) { + tabs.onPageSelected(position); + selectPage(); + enableMsgNotification(false); + } + + @Override + public void onPageScrollStateChanged(int state) { + tabs.onPageScrollStateChanged(state); + scrollState = state; + selectPage(); + } + + //未读消息数量观察者实现 + @Override + public void onUnreadNumChanged(ReminderItem item) { + MainTab tab = MainTab.fromReminderId(item.getId()); + if (tab != null) { + tabs.updateTab(tab.tabIndex, item); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { + MPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults); + } + + @OnMPermissionGranted(BASIC_PERMISSION_REQUEST_CODE) + public void onBasicPermissionSuccess() { + try { + ToastHelper.showToast(this, "授权成功"); + } catch (Exception e) { + e.printStackTrace(); + } + MPermission.printMPermissionResult(false, this, BASIC_PERMISSIONS); + } + + @OnMPermissionDenied(BASIC_PERMISSION_REQUEST_CODE) + @OnMPermissionNeverAskAgain(BASIC_PERMISSION_REQUEST_CODE) + public void onBasicPermissionFailed() { + try { + ToastHelper.showToast(this, "未全部授权,部分功能可能无法正常运行!"); + } catch (Exception e) { + e.printStackTrace(); + } + MPermission.printMPermissionResult(false, this, BASIC_PERMISSIONS); + } + + @Override + protected boolean displayHomeAsUpEnabled() { + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderId.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderId.java new file mode 100644 index 0000000..18fc5f1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderId.java @@ -0,0 +1,7 @@ +package cn.shangyu.gdxzExpert.netease.main; + +public class ReminderId { + final static public int INVALID = -1; + final static public int SESSION = 0; + final static public int CONTACT = 1; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderItem.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderItem.java new file mode 100644 index 0000000..bab82b7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderItem.java @@ -0,0 +1,53 @@ +package cn.shangyu.gdxzExpert.netease.main; + +import java.io.Serializable; + +public class ReminderItem implements Serializable { + private static final long serialVersionUID = -2101649256143239157L; + + protected final int id; + + private int unread; + + private boolean indicator; + + public ReminderItem(int id) { + this.id = id; + this.unread = 0; + } + + public int getId() { + return id; + } + + public int unread() { + return unread; + } + + public boolean indicator() { + return unread <= 0 && indicator; + } + + public int getUnread() { + return unread; + } + + public void setUnread(int unread) { + this.unread = unread; + } + + public void setIndicator(boolean indicator) { + this.indicator = indicator; + } + + /*package*/ ReminderItem copy() { + ReminderItem item = new ReminderItem(id); + copyData(item); + return item; + } + + protected void copyData(ReminderItem item) { + item.unread = this.unread; + item.indicator = this.indicator; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderManager.java new file mode 100644 index 0000000..d62ee0f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderManager.java @@ -0,0 +1,98 @@ +package cn.shangyu.gdxzExpert.netease.main; + +import android.util.SparseArray; + +import java.util.ArrayList; +import java.util.List; + +/** + * TAB红点提醒管理器 + * Created by huangjun on 2015/3/18. + */ +public class ReminderManager { + // callback + public interface UnreadNumChangedCallback { + void onUnreadNumChanged(ReminderItem item); + } + + // singleton + private static ReminderManager instance; + + public static synchronized ReminderManager getInstance() { + if (instance == null) { + instance = new ReminderManager(); + } + + return instance; + } + + // observers + private SparseArray items = new SparseArray<>(); + + private List unreadNumChangedCallbacks = new ArrayList<>(); + + private ReminderManager() { + populate(items); + } + + // interface + public final void updateSessionUnreadNum(int unreadNum) { + updateUnreadMessageNum(unreadNum, false, ReminderId.SESSION); + } + + public final void updateSessionDeltaUnreadNum(int delta) { + updateUnreadMessageNum(delta, true, ReminderId.SESSION); + } + + public final void updateContactUnreadNum(int unreadNum) { + updateUnreadMessageNum(unreadNum, false, ReminderId.CONTACT); + } + + public void registerUnreadNumChangedCallback(UnreadNumChangedCallback cb) { + if (unreadNumChangedCallbacks.contains(cb)) { + return; + } + + unreadNumChangedCallbacks.add(cb); + } + + public void unregisterUnreadNumChangedCallback(UnreadNumChangedCallback cb) { + if (!unreadNumChangedCallbacks.contains(cb)) { + return; + } + + unreadNumChangedCallbacks.remove(cb); + } + + // inner + private final void populate(SparseArray items) { + items.put(ReminderId.SESSION, new ReminderItem(ReminderId.SESSION)); + items.put(ReminderId.CONTACT, new ReminderItem(ReminderId.CONTACT)); + } + + private final void updateUnreadMessageNum(int unreadNum, boolean delta, int reminderId) { + ReminderItem item = items.get(reminderId); + if (item == null) { + return; + } + + int num = item.getUnread(); + + // 增量 + if (delta) { + num = num + unreadNum; + if (num < 0) { + num = 0; + } + } else { + num = unreadNum; + } + + item.setUnread(num); + item.setIndicator(false); + + for (UnreadNumChangedCallback cb : unreadNumChangedCallbacks) { + cb.onUnreadNumChanged(item); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderSettings.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderSettings.java new file mode 100644 index 0000000..7020f1e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/ReminderSettings.java @@ -0,0 +1,12 @@ +package cn.shangyu.gdxzExpert.netease.main; + +public class ReminderSettings { + /** + * 最大显示未读数 + */ + public static final int MAX_UNREAD_SHOW_NUMBER = 99; + + public static int unreadMessageShowRule(int unread) { + return Math.min(MAX_UNREAD_SHOW_NUMBER, unread); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/SystemMessageUnreadManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/SystemMessageUnreadManager.java new file mode 100644 index 0000000..adfeb70 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/SystemMessageUnreadManager.java @@ -0,0 +1,23 @@ +package cn.shangyu.gdxzExpert.netease.main; + +/** + * Created by huangjun on 2015/8/20. + */ +public class SystemMessageUnreadManager { + + private static SystemMessageUnreadManager instance = new SystemMessageUnreadManager(); + + public static SystemMessageUnreadManager getInstance() { + return instance; + } + + private int sysMsgUnreadCount = 0; + + public int getSysMsgUnreadCount() { + return sysMsgUnreadCount; + } + + public synchronized void setSysMsgUnreadCount(int unreadCount) { + this.sysMsgUnreadCount = unreadCount; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/adapter/MainTabPagerAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/adapter/MainTabPagerAdapter.java new file mode 100644 index 0000000..af21447 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/adapter/MainTabPagerAdapter.java @@ -0,0 +1,62 @@ +package cn.shangyu.gdxzExpert.netease.main.adapter; + +import android.content.Context; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.viewpager.widget.ViewPager; + +import java.util.List; + +import cn.shangyu.gdxzExpert.netease.main.fragment.MainTabFragment; +import cn.shangyu.gdxzExpert.netease.model.MainTab; +import cn.shangyu.gdxzExpert.netease.ui.SlidingTabPagerAdapter; + + +public class MainTabPagerAdapter extends SlidingTabPagerAdapter { + + @Override + public int getCacheCount() { + return MainTab.values().length; + } + + public MainTabPagerAdapter(FragmentManager fm, Context context, ViewPager pager) { + super(fm, MainTab.values().length, context.getApplicationContext(), pager); + for (MainTab tab : MainTab.values()) { + try { + MainTabFragment fragment = null; + List fs = fm.getFragments(); + if (fs != null) { + for (Fragment f : fs) { + if (f.getClass() == tab.clazz) { + fragment = (MainTabFragment) f; + break; + } + } + } + if (fragment == null) { + fragment = tab.clazz.newInstance(); + } + fragment.setState(this); + fragment.attachTabData(tab); + fragments[tab.tabIndex] = fragment; + } catch (InstantiationException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } + } + + @Override + public int getCount() { + return MainTab.values().length; + } + + @Override + public CharSequence getPageTitle(int position) { + MainTab tab = MainTab.fromTabIndex(position); + int resId = tab != null ? tab.resId : 0; + return resId != 0 ? context.getText(resId) : ""; + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ChatRoomListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ChatRoomListFragment.java new file mode 100644 index 0000000..b3b444f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ChatRoomListFragment.java @@ -0,0 +1,31 @@ +package cn.shangyu.gdxzExpert.netease.main.fragment; + + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.model.MainTab; + +/** + * 聊天室主TAB页 + * Created by huangjun on 2015/12/11. + */ +public class ChatRoomListFragment extends MainTabFragment { + private ChatRoomListFragment fragment; + + public ChatRoomListFragment() { + setContainerId(MainTab.CHAT_ROOM.fragmentId); + } + + @Override + protected void onInit() { + // 采用静态集成,这里不需要做什么了 + fragment = (ChatRoomListFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.chat_rooms_fragment); + } + + @Override + public void onCurrent() { + super.onCurrent(); + if (fragment != null) { + fragment.onCurrent(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ContactListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ContactListFragment.java new file mode 100644 index 0000000..5980b99 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/ContactListFragment.java @@ -0,0 +1,88 @@ +package cn.shangyu.gdxzExpert.netease.main.fragment; + + +import android.os.Bundle; + +import com.netease.nim.uikit.api.model.contact.ContactsCustomization; +import com.netease.nim.uikit.business.contact.ContactsFragment; +import com.netease.nim.uikit.business.contact.core.item.AbsContactItem; +import com.netease.nim.uikit.business.contact.core.viewholder.AbsContactViewHolder; +import com.netease.nim.uikit.common.activity.UI; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.main.viewholder.FuncViewHolder; +import cn.shangyu.gdxzExpert.netease.model.MainTab; + + +/** + * 集成通讯录列表 + *

+ * Created by huangjun on 2015/9/7. + */ +public class ContactListFragment extends MainTabFragment { + + private ContactsFragment fragment; + + public ContactListFragment() { + setContainerId(MainTab.CONTACT.fragmentId); + } + + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + onCurrent(); // 触发onInit,提前加载 + } + + @Override + protected void onInit() { + +// addContactFragment(); // 集成通讯录页面 + } + + // 将通讯录列表fragment动态集成进来。 开发者也可以使用在xml中配置的方式静态集成。 + private void addContactFragment() { + fragment = new ContactsFragment(); + fragment.setContainerId(R.id.contact_fragment); + + UI activity = (UI) getActivity(); + + // 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉 + fragment = (ContactsFragment) activity.addFragment(fragment); + + // 功能项定制 + fragment.setContactsCustomization(new ContactsCustomization() { + @Override + public Class> onGetFuncViewHolderClass() { + return FuncViewHolder.class; + } + + @Override + public List onGetFuncItems() { + return FuncViewHolder.FuncItem.provide(); + } + + @Override + public void onFuncItemClick(AbsContactItem item) { + FuncViewHolder.FuncItem.handle(getActivity(), item); + } + }); + } + + @Override + public void onCurrentTabClicked() { + // 点击切换到当前TAB + if (fragment != null) { + fragment.scrollToTop(); + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + FuncViewHolder.unRegisterUnreadNumChangedCallback(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/MainTabFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/MainTabFragment.java new file mode 100644 index 0000000..70b766f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/MainTabFragment.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.netease.main.fragment; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.netease.nim.uikit.common.fragment.TabFragment; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.model.MainTab; + + +public abstract class MainTabFragment extends TabFragment { + + private boolean loaded = false; + + private MainTab tabData; + + protected abstract void onInit(); + + protected boolean inited() { + return loaded; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + return inflater.inflate(R.layout.main_tab_fragment_container, container, false); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } + + public void attachTabData(MainTab tabData) { + this.tabData = tabData; + } + + @Override + public void onCurrent() { + super.onCurrent(); + + if (!loaded && loadRealLayout()) { + loaded = true; + onInit(); + } + } + + private boolean loadRealLayout() { + ViewGroup root = (ViewGroup) getView(); + if (root != null) { + root.removeAllViewsInLayout(); + View.inflate(root.getContext(), R.layout.session_list, root); + } + return root != null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragment.java new file mode 100644 index 0000000..18724e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragment.java @@ -0,0 +1,286 @@ +package cn.shangyu.gdxzExpert.netease.main.fragment; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +import com.netease.nim.uikit.business.recent.RecentContactsCallback; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.activity.UI; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.common.util.log.sdk.wrapper.NimLog; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.AuthServiceObserver; +import com.netease.nimlib.sdk.auth.ClientType; +import com.netease.nimlib.sdk.auth.OnlineClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.netease.model.MainTab; +import cn.shangyu.gdxzExpert.netease.ptop.RecentContactsFragment; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.netease.session.extension.GuessAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.MultiRetweetAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.RedPacketAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.RedPacketOpenedAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; + +import static cn.shangyu.gdxzExpert.utils.Constant.general; + + +/** + * Created by zhoujianghua on 2015/8/17. + */ +public class SessionListFragment extends MainTabFragment { + + private static final String TAG = SessionListFragment.class.getSimpleName(); + private View notifyBar; + + private TextView notifyBarText; + + // 同时在线的其他端的信息 + private List onlineClients; + + private View multiportBar; + + private RecentContactsFragment fragment; + + public SessionListFragment() { + this.setContainerId(MainTab.RECENT_CONTACTS.fragmentId); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + onCurrent(); + } + + @Override + public void onDestroy() { + registerObservers(false); + super.onDestroy(); + } + + @Override + protected void onInit() { + findViews(); + registerObservers(true); + + addRecentContactsFragment(); + } + + private void registerObservers(boolean register) { + NIMClient.getService(AuthServiceObserver.class).observeOtherClients(clientsObserver, register); +// NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, register); + } + + private void findViews() { + notifyBar = getView().findViewById(R.id.status_notify_bar); + notifyBarText = getView().findViewById(R.id.status_desc_label); + notifyBar.setVisibility(View.GONE); + + multiportBar = getView().findViewById(R.id.multiport_notify_bar); + multiportBar.setVisibility(View.GONE); + multiportBar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// MultiportActivity.startActivity(getActivity(), onlineClients); + } + }); + } + + /** + * 用户状态变化 + */ + Observer userStatusObserver = new Observer() { + + @Override + public void onEvent(StatusCode code) { + if (code.wontAutoLogin()) { + kickOut(code); + NimLog.i(TAG, "kick out desc: " + code.getDesc()); + } else { + if (code == StatusCode.NET_BROKEN) { + notifyBar.setVisibility(View.VISIBLE); + notifyBarText.setText(R.string.net_broken); + } else if (code == StatusCode.UNLOGIN) { + notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.nim_status_unlogin); + } else if (code == StatusCode.CONNECTING) { + notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.nim_status_connecting); + } else if (code == StatusCode.LOGINING) { + notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.nim_status_logining); + } else { + notifyBar.setVisibility(View.GONE); + } + } + } + }; + + Observer> clientsObserver = new Observer>() { + @Override + public void onEvent(List onlineClients) { + SessionListFragment.this.onlineClients = onlineClients; + if (onlineClients == null || onlineClients.size() == 0) { + multiportBar.setVisibility(View.GONE); + } else { + multiportBar.setVisibility(View.VISIBLE); + TextView status = multiportBar.findViewById(R.id.multiport_desc_label); + OnlineClient client = onlineClients.get(0); + + for (OnlineClient temp : onlineClients) { + Log.d(TAG, "type : " + temp.getClientType() + " , customTag : " + temp.getCustomTag()); + } + + switch (client.getClientType()) { + case ClientType.Windows: + case ClientType.MAC: +// status.setText(getString(R.string.multiport_logging) + getString(R.string.computer_version)); + break; + case ClientType.Web: +// status.setText(getString(R.string.multiport_logging) + getString(R.string.web_version)); + break; + case ClientType.iOS: + case ClientType.Android: +// status.setText(getString(R.string.multiport_logging) + getString(R.string.mobile_version)); + break; + default: + multiportBar.setVisibility(View.GONE); + break; + } + } + } + }; + + private void kickOut(StatusCode code) { + Preferences.saveUserToken(""); + + if (code == StatusCode.PWD_ERROR) { + LogUtil.e("Auth", "user password error"); +// ToastHelper.showToast(getActivity(), R.string.login_failed); + } else { + LogUtil.i("Auth", "Kicked!"); + } + + if (code == StatusCode.DATA_UPGRADE) { +// onLogout(getString(R.string.kickout_encrypt_database)); + } else { + onLogout(""); + } + } + + // 注销 + private void onLogout(String desc) { + // 清理缓存&注销监听&清除状态 +// LogoutHelper.logout(); + +// LoginActivity.start(getActivity(), true, desc); + + NIMClient.getService(AuthService.class).logout(); + getActivity().finish(); + } + + // 将最近联系人列表fragment动态集成进来。 开发者也可以使用在xml中配置的方式静态集成。 + private void addRecentContactsFragment() { + fragment = new RecentContactsFragment(); + fragment.setContainerId(R.id.messages_fragment); + + final UI activity = (UI) getActivity(); + + // 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉 + fragment = (RecentContactsFragment) activity.addFragment(fragment); + + fragment.setCallback(new RecentContactsCallback() { + @Override + public void onRecentContactsLoaded() { + // 最近联系人列表加载完毕 + } + + @Override + public void onUnreadCountChange(int unreadCount) { + ReminderManager.getInstance().updateSessionUnreadNum(unreadCount); + } + + @Override + public void onItemClick(RecentContact recent,int p) { + // 回调函数,以供打开会话窗口时传入定制化参数,或者做其他动作 + switch (recent.getSessionType()) { + case P2P: + SessionHelper.startP2PSession(getActivity(), recent.getContactId(),general,""); + break; + case Team: + SessionHelper.startTeamSession(getActivity(), recent.getContactId()); + break; + case SUPER_TEAM: + ToastHelper.showToast(getActivity(), "超大群开发者按需实现"); + break; + case Ysf: +// Unicorn.openServiceActivity(getContext(), "七鱼测试", null); + break; + default: + break; + } + } + + @Override + public String getDigestOfAttachment(RecentContact recentContact, MsgAttachment attachment) { + // 设置自定义消息的摘要消息,展示在最近联系人列表的消息缩略栏上 + // 当然,你也可以自定义一些内建消息的缩略语,例如图片,语音,音视频会话等,自定义的缩略语会被优先使用。 + if (attachment instanceof GuessAttachment) { + GuessAttachment guess = (GuessAttachment) attachment; + return guess.getValue().getDesc(); + } +// else if (attachment instanceof RTSAttachment) { +// return "[白板]"; +// } else if (attachment instanceof StickerAttachment) { +// return "[贴图]"; +// } else if (attachment instanceof SnapChatAttachment) { +// return "[阅后即焚]"; +// } + else if (attachment instanceof RedPacketAttachment) { + return "[红包]"; + } else if (attachment instanceof RedPacketOpenedAttachment) { + return ((RedPacketOpenedAttachment) attachment).getDesc(recentContact.getSessionType(), recentContact.getContactId()); + } else if (attachment instanceof MultiRetweetAttachment){ + return "[聊天记录]"; + } else if (attachment instanceof TeachAttachment){ + return "[图文患教]"; + } + + return null; + } + + @Override + public String getDigestOfTipMsg(RecentContact recent) { + String msgId = recent.getRecentMessageId(); + List uuids = new ArrayList<>(1); + uuids.add(msgId); + List msgs = NIMClient.getService(MsgService.class).queryMessageListByUuidBlock(uuids); + if (msgs != null && !msgs.isEmpty()) { + IMMessage msg = msgs.get(0); + Map content = msg.getRemoteExtension(); + if (content != null && !content.isEmpty()) { + return (String) content.get("content"); + } + } + + return null; + } + }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragmentNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragmentNew.java new file mode 100644 index 0000000..da890c7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/fragment/SessionListFragmentNew.java @@ -0,0 +1,410 @@ +package cn.shangyu.gdxzExpert.netease.main.fragment; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; +import static cn.shangyu.gdxzExpert.netease.ptop.P2PMessageActivity.startfor; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.netease.nim.uikit.business.recent.RecentContactsCallback; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.common.util.log.sdk.wrapper.NimLog; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.auth.AuthServiceObserver; +import com.netease.nimlib.sdk.auth.ClientType; +import com.netease.nimlib.sdk.auth.OnlineClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.io.InvalidClassException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.base.BaseFragment; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.view.NetWarnBannerView; +import cn.shangyu.gdxzExpert.netease.config.preference.Preferences; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.netease.ptop.RecentContactsFragment; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; +import cn.shangyu.gdxzExpert.netease.session.extension.GuessAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.MultiRetweetAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.RedPacketAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.RedPacketOpenedAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.utils.DataCleanManager; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by zhoujianghua on 2015/8/17. + */ +public class SessionListFragmentNew extends BaseFragment { + + private static final String TAG = SessionListFragmentNew.class.getSimpleName(); +// private View notifyBar; + private NetWarnBannerView mBannerView; +// private TextView notifyBarText; + + // 同时在线的其他端的信息 + private List onlineClients; + +// private View multiportBar; + + private RecentContactsFragment fragment; + + + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View view = UIUtils.inflate(R.layout.session_list); +// notifyBar = view.findViewById(R.id.status_notify_bar); +// notifyBarText = view.findViewById(R.id.status_desc_label); +// notifyBar.setVisibility(View.GONE); + mBannerView=view.findViewById(R.id.network_banner); +// multiportBar = view.findViewById(R.id.multiport_notify_bar); +// multiportBar.setVisibility(View.GONE); +// multiportBar.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +//// MultiportActivity.startActivity(getActivity(), onlineClients); +// } +// }); + onInit(); + return view; + } + + @Override + public void onResume() { + super.onResume(); + needreportPage("患者消息"); + } + + @Override + public void onDestroy() { + registerObservers(false); + super.onDestroy(); + } + + + protected void onInit() { + + registerObservers(true); + + addRecentContactsFragment(); + } + + private void registerObservers(boolean register) { + NIMClient.getService(AuthServiceObserver.class).observeOtherClients(clientsObserver, register); + NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, register); + } + + private void showlogout() + { + + Date date = new Date(System.currentTimeMillis()); + String phone="ios"; + switch(NIMClient.getService(AuthService.class).getKickedClientType()) + { + case 1: + phone="android"; + break; + case 2: + phone="ios"; + break; + case 16: + phone="web"; + break; + default: + phone="unknow"; + break; + + } + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(getActivity(), + getString(R.string.nim_kick_out)+ + simpleDateFormat.format(date)+getString(R.string.nim_kick_out1)+ + phone+getString(R.string.nim_kick_out2) + , getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startActivity(new Intent(getActivity(), LoginNewActivity.class)); + getActivity().finish(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + + /** + * 用户状态变化 + */ + Observer userStatusObserver = new Observer() { + + @Override + public void onEvent(StatusCode code) { + if (code.wontAutoLogin()) { + +// LogoutHelper.logout(); +// showlogout(); +// startActivity(new Intent(getActivity(), LoginActivity.class)); +// getActivity().finish(); +// handleLogout(); +// kickOut(code); +// restartAPP(); + mBannerView.setVisibility(View.GONE); + NimLog.i(TAG, "kick out desc: " + code.getDesc()); + } else { + if (code == StatusCode.NET_BROKEN) { +// notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.net_broken); + mBannerView.setVisibility(View.VISIBLE); + mBannerView.setNetWarnText(getString(R.string.nim_status_notlog)); +// ToastUtil.showMessage(R.string.nim_status_notlog); + } else if (code == StatusCode.UNLOGIN) { +// notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.nim_status_unlogin); + mBannerView.setVisibility(View.VISIBLE); + mBannerView.setNetWarnText(getString(R.string.nim_status_notlog)); +// ToastUtil.showMessage(R.string.nim_status_notlog); + } else if (code == StatusCode.CONNECTING) { + mBannerView.setVisibility(View.GONE); +// notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.nim_status_connecting); + } else if (code == StatusCode.LOGINING) { + mBannerView.setVisibility(View.GONE); +// notifyBar.setVisibility(View.VISIBLE); +// notifyBarText.setText(R.string.nim_status_logining); + } else { + mBannerView.setVisibility(View.GONE); +// notifyBar.setVisibility(View.GONE); + } + } + } + }; + + Observer> clientsObserver = new Observer>() { + @Override + public void onEvent(List onlineClients) { + SessionListFragmentNew.this.onlineClients = onlineClients; + if (onlineClients == null || onlineClients.size() == 0) { +// multiportBar.setVisibility(View.GONE); + } else { +// multiportBar.setVisibility(View.VISIBLE); +// TextView status = multiportBar.findViewById(R.id.multiport_desc_label); + OnlineClient client = onlineClients.get(0); + + for (OnlineClient temp : onlineClients) { + Log.d(TAG, "type : " + temp.getClientType() + " , customTag : " + temp.getCustomTag()); + } + + switch (client.getClientType()) { + case ClientType.Windows: + case ClientType.MAC: +// status.setText(getString(R.string.multiport_logging) + getString(R.string.computer_version)); + break; + case ClientType.Web: +// status.setText(getString(R.string.multiport_logging) + getString(R.string.web_version)); + break; + case ClientType.iOS: + case ClientType.Android: +// status.setText(getString(R.string.multiport_logging) + getString(R.string.mobile_version)); + break; + default: +// multiportBar.setVisibility(View.GONE); + break; + } + } + } + }; + // 重启app + public void restartAPP() { + + + // 注销账号,清除该账号的所有文件, + DataCleanManager.cleanApplicationData(getActivity()); + +// ECNotificationManager.getInstance().forceCancelNotification(); + Intent intent = new Intent(getActivity(), LoginNewActivity.class); + + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + android.os.Process.killProcess(android.os.Process.myPid()); + } + /** + * 处理退出操作 + */ + private void handleLogout() { + + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_FULLY_EXIT, false, true); + + // 1登入系统 2退出系统 3专家客户端在手机前台运行 4.专家客户端在手机后台运行 + BaseActivity.foreBack(getActivity(), 2); + + android.os.Process.killProcess(android.os.Process.myPid()); + return; + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + private void kickOut(StatusCode code) { + Preferences.saveUserToken(""); + + if (code == StatusCode.PWD_ERROR) { + LogUtil.e("Auth", "user password error"); +// ToastHelper.showToast(getActivity(), R.string.login_failed); + } else { + LogUtil.i("Auth", "Kicked!"); + } + + if (code == StatusCode.DATA_UPGRADE) { +// onLogout(getString(R.string.kickout_encrypt_database)); + } else { + onLogout(""); + } + } + + // 注销 + private void onLogout(String desc) { + // 清理缓存&注销监听&清除状态 +// LogoutHelper.logout(); + +// LoginActivity.start(getActivity(), true, desc); + getActivity().finish(); + } + + // 将最近联系人列表fragment动态集成进来。 开发者也可以使用在xml中配置的方式静态集成。 + private void addRecentContactsFragment() { + fragment = new RecentContactsFragment(); +// fragment.setContainerId(R.id.messages_fragment); + +// final UI activity = (UI) getActivity(); +// +// // 如果是activity从堆栈恢复,FM中已经存在恢复而来的fragment,此时会使用恢复来的,而new出来这个会被丢弃掉 + getActivity().getSupportFragmentManager().beginTransaction().add(R.id.messages_fragment,fragment).commit(); + + fragment.setCallback(new RecentContactsCallback() { + @Override + public void onRecentContactsLoaded() { + // 最近联系人列表加载完毕 + int a=0; + } + + @Override + public void onUnreadCountChange(int unreadCount) { + ReminderManager.getInstance().updateSessionUnreadNum(unreadCount); + } + + @Override + public void onItemClick(RecentContact recent,int p) { + // 回调函数,以供打开会话窗口时传入定制化参数,或者做其他动作 + switch (recent.getSessionType()) { + case P2P: +// SessionHelper.startP2PSession(getActivity(), recent.getContactId()); +// if(recent.getContactId().contains("#")) +// start(getActivity(), recent.getContactId().split("#")[1].toLowerCase(), null, null,general,""); +// else + startfor(getActivity(), recent.getContactId(), null, null,general,"",p); + +// start(getActivity(), recent.getContactId(), null, null,general,""); + break; + case Team: + SessionHelper.startTeamSession(getActivity(), recent.getContactId()); + break; + case SUPER_TEAM: + ToastHelper.showToast(getActivity(), "超大群开发者按需实现"); + break; + case Ysf: +// Unicorn.openServiceActivity(getContext(), "七鱼测试", null); + break; + default: + break; + } + } + + @Override + public String getDigestOfAttachment(RecentContact recentContact, MsgAttachment attachment) { + // 设置自定义消息的摘要消息,展示在最近联系人列表的消息缩略栏上 + // 当然,你也可以自定义一些内建消息的缩略语,例如图片,语音,音视频会话等,自定义的缩略语会被优先使用。 + if (attachment instanceof GuessAttachment) { + GuessAttachment guess = (GuessAttachment) attachment; + return guess.getValue().getDesc(); + } +// else if (attachment instanceof RTSAttachment) { +// return "[白板]"; +// } else if (attachment instanceof StickerAttachment) { +// return "[贴图]"; +// } else if (attachment instanceof SnapChatAttachment) { +// return "[阅后即焚]"; +// } + else if (attachment instanceof RedPacketAttachment) { + return "[红包]"; + } else if (attachment instanceof RedPacketOpenedAttachment) { + return ((RedPacketOpenedAttachment) attachment).getDesc(recentContact.getSessionType(), recentContact.getContactId()); + } else if (attachment instanceof MultiRetweetAttachment){ + return "[聊天记录]"; + } + else if (attachment instanceof TeachAttachment){ + return ((TeachAttachment) attachment).getType(); + } + return null; + } + + @Override + public String getDigestOfTipMsg(RecentContact recent) { + String msgId = recent.getRecentMessageId(); + List uuids = new ArrayList<>(1); + uuids.add(msgId); + List msgs = NIMClient.getService(MsgService.class).queryMessageListByUuidBlock(uuids); + if (msgs != null && !msgs.isEmpty()) { + IMMessage msg = msgs.get(0); + Map content = msg.getRemoteExtension(); + if (content != null && !content.isEmpty()) { + return (String) content.get("content"); + } + } + + return null; + } + }); + } + + @Override + public View onCreateSuccessedView() { + return null; + } + + @Override + public LoadingPage.ResultState onLoad() { + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/viewholder/FuncViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/viewholder/FuncViewHolder.java new file mode 100644 index 0000000..68d919f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/main/viewholder/FuncViewHolder.java @@ -0,0 +1,157 @@ +package cn.shangyu.gdxzExpert.netease.main.viewholder; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.netease.nim.uikit.business.contact.core.item.AbsContactItem; +import com.netease.nim.uikit.business.contact.core.item.ItemTypes; +import com.netease.nim.uikit.business.contact.core.model.ContactDataAdapter; +import com.netease.nim.uikit.business.contact.core.viewholder.AbsContactViewHolder; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.main.ReminderId; +import cn.shangyu.gdxzExpert.netease.main.ReminderItem; +import cn.shangyu.gdxzExpert.netease.main.ReminderManager; +import cn.shangyu.gdxzExpert.netease.main.SystemMessageUnreadManager; +import cn.shangyu.gdxzExpert.netease.session.SessionHelper; + +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +public class FuncViewHolder extends AbsContactViewHolder implements ReminderManager.UnreadNumChangedCallback { + + private static ArrayList> sUnreadCallbackRefs = new ArrayList<>(); + + private ImageView image; + private TextView funcName; + private TextView unreadNum; + private Set callbacks = new HashSet<>(); + + @Override + public View inflate(LayoutInflater inflater) { + View view = inflater.inflate(R.layout.func_contacts_item, null); + this.image = view.findViewById(R.id.img_head); + this.funcName = view.findViewById(R.id.tv_func_name); + this.unreadNum = view.findViewById(R.id.tab_new_msg_label); + return view; + } + + @Override + public void refresh(ContactDataAdapter contactAdapter, int position, FuncItem item) { + if (item == FuncItem.VERIFY) { + funcName.setText("验证提醒"); +// image.setImageResource(R.drawable.icon_verify_remind); + image.setScaleType(ImageView.ScaleType.FIT_XY); + int unreadCount = SystemMessageUnreadManager.getInstance().getSysMsgUnreadCount(); + updateUnreadNum(unreadCount); + ReminderManager.getInstance().registerUnreadNumChangedCallback(this); + sUnreadCallbackRefs.add(new WeakReference(this)); + } else if (item == FuncItem.ROBOT) { + funcName.setText("智能机器人"); +// image.setImageResource(R.drawable.ic_robot); + } else if (item == FuncItem.NORMAL_TEAM) { + funcName.setText("讨论组"); +// image.setImageResource(R.drawable.ic_secretary); + } else if (item == FuncItem.ADVANCED_TEAM) { + funcName.setText("高级群"); +// image.setImageResource(R.drawable.ic_advanced_team); + } else if (item == FuncItem.BLACK_LIST) { + funcName.setText("黑名单"); +// image.setImageResource(R.drawable.ic_black_list); + } else if (item == FuncItem.MY_COMPUTER) { + funcName.setText("我的电脑"); +// image.setImageResource(R.drawable.ic_my_computer); + } + + if (item != FuncItem.VERIFY) { + image.setScaleType(ImageView.ScaleType.FIT_XY); + unreadNum.setVisibility(View.GONE); + } + } + + + private void updateUnreadNum(int unreadCount) { + // 2.*版本viewholder复用问题 + if (unreadCount > 0 && funcName.getText().toString().equals("验证提醒")) { + unreadNum.setVisibility(View.VISIBLE); + unreadNum.setText("" + unreadCount); + } else { + unreadNum.setVisibility(View.GONE); + } + } + + @Override + public void onUnreadNumChanged(ReminderItem item) { + if (item.getId() != ReminderId.CONTACT) { + return; + } + updateUnreadNum(item.getUnread()); + } + + public static void unRegisterUnreadNumChangedCallback() { + Iterator> iter = sUnreadCallbackRefs.iterator(); + while (iter.hasNext()) { + ReminderManager.getInstance().unregisterUnreadNumChangedCallback(iter.next().get()); + iter.remove(); + } + } + + + public final static class FuncItem extends AbsContactItem { + static final FuncItem VERIFY = new FuncItem(); + static final FuncItem ROBOT = new FuncItem(); + static final FuncItem NORMAL_TEAM = new FuncItem(); + static final FuncItem ADVANCED_TEAM = new FuncItem(); + static final FuncItem BLACK_LIST = new FuncItem(); + static final FuncItem MY_COMPUTER = new FuncItem(); + + @Override + public int getItemType() { + return ItemTypes.FUNC; + } + + @Override + public String belongsGroup() { + return null; + } + + + public static List provide() { + List items = new ArrayList<>(); + items.add(VERIFY); + //items.add(ROBOT); + items.add(NORMAL_TEAM); + items.add(ADVANCED_TEAM); + items.add(BLACK_LIST); + items.add(MY_COMPUTER); + + return items; + } + + public static void handle(Context context, AbsContactItem item) { + if (item == VERIFY) { +// SystemMessageActivity.start(context); + } else if (item == ROBOT) { +// RobotListActivity.start(context); + } else if (item == NORMAL_TEAM) { +// TeamListActivity.start(context, ItemTypes.TEAMS.NORMAL_TEAM); + } else if (item == ADVANCED_TEAM) { +// TeamListActivity.start(context, ItemTypes.TEAMS.ADVANCED_TEAM); + } else if (item == MY_COMPUTER) { + SessionHelper.startP2PSession(context, DemoCache.getAccount(),general,""); + } else if (item == BLACK_LIST) { +// BlackListActivity.start(context); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoHwPushMessageService.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoHwPushMessageService.java new file mode 100644 index 0000000..14b618c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoHwPushMessageService.java @@ -0,0 +1,35 @@ +package cn.shangyu.gdxzExpert.netease.mixpush; + +import com.huawei.hms.push.RemoteMessage; +import com.netease.nim.uikit.common.util.log.sdk.wrapper.NimLog; +import com.netease.nimlib.sdk.mixpush.HWPushMessageService; + +public class DemoHwPushMessageService extends HWPushMessageService { + + private static final String TAG = "DemoHwPushMessageService"; + + public void onNewToken(String token) { + NimLog.i(TAG, " onNewToken, token=" + token); + } + + /** + * 透传消息, 需要用户自己弹出通知 + * + * @param remoteMessage + */ + public void onMessageReceived(RemoteMessage remoteMessage) { + NimLog.i(TAG, " onMessageReceived"); + } + + public void onMessageSent(String s) { + NimLog.i(TAG, " onMessageSent"); + } + + public void onDeletedMessages() { + NimLog.i(TAG, " onDeletedMessages"); + } + + public void onSendError(String var1, Exception var2) { + NimLog.e(TAG, " onSendError, " + var1, var2); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoMixPushMessageHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoMixPushMessageHandler.java new file mode 100644 index 0000000..4ad2585 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoMixPushMessageHandler.java @@ -0,0 +1,132 @@ +package cn.shangyu.gdxzExpert.netease.mixpush; + +import android.app.Activity; +import android.app.NotificationManager; +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.NimIntent; +import com.netease.nimlib.sdk.StatusBarNotificationConfig; +import com.netease.nimlib.sdk.mixpush.MixPushMessageHandler; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import java.util.ArrayList; +import java.util.Map; + +import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.umeng.NewSystemMessageActivity; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +/** + * Created by hzchenkang on 2016/11/10. + */ + +public class DemoMixPushMessageHandler implements MixPushMessageHandler { + + + public static final String PAYLOAD_SESSION_ID = "sessionID"; + public static final String PAYLOAD_SESSION_TYPE = "sessionType"; + + // 对于华为推送,这个方法并不能保证一定会回调 + @Override + public boolean onNotificationClicked(Context context, Map payload) { + + LogUtil.i(DemoMixPushMessageHandler.class.getSimpleName(), "rev pushMessage payload " + payload); + + String sessionId = payload.get(PAYLOAD_SESSION_ID); + String type = payload.get(PAYLOAD_SESSION_TYPE); +// if(!StringUtil.isEmpty(payload.get("message_id"))) +// { +// readMessage(payload.get("message_id")); +// } + String pushType = payload.get("type"); + LogUtil.i(DemoMixPushMessageHandler.class.getSimpleName(), "pushType " + pushType); + if(pushType!=null) + { + Intent intent = new Intent(); + switch (pushType) + { + case "12": + case "14": + intent.setClass(context, NormNewPatientActivity.class); + if(!StringUtil.isEmpty(payload.get("message_id"))) + { + intent.putExtra("message_id",(payload.get("message_id"))); + } + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + break; + case "39"://撤销随访 + case "13": + intent.setClass(context, NewSystemMessageActivity.class); + if(!StringUtil.isEmpty(payload.get("message_id"))) + { + intent.putExtra("message_id",(payload.get("message_id"))); + } + + intent.putExtra("module",2); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + break; + } + + return true; + } + else if (sessionId != null && type != null) { + int typeValue = Integer.valueOf(type); + ArrayList imMessages = new ArrayList<>(); + IMMessage imMessage = MessageBuilder.createEmptyMessage(sessionId, SessionTypeEnum.typeOfValue(typeValue), 0); + imMessages.add(imMessage); + Intent notifyIntent = new Intent(); + notifyIntent.setComponent(initLaunchComponent(context)); + notifyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); + notifyIntent.setAction(Intent.ACTION_VIEW); + notifyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 必须 + notifyIntent.putExtra(NimIntent.EXTRA_NOTIFY_CONTENT, imMessages); + + context.startActivity(notifyIntent); + return true; + } else { + return false; + } + + } + + + private ComponentName initLaunchComponent(Context context) { + ComponentName launchComponent; + StatusBarNotificationConfig config = DemoCache.getNotificationConfig(); + Class entrance = config.notificationEntrance; + if (entrance == null) { + launchComponent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()).getComponent(); + } else { + launchComponent = new ComponentName(context, entrance); + } + return launchComponent; + } + + // 将音视频通知 Notification 缓存,清除所有通知后再次弹出 Notification,避免清除之后找不到打开正在进行音视频通话界面的入口 + @Override + public boolean cleanMixPushNotifications(int pushType) { + Context context = DemoCache.getContext(); + NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + if (manager != null) { + manager.cancelAll(); +// SparseArray nos = AVChatKit.getNotifications(); +// if (nos != null) { +// int key = 0; +// for (int i = 0; i < nos.size(); i++) { +// key = nos.keyAt(i); +// manager.notify(key, nos.get(key)); +// } +// } + } + return true; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoPushContentProvider.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoPushContentProvider.java new file mode 100644 index 0000000..bcbe218 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/DemoPushContentProvider.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.netease.mixpush; + +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; + +import com.netease.nim.uikit.api.model.main.CustomPushContentProvider; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +/** + * 示例: + * 1.自定义的推送文案 + * 2.自定义推送 payload 实现特定的点击通知栏跳转行为{@link DemoMixPushMessageHandler} + *

+ * 如果自定义文案和payload,请开发者在各端发送消息时保持一致。 + */ + +public class DemoPushContentProvider implements CustomPushContentProvider { + + @Override + public String getPushContent(IMMessage message) { + return null; + } + + @Override + public Map getPushPayload(IMMessage message) { +// HashMap payload = new HashMap<>(); +// payload.put("apns-collapse-id", "321"); +// payload.put("apns-from-id", NimUIKit.getAccount()); +// return payload; + return getPayload(message); + } + + private Map getPayload(IMMessage message) { + if (message == null) { + return null; + } + HashMap payload = new HashMap<>(); + int sessionType = message.getSessionType().getValue(); + payload.put("sessionType", sessionType); + String sessionId = ""; + if (message.getSessionType() == SessionTypeEnum.Team) { + sessionId = message.getSessionId(); + } else if (message.getSessionType() == SessionTypeEnum.P2P) { + sessionId = message.getFromAccount(); + } + if (!TextUtils.isEmpty(sessionId)) { + payload.put("sessionID", sessionId); + } + //华为推送 + setHwField(payload, sessionType, sessionId); + + return payload; + } + + private void setHwField(Map pushPayload, int sessionType, String sessionId) { + //hwField + Intent hwIntent = new Intent(Intent.ACTION_VIEW); + String intentStr = String.format( + "pushscheme://com.huawei.codelabpush/deeplink?sessionID=%s&sessionType=%s", + sessionId, sessionType + ); + hwIntent.setData(Uri.parse(intentStr)); + hwIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + String intentUri = hwIntent.toUri(Intent.URI_INTENT_SCHEME); + //点击事件的内容 + JSONObject clickAction = new JSONObject(); + //通知的内容 + JSONObject notification = new JSONObject(); + + try { + clickAction.putOpt("type", 1) + .putOpt("intent", intentUri); + notification.putOpt("click_action", clickAction); + pushPayload.put("hwField", notification); + } catch (JSONException e) { + e.printStackTrace(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/MixPushActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/MixPushActivity.java new file mode 100644 index 0000000..1a275f2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/mixpush/MixPushActivity.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.netease.mixpush; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +import androidx.annotation.Nullable; + +import com.netease.nim.uikit.common.util.log.sdk.wrapper.NimLog; + +import java.util.HashMap; +import java.util.Set; + + +public class MixPushActivity extends Activity { + private static final String TAG = "MixPushActivity"; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + NimLog.i(TAG, "mix_push onCreate"); + parseIntent(); + finish(); + } + + void parseIntent() { + Intent intent = getIntent(); + if (intent == null) { + return; + } + Uri uri = intent.getData(); + Bundle bundle = intent.getExtras(); + HashMap map; + if (uri != null) { + Set parameterSet = uri.getQueryParameterNames(); + map = new HashMap<>((parameterSet.size() << 2) / 3 + 1); + String value; + for (String p : parameterSet) { + value = uri.getQueryParameter(p); + if (value == null) { + continue; + } + map.put(p, value); + } + } else if (bundle != null) { + map = new HashMap<>((bundle.size() << 2) / 3 + 1); + for (String key : bundle.keySet()) { + Object valueObj = bundle.get(key); + map.put(key, valueObj == null ? null : valueObj.toString()); + } + } else { + map = new HashMap<>(0); + } + new DemoMixPushMessageHandler().onNotificationClicked(this.getApplicationContext(), map); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/Extras.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/Extras.java new file mode 100644 index 0000000..5763111 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/Extras.java @@ -0,0 +1,8 @@ +package cn.shangyu.gdxzExpert.netease.model; + +public interface Extras { + + // 参数 + String EXTRA_ACCOUNT = "account"; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/MainTab.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/MainTab.java new file mode 100644 index 0000000..0e850b9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/MainTab.java @@ -0,0 +1,58 @@ +package cn.shangyu.gdxzExpert.netease.model; + + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.main.ReminderId; +import cn.shangyu.gdxzExpert.netease.main.fragment.ChatRoomListFragment; +import cn.shangyu.gdxzExpert.netease.main.fragment.ContactListFragment; +import cn.shangyu.gdxzExpert.netease.main.fragment.MainTabFragment; +import cn.shangyu.gdxzExpert.netease.main.fragment.SessionListFragment; + +public enum MainTab { + RECENT_CONTACTS(0, ReminderId.SESSION, SessionListFragment.class, com.netease.nim.uikit.R.string.main_tab_session, R.layout.session_list), + + CONTACT(1, ReminderId.CONTACT, ContactListFragment.class, com.netease.nim.uikit.R.string.main_tab_contact, R.layout.contacts_list), + + CHAT_ROOM(2, ReminderId.INVALID, ChatRoomListFragment.class, com.netease.nim.uikit.R.string.chat_room, R.layout.session_list); + + public final int tabIndex; + + public final int reminderId; + + public final Class clazz; + + public final int resId; + + public final int fragmentId; + + public final int layoutId; + + MainTab(int index, int reminderId, Class clazz, int resId, int layoutId) { + this.tabIndex = index; + this.reminderId = reminderId; + this.clazz = clazz; + this.resId = resId; + this.fragmentId = index; + this.layoutId = layoutId; + } + + public static final MainTab fromReminderId(int reminderId) { + for (MainTab value : MainTab.values()) { + if (value.reminderId == reminderId) { + return value; + } + } + + return null; + } + + public static final MainTab fromTabIndex(int tabIndex) { + for (MainTab value : MainTab.values()) { + if (value.tabIndex == tabIndex) { + return value; + } + } + + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingTemplate.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingTemplate.java new file mode 100644 index 0000000..ba2d169 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingTemplate.java @@ -0,0 +1,103 @@ +package cn.shangyu.gdxzExpert.netease.model; + +/** + * Created by hzxuwen on 2015/6/29. + */ +public class SettingTemplate { + private int id; + private int icon; + private int type; + private String title; // left title + private String detail; // right detail + private boolean visible; + private boolean checked; + private int checkedId; // type==TYPE_THREE_CHOOSE_ONE; 默认被选中项的ID + + public SettingTemplate(int id, String title) { + this(id, title, 0); + } + + public SettingTemplate(int id, int type) { + this(id, null, type, 0); + } + + public SettingTemplate(int id, String title, String detail) { + this(id, title, 0); + this.detail = detail; + } + + public SettingTemplate(int id, String title, int type) { + this(id, title, type, 0); + } + + public SettingTemplate(int id, String title, int type, boolean checked) { + this(id, title, type, 0); + this.checked = checked; + } + + + public SettingTemplate(int id, String title, int type, Void icon, int checkedId) { + this(id, title, type, 0); + this.checkedId = checkedId; + } + + public SettingTemplate(int id, String title, int type, int icon) { + this.id = id; + this.icon = icon; + this.title = title; + this.type = type; + this.visible = true; + } + + public static SettingTemplate makeSeperator() { + return new SettingTemplate(0, SettingType.TYPE_SEPERATOR); + } + + public static SettingTemplate addLine() { + return new SettingTemplate(0, SettingType.TYPE_LINE); + } + + public int getId() { + return id; + } + + public int getIcon() { + return icon; + } + + public int getType() { + return type; + } + + public String getTitle() { + return title; + } + + public void setDetail(String detail) { + this.detail = detail; + } + + public String getDetail() { + return detail; + } + + public boolean isVisible() { + return visible; + } + + public boolean getChekced() { + return checked; + } + + public void setChecked(boolean checked) { + this.checked = checked; + } + + public int getCheckedId() { + return this.checkedId; + } + + public void setCheckedId(int checkedId) { + this.checkedId = checkedId; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingType.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingType.java new file mode 100644 index 0000000..1b1e061 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/model/SettingType.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.netease.model; + +/** + * Created by hzxuwen on 2015/6/30. + */ +public interface SettingType { + int TYPE_DEFAULE = 1; + int TYPE_TOGGLE = 2; + int TYPE_HEAD = 3; + int TYPE_SEPERATOR = 4; + int TYPE_LINE = 5; + int TYPE_THREE_CHOOSE_ONE = 6; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/BaseMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/BaseMessageActivity.java new file mode 100644 index 0000000..6b2f7c6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/BaseMessageActivity.java @@ -0,0 +1,172 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + +import android.content.Context; +import android.content.Intent; +import android.hardware.Sensor; +import android.hardware.SensorEvent; +import android.hardware.SensorEventListener; +import android.hardware.SensorManager; +import android.os.Bundle; +import androidx.appcompat.widget.Toolbar; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import com.netease.nim.uikit.R; +import com.netease.nim.uikit.api.model.session.SessionCustomization; +import com.netease.nim.uikit.business.preference.UserPreferences; +import com.netease.nim.uikit.business.session.audio.MessageAudioControl; +import com.netease.nim.uikit.business.session.constant.Extras; + +import com.netease.nim.uikit.common.CommonUtil; +import com.netease.nim.uikit.common.activity.UI; +import com.netease.nim.uikit.common.util.sys.ScreenUtil; + +import java.util.List; + +/** + * Created by zhoujianghua on 2015/9/10. + */ +public abstract class BaseMessageActivity extends UI { + + protected String sessionId; + + private SessionCustomization customization; + + public MessageFragment messageFragment; + + private SensorManager sensorManager; + + private Sensor proximitySensor; + + protected abstract cn.shangyu.gdxzExpert.netease.ptop.MessageFragment fragment(); + + protected abstract int getContentViewId(); + + protected abstract void initToolBar(); + + /** + * 是否开启距离传感器 + */ + protected abstract boolean enableSensor(); + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(getContentViewId()); + initToolBar(); + parseIntent(); + + messageFragment = (MessageFragment) switchContent(fragment()); + if (enableSensor()) { + initSensor(); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (sensorManager != null && proximitySensor != null) { + sensorManager.registerListener(sensorEventListener, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL); + } + } + + @Override + protected void onPause() { + super.onPause(); + if (sensorManager != null && proximitySensor != null) { + sensorManager.unregisterListener(sensorEventListener); + } + } + + @Override + public void onBackPressed() { + if (messageFragment != null && messageFragment.onBackPressed()) { + return; + } + super.onBackPressed(); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (messageFragment != null) { + messageFragment.onActivityResult(requestCode, resultCode, data); + } + + if (customization != null) { + customization.onActivityResult(this, requestCode, resultCode, data); + } + } + + private void parseIntent() { + Intent intent = getIntent(); + sessionId = intent.getStringExtra(Extras.EXTRA_ACCOUNT); + customization = (SessionCustomization) intent.getSerializableExtra(Extras.EXTRA_CUSTOMIZATION); + + if (customization != null) { + addRightCustomViewOnActionBar(this, customization.buttons); + } + } + + // 添加action bar的右侧按钮及响应事件 + private void addRightCustomViewOnActionBar(UI activity, List buttons) { + if (CommonUtil.isEmpty(buttons)) { + return; + } + + Toolbar toolbar = getToolBar(); + if (toolbar == null) { + return; + } + + LinearLayout buttonContainer = (LinearLayout) LayoutInflater.from(activity).inflate(R.layout.nim_action_bar_custom_view, null); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); + for (final SessionCustomization.OptionsButton button : buttons) { + ImageView imageView = new ImageView(activity); + imageView.setImageResource(button.iconId); + imageView.setBackgroundResource(R.drawable.nim_nim_action_bar_button_selector); + imageView.setPadding(ScreenUtil.dip2px(10), 0, ScreenUtil.dip2px(10), 0); + imageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + button.onClick(BaseMessageActivity.this, v, sessionId); + } + }); + buttonContainer.addView(imageView, params); + } + + toolbar.addView(buttonContainer, new Toolbar.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.RIGHT | Gravity.CENTER)); + } + + + private SensorEventListener sensorEventListener = new SensorEventListener() { + @Override + public void onSensorChanged(SensorEvent event) { + float[] dis = event.values; + if (0.0f == dis[0]) { + //靠近,设置为听筒模式 + MessageAudioControl.getInstance(BaseMessageActivity.this).setEarPhoneModeEnable(true); + } else { + //离开,复原 + MessageAudioControl.getInstance(BaseMessageActivity.this).setEarPhoneModeEnable(UserPreferences.isEarPhoneModeEnable()); + } + } + + @Override + public void onAccuracyChanged(Sensor sensor, int accuracy) { + + } + }; + + private void initSensor() { + sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); + if (sensorManager != null) { + proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/CommonRecentViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/CommonRecentViewHolder.java new file mode 100644 index 0000000..add0271 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/CommonRecentViewHolder.java @@ -0,0 +1,61 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + + +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseQuickAdapter; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +public class CommonRecentViewHolder extends RecentViewHolder { + + CommonRecentViewHolder(BaseQuickAdapter adapter) { + super(adapter); + } + + @Override + protected String getContent(RecentContact recent) { + return descOfMsg(recent); + } + + @Override + protected String getOnlineStateContent(RecentContact recent) { + if (recent.getSessionType() == SessionTypeEnum.P2P && NimUIKitImpl.enableOnlineState()) { + return NimUIKitImpl.getOnlineStateContentProvider().getSimpleDisplay(recent.getContactId()); + } else { + return super.getOnlineStateContent(recent); + } + } + + String descOfMsg(RecentContact recent) { + if (recent.getMsgType() == MsgTypeEnum.text) { + return recent.getContent(); + } else if (recent.getMsgType() == MsgTypeEnum.tip) { + String digest = null; + if (getCallback() != null) { + digest = getCallback().getDigestOfTipMsg(recent); + } + + if (digest == null) { + digest = NimUIKitImpl.getRecentCustomization().getDefaultDigest(recent); + } + + return digest; + } else if (recent.getAttachment() != null) { + String digest = null; + if (getCallback() != null) { + digest = getCallback().getDigestOfAttachment(recent, recent.getAttachment()); + } + + if (digest == null) { + digest = NimUIKitImpl.getRecentCustomization().getDefaultDigest(recent); + } + + return digest; + } else if (recent.getSessionType() == SessionTypeEnum.Ysf) { + return recent.getContent(); + } + + return "[未知]"; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/MessageFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/MessageFragment.java new file mode 100644 index 0000000..fa77fb4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/MessageFragment.java @@ -0,0 +1,1587 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + +import static android.content.Context.AUDIO_SERVICE; +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.utils.Constant.consult; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; + +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.lidroid.xutils.util.LogUtils; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.UIKitOptions; +import com.netease.nim.uikit.api.model.main.CustomPushContentProvider; +import com.netease.nim.uikit.api.model.session.SessionCustomization; +import com.netease.nim.uikit.api.model.session.SessionEventListener; +import com.netease.nim.uikit.business.ait.AitManager; +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.business.session.module.Container; +import com.netease.nim.uikit.business.session.module.ModuleProxy; +import com.netease.nim.uikit.business.session.module.list.MessageListPanelEx; +import com.netease.nim.uikit.common.CommonUtil; +import com.netease.nim.uikit.common.fragment.TFragment; +import com.netease.nim.uikit.common.util.log.sdk.wrapper.NimLog; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.constant.MsgDirectionEnum; +import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.CustomMessageConfig; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.MemberPushOption; +import com.netease.nimlib.sdk.msg.model.MessageReceipt; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.robot.model.NimRobotInfo; +import com.netease.nimlib.sdk.robot.model.RobotAttachment; +import com.netease.nimlib.sdk.robot.model.RobotMsgType; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.WebActivity; +import cn.shangyu.gdxzExpert.bean.ListOutPatientBean; +import cn.shangyu.gdxzExpert.bean.PatientDetailBean; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.bean.StopOutPatientListBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.big.activity.BigPatientActivity; +import cn.shangyu.gdxzExpert.ecdemo.ECAsyncTask; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.ClipboardUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ImagePreviewActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImgInfo; +import cn.shangyu.gdxzExpert.ecdemo.view.IBaseAdapter; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.session.InputPanel; +import cn.shangyu.gdxzExpert.netease.session.action.EasyAction; +import cn.shangyu.gdxzExpert.netease.session.action.HospitalAction; +import cn.shangyu.gdxzExpert.netease.session.action.ImageAction; +import cn.shangyu.gdxzExpert.netease.session.action.ShoppingAction; +import cn.shangyu.gdxzExpert.netease.session.action.TeachAction; +import cn.shangyu.gdxzExpert.netease.session.action.VideoAction; +import cn.shangyu.gdxzExpert.netease.session.action.VisitAction; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachmentType; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * 聊天界面基类 + *

+ * Created by huangjun on 2015/2/1. + */ +public class MessageFragment extends TFragment implements ModuleProxy, View.OnClickListener { + + private View rootView; + + private SessionCustomization customization; + + protected static final String TAG = "MessageActivity"; + + // p2p对方Account或者群id + protected String sessionId; + + protected SessionTypeEnum sessionType; + + // modules + protected InputPanel inputPanel; + protected MessageListPanelEx messageListPanel; + + protected AitManager aitManager; + + public static Boolean havestopout =false; + public static Map ext = new HashMap<>(); + public LinearLayout bottom_layout; + public RelativeLayout exp_pay; + public TextView pay_day; + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + parseIntent(); + //判断是否有停诊信息 + getStopOut(); + //判断是否有出诊信息 + getOutList(); + getPatientList(); + isConsultIng(); +// getExpertPayInfo(); + setSessionListener(); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + rootView = inflater.inflate(com.netease.nim.uikit.R.layout.nim_message_fragment, container, false); + bottom_layout=rootView.findViewById(com.netease.nim.uikit.R.id.messageActivityBottomLayout); + exp_pay=rootView.findViewById(com.netease.nim.uikit.R.id.exp_pay); + pay_day=rootView.findViewById(com.netease.nim.uikit.R.id.pay_day); + exp_pay.setOnClickListener(this); + return rootView; + } + + /** + * ***************************** life cycle ******************************* + */ + + @Override + public void onPause() { + super.onPause(); + + NIMClient.getService(MsgService.class).setChattingAccount(MsgService.MSG_CHATTING_ACCOUNT_NONE, SessionTypeEnum.None); + inputPanel.onPause(); + messageListPanel.onPause(); + } + + @Override + public void onResume() { + super.onResume(); + messageListPanel.onResume(); + NIMClient.getService(MsgService.class).setChattingAccount(sessionId, sessionType); + NimUIKit.setEarPhoneModeEnable(false); +// OpenSpeaker(); +// getActivity().setVolumeControlStream(AudioManager.STREAM_VOICE_CALL); // 默认使用听筒播放 + } + + @Override + public void onDestroy() { + if(inputPanel!=null&&inputPanel.messageEditText!=null&&inputPanel.messageEditText.getText()!=null) + { + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(sessionId, sessionType); + if(recentContact!=null) + { + Map extension = recentContact.getExtension(); + + if (extension == null) { + extension = new HashMap<>(); + } + extension.put(Extras.CAO_GAO,inputPanel.messageEditText.getText().toString().trim()); + recentContact.setExtension(extension); + NIMClient.getService(MsgService.class).updateRecentAndNotify(recentContact); + + } + + } + super.onDestroy(); + View view = getActivity().getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager)getActivity(). getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + messageListPanel.onDestroy(); + registerObservers(false); + if (inputPanel != null) { + inputPanel.onDestroy(); + } + if (aitManager != null) { + aitManager.reset(); + } + + } + public void OpenSpeaker() { + try { + + AudioManager audioManager = ((AudioManager) getActivity().getSystemService(AUDIO_SERVICE)); + audioManager.setMode(AudioManager.ROUTE_SPEAKER); + // 获取当前通话音量 +// int currVolume = audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL); + + if (!audioManager.isSpeakerphoneOn()) { + audioManager.setSpeakerphoneOn(true); + + audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, + audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), + AudioManager.STREAM_VOICE_CALL); + } + } catch (Exception e) { + e.printStackTrace(); + } + + } + + public boolean onBackPressed() { + return inputPanel.collapse(true); + } + + public void refreshMessageList() { + messageListPanel.refreshMessageList(); + } + + private void parseIntent() { + Bundle arguments = getArguments(); + sessionId = arguments.getString(Extras.EXTRA_ACCOUNT).toLowerCase(); + sessionType = (SessionTypeEnum) arguments.getSerializable(Extras.EXTRA_TYPE); + IMMessage anchor = (IMMessage) arguments.getSerializable(Extras.EXTRA_ANCHOR); + ext.clear(); + ext.put(Extras.EXTRA_GDXZ_NICKNAME,UserInfoHelper.getUserName(sessionId)); + if(!StringUtil.isEmpty(getActivity().getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE)) + &&getActivity().getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE).equals(general)) + { + ext.put(Extras.EXTRA_GDXZ_TYPE,general); + } + else if (!PatientSqlManager.isPatient(Constant.Patient_AppKey + sessionId)) + { + ext.put(Extras.EXTRA_GDXZ_TYPE,consult); + ext.put(Extras.EXTRA_CONSULT_UUID,getActivity().getIntent().getStringExtra("msd_id")); + } + else + { + if(!StringUtil.isEmpty(getActivity().getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE)) + &&getActivity().getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE).equals(Constant.consult)) + { + ext.put(Extras.EXTRA_GDXZ_TYPE,consult); + ext.put(Extras.EXTRA_CONSULT_UUID,getActivity().getIntent().getStringExtra("msd_id")); + } + else + { + ext.put(Extras.EXTRA_GDXZ_TYPE,general); + } + + } +// ext.put("gdxz_consult_uuid",""); + if(!StringUtil.isEmpty(arguments.getString("chat_state")) + &&arguments.getString("chat_state").equals("3")) + { + bottom_layout.setVisibility(View.GONE); + } + customization = (SessionCustomization) arguments.getSerializable(Extras.EXTRA_CUSTOMIZATION); + Container container = new Container(getActivity(), sessionId, sessionType, this, true); + + if (messageListPanel == null) { + messageListPanel = new MessageListPanelEx(container, rootView, anchor, false, true); + } else { + messageListPanel.reload(container, anchor); + } + + if (inputPanel == null) { + inputPanel = new InputPanel(container, rootView, getActionList()); + inputPanel.setCustomization(customization); + } else { + inputPanel.reload(container, customization); + } + + initAitManager(); + + inputPanel.switchRobotMode(NimUIKitImpl.getRobotInfoProvider().getRobotByAccount(sessionId) != null); + + registerObservers(true); + + if (customization != null) { + messageListPanel.setChattingBackground(customization.backgroundUri, customization.backgroundColor); + } + } + + private void initAitManager() { + UIKitOptions options = NimUIKitImpl.getOptions(); + if (options.aitEnable) { + aitManager = new AitManager(getContext(), options.aitTeamMember && sessionType == SessionTypeEnum.Team ? sessionId : null, options.aitIMRobot); + inputPanel.addAitTextWatcher(aitManager); + aitManager.setTextChangeListener(inputPanel); + } + } + + /** + * ************************* 消息收发 ********************************** + */ + // 是否允许发送消息 + protected boolean isAllowSendMessage(final IMMessage message) { +// return customization.isAllowSendMessage(message); + return true; + } + + + private void registerObservers(boolean register) { + MsgServiceObserve service = NIMClient.getService(MsgServiceObserve.class); + service.observeReceiveMessage(incomingMessageObserver, register); + // 已读回执监听 + if (NimUIKitImpl.getOptions().shouldHandleReceipt) { + service.observeMessageReceipt(messageReceiptObserver, register); + } + } + + /** + * 消息接收观察者 + */ + Observer> incomingMessageObserver = new Observer>() { + @Override + public void onEvent(List messages) { + onMessageIncoming(messages); + } + }; + + private void onMessageIncoming(List messages) { + if (CommonUtil.isEmpty(messages)) { + return; + } + + setRounds(); + messageListPanel.onIncomingMessage(messages); + // 发送已读回执 + messageListPanel.sendReceipt(); + + } + public void setRounds() + { + if(free_day>0) + { + pay_day.setText("剩余免费随访天数:"+free_day+"天"); + } + else + { + if(present_num>0) + { + IMMessage im = NIMClient.getService(MsgService.class).queryLastMessage(sessionId, sessionType); + + if(im!=null) + { + if(im.getPushPayload()!=null&&im.getPushPayload().get("follow-rounds")!=null) + { + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(sessionId, sessionType); + if(recentContact==null) + { + return; + } + Map extension = recentContact.getExtension(); + + if (extension == null) { + extension = new HashMap<>(); + } + extension.put(Extras.FOLLOW_ROUNDS,im.getPushPayload().get("follow-rounds").toString()); + recentContact.setExtension(extension); + NIMClient.getService(MsgService.class).updateRecent(recentContact); + if(!StringUtil.isEmpty(im.getPushPayload().get("follow-rounds").toString())&&Integer.valueOf(im.getPushPayload().get("follow-rounds").toString())>0) + { + pay_day.setText("剩余沟通回合数:"+im.getPushPayload().get("follow-rounds").toString()+"个"); + + } + else + { + + pay_day.setText("患者的免费随访已完成"); + } + } + else if(free_day==0) + { + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(sessionId, sessionType); + if(recentContact==null) + { + pay_day.setText("剩余沟通回合数:"+present_num+"个"); + return; + } + Map extension = recentContact.getExtension(); + + if (extension == null) { + extension = new HashMap<>(); + } + + if(extension.get(Extras.FOLLOW_ROUNDS)!=null) + { + + pay_day.setText("剩余沟通回合数:"+extension.get(Extras.FOLLOW_ROUNDS)+"个"); + } + else + { + + pay_day.setText("剩余沟通回合数:"+present_num+"个"); + } +// pay_day.setText("剩余沟通回合数:"+present_num+"个"); + } + + } + } + else + { + pay_day.setText("患者的免费随访已完成"); + + } + + } + } + + /** + * 已读回执观察者 + */ + private Observer> messageReceiptObserver = new Observer>() { + @Override + public void onEvent(List messageReceipts) { + messageListPanel.receiveReceipt(); + } + }; + + + /** + * ********************** implements ModuleProxy ********************* + */ + @Override + public boolean sendMessage(IMMessage message) { + if (isAllowSendMessage(message)) { +// appendTeamMemberPush(message); +// message = changeToRobotMsg(message); + appendPushConfigAndSend(message); + } else { + // 替换成tip + message = MessageBuilder.createTipMessage(message.getSessionId(), message.getSessionType()); + message.setContent("该消息无法发送"); + message.setStatus(MsgStatusEnum.success); + NIMClient.getService(MsgService.class).saveMessageToLocal(message, false); + } + + messageListPanel.onMsgSend(message); + if (aitManager != null) { + aitManager.reset(); + } + return true; + } + + private void appendPushConfigAndSend(IMMessage message) { + final IMMessage msg = message; + appendPushConfig(message); + MsgService service = NIMClient.getService(MsgService.class); + // send message to server and save to db + final IMMessage replyMsg = inputPanel.getReplyMessage(); + if (replyMsg == null) { + service.sendMessage(message, false).setCallback(new RequestCallback() { + @Override + public void onSuccess(Void param) { + + if(message.getMsgType()==MsgTypeEnum.text) + { + needreport(message.getSessionId(),"文本"); + } + else if(message.getMsgType()==MsgTypeEnum.image) + { + needreport(message.getSessionId(),"图片"); + } + else if(message.getMsgType()==MsgTypeEnum.audio) + { + needreport(message.getSessionId(),"语音"); + } + else if(message.getMsgType()==MsgTypeEnum.custom&& message.getAttachment() != null&&message.getContent()!=null) + { + if(CustomAttachmentType.Teach.equals(message.getContent())) + { + needreport(message.getSessionId(),"患教图文"); + } + else if(CustomAttachmentType.VideoTeach.equals(message.getContent())) + { + needreport(message.getSessionId(),"患教视频"); + } + else if(CustomAttachmentType.VisitTeach.equals(message.getContent())) + { + needreport(message.getSessionId(),"出/停诊公告"); + } + else if(CustomAttachmentType.Shopping.equals(message.getContent())) + { + needreport(message.getSessionId(),"商城(妞娃)"); + } + else if(CustomAttachmentType.Hostipal.equals(message.getContent())) + { + needreport(message.getSessionId(),"互联网医院"); + } + } + } + + @Override + public void onFailed(int code) + { + sendFailWithBlackList(code, msg); + } + + @Override + public void onException(Throwable exception) { + + + } + }); + } else { + service.replyMessage(message, replyMsg, false).setCallback(new RequestCallback() { + @Override + public void onSuccess(Void param) { + String threadId = message.getThreadOption().getThreadMsgIdClient(); + messageListPanel.refreshMessageItem(threadId); + } + + @Override + public void onFailed(int code) { + sendFailWithBlackList(code, msg); + } + + @Override + public void onException(Throwable exception) { + + } + }); + } + inputPanel.resetReplyMessage(); + } + + // 被对方拉入黑名单后,发消息失败的交互处理 + private void sendFailWithBlackList(int code, IMMessage msg) { + if (code == ResponseCode.RES_IN_BLACK_LIST) { + // 如果被对方拉入黑名单,发送的消息前不显示重发红点 + msg.setStatus(MsgStatusEnum.success); + NIMClient.getService(MsgService.class).updateIMMessageStatus(msg); + messageListPanel.refreshMessageList(); + // 同时,本地插入被对方拒收的tip消息 + IMMessage tip = MessageBuilder.createTipMessage(msg.getSessionId(), msg.getSessionType()); + tip.setContent(getActivity().getString(com.netease.nim.uikit.R.string.black_list_send_tip)); + tip.setStatus(MsgStatusEnum.success); + CustomMessageConfig config = new CustomMessageConfig(); + config.enableUnreadCount = false; + tip.setConfig(config); + NIMClient.getService(MsgService.class).saveMessageToLocal(tip, true); + } + } + + private void appendTeamMemberPush(IMMessage message) { + if (aitManager == null) { + return; + } + if (sessionType == SessionTypeEnum.Team) { + List pushList = aitManager.getAitTeamMember(); + if (pushList == null || pushList.isEmpty()) { + return; + } + MemberPushOption memberPushOption = new MemberPushOption(); + memberPushOption.setForcePush(true); + memberPushOption.setForcePushContent(message.getContent()); + memberPushOption.setForcePushList(pushList); + message.setMemberPushOption(memberPushOption); + } + } + + private IMMessage changeToRobotMsg(IMMessage message) { + if (aitManager == null) { + return message; + } + if (message.getMsgType() == MsgTypeEnum.robot) { + return message; + } + if (isChatWithRobot()) { + if (message.getMsgType() == MsgTypeEnum.text && message.getContent() != null) { + String content = message.getContent().equals("") ? " " : message.getContent(); + message = MessageBuilder.createRobotMessage(message.getSessionId(), message.getSessionType(), message.getSessionId(), content, RobotMsgType.TEXT, content, null, null); + } + } else { + String robotAccount = aitManager.getAitRobot(); + if (TextUtils.isEmpty(robotAccount)) { + return message; + } + String text = message.getContent(); + String content = aitManager.removeRobotAitString(text, robotAccount); + content = content.equals("") ? " " : content; + message = MessageBuilder.createRobotMessage(message.getSessionId(), message.getSessionType(), robotAccount, text, RobotMsgType.TEXT, content, null, null); + + } + return message; + } + + private boolean isChatWithRobot() { + return NimUIKitImpl.getRobotInfoProvider().getRobotByAccount(sessionId) != null; + } + + private void appendPushConfig(IMMessage message) { + CustomPushContentProvider customConfig = NimUIKitImpl.getCustomPushContentProvider(); + if (customConfig == null) { + return; + } + String content = customConfig.getPushContent(message); + Map payload = customConfig.getPushPayload(message); + Map p=new HashMap<>(); + p.put("classification",1); + payload.put("vivoField",p); + payload.put("apns-collapse-id", "321");//ios需要 + payload.put("apns-from-id", NimUIKit.getAccount());//ios需要 + if(free_day>0) + { + payload.put("follow-rounds",present_num); + } + else + { + if(present_num>0) + { + IMMessage im = NIMClient.getService(MsgService.class).queryLastMessage(sessionId, sessionType); + if (im.getPushPayload() != null && im.getPushPayload().get("follow-rounds") != null&&!StringUtil.isEmpty(im.getPushPayload().get("follow-rounds").toString())) { + + int round=Integer.valueOf(im.getPushPayload().get("follow-rounds").toString()); + payload.put("follow-rounds",round); + + } + else + { + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(sessionId, sessionType); + if(recentContact==null) + { + payload.put("follow-rounds",present_num); + return; + } + Map extension = recentContact.getExtension(); + + if (extension == null) { + extension = new HashMap<>(); + } + + if(extension.get(Extras.FOLLOW_ROUNDS)!=null) + { + + payload.put("follow-rounds",extension.get(Extras.FOLLOW_ROUNDS)); + } + + } + } + + + } + if (!TextUtils.isEmpty(content)) { + message.setPushContent(content); + } + if (payload != null) { + message.setPushPayload(payload); + } + + } + + @Override + public void onInputPanelExpand() { + messageListPanel.scrollToBottom(); + } + + @Override + public void shouldCollapseInputPanel() { + inputPanel.collapse(false); + } + + @Override + public boolean isLongClickEnabled() { + return !inputPanel.isRecording(); + } + + @Override + public void onItemFooterClick(IMMessage message) { + if (aitManager == null) { + return; + } + if (messageListPanel.isSessionMode()) { + RobotAttachment attachment = (RobotAttachment) message.getAttachment(); + NimRobotInfo robot = NimUIKitImpl.getRobotInfoProvider().getRobotByAccount(attachment.getFromRobotAccount()); + aitManager.insertAitRobot(robot.getAccount(), robot.getName(), inputPanel.getEditSelectionStart()); + } + } + + @Override + public void onReplyMessage(IMMessage message) { + inputPanel.setReplyMessage(message); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (aitManager != null) { + aitManager.onActivityResult(requestCode, resultCode, data); + } + inputPanel.onActivityResult(requestCode, resultCode, data); + messageListPanel.onActivityResult(requestCode, resultCode, data); + //发送患教 + if (requestCode == 70&&data!=null) { + String imagUrl = data.getStringExtra("imagUrl"); + LogUtil.i("imagUrl",imagUrl); + String url = data.getStringExtra("url"); + String title = data.getStringExtra("title"); + String content = data.getStringExtra("content"); + Boolean videoKepu = data.getBooleanExtra("video",false); + String richtextUuid = data.getStringExtra("uuid"); + + if(videoKepu) + { + TeachAttachment teachAttachment=new TeachAttachment(title,url,content,richtextUuid, + "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png",CustomAttachmentType.VideoTeach,""); + IMMessage message=MessageBuilder.createCustomMessage(sessionId, P2P, CustomAttachmentType.VideoTeach, teachAttachment); + message.setRemoteExtension(ext); + sendMessage(message); + + } + else + { + TeachAttachment teachAttachment=new TeachAttachment(title,url,content,richtextUuid, + "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png",CustomAttachmentType.Teach,""); + IMMessage message=MessageBuilder.createCustomMessage(sessionId, P2P, CustomAttachmentType.Teach, teachAttachment); + + message.setRemoteExtension(ext); + sendMessage(message); + + } + + } + //发送图片 + if (requestCode == 0x4&&data!=null) { + ArrayList paths = (ArrayList) data.getSerializableExtra("photos"); + if(paths!=null&&paths.size()>0) + for (int i = 0; i < paths.size(); i++) { + String mFilePath=paths.get(i).getPath(); + new ChattingAsyncTask(getActivity(),"").execute(mFilePath, UIUtils.getContext()); + + } + + + } + //预览拍照 + if (requestCode == 0x3) { + Intent intent = new Intent(getActivity(), ImagePreviewActivity.class); + getActivity().startActivityForResult(intent, 0x5); + + } + //发送拍照 + if(requestCode == 0x5&&resultCode==-1) + { + String path = ECPreferences.getSharedPreferences(). + getString(ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH.getId(), + (String) ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH.getDefaultValue()); + new ChattingAsyncTask(getActivity(),"").execute(path, UIUtils.getContext()); + } + //发送视频 + if(requestCode==0x9) + { + if(data!=null) + handleVideoRecordSend(data); + } + + } + + // 操作面板集合 + protected List getActionList() { + List actions = new ArrayList<>(); + actions.add(new ImageAction()); + actions.add(new VideoAction()); + actions.add(new EasyAction()); + actions.add(new TeachAction()); + actions.add(new VisitAction()); + actions.add(new ShoppingAction()); + if(cn.shangyu.gdxzExpert.utils.CommonUtil.showHospital()) + { + actions.add(new HospitalAction()); + } + +// actions.add(new LocationAction()); + + if (customization != null && customization.actions != null) { + actions.addAll(customization.actions); + } + return actions; + } + private final ReentrantLock lock = new ReentrantLock(); + + /** + * 是否有出停诊 + */ + private void getStopOut() { + + final Map map = new HashMap<>(); + + map.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+ SharePrefUtil.getString(getActivity(), "uuid", "")+","+ UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.stopOutPatientList); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Gson gson2 = new Gson(); + StopOutPatientListBean fromJson = gson2.fromJson(result, StopOutPatientListBean.class); + if (fromJson!=null&&fromJson.getData().size()>0){ + havestopout = true; + } + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + + /** + * 是否有出停诊 + */ + private void getOutList() { + final Map map = new HashMap<>(); + + map.put("page","1"); + map.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+ SharePrefUtil.getString(getActivity(), "uuid", "")+","+ UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.listOutPatient); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("listOutPatient = "+result); + Gson gson1 = new Gson(); + ListOutPatientBean fromJson = gson1.fromJson(result, ListOutPatientBean.class); + if (fromJson!=null&&fromJson.getData().getList().size()>0){ + havestopout = true; + } + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + } + + @Override + public void onClick(View view) { + if (view.getId() == com.netease.nim.uikit.R.id.exp_pay){ + Intent intent = new Intent(getActivity(), WebActivity.class); + intent.putExtra("url","https://doc.igandan.com/app/integral/expert_payinfo.html"); + intent.putExtra("title","说明"); + intent.putExtra("need_share","0"); + startActivity(intent); + } + + } + + //图片裁剪并发送 + public class ChattingAsyncTask extends ECAsyncTask { + + private String id; + /** + * @param context + * @param s + */ + public ChattingAsyncTask(Context context, String s) { + super(context); + this.id = s; + } + + @Override + protected Object doInBackground(Object... params) { + ImgInfo createImgInfo; + if (((String) params[0]).endsWith(".gif")) { + createImgInfo = ImageAction + .createGIFImgInfo((String) params[0]); + } else { + createImgInfo = ImageAction.createImgInfo( + (String) params[0],(Context)params[1]); + } + return createImgInfo; + } + + @Override + protected void onPostExecute(Object result) { + if (result instanceof ImgInfo) { + ImgInfo imgInfo = (ImgInfo) result; + String fileName = imgInfo.getBigImgPath(); + String fileUrl = FileAccessor.getImagePathName() + "/" + fileName; + File file=new File(fileUrl); + if (file.exists()) { + IMMessage immessage = MessageBuilder.createImageMessage(sessionId, P2P, file, fileName); + immessage.setRemoteExtension(ext); + sendMessage(immessage); + } + + } + } + + + } + private void handleVideoRecordSend(Intent data) { +// if (data.hasExtra("file_name")) { +// Bundle extras = data.getExtras(); +// if (extras != null) { +// fileName = extras.getString("file_name"); +// } +// } + String filePath =""; + if (data.hasExtra("file_url")) { + Bundle extras = data.getExtras(); + if (extras != null) { + filePath = extras.getString("file_url"); + } + } + File f = new File(filePath); + if (!f.exists()) { + return; + } + MediaPlayer mediaPlayer = getVideoMediaPlayer(f); + long duration = mediaPlayer == null ? 0 : mediaPlayer.getDuration(); + int height = mediaPlayer == null ? 0 : mediaPlayer.getVideoHeight(); + int width = mediaPlayer == null ? 0 : mediaPlayer.getVideoWidth(); + IMMessage message = MessageBuilder.createVideoMessage(sessionId, P2P, f, duration, width, height, ""); + message.setRemoteExtension(ext); + sendMessage(message); + + } + /** + * 获取视频mediaPlayer + * + * @param file 视频文件 + * @return mediaPlayer + */ + private MediaPlayer getVideoMediaPlayer(File file) { + try { + return MediaPlayer.create(getActivity(), Uri.fromFile(file)); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + private void setSessionListener() { + SessionEventListener listener = new SessionEventListener() { + + @Override + public void onAvatarClicked(Context context, IMMessage message) { + if(!StringUtil.isEmpty(getActivity().getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE)) + &&getActivity().getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE).equals(Constant.consult)) + { + return; + } + // 一般用于打开用户资料页面 + if (message.getMsgType() == MsgTypeEnum.robot && message.getDirect() == MsgDirectionEnum.In) { + RobotAttachment attachment = (RobotAttachment) message.getAttachment(); + if (attachment.isRobotSend()) { +// RobotProfileActivity.start(context, attachment.getFromRobotAccount()); + return; + } + } + Intent intent = new Intent(getActivity(), + BigPatientActivity.class); + intent.putExtra("realName", UserInfoHelper.getUserTitleName(message.getFromAccount(), SessionTypeEnum.P2P)); +// intent.putExtra("isFriend",false ); +// String uuid = sessionId; +// if (sessionId.contains("#")) { +// String[] split = sessionId.split("#"); +// uuid = split[1]; +// } + intent.putExtra("patientUuid", message.getFromAccount()); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); + startActivity(intent);// 启动患者详情界面 +// UserProfileActivity.start(context, message.getFromAccount()); + } + + @Override + public void onAvatarLongClicked(Context context, IMMessage message) { + // 一般用于群组@功能,或者弹出菜单,做拉黑,加好友等功能 + } + + @Override + public void onAckMsgClicked(Context context, IMMessage message) { + // 已读回执事件处理,用于群组的已读回执事件的响应,弹出消息已读详情 +// AckMsgInfoActivity.start(context, message); + } + + @Override + public void onIMessageLongClicked(Context context, IMMessage message) { +// inputPanel.collapse(true); + if(message==null) + return; + + int arrRes = cn.shangyu.gdxzExpert.R.array.chat_menu_left; + if(message.getDirect()==MsgDirectionEnum.Out) + { + long time = System.currentTimeMillis(); + if(time - message.getTime() <= 1000 * 120) + { + arrRes = cn.shangyu.gdxzExpert.R.array.chat_menu; + } else { + arrRes = cn.shangyu.gdxzExpert.R.array.chat_menu_no_back; + } + } +// ECListDialog dialog; + if (message.getMsgType() ==MsgTypeEnum.text) { + // 文本有复制功能 +// dialog = new ECListDialog(context, arrRes); + } else { + arrRes = cn.shangyu.gdxzExpert.R.array.chat_menu_left5; + if (message.getDirect()==MsgDirectionEnum.Out) { + long time = System.currentTimeMillis(); + if(time - message.getTime() <= 1000 * 120) + { + arrRes = cn.shangyu.gdxzExpert.R.array.chat_menu_left4; + } else { + arrRes = cn.shangyu.gdxzExpert.R.array.chat_menu_left5; + } + + } +// dialog = new ECListDialog(context, arrRes); + + } + showPopupWindow(getActivity().getWindow().getDecorView(),arrRes,message); +// final int arrFial = arrRes; +// dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { +// @Override +// public void onDialogItemClick(Dialog d, int position) { +// +// String[] resarr = context.getResources().getStringArray(arrFial); +// String i = resarr[position]; +// if ("删除".endsWith(i)) { +// +// NIMClient.getService(MsgService.class).deleteMsgSelf(message, "").setCallback(new RequestCallback() { +// @Override +// public void onSuccess(Long param) { +// messageListPanel.deleteItem(message,true,false); +// } +// +// @Override +// public void onFailed(int code) { +// NimLog.i(TAG, "failed to delete self, code=" + code); +// } +// +// @Override +// public void onException(Throwable exception) { +// NimLog.i(TAG, "delete self error, e=" + exception); +// } +// }); +// +// } +// else if ("撤回".endsWith(i)) +// { +// messageListPanel.revokeMessage(message); +// +// } +// else if ("复制消息".endsWith(i)) { +// if (message.getMsgType() ==MsgTypeEnum.text) { +// +// ClipboardUtils.copyFromEdit(getActivity(), +// getString(cn.shangyu.gdxzExpert.R.string.app_pic), message.getContent()); +// ToastUtil.showMessage(cn.shangyu.gdxzExpert.R.string.app_copy_ok); +// } +// } +// } +// }); +// dialog.setTitle(null);// 标题 +// dialog.show(); + + } + }; + NimUIKit.setSessionListener(listener); + } + private void showPopupWindow(View view,int resourceIdArray,IMMessage message) { + lucencyBackground(getActivity()); + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(getActivity()) + .inflate(R.layout.include_dialog_simplelist_big, null); + // 设置按钮的点击事件 + ListView mListView = (ListView) contentView.findViewById(R.id.listview); + String[] stringArray =getResources().getStringArray(resourceIdArray); + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + popupWindow.setOutsideTouchable(true); + //进入退出动画 +// popupWindow.setAnimationStyle(R.style.timepopwindow_anim_style); + // 使其聚集获取焦点 + popupWindow.setFocusable(true); +// popupWindow.setTouchable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + mListView.setAdapter(new ListDialogAdapter(getActivity(), Arrays.asList(stringArray))); + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + String i = stringArray[position]; + if ("删除".endsWith(i)) { + + NIMClient.getService(MsgService.class).deleteMsgSelf(message, "").setCallback(new RequestCallback() { + @Override + public void onSuccess(Long param) { + messageListPanel.deleteItem(message,true,false); + } + + @Override + public void onFailed(int code) { + NimLog.i(TAG, "failed to delete self, code=" + code); + } + + @Override + public void onException(Throwable exception) { + NimLog.i(TAG, "delete self error, e=" + exception); + } + }); + + } + else if ("撤回".endsWith(i)) + { + messageListPanel.revokeMessage(message); + + } + else if ("复制消息".endsWith(i)) { + if (message.getMsgType() ==MsgTypeEnum.text) { + + ClipboardUtils.copyFromEdit(getActivity(), + getString(cn.shangyu.gdxzExpert.R.string.app_pic), message.getContent()); + ToastUtil.showMessage(cn.shangyu.gdxzExpert.R.string.app_copy_ok); + } + } + popupWindow.dismiss(); + } + + }); + popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + + cancelBackground(getActivity()); + } + }); + +// popupWindow.setTouchInterceptor(new View.OnTouchListener() { +// +// @Override +// public boolean onTouch(View v, MotionEvent event) { +// +// +// popupWindow.dismiss(); +// return false; +// // 这里如果返回true的话,touch事件将被拦截 +// // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss +// } +// +// }); + + + popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0); + + } + public class ListDialogAdapter extends IBaseAdapter { + + + public ListDialogAdapter(Context ctx, List data) { + super(ctx, data); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null) { + convertView = this.mLayoutInflater.inflate(R.layout.listitem_dialog , null); + } + ((TextView) convertView.findViewById(R.id.textview)).setText(getItem(position).toString()); + convertView.findViewById(R.id.imageview).setVisibility(View.GONE); + + return convertView; + } + } + + + public static void lucencyBackground(Activity activity) { + WindowManager.LayoutParams lp = activity.getWindow().getAttributes(); + lp.alpha = 0.7f; + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + activity.getWindow().setAttributes(lp); + } + + public static void cancelBackground(Activity activity) { + WindowManager.LayoutParams lp1 = activity.getWindow().getAttributes(); + lp1.alpha = 1f; + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + activity.getWindow().setAttributes(lp1); + } + /** + * 请求服务器。获取患者列表数据 getPatientList + * + * @param loadUrl + * void + */ + private void getPatientList() { + + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("patientUuid",sessionId );// 患者uuid + + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getpatientDetail, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + PatientDetailBean bean = GsonTools.fromGsonToBean(info.result, + PatientDetailBean.class); + if(bean!=null&&bean.data!=null&&bean.data.uuid!=null) + { + + SharePrefUtil.saveString(getActivity(),"sessionUUID",bean.data.uuid); + + } + + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + + } + }); + } + int free_day=-1; + int present_num=0; + + /** + * + * 无需结果请求,1.指南下载数量 2.增加视频阅读数量 + * */ + public void sendJsonPostParamNoResultMD5(final String postUrl,final Map param,int number) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + if(cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule()) + { + param.put("app_type", "1"); + } + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); +// JSONObject jsonObject = new JSONObject(string); +// String optString = jsonObject.optString("code"); +// String message = jsonObject.optString("message"); + Message message = new Message(); + message.what = number; + message.obj = string; + mHandlerSend.sendMessage(message); +// if ("200".equals(optString)) { +// Log.d("msg.what",result); +// if(!jsonObject.isNull("data")&&1==jsonObject.optJSONObject("data").optInt("pay_flag")){ +// +// exp_pay.setVisibility(View.VISIBLE); +// present_num=jsonObject.optJSONObject("data").optInt("present_num"); +// free_day=jsonObject.optJSONObject("data").optInt("free_day"); +// setRounds(); +// }else { +// +// } +// +// +// } + }else { + LogUtil.e("Code = "+ssss); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + // TODO Auto-generated catch block + e.printStackTrace(); + + } finally { + + + } + } + }.start(); + + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + + } + + public void getExpertPayInfo() + { + Map param = new HashMap<>(); + param.put("patient_uuid",sessionId); + sendJsonPostParamNoResultMD5(Url.getExpertPayInfo,param,12); + } + public void isConsultIng() + { + Map param = new HashMap<>(); + param.put("patient_uuid",sessionId); + sendJsonPostParamNoResultMD5(Url.isConsultIng,param,11); + } + Handler mHandlerSend = new Handler() { + @RequiresApi(api = Build.VERSION_CODES.N) + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + Log.d("msg.what",resultData); + switch (msg.what) + { + case 11: + + JSONObject jsonObject1 = null; + try { + jsonObject1 = new JSONObject(resultData); + String optString = jsonObject1.optString("code"); + if ("200".equals(optString)) { + if (!jsonObject1.optBoolean("data")) { + getExpertPayInfo(); + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 12: + + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(resultData); + String optString = jsonObject.optString("code"); + if ("200".equals(optString)) { + if (!jsonObject.isNull("data") && 1 == jsonObject.optJSONObject("data").optInt("pay_flag")) { + + exp_pay.setVisibility(View.VISIBLE); + if(StringUtil.isEmpty(jsonObject.optJSONObject("data").optString("present_num"))) + { + + } + else + { + present_num = jsonObject.optJSONObject("data").optInt("present_num"); + } + if(StringUtil.isEmpty(jsonObject.optJSONObject("data").optString("free_day"))) + { + free_day=0; + } + else + { + free_day = jsonObject.optJSONObject("data").optInt("free_day"); + } + + setRounds(); + } else { + + } + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + + break; + + } + + + } + }; + }; + private void needreport(String id,String belogn) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("send_message"); + rbens.setDeal_object(id); + rbens.setBelong(belogn); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(getActivity(), ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + getActivity().startService(intent); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/P2PMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/P2PMessageActivity.java new file mode 100644 index 0000000..38829b1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/P2PMessageActivity.java @@ -0,0 +1,548 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; + +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.view.inputmethod.InputMethodManager; + +import androidx.appcompat.widget.Toolbar; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.contact.ContactChangedObserver; +import com.netease.nim.uikit.api.model.main.OnlineStateChangeObserver; +import com.netease.nim.uikit.api.model.session.SessionCustomization; +import com.netease.nim.uikit.api.model.user.UserInfoObserver; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.StatusCode; +import com.netease.nimlib.sdk.auth.AuthService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.CustomNotification; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import org.json.JSONException; + +import java.util.Date; +import java.util.List; +import java.util.Set; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.PatientEditActivity; +import cn.shangyu.gdxzExpert.ecdemo.view.TopBarViewNew; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + + +/** + * 点对点聊天界面 + *

+ * Created by huangjun on 2015/2/1. + */ +public class P2PMessageActivity extends BaseMessageActivity implements View.OnClickListener{ + + private boolean isResume = false; + private TopBarViewNew topBarView; + public static int position=-1; + public static int temposition=-1; + public static void start(Context context, String contactId, + SessionCustomization customization, IMMessage anchor,String gdxz_sessionType + ,String state) { + Intent intent = new Intent(); + intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); + intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization); + intent.putExtra(Extras.EXTRA_GDXZ_TYPE,gdxz_sessionType); + intent.putExtra("chat_state",state); + if (anchor != null) { + intent.putExtra(Extras.EXTRA_ANCHOR, anchor); + } + intent.setClass(context, P2PMessageActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + position=-1; + context.startActivity(intent); + } + public static void start(Context context, String contactId, + SessionCustomization customization, IMMessage anchor,String gdxz_sessionType + ,String state,String name) { + Intent intent = new Intent(); + intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); + intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization); + intent.putExtra(Extras.EXTRA_GDXZ_TYPE,gdxz_sessionType); + intent.putExtra("chat_state",state); + intent.putExtra(Extras.EXTRA_GDXZ_NICKNAME,name); + if (anchor != null) { + intent.putExtra(Extras.EXTRA_ANCHOR, anchor); + } + intent.setClass(context, P2PMessageActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + position=-1; + context.startActivity(intent); + } + public static void startfor(Context context, String contactId, + SessionCustomization customization, IMMessage anchor,String gdxz_sessionType + ,String state,int position1) { + Intent intent = new Intent(); + intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); + intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization); + intent.putExtra(Extras.EXTRA_GDXZ_TYPE,gdxz_sessionType); + intent.putExtra("chat_state",state); + if (anchor != null) { + intent.putExtra(Extras.EXTRA_ANCHOR, anchor); + } + intent.setClass(context, P2PMessageActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + temposition=position1; + context.startActivity(intent); + } + public static void startwithId(Context context, String contactId, + SessionCustomization customization, IMMessage anchor,String gdxz_sessionType + ,String state,String msd_id,String name) { + Intent intent = new Intent(); + intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); + intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization); + intent.putExtra(Extras.EXTRA_GDXZ_TYPE,gdxz_sessionType); + intent.putExtra("chat_state",state); + intent.putExtra("msd_id",msd_id); + intent.putExtra(Extras.EXTRA_GDXZ_NICKNAME,name); + if (anchor != null) { + intent.putExtra(Extras.EXTRA_ANCHOR, anchor); + } + intent.setClass(context, P2PMessageActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + + context.startActivity(intent); + } + public static void startwithId(Context context, String contactId, + SessionCustomization customization, IMMessage anchor,String gdxz_sessionType + ,String state,String msd_id) { + Intent intent = new Intent(); + intent.putExtra(Extras.EXTRA_ACCOUNT, contactId); + intent.putExtra(Extras.EXTRA_CUSTOMIZATION, customization); + intent.putExtra(Extras.EXTRA_GDXZ_TYPE,gdxz_sessionType); + intent.putExtra("chat_state",state); + intent.putExtra("msd_id",msd_id); + if (anchor != null) { + intent.putExtra(Extras.EXTRA_ANCHOR, anchor); + } + intent.setClass(context, P2PMessageActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); + + context.startActivity(intent); + } + public Boolean isPopup1; + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + // 单聊特例话数据,包括个人信息, +// requestBuddyInfo(); + displayOnlineState(); + registerObservers(true); + topBarView=findView(R.id.topbar); + + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(!StringUtil.isEmpty(getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE)) + &&getIntent().getStringExtra(Extras.EXTRA_GDXZ_TYPE).equals(Constant.consult)) + { + String actionBtn = getString(R.string.icon_closeMesg); + if(!StringUtil.isEmpty(getIntent().getStringExtra(Extras.EXTRA_GDXZ_NICKNAME))) + { + topBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_brown, null, actionBtn,getIntent().getStringExtra(Extras.EXTRA_GDXZ_NICKNAME), + null, this); + } + else + { + topBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.btn_style_brown, null, actionBtn, UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P), + null, this); + } + + if(!StringUtil.isEmpty(getIntent().getStringExtra("chat_state")) + &&getIntent().getStringExtra("chat_state").equals("3")) + { + topBarView.setRightBtnVis(View.GONE); + } + + } + else + { +// String actionBtn = getString(R.string.icon_closeMesg); + if(!StringUtil.isEmpty(getIntent().getStringExtra(Extras.EXTRA_GDXZ_NICKNAME))) + { + topBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.more, null, null, getIntent().getStringExtra(Extras.EXTRA_GDXZ_NICKNAME), + null, this); + } + else + { + topBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, + R.drawable.more, null, null, UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P), + null, this); + } + +// topBarView.setTopBarToStatus(1, R.drawable.topbar_back_bt, +// R.drawable.actionbar_particular_icon, UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P), this); + } +// UserUpdateHelper.update(UserInfoFieldEnum.AVATAR, UserInfoHelper.getUserDisplayPhoto(sessionId), new RequestCallbackWrapper() { +// @Override +// public void onResult(int code, Void result, Throwable exception) { +// +// } +// }); +// UserUpdateHelper.update(UserInfoFieldEnum.AVATAR, UserInfoHelper.getUserDisplayPhoto(NimUIKit.getAccount()), new RequestCallbackWrapper() { +// @Override +// public void onResult(int code, Void result, Throwable exception) { +// +// +// } +// }); + } + + @Override + protected void onDestroy() { + super.onDestroy(); + registerObservers(false); + } + + @Override + protected void onResume() { + super.onResume(); + isResume = true; +// ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(topBarView).init(); + } + + @Override + protected void onStop() { + super.onStop(); + isResume = false; + } + + private void requestBuddyInfo() { + setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); + } + + private void displayOnlineState() { + if (!NimUIKitImpl.enableOnlineState()) { + return; + } + String detailContent = NimUIKitImpl.getOnlineStateContentProvider().getDetailDisplay(sessionId); + setSubTitle(detailContent); + } + + + /** + * 命令消息接收观察者 + */ + private Observer commandObserver = new Observer() { + @Override + public void onEvent(CustomNotification message) { + if (!sessionId.equals(message.getSessionId()) || message.getSessionType() != SessionTypeEnum.P2P) { + return; + } + showCommandMessage(message); + } + }; + + + /** + * 用户信息变更观察者 + */ + private UserInfoObserver userInfoObserver = new UserInfoObserver() { + @Override + public void onUserInfoChanged(List accounts) { + if (!accounts.contains(sessionId)) { + return; + } +// requestBuddyInfo(); + } + }; + + /** + * 好友资料变更(eg:关系) + */ + private ContactChangedObserver friendDataChangedObserver = new ContactChangedObserver() { + @Override + public void onAddedOrUpdatedFriends(List accounts) { + setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); + } + + @Override + public void onDeletedFriends(List accounts) { + setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); + } + + @Override + public void onAddUserToBlackList(List account) { + setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); + } + + @Override + public void onRemoveUserFromBlackList(List account) { + setTitle(UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); + } + }; + + /** + * 好友在线状态观察者 + */ + private OnlineStateChangeObserver onlineStateChangeObserver = new OnlineStateChangeObserver() { + @Override + public void onlineStateChange(Set accounts) { + if (!accounts.contains(sessionId)) { + return; + } + // 按照交互来展示 + displayOnlineState(); + } + }; + + private void registerObservers(boolean register) { + NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(commandObserver, register); + NimUIKit.getUserInfoObservable().registerObserver(userInfoObserver, register); + NimUIKit.getContactChangedObservable().registerObserver(friendDataChangedObserver, register); + if (NimUIKit.enableOnlineState()) { + NimUIKit.getOnlineStateChangeObservable().registerOnlineStateChangeListeners(onlineStateChangeObserver, register); + } +// NIMClient.getService(AuthServiceObserver.class).observeOnlineStatus(userStatusObserver, register); + } + + + protected void showCommandMessage(CustomNotification message) { + if (!isResume) { + return; + } + String content = message.getContent(); + try { + JSONObject json = JSON.parseObject(content); + int id = json.getIntValue("id"); + if (id == 1) { + // 正在输入 + ToastHelper.showToastLong(P2PMessageActivity.this, "对方正在输入..."); + } else { + ToastHelper.showToast(P2PMessageActivity.this, "command: " + content); + } + } catch (Exception ignored) { + + } + } + + /** + * 用户状态变化 + */ + Observer userStatusObserver = new Observer() { + + @Override + public void onEvent(StatusCode code) { + if (code.wontAutoLogin()) { + + if(code!=StatusCode.PWD_ERROR) + { + LogoutHelper.logout(); + showlogout(); + + } + + } + } + }; + private void showlogout() + { + + Date date = new Date(System.currentTimeMillis()); + String phone="ios"; + switch(NIMClient.getService(AuthService.class).getKickedClientType()) + { + case 1: + phone="android"; + break; + case 2: + phone="ios"; + break; + case 16: + phone="web"; + break; + default: + phone="unknow"; + break; + + } + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(this, + getString(R.string.nim_kick_out)+ + simpleDateFormat.format(date)+getString(R.string.nim_kick_out1)+ + phone+getString(R.string.nim_kick_out2) + , getString(R.string.dialog_btn_confim), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startActivity(new Intent(P2PMessageActivity.this, LoginNewActivity.class)); + finish(); + } + }); + buildAlert.setTitle("异地登陆"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.setCancelable(false); + buildAlert.show(); + } + @Override + protected MessageFragment fragment() { + Bundle arguments = getIntent().getExtras(); + arguments.putSerializable(Extras.EXTRA_TYPE, SessionTypeEnum.P2P); + MessageFragment fragment = new MessageFragment(); + fragment.setArguments(arguments); + fragment.setContainerId(R.id.message_fragment_container); + return fragment; + } + + @Override + protected int getContentViewId() { + return R.layout.nim_message_activity_new; + } + + @Override + protected void initToolBar() { +// ToolBarOptions options = new NimToolBarOptions(); +// setToolBar(R.id.toolbar, options); + } + + @Override + protected boolean enableSensor() { + return true; + } + + @Override + public void onClick(View v) { + switch (v.getId()) + { + case R.id.text_right: + RequestParams params = new RequestParams(); + params.addBodyParameter("uuid", getIntent().getStringExtra("msd_id")); + + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getcloseConsult, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + + + + org.json.JSONObject objs; + String retcode = ""; + String message = ""; + try { + objs = new org.json.JSONObject(info.result); + retcode = objs.getString("code"); + message = objs.getString("message"); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + ToastUtil.showToast("关闭失败,请重试"); + } + if ("1".equals(retcode)) { + String closeText = "您已关闭会话,谢谢您的回答!"; + + closeText = getResources().getString( + R.string.close_public_service); + + ToastUtil.showToast(closeText); +// mChattingFooter.goneChatFooterPanel(); +// mChattingFooter.setVisibility(View.GONE); + topBarView.setRightBtnEnable(false); + messageFragment.bottom_layout.setVisibility(View.GONE); +// // 保存关闭的uuid +// SharePrefUtil.saveBoolean(UIUtils.getContext(), +// uuid, true); +// finish(); + } else { + ToastUtil.showToast(message); + } + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + ToastUtil.showToast("关闭会话失败,请重试"); + } + }); + + break; + case R.id.btn_left: + hideSoftInput(); + finish(); + break; + case R.id.btn_right: +// // 患者详情页面 +// Intent intent = new Intent(UIUtils.getContext(), +// PatientActivity.class); +// intent.putExtra("realName", UserInfoHelper.getUserTitleName(sessionId, SessionTypeEnum.P2P)); +// intent.putExtra("isFriend",false ); +// String uuid = sessionId; +// if (sessionId.contains("#")) { +// String[] split = sessionId.split("#"); +// uuid = split[1]; +// } +// intent.putExtra("patientUuid", uuid); +// startActivity(intent);// 启动患者详情界面 +// break; +// case R.id.btn_right2: + hideSoftInput(); + String patientUuid = sessionId; + if (sessionId.contains("#")) { + String[] split = sessionId.split("#"); + patientUuid = split[1]; + } + Intent intent1 = new Intent(P2PMessageActivity.this, PatientEditActivity.class); + intent1.putExtra("patientUuid",patientUuid); + intent1.putExtra("needhead",true); + startActivityForResult(intent1,24); + break; + } + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(data==null) + return; + if(requestCode==24) + { + position=temposition; + finish(); + + } + + } + private void hideSoftInput() + { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager)P2PMessageActivity.this. getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactAdapter.java new file mode 100644 index 0000000..6b77770 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactAdapter.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + + +import androidx.recyclerview.widget.RecyclerView; + +import com.netease.nim.uikit.business.recent.RecentContactsCallback; +import com.netease.nim.uikit.business.recent.holder.SuperTeamRecentViewHolder; +import com.netease.nim.uikit.business.recent.holder.TeamRecentViewHolder; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemQuickAdapter; +import com.netease.nim.uikit.common.ui.recyclerview.holder.BaseViewHolder; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.big.BigCommonRecentViewHolder; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +/** + * Created by huangjun on 2016/12/11. + */ + +public class RecentContactAdapter extends BaseMultiItemQuickAdapter { + + interface ViewType { + int VIEW_TYPE_COMMON = 1; + int VIEW_TYPE_TEAM = 2; + int VIEW_TYPE_SUPER_TEAM = 3; + } + + private RecentContactsCallback callback; + + public RecentContactAdapter(RecyclerView recyclerView, List data) { + super(recyclerView, data); + if(CommonUtil.BigModule()) + { + addItemType(ViewType.VIEW_TYPE_COMMON, R.layout.nim_recent_contact_list_item_big, BigCommonRecentViewHolder.class); + } + else + { + addItemType(ViewType.VIEW_TYPE_COMMON, R.layout.nim_recent_contact_list_item_new, BigCommonRecentViewHolder.class); +// addItemType(ViewType.VIEW_TYPE_COMMON, R.layout.nim_recent_contact_list_item, CommonRecentViewHolder.class); + } + + addItemType(ViewType.VIEW_TYPE_TEAM, com.netease.nim.uikit.R.layout.nim_recent_contact_list_item, TeamRecentViewHolder.class); + addItemType(ViewType.VIEW_TYPE_SUPER_TEAM, com.netease.nim.uikit.R.layout.nim_recent_contact_list_item, SuperTeamRecentViewHolder.class); + } + + @Override + protected int getViewType(RecentContact item) { + return item.getSessionType() == SessionTypeEnum.Team ? ViewType.VIEW_TYPE_TEAM : ViewType.VIEW_TYPE_COMMON; + } + + @Override + protected String getItemKey(RecentContact item) { + StringBuilder sb = new StringBuilder(); + sb.append(item.getSessionType().getValue()).append("_").append(item.getContactId()); + + return sb.toString(); + } + + public RecentContactsCallback getCallback() { + return callback; + } + + public void setCallback(RecentContactsCallback callback) { + this.callback = callback; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactsFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactsFragment.java new file mode 100644 index 0000000..e3d4379 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentContactsFragment.java @@ -0,0 +1,1080 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.ptop.P2PMessageActivity.position; +import static cn.shangyu.gdxzExpert.netease.ptop.P2PMessageActivity.start; +import static cn.shangyu.gdxzExpert.utils.Constant.general; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Intent; +import android.database.Cursor; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.RequiresApi; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.google.gson.Gson; +import com.lidroid.xutils.util.LogUtils; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.contact.ContactChangedObserver; +import com.netease.nim.uikit.api.model.main.OnlineStateChangeObserver; +import com.netease.nim.uikit.api.model.team.TeamDataChangedObserver; +import com.netease.nim.uikit.api.model.team.TeamMemberDataChangedObserver; +import com.netease.nim.uikit.api.model.user.UserInfoObserver; +import com.netease.nim.uikit.business.recent.RecentContactsCallback; +import com.netease.nim.uikit.business.recent.TeamMemberAitHelper; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.fragment.TFragment; +import com.netease.nim.uikit.common.ui.drop.DropCover; +import com.netease.nim.uikit.common.ui.drop.DropManager; +import com.netease.nim.uikit.common.ui.recyclerview.listener.SimpleClickListener; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nim.uikit.impl.cache.StickTopCache; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.Observer; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.ResponseCode; +import com.netease.nimlib.sdk.lifecycle.SdkLifecycleObserver; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.constant.DeleteTypeEnum; +import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.QueryDirectionEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.msg.model.StickTopSessionInfo; +import com.netease.nimlib.sdk.team.model.Team; +import com.netease.nimlib.sdk.team.model.TeamMember; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.MylanFollowActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PatientEditActivity; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.ZengshuBean; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.storage.ContactSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.ConversationSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.GroupMemberSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.Conversation; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.bagder.Badger; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECListDialog; + +/** + * 最近联系人列表(会话列表) + *

+ * Created by huangjun on 2015/2/1. + */ +public class RecentContactsFragment extends TFragment { + + // view + private RecyclerView recyclerView; + + private View emptyBg; + + // data + private List items; + + private Map cached; // 暂缓刷上列表的数据(未读数红点拖拽动画运行时用) + + private RecentContactAdapter adapter; + + private boolean msgLoaded = false; + + private RecentContactsCallback callback; + + private UserInfoObserver userInfoObserver; + private ImageView bt_yingxiongbang; + private Button bt_mylan; + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findViews(); + initMessageList(); + requestMessages(true); + registerObservers(true); + registerDropCompletedListener(true); + registerOnlineStateChangeListener(true); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + if(CommonUtil.BigModule()) + { + return inflater.inflate(R.layout.nim_recent_contacts_big, container, false); + } + else + { + return inflater.inflate(com.netease.nim.uikit.R.layout.nim_recent_contacts, container, false); + } + + } + + private void notifyDataSetChanged() { + adapter.notifyDataSetChanged(); + boolean empty = items.isEmpty() && msgLoaded; + emptyBg.setVisibility(empty ? View.VISIBLE : View.GONE); + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onResume() { + super.onResume(); + if(P2PMessageActivity.position>-1) + { + if(adapter!=null&&items!=null&&items.size()>0) + { + adapter.remove(position); + postRunnable(() -> refreshMessages(true)); + position=-1; + PatientEditActivity.patientuid=""; + } + + } + else if(P2PMessageActivity.position<-1) + { + if(adapter!=null&&items!=null&&items.size()>0) + { + if(!StringUtil.isEmpty(PatientEditActivity.patientuid)) + { + RecentContact recentContact=items.stream() + .filter(customer -> PatientEditActivity.patientuid.toLowerCase().equals(customer.getContactId())) + .findAny() + .orElse(null); + if(recentContact!=null&&items.indexOf(recentContact)>=0) + { + + adapter.remove(items.indexOf(recentContact)); + postRunnable(() -> refreshMessages(true)); + position=-1; + PatientEditActivity.patientuid=""; + } + } + } + } + } + + @Override + public void onDestroy() { + registerObservers(false); + registerDropCompletedListener(false); + registerOnlineStateChangeListener(false); + DropManager.getInstance().setDropListener(null); + super.onDestroy(); + } + + /** + * 查找页面控件 + */ + private void findViews() { + recyclerView = findView(R.id.recycler_view); + emptyBg = findView(R.id.emptyBg); + bt_yingxiongbang = findView(R.id.bt_yingxiongbang); + bt_mylan=findView(R.id.bt_mylan); + if (Constant.isMaiLanExpert==1){ + bt_mylan.setVisibility(View.VISIBLE); + } + bt_mylan.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getActivity(), MylanFollowActivity.class); +// Intent intent = new Intent(getActivity(), MylanFollow_upProjectActivity.class); + startActivity(intent); + } + }); + if (Constant.from==1||Constant.from==2){ + ImageLoader.getInstance().displayImage( + Url.urlHtml + Constant.Img, + bt_yingxiongbang + ); + bt_yingxiongbang.setVisibility(View.VISIBLE); + } + bt_yingxiongbang.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if (Constant.from==2){ + getUrl_path(); + }else { + Intent intent =new Intent(getActivity(), NewsDetailActivity.class); + intent.putExtra("url", Constant.url_path); + intent.putExtra("flag", 1); + intent.putExtra("summary","肝胆相照®肝胆病在线公共服务平台"); + intent.putExtra("title", Constant.zengshuName); + startActivity(intent); + } + } + }); + } + + /** + * 初始化消息列表 + */ + private void initMessageList() { + items = new ArrayList<>(); + cached = new HashMap<>(3); + // adapter + adapter = new RecentContactAdapter(recyclerView, items); + initCallBack(); + adapter.setCallback(callback); + // recyclerView + recyclerView.setAdapter(adapter); + recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); + recyclerView.addOnItemTouchListener(touchListener); + // drop listener + DropManager.getInstance().setDropListener(new DropManager.IDropListener() { + + @Override + public void onDropBegin() { + touchListener.setShouldDetectGesture(false); + } + + @Override + public void onDropEnd() { + touchListener.setShouldDetectGesture(true); + } + }); + } + + private void initCallBack() { + if (callback != null) { + return; + } + callback = new RecentContactsCallback() { + + @Override + public void onRecentContactsLoaded() { + } + + @Override + public void onUnreadCountChange(int unreadCount) { + } + + @Override + public void onItemClick(RecentContact recent,int position) { + if (recent.getSessionType() == SessionTypeEnum.SUPER_TEAM) { + ToastHelper.showToast(getActivity(), getString(com.netease.nim.uikit.R.string.super_team_impl_by_self)); + } else if (recent.getSessionType() == SessionTypeEnum.Team) { + NimUIKit.startTeamSession(getActivity(), recent.getContactId()); + } else if (recent.getSessionType() == P2P) { +// NimUIKit.startP2PSession(getActivity(), recent.getContactId()); +// if(recent.getContactId().contains("#")) +// start(getActivity(), recent.getContactId().split("#")[1].toLowerCase(), null, null,general,""); +// else + start(getActivity(), recent.getContactId(), null, null,general,""); + } + } + + @Override + public String getDigestOfAttachment(RecentContact recentContact, MsgAttachment attachment) { + return null; + } + + @Override + public String getDigestOfTipMsg(RecentContact recent) { + return null; + } + }; + } + + private SimpleClickListener touchListener = new SimpleClickListener() { + + @Override + public void onItemClick(RecentContactAdapter adapter, View view, int position) { + if (callback != null) { + RecentContact recent = adapter.getItem(position); + callback.onItemClick(recent,position); + } + } + + @Override + public void onItemLongClick(RecentContactAdapter adapter, View view, int position) { + showLongClickMenu(adapter.getItem(position), position); + } + + @Override + public void onItemChildClick(RecentContactAdapter adapter, View view, int position) { + } + + @Override + public void onItemChildLongClick(RecentContactAdapter adapter, View view, int position) { + } + }; + + OnlineStateChangeObserver onlineStateChangeObserver = accounts -> notifyDataSetChanged(); + + private void registerOnlineStateChangeListener(boolean register) { + if (!NimUIKitImpl.enableOnlineState()) { + return; + } + NimUIKitImpl.getOnlineStateChangeObservable().registerOnlineStateChangeListeners(onlineStateChangeObserver, + register); + } + + private void showLongClickMenu(final RecentContact recent, final int position1) { + + final MsgService msgService = NIMClient.getService(MsgService.class); + final String sessionId = recent == null ? null : recent.getContactId(); + final SessionTypeEnum sessionType = recent == null ? null : recent.getSessionType(); + final RequestCallback deleteRecentCallback = new RequestCallback() { + + @Override + public void onSuccess(Void param) { + ToastHelper.showToast(getActivity(), "delete success"); + } + + @Override + public void onFailed(int code) { + ToastHelper.showToast(getActivity(), + "delete failed, code:" + code); + } + + @Override + public void onException(Throwable exception) { + ToastHelper.showToast(getActivity(), + "delete error, e:" + exception); + } + }; + ECListDialog dialog = new ECListDialog(getActivity() , new String[]{getString(R.string.main_delete)}); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + msgService.deleteRecentContact(sessionId, sessionType, DeleteTypeEnum.LOCAL_AND_REMOTE, true) + .setCallback(deleteRecentCallback); + msgService.clearChattingHistory(sessionId, sessionType); + NIMClient.getService(MsgService.class).clearServerHistory(sessionId, + sessionType, true, ""); + msgService.clearUnreadCount(sessionId, sessionType); + adapter.remove(position1); + postRunnable(() -> refreshMessages(true) + ); + ToastUtil.showMessage(R.string.clear_msg_success); + } + }); + String Username = UserInfoHelper.getUserDisplayName(recent.getContactId()); + dialog.setTitle(Username); + dialog.show(); +// CustomAlertDialog alertDialog = new CustomAlertDialog(getActivity()); +// alertDialog.setTitle(UserInfoHelper.getUserTitleName(sessionId, sessionType)); +// // 删除本地会话,清除本地消息并删漫游 +// String title = getString(R.string.main_msg_list_delete_chatting); +// alertDialog.addItem(title, () -> { +// // 删除会话,删除后,消息历史被一起删除 +// msgService.deleteRecentContact(sessionId, sessionType, DeleteTypeEnum.LOCAL_AND_REMOTE, true) +// .setCallback(deleteRecentCallback); +// msgService.clearChattingHistory(sessionId, sessionType); +// adapter.remove(position); +// postRunnable(() -> refreshMessages(true)); +// }); +// +// // 删漫游 +// title = getString(R.string.delete_chat_only_server); +// alertDialog.addItem(title, () -> { +// msgService.deleteRecentContact(sessionId, sessionType, DeleteTypeEnum.REMOTE, false) +// .setCallback(deleteRecentCallback); +// }); +// +// // 删除本地会话,并清除本地消息 +// title = getString(R.string.delete_chat_only_local); +// alertDialog.addItem(title, () -> { +// msgService.deleteRecentContact(sessionId, sessionType, DeleteTypeEnum.LOCAL, true) +// .setCallback(deleteRecentCallback); +// msgService.clearChattingHistory(sessionId, sessionType); +// adapter.remove(position); +// postRunnable(() -> refreshMessages(true)); +// }); +// +// title = (StickTopCache.isStickTop(sessionId, sessionType) ? getString( +// R.string.main_msg_list_clear_sticky_on_top) : getString(R.string.main_msg_list_sticky_on_top)); +// alertDialog.addItem(title, () -> { +// if (StickTopCache.isStickTop(sessionId, sessionType)) { +// msgService.removeStickTopSession(sessionId, sessionType, "").setCallback(new RequestCallbackWrapper() { +// @Override +// public void onResult(int code, Void result, Throwable exception) { +// if (ResponseCode.RES_SUCCESS == code) { +// StickTopCache.recordStickTop(sessionId, sessionType, false); +// refreshMessages(false); +// } +// } +// }); +// } else { +// msgService.addStickTopSession(sessionId, sessionType, "").setCallback(new RequestCallbackWrapper() { +// @Override +// public void onResult(int code, StickTopSessionInfo result, Throwable exception) { +// if (ResponseCode.RES_SUCCESS == code) { +// StickTopCache.recordStickTop(result, true); +// refreshMessages(false); +// } +// } +// }); +// } +// }); +// alertDialog.show(); + } + + private List loadedRecents; + + private void requestMessages(boolean delay) { + if (msgLoaded) { + return; + } + + getHandler().postDelayed(() -> { + if (msgLoaded) { + return; + } + + NIMClient.getService(SdkLifecycleObserver.class).observeMainProcessInitCompleteResult(new Observer() { + @Override + public void onEvent(Boolean aBoolean) { + NIMClient.getService(SdkLifecycleObserver.class).observeMainProcessInitCompleteResult(this, false); + + if (msgLoaded) { + return; + } + + // 查询最近联系人列表数据 + NIMClient.getService(MsgService.class).queryRecentContacts().setCallback( + new RequestCallbackWrapper>() { + + @Override + public void onResult(int code, List recents, Throwable exception) { + + if (code != ResponseCode.RES_SUCCESS || recents == null) { + return; + } + Iterator it = recents.iterator(); + while(it.hasNext()){ + RecentContact loadedRecent = it.next(); + if(!PatientSqlManager.isPatient( Constant.Patient_AppKey+loadedRecent.getContactId())) + it.remove(); + + } + loadedRecents = recents; + msgLoaded = true; + if (isAdded()) { + onRecentContactsLoaded(); + } + } + }); + } + }, true); + }, delay ? 250 : 0); + } + + public void getOldRecent() + { + Cursor cursor = ConversationSqlManager.getConversationCursorPatient(); + + + if(cursor!=null&&cursor.moveToFirst()) + { + do + { + Conversation conversation = new Conversation(); + conversation.setCursor(cursor); + if(conversation.getUsername() != null && conversation.getUsername().endsWith("@priategroup.com")) { + ArrayList member = GroupMemberSqlManager.getGroupMemberID(conversation.getSessionId()); + if(member != null) { + ArrayList contactName = ContactSqlManager.getContactName(member.toArray(new String[]{})); + if(contactName != null && !contactName.isEmpty()) { + String chatroomName = DemoUtils.listToString(contactName, ","); + conversation.setUsername(chatroomName); + } + } + } + RecentContact recentContactFromOld= + NIMClient.getService(MsgService.class).createEmptyRecentContact + (conversation.getSessionId().split("#")[1].toLowerCase(), P2P, 0, conversation.getDateTime(), true); + + IMMessage imMessage; + if(conversation.getMsgType() == 2) {//语音 + imMessage= MessageBuilder.createTextMessage(conversation.getSessionId().split("#")[1].toLowerCase(), P2P, getResources().getString(R.string.app_voice)); + + } else if(conversation.getMsgType() == 4) {//图片 + imMessage= MessageBuilder.createTextMessage(conversation.getSessionId().split("#")[1].toLowerCase(), P2P, getResources().getString(R.string.app_pic)); + + } else if(conversation.getMsgType() == 3) {//视频 + imMessage= MessageBuilder.createTextMessage(conversation.getSessionId().split("#")[1].toLowerCase(), P2P, getResources().getString(R.string.app_video)); + + } + else + { + //文本 + imMessage= MessageBuilder.createTextMessage(conversation.getSessionId().split("#")[1].toLowerCase(), P2P, conversation.getContent()); + } + + imMessage.setStatus(MsgStatusEnum.success); + + recentContactFromOld.setLastMsg(imMessage); +// NIMClient.getService(MsgService.class).updateRecentByMessage(imMessage,true); + + + } + + while(cursor.moveToNext()); + + cursor.close(); + + + } + + + + } + private void onRecentContactsLoaded() { + items.clear(); + if (loadedRecents != null) { + items.addAll(loadedRecents); + + loadedRecents = null; + } + + + + refreshMessages(true); + if (callback != null) { + callback.onRecentContactsLoaded(); + } +// new Thread(new Runnable() { +// @Override +// public void run() { +// getOldRecent(); +// } +// }).start(); + } + + private void refreshMessages(boolean unreadChanged) { + sortRecentContacts(items); + notifyDataSetChanged(); + if (unreadChanged) { + // 方式一:累加每个最近联系人的未读(快) + int unreadNum = 0; + for (RecentContact r : items) { + unreadNum += r.getUnreadCount(); + } + // 方式二:直接从SDK读取(相对慢) + //int unreadNum = NIMClient.getService(MsgService.class).getTotalUnreadCount(); + if (callback != null) { + callback.onUnreadCountChange(unreadNum); + } + Badger.updateBadgerCount(unreadNum); + } + } + + /** + * **************************** 排序 *********************************** + */ + private void sortRecentContacts(List list) { + if (list.size() == 0) { + return; + } + Collections.sort(list, comp); + } + + private static Comparator comp = (recent1, recent2) -> { + // 先比较置顶tag + boolean isStickTop1 = StickTopCache.isStickTop(recent1); + boolean isStickTop2 = StickTopCache.isStickTop(recent2); + if (isStickTop1 ^ isStickTop2) { + return isStickTop1 ? -1 : 1; + } else { + long time = recent1.getTime() - recent2.getTime(); + return time == 0 ? 0 : (time > 0 ? -1 : 1); + } + }; + + /** + * ********************** 收消息,处理状态变化 ************************ + */ + private void registerObservers(boolean register) { + MsgServiceObserve service = NIMClient.getService(MsgServiceObserve.class); + service.observeReceiveMessage(messageReceiverObserver, register); + service.observeRecentContact(messageObserver, register); + service.observeMsgStatus(statusObserver, register); + service.observeRecentContactDeleted(deleteObserver, register); + registerTeamUpdateObserver(register); + registerTeamMemberUpdateObserver(register); + registerStickTopObserver(register); + NimUIKit.getContactChangedObservable().registerObserver(friendDataChangedObserver, register); + if (register) { + registerUserInfoObserver(); + } else { + unregisterUserInfoObserver(); + } + } + + /** + * 注册群信息&群成员更新监听 + */ + private void registerTeamUpdateObserver(boolean register) { + NimUIKit.getTeamChangedObservable().registerTeamDataChangedObserver(teamDataChangedObserver, register); + } + + private void registerTeamMemberUpdateObserver(boolean register) { + NimUIKit.getTeamChangedObservable().registerTeamMemberDataChangedObserver(teamMemberDataChangedObserver, + register); + } + + private void registerStickTopObserver(boolean register) { + MsgServiceObserve msgObserver = NIMClient.getService(MsgServiceObserve.class); + msgObserver.observeAddStickTopSession(addStickTopSessionObserver, register); + msgObserver.observeRemoveStickTopSession(removeStickTopSessionObserver, register); + msgObserver.observeSyncStickTopSession(syncStickTopSessionObserver, register); + } + + private void registerDropCompletedListener(boolean register) { + if (register) { + DropManager.getInstance().addDropCompletedListener(dropCompletedListener); + } else { + DropManager.getInstance().removeDropCompletedListener(dropCompletedListener); + } + } + + // 暂存消息,当RecentContact 监听回来时使用,结束后清掉 + private Map> cacheMessages = new HashMap<>(); + + //监听在线消息中是否有@我 + private Observer> messageReceiverObserver = new Observer>() { + + @Override + public void onEvent(List imMessages) { + if (imMessages != null) { + for (IMMessage imMessage : imMessages) { + if (!TeamMemberAitHelper.isAitMessage(imMessage)) { + continue; + } + Set cacheMessageSet = cacheMessages.get(imMessage.getSessionId()); + if (cacheMessageSet == null) { + cacheMessageSet = new HashSet<>(); + cacheMessages.put(imMessage.getSessionId(), cacheMessageSet); + } + cacheMessageSet.add(imMessage); + } + } + } + }; + + Observer> messageObserver = new Observer>() { + + @Override + public void onEvent(List recentContacts) { + + if (!DropManager.getInstance().isTouchable()) { + // 正在拖拽红点,缓存数据 + for (RecentContact r : recentContacts) { + cached.put(r.getContactId(), r); + } + return; + } + onRecentContactChanged(recentContacts); + } + }; + + private void onRecentContactChanged(List recentContacts) { + int index; + for (RecentContact r : recentContacts) { + index = -1; + for (int i = 0; i < items.size(); i++) { + if (r.getContactId()!=null&&r.getContactId().equals(items.get(i).getContactId()) && r.getSessionType() == (items.get(i) + .getSessionType())) { + index = i; + break; + } + } + if (index >= 0) { + items.remove(index); + } + items.add(r); + if (r.getContactId()!=null&&r.getSessionType() == SessionTypeEnum.Team && cacheMessages.get(r.getContactId()) != null) { + TeamMemberAitHelper.setRecentContactAited(r, cacheMessages.get(r.getContactId())); + } + } + cacheMessages.clear(); + refreshMessages(true); + } + + DropCover.IDropCompletedListener dropCompletedListener = new DropCover.IDropCompletedListener() { + + @Override + public void onCompleted(Object id, boolean explosive) { + if (cached != null && !cached.isEmpty()) { + // 红点爆裂,已经要清除未读,不需要再刷cached + if (explosive) { + if (id instanceof RecentContact) { + RecentContact r = (RecentContact) id; + cached.remove(r.getContactId()); + } else if (id instanceof String && ((String) id).contentEquals("0")) { + cached.clear(); + } + } + // 刷cached + if (!cached.isEmpty()) { + List recentContacts = new ArrayList<>(cached.size()); + recentContacts.addAll(cached.values()); + cached.clear(); + onRecentContactChanged(recentContacts); + } + } + } + }; + + final Observer statusObserver = new Observer() { + + @Override + public void onEvent(IMMessage message) { + if (message == null) { + return; + } + String sessionId = message.getSessionId(); + SessionTypeEnum sessionType = message.getSessionType(); + int index = getItemIndex(sessionId, sessionType); + if (index >= 0 && index < items.size()) { + RecentContact recentContact = NIMClient.getService(MsgService.class).queryRecentContact(sessionId, sessionType); + items.set(index, recentContact); + refreshViewHolderByIndex(index); + } + } + }; + + Observer deleteObserver = new Observer() { + + @Override + public void onEvent(RecentContact recentContact) { + if (recentContact != null) { + for (RecentContact item : items) { + if (TextUtils.equals(item.getContactId(), recentContact.getContactId()) && + item.getSessionType() == recentContact.getSessionType()) { + items.remove(item); + refreshMessages(true); + break; + } + } + } else { + items.clear(); + refreshMessages(true); + } + } + }; + + TeamDataChangedObserver teamDataChangedObserver = new TeamDataChangedObserver() { + + @Override + public void onUpdateTeams(List teams) { + adapter.notifyDataSetChanged(); + } + + @Override + public void onRemoveTeam(Team team) { + } + }; + + TeamMemberDataChangedObserver teamMemberDataChangedObserver = new TeamMemberDataChangedObserver() { + + @Override + public void onUpdateTeamMember(List members) { + adapter.notifyDataSetChanged(); + } + + @Override + public void onRemoveTeamMember(List member) { + } + }; + + private final Observer> syncStickTopSessionObserver = infoList -> { + StickTopCache.recordStickTop(infoList, true); + refreshMessages(false); + }; + private final Observer addStickTopSessionObserver = info -> { + StickTopCache.recordStickTop(info, true); + refreshMessages(false); + }; + private final Observer removeStickTopSessionObserver = info -> { + StickTopCache.recordStickTop(info, false); + refreshMessages(false); + }; + + private int getItemIndex(String uuid) { + for (int i = 0; i < items.size(); i++) { + RecentContact item = items.get(i); + if (item == null) { + continue; + } + if (TextUtils.equals(item.getRecentMessageId(), uuid)) { + return i; + } + } + return -1; + } + + private int getItemIndex(String sessionId, SessionTypeEnum sessionType) { + for (int i = 0; i < items.size(); i++) { + RecentContact item = items.get(i); + if (item == null) { + continue; + } + if (TextUtils.equals(item.getContactId(), sessionId) && item.getSessionType() == sessionType) { + return i; + } + } + return -1; + } + + protected void refreshViewHolderByIndex(final int index) { + getActivity().runOnUiThread(() -> adapter.notifyItemChanged(index)); + } + + public void setCallback(RecentContactsCallback callback) { + this.callback = callback; + } + + private void registerUserInfoObserver() { + if (userInfoObserver == null) { + userInfoObserver = accounts -> refreshMessages(false); + } + NimUIKit.getUserInfoObservable().registerObserver(userInfoObserver, true); + } + + private void unregisterUserInfoObserver() { + if (userInfoObserver != null) { + NimUIKit.getUserInfoObservable().registerObserver(userInfoObserver, false); + } + } + + ContactChangedObserver friendDataChangedObserver = new ContactChangedObserver() { + + @Override + public void onAddedOrUpdatedFriends(List accounts) { + refreshMessages(false); + } + + @Override + public void onDeletedFriends(List accounts) { + refreshMessages(false); + } + + @Override + public void onAddUserToBlackList(List account) { + refreshMessages(false); + } + + @Override + public void onRemoveUserFromBlackList(List account) { + refreshMessages(false); + } + }; + + private void updateOfflineContactAited(final RecentContact recentContact) { + if (recentContact == null || recentContact.getSessionType() != SessionTypeEnum.Team || + recentContact.getUnreadCount() <= 0) { + return; + } + // 锚点 + List uuid = new ArrayList<>(1); + uuid.add(recentContact.getRecentMessageId()); + List messages = NIMClient.getService(MsgService.class).queryMessageListByUuidBlock(uuid); + if (messages == null || messages.size() < 1) { + return; + } + final IMMessage anchor = messages.get(0); + // 查未读消息 + NIMClient.getService(MsgService.class).queryMessageListEx(anchor, QueryDirectionEnum.QUERY_OLD, + recentContact.getUnreadCount() - 1, false) + .setCallback(new RequestCallbackWrapper>() { + + @Override + public void onResult(int code, List result, Throwable exception) { + if (code == ResponseCode.RES_SUCCESS && result != null) { + result.add(0, anchor); + Set messages = null; + // 过滤存在的@我的消息 + for (IMMessage msg : result) { + if (TeamMemberAitHelper.isAitMessage(msg)) { + if (messages == null) { + messages = new HashSet<>(); + } + messages.add(msg); + } + } + // 更新并展示 + if (messages != null) { + TeamMemberAitHelper.setRecentContactAited(recentContact, messages); + notifyDataSetChanged(); + } + } + } + }); + + } + public static final int URL_PATH = 200; + private final ReentrantLock lock = new ReentrantLock(); + private void getUrl_path() { + final Map param = new HashMap<>(); + LogUtil.i("url_path = "+ Url.url_path+ Constant.url_path); + param.put("user_uuid", SharePrefUtil.getString(getActivity(), "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName() ); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(Url.url_path+ Constant.url_path); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = URL_PATH; + message.obj = new String(result); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + } + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + switch (msg.what){ + case URL_PATH: + ZengshuBean zengshuBean = GsonTools.fromGsonToBean(resultData, ZengshuBean.class); + showFuliZengshuDailog(zengshuBean); + break; + } + + } + }; + }; + private void showFuliZengshuDailog(ZengshuBean bean1) { + // TODO Auto-generated method stub + + LayoutInflater inflater = LayoutInflater.from(getActivity()); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_fulizengshu, null); + TextView tv_rennum = layout.findViewById(R.id.tv_rennum); + TextView tv_bennum = layout.findViewById(R.id.tv_bennum); + ImageView iv_fuli_close = layout.findViewById(R.id.iv_fuli_close); + Button btn_canyu = layout.findViewById(R.id.btn_canyu); + tv_rennum.setText(bean1.getData().getPatient_num()+""); + tv_bennum.setText(bean1.getData().getBook_num()+""); + final Dialog dialog = new AlertDialog.Builder( + getActivity()).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + iv_fuli_close.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_canyu.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + Intent intent = new Intent(getActivity(), MyQrCodeActivity.class); + startActivity(intent); + dialog.dismiss(); + } + }); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentViewHolder.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentViewHolder.java new file mode 100644 index 0000000..57bd2a1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ptop/RecentViewHolder.java @@ -0,0 +1,238 @@ +package cn.shangyu.gdxzExpert.netease.ptop; + +import android.graphics.drawable.AnimationDrawable; +import android.text.TextUtils; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.business.recent.RecentContactsCallback; +import com.netease.nim.uikit.business.session.emoji.MoonUtil; +import com.netease.nim.uikit.common.framework.infra.Handlers; +import com.netease.nim.uikit.common.ui.drop.DropFake; +import com.netease.nim.uikit.common.ui.drop.DropManager; +import com.netease.nim.uikit.common.ui.imageview.HeadImageView; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseQuickAdapter; +import com.netease.nim.uikit.common.ui.recyclerview.holder.BaseViewHolder; +import com.netease.nim.uikit.common.ui.recyclerview.holder.RecyclerViewHolder; +import com.netease.nim.uikit.common.util.sys.ScreenUtil; +import com.netease.nim.uikit.common.util.sys.TimeUtil; +import com.netease.nim.uikit.impl.cache.StickTopCache; +import com.netease.nimlib.sdk.msg.constant.MsgStatusEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.superteam.SuperTeam; +import com.netease.nimlib.sdk.team.model.Team; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +public abstract class RecentViewHolder extends RecyclerViewHolder { + + public RecentViewHolder(BaseQuickAdapter adapter) { + super(adapter); + } + + private int lastUnreadCount = 0; + + protected RelativeLayout portraitPanel; + + protected HeadImageView imgHead; + + protected TextView tvNickname; + + protected TextView tvMessage; + + protected TextView tvDatetime; + + // 消息发送错误状态标记,目前没有逻辑处理 + protected ImageView imgMsgStatus; + + protected View bottomLine; + + protected View topLine; + + // 未读红点(一个占坑,一个全屏动画) + protected DropFake tvUnread; + + private ImageView imgUnreadExplosion; + + protected TextView tvOnlineState; + + private static Integer labelWidth; + + // 子类覆写 + protected abstract String getContent(RecentContact recent); + + @Override + public void convert(BaseViewHolder holder, RecentContact data, int position, boolean isScrolling) { + inflate(holder, data); + refresh(holder, data, position); + } + + public void inflate(BaseViewHolder holder, final RecentContact recent) { + this.portraitPanel = holder.getView(R.id.portrait_panel); + this.imgHead = holder.getView(R.id.img_head); + this.tvNickname = holder.getView(R.id.tv_nickname); + this.tvMessage = holder.getView(R.id.tv_message); + this.tvUnread = holder.getView(R.id.unread_number_tip); + this.imgUnreadExplosion = holder.getView(R.id.unread_number_explosion); + this.tvDatetime = holder.getView(R.id.tv_date_time); + this.imgMsgStatus = holder.getView(R.id.img_msg_status); + this.bottomLine = holder.getView(R.id.bottom_line); + this.topLine = holder.getView(R.id.top_line); + this.tvOnlineState = holder.getView(R.id.tv_online_state); + holder.addOnClickListener(R.id.unread_number_tip); + this.tvUnread.setTouchListener(new DropFake.ITouchListener() { + + @Override + public void onDown() { + DropManager.getInstance().setCurrentId(recent); + DropManager.getInstance().down(tvUnread, tvUnread.getText()); + } + + @Override + public void onMove(float curX, float curY) { + DropManager.getInstance().move(curX, curY); + } + + @Override + public void onUp() { + DropManager.getInstance().up(); + } + }); + } + + public void refresh(BaseViewHolder holder, RecentContact recent, final int position) { + // unread count animation + boolean shouldBoom = lastUnreadCount > 0 && recent.getUnreadCount() == 0; // 未读数从N->0执行爆裂动画; + lastUnreadCount = recent.getUnreadCount(); + updateBackground(holder, recent, position); + loadPortrait(recent); + updateNickLabel( + UserInfoHelper.getUserTitleName(recent.getContactId(), recent.getSessionType()) + ); + updateOnlineState(recent); + updateMsgLabel(holder, recent); + updateNewIndicator(recent); + if (shouldBoom) { + Object o = DropManager.getInstance().getCurrentId(); + if (o instanceof String && o.equals("0")) { + imgUnreadExplosion.setImageResource(com.netease.nim.uikit.R.drawable.nim_explosion); + imgUnreadExplosion.setVisibility(View.VISIBLE); + Handlers.sharedHandler(holder.getContext()).post(() -> { + ((AnimationDrawable) imgUnreadExplosion.getDrawable()).start(); + // 解决部分手机动画无法播放的问题(例如华为荣耀) + getAdapter().notifyItemChanged(getAdapter().getViewHolderPosition(position)); + }); + } + } else { + imgUnreadExplosion.setVisibility(View.GONE); + } + } + + private void updateBackground(BaseViewHolder holder, RecentContact recent, int position) { + topLine.setVisibility(getAdapter().isFirstDataItem(position) ? View.GONE : View.VISIBLE); + bottomLine.setVisibility(getAdapter().isLastDataItem(position) ? View.VISIBLE : View.GONE); + holder.getConvertView().setBackgroundResource(recent == null || StickTopCache.isStickTop(recent) ? + com.netease.nim.uikit.R.drawable.nim_recent_contact_sticky_selecter : com.netease.nim.uikit.R.drawable.nim_touch_bg); + } + + protected void loadPortrait(RecentContact recent) { + // 设置头像 + if (recent.getSessionType() == SessionTypeEnum.P2P) { +// imgHead.loadBuddyAvatar(recent.getContactId()); + + if(!StringUtil.isEmpty(UserInfoHelper.getUserDisplayPhoto(recent.getContactId()))) + { + imgHead.loadAvatar("",UserInfoHelper.getUserDisplayPhoto(recent.getContactId())); + + } + else + { + imgHead.loadBuddyAvatar(recent.getContactId()); + } + + } else if (recent.getSessionType() == SessionTypeEnum.Team) { + Team team = NimUIKit.getTeamProvider().getTeamById(recent.getContactId()); + imgHead.loadTeamIconByTeam(team); + } else if (recent.getSessionType() == SessionTypeEnum.SUPER_TEAM) { + SuperTeam team = NimUIKit.getSuperTeamProvider().getTeamById(recent.getContactId()); + imgHead.loadSuperTeamIconByTeam(team); + } else if (recent.getSessionType() == SessionTypeEnum.Ysf) { + imgHead.setImageResource(com.netease.nim.uikit.R.drawable.nim_ic_ysf_default_icon); + } + } + + private void updateNewIndicator(RecentContact recent) { + int unreadNum = recent.getUnreadCount(); + tvUnread.setVisibility(unreadNum > 0 ? View.VISIBLE : View.GONE); + tvUnread.setText(unreadCountShowRule(unreadNum)); + } + + private void updateMsgLabel(BaseViewHolder holder, RecentContact recent) { + // 显示消息具体内容 + MoonUtil.identifyRecentVHFaceExpressionAndTags(holder.getContext(), tvMessage, getContent(recent), -1, 0.45f); + //tvMessage.setText(getContent()); + MsgStatusEnum status = recent.getMsgStatus(); + if (status == null) { + imgMsgStatus.setVisibility(View.GONE); + } else { + switch (status) { + case fail: + imgMsgStatus.setImageResource(com.netease.nim.uikit.R.drawable.nim_g_ic_failed_small); + imgMsgStatus.setVisibility(View.VISIBLE); + break; + case sending: + imgMsgStatus.setImageResource(com.netease.nim.uikit.R.drawable.nim_recent_contact_ic_sending); + imgMsgStatus.setVisibility(View.VISIBLE); + break; + default: + imgMsgStatus.setVisibility(View.GONE); + break; + } + } + String timeString = TimeUtil.getTimeShowString(recent.getTime(), true); + tvDatetime.setText(timeString); + } + + protected String getOnlineStateContent(RecentContact recent) { + return ""; + } + + protected void updateOnlineState(RecentContact recent) { + if (recent.getSessionType() == SessionTypeEnum.Team || recent.getSessionType() == SessionTypeEnum.SUPER_TEAM) { + tvOnlineState.setVisibility(View.GONE); + } else { + String onlineStateContent = getOnlineStateContent(recent); + if (TextUtils.isEmpty(onlineStateContent)) { + tvOnlineState.setVisibility(View.GONE); + } else { + tvOnlineState.setVisibility(View.VISIBLE); + tvOnlineState.setText(getOnlineStateContent(recent)); + } + } + } + + protected void updateNickLabel(String nick) { + if (labelWidth == null) { + labelWidth = ScreenUtil.screenWidth - ScreenUtil.dip2px(120); // 减去固定的头像和时间宽度; + } + if (labelWidth > 0) { + tvNickname.setMaxWidth(labelWidth); + } + tvNickname.setText(nick); + } + + protected String unreadCountShowRule(int unread) { + unread = Math.min(unread, 99); + return String.valueOf(unread); + } + + protected RecentContactsCallback getCallback() { + return ((RecentContactAdapter) getAdapter()).getCallback(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/InputPanel.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/InputPanel.java new file mode 100644 index 0000000..66174f1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/InputPanel.java @@ -0,0 +1,955 @@ +package cn.shangyu.gdxzExpert.netease.session; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Handler; +import android.os.SystemClock; +import android.text.Editable; +import android.text.InputType; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.Chronometer; +import android.widget.EditText; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.alibaba.fastjson.JSONObject; +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.netease.nim.uikit.R; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.UIKitOptions; +import com.netease.nim.uikit.api.model.session.SessionCustomization; +import com.netease.nim.uikit.business.ait.AitTextChangeListener; +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.business.session.emoji.EmoticonPickerView; +import com.netease.nim.uikit.business.session.emoji.IEmoticonSelectedListener; +import com.netease.nim.uikit.business.session.emoji.MoonUtil; +import com.netease.nim.uikit.business.session.module.Container; +import com.netease.nim.uikit.business.session.module.input.ActionsPanel; +import com.netease.nim.uikit.business.uinfo.UserInfoHelper; +import com.netease.nim.uikit.common.ToastHelper; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nim.uikit.common.util.string.StringUtil; +import com.netease.nim.uikit.impl.NimUIKitImpl; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.media.record.AudioRecorder; +import com.netease.nimlib.sdk.media.record.IAudioRecordCallback; +import com.netease.nimlib.sdk.media.record.RecordType; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.CustomNotification; +import com.netease.nimlib.sdk.msg.model.CustomNotificationConfig; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; + +import java.io.File; +import java.util.List; + +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; + +/** + * 底部文本编辑,语音等模块 + * Created by hzxuwen on 2015/6/16. + */ +public class InputPanel implements IEmoticonSelectedListener, IAudioRecordCallback, AitTextChangeListener { + + private static final String TAG = "MsgSendLayout"; + + private static final int SHOW_LAYOUT_DELAY = 200; + + protected Container container; + protected View view; + protected Handler uiHandler; + + protected View actionPanelBottomLayout; // 更多布局 + protected LinearLayout messageActivityBottomLayout; + public EditText messageEditText;// 文本消息编辑框 + protected Button audioRecordBtn; // 录音按钮 + protected View audioAnimLayout; // 录音动画布局 + protected FrameLayout textAudioSwitchLayout; // 切换文本,语音按钮布局 + protected View switchToTextButtonInInputBar;// 文本消息选择按钮 + protected View switchToAudioButtonInInputBar;// 语音消息选择按钮 + protected View moreFuntionButtonInInputBar;// 更多消息选择按钮 + protected View sendMessageButtonInInputBar;// 发送消息按钮 + protected View emojiButtonInInputBar;// emoji选择按钮 + protected View messageInputBar; + protected TextView replyInfoTv;// 被回复消息信息 + protected View replyLayout; + protected ImageView cancelReplyImg;// 取消回复消息的按钮 + + private SessionCustomization customization; + + // 表情 + protected EmoticonPickerView emoticonPickerView; // 贴图表情控件 + + // 语音 + protected AudioRecorder audioMessageHelper; + private Chronometer time; + private TextView timerTip; + private LinearLayout timerTipContainer; + private boolean started = false; + private boolean cancelled = false; + private boolean touched = false; // 是否按着 + private boolean isKeyboardShowed = true; // 是否显示键盘 + + // state + private boolean actionPanelBottomLayoutHasSetup = false; + private boolean isTextAudioSwitchShow = true; + + // adapter + private List actions; + + // data + private long typingTime = 0; + + private boolean isRobotSession; + + private TextWatcher aitTextWatcher; + + private IMMessage replyMessage = null; + + public InputPanel(Container container, View view, List actions, boolean isTextAudioSwitchShow) { + this.container = container; + this.view = view; + this.actions = actions; + this.uiHandler = new Handler(); + this.isTextAudioSwitchShow = isTextAudioSwitchShow; + init(); + } + + public InputPanel(Container container, View view, List actions) { + this(container, view, actions, true); + } + + public void onPause() { + // 停止录音 + if (audioMessageHelper != null) { + onEndAudioRecord(true); + } + } + + public void onDestroy() { + // release + if (audioMessageHelper != null) { + audioMessageHelper.destroyAudioRecorder(); + } + } + + public boolean collapse(boolean immediately) { + boolean respond = (emoticonPickerView != null && emoticonPickerView.getVisibility() == View.VISIBLE + || actionPanelBottomLayout != null && actionPanelBottomLayout.getVisibility() == View.VISIBLE); + + hideAllInputLayout(immediately); + + return respond; + } + + public void addAitTextWatcher(TextWatcher watcher) { + aitTextWatcher = watcher; + } + + private void init() { + initViews(); + initInputBarListener(); + initTextEdit(); + initAudioRecordButton(); + restoreText(false); + + for (int i = 0; i < actions.size(); ++i) { + actions.get(i).setIndex(i); + actions.get(i).setContainer(container); + } + } + + public IMMessage getReplyMessage() { + return replyMessage; + } + + public void setReplyMessage(IMMessage replyMessage) { + this.replyMessage = replyMessage; + refreshReplyMsgLayout(); + } + + public void resetReplyMessage() { + setReplyMessage(null); + } + + public void setCustomization(SessionCustomization customization) { + this.customization = customization; + if (customization != null) { + emoticonPickerView.setWithSticker(customization.withSticker); + } + } + + public void reload(Container container, SessionCustomization customization) { + this.container = container; + setCustomization(customization); + } + + private void initViews() { + // input bar + messageActivityBottomLayout = view.findViewById(R.id.messageActivityBottomLayout); + messageInputBar = view.findViewById(R.id.textMessageLayout); + switchToTextButtonInInputBar = view.findViewById(R.id.buttonTextMessage); + switchToAudioButtonInInputBar = view.findViewById(R.id.buttonAudioMessage); + moreFuntionButtonInInputBar = view.findViewById(R.id.buttonMoreFuntionInText); + emojiButtonInInputBar = view.findViewById(R.id.emoji_button); + sendMessageButtonInInputBar = view.findViewById(R.id.buttonSendMessage); + messageEditText = view.findViewById(R.id.editTextMessage); + replyInfoTv = view.findViewById(R.id.tvReplyInfo); + replyLayout = view.findViewById(R.id.layout_reply); + cancelReplyImg = view.findViewById(R.id.imgCancelReply); + + // 语音 + audioRecordBtn = view.findViewById(R.id.audioRecord); + audioAnimLayout = view.findViewById(R.id.layoutPlayAudio); + time = view.findViewById(R.id.timer); + timerTip = view.findViewById(R.id.timer_tip); + timerTipContainer = view.findViewById(R.id.timer_tip_container); + + // 表情 + emoticonPickerView = view.findViewById(R.id.emoticon_picker_view); + + // 显示录音按钮 + switchToTextButtonInInputBar.setVisibility(View.GONE); + switchToAudioButtonInInputBar.setVisibility(View.VISIBLE); + + // 文本录音按钮切换布局 + textAudioSwitchLayout = view.findViewById(R.id.switchLayout); + if (isTextAudioSwitchShow) { + textAudioSwitchLayout.setVisibility(View.VISIBLE); + } else { + textAudioSwitchLayout.setVisibility(View.GONE); + } + } + + private void initInputBarListener() { + switchToTextButtonInInputBar.setOnClickListener(clickListener); + switchToAudioButtonInInputBar.setOnClickListener(clickListener); + emojiButtonInInputBar.setOnClickListener(clickListener); + sendMessageButtonInInputBar.setOnClickListener(clickListener); + moreFuntionButtonInInputBar.setOnClickListener(clickListener); + cancelReplyImg.setOnClickListener(clickListener); + } + + private void initTextEdit() { + RecentContact recent= NIMClient.getService(MsgService.class).queryRecentContact(container.account, container.sessionType); + if(recent!=null) + { + if(recent.getExtension()!=null&&recent.getExtension().get(Extras.CAO_GAO)!=null + && !TextUtils.isEmpty(recent.getExtension().get(Extras.CAO_GAO).toString()) && !"".equalsIgnoreCase(recent.getExtension().get(Extras.CAO_GAO).toString()) + && !"null".equalsIgnoreCase(recent.getExtension().get(Extras.CAO_GAO).toString())) + { + messageEditText.setText(recent.getExtension().get(Extras.CAO_GAO).toString()); + } + } + + messageEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE); + messageEditText.setOnTouchListener(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + switchToTextLayout(true); + } + return false; + } + }); + + messageEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { + + @Override + public void onFocusChange(View v, boolean hasFocus) { +// messageEditText.setHint(""); + checkSendButtonEnable(messageEditText); + } + }); + + messageEditText.addTextChangedListener(new TextWatcher() { + private int start; + private int count; + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + this.start = start; + this.count = count; + if (aitTextWatcher != null) { + aitTextWatcher.onTextChanged(s, start, before, count); + } + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + if (aitTextWatcher != null) { + aitTextWatcher.beforeTextChanged(s, start, count, after); + } + } + + @Override + public void afterTextChanged(Editable s) { + checkSendButtonEnable(messageEditText); + MoonUtil.replaceEmoticons(container.activity, s, start, count); + + int editEnd = messageEditText.getSelectionEnd(); + messageEditText.removeTextChangedListener(this); + while (StringUtil.counterChars(s.toString()) > NimUIKitImpl.getOptions().maxInputTextLength && editEnd > 0) { + s.delete(editEnd - 1, editEnd); + editEnd--; + } + messageEditText.setSelection(editEnd); + messageEditText.addTextChangedListener(this); + + if (aitTextWatcher != null) { + aitTextWatcher.afterTextChanged(s); + } + + sendTypingCommand(); + } + }); + } + + + /** + * 发送“正在输入”通知 + */ + private void sendTypingCommand() { + + if (container.account.equals(NimUIKit.getAccount())) { + return; + } + + if (container.sessionType == SessionTypeEnum.Team || container.sessionType == SessionTypeEnum.ChatRoom) { + return; + } + + if (System.currentTimeMillis() - typingTime > 5000L) { + typingTime = System.currentTimeMillis(); + CustomNotification command = new CustomNotification(); + command.setSessionId(container.account); + command.setSessionType(container.sessionType); + CustomNotificationConfig config = new CustomNotificationConfig(); + config.enablePush = false; + config.enableUnreadCount = false; + command.setConfig(config); + + JSONObject json = new JSONObject(); + json.put("id", "1"); + command.setContent(json.toString()); + + NIMClient.getService(MsgService.class).sendCustomNotification(command); + } + } + + /** + * ************************* 键盘布局切换 ******************************* + */ + + private View.OnClickListener clickListener = new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (v == switchToTextButtonInInputBar) { + switchToTextLayout(true);// 显示文本发送的布局 + } else if (v == sendMessageButtonInInputBar) { + onTextMessageSendButtonPressed(); + } else if (v == switchToAudioButtonInInputBar) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(container.activity, Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问录音 + switchToAudioLayout(); + } else { + EasyWindow.with(container.activity).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(cn.shangyu.gdxzExpert.R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(container.activity, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + switchToAudioLayout(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 + + } + + }, new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } + + } else if (v == moreFuntionButtonInInputBar) { + toggleActionPanelLayout(); + } else if (v == emojiButtonInInputBar) { + toggleEmojiLayout(); + } else if (v == cancelReplyImg) { + cancelReply(); + } + } + }; + + // 点击edittext,切换键盘和更多布局 + private void switchToTextLayout(boolean needShowInput) { + hideEmojiLayout(); + hideActionPanelLayout(); + + audioRecordBtn.setVisibility(View.GONE); + messageEditText.setVisibility(View.VISIBLE); + switchToTextButtonInInputBar.setVisibility(View.GONE); + switchToAudioButtonInInputBar.setVisibility(View.VISIBLE); + + messageInputBar.setVisibility(View.VISIBLE); + + if (needShowInput) { + uiHandler.postDelayed(showTextRunnable, SHOW_LAYOUT_DELAY); + } else { + hideInputMethod(); + } + } + + // 发送文本消息 + private void onTextMessageSendButtonPressed() { + String text = messageEditText.getText().toString(); + IMMessage textMessage = createTextMessage(text); + textMessage.setRemoteExtension(MessageFragment.ext); + if (container.proxy.sendMessage(textMessage)) { + restoreText(true); + } + + } + + protected IMMessage createTextMessage(String text) { + return MessageBuilder.createTextMessage(container.account, container.sessionType, text); + } + + // 切换成音频,收起键盘,按钮切换成键盘 + private void switchToAudioLayout() { + messageEditText.setVisibility(View.GONE); + audioRecordBtn.setVisibility(View.VISIBLE); + hideInputMethod(); + hideEmojiLayout(); + hideActionPanelLayout(); + + switchToAudioButtonInInputBar.setVisibility(View.GONE); + switchToTextButtonInInputBar.setVisibility(View.VISIBLE); + } + + // 点击“+”号按钮,切换更多布局和键盘 + private void toggleActionPanelLayout() { + + audioRecordBtn.setVisibility(View.GONE); + messageEditText.setVisibility(View.VISIBLE); + switchToTextButtonInInputBar.setVisibility(View.GONE); + switchToAudioButtonInInputBar.setVisibility(View.VISIBLE); + + messageInputBar.setVisibility(View.VISIBLE); + + if (actionPanelBottomLayout == null || actionPanelBottomLayout.getVisibility() == View.GONE) { + showActionPanelLayout(); + } else { + hideActionPanelLayout(); + } + } + + // 点击表情,切换到表情布局 + private void toggleEmojiLayout() { + if (emoticonPickerView == null || emoticonPickerView.getVisibility() == View.GONE) { + showEmojiLayout(); + } else { + hideEmojiLayout(); + } + } + + private void cancelReply() { + resetReplyMessage(); + } + + // 隐藏表情布局 + private void hideEmojiLayout() { + uiHandler.removeCallbacks(showEmojiRunnable); + if (emoticonPickerView != null) { + emoticonPickerView.setVisibility(View.GONE); + } + } + + // 隐藏更多布局 + private void hideActionPanelLayout() { + uiHandler.removeCallbacks(showMoreFuncRunnable); + if (actionPanelBottomLayout != null) { + actionPanelBottomLayout.setVisibility(View.GONE); + } + } + + // 隐藏键盘布局 + private void hideInputMethod() { + isKeyboardShowed = false; + uiHandler.removeCallbacks(showTextRunnable); + InputMethodManager imm = (InputMethodManager) container.activity.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(messageEditText.getWindowToken(), 0); + messageEditText.clearFocus(); + } + + // 隐藏语音布局 + private void hideAudioLayout() { + audioRecordBtn.setVisibility(View.GONE); + messageEditText.setVisibility(View.VISIBLE); + switchToTextButtonInInputBar.setVisibility(View.VISIBLE); + switchToAudioButtonInInputBar.setVisibility(View.GONE); + } + + // 显示表情布局 + private void showEmojiLayout() { + hideInputMethod(); + hideActionPanelLayout(); +// hideAudioLayout(); + audioRecordBtn.setVisibility(View.GONE); + messageEditText.setVisibility(View.VISIBLE); + switchToTextButtonInInputBar.setVisibility(View.GONE); + switchToAudioButtonInInputBar.setVisibility(View.VISIBLE); + + messageInputBar.setVisibility(View.VISIBLE); + messageEditText.requestFocus(); + uiHandler.postDelayed(showEmojiRunnable, 200); + emoticonPickerView.setVisibility(View.VISIBLE); + emoticonPickerView.show(this); + container.proxy.onInputPanelExpand(); + } + + // 初始化更多布局 + private void addActionPanelLayout() { + if (actionPanelBottomLayout == null) { + View.inflate(container.activity, R.layout.nim_message_activity_actions_layout, messageActivityBottomLayout); + actionPanelBottomLayout = view.findViewById(R.id.actionsLayout); + actionPanelBottomLayoutHasSetup = false; + } + initActionPanelLayout(); + } + + // 显示键盘布局 + private void showInputMethod(EditText editTextMessage) { + editTextMessage.requestFocus(); + //如果已经显示,则继续操作时不需要把光标定位到最后 + if (!isKeyboardShowed) { + editTextMessage.setSelection(editTextMessage.getText().length()); + isKeyboardShowed = true; + } + + InputMethodManager imm = (InputMethodManager) container.activity.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(editTextMessage, 0); + + container.proxy.onInputPanelExpand(); + } + + // 显示更多布局 + private void showActionPanelLayout() { + addActionPanelLayout(); + hideEmojiLayout(); + hideInputMethod(); + + uiHandler.postDelayed(showMoreFuncRunnable, SHOW_LAYOUT_DELAY); + container.proxy.onInputPanelExpand(); + } + + // 显示回复消息信息 + private void refreshReplyMsgLayout() { + if (replyMessage == null) { + replyLayout.setVisibility(View.GONE); + return; + } + + uiHandler.postDelayed(showTextRunnable, SHOW_LAYOUT_DELAY); + String fromDisplayName = UserInfoHelper.getUserDisplayNameInSession(replyMessage.getFromAccount(), replyMessage.getSessionType(), replyMessage.getSessionId()); + String content = customization.getMessageDigest(replyMessage); + String text = String.format(container.activity.getString(R.string.reply_with_message), fromDisplayName, content); + replyInfoTv.setText(text); + replyLayout.setVisibility(View.VISIBLE); + } + + // 初始化具体more layout中的项目 + private void initActionPanelLayout() { + if (actionPanelBottomLayoutHasSetup) { + return; + } + + ActionsPanel.init(view, actions); + actionPanelBottomLayoutHasSetup = true; + } + + private Runnable showEmojiRunnable = new Runnable() { + @Override + public void run() { + emoticonPickerView.setVisibility(View.VISIBLE); + } + }; + + private Runnable showMoreFuncRunnable = new Runnable() { + @Override + public void run() { + actionPanelBottomLayout.setVisibility(View.VISIBLE); + } + }; + + private Runnable showTextRunnable = new Runnable() { + @Override + public void run() { + showInputMethod(messageEditText); + } + }; + + private void restoreText(boolean clearText) { + if (clearText) { + messageEditText.setText(""); + } + + checkSendButtonEnable(messageEditText); + } + + /** + * 显示发送或更多 + * + * @param editText + */ + private void checkSendButtonEnable(EditText editText) { + if (isRobotSession) { + return; + } + String textMessage = editText.getText().toString(); + if (!TextUtils.isEmpty(StringUtil.removeBlanks(textMessage)) && editText.hasFocus()) { + moreFuntionButtonInInputBar.setVisibility(View.GONE); + sendMessageButtonInInputBar.setVisibility(View.VISIBLE); + } else { + sendMessageButtonInInputBar.setVisibility(View.GONE); + moreFuntionButtonInInputBar.setVisibility(View.VISIBLE); + } + } + + /** + * *************** IEmojiSelectedListener *************** + */ + @Override + public void onEmojiSelected(String key) { + Editable mEditable = messageEditText.getText(); + if (key.equals("/DEL")) { + messageEditText.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); + } else { + int start = messageEditText.getSelectionStart(); + int end = messageEditText.getSelectionEnd(); + start = (start < 0 ? 0 : start); + end = (start < 0 ? 0 : end); + mEditable.replace(start, end, key); + } + } + + private Runnable hideAllInputLayoutRunnable; + + @Override + public void onStickerSelected(String category, String item) { + Log.i("InputPanel", "onStickerSelected, category =" + category + ", sticker =" + item); + + if (customization != null) { + MsgAttachment attachment = customization.createStickerAttachment(category, item); + IMMessage stickerMessage = MessageBuilder.createCustomMessage(container.account, container.sessionType, "贴图消息", attachment); + container.proxy.sendMessage(stickerMessage); + } + } + + @Override + public void onTextAdd(String content, int start, int length) { + if (messageEditText.getVisibility() != View.VISIBLE || + (emoticonPickerView != null && emoticonPickerView.getVisibility() == View.VISIBLE)) { + switchToTextLayout(true); + } else { + uiHandler.postDelayed(showTextRunnable, SHOW_LAYOUT_DELAY); + } + messageEditText.getEditableText().insert(start, content); + } + + @Override + public void onTextDelete(int start, int length) { + if (messageEditText.getVisibility() != View.VISIBLE) { + switchToTextLayout(true); + } else { + uiHandler.postDelayed(showTextRunnable, SHOW_LAYOUT_DELAY); + } + int end = start + length - 1; + messageEditText.getEditableText().replace(start, end, ""); + } + + public int getEditSelectionStart() { + return messageEditText.getSelectionStart(); + } + + + /** + * 隐藏所有输入布局 + */ + private void hideAllInputLayout(boolean immediately) { + if (hideAllInputLayoutRunnable == null) { + hideAllInputLayoutRunnable = new Runnable() { + + @Override + public void run() { + hideInputMethod(); + hideActionPanelLayout(); + hideEmojiLayout(); + } + }; + } + long delay = immediately ? 0 : ViewConfiguration.getDoubleTapTimeout(); + uiHandler.postDelayed(hideAllInputLayoutRunnable, delay); + } + + /** + * ****************************** 语音 *********************************** + */ + private void initAudioRecordButton() { + audioRecordBtn.setOnTouchListener(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + if (event.getAction() == MotionEvent.ACTION_DOWN) { + touched = true; + initAudioRecord(); + onStartAudioRecord(); + } else if (event.getAction() == MotionEvent.ACTION_CANCEL + || event.getAction() == MotionEvent.ACTION_UP) { + touched = false; + onEndAudioRecord(isCancelled(v, event)); + } else if (event.getAction() == MotionEvent.ACTION_MOVE) { + touched = true; + cancelAudioRecord(isCancelled(v, event)); + } + + return false; + } + }); + } + + // 上滑取消录音判断 + private static boolean isCancelled(View view, MotionEvent event) { + int[] location = new int[2]; + view.getLocationOnScreen(location); + + if (event.getRawX() < location[0] || event.getRawX() > location[0] + view.getWidth() + || event.getRawY() < location[1] - 40) { + return true; + } + + return false; + } + + /** + * 初始化AudioRecord + */ + private void initAudioRecord() { + if (audioMessageHelper == null) { + UIKitOptions options = NimUIKitImpl.getOptions(); + audioMessageHelper = new AudioRecorder(container.activity, options.audioRecordType, options.audioRecordMaxTime, this); + } + + + } + + + /** + * 开始语音录制 + */ + private void onStartAudioRecord() { + container.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, + WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + audioMessageHelper.startRecord(); + cancelled = false; + } + + /** + * 结束语音录制 + * + * @param cancel + */ + private void onEndAudioRecord(boolean cancel) { + started = false; + container.activity.getWindow().setFlags(0, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + + audioMessageHelper.completeRecord(cancel); + audioRecordBtn.setText(R.string.record_audio); + audioRecordBtn.setBackgroundResource(R.drawable.nim_message_input_edittext_box); + stopAudioRecordAnim(); + } + + /** + * 取消语音录制 + * + * @param cancel + */ + private void cancelAudioRecord(boolean cancel) { + // reject + if (!started) { + return; + } + // no change + if (cancelled == cancel) { + return; + } + + cancelled = cancel; + updateTimerTip(cancel); + } + + /** + * 正在进行语音录制和取消语音录制,界面展示 + * + * @param cancel + */ + private void updateTimerTip(boolean cancel) { + if (cancel) { + timerTip.setText(R.string.recording_cancel_tip); + timerTipContainer.setBackgroundResource(R.drawable.nim_cancel_record_red_bg); + } else { + timerTip.setText(R.string.recording_cancel); + timerTipContainer.setBackgroundResource(0); + } + } + + /** + * 开始语音录制动画 + */ + private void playAudioRecordAnim() { + audioAnimLayout.setVisibility(View.VISIBLE); + time.setBase(SystemClock.elapsedRealtime()); + time.start(); + } + + /** + * 结束语音录制动画 + */ + private void stopAudioRecordAnim() { + audioAnimLayout.setVisibility(View.GONE); + time.stop(); + time.setBase(SystemClock.elapsedRealtime()); + } + + // 录音状态回调 + @Override + public void onRecordReady() { + + } + + @Override + public void onRecordStart(File audioFile, RecordType recordType) { + started = true; + if (!touched) { + return; + } + + audioRecordBtn.setText(R.string.record_audio_end); + audioRecordBtn.setBackgroundResource(R.drawable.nim_message_input_edittext_box); + + updateTimerTip(false); // 初始化语音动画状态 + playAudioRecordAnim(); + } + + @Override + public void onRecordSuccess(File audioFile, long audioLength, RecordType recordType) { + IMMessage audioMessage = MessageBuilder.createAudioMessage(container.account, container.sessionType, audioFile, audioLength); + container.proxy.sendMessage(audioMessage); + } + + @Override + public void onRecordFail() { + if (started) { + ToastHelper.showToast(container.activity, R.string.recording_error); + } + } + + @Override + public void onRecordCancel() { + + } + + @Override + public void onRecordReachedMaxTime(final int maxTime) { + stopAudioRecordAnim(); +// EasyAlertDialogHelper.createOkCancelDiolag(container.activity, "", container.activity.getString(R.string.recording_max_time), false, new EasyAlertDialogHelper.OnDialogActionListener() { +// @Override +// public void doCancelAction() { +// } +// +// @Override +// public void doOkAction() { + audioMessageHelper.handleEndRecord(true, maxTime); +// } +// }).show(); + } + + public boolean isRecording() { + return audioMessageHelper != null && audioMessageHelper.isRecording(); + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == 69) { + if (data!=null&&!StringUtil.isEmpty(data.getStringExtra("message"))) { + String mess = data.getStringExtra("message"); + messageEditText.setText(mess);// 聊天输入框 + moreFuntionButtonInInputBar.setVisibility(View.GONE); + sendMessageButtonInInputBar.setVisibility(View.VISIBLE); + } + } + + if (resultCode != Activity.RESULT_OK) { + return; + } + int index = (requestCode << 16) >> 24; + if (index != 0) { + index--; + if (index < 0 | index >= actions.size()) { + LogUtil.d(TAG, "request code out of actions' range"); + return; + } + BaseAction action = actions.get(index); + if (action != null) { + action.onActivityResult(requestCode & 0xff, resultCode, data); + } + } + } + + public void switchRobotMode(boolean isRobot) { + isRobotSession = isRobot; + if (isRobot) { + textAudioSwitchLayout.setVisibility(View.GONE); + emojiButtonInInputBar.setVisibility(View.GONE); + sendMessageButtonInInputBar.setVisibility(View.VISIBLE); + moreFuntionButtonInInputBar.setVisibility(View.GONE); + } else { + textAudioSwitchLayout.setVisibility(View.VISIBLE); + emojiButtonInInputBar.setVisibility(View.VISIBLE); + sendMessageButtonInInputBar.setVisibility(View.GONE); + moreFuntionButtonInInputBar.setVisibility(View.VISIBLE); + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/SessionHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/SessionHelper.java new file mode 100644 index 0000000..7a8c729 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/SessionHelper.java @@ -0,0 +1,786 @@ +package cn.shangyu.gdxzExpert.netease.session; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.text.TextUtils; +import android.view.View; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.api.model.CreateMessageCallback; +import com.netease.nim.uikit.api.model.recent.RecentCustomization; +import com.netease.nim.uikit.api.model.session.SessionCustomization; +import com.netease.nim.uikit.api.wrapper.NimMessageRevokeObserver; +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nim.uikit.business.session.helper.MessageListPanelHelper; +import com.netease.nim.uikit.business.session.helper.TeamNotificationHelper; +import com.netease.nim.uikit.business.session.module.IMultiRetweetMsgCreator; +import com.netease.nim.uikit.business.session.module.MsgForwardFilter; +import com.netease.nim.uikit.business.session.module.MsgRevokeFilter; +import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderUnknown; +import com.netease.nim.uikit.business.team.model.TeamExtras; +import com.netease.nim.uikit.business.team.model.TeamRequestCode; +import com.netease.nim.uikit.common.ui.dialog.CustomAlertDialog; +import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper; +import com.netease.nim.uikit.common.ui.popupmenu.NIMPopupMenu; +import com.netease.nim.uikit.common.ui.popupmenu.PopupMenuItem; +import com.netease.nim.uikit.impl.cache.TeamDataCache; +import com.netease.nim.uikit.impl.customization.DefaultRecentCustomization; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.MsgServiceObserve; +import com.netease.nimlib.sdk.msg.attachment.ImageAttachment; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.attachment.NotificationAttachment; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.LocalAntiSpamResult; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.robot.model.RobotAttachment; +import com.netease.nimlib.sdk.team.constant.TeamTypeEnum; +import com.netease.nimlib.sdk.team.model.Team; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.activity.MessageInfoActivity; +import cn.shangyu.gdxzExpert.netease.ptop.P2PMessageActivity; +import cn.shangyu.gdxzExpert.netease.session.action.EasyAction; +import cn.shangyu.gdxzExpert.netease.session.action.HospitalAction; +import cn.shangyu.gdxzExpert.netease.session.action.ShoppingAction; +import cn.shangyu.gdxzExpert.netease.session.action.TeachAction; +import cn.shangyu.gdxzExpert.netease.session.action.VisitAction; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachParser; +import cn.shangyu.gdxzExpert.netease.session.extension.RedPacketAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.RedPacketOpenedAttachment; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.netease.session.viewholder.MsgViewHolderPicture; +import cn.shangyu.gdxzExpert.netease.session.viewholder.MsgViewHolderTeach; +import cn.shangyu.gdxzExpert.netease.session.viewholder.MsgViewHolderTip; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +/** + * UIKit自定义消息界面用法展示类 + */ +public class SessionHelper { + + private static final int ACTION_HISTORY_QUERY_PERSIST_CLEAR = 0; + + private static final int ACTION_HISTORY_QUERY_NOT_PERSIST_CLEAR = 1; + + private static final int ACTION_SEARCH_MESSAGE = 2; + + private static final int ACTION_CLEAR_MESSAGE_RECORD = 3; + + private static final int ACTION_CLEAR_MESSAGE_NOT_RECORD = 4; + + private static final int ACTION_CLEAR_MESSAGE = 5; + + private static SessionCustomization p2pCustomization; + + private static SessionCustomization normalTeamCustomization; + + private static SessionCustomization advancedTeamCustomization; + + private static SessionCustomization myP2pCustomization; + + private static SessionCustomization robotCustomization; + + private static RecentCustomization recentCustomization; + + private static NIMPopupMenu popupMenu; + + private static List menuItemList; + + public static final boolean USE_LOCAL_ANTISPAM = true; + + + public static void init() { + // 注册自定义消息附件解析器 + NIMClient.getService(MsgService.class).registerCustomAttachmentParser(new CustomAttachParser()); + // 注册各种扩展消息类型的显示ViewHolder + registerViewHolders(); + // 设置会话中点击事件响应处理 +// setSessionListener(); + // 注册消息转发过滤器 + registerMsgForwardFilter(); + // 注册消息撤回过滤器 + registerMsgRevokeFilter(); + // 注册消息撤回监听器 + registerMsgRevokeObserver(); + NimUIKit.setCommonP2PSessionCustomization(getP2pCustomization()); + NimUIKit.setCommonTeamSessionCustomization(getTeamCustomization(null)); + NimUIKit.setRecentCustomization(getRecentCustomization()); + } + + public static void startP2PSession(Context context, String account,String gdxz_sessionType,String state) { + startP2PSession(context, account, null,gdxz_sessionType,state); + } + public static void startP2PSessionname(Context context, String account,String gdxz_sessionType,String state,String name) { + if (!StringUtil.isEmpty(DemoCache.getAccount())&&!DemoCache.getAccount().equals(account)) { + if (NimUIKit.getRobotInfoProvider().getRobotByAccount(account) != null) { + NimUIKit.startChatting(context, account, SessionTypeEnum.P2P, getRobotCustomization(), null); + } else { + + P2PMessageActivity.start(context, account, null, null,gdxz_sessionType,state,name); + + } + } else { + NimUIKit.startChatting(context, account, SessionTypeEnum.P2P, getMyP2pCustomization(), null); + } + } + public static void startP2PSession(Context context, String account, IMMessage anchor,String gdxz_sessionType,String state) { + if (!StringUtil.isEmpty(DemoCache.getAccount())&&!DemoCache.getAccount().equals(account)) { + if (NimUIKit.getRobotInfoProvider().getRobotByAccount(account) != null) { + NimUIKit.startChatting(context, account, SessionTypeEnum.P2P, getRobotCustomization(), anchor); + } else { + + P2PMessageActivity.start(context, account, null, anchor,gdxz_sessionType,state); + +// NimUIKit.startP2PSession(context, account, anchor); + } + } else { + NimUIKit.startChatting(context, account, SessionTypeEnum.P2P, getMyP2pCustomization(), anchor); + } + } + + public static void startTeamSession(Context context, String tid) { + startTeamSession(context, tid, null); + } + + public static void startTeamSession(Context context, String tid, IMMessage anchor) { + NimUIKit.startTeamSession(context, tid, getTeamCustomization(tid), anchor); + } + + // 打开群聊界面(用于 UIKIT 中部分界面跳转回到指定的页面) + public static void startTeamSession(Context context, String tid, Class backToClass, + IMMessage anchor) { + NimUIKit.startChatting(context, tid, SessionTypeEnum.Team, getTeamCustomization(tid), backToClass, anchor); + } + + // 定制化单聊界面。如果使用默认界面,返回null即可 + private static SessionCustomization getP2pCustomization() { + if (p2pCustomization == null) { + p2pCustomization = new SessionCustomization() { + + // 由于需要Activity Result, 所以重载该函数。 + @Override + public void onActivityResult(final Activity activity, int requestCode, int resultCode, Intent data) { + super.onActivityResult(activity, requestCode, resultCode, data); + + } + + @Override + public boolean isAllowSendMessage(IMMessage message) { + return checkLocalAntiSpam(message); + } + + @Override + public MsgAttachment createStickerAttachment(String category, String item) { +// return new StickerAttachment(category, item); + return null; + } + + @Override + public String getMessageDigest(IMMessage message) { + return getMsgDigest(message); + } + }; + // 背景 + // p2pCustomization.backgroundColor = Color.BLUE; + // p2pCustomization.backgroundUri = "file:///android_asset/xx/bk.jpg"; + // p2pCustomization.backgroundUri = "file:///sdcard/Pictures/bk.png"; + // p2pCustomization.backgroundUri = "android.resource://com.netease.nim.demo/drawable/bk" + // 定制加号点开后可以包含的操作, 默认已经有图片,视频等消息了 + ArrayList actions = new ArrayList<>(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { +// actions.add(new AVChatAction(AVChatType.AUDIO)); +// actions.add(new AVChatAction(AVChatType.VIDEO)); + } +// actions.add(new RTSAction()); +// actions.add(new SnapChatAction()); +// actions.add(new GuessAction()); +// actions.add(new FileAction()); +// actions.add(new TipAction()); +// if (NIMRedPacketClient.isEnable()) { +// actions.add(new RedPacketAction()); +// } + actions.add(new EasyAction()); + actions.add(new TeachAction()); + actions.add(new VisitAction()); + actions.add(new ShoppingAction()); + if(cn.shangyu.gdxzExpert.utils.CommonUtil.showHospital()) + { + actions.add(new HospitalAction()); + } + p2pCustomization.actions = actions; + p2pCustomization.withSticker = true; + // 定制ActionBar右边的按钮,可以加多个 + ArrayList buttons = new ArrayList<>(); + SessionCustomization.OptionsButton cloudMsgButton = new SessionCustomization.OptionsButton() { + + @Override + public void onClick(Context context, View view, String sessionId) { + initPopuptWindow(context, view, sessionId, SessionTypeEnum.P2P); + } + }; + cloudMsgButton.iconId = R.drawable.nim_ic_messge_history; + SessionCustomization.OptionsButton infoButton = new SessionCustomization.OptionsButton() { + + @Override + public void onClick(Context context, View view, String sessionId) { + MessageInfoActivity.startActivity(context, sessionId); //打开聊天信息 + } + }; + infoButton.iconId = R.drawable.nim_ic_message_actionbar_p2p_add; + buttons.add(cloudMsgButton); + buttons.add(infoButton); + p2pCustomization.buttons = buttons; + } + return p2pCustomization; + } + + private static SessionCustomization getMyP2pCustomization() { + if (myP2pCustomization == null) { + myP2pCustomization = new SessionCustomization() { + + // 由于需要Activity Result, 所以重载该函数。 + @Override + public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) { + if (requestCode == TeamRequestCode.REQUEST_CODE && resultCode == Activity.RESULT_OK) { + String result = data.getStringExtra(TeamExtras.RESULT_EXTRA_REASON); + if (result == null) { + return; + } + if (result.equals(TeamExtras.RESULT_EXTRA_REASON_CREATE)) { + String tid = data.getStringExtra(TeamExtras.RESULT_EXTRA_DATA); + if (TextUtils.isEmpty(tid)) { + return; + } + startTeamSession(activity, tid); + activity.finish(); + } + } + } + + @Override + public boolean isAllowSendMessage(IMMessage message) { + return checkLocalAntiSpam(message); + } + + @Override + public MsgAttachment createStickerAttachment(String category, String item) { +// return new StickerAttachment(category, item); + return null; + } + + @Override + public String getMessageDigest(IMMessage message) { + return getMsgDigest(message); + } + }; + // 定制加号点开后可以包含的操作, 默认已经有图片,视频等消息了 + ArrayList actions = new ArrayList<>(); +// actions.add(new SnapChatAction()); +// actions.add(new GuessAction()); +// actions.add(new FileAction()); + myP2pCustomization.actions = actions; + myP2pCustomization.withSticker = true; + // 定制ActionBar右边的按钮,可以加多个 + ArrayList buttons = new ArrayList<>(); + SessionCustomization.OptionsButton cloudMsgButton = new SessionCustomization.OptionsButton() { + + @Override + public void onClick(Context context, View view, String sessionId) { + initPopuptWindow(context, view, sessionId, SessionTypeEnum.P2P); + } + }; + cloudMsgButton.iconId = R.drawable.nim_ic_messge_history; + buttons.add(cloudMsgButton); + myP2pCustomization.buttons = buttons; + } + return myP2pCustomization; + } + + private static boolean checkLocalAntiSpam(IMMessage message) { + if (!USE_LOCAL_ANTISPAM) { + return true; + } + LocalAntiSpamResult result = NIMClient.getService(MsgService.class).checkLocalAntiSpam(message.getContent(), + "**"); + int operator = result == null ? 0 : result.getOperator(); + switch (operator) { + case 1: // 替换,允许发送 + message.setContent(result.getContent()); + return true; + case 2: // 拦截,不允许发送 + return false; + case 3: // 允许发送,交给服务器 + message.setClientAntiSpam(true); + return true; + case 0: + default: + break; + } + return true; + } + + private static SessionCustomization getRobotCustomization() { + if (robotCustomization == null) { + robotCustomization = new SessionCustomization() { + + // 由于需要Activity Result, 所以重载该函数。 + @Override + public void onActivityResult(final Activity activity, int requestCode, int resultCode, Intent data) { + super.onActivityResult(activity, requestCode, resultCode, data); + + } + + @Override + public MsgAttachment createStickerAttachment(String category, String item) { + return null; + } + + @Override + public String getMessageDigest(IMMessage message) { + return getMsgDigest(message); + } + }; + // 定制ActionBar右边的按钮,可以加多个 + ArrayList buttons = new ArrayList<>(); + SessionCustomization.OptionsButton cloudMsgButton = new SessionCustomization.OptionsButton() { + + @Override + public void onClick(Context context, View view, String sessionId) { + initPopuptWindow(context, view, sessionId, SessionTypeEnum.P2P); + } + }; + cloudMsgButton.iconId = R.drawable.nim_ic_messge_history; + SessionCustomization.OptionsButton infoButton = new SessionCustomization.OptionsButton() { + + @Override + public void onClick(Context context, View view, String sessionId) { +// RobotProfileActivity.start(context, sessionId); //打开聊天信息 + } + }; + infoButton.iconId = R.drawable.nim_ic_actionbar_robot_info; + buttons.add(cloudMsgButton); + buttons.add(infoButton); + robotCustomization.buttons = buttons; + } + return robotCustomization; + } + + /** + * 获取消息的简述 + * + * @param msg 消息 + * @return 简述 + */ + private static String getMsgDigest(IMMessage msg) { + switch (msg.getMsgType()) { + case avchat: + MsgAttachment attachment = msg.getAttachment(); +// AVChatAttachment avchat = (AVChatAttachment) attachment; +// if (avchat.getState() == AVChatRecordState.Missed && !msg.getFromAccount().equals( +// NimUIKit.getAccount())) { +// // 未接通话请求 +// StringBuilder sb = new StringBuilder("[未接"); +// if (avchat.getType() == AVChatType.VIDEO) { +// sb.append("视频电话]"); +// } else { +// sb.append("音频电话]"); +// } +// return sb.toString(); +// } else if (avchat.getState() == AVChatRecordState.Success) { +// StringBuilder sb = new StringBuilder(); +// if (avchat.getType() == AVChatType.VIDEO) { +// sb.append("[视频电话]: "); +// } else { +// sb.append("[音频电话]: "); +// } +// sb.append(TimeUtil.secToTime(avchat.getDuration())); +// return sb.toString(); +// } else { +// if (avchat.getType() == AVChatType.VIDEO) { +// return ("[视频电话]"); +// } else { +// return ("[音频电话]"); +// } +// } + case text: + case tip: + return msg.getContent(); + case image: + return "[图片]"; + case video: + return "[视频]"; + case audio: + return "[语音消息]"; + case location: + return "[位置]"; + case file: + return "[文件]"; + case notification: + return TeamNotificationHelper.getTeamNotificationText(msg.getSessionId(), + msg.getFromAccount(), + (NotificationAttachment) msg.getAttachment()); + case robot: + return "[机器人消息]"; + default: + return "[一条新消息] "; + } + } + + private static RecentCustomization getRecentCustomization() { + if (recentCustomization == null) { + recentCustomization = new DefaultRecentCustomization() { + + @Override + public String getDefaultDigest(RecentContact recent) { + switch (recent.getMsgType()) { + case avchat: + MsgAttachment attachment = recent.getAttachment(); +// AVChatAttachment avchat = (AVChatAttachment) attachment; +// if (avchat.getState() == AVChatRecordState.Missed && !recent.getFromAccount().equals( +// NimUIKit.getAccount())) { +// // 未接通话请求 +// StringBuilder sb = new StringBuilder("[未接"); +// if (avchat.getType() == AVChatType.VIDEO) { +// sb.append("视频电话]"); +// } else { +// sb.append("音频电话]"); +// } +// return sb.toString(); +// } else if (avchat.getState() == AVChatRecordState.Success) { +// StringBuilder sb = new StringBuilder(); +// if (avchat.getType() == AVChatType.VIDEO) { +// sb.append("[视频电话]: "); +// } else { +// sb.append("[音频电话]: "); +// } +// sb.append(TimeUtil.secToTime(avchat.getDuration())); +// return sb.toString(); +// } else { +// if (avchat.getType() == AVChatType.VIDEO) { +// return ("[视频电话]"); +// } else { +// return ("[音频电话]"); +// } +// } + } + return super.getDefaultDigest(recent); + } + }; + } + return recentCustomization; + } + + private static SessionCustomization getTeamCustomization(String tid) { +// if (normalTeamCustomization == null) { +// // 定制加号点开后可以包含的操作, 默认已经有图片,视频等消息了 +// final TeamAVChatAction avChatAction = new TeamAVChatAction(AVChatType.VIDEO); +// TeamAVChatProfile.sharedInstance().registerObserver(true); +// ArrayList actions = new ArrayList<>(); +// actions.add(avChatAction); +// actions.add(new GuessAction()); +// actions.add(new FileAction()); +// if (NIMRedPacketClient.isEnable()) { +// actions.add(new RedPacketAction()); +// } +// actions.add(new TipAction()); +// SessionTeamCustomization.SessionTeamCustomListener listener = new SessionTeamCustomization.SessionTeamCustomListener() { +// +// @Override +// public void initPopupWindow(Context context, View view, String sessionId, +// SessionTypeEnum sessionTypeEnum) { +// initPopuptWindow(context, view, sessionId, sessionTypeEnum); +// } +// +// @Override +// public void onSelectedAccountsResult(ArrayList selectedAccounts) { +// avChatAction.onSelectedAccountsResult(selectedAccounts); +// } +// +// @Override +// public void onSelectedAccountFail() { +// avChatAction.onSelectedAccountFail(); +// } +// }; +// normalTeamCustomization = new SessionTeamCustomization(listener) { +// +// @Override +// public boolean isAllowSendMessage(IMMessage message) { +// return checkLocalAntiSpam(message); +// } +// +// @Override +// public String getMessageDigest(IMMessage message) { +// return getMsgDigest(message); +// } +// }; +// normalTeamCustomization.actions = actions; +// } +// if (advancedTeamCustomization == null) { +// // 定制加号点开后可以包含的操作, 默认已经有图片,视频等消息了 +// final TeamAVChatAction avChatAction = new TeamAVChatAction(AVChatType.VIDEO); +// TeamAVChatProfile.sharedInstance().registerObserver(true); +// ArrayList actions = new ArrayList<>(); +// actions.add(avChatAction); +// actions.add(new GuessAction()); +// actions.add(new FileAction()); +// actions.add(new AckMessageAction()); +// if (NIMRedPacketClient.isEnable()) { +// actions.add(new RedPacketAction()); +// } +// actions.add(new TipAction()); +// SessionTeamCustomization.SessionTeamCustomListener listener = new SessionTeamCustomization.SessionTeamCustomListener() { +// +// @Override +// public void initPopupWindow(Context context, View view, String sessionId, +// SessionTypeEnum sessionTypeEnum) { +// initPopuptWindow(context, view, sessionId, sessionTypeEnum); +// } +// +// +// @Override +// public void onSelectedAccountsResult(ArrayList selectedAccounts) { +// avChatAction.onSelectedAccountsResult(selectedAccounts); +// } +// +// @Override +// public void onSelectedAccountFail() { +// avChatAction.onSelectedAccountFail(); +// } +// }; +// advancedTeamCustomization = new SessionTeamCustomization(listener) { +// +// @Override +// public boolean isAllowSendMessage(IMMessage message) { +// return checkLocalAntiSpam(message); +// } +// +// @Override +// public String getMessageDigest(IMMessage message) { +// return getMsgDigest(message); +// } +// }; +// advancedTeamCustomization.actions = actions; +// } + if (TextUtils.isEmpty(tid)) { + return normalTeamCustomization; + } else { + Team team = TeamDataCache.getInstance().getTeamById(tid); + if (team != null && team.getType() == TeamTypeEnum.Advanced) { + return advancedTeamCustomization; + } + } + return normalTeamCustomization; + } + + private static void registerViewHolders() { +// NimUIKit.registerMsgItemViewHolder(FileAttachment.class, MsgViewHolderFile.class); +// NimUIKit.registerMsgItemViewHolder(AVChatAttachment.class, MsgViewHolderAVChat.class); +// NimUIKit.registerMsgItemViewHolder(GuessAttachment.class, MsgViewHolderGuess.class); +// NimUIKit.registerMsgItemViewHolder(CustomAttachment.class, MsgViewHolderDefCustom.class); +// NimUIKit.registerMsgItemViewHolder(StickerAttachment.class, MsgViewHolderSticker.class); +// NimUIKit.registerMsgItemViewHolder(SnapChatAttachment.class, MsgViewHolderSnapChat.class); +// NimUIKit.registerMsgItemViewHolder(RTSAttachment.class, MsgViewHolderRTS.class); +// NimUIKit.registerMsgItemViewHolder(MultiRetweetAttachment.class, MsgViewHolderMultiRetweet.class); + NimUIKit.registerTipMsgViewHolder(MsgViewHolderTip.class); + NimUIKit.registerMsgItemViewHolder(TeachAttachment.class,MsgViewHolderTeach.class); + NimUIKit.registerMsgItemViewHolder(ImageAttachment.class, MsgViewHolderPicture.class); + registerRedPacketViewHolder(); + registerMultiRetweetCreator(); + } + + private static void registerRedPacketViewHolder() { +// if (NIMRedPacketClient.isEnable()) { +// NimUIKit.registerMsgItemViewHolder(RedPacketAttachment.class, MsgViewHolderRedPacket.class); +// NimUIKit.registerMsgItemViewHolder(RedPacketOpenedAttachment.class, MsgViewHolderOpenRedPacket.class); +// } else { + NimUIKit.registerMsgItemViewHolder(RedPacketAttachment.class, MsgViewHolderUnknown.class); + NimUIKit.registerMsgItemViewHolder(RedPacketOpenedAttachment.class, MsgViewHolderUnknown.class); +// } + } + + private static void registerMultiRetweetCreator(){ + IMultiRetweetMsgCreator creator = new IMultiRetweetMsgCreator() { + @Override + public void create(List msgList, boolean shouldEncrypt, CreateMessageCallback callback) { +// MessageHelper.createMultiRetweet(msgList, shouldEncrypt, callback); + } + }; + NimUIKit.registerMultiRetweetMsgCreator(creator); + } + + + + + + + /** + * 消息转发过滤器 + */ + private static void registerMsgForwardFilter() { + NimUIKit.setMsgForwardFilter(new MsgForwardFilter() { + + @Override + public boolean shouldIgnore(IMMessage message) { + if (message.getMsgType() == MsgTypeEnum.custom && message.getAttachment() != null && + ( +// message.getAttachment() instanceof SnapChatAttachment || +// message.getAttachment() instanceof RTSAttachment || + message.getAttachment() instanceof RedPacketAttachment)) { + // 白板消息和阅后即焚消息,红包消息 不允许转发 + return true; + } else if (message.getMsgType() == MsgTypeEnum.robot && message.getAttachment() != null && + ((RobotAttachment) message.getAttachment()).isRobotSend()) { + return true; // 如果是机器人发送的消息 不支持转发 + } + return false; + } + }); + } + + /** + * 消息撤回过滤器 + */ + private static void registerMsgRevokeFilter() { + NimUIKit.setMsgRevokeFilter(new MsgRevokeFilter() { + + @Override + public boolean shouldIgnore(IMMessage message) { +// if (message.getAttachment() != null && (message.getAttachment() instanceof AVChatAttachment || +// message.getAttachment() instanceof RTSAttachment || +// message.getAttachment() instanceof RedPacketAttachment)) { +// // 视频通话消息和白板消息,红包消息 不允许撤回 +// return true; +// } else if (DemoCache.getAccount().equals(message.getSessionId())) { +// // 发给我的电脑 不允许撤回 +// return true; +// } + return false; + } + }); + } + + private static void registerMsgRevokeObserver() { + NIMClient.getService(MsgServiceObserve.class).observeRevokeMessage(new NimMessageRevokeObserver(), true); + } + + + private static void initPopuptWindow(Context context, View view, String sessionId, + SessionTypeEnum sessionTypeEnum) { + if (popupMenu == null) { + menuItemList = new ArrayList<>(); + popupMenu = new NIMPopupMenu(context, menuItemList, listener); + } + menuItemList.clear(); + menuItemList.addAll(getMoreMenuItems(context, sessionId, sessionTypeEnum)); + popupMenu.notifyData(); + popupMenu.show(view); + } + + private static NIMPopupMenu.MenuItemClickListener listener = item -> { + final String sessionId = item.getSessionId(); + final SessionTypeEnum sessionType = item.getSessionTypeEnum(); + final Context context = item.getContext(); + switch (item.getTag()) { + case ACTION_HISTORY_QUERY_PERSIST_CLEAR: +// MessageHistoryActivity.start(context, sessionId, +// sessionType, true); // 漫游消息查询,被清除的消息也入库 + break; + case ACTION_HISTORY_QUERY_NOT_PERSIST_CLEAR: +// MessageHistoryActivity.start(context, sessionId, +// sessionType, false); // 漫游消息查询,被清除的消息不入库 + break; + case ACTION_SEARCH_MESSAGE: +// SearchMessageActivity.start(context, sessionId, sessionType); + break; + case ACTION_CLEAR_MESSAGE_RECORD: + EasyAlertDialogHelper.createOkCancelDiolag(context, null, "确定要清空吗?", true, + new EasyAlertDialogHelper.OnDialogActionListener() { + + @Override + public void doCancelAction() { + } + + @Override + public void doOkAction() { + NIMClient.getService(MsgService.class) + .clearChattingHistory( + sessionId, + sessionType, + false); + MessageListPanelHelper.getInstance() + .notifyClearMessages( + sessionId); + } + }).show(); + break; + case ACTION_CLEAR_MESSAGE_NOT_RECORD: + EasyAlertDialogHelper.createOkCancelDiolag(context, null, "确定要清空吗?", true, + new EasyAlertDialogHelper.OnDialogActionListener() { + + @Override + public void doCancelAction() { + } + + @Override + public void doOkAction() { + NIMClient.getService(MsgService.class) + .clearChattingHistory( + sessionId, + sessionType, + true); + MessageListPanelHelper.getInstance() + .notifyClearMessages( + sessionId); + } + }).show(); + break; + case ACTION_CLEAR_MESSAGE: + String title = context.getString(com.netease.nim.uikit.R.string.cloud_message_clear_tips); + CustomAlertDialog alertDialog = new CustomAlertDialog(context); + alertDialog.setTitle(title); + alertDialog.addItem("确定", () -> { + NIMClient.getService(MsgService.class).clearServerHistory(sessionId, + sessionType, true, ""); + MessageListPanelHelper.getInstance().notifyClearMessages(sessionId); + }); + String itemText = context.getString(com.netease.nim.uikit.R.string.sure_sync); + alertDialog.addItem(itemText, () -> { + NIMClient.getService(MsgService.class).clearServerHistory(sessionId, + sessionType, true, ""); + MessageListPanelHelper.getInstance().notifyClearMessages(sessionId); + }); + alertDialog.addItem("取消", () -> { + }); + alertDialog.show(); + break; + } + }; + + private static List getMoreMenuItems(Context context, String sessionId, + SessionTypeEnum sessionTypeEnum) { + List moreMenuItems = new ArrayList(); + moreMenuItems.add(new PopupMenuItem(context, ACTION_HISTORY_QUERY_PERSIST_CLEAR, sessionId, sessionTypeEnum, + DemoCache.getContext().getString(com.netease.nim.uikit.R.string.message_history_query_ingore))); + moreMenuItems.add(new PopupMenuItem(context, ACTION_HISTORY_QUERY_NOT_PERSIST_CLEAR, sessionId, sessionTypeEnum, + DemoCache.getContext().getString(com.netease.nim.uikit.R.string.message_history_query_remember))); + moreMenuItems.add(new PopupMenuItem(context, ACTION_SEARCH_MESSAGE, sessionId, sessionTypeEnum, + DemoCache.getContext().getString(com.netease.nim.uikit.R.string.message_search_title))); + moreMenuItems.add(new PopupMenuItem(context, ACTION_CLEAR_MESSAGE_RECORD, sessionId, sessionTypeEnum, + DemoCache.getContext().getString(com.netease.nim.uikit.R.string.message_clear_record))); + moreMenuItems.add(new PopupMenuItem(context, ACTION_CLEAR_MESSAGE_NOT_RECORD, sessionId, sessionTypeEnum, + DemoCache.getContext().getString(com.netease.nim.uikit.R.string.message_clear_not_record))); + moreMenuItems.add(new PopupMenuItem(context, ACTION_CLEAR_MESSAGE, sessionId, sessionTypeEnum, + DemoCache.getContext().getString(com.netease.nim.uikit.R.string.cloud_message_clear))); + return moreMenuItems; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/EasyAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/EasyAction.java new file mode 100644 index 0000000..6686ad4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/EasyAction.java @@ -0,0 +1,43 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + + +import android.content.Intent; + +import com.netease.nim.uikit.business.session.actions.BaseAction; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.QuckMessageActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by hzxuwen on 2015/6/11. + */ +public class EasyAction extends BaseAction { + + public EasyAction() { + super(R.drawable.ytx_chattingfooter_file_quick, R.string.app_panel_quickreply); + } + + @Override + public void onClick() { + Intent intent = new Intent(UIUtils.getContext(), + QuckMessageActivity.class); + + getActivity().startActivityForResult(intent,69); +// GuessAttachment attachment = new GuessAttachment(); +// IMMessage message; +// if (getContainer() != null && getContainer().sessionType == SessionTypeEnum.ChatRoom) { +// message = ChatRoomMessageBuilder.createChatRoomCustomMessage(getAccount(), attachment); +// } else { +// message = MessageBuilder.createCustomMessage(getAccount(), getSessionType(), attachment.getValue().getDesc(), attachment); +// } +// +// sendMessage(message); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/HospitalAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/HospitalAction.java new file mode 100644 index 0000000..30664b6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/HospitalAction.java @@ -0,0 +1,56 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; + +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachmentType; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; + +public class HospitalAction extends BaseAction { + /** + * 构造函数 + * + * @param iconResId 图标 res id + * @param titleId 图标标题的string res id + */ + public HospitalAction() { + super(R.drawable.ytx_chatting_hospital, R.string.app_panel_hospital); + } + + @Override + public void onClick() { +// IWXAPI api = WXAPIFactory.createWXAPI(getActivity(), Constant.WeId); +// WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); +// req.userName = "gh_9cd2fd72eb57"; // 填小程序原始id +// req.path = "/Pages/yishi/index/index"; //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 +// req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW;// 可选打开 开发版,体验版和正式版 +// api.sendReq(req); + String title = "肝胆相照互联网医院"; + String netphoto=SharePrefUtil.getString(getActivity(),"netphoto",""); + String multi_point_status=SharePrefUtil.getString(getActivity(),"multi_point_status",""); +// String url = Url.getNewWa+"setInfo?patient_uuid="+ SharePrefUtil.getString(UIUtils.getContext(), "sessionUUID", getAccount()) +"&expert_uuid="+ SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") ; + String content =""; + if("1".equals(multi_point_status)) + { + content = getActivity().getResources().getStringArray(R.array.chat_menu_hospital)[1]; + } + else + { + content = getActivity().getResources().getStringArray(R.array.chat_menu_hospital)[0]; + } + String doctor_id=SharePrefUtil.getString(getActivity(),"doctor_id",""); + +// Log.d("gdxzzz",url+" "); + TeachAttachment teachAttachment=new TeachAttachment(title,"",content,doctor_id, + netphoto, CustomAttachmentType.Hostipal,""); + IMMessage message= MessageBuilder.createCustomMessage(getAccount(), P2P, CustomAttachmentType.Hostipal, teachAttachment); + message.setRemoteExtension(MessageFragment.ext); + sendMessage(message); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ImageAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ImageAction.java new file mode 100644 index 0000000..4d33850 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ImageAction.java @@ -0,0 +1,183 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + + +import android.Manifest; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; +import android.view.Gravity; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.netease.nim.uikit.business.session.actions.BaseAction; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PhotoAlbumActivity; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.DemoUtils; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileUtils; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.ImgInfo; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import top.zibin.luban.Luban; + +/** + * Created by hzxuwen on 2015/6/12. + */ +public class ImageAction extends BaseAction { + + public ImageAction() { + super(R.drawable.ytx_chattingfooter_image_selector, com.netease.nim.uikit.R.string.input_panel_photo); + } + + + + @Override + public void onClick() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + Intent intent=new Intent(getActivity(), PhotoAlbumActivity.class); + intent.putExtra("photonum", "-1"); + getActivity().startActivityForResult(intent, 0x4); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + Intent intent=new Intent(getActivity(), PhotoAlbumActivity.class); + intent.putExtra("photonum", "-1"); + getActivity().startActivityForResult(intent, 0x4); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + Intent intent=new Intent(getActivity(), PhotoAlbumActivity.class); + intent.putExtra("photonum", "-1"); + getActivity().startActivityForResult(intent, 0x4); + } + + } + /** + * + * @param filePath + * @return + */ + public static ImgInfo createImgInfo(String filePath, Context context) { + + if(!FileUtils.checkFile(filePath) || FileAccessor.getImagePathName() == null) { + return null; + } + +// int bitmapDegrees = DemoUtils.getBitmapDegrees(filePath); + String fileNameMD5 = DemoUtils.md5(System.currentTimeMillis() + filePath); + String bigFileFullName = fileNameMD5 + ".jpg"; + LogUtil.i("bigFileFullName = "+bigFileFullName); + + BitmapFactory.Options bitmapOptions = DemoUtils.getBitmapOptions(filePath); + String authorityDir = FileAccessor.getImagePathName().getAbsolutePath(); + if((FileUtils.decodeFileLength(filePath) > 204800) + || (bitmapOptions != null && (((bitmapOptions.outHeight > 1080) || (bitmapOptions.outWidth > 1080))))) { + File file = new File(authorityDir+File.separator+fileNameMD5); + if(!file.exists()) { + file.mkdirs(); + } + try { + List files= Luban.with(context).load(filePath).ignoreBy(1).setTargetDir(authorityDir).get(); + String fileneme=files.get(0).getName(); + FileAccessor.renameTo(authorityDir+File.separator, fileneme, bigFileFullName); + } catch (IOException e) { + e.printStackTrace(); + } +// if(!DemoUtils.createThumbnailFromOrig(filePath, 1080, 1080, Bitmap.CompressFormat.JPEG, 100, FileAccessor.getImagePathName().getAbsolutePath(), fileNameMD5)) { +// return null; +// } + + } else { + // file size small. + FileUtils.copyFile(authorityDir, fileNameMD5 , ".jpg", FileUtils.readFlieToByte(filePath, 0, FileUtils.decodeFileLength(filePath))); + } +// if((FileUtils.decodeFileLength(filePath) > 2097152)) +// { +// if(bitmapDegrees != 0 && !DemoUtils.rotateCreateBitmapSmall(authorityDir +File.separator+ bigFileFullName, bitmapDegrees, Bitmap.CompressFormat.JPEG, authorityDir, bigFileFullName)) { +// return null; +// } +// } +// else{ +// if(bitmapDegrees != 0 && !DemoUtils.rotateCreateBitmap(authorityDir +File.separator+ bigFileFullName, bitmapDegrees, Bitmap.CompressFormat.JPEG, authorityDir, bigFileFullName)) { +// return null; +// } +// } + + LogUtil.d( "insert: compressed bigImgPath = " + bigFileFullName); + String thumbName = DemoUtils.md5(fileNameMD5 + System.currentTimeMillis()); +// File file = new File(authorityDir); +// if(!file.exists()) { +// file.mkdirs(); +// } +// if(!DemoUtils.createThumbnailFromOrig(authorityDir +File.separator+ bigFileFullName, 100, 100, Bitmap.CompressFormat.JPEG, 100, authorityDir, thumbName)) { +// return null; +// } + LogUtil.d( "insert: thumbName = " + thumbName); + ImgInfo imgInfo = new ImgInfo(); + imgInfo.setBigImgPath(bigFileFullName); + imgInfo.setThumbImgPath(bigFileFullName); + imgInfo.isGif = false; + + return imgInfo; + } + + /** + * + * @param filePath + * @return + */ + public static ImgInfo createGIFImgInfo(String filePath) { + + if(!FileUtils.checkFile(filePath) || FileAccessor.getImagePathName() == null) { + return null; + } + String fileNameMD5 = DemoUtils.md5(System.currentTimeMillis() + filePath); + String bigFileFullName = fileNameMD5 + ".gif"; + String authorityDir = FileAccessor.getImagePathName().getAbsolutePath(); + FileUtils.copyFile(authorityDir, fileNameMD5 , ".gif", FileUtils.readFlieToByte(filePath, 0, FileUtils.decodeFileLength(filePath))); + + String thumbName = DemoUtils.md5(fileNameMD5 + System.currentTimeMillis()); + File file = new File(authorityDir); + if(!file.exists()) { + file.mkdirs(); + } + if(!DemoUtils.createThumbnailFromOrig(authorityDir + File.separator+ bigFileFullName, 100, 100, Bitmap.CompressFormat.JPEG, 100, authorityDir, thumbName)) { + return null; + } + + ImgInfo imgInfo = new ImgInfo(); + + imgInfo.setBigImgPath(bigFileFullName); + imgInfo.setThumbImgPath(thumbName); + + imgInfo.isGif = true; + + return imgInfo; + } +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ShoppingAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ShoppingAction.java new file mode 100644 index 0000000..813a13d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/ShoppingAction.java @@ -0,0 +1,168 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.cancelBackground; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.lucencyBackground; + +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.drawable.ColorDrawable; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import java.util.Arrays; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.view.IBaseAdapter; +import cn.shangyu.gdxzExpert.netease.ptop.MessageFragment; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachmentType; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +public class ShoppingAction extends BaseAction { + /** + * 构造函数 + * + * @param iconResId 图标 res id + * @param titleId 图标标题的string res id + */ + public ShoppingAction() { + super(R.drawable.ytx_chattingfooter_shopping, R.string.app_panel_shopping); + } + + @Override + public void onClick() { + showPopupWindow(getActivity().getWindow().getDecorView(),R.array.chat_menu_shop); +// ToastUtil.showToast("OnShoppingClick"); + } + private void showPopupWindow(View view, int resourceIdArray) { + lucencyBackground(getActivity()); + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(getActivity()) + .inflate(R.layout.include_dialog_simplelist_big, null); + // 设置按钮的点击事件 + ListView mListView = (ListView) contentView.findViewById(R.id.listview); + TextView dialog_tv_title=contentView.findViewById(R.id.dialog_tv_title); + dialog_tv_title.setVisibility(View.VISIBLE); + dialog_tv_title.setText("请选择"); + View v0=contentView.findViewById(R.id.v0); + v0.setVisibility(View.VISIBLE); + contentView.findViewById(R.id.v1).setVisibility(View.VISIBLE); + String[] stringArray =getActivity().getResources().getStringArray(resourceIdArray); + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + popupWindow.setOutsideTouchable(true); + // 使其聚集获取焦点 + popupWindow.setFocusable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + mListView.setAdapter(new ListDialogAdapter(getActivity(), Arrays.asList(stringArray))); + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (position == 0) { + + senddetail(); + } else { + + + + } + popupWindow.dismiss(); + } + + }); + popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + + cancelBackground(getActivity()); + } + }); + + + popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0); + + } + private void senddetail() + { + ECAlertDialog dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "您是否发送该商品详情?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String title = getActivity().getResources().getStringArray(R.array.chat_menu_shop)[0]; + + String url = Url.getNewWa+"setInfo?patient_uuid="+SharePrefUtil.getString(UIUtils.getContext(), "sessionUUID", getAccount()) +"&expert_uuid="+ SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") ; + String content = "肝胆相照®肝胆病在线公共服务平台"; + + Log.d("gdxzzz",url+" "); + + IMMessage imMessage = MessageBuilder.createTextMessage(getAccount(), P2P, "纽娃复合营养素固体饮料主要成分是:蜂花粉、乳清蛋白粉、灰树花粉、低聚木糖、蚕蛹氨基酸、麦芽粉、薏苡仁粉、烟酸、磷脂,以及其他调味品、辅助原料。科学配比制成,含有丰富的蛋白质、氨基酸、维生素、微量元素及其他营养元素,点击链接了解详情。"); + imMessage.setRemoteExtension(MessageFragment.ext); + sendMessage(imMessage); + + + TeachAttachment teachAttachment=new TeachAttachment(title,url,content,"", + "", CustomAttachmentType.Shopping,""); + IMMessage message= MessageBuilder.createCustomMessage(getAccount(), P2P, CustomAttachmentType.Shopping, teachAttachment); + message.setRemoteExtension(MessageFragment.ext); + sendMessage(message); + + dialog.dismiss(); + } + }); + + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + public class ListDialogAdapter extends IBaseAdapter { + + + public ListDialogAdapter(Context ctx, List data) { + super(ctx, data); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null) { + convertView = this.mLayoutInflater.inflate(R.layout.listitem_dialog , null); + } + ((TextView) convertView.findViewById(R.id.textview)).setText(getItem(position).toString()); + convertView.findViewById(R.id.imageview).setVisibility(View.GONE); +// if(position==0) +// { +// ((TextView) convertView.findViewById(R.id.textview)).setTypeface(Typeface.DEFAULT_BOLD); +// } +// else +// { +// +// } + return convertView; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/TeachAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/TeachAction.java new file mode 100644 index 0000000..3039e12 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/TeachAction.java @@ -0,0 +1,135 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + + +import android.content.Context; +import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.TextView; + +import com.netease.nim.uikit.business.session.actions.BaseAction; + +import java.util.Arrays; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PatientTeachActivity; +import cn.shangyu.gdxzExpert.activity.VideoTeachActivity; +import cn.shangyu.gdxzExpert.ecdemo.view.IBaseAdapter; + +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.cancelBackground; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.lucencyBackground; + +/** + * Created by hzxuwen on 2015/6/11. + */ +public class TeachAction extends BaseAction { + + public TeachAction() { + super(R.drawable.patient_teach_call, R.string.app_panel_video); + } + + @Override + public void onClick() { + showPopupWindow(getActivity().getWindow().getDecorView(),R.array.chat_menu_teach); +// final ECListDialog dialog = new ECListDialog(getActivity(), new String[] { "图文科普", +// "视频科普" }); +// dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { +// @Override +// public void onDialogItemClick(Dialog d, int position) { +// if (position == 0) { +// Intent intent=new Intent(getActivity(), PatientTeachActivity.class); +// getActivity().startActivityForResult(intent, 70); +// dialog.dismiss(); +// } else { +// Intent intent=new Intent(getActivity(), VideoTeachActivity.class); +// getActivity().startActivityForResult(intent, 70); +// dialog.dismiss(); +// +// } +// } +// }); +// +// dialog.setTitleColor(getActivity().getResources().getColor(R.color.top_title)); +// dialog.show(); + + } + private void showPopupWindow(View view, int resourceIdArray) { + lucencyBackground(getActivity()); + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(getActivity()) + .inflate(R.layout.include_dialog_simplelist_big, null); + // 设置按钮的点击事件 + ListView mListView = (ListView) contentView.findViewById(R.id.listview); + TextView dialog_tv_title=contentView.findViewById(R.id.dialog_tv_title); + dialog_tv_title.setVisibility(View.VISIBLE); + dialog_tv_title.setText("提示"); + View v0=contentView.findViewById(R.id.v0); + v0.setVisibility(View.VISIBLE); + contentView.findViewById(R.id.v1).setVisibility(View.VISIBLE); + String[] stringArray =getActivity().getResources().getStringArray(resourceIdArray); + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + popupWindow.setOutsideTouchable(true); + // 使其聚集获取焦点 + popupWindow.setFocusable(true); + popupWindow + .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + mListView.setAdapter(new ListDialogAdapter(getActivity(), Arrays.asList(stringArray))); + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int position, long l) { + if (position == 0) { + Intent intent=new Intent(getActivity(), PatientTeachActivity.class); + getActivity().startActivityForResult(intent, 70); + + } else { + Intent intent=new Intent(getActivity(), VideoTeachActivity.class); + getActivity().startActivityForResult(intent, 70); + + + } + popupWindow.dismiss(); + } + + }); + popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { + @Override + public void onDismiss() { + + cancelBackground(getActivity()); + } + }); + + + popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0); + + } + public class ListDialogAdapter extends IBaseAdapter { + + + public ListDialogAdapter(Context ctx, List data) { + super(ctx, data); + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if(convertView == null) { + convertView = this.mLayoutInflater.inflate(R.layout.listitem_dialog , null); + } + ((TextView) convertView.findViewById(R.id.textview)).setText(getItem(position).toString()); + convertView.findViewById(R.id.imageview).setVisibility(View.GONE); + + return convertView; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VideoAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VideoAction.java new file mode 100644 index 0000000..f17e33c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VideoAction.java @@ -0,0 +1,297 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + +import static cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ChattingFragment.getUriForFile; + +import android.Manifest; +import android.app.Dialog; +import android.content.Intent; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.view.Gravity; + +import androidx.annotation.NonNull; +import androidx.core.content.FileProvider; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.hjq.window.EasyWindow; +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nim.uikit.business.session.helper.VideoMessageHelper; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import java.io.File; +import java.io.IOException; +import java.io.InvalidClassException; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferenceSettings; +import cn.shangyu.gdxzExpert.ecdemo.common.ECPreferences; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.GlobalConstant; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.VideoRecordActivity; +import cn.shangyu.gdxzExpert.widget.ECListDialog; + +/** + * Created by hzxuwen on 2015/6/12. + */ +public class VideoAction extends BaseAction { + + // 视频 + protected transient VideoMessageHelper videoMessageHelper; + + public VideoAction() { + super(R.drawable.ytx_chattingfooter_takephoto_selector, R.string.app_panel_tackpic); + + } + + @Override + public void onClick() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问摄像头的权限 + showDialog(); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_new).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问摄像头的权限 + showDialog(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问摄像头的申请 + + } + + }, new String[]{ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } + else + { + showDialog(); + } + +// videoHelper().showVideoSource(makeRequestCode(RequestCode.GET_LOCAL_VIDEO), makeRequestCode(RequestCode.CAPTURE_VIDEO)); + } + private void showDialog() + { + ECListDialog dialog = new ECListDialog(getActivity(), R.array.take_chat_arr); + + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + + if (position == 0) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { +// handleTackPicture(); + takePhoto11(); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_photo).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); +// handleTackPicture(); + takePhoto11(); + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + handleTackPicture(); + } + + + } else if (position == 1) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + + if (PermissionsUtil.hasPermission(getActivity(), Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + //有访问录音 + handleVideoRecord(); + } else { + EasyWindow.with(getActivity()).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_record).show(); + PermissionsUtil.requestPermission(getActivity(), new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户授予了访问录音的权限 + handleVideoRecord(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问录音的申请 +// finish(); + } + + }, new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + }else { + handleVideoRecord(); + } + + } + } + }); + dialog.setTitle(R.string.take_title); + dialog.show(); + } + private void takePhoto11() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 设置打开相机 + + File photoFile = null; + try { + File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); // 保存到公共共享空间内,可以在资源管理器中找到,其他应用也可以直接访问 + // File storageDir = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES); 将图片放到应用专属空间内,其他的应用无法访问,也无法查看。随app的卸载而删除 + String imageFileName = "fileName"; + photoFile = File.createTempFile(imageFileName, ".jpg", storageDir); + // String filePath = photoFile.getAbsolutePath(); 获取到图片的路径,可以在onActivityResult中根据这个路径去获取图片 + } catch (IOException e) { + e.printStackTrace(); + } + if (photoFile != null) { + + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH, + photoFile.getPath(), true); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.putExtra(MediaStore.EXTRA_OUTPUT, + FileProvider.getUriForFile(getActivity(), + getActivity().getPackageName() + ".fileprovider", photoFile)); + + getActivity().startActivityForResult(intent, 0x3); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + + } + } + private void handleTackPicture() { + if (!FileAccessor.isExistExternalStore()) { + return; + } + + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + File file = FileAccessor.getTackPicFilePath(); + if (file != null) { + /** + * 2018.11.24改 + * */ + Uri uri = getUriForFile(getActivity(),file); + + if (uri != null) { + intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); + } +// mFilePath = file.getAbsolutePath(); + try { + ECPreferences.savePreference( + ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH, + file.getAbsolutePath(), true); + getActivity().startActivityForResult(intent, 0x3); + } catch (InvalidClassException e) { + e.printStackTrace(); + } + } + + } + // 调用系统打开视频 + private void handleVideoRecord() { + Intent intent = new Intent(); + intent.setClass(getActivity(), VideoRecordActivity.class); + getActivity().startActivityForResult(intent, + GlobalConstant.ACTIVITY_FOR_RESULT_VIDEORECORD); + } + /** + * ********************** 视频 ******************************* + */ + private void initVideoMessageHelper() { + videoMessageHelper = new VideoMessageHelper(getActivity(), new VideoMessageHelper.VideoMessageHelperListener() { + + @Override + public void onVideoPicked(File file, String md5) { + MediaPlayer mediaPlayer = getVideoMediaPlayer(file); + long duration = mediaPlayer == null ? 0 : mediaPlayer.getDuration(); + int height = mediaPlayer == null ? 0 : mediaPlayer.getVideoHeight(); + int width = mediaPlayer == null ? 0 : mediaPlayer.getVideoWidth(); + IMMessage message = MessageBuilder.createVideoMessage(getAccount(), getSessionType(), file, duration, width, height, md5); + sendMessage(message); + } + }); + } + + /** + * 获取视频mediaPlayer + * + * @param file 视频文件 + * @return mediaPlayer + */ + private MediaPlayer getVideoMediaPlayer(File file) { + try { + return MediaPlayer.create(getActivity(), Uri.fromFile(file)); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { +// switch (requestCode) { + +// if (requestCode == 0x3) { +// try { +// ECPreferences.savePreference( +// ECPreferenceSettings.SETTINGS_CROPIMAGE_OUTPUTPATH, +// file.getAbsolutePath(), true); + +// Intent intent = new Intent(getActivity(), ImagePreviewActivity.class); +// getActivity().startActivityForResult(intent, 0x5); + +// } catch (InvalidClassException e1) { +// e1.printStackTrace(); +// } + +// case RequestCode.GET_LOCAL_VIDEO: +// videoHelper().onGetLocalVideoResult(data); +// break; +// case RequestCode.CAPTURE_VIDEO: +// videoHelper().onCaptureVideoResult(data); +// break; + } +// } + + private VideoMessageHelper videoHelper() { + if (videoMessageHelper == null) { + initVideoMessageHelper(); + } + return videoMessageHelper; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VisitAction.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VisitAction.java new file mode 100644 index 0000000..487e6af --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/action/VisitAction.java @@ -0,0 +1,89 @@ +package cn.shangyu.gdxzExpert.netease.session.action; + + +import static com.netease.nimlib.sdk.msg.constant.SessionTypeEnum.P2P; +import static cn.shangyu.gdxzExpert.netease.ptop.MessageFragment.havestopout; + +import android.content.DialogInterface; +import android.content.Intent; + +import com.netease.nim.uikit.business.session.actions.BaseAction; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachmentType; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * Created by hzxuwen on 2015/6/11. + */ +public class VisitAction extends BaseAction { + + public VisitAction() { + super(R.drawable.ytx_chattingfooter_chutingzhen, R.string.app_panel_outpatient); + } + + @Override + public void onClick() { + ECAlertDialog dilaog2; + if (havestopout){ + + dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "您是否发送您的出/停诊公告?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String title = SharePrefUtil.getString(UIUtils.getContext(), "realName", "") + "医生门诊详情"; +// String url = Url.urlOutpatient + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + String url = Url.urlOutpatientnew + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") ; + String content = "门诊详情"; +// String content = "肝胆相照®肝胆病在线公共服务平台"; +// String imagUrl = "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png"; +// Boolean videoKepu = true; + + TeachAttachment teachAttachment=new TeachAttachment(title,url,content,"", + "", CustomAttachmentType.VisitTeach,""); + IMMessage message= MessageBuilder.createCustomMessage(getAccount(), P2P, CustomAttachmentType.VisitTeach, teachAttachment); + sendMessage(message); + dialog.dismiss(); + } + }); + + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + + }else { + dilaog2 = ECAlertDialog.buildAlert(getActivity(), + "您未添加出/停诊信息,是否添加?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getActivity().startActivity(new Intent(getActivity(), OutofPatientNoticeActivity.class)); + dialog.dismiss(); + + } + }); + + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachParser.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachParser.java new file mode 100644 index 0000000..e86d89e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachParser.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachmentParser; + +/** + * Created by zhoujianghua on 2015/4/9. + */ +public class CustomAttachParser implements MsgAttachmentParser { + + private static final String KEY_TYPE = "type"; + private static final String KEY_DATA = ""; + + @Override + public MsgAttachment parse(String json) { + CustomAttachment attachment = null; + try { + JSONObject object = JSON.parseObject(json); +// String type = object.getString(KEY_TYPE); +// JSONObject data = object.getJSONObject(KEY_DATA); +// String type = data.getString("messageType"); +// switch (type) { +// case CustomAttachmentType.Teach: +// case CustomAttachmentType.VisitTeach: +// case CustomAttachmentType.VideoTeach: +// attachment = new TeachAttachment(); +// break; +// case CustomAttachmentType.Guess: +// attachment = new GuessAttachment(); +// break; +// case CustomAttachmentType.SnapChat: +// return new SnapChatAttachment(data); +// case CustomAttachmentType.Sticker: +// attachment = new StickerAttachment(); +// break; +// case CustomAttachmentType.RTS: +// attachment = new RTSAttachment(); +// break; +// case CustomAttachmentType.RedPacket: +// attachment = new RedPacketAttachment(); +// break; +// case CustomAttachmentType.OpenedRedPacket: +// attachment = new RedPacketOpenedAttachment(); +// break; +// case CustomAttachmentType.MultiRetweet: +// attachment = new MultiRetweetAttachment(); +// break; +// default: +// attachment = new DefaultCustomAttachment(); +// break; +// } + attachment = new TeachAttachment(); + if (attachment != null) { + attachment.fromJson(object); + } + } catch (Exception e) { + + } + + return attachment; + } + + public static String packData(String type, JSONObject data) { +// JSONObject object = new JSONObject(); +// object.put(KEY_TYPE, type); +// if (data != null) { +// object.put(KEY_DATA, data); +// } + + return data.toJSONString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachment.java new file mode 100644 index 0000000..a7ba89d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachment.java @@ -0,0 +1,35 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +import com.alibaba.fastjson.JSONObject; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; + +/** + * Created by zhoujianghua on 2015/4/9. + */ +public abstract class CustomAttachment implements MsgAttachment { + + protected String type; + + public CustomAttachment(String type) { + this.type = type; + } + + public void fromJson(JSONObject data) { + if (data != null) { + parseData(data); + } + } + + @Override + public String toJson(boolean send) { + return CustomAttachParser.packData(type, packData()); + } + + public String getType() { + return type; + } + + protected abstract void parseData(JSONObject data); + + protected abstract JSONObject packData(); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachmentType.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachmentType.java new file mode 100644 index 0000000..eff2313 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/CustomAttachmentType.java @@ -0,0 +1,21 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +/** + * Created by zhoujianghua on 2015/4/9. + */ +public interface CustomAttachmentType { + // 多端统一 + String Guess = "1";//石头剪刀布 + String SnapChat = "2";//阅后即焚 + String Sticker = "3";//贴图 + String RTS = "4";//白板的发起结束消息 + String RedPacket = "5"; + String OpenedRedPacket = "6"; + String MultiRetweet = "15";//多条消息合并转发 + String Teach="[图文科普]"; + String VideoTeach="[视频科普]"; + String VisitTeach="[门诊公告]"; + String CouTeach="[公益咨询]"; + String Shopping="[肝胆商城]"; + String Hostipal="[互联网医院]"; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/DefaultCustomAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/DefaultCustomAttachment.java new file mode 100644 index 0000000..7f552dd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/DefaultCustomAttachment.java @@ -0,0 +1,35 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +import com.alibaba.fastjson.JSONObject; + +/** + * Created by zhoujianghua on 2015/4/10. + */ +public class DefaultCustomAttachment extends CustomAttachment { + + private String content; + + public DefaultCustomAttachment() { + super("0"); + } + + @Override + protected void parseData(JSONObject data) { + content = data.toJSONString(); + } + + @Override + protected JSONObject packData() { + JSONObject data = null; + try { + data = JSONObject.parseObject(content); + } catch (Exception e) { + + } + return data; + } + + public String getContent() { + return content; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/GuessAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/GuessAttachment.java new file mode 100644 index 0000000..0a226ac --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/GuessAttachment.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +import com.alibaba.fastjson.JSONObject; + +import java.util.Random; + +/** + * Created by zhoujianghua on 2015/4/9. + */ +public class GuessAttachment extends CustomAttachment { + + public enum Guess { + Shitou(1, "石头"), + Jiandao(2, "剪刀"), + Bu(3, "布"),; + + private int value; + private String desc; + + Guess(int value, String desc) { + this.value = value; + this.desc = desc; + } + + static Guess enumOfValue(int value) { + for (Guess direction : values()) { + if (direction.getValue() == value) { + return direction; + } + } + return Shitou; + } + + public int getValue() { + return value; + } + + public String getDesc() { + return desc; + } + } + + private Guess value; + + public GuessAttachment() { + super(CustomAttachmentType.Guess); + random(); + } + + @Override + protected void parseData(JSONObject data) { + value = Guess.enumOfValue(data.getIntValue("value")); + } + + @Override + protected JSONObject packData() { + JSONObject data = new JSONObject(); + data.put("value", value.getValue()); + return data; + } + + private void random() { + int value = new Random().nextInt(3) + 1; + this.value = Guess.enumOfValue(value); + } + + public Guess getValue() { + return value; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/MultiRetweetAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/MultiRetweetAttachment.java new file mode 100644 index 0000000..843759f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/MultiRetweetAttachment.java @@ -0,0 +1,263 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + + +import android.text.TextUtils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/* +{ +"sessionID":"session_id", +"sessionName":"session_name", +"url": "https://netease.im",//nos +"md5": "d5ff5301b95fb9a23566ed407ebbc177",//nos file +"compressed": false, +"encrypted": true, +"password": "b95fb9a23566ed40",//rc4 +"messageAbstract": +[//消息摘要,前两条消息摘要Json +{ +"sender": "allday1", +"message": "123313123123123123"//文本消息,最大32字,超过32使用32字 + "......" +}, +{ +"sender": "allday1", +"message": "[视频]" +} +] +} +*/ +public class MultiRetweetAttachment extends CustomAttachment { + private static final String KEY_SESSION_ID = "sessionID"; + private static final String KEY_SESSION_NAME = "sessionName"; + private static final String KEY_URL = "url"; + private static final String KEY_MD5 = "md5"; + private static final String KEY_COMPRESSED = "compressed"; + private static final String KEY_ENCRYPTED = "encrypted"; + private static final String KEY_PASSWORD = "password"; + private static final String KEY_MESSAGE_ABSTRACT = "messageAbstract"; + private static final String KEY_SENDER = "sender"; + private static final String KEY_MESSAGE = "message"; + + private String sessionID; + private String sessionName; + /** nos文件存储地址 */ + private String url; + private String md5; + private boolean compressed; + private boolean encrypted; + private String password; + /** 第一条消息的发送者ID */ + private String sender1; + /** 第一条消息在合并转发消息中的展示文案 */ + private String message1; + /** 第二条消息的发送者ID */ + private String sender2; + /** 第二条消息在合并转发消息中的展示文案 */ + private String message2; + + public MultiRetweetAttachment() { + super(CustomAttachmentType.MultiRetweet); + } + + public MultiRetweetAttachment(String sessionID, String sessionName, String url, String md5, boolean compressed, boolean encrypted, String password, String sender1, String message1, String sender2, String message2) { + super(CustomAttachmentType.MultiRetweet); + this.sessionID = sessionID; + this.sessionName = sessionName; + this.url = url; + this.md5 = md5; + this.compressed = compressed; + this.encrypted = encrypted; + this.password = password; + this.sender1 = sender1; + this.message1 = message1; + this.sender2 = sender2; + this.message2 = message2; + } + + @Override + protected void parseData(JSONObject data) { + //如果Json格式包含外层部分,则先进入内层 + if (data.containsKey("data")) { + data = data.getJSONObject("data"); + } + try { + sessionID = data.getString(KEY_SESSION_ID); + sessionName = data.getString(KEY_SESSION_NAME); + url = data.getString(KEY_URL); + md5 = data.getString(KEY_MD5); + compressed = data.getBooleanValue(KEY_COMPRESSED); + encrypted = data.getBooleanValue(KEY_ENCRYPTED); + password = data.getString(KEY_PASSWORD); + + JSONArray msgAbs = data.getJSONArray(KEY_MESSAGE_ABSTRACT); + JSONObject obj1 = msgAbs.getJSONObject(0); + sender1 = obj1.getString(KEY_SENDER); + message1 = obj1.getString(KEY_MESSAGE); + if (msgAbs.size()>1){ + JSONObject obj2 = msgAbs.getJSONObject(1); + sender2 = obj2.getString(KEY_SENDER); + message2 = obj2.getString(KEY_MESSAGE); + } + } catch (Exception e) { + //转化失败,条目显示null字符 + e.printStackTrace(); + } + } + + @Override + protected JSONObject packData() { + JSONObject data = new JSONObject(); + data.put(KEY_SESSION_ID, sessionID); + data.put(KEY_SESSION_NAME, sessionName); + data.put(KEY_URL, url); + data.put(KEY_MD5, md5); + data.put(KEY_COMPRESSED, compressed); + data.put(KEY_ENCRYPTED, encrypted); + data.put(KEY_PASSWORD, password); + + JSONArray messageAbstract = new JSONArray(); + JSONObject obj1 = new JSONObject(); + obj1.put(KEY_SENDER, sender1); + obj1.put(KEY_MESSAGE, message1); + messageAbstract.add(obj1); + //只有一条消息时,不传递第二组的字段 + if (!TextUtils.isEmpty(sender2)) { + JSONObject obj2 = new JSONObject(); + obj2.put(KEY_SENDER, sender2); + obj2.put(KEY_MESSAGE, message2); + messageAbstract.add(obj2); + } + data.put(KEY_MESSAGE_ABSTRACT, messageAbstract); + return data; + } + + public static String getKeySessionId() { + return KEY_SESSION_ID; + } + + public static String getKeySessionName() { + return KEY_SESSION_NAME; + } + + public static String getKeyUrl() { + return KEY_URL; + } + + public static String getKeyMd5() { + return KEY_MD5; + } + + public static String getKeyCompressed() { + return KEY_COMPRESSED; + } + + public static String getKeyEncrypted() { + return KEY_ENCRYPTED; + } + + public static String getKeyPassword() { + return KEY_PASSWORD; + } + + public static String getKeyMessageAbstract() { + return KEY_MESSAGE_ABSTRACT; + } + + public static String getKeySender() { + return KEY_SENDER; + } + + public static String getKeyMessage() { + return KEY_MESSAGE; + } + + public String getSessionID() { + return sessionID; + } + + public void setSessionID(String sessionID) { + this.sessionID = sessionID; + } + + public String getSessionName() { + return sessionName; + } + + public void setSessionName(String sessionName) { + this.sessionName = sessionName; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getMd5() { + return md5; + } + + public void setMd5(String md5) { + this.md5 = md5; + } + + public boolean isCompressed() { + return compressed; + } + + public void setCompressed(boolean compressed) { + this.compressed = compressed; + } + + public boolean isEncrypted() { + return encrypted; + } + + public void setEncrypted(boolean encrypted) { + this.encrypted = encrypted; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getSender1() { + return sender1; + } + + public void setSender1(String sender1) { + this.sender1 = sender1; + } + + public String getMessage1() { + return message1; + } + + public void setMessage1(String message1) { + this.message1 = message1; + } + + public String getSender2() { + return sender2; + } + + public void setSender2(String sender2) { + this.sender2 = sender2; + } + + public String getMessage2() { + return message2; + } + + public void setMessage2(String message2) { + this.message2 = message2; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketAttachment.java new file mode 100644 index 0000000..3fcfa93 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketAttachment.java @@ -0,0 +1,59 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +import com.alibaba.fastjson.JSONObject; + +public class RedPacketAttachment extends CustomAttachment { + + private String content;// 消息文本内容 + private String redPacketId;// 红包id + private String title;// 红包名称 + + private static final String KEY_CONTENT = "content"; + private static final String KEY_ID = "redPacketId"; + private static final String KEY_TITLE = "title"; + + public RedPacketAttachment() { + super(CustomAttachmentType.RedPacket); + } + + @Override + protected void parseData(JSONObject data) { + content = data.getString(KEY_CONTENT); + redPacketId = data.getString(KEY_ID); + title = data.getString(KEY_TITLE); + } + + @Override + protected JSONObject packData() { + JSONObject data = new JSONObject(); + data.put(KEY_CONTENT, content); + data.put(KEY_ID, redPacketId); + data.put(KEY_TITLE, title); + return data; + } + + public String getRpContent() { + return content; + } + + public String getRpId() { + return redPacketId; + } + + public String getRpTitle() { + return title; + } + + + public void setRpContent(String content) { + this.content = content; + } + + public void setRpId(String briberyID) { + this.redPacketId = briberyID; + } + + public void setRpTitle(String briberyName) { + this.title = briberyName; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketOpenedAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketOpenedAttachment.java new file mode 100644 index 0000000..4593386 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/RedPacketOpenedAttachment.java @@ -0,0 +1,120 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + +import com.alibaba.fastjson.JSONObject; +import com.netease.nim.uikit.business.team.helper.TeamHelper; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; + +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.uinfo.UserInfoHelper; + +public class RedPacketOpenedAttachment extends CustomAttachment { + private String sendAccount; //发送红包ID + private String openAccount; //打开红包ID + private String redPacketId; //红包ID + private boolean isGetDone; //是否被领完 + + private static final String KEY_SEND = "sendPacketId"; + private static final String KEY_OPEN = "openPacketId"; + private static final String KEY_RP_ID = "redPacketId"; + private static final String KEY_DONE = "isGetDone"; + + public RedPacketOpenedAttachment() { + super(CustomAttachmentType.OpenedRedPacket); + } + + public String getSendNickName(SessionTypeEnum sessionTypeEnum, String targetId) { + if (DemoCache.getAccount().equals(sendAccount) && DemoCache.getAccount().equals(openAccount)) { + return "自己"; + } + return getDisplayName(sessionTypeEnum, targetId, sendAccount); + } + + public String getOpenNickName(SessionTypeEnum sessionTypeEnum, String targetId) { + return getDisplayName(sessionTypeEnum, targetId, openAccount); + } + + // 我发的红包或者是我打开的红包 + public boolean belongTo(String account) { + if (openAccount == null || sendAccount == null || account == null) { + return false; + } + return openAccount.equals(account) || sendAccount.equals(account); + } + + private String getDisplayName(SessionTypeEnum sessionTypeEnum, String targetId, String account) { + if (sessionTypeEnum == SessionTypeEnum.Team) { + return TeamHelper.getTeamMemberDisplayNameYou(targetId, account); + } else if (sessionTypeEnum == SessionTypeEnum.P2P) { + return UserInfoHelper.getUserDisplayNameEx(account, "你"); + } else { + return ""; + } + } + + public String getDesc(SessionTypeEnum sessionTypeEnum, String targetId) { + String sender = getSendNickName(sessionTypeEnum, targetId); + String opened = getOpenNickName(sessionTypeEnum, targetId); + return String.format("%s领取了%s的红包", opened, sender); + } + + public String getSendAccount() { + return sendAccount; + } + + private void setSendAccount(String sendAccount) { + this.sendAccount = sendAccount; + } + + public String getOpenAccount() { + return openAccount; + } + + private void setOpenAccount(String openAccount) { + this.openAccount = openAccount; + } + + public String getRedPacketId() { + return redPacketId; + } + + private void setRedPacketId(String redPacketId) { + this.redPacketId = redPacketId; + } + + public boolean isRpGetDone() { + return isGetDone; + } + + private void setIsGetDone(boolean isGetDone) { + this.isGetDone = isGetDone; + } + + @Override + protected void parseData(JSONObject data) { + sendAccount = data.getString(KEY_SEND); + openAccount = data.getString(KEY_OPEN); + redPacketId = data.getString(KEY_RP_ID); + isGetDone = data.getBoolean(KEY_DONE); + } + + @Override + protected JSONObject packData() { + JSONObject jsonObj = new JSONObject(); + + jsonObj.put(KEY_SEND, sendAccount); + jsonObj.put(KEY_OPEN, openAccount); + jsonObj.put(KEY_RP_ID, redPacketId); + jsonObj.put(KEY_DONE, isGetDone); + + return jsonObj; + } + + public static RedPacketOpenedAttachment obtain(String sendPacketId, String openPacketId, String packetId, boolean isGetDone) { + RedPacketOpenedAttachment model = new RedPacketOpenedAttachment(); + model.setRedPacketId(packetId); + model.setSendAccount(sendPacketId); + model.setOpenAccount(openPacketId); + model.setIsGetDone(isGetDone); + return model; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/TeachAttachment.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/TeachAttachment.java new file mode 100644 index 0000000..c392d50 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/extension/TeachAttachment.java @@ -0,0 +1,120 @@ +package cn.shangyu.gdxzExpert.netease.session.extension; + + +import com.alibaba.fastjson.JSONObject; + +/** + * Created by zhoujianghua on 2015/4/9. + */ +public class TeachAttachment extends CustomAttachment { + + String title;//标题 + String url;//内容url + String content;//内容 + String messigeid;//id + String messagephoto;//照片 + String type;//类型 + String gdxz_ext_data;//备用字段,json字符串 + public TeachAttachment(String title,String url,String content,String messigeid,String messagephoto,String type,String gdxz_ext_data) + { + super(CustomAttachmentType.Teach); + this.title=title; + this.url=url; + this.content=content; + this.messigeid=messigeid; + this.messagephoto=messagephoto; + this.type=type; + this.gdxz_ext_data=gdxz_ext_data; + } + + + + public TeachAttachment() { + super(CustomAttachmentType.Teach); + + } + + @Override + protected void parseData(JSONObject data) { +// value = Guess.enumOfValue(data.getIntValue("value")); + this.title=data.getString("gdxz_title"); + this.url=data.getString("gdxz_url"); + this.content=data.getString("gdxz_content"); + this.messigeid=data.getString("gdxz_id"); + this.messagephoto=data.getString("gdxz_img"); + this.type=data.getString("gdxz_type"); + this.gdxz_ext_data=data.getString("gdxz_ext_data"); + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getMessigeid() { + return messigeid; + } + + public void setMessigeid(String messigeid) { + this.messigeid = messigeid; + } + + public String getMessagephoto() { + return messagephoto; + } + + public void setMessagephoto(String messagephoto) { + this.messagephoto = messagephoto; + } + + public String getGdxz_ext_data() { + return gdxz_ext_data; + } + + public void setGdxz_ext_data(String gdxz_ext_data) { + this.gdxz_ext_data = gdxz_ext_data; + } + + @Override + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + protected JSONObject packData() { + JSONObject data = new JSONObject(); + data.put("gdxz_title", getTitle()); + data.put("gdxz_url",getUrl()); + data.put("gdxz_content",getContent()); + data.put("gdxz_id",getMessigeid()); + data.put("gdxz_img",getMessagephoto()); + data.put("gdxz_type",getType()); + data.put("gdxz_ext_data",getType());//备用字段,json字符串 + return data; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderPicture.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderPicture.java new file mode 100644 index 0000000..0c64a1f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderPicture.java @@ -0,0 +1,123 @@ +package cn.shangyu.gdxzExpert.netease.session.viewholder; + +import android.content.Intent; + +import com.netease.nim.uikit.R; +import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderThumbBase; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter; +import com.netease.nim.uikit.common.util.media.ImageUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallback; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.attachment.ImageAttachment; +import com.netease.nimlib.sdk.msg.attachment.MsgAttachment; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ImageGralleryPagerActivity; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by zhoujianghua on 2015/8/4. + */ +public class MsgViewHolderPicture extends MsgViewHolderThumbBase { + + public MsgViewHolderPicture(BaseMultiItemFetchLoadAdapter adapter) { + super(adapter); + } + + @Override + public int getContentResId() { + return R.layout.nim_message_item_picture; + } + + @Override + public void onItemClick() { +// WatchMessagePictureActivity.start(context, message); + queryImageMessages(); + + } + + @Override + protected String thumbFromSourceFile(String path) { + return path; + } + List imageMsgList = new ArrayList<>(); +// List imgInfos=new ArrayList<>(); +ArrayList urls =new ArrayList<>(); + // 查询并显示图片,带viewPager + private void queryImageMessages() { + imageMsgList.clear(); + IMMessage anchor = MessageBuilder.createEmptyMessage(message.getSessionId(), message.getSessionType(), 0); + NIMClient.getService(MsgService.class).queryMessageListByType(MsgTypeEnum.image, anchor, Integer.MAX_VALUE).setCallback(new RequestCallback>() { + @Override + public void onSuccess(List param) { + for (IMMessage imMessage : param) { + MsgAttachment attachment = imMessage.getAttachment(); + if (attachment instanceof ImageAttachment && !ImageUtil.isGif(((ImageAttachment) attachment).getExtension())){ + imageMsgList.add(imMessage); + } + } + // imageMsgList.addAll(param); + Collections.reverse(imageMsgList); + setDisplayIndex(); + + } + + @Override + public void onFailed(int code) { + + + } + + @Override + public void onException(Throwable exception) { + + } + }); + } + // 设置第一个选中的图片index + private void setDisplayIndex() { + urls.clear(); + for(IMMessage imageObject:imageMsgList) + { + new ViewImageInfo("",""); + urls.add(new ViewImageInfo(((ImageAttachment)(imageObject.getAttachment())).getUrl(), + ((ImageAttachment)(imageObject.getAttachment())).getUrl())); + } + for (int i = 0; i < imageMsgList.size(); i++) { + IMMessage imageObject = imageMsgList.get(i); +// ImgInfo createImgInfo = ImgInfoSqlManager.getInstance().createImgInfo( +// ((ImageAttachment)(imageObject.getAttachment())).getPath(), UIUtils.getContext()); +// imgInfos.add(createImgInfo); +// new ViewImageInfo("",""); +// urls.add(new ViewImageInfo(((ImageAttachment)(imageObject.getAttachment())).getUrl(), +// ((ImageAttachment)(imageObject.getAttachment())).getUrl())); + if (compareObjects(message, imageObject)) { +// firstDisplayImageIndex = i; + Intent intent = new Intent(UIUtils.getContext(), ImageGralleryPagerActivity.class); + intent.putExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_INDEX, i); + intent.putParcelableArrayListExtra(ImageGralleryPagerActivity.EXTRA_IMAGE_URLS, urls); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); + UIUtils.getContext().startActivity(intent); + + break; + } + } + } + protected boolean compareObjects(IMMessage t1, IMMessage t2) { + return (t1.getUuid().equals(t2.getUuid())); + } + + @Override + protected boolean isShowBubble() { + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTeach.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTeach.java new file mode 100644 index 0000000..0d8abee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTeach.java @@ -0,0 +1,229 @@ +package cn.shangyu.gdxzExpert.netease.session.viewholder; + +import static android.widget.ImageView.ScaleType.CENTER; +import static com.mobile.auth.gatewayauth.utils.ReflectionUtils.getActivity; +import static cn.shangyu.gdxzExpert.utils.Url.getNewWa; + +import android.content.Intent; +import android.view.View; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter; +import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicServiceDetailsActivity; +import cn.shangyu.gdxzExpert.activity.VideoDetilActivity; +import cn.shangyu.gdxzExpert.netease.session.extension.CustomAttachmentType; +import cn.shangyu.gdxzExpert.netease.session.extension.TeachAttachment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +/** + * Created by huangjun on 2015/11/25. + * Tip类型消息ViewHolder + */ +public class MsgViewHolderTeach extends MsgViewHolderBase { + + protected TextView tv_location; + protected TextView tv_pre_content; + private RelativeLayout re_location; + private ImageView iv_rich; + private TeachAttachment teachAttachment; + + public MsgViewHolderTeach(BaseMultiItemFetchLoadAdapter adapter) { + super(adapter); + } + + @Override + public int getContentResId() { + if(CommonUtil.BigModule()) + { + return R.layout.chatting_item_rich_text_tobig; + } + else + { + return R.layout.chatting_item_rich_text_to; + } + + } + + @Override + public void inflateContentView() { +// notificationTextView = (TextView) view.findViewById(com.netease.nim.uikit.R.id.message_item_notification_label); + tv_location=view.findViewById(R.id.tv_location); + tv_pre_content=view.findViewById(R.id.tv_pre_content); + re_location=view.findViewById(R.id.re_location); + iv_rich=view.findViewById(R.id.iv_rich); + + } + + @Override + public void bindContentView() { + if (message.getAttachment() == null) { + return; + } + teachAttachment= (TeachAttachment)message.getAttachment(); + + if(teachAttachment.getType()!=null) + + { + if(teachAttachment.getType().equals(CustomAttachmentType.CouTeach)) + { +// tv_location.setVisibility(View.GONE); + tv_location.setText(teachAttachment.getTitle()+""); + tv_pre_content.setText("点击查看问题详情"); + iv_rich.setScaleType(CENTER); + + iv_rich.setImageResource(R.drawable.icon_chatting_file); +// iv_rich.setBackgroundDrawable(UIUtils.getContext().getResources().getDrawable(R.drawable.icon_chatting_file)); + +// re_location.setBackgroundResource(R.drawable.chat_to_bg_fiel); + + } + else if(teachAttachment.getType().equals(CustomAttachmentType.VisitTeach)) + { +// tv_location.setVisibility(View.VISIBLE); + tv_location.setText(teachAttachment.getTitle()+""); + tv_pre_content.setText("肝胆相照®肝胆病在线公共服务平台"); + iv_rich.setImageResource(R.drawable.mind_logo); +// re_location.setBackgroundResource(R.drawable.chatto_bg); + } + else + { + +// tv_location.setVisibility(View.VISIBLE); + tv_location.setText(teachAttachment.getTitle()+""); + if(StringUtil.isEmpty(teachAttachment.getContent())) + { + tv_pre_content.setText("肝胆相照®肝胆病在线公共服务平台"); + } + else + { + tv_pre_content.setText(teachAttachment.getContent()); + } + if(teachAttachment.getTitle()!=null&&teachAttachment.getTitle().contains("互联网医院")) + { + Glide.with(getActivity()).load( + teachAttachment.getMessagephoto()).apply( + new RequestOptions().fitCenter()).into(iv_rich); + } + else + { + iv_rich.setImageResource(R.drawable.mind_logo); + } + +// re_location.setBackgroundResource(R.drawable.chatto_bg); + } + } + + + re_location.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(teachAttachment.getType().equals(CustomAttachmentType.CouTeach)) + { + ; + Intent intent = new Intent(UIUtils.getContext(), PublicServiceDetailsActivity.class); + + intent.putExtra("consultUuid", teachAttachment.getMessigeid()); + intent.putExtra("isCloseAnswer", true); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); + UIUtils.getContext().startActivity(intent); + } + else if(teachAttachment.getTitle()!=null&&teachAttachment.getTitle().contains("互联网医院")) + { + IWXAPI api = WXAPIFactory.createWXAPI(getActivity(), Constant.WeId); + WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); + req.userName = "gh_9cd2fd72eb57"; // 填小程序原始id + req.path = "/Pages/yishi/index/index"; //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。 +// req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW;// 可选打开 开发版,体验版和正式版 + api.sendReq(req); + + } + else + { + Intent intent; + if (!StringUtil.isEmpty(teachAttachment.getUrl())&&teachAttachment.getUrl().contains("video")){ + intent = new Intent(UIUtils.getContext(), VideoDetilActivity.class); + intent.putExtra("uuid", teachAttachment.getMessigeid()); + + }else { + intent = new Intent(UIUtils.getContext(), NewsDetailActivity.class); + + } + + if (!StringUtil.isEmpty(teachAttachment.getUrl())&&teachAttachment.getUrl().contains("outpatient_details") + ||!StringUtil.isEmpty(teachAttachment.getUrl())&&teachAttachment.getUrl().contains("wxPatient/index.htm#/outPatient")){ + intent.putExtra("title", "门诊详情"); + }else if(!StringUtil.isEmpty(teachAttachment.getUrl())&&teachAttachment.getUrl().contains(getNewWa)) + { + intent.putExtra("title", UIUtils.getContext().getResources().getStringArray(R.array.chat_menu_shop)[0]); + intent.putExtra("flag", 1); + } + else + { + intent.putExtra("newsTitle", teachAttachment.getTitle()+""); + intent.putExtra("kepuuuid", teachAttachment.getMessigeid()); + intent.putExtra("title", "患教详情"); + intent.putExtra("need_inside_share", "no"); + } + if(!StringUtil.isEmpty(teachAttachment.getUrl()) + &&teachAttachment.getUrl().contains("dcsvip1imapp.cloopen.net:8888")) + { + intent.putExtra("url", + ((TeachAttachment) message.getAttachment()).getUrl().split("http://dcsvip1imapp.cloopen.net:8888")[1]); + } + else + { + intent.putExtra("url", teachAttachment.getUrl()); + } + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); + UIUtils.getContext().startActivity(intent); + } + + } + }); + re_location.setOnLongClickListener(longClickListener); +// if (TextUtils.isEmpty(message.getContent())) { +// Map content = message.getRemoteExtension(); +// if (content != null && !content.isEmpty()) { +// text = (String) content.get("content"); +// } +// } else { +// text = message.getContent(); +// } + +// handleTextNotification(text); + } + + private void handleTextNotification(String text) { +// MoonUtil.identifyFaceExpressionAndATags(context, notificationTextView, text, ImageSpan.ALIGN_BOTTOM); +// notificationTextView.setMovementMethod(LinkMovementMethod.getInstance()); + } +// @Override +// public void onItemClick() +// { +// +// } + + @Override + protected boolean isMiddleItem() { + return false; + } + + @Override + protected boolean isShowBubble() { + return false; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTip.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTip.java new file mode 100644 index 0000000..3b1a51c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/session/viewholder/MsgViewHolderTip.java @@ -0,0 +1,60 @@ +package cn.shangyu.gdxzExpert.netease.session.viewholder; + +import android.text.TextUtils; +import android.text.method.LinkMovementMethod; +import android.text.style.ImageSpan; +import android.widget.TextView; + +import com.netease.nim.uikit.business.session.emoji.MoonUtil; +import com.netease.nim.uikit.business.session.viewholder.MsgViewHolderBase; +import com.netease.nim.uikit.common.ui.recyclerview.adapter.BaseMultiItemFetchLoadAdapter; + +import java.util.Map; + +/** + * Created by huangjun on 2015/11/25. + * Tip类型消息ViewHolder + */ +public class MsgViewHolderTip extends MsgViewHolderBase { + + protected TextView notificationTextView; + + public MsgViewHolderTip(BaseMultiItemFetchLoadAdapter adapter) { + super(adapter); + } + + @Override + public int getContentResId() { + return com.netease.nim.uikit.R.layout.nim_message_item_notification; + } + + @Override + public void inflateContentView() { + notificationTextView = (TextView) view.findViewById(com.netease.nim.uikit.R.id.message_item_notification_label); + } + + @Override + public void bindContentView() { + String text = "未知通知提醒"; + if (TextUtils.isEmpty(message.getContent())) { + Map content = message.getRemoteExtension(); + if (content != null && !content.isEmpty()) { + text = (String) content.get("content"); + } + } else { + text = message.getContent(); + } + + handleTextNotification(text); + } + + private void handleTextNotification(String text) { + MoonUtil.identifyFaceExpressionAndATags(context, notificationTextView, text, ImageSpan.ALIGN_BOTTOM); + notificationTextView.setMovementMethod(LinkMovementMethod.getInstance()); + } + + @Override + protected boolean isMiddleItem() { + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/thridparty/ChatRoomHttpClient.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/thridparty/ChatRoomHttpClient.java new file mode 100644 index 0000000..fa12ab0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/thridparty/ChatRoomHttpClient.java @@ -0,0 +1,231 @@ +package cn.shangyu.gdxzExpert.netease.thridparty; + +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.text.TextUtils; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONException; +import com.alibaba.fastjson.JSONObject; +import com.netease.nim.uikit.business.session.helper.MessageHelper; +import com.netease.nim.uikit.common.http.HttpClientWrapper; +import com.netease.nim.uikit.common.http.NimHttpClient; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.chatroom.model.ChatRoomInfo; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.netease.DemoCache; +import cn.shangyu.gdxzExpert.netease.DemoPrivatizationConfig; +import cn.shangyu.gdxzExpert.netease.config.DemoServers; + +/** + * 网易云信Demo聊天室Http客户端。第三方开发者请连接自己的应用服务器。 + *

+ * Created by huangjun on 2016/1/18. + */ +public class ChatRoomHttpClient { + + private static final String TAG = ChatRoomHttpClient.class.getSimpleName(); + + // code + private static final int RESULT_CODE_SUCCESS = 200; + + // api + private static final String API_NAME_CHAT_ROOM_LIST = "homeList"; + + private static final String API_NAME_CHAT_ROOM_ADDRESS = "requestAddress"; + + // header + private static final String HEADER_KEY_APP_KEY = "appkey"; + + // request + private static final String REQUEST_KEY_UID = "uid"; + + private static final String REQUEST_KEY_ROOM_ID = "roomid"; + + private static final String REQUEST_KEY_TYPE = "type"; + + // result + private static final String RESULT_KEY_RES = "res"; + + private static final String RESULT_KEY_ERROR_MSG = "errmsg"; + + private static final String RESULT_KEY_MSG = "msg"; + + private static final String RESULT_KEY_TOTAL = "total"; + + private static final String RESULT_KEY_LIST = "list"; + + private static final String RESULT_KEY_NAME = "name"; + + private static final String RESULT_KEY_CREATOR = "creator"; + + private static final String RESULT_KEY_STATUS = "status"; + + private static final String RESULT_KEY_ANNOUNCEMENT = "announcement"; + + private static final String RESULT_KEY_EXT = "ext"; + + private static final String RESULT_KEY_ROOM_ID = "roomid"; + + private static final String RESULT_KEY_BROADCAST_URL = "broadcasturl"; + + private static final String RESULT_KEY_ONLINE_USER_COUNT = "onlineusercount"; + + private static final String RESULT_KEY_ADDR = "addr"; + + public interface ChatRoomHttpCallback { + + void onSuccess(T t); + + void onFailed(int code, String errorMsg); + } + + private static ChatRoomHttpClient instance; + + public static synchronized ChatRoomHttpClient getInstance() { + if (instance == null) { + instance = new ChatRoomHttpClient(); + } + return instance; + } + + private ChatRoomHttpClient() { + NimHttpClient.getInstance().init(DemoCache.getContext()); + } + + /** + * 向网易云信Demo应用服务器请求聊天室列表 + */ + public void fetchChatRoomList(String appKey, + final ChatRoomHttpCallback> callback) { + String url = DemoServers.chatRoomAPIServer() + API_NAME_CHAT_ROOM_LIST; + if (!DemoPrivatizationConfig.isPrivateDisable(DemoCache.getContext())) { + url = DemoPrivatizationConfig.getChatListRoomUrl(DemoCache.getContext()); + } + Map headers = new HashMap<>(1); + if (TextUtils.isEmpty(appKey)) { + appKey = readAppKey(); + } + headers.put(HEADER_KEY_APP_KEY, appKey); + NimHttpClient client = NimHttpClient.getInstance(); + client.execute(url, headers, null, false, (response, code, exception) -> { + if (code != 200 || exception != null) { + LogUtil.e(TAG, "fetchChatRoomList failed : code = " + code + ", errorMsg = " + + (exception != null ? exception.getMessage() : "null")); + if (callback != null) { + callback.onFailed(code, exception != null ? exception.getMessage() : "null"); + } + return; + } + try { + // ret 0 + JSONObject res = JSONObject.parseObject(response); + // res 1 + int resCode = res.getIntValue(RESULT_KEY_RES); + if (resCode == RESULT_CODE_SUCCESS) { + // msg 1 + JSONObject msg = res.getJSONObject(RESULT_KEY_MSG); + List roomInfoList = null; + if (msg != null) { + // total 2 + roomInfoList = new ArrayList<>(msg.getIntValue(RESULT_KEY_TOTAL)); + // list 2 + JSONArray rooms = msg.getJSONArray(RESULT_KEY_LIST); + for (int i = 0; i < rooms.size(); i++) { + // room 3 + JSONObject room = rooms.getJSONObject(i); + ChatRoomInfo roomInfo = new ChatRoomInfo(); + roomInfo.setName(room.getString(RESULT_KEY_NAME)); + roomInfo.setCreator(room.getString(RESULT_KEY_CREATOR)); + roomInfo.setValidFlag(room.getIntValue(RESULT_KEY_STATUS)); + roomInfo.setAnnouncement(room.getString(RESULT_KEY_ANNOUNCEMENT)); + roomInfo.setExtension(MessageHelper.getMapFromJsonString( + room.getString(RESULT_KEY_EXT))); + roomInfo.setRoomId(room.getString(RESULT_KEY_ROOM_ID)); + roomInfo.setBroadcastUrl(room.getString(RESULT_KEY_BROADCAST_URL)); + roomInfo.setOnlineUserCount( + room.getIntValue(RESULT_KEY_ONLINE_USER_COUNT)); + roomInfoList.add(roomInfo); + } + // reply + callback.onSuccess(roomInfoList); + } else { + String errMsg = res.getString(RESULT_KEY_ERROR_MSG); + callback.onFailed(resCode, errMsg); + } + // reply + callback.onSuccess(roomInfoList); + } else { + callback.onFailed(resCode, null); + } + } catch (JSONException e) { + callback.onFailed(-1, e.getMessage()); + } catch (Exception e) { + callback.onFailed(-2, e.getMessage()); + } + }); + } + + /** + * 向网易云信Demo应用服务器请求聊天室列表 + */ + public List fetchChatRoomAddress(final String roomId, String appKey, + final String account) { + String url = DemoServers.chatRoomAPIServer() + API_NAME_CHAT_ROOM_ADDRESS; + Map headers = new HashMap<>(1); + if (TextUtils.isEmpty(appKey)) { + appKey = readAppKey(); + } + headers.put(HEADER_KEY_APP_KEY, appKey); + JSONObject jsonObject = new JSONObject(); + jsonObject.put(REQUEST_KEY_ROOM_ID, roomId); + jsonObject.put(REQUEST_KEY_UID, account); + jsonObject.put(REQUEST_KEY_TYPE, 2); + HttpClientWrapper.HttpResult result = com.netease.nim.uikit.common.http.HttpClientWrapper + .post(url, headers, jsonObject); + if (result.code == RESULT_CODE_SUCCESS && result.obj != null) { + try { + // ret 0 + JSONObject res = JSONObject.parseObject(result.obj); + // res 1 + int resCode = res.getIntValue(RESULT_KEY_RES); + if (resCode == RESULT_CODE_SUCCESS) { + // msg 1 + JSONObject msg = res.getJSONObject(RESULT_KEY_MSG); + if (msg != null) { + // addr 2 + JSONArray addressArray = msg.getJSONArray(RESULT_KEY_ADDR); + List addressList = new ArrayList<>(addressArray.size()); + for (int i = 0; i < addressArray.size(); i++) { + addressList.add(addressArray.getString(i)); // address 3 + } + // reply + return addressList; + } + } + } catch (Throwable e) { + e.printStackTrace(); + } + } + return null; + } + + + private String readAppKey() { + try { + ApplicationInfo appInfo = DemoCache.getContext().getPackageManager().getApplicationInfo( + DemoCache.getContext().getPackageName(), PackageManager.GET_META_DATA); + if (appInfo != null) { + return appInfo.metaData.getString("com.netease.nim.appKey"); + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/FadeInOutPageTransformer.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/FadeInOutPageTransformer.java new file mode 100644 index 0000000..d12f00c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/FadeInOutPageTransformer.java @@ -0,0 +1,34 @@ +package cn.shangyu.gdxzExpert.netease.ui; + +import android.annotation.SuppressLint; +import androidx.viewpager.widget.ViewPager; +import android.view.View; + + + +/** + * Viewpager 页面切换动画,只支持3.0以上版本 + *

+ * [-∞,-1]完全不可见 + * [-1, 0]从不可见到完全可见 + * [0,1]从完全可见到不可见 + * [1,∞]完全不可见 + *

+ * Created by doc on 15/1/6. + */ +public class FadeInOutPageTransformer implements ViewPager.PageTransformer { + + @SuppressLint("NewApi") + @Override + public void transformPage(View page, float position) { + if (position < -1) {//页码完全不可见 + page.setAlpha(0); + } else if (position < 0) { + page.setAlpha(1 + position); + } else if (position < 1) { + page.setAlpha(1 - position); + } else { + page.setAlpha(0); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/PagerSlidingTabStrip.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/PagerSlidingTabStrip.java new file mode 100644 index 0000000..8b6a519 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/PagerSlidingTabStrip.java @@ -0,0 +1,663 @@ +/* + * Copyright (C) 2013 Andreas Stuetz + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.netease.ui; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.os.Build; +import android.os.Parcel; +import android.os.Parcelable; +import androidx.viewpager.widget.ViewPager; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.GestureDetector; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.widget.HorizontalScrollView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.netease.nim.uikit.common.ui.drop.DropFake; +import com.netease.nim.uikit.common.ui.drop.DropManager; +import com.netease.nim.uikit.common.util.sys.ScreenUtil; + +import java.util.Locale; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.netease.main.ReminderItem; +import cn.shangyu.gdxzExpert.netease.main.ReminderSettings; + +public class PagerSlidingTabStrip extends HorizontalScrollView implements ViewPager.OnPageChangeListener { + + // @formatter:off + private static final int[] ATTRS = new int[]{android.R.attr.textSize, android.R.attr.textColor}; + + // @formatter:on + + private LinearLayout.LayoutParams tabViewLayoutParams; + + private LinearLayout tabsContainer; + + private ViewPager pager; + + private int tabCount; + + private int currentPosition = 0; + + public int getCurrentPosition() { + return currentPosition; + } + + private float currentPositionOffset = 0f; + + private Paint rectPaint; + + private Paint dividerPaint; + + private int indicatorColor = 0xFF0888ff; + + private int underlineColor = getResources().getColor(com.netease.nim.uikit.R.color.skin_page_tab_underline_color);// 0xFFD9D9D9; + + private int dividerColor = 0x00000000; + + private int checkedTextColor = com.netease.nim.uikit.R.color.color_blue_0888ff; + + private int unCheckedTextColor = com.netease.nim.uikit.R.color.action_bar_tittle_color_555555; + + private boolean textAllCaps = true; + + private int scrollOffset = 52; + + private int indicatorHeight = 3; + + private int underlineHeight = 2; + + private int dividerPadding = 12; + + private int tabPadding = 0; + + private int dividerWidth = 1; + + private int lastScrollX = 0; + + private Locale locale; + + private OnTabClickListener onTabClickListener = null; + + private OnTabDoubleTapListener onTabDoubleTapListener = null; + + private OnCustomTabListener onCustomTabListener = null; + + private boolean isFakeDropOpen = true; + + public void setFakeDropOpen(boolean isFakeDropOpen) { + this.isFakeDropOpen = isFakeDropOpen; + } + + public PagerSlidingTabStrip(Context context) { + this(context, null); + } + + public PagerSlidingTabStrip(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PagerSlidingTabStrip(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + setFillViewport(true); + setWillNotDraw(false); + + tabsContainer = new LinearLayout(context); + tabsContainer.setOrientation(LinearLayout.HORIZONTAL); + tabsContainer.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); + addView(tabsContainer); + + DisplayMetrics dm = getResources().getDisplayMetrics(); + + scrollOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, scrollOffset, dm); + indicatorHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, indicatorHeight, dm); + underlineHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, underlineHeight, dm); + dividerPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerPadding, dm); + tabPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, tabPadding, dm); + dividerWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dividerWidth, dm); + + // get system attrs (android:textSize and android:textColor) + + TypedArray a = context.obtainStyledAttributes(attrs, ATTRS); + + a.recycle(); + + // get custom attrs + + a = context.obtainStyledAttributes(attrs, com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip); + + indicatorColor = a.getColor(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsIndicatorColor, indicatorColor); + underlineColor = a.getColor(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsUnderlineColor, underlineColor); + dividerColor = a.getColor(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsDividerColor, dividerColor); + + checkedTextColor = a.getResourceId(com.netease.nim.uikit.R.styleable.TwoTextView_ttLeftTextColor, com.netease.nim.uikit.R.color.color_blue_0888ff); + unCheckedTextColor = a.getResourceId(com.netease.nim.uikit.R.styleable.TwoTextView_ttLeftTextColor, + com.netease.nim.uikit.R.color.action_bar_tittle_color_555555); + indicatorHeight = a + .getDimensionPixelSize(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsIndicatorHeight, indicatorHeight); + underlineHeight = a + .getDimensionPixelSize(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsUnderlineHeight, underlineHeight); + dividerPadding = a.getDimensionPixelSize(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsDividerPadding, dividerPadding); + tabPadding = a.getDimensionPixelSize(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsTabPaddingLeftRight, tabPadding); + scrollOffset = a.getDimensionPixelSize(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsScrollOffset, scrollOffset); + textAllCaps = a.getBoolean(com.netease.nim.uikit.R.styleable.PagerSlidingTabStrip_pstsTextAllCaps, textAllCaps); + + a.recycle(); + + rectPaint = new Paint(); + rectPaint.setAntiAlias(true); + rectPaint.setStyle(Style.FILL); + + dividerPaint = new Paint(); + dividerPaint.setAntiAlias(true); + dividerPaint.setStrokeWidth(dividerWidth); + + tabViewLayoutParams = new LinearLayout.LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f); + + if (locale == null) { + locale = getResources().getConfiguration().locale; + } + } + + // + // OnPageChangeListener + // + + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + currentPosition = position; + currentPositionOffset = positionOffset; + scrollToChild(position, (int) (positionOffset * tabsContainer.getChildAt(position).getWidth())); + + invalidate(); + } + + @Override + public void onPageScrollStateChanged(int state) { + if (state == ViewPager.SCROLL_STATE_IDLE) { + scrollToChild(pager.getCurrentItem(), 0); + } + } + + @Override + public void onPageSelected(int position) { + setChooseTabViewTextColor(position); + } + + // + // OnPageChangeListener + // + + public void setViewPager(ViewPager pager) { + this.pager = pager; + + if (pager.getAdapter() == null) { + throw new IllegalStateException("ViewPager does not have adapter instance."); + } + + notifyDataSetChanged(); + } + + public void notifyDataSetChanged() { + + tabsContainer.removeAllViews(); + + tabCount = pager.getAdapter().getCount(); + + for (int i = 0; i < tabCount; i++) { + addTabView(i, pager.getAdapter().getPageTitle(i).toString()); + } + + // updateTabStyles(); + + getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { + + @SuppressWarnings("deprecation") + @SuppressLint("NewApi") + @Override + public void onGlobalLayout() { + + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + getViewTreeObserver().removeGlobalOnLayoutListener(this); + } else { + getViewTreeObserver().removeOnGlobalLayoutListener(this); + } + + currentPosition = pager.getCurrentItem(); + setChooseTabViewTextColor(currentPosition); + scrollToChild(currentPosition, 0); + } + }); + + } + + private void setChooseTabViewTextColor(int position) { + int childCount = tabsContainer.getChildCount(); + LinearLayout tabView; + TextView textView; + for (int i = 0; i < childCount; ++i) { + tabView = (LinearLayout) tabsContainer.getChildAt(i); + textView = (TextView) tabView.findViewById(R.id.tab_title_label); + if (i == position) { + textView.setTextColor(getResources().getColor(checkedTextColor)); + } else { + textView.setTextColor(getResources().getColor(unCheckedTextColor)); + } + } + } + + private void addTabView(final int position, String title) { + View tabView = null; + boolean screenAdaptation = false; + final LayoutInflater inflater = LayoutInflater.from(getContext()); + if (this.onCustomTabListener != null) { + int tabResId = onCustomTabListener.getTabLayoutResId(position); + if (tabResId != 0) { + tabView = inflater.inflate(tabResId, null); + } else { + tabView = onCustomTabListener.getTabLayoutView(inflater, position); + } + screenAdaptation = onCustomTabListener.screenAdaptation(); + } + if (tabView == null) { + tabView = inflater.inflate(R.layout.tab_layout_main, null); + } + TextView titleTV = ((TextView) tabView.findViewById(R.id.tab_title_label)); + final boolean needAdaptation = ScreenUtil.density <= 1.5 && screenAdaptation; + final Resources resources = getContext().getResources(); + if (titleTV != null) { + titleTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, needAdaptation ? resources.getDimensionPixelSize(com.netease.nim.uikit.R.dimen.text_size_11) : resources.getDimensionPixelSize(com.netease.nim.uikit.R.dimen.text_size_15)); + titleTV.setText(title); + } + + final DropFake unreadTV = ((DropFake) tabView.findViewById(R.id.tab_new_msg_label)); + if (unreadTV != null && isFakeDropOpen) { + unreadTV.setTouchListener(new DropFake.ITouchListener() { + @Override + public void onDown() { + DropManager.getInstance().setCurrentId(String.valueOf(position)); + DropManager.getInstance().down(unreadTV, unreadTV.getText()); + } + + @Override + public void onMove(float curX, float curY) { + DropManager.getInstance().move(curX, curY); + } + + @Override + public void onUp() { + DropManager.getInstance().up(); + } + }); + + //unreadTV.setTextSize(TypedValue.COMPLEX_UNIT_PX, needAdaptation ? resources.getDimensionPixelSize(R.dimen.text_size_9) : resources.getDimensionPixelSize(R.dimen.text_size_12)); + } + addTab(position, tabView); + } + + private void addTab(final int position, View tab) { + tab.setFocusable(true); + tab.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (pager.getCurrentItem() == position && onTabClickListener != null) { + onTabClickListener.onCurrentTabClicked(position); + } else { + pager.setCurrentItem(position, true); + } + } + }); + addTabDoubleTapListener(position, tab); + tab.setPadding(tabPadding, 0, tabPadding, 0); + tabsContainer.addView(tab, position, tabViewLayoutParams); + } + + private void addTabDoubleTapListener(final int position, View tab) { + final GestureDetector gd = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onDoubleTap(MotionEvent e) { + if (onTabDoubleTapListener != null) + onTabDoubleTapListener.onCurrentTabDoubleTap(position); + + return true; + } + }); + + tab.setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + return gd.onTouchEvent(event); + } + }); + } + + public void updateTab(int index, ReminderItem item) { + LinearLayout tabView = (LinearLayout) tabsContainer.getChildAt(index); + ImageView indicatorView = (ImageView) tabView.findViewById(R.id.tab_new_indicator); + final DropFake unreadTV = ((DropFake) tabView.findViewById(R.id.tab_new_msg_label)); + + if (item == null || unreadTV == null || indicatorView == null) { + unreadTV.setVisibility(View.GONE); + indicatorView.setVisibility(View.GONE); + return; + } + int unread = item.unread(); + boolean indicator = item.indicator(); + unreadTV.setVisibility(unread > 0 ? View.VISIBLE : View.GONE); + indicatorView.setVisibility(indicator ? View.VISIBLE : View.GONE); + if (unread > 0) { + unreadTV.setText(String.valueOf(ReminderSettings.unreadMessageShowRule(unread))); + } + } + + private void scrollToChild(int position, int offset) { + + if (tabCount == 0) { + return; + } + + int newScrollX = tabsContainer.getChildAt(position).getLeft() + offset; + + if (position > 0 || offset > 0) { + newScrollX -= scrollOffset; + } + + if (newScrollX != lastScrollX) { + lastScrollX = newScrollX; + scrollTo(newScrollX, 0); + } + + } + + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + if (isInEditMode() || tabCount == 0) { + return; + } + + final int height = getHeight(); + + // draw underline + + rectPaint.setColor(underlineColor); + canvas.drawRect(0, height - underlineHeight, tabsContainer.getWidth(), height, rectPaint); + + // draw indicator line + rectPaint.setColor(indicatorColor); + + // default: line below current tab + View currentTab = tabsContainer.getChildAt(currentPosition); + float lineLeft = currentTab.getLeft(); + float lineRight = currentTab.getRight(); + + // if there is an offset, start interpolating left and right coordinates between current and next tab + if (currentPositionOffset > 0f && currentPosition < tabCount - 1) { + + View nextTab = tabsContainer.getChildAt(currentPosition + 1); + final float nextTabLeft = nextTab.getLeft(); + final float nextTabRight = nextTab.getRight(); + + lineLeft = (currentPositionOffset * nextTabLeft + (1f - currentPositionOffset) * lineLeft); + lineRight = (currentPositionOffset * nextTabRight + (1f - currentPositionOffset) * lineRight); + } + + canvas.drawRect(lineLeft, height - indicatorHeight, lineRight, height, rectPaint); + + // draw divider + + // dividerPaint.setColor(dividerColor); + // for (int i = 0; i < tabCount - 1; i++) { + // View tab = tabsContainer.getChildAt(i); + // canvas.drawLine(tab.getRight(), dividerPadding, tab.getRight(), height - dividerPadding, dividerPaint); + // } + } + + public void setIndicatorColor(int indicatorColor) { + this.indicatorColor = indicatorColor; + invalidate(); + } + + public void setIndicatorColorResource(int resId) { + this.indicatorColor = getResources().getColor(resId); + invalidate(); + } + + public int getIndicatorColor() { + return this.indicatorColor; + } + + public void setIndicatorHeight(int indicatorLineHeightPx) { + this.indicatorHeight = indicatorLineHeightPx; + invalidate(); + } + + public int getIndicatorHeight() { + return indicatorHeight; + } + + public void setUnderlineColor(int underlineColor) { + this.underlineColor = underlineColor; + invalidate(); + } + + public void setUnderlineColorResource(int resId) { + this.underlineColor = getResources().getColor(resId); + invalidate(); + } + + public int getUnderlineColor() { + return underlineColor; + } + + public void setDividerColor(int dividerColor) { + this.dividerColor = dividerColor; + invalidate(); + } + + public void setDividerColorResource(int resId) { + this.dividerColor = getResources().getColor(resId); + invalidate(); + } + + public int getDividerColor() { + return dividerColor; + } + + public void setCheckedTextColorResource(int resId) { + this.checkedTextColor = resId; + invalidate(); + } + + public void setUnderlineHeight(int underlineHeightPx) { + this.underlineHeight = underlineHeightPx; + invalidate(); + } + + public int getUnderlineHeight() { + return underlineHeight; + } + + public void setDividerPadding(int dividerPaddingPx) { + this.dividerPadding = dividerPaddingPx; + invalidate(); + } + + public int getDividerPadding() { + return dividerPadding; + } + + public void setScrollOffset(int scrollOffsetPx) { + this.scrollOffset = scrollOffsetPx; + invalidate(); + } + + public int getScrollOffset() { + return scrollOffset; + } + + public boolean isTextAllCaps() { + return textAllCaps; + } + + public void setAllCaps(boolean textAllCaps) { + this.textAllCaps = textAllCaps; + } + + public int getTabPaddingLeftRight() { + return tabPadding; + } + + @Override + public void onRestoreInstanceState(Parcelable state) { + SavedState savedState = (SavedState) state; + super.onRestoreInstanceState(savedState.getSuperState()); + // currentPosition = savedState.currentPosition; + currentPosition = 0; + requestLayout(); + } + + @Override + public Parcelable onSaveInstanceState() { + Parcelable superState = super.onSaveInstanceState(); + SavedState savedState = new SavedState(superState); + savedState.currentPosition = currentPosition; + return savedState; + } + + static class SavedState extends BaseSavedState { + + int currentPosition; + + public SavedState(Parcelable superState) { + super(superState); + } + + private SavedState(Parcel in) { + super(in); + currentPosition = in.readInt(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(currentPosition); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + + @Override + public SavedState createFromParcel(Parcel in) { + return new SavedState(in); + } + + @Override + public SavedState[] newArray(int size) { + return new SavedState[size]; + } + }; + } + + public void setOnTabClickListener(OnTabClickListener onTabClickListener) { + this.onTabClickListener = onTabClickListener; + } + + public void setOnTabDoubleTapListener(OnTabDoubleTapListener onTabDoubleTapListener) { + this.onTabDoubleTapListener = onTabDoubleTapListener; + } + + /** + * must invoke before setViewPager + * + * @param onCustomTabListener + */ + public void setOnCustomTabListener(OnCustomTabListener onCustomTabListener) { + this.onCustomTabListener = onCustomTabListener; + } + + /** + * TAB 的点击监�? + */ + public interface OnTabClickListener { + + public void onCurrentTabClicked(int position); + } + + /** + * TAB 的双击监�? + */ + public interface OnTabDoubleTapListener { + + public void onCurrentTabDoubleTap(int position); + } + + /** + * 获取每个TAB的自定义布局 + */ + public static class OnCustomTabListener { + + /** + * �?要自定义TAB的布�?�? + * 重写该方法,返回对应的layout id + * + * @param position + * @return + */ + public int getTabLayoutResId(int position) { + return 0; + } + + /** + * �?要自定义TAB的布�? + * 重写该方法,直接返回对应的view + * + * @param inflater + * @param position + * @return + */ + public View getTabLayoutView(LayoutInflater inflater, int position) { + return null; + } + + /** + * 是否�?要小屏幕适配,只在存在多个tab,且tab的布�?较紧时�?�配,现在只用于主界面 + * + * @return + */ + public boolean screenAdaptation() { + return false; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/SlidingTabPagerAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/SlidingTabPagerAdapter.java new file mode 100644 index 0000000..6c87403 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/ui/SlidingTabPagerAdapter.java @@ -0,0 +1,130 @@ +package cn.shangyu.gdxzExpert.netease.ui; + +import android.content.Context; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.netease.nim.uikit.common.fragment.TabFragment; + + + +public abstract class SlidingTabPagerAdapter extends FragmentPagerAdapter implements TabFragment.State, + PagerSlidingTabStrip.OnTabClickListener, PagerSlidingTabStrip.OnTabDoubleTapListener { + + protected final TabFragment[] fragments; + + protected final Context context; + + private final ViewPager pager; + + public abstract int getCacheCount(); + + private int lastPostion = 0; + + public SlidingTabPagerAdapter(FragmentManager fm, int count, Context context, ViewPager pager) { + super(fm); + this.fragments = new TabFragment[count]; + this.context = context; + this.pager = pager; + lastPostion = 0; + } + + @Override + public TabFragment getItem(int pos) { + return fragments[pos]; + } + + @Override + public abstract int getCount(); + + @Override + public abstract CharSequence getPageTitle(int position); + + @Override + public boolean isCurrent(TabFragment f) { + // FROM PAGER + int current = pager.getCurrentItem(); + + // TRAVEL + for (int index = 0; index < fragments.length; index++) { + // CATCH + if (f == fragments[index]) { + // MATCH + if (index == current) { + return true; + } + } + } + + // ANY PROBLEM + return false; + } + + public void onPageSelected(int position) { + TabFragment fragment = getFragmentByPosition(position); + + // INSTANCE + if (fragment == null) { + return; + } + + fragment.onCurrent(); + onLeave(position); + } + + private void onLeave(int position) { + TabFragment fragment = getFragmentByPosition(lastPostion); + lastPostion = position; + // INSTANCE + if (fragment == null) { + return; + } + fragment.onLeave(); + } + + public void onPageScrolled(int position) { + TabFragment fragment = getFragmentByPosition(position); + + // INSTANCE + if (fragment == null) { + return; + } + + fragment.onCurrentScrolled(); + onLeave(position); + } + + private TabFragment getFragmentByPosition(int position) { + // IDX + if (position < 0 || position >= fragments.length) { + return null; + } + return fragments[position]; + } + + @Override + public void onCurrentTabClicked(int position) { + + TabFragment fragment = getFragmentByPosition(position); + + // INSTANCE + if (fragment == null) { + return; + } + + fragment.onCurrentTabClicked(); + } + + @Override + public void onCurrentTabDoubleTap(int position) { + TabFragment fragment = getFragmentByPosition(position); + + // INSTANCE + if (fragment == null) { + return; + } + + fragment.onCurrentTabDoubleTap(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/uinfo/UserInfoHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/uinfo/UserInfoHelper.java new file mode 100644 index 0000000..b91b7e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/uinfo/UserInfoHelper.java @@ -0,0 +1,355 @@ +package cn.shangyu.gdxzExpert.netease.uinfo; + +import static cn.shangyu.gdxzExpert.utils.Url.urlHtml; + +import android.text.TextUtils; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.business.session.constant.Extras; +import com.netease.nim.uikit.business.team.helper.SuperTeamHelper; +import com.netease.nim.uikit.business.team.helper.TeamHelper; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.msg.MsgService; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.msg.model.RecentContact; +import com.netease.nimlib.sdk.uinfo.UserService; +import com.netease.nimlib.sdk.uinfo.model.NimUserInfo; +import com.netease.nimlib.sdk.uinfo.model.UserInfo; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.PatientModel; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class UserInfoHelper { + + // 获取用户显示在标题栏和最近联系人中的名字 + public static String getUserTitleName(String id, SessionTypeEnum sessionType) { + if (sessionType == SessionTypeEnum.P2P) { + if (NimUIKit.getAccount().equals(id)) { + return "我的电脑"; + } else { + return getUserDisplayName(id); + } + } else if (sessionType == SessionTypeEnum.Team) { + return TeamHelper.getTeamName(id); + } else if (sessionType == SessionTypeEnum.Ysf) { + return "我的客服"; + } + return id; + } + + /** + * @param account 用户帐号 + * @return + */ + public static String getUserDisplayName(String account) { + if(account==null) + return null; +// if(!account.contains("#")) +// { +// return getUserName(account); +// } +// else +// { +// return getUserName(account.split("#")[1]); +// } + + if(!account.contains("#")) + account= Constant.Patient_AppKey+account; + PatientModel Pm= PatientSqlManager.getPatientInfo(account); + if (Pm != null && Pm.getRealName() != null) { + return Pm.getRealName(); + } + else if(Pm != null && Pm.getNickName() != null) + { + return Pm.getNickName(); + } + else { + return getUserName(account.split("#")[1]); + + + } + + + } + /** + * @param account 用户帐号 + * @return 用户头像 + */ + public static String getUserDisplayPhoto(String account) { + + if(account==null) + return "null"; +// if(account.contains("#")) +// { +// account=account.split("#")[1]; +// } +// account=account.toLowerCase(); +// if(account.equals(NimUIKit.getAccount())) { +// return urlHtml + SharePrefUtil.getString(UIUtils.getContext(), "photo", ""); +// } +// UserInfo userInfo = NimUIKit.getUserInfoProvider().getUserInfo(account); +// if (userInfo != null && !TextUtils.isEmpty(userInfo.getAvatar())) { +// +// return userInfo.getAvatar(); +// } + + +// else { +// if(account.equals(NimUIKit.getAccount())) { +// return urlHtml + SharePrefUtil.getString(UIUtils.getContext(), "photo", ""); +// } +// else +// { +// if(!account.contains("#")) +// account= Constant.Patient_AppKey+account; +// PatientModel Pm= PatientSqlManager.getPatientInfo(account); +// if (Pm != null && Pm.getPhoto() != null) { +// return Url.urlHtml+Pm.getPhoto(); +// } +// else { +// return account; +// } +// } +// } + + + + if(account.equals(NimUIKit.getAccount())) { + return urlHtml + SharePrefUtil.getString(UIUtils.getContext(), "photo", ""); + } + else + { + if(!account.contains("#")) + account=Constant.Patient_AppKey+account; + PatientModel Pm= PatientSqlManager.getPatientInfo(account); + if (Pm != null && Pm.getPhoto() != null) { + return Url.urlHtml+Pm.getPhoto(); + } + else { + return null; + } + } + + + } + /** + * 获取消息发送者的展示名称,优先级序列:备注>群昵称>用户名>账号 + * + * @param account 用户账号 + * @param sessionType 所处会话的类型 + * @param sessionId 所处会话的ID + * @return 发送者的展示名称 + */ + public static String getUserDisplayNameInSession(String account, SessionTypeEnum sessionType, String sessionId) { + if (TextUtils.isEmpty(account)) { + return ""; + } + + // 备注 + String alias = NimUIKit.getContactProvider().getAlias(account); + if (!TextUtils.isEmpty(alias)) { + return alias; + } + + // 群昵称 + String teamNick = null; + if (sessionType == SessionTypeEnum.Team) { + teamNick = TeamHelper.getTeamNick(sessionId, account); + } else if (sessionType == SessionTypeEnum.SUPER_TEAM) { + teamNick = SuperTeamHelper.getTeamNick(sessionId, account); + } + if (!TextUtils.isEmpty(teamNick)) { + return teamNick; + } + + // 用户名 + UserInfo userInfo = NimUIKit.getUserInfoProvider().getUserInfo(account); + if (userInfo != null && !TextUtils.isEmpty(userInfo.getName())) { + return userInfo.getName(); + } + + // 账号 + return account; + + } + + // 获取用户原本的昵称 + public static String getUserName(String account) { +// Log.d("gdxzname","account "+account); + if(account==null) + return "null"; + if(account.contains("#")) + { + account=account.split("#")[1]; + } + account=account.toLowerCase(); + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(account, SessionTypeEnum.P2P); + if(recentContact!=null) + { + Map ext = recentContact.getExtension(); +// Log.d("gdxzname","nicknemerecentext "+ext); + if(ext!=null) + { + if(ext.get(Extras.EXTRA_GDXZ_NICKNAME)!=null) + { + String nickneme=ext.get(Extras.EXTRA_GDXZ_NICKNAME).toString(); + if(!StringUtil.isEmpty(nickneme)) + { +// Log.d("gdxzname","nicknemerecent "+nickneme); + return nickneme; + } + + } + } + } + IMMessage im =NIMClient.getService(MsgService.class).queryLastMessage(account, SessionTypeEnum.P2P); +// Log.d("gdxzname","im "); + if(im!=null) + { + Map ext = im.getRemoteExtension(); + if(ext!=null) + { + if(ext.get(Extras.EXTRA_GDXZ_NICKNAME)!=null) + { + String nickneme=ext.get(Extras.EXTRA_GDXZ_NICKNAME).toString(); +// Log.d("gdxzname","nicknemehreh "+nickneme); + if(!StringUtil.isEmpty(nickneme)) + { + + return nickneme; + } + + } + } + } + + + NimUserInfo userInfo = NIMClient.getService(UserService.class).getUserInfo(account); +// Log.d("gdxzname","userInfo "+userInfo); +// UserInfo userInfo1= NimUIKit.getUserInfoProvider().getUserInfo(account); +// Log.d("gdxzname","userInfo1 "+userInfo1); + if (userInfo != null && !TextUtils.isEmpty(userInfo.getName())) { +// Log.d("gdxzname","name "+userInfo.getName()); + return userInfo.getName(); + } +// else { +// if(!account.contains("#")) +// account=Constant.Patient_AppKey+account; +// PatientModel Pm= PatientSqlManager.getPatientInfo(account); +// if (Pm != null && Pm.getRealName() != null) { +// return Pm.getRealName(); +// } +// else if(Pm != null && Pm.getNickName() != null) +// { +// return Pm.getNickName(); +// } +// else { +//// return getUserName(account.split("#")[1]); +// return account; +// +// } + return account; +// } + } + + /** + * @param account 账号 + * @param selfNameDisplay 如果是自己,则显示内容 + * @return + */ + public static String getUserDisplayNameEx(String account, String selfNameDisplay) { + if (account.equals(NimUIKit.getAccount())) { + return selfNameDisplay; + } + + return getUserDisplayName(account); + } + + /** + * @param account 对方的id/群id + * @param sessionType 会话类型 + */ + public static Boolean isPatient(java.lang.String account, SessionTypeEnum sessionType) + { + if(account.contains("#")) + { + account=account.split("#")[1]; + } + account=account.toLowerCase(); + IMMessage im =NIMClient.getService(MsgService.class).queryLastMessage(account, sessionType); + if(im==null) + { + return false; + } +// Log.d("gdxzname","imgetContent "+im.getContent()); + Map ext = im.getRemoteExtension(); +// Log.d("gdxzname","ext "+ext.toString()); + if(ext!=null) + { + if(ext.get(Extras.EXTRA_GDXZ_TYPE)!=null) + { + String type=ext.get(Extras.EXTRA_GDXZ_TYPE).toString(); +// Log.d("gdxzname","type "+type); + switch (type) + { + case "general": + return true; + + case "consult": + return false; + + + } + } + } + + return false; + } + public static void updatePatientInfo(String account, SessionTypeEnum sessionType, String nikename) + { + if(account==null) + return ; + if(account.contains("#")) + { + account=account.split("#")[1]; + } + account=account.toLowerCase(); + Map ext; + IMMessage im = NIMClient.getService(MsgService.class).queryLastMessage(account, sessionType); + if(im==null||im.getRemoteExtension()==null) + { +// Log.d("gdxzname","nolast "); + ext=new HashMap<>(); +// return; + } + else + { + ext= im.getRemoteExtension(); + } + + ext.put(Extras.EXTRA_GDXZ_NICKNAME,nikename); +// im.setLocalExtension(ext); +// NIMClient.getService(MsgService.class).updateIMMessage(im); + + RecentContact recentContact= NIMClient.getService(MsgService.class).queryRecentContact(account, sessionType); + if(recentContact==null) + { + return; + } + recentContact.setExtension(ext); + NIMClient.getService(MsgService.class).updateRecent(recentContact); +// boolean isMyFriend = NIMClient.getService(FriendService.class).isMyFriend(account); + +// Log.d("gdxzname","nicknemerecentext1 "+recentContact.getExtension()); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/LogHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/LogHelper.java new file mode 100644 index 0000000..a4cfba8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/LogHelper.java @@ -0,0 +1,33 @@ +package cn.shangyu.gdxzExpert.netease.util; + + +/** + * Created by winnie on 2017/12/21. + */ + +public class LogHelper { + + public static void init() { +// AVChatKit.setiLogUtil(new ILogUtil() { +// @Override +// public void ui(String msg) { +// LogUtil.ui(msg); +// } +// +// @Override +// public void e(String tag, String msg) { +// LogUtil.e(tag, msg); +// } +// +// @Override +// public void i(String tag, String msg) { +// LogUtil.i(tag, msg); +// } +// +// @Override +// public void d(String tag, String msg) { +// LogUtil.d(tag, msg); +// } +// }); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/AppCrashHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/AppCrashHandler.java new file mode 100644 index 0000000..fe758cf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/AppCrashHandler.java @@ -0,0 +1,51 @@ +package cn.shangyu.gdxzExpert.netease.util.crash; + +import android.content.Context; + +import java.lang.Thread.UncaughtExceptionHandler; + +public class AppCrashHandler { + + private Context context; + + private UncaughtExceptionHandler uncaughtExceptionHandler; + + private static AppCrashHandler instance; + + private AppCrashHandler(Context context) { + this.context = context; + + // get default + uncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler(); + + // install + Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread thread, final Throwable ex) { + // save log + saveException(ex, true); + + // uncaught + uncaughtExceptionHandler.uncaughtException(thread, ex); + } + }); + } + + public static AppCrashHandler getInstance(Context mContext) { + if (instance == null) { + instance = new AppCrashHandler(mContext); + } + + return instance; + } + + public final void saveException(Throwable ex, boolean uncaught) { + CrashSaver.save(context, ex, uncaught); + } + + public void setUncaughtExceptionHandler(UncaughtExceptionHandler handler) { + if (handler != null) { + this.uncaughtExceptionHandler = handler; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSaver.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSaver.java new file mode 100644 index 0000000..f15bd1b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSaver.java @@ -0,0 +1,122 @@ +package cn.shangyu.gdxzExpert.netease.util.crash; + +import android.content.Context; +import android.text.TextUtils; + +import com.netease.nim.uikit.common.util.storage.StorageType; +import com.netease.nim.uikit.common.util.storage.StorageUtil; +import com.netease.nim.uikit.common.util.string.MD5; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.LineNumberReader; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.text.SimpleDateFormat; +import java.util.Date; + +class CrashSaver { + + public static final void save(Context context, Throwable ex, + boolean uncaught) { + + if (!StorageUtil.isExternalStorageExist()) {// 如果没有sdcard,则不存储 + return; + } + Writer writer = null; + PrintWriter printWriter = null; + String stackTrace = ""; + try { + writer = new StringWriter(); + printWriter = new PrintWriter(writer); + ex.printStackTrace(printWriter); + Throwable cause = ex.getCause(); + while (cause != null) { + cause.printStackTrace(printWriter); + cause = cause.getCause(); + } + stackTrace = writer.toString(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (writer != null) { + try { + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (printWriter != null) { + printWriter.close(); + } + } + String signature = stackTrace.replaceAll("\\([^\\(]*\\)", ""); + String filename = MD5.getStringMD5(signature); + if (TextUtils.isEmpty(filename)) { + return; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date date = new Date(); + String timestamp = sdf.format(date); + BufferedWriter mBufferedWriter = null; + try { + File mFile = new File(StorageUtil.getWritePath( + filename + ".crashlog", StorageType.TYPE_LOG)); + File pFile = mFile.getParentFile(); + if (!pFile.exists()) {// 如果文件夹不存在,则先创建文件夹 + pFile.mkdirs(); + } + int count = 1; + if (mFile.exists()) { + LineNumberReader reader = null; + try { + reader = new LineNumberReader(new FileReader(mFile)); + String line = reader.readLine(); + if (line.startsWith("count")) { + int index = line.indexOf(":"); + if (index != -1) { + String count_str = line.substring(++index); + if (count_str != null) { + count_str = count_str.trim(); + count = Integer.parseInt(count_str); + count++; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (Exception e) { + e.printStackTrace(); + } + + } + } + mFile.delete(); + } + + mFile.createNewFile(); + + mBufferedWriter = new BufferedWriter(new FileWriter(mFile, true));// 追加模式写文件 + mBufferedWriter.append(CrashSnapshot.snapshot(context, uncaught, timestamp, stackTrace, count)); + mBufferedWriter.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (mBufferedWriter != null) { + try { + mBufferedWriter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSnapshot.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSnapshot.java new file mode 100644 index 0000000..25ec407 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/crash/CrashSnapshot.java @@ -0,0 +1,239 @@ +package cn.shangyu.gdxzExpert.netease.util.crash; + +import android.annotation.SuppressLint; +import android.app.ActivityManager; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Build; +import android.os.Environment; +import android.os.StatFs; +import android.provider.Settings; +import android.provider.Settings.Secure; +import android.text.TextUtils; + +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.util.sys.NetworkUtil; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Locale; +import java.util.Map; +import java.util.regex.Pattern; + +import cn.shangyu.gdxzExpert.netease.util.sys.InstallUtil; +import cn.shangyu.gdxzExpert.netease.util.sys.SysInfoUtil; + + +public class CrashSnapshot { + + private static long mTotalMemory = -1; + + /** + * 检测手机是否Rooted + * + * @return + */ + private static boolean isRooted() { + boolean isSdk = isGoogleSdk(); + Object tags = Build.TAGS; + if ((!isSdk) && (tags != null) + && (((String) tags).contains("test-keys"))) { + return true; + } + if (new File("/system/app/Superuser.apk").exists()) { + return true; + } + if ((!isSdk) && (new File("/system/xbin/su").exists())) { + return true; + } + return false; + } + + private static boolean isGoogleSdk() { + String str = Settings.Secure.getString(NimUIKit.getContext().getContentResolver(), Secure.ANDROID_ID); + return ("sdk".equals(Build.PRODUCT)) + || ("google_sdk".equals(Build.PRODUCT)) || (str == null); + } + + /** + * 获取手机剩余电量 + * + * @return + */ + private static String battery() { + IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); + Intent intent = NimUIKit.getContext().registerReceiver(null, filter); + int level = intent.getIntExtra("level", -1); + int scale = intent.getIntExtra("scale", -1); + if (scale == -1) { + return "--"; + } else { + return String.format(Locale.US, "%d %%", (level * 100) / scale); + } + } + + private static long getAvailMemory() { + ActivityManager am = (ActivityManager) NimUIKit.getContext() + .getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); + am.getMemoryInfo(mi); + return mi.availMem; + } + + private static String parseFile(File file, String filter) { + String str = null; + if (file.exists()) { + BufferedReader br = null; + try { + br = new BufferedReader(new FileReader(file), 1024); + String line; + while ((line = br.readLine()) != null) { + Pattern pattern = Pattern.compile("\\s*:\\s*"); + String[] ret = pattern.split(line, 2); + if (ret != null && ret.length > 1 && ret[0].equals(filter)) { + str = ret[1]; + break; + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return str; + } + + private static long getSize(String size, String uint, int factor) { + return Long.parseLong(size.split(uint)[0].trim()) * factor; + } + + private static synchronized long getTotalMemory() { + if (mTotalMemory == -1) { + long total = 0L; + String str; + try { + if (!TextUtils.isEmpty(str = parseFile( + new File("/proc/meminfo"), "MemTotal"))) { + str = str.toUpperCase(Locale.US); + if (str.endsWith("KB")) { + total = getSize(str, "KB", 1024); + } else if (str.endsWith("MB")) { + total = getSize(str, "MB", 1048576); + } else if (str.endsWith("GB")) { + total = getSize(str, "GB", 1073741824); + } else { + total = -1; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + mTotalMemory = total; + } + return mTotalMemory; + } + + @SuppressWarnings("deprecation") + @SuppressLint("NewApi") + private static long[] getSdCardMemory() { + long[] sdCardInfo = new long[2]; + String state = Environment.getExternalStorageState(); + if (Environment.MEDIA_MOUNTED.equals(state)) { + File sdcardDir = Environment.getExternalStorageDirectory(); + StatFs sf = new StatFs(sdcardDir.getPath()); + if (Build.VERSION.SDK_INT >= 18) { + long bSize = sf.getBlockSizeLong(); + long bCount = sf.getBlockCountLong(); + long availBlocks = sf.getAvailableBlocksLong(); + sdCardInfo[0] = bSize * bCount; + sdCardInfo[1] = bSize * availBlocks; + } else { + long bSize = sf.getBlockSize(); + long bCount = sf.getBlockCount(); + long availBlocks = sf.getAvailableBlocks(); + sdCardInfo[0] = bSize * bCount; + sdCardInfo[1] = bSize * availBlocks; + } + } + return sdCardInfo; + } + + private static String disk() { + long[] info = getSdCardMemory(); + long total = info[0]; + long avail = info[1]; + if (total <= 0) { + return "--"; + } else { + float ratio = (float) ((avail * 100) / total); + return String.format(Locale.US, "%.01f%% [%s]", ratio, getSizeWithUnit(total)); + } + } + + private static String ram() { + long total = getTotalMemory(); + long avail = getAvailMemory(); + if (total <= 0) { + return "--"; + } else { + float ratio = (float) ((avail * 100) / total); + return String.format(Locale.US, "%.01f%% [%s]", ratio, getSizeWithUnit(total)); + } + } + + private static String getSizeWithUnit(long size) { + if (size >= 1073741824) { + float i = (float) (size / 1073741824); + return String.format(Locale.US, "%.02f GB", i); + } else if (size >= 1048576) { + float i = (float) (size / 1048576); + return String.format(Locale.US, "%.02f MB", i); + } else { + float i = (float) (size / 1024); + return String.format(Locale.US, "%.02f KB", i); + } + } + + + public static String snapshot(Context context, boolean uncaught, String timestamp, String trace, int count) { + Map info = new LinkedHashMap(); + info.put("count: ", String.valueOf(count)); + info.put("time: ", timestamp); + info.put("device: ", SysInfoUtil.getPhoneModelWithManufacturer()); + info.put("android: ", SysInfoUtil.getOsInfo()); + info.put("system: ", Build.DISPLAY); + info.put("battery: ", battery()); + info.put("rooted: ", isRooted() ? "yes" : "no"); + info.put("ram: ", ram()); + info.put("disk: ", disk()); + info.put("ver: ", String.format("%d", InstallUtil.getVersionCode(context))); + info.put("caught: ", uncaught ? "no" : "yes"); + info.put("network: ", NetworkUtil.getNetworkInfo(context)); + Iterator> iterator = info.entrySet().iterator(); + StringBuilder sb = new StringBuilder(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (entry != null) { + sb.append(entry.getKey()).append(entry.getValue()); + sb.append(System.getProperty("line.separator")); + } + } + sb.append(System.getProperty("line.separator")); + sb.append(trace); + sb.append(System.getProperty("line.separator")); + sb.append(System.getProperty("line.separator")); + sb.append(System.getProperty("line.separator")); + return sb.toString(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/InstallUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/InstallUtil.java new file mode 100644 index 0000000..f016c6d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/InstallUtil.java @@ -0,0 +1,116 @@ +package cn.shangyu.gdxzExpert.netease.util.sys; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.net.Uri; +import android.text.TextUtils; + +import com.netease.nim.uikit.api.NimUIKit; + +import java.io.File; + +public class InstallUtil { + private static final String TAG = "InstallUtil"; + + private static int versionCode; + + private static String versionName; + + /** + * 是否已安装app + * + * @param context + * @param packageName + * @return + */ + public static boolean isAppInstalled(Context context, String packageName) { + try { + if (TextUtils.isEmpty(packageName)) + return false; + return context.getPackageManager().getPackageInfo(packageName, PackageManager.GET_ACTIVITIES) != null; + } catch (NameNotFoundException localNameNotFoundException) { + return false; + } + } + + /** + * 打开app + * + * @param packageName + * @param context + */ + public static void openApp(Context context, String packageName) { + PackageManager packageManager = context.getPackageManager(); + Intent intent = packageManager.getLaunchIntentForPackage(packageName); + if (intent != null) + context.startActivity(intent); + } + + /** + * 某个app的版本号,未安装时返回null + */ + public static final String getVersionName(Context context, String packageName) { + try { + PackageInfo pi = context.getPackageManager().getPackageInfo(packageName, 0); + if (pi != null) { + return pi.versionName; + } else { + return null; + } + } catch (NameNotFoundException e) { + return null; + } + } + + public static final int getVersionCode(Context context) { + if (versionCode == 0) { + loadVersionInfo(context); + } + + return versionCode; + } + + /** + * 易信版本号 + */ + public static final String getVersionName(Context context) { + if (TextUtils.isEmpty(versionName)) { + loadVersionInfo(context); + } + + return versionName; + } + + private static final void loadVersionInfo(Context context) { + try { + PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + if (pi != null) { + versionCode = pi.versionCode; + versionName = pi.versionName; + } + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + } + + /** + * 安装apk文件 + */ + public static void installApk(String filepath) { + NimUIKit.getContext().startActivity(getInstallApkIntent(filepath)); + } + + /** + * 安装apk文件 + */ + private static Intent getInstallApkIntent(String filepath) { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + File file = new File(filepath); + intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); + return intent; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/SysInfoUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/SysInfoUtil.java new file mode 100644 index 0000000..c05ddb7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/util/sys/SysInfoUtil.java @@ -0,0 +1,69 @@ +package cn.shangyu.gdxzExpert.netease.util.sys; + +import android.app.ActivityManager; +import android.app.ActivityManager.RunningTaskInfo; +import android.content.Context; +import android.os.Build; +import android.os.PowerManager; + +import java.util.Iterator; +import java.util.List; + +public class SysInfoUtil { + public static final String getOsInfo() { + return android.os.Build.VERSION.RELEASE; + } + + public static final String getPhoneModelWithManufacturer() { + return Build.MANUFACTURER + " " + android.os.Build.MODEL; + } + + public static final String getPhoneMode() { + return Build.MODEL; + } + + public static final boolean isAppOnForeground(Context context) { + ActivityManager manager = (ActivityManager) context + .getApplicationContext().getSystemService( + Context.ACTIVITY_SERVICE); + String packageName = context.getApplicationContext().getPackageName(); + List list = manager + .getRunningAppProcesses(); + if (list == null) + return false; + boolean ret = false; + Iterator it = list.iterator(); + while (it.hasNext()) { + ActivityManager.RunningAppProcessInfo appInfo = it.next(); + if (appInfo.processName.equals(packageName) + && appInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { + ret = true; + break; + } + } + return ret; + } + + public static final boolean isScreenOn(Context context) { + PowerManager powerManager = (PowerManager) context + .getSystemService(Context.POWER_SERVICE); + return powerManager.isScreenOn(); + } + + public static boolean stackResumed(Context context) { + ActivityManager manager = (ActivityManager) context + .getApplicationContext().getSystemService( + Context.ACTIVITY_SERVICE); + String packageName = context.getApplicationContext().getPackageName(); + List recentTaskInfos = manager.getRunningTasks(1); + if (recentTaskInfos != null && recentTaskInfos.size() > 0) { + RunningTaskInfo taskInfo = recentTaskInfos.get(0); + if (taskInfo.baseActivity.getPackageName().equals(packageName) && taskInfo.numActivities > 1) { + return true; + } + } + + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/netease/widget/ChatRoomImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/netease/widget/ChatRoomImageView.java new file mode 100644 index 0000000..f798f49 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/netease/widget/ChatRoomImageView.java @@ -0,0 +1,85 @@ +package cn.shangyu.gdxzExpert.netease.widget; + +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nim.uikit.common.ui.imageview.CircleImageView; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.nos.NosService; +import com.netease.nimlib.sdk.nos.model.NosThumbParam; +import com.netease.nimlib.sdk.nos.util.NosThumbImageUtil; + +public class ChatRoomImageView extends CircleImageView { + + public static final int DEFAULT_THUMB_SIZE = (int) NimUIKit.getContext().getResources() + .getDimension( + com.netease.nim.uikit.R.dimen.avatar_max_size); + + private static final int DEFAULT_AVATAR_RES_ID = com.netease.nim.uikit.R.drawable.nim_avatar_default; + + public ChatRoomImageView(Context context) { + super(context); + } + + public ChatRoomImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ChatRoomImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + /** + * short to long? + * + * @param url + */ + public void loadAvatarByUrl(String roomId, String url) { + if (TextUtils.isEmpty(url)) { + // avoid useless call + loadAvatar(url, DEFAULT_THUMB_SIZE); + } else { + /* + * 若使用网易云信云存储,这里可以设置下载图片的压缩尺寸,生成下载URL + * 如果图片来源是非网易云信云存储,请不要使用NosThumbImageUtil + */ + NIMClient.getService(NosService.class).getOriginUrlFromShortUrl(roomId, url) + .setCallback(new RequestCallbackWrapper() { + + @Override + public void onResult(int code, String result, Throwable exception) { + if (TextUtils.isEmpty(result)) { + result = url; + } + final String thumbUrl = makeAvatarThumbNosUrl(result, + DEFAULT_THUMB_SIZE); + loadAvatar(thumbUrl, DEFAULT_THUMB_SIZE); + } + }); + } + } + + /** + * 生成头像缩略图NOS URL地址(用作ImageLoader缓存的key) + */ + private static String makeAvatarThumbNosUrl(final String url, final int thumbSize) { + if (TextUtils.isEmpty(url)) { + return url; + } + return thumbSize > 0 ? NosThumbImageUtil.makeImageThumbUrl(url, + NosThumbParam.ThumbType.Crop, + thumbSize, thumbSize) : url; + } + + private void loadAvatar(final String url, final int thumbSize) { + Glide.with(getContext().getApplicationContext()).asBitmap().load(url).apply( + new RequestOptions().centerCrop().placeholder(DEFAULT_AVATAR_RES_ID) + .error(DEFAULT_AVATAR_RES_ID).override(thumbSize, thumbSize)) + .into(this); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/CharacterParser.java b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/CharacterParser.java new file mode 100644 index 0000000..a355362 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/CharacterParser.java @@ -0,0 +1,217 @@ +/* + * Filename CharacterParser.java + * Company �Ϻ�����-�ֶ��ֹ�˾�� + * @author LuRuihui + * @version 0.1 + */ +package cn.shangyu.gdxzExpert.patientlist; + +import com.netease.nim.uikit.business.contact.core.query.PinYin; + +/** + * Java汉字转换为拼音 + * + */ +public class CharacterParser { + private static int[] pyvalue = new int[] { -20319, -20317, -20304, -20295, + -20292, -20283, -20265, -20257, -20242, -20230, -20051, -20036, + -20032, -20026, -20002, -19990, -19986, -19982, -19976, -19805, + -19784, -19775, -19774, -19763, -19756, -19751, -19746, -19741, + -19739, -19728, -19725, -19715, -19540, -19531, -19525, -19515, + -19500, -19484, -19479, -19467, -19289, -19288, -19281, -19275, + -19270, -19263, -19261, -19249, -19243, -19242, -19238, -19235, + -19227, -19224, -19218, -19212, -19038, -19023, -19018, -19006, + -19003, -18996, -18977, -18961, -18952, -18783, -18774, -18773, + -18763, -18756, -18741, -18735, -18731, -18722, -18710, -18697, + -18696, -18526, -18518, -18501, -18490, -18478, -18463, -18448, + -18447, -18446, -18239, -18237, -18231, -18220, -18211, -18201, + -18184, -18183, -18181, -18012, -17997, -17988, -17970, -17964, + -17961, -17950, -17947, -17931, -17928, -17922, -17759, -17752, + -17733, -17730, -17721, -17703, -17701, -17697, -17692, -17683, + -17676, -17496, -17487, -17482, -17468, -17454, -17433, -17427, + -17417, -17202, -17185, -16983, -16970, -16942, -16915, -16733, + -16708, -16706, -16689, -16664, -16657, -16647, -16474, -16470, + -16465, -16459, -16452, -16448, -16433, -16429, -16427, -16423, + -16419, -16412, -16407, -16403, -16401, -16393, -16220, -16216, + -16212, -16205, -16202, -16187, -16180, -16171, -16169, -16158, + -16155, -15959, -15958, -15944, -15933, -15920, -15915, -15903, + -15889, -15878, -15707, -15701, -15681, -15667, -15661, -15659, + -15652, -15640, -15631, -15625, -15454, -15448, -15436, -15435, + -15419, -15416, -15408, -15394, -15385, -15377, -15375, -15369, + -15363, -15362, -15183, -15180, -15165, -15158, -15153, -15150, + -15149, -15144, -15143, -15141, -15140, -15139, -15128, -15121, + -15119, -15117, -15110, -15109, -14941, -14937, -14933, -14930, + -14929, -14928, -14926, -14922, -14921, -14914, -14908, -14902, + -14894, -14889, -14882, -14873, -14871, -14857, -14678, -14674, + -14670, -14668, -14663, -14654, -14645, -14630, -14594, -14429, + -14407, -14399, -14384, -14379, -14368, -14355, -14353, -14345, + -14170, -14159, -14151, -14149, -14145, -14140, -14137, -14135, + -14125, -14123, -14122, -14112, -14109, -14099, -14097, -14094, + -14092, -14090, -14087, -14083, -13917, -13914, -13910, -13907, + -13906, -13905, -13896, -13894, -13878, -13870, -13859, -13847, + -13831, -13658, -13611, -13601, -13406, -13404, -13400, -13398, + -13395, -13391, -13387, -13383, -13367, -13359, -13356, -13343, + -13340, -13329, -13326, -13318, -13147, -13138, -13120, -13107, + -13096, -13095, -13091, -13076, -13068, -13063, -13060, -12888, + -12875, -12871, -12860, -12858, -12852, -12849, -12838, -12831, + -12829, -12812, -12802, -12607, -12597, -12594, -12585, -12556, + -12359, -12346, -12320, -12300, -12120, -12099, -12089, -12074, + -12067, -12058, -12039, -11867, -11861, -11847, -11831, -11798, + -11781, -11604, -11589, -11536, -11358, -11340, -11339, -11324, + -11303, -11097, -11077, -11067, -11055, -11052, -11045, -11041, + -11038, -11024, -11020, -11019, -11018, -11014, -10838, -10832, + -10815, -10800, -10790, -10780, -10764, -10587, -10544, -10533, + -10519, -10331, -10329, -10328, -10322, -10315, -10309, -10307, + -10296, -10281, -10274, -10270, -10262, -10260, -10256, -10254 }; + public static String[] pystr = new String[] { "a", "ai", "an", "ang", "ao", + "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", + "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", + "can", "cang", "cao", "ce", "ceng", "cha", "chai", "chan", "chang", + "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", + "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong", + "cou", "cu", "cuan", "cui", "cun", "cuo", "da", "dai", "dan", + "dang", "dao", "de", "deng", "di", "dian", "diao", "die", "ding", + "diu", "dong", "dou", "du", "duan", "dui", "dun", "duo", "e", "en", + "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", + "ga", "gai", "gan", "gang", "gao", "ge", "gei", "gen", "geng", + "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", + "guo", "ha", "hai", "han", "hang", "hao", "he", "hei", "hen", + "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", + "hun", "huo", "ji", "jia", "jian", "jiang", "jiao", "jie", "jin", + "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", + "kan", "kang", "kao", "ke", "ken", "keng", "kong", "kou", "ku", + "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", + "lan", "lang", "lao", "le", "lei", "leng", "li", "lia", "lian", + "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", + "lv", "luan", "lue", "lun", "luo", "ma", "mai", "man", "mang", + "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", + "min", "ming", "miu", "mo", "mou", "mu", "na", "nai", "nan", + "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang", + "niao", "nie", "nin", "ning", "niu", "nong", "nu", "nv", "nuan", + "nue", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", + "pen", "peng", "pi", "pian", "piao", "pie", "pin", "ping", "po", + "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", + "qiong", "qiu", "qu", "quan", "que", "qun", "ran", "rang", "rao", + "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", + "run", "ruo", "sa", "sai", "san", "sang", "sao", "se", "sen", + "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", + "sheng", "shi", "shou", "shu", "shua", "shuai", "shuan", "shuang", + "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", + "sun", "suo", "ta", "tai", "tan", "tang", "tao", "te", "teng", + "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan", + "tui", "tun", "tuo", "wa", "wai", "wan", "wang", "wei", "wen", + "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao", "xie", + "xin", "xing", "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", + "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo", "yong", + "you", "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", + "zao", "ze", "zei", "zen", "zeng", "zha", "zhai", "zhan", "zhang", + "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", + "zhua", "zhuai", "zhuan", "zhuang", "zhui", "zhun", "zhuo", "zi", + "zong", "zou", "zu", "zuan", "zui", "zun", "zuo" }; + private StringBuilder buffer; + private String resource; + private static CharacterParser characterParser = new CharacterParser(); + + public static CharacterParser getInstance() { + return characterParser; + } + + public String getResource() { + return resource; + } + + public void setResource(String resource) { + this.resource = resource; + } + + /** * 汉字转成ASCII码 * * @param chs * @return */ + private int getChsAscii(String chs) { + int asc = 0; + try { + byte[] bytes = chs.getBytes("gb2312"); + if (bytes == null || bytes.length > 2 || bytes.length <= 0) { + throw new RuntimeException("illegal resource string"); + } + if (bytes.length == 1) { + asc = bytes[0]; + } + if (bytes.length == 2) { + int hightByte = 256 + bytes[0]; + int lowByte = 256 + bytes[1]; + asc = (256 * hightByte + lowByte) - 256 * 256; + } + } catch (Exception e) { + } + return asc; + } + + /** * 单字解析 * * @param str * @return */ + public String convert(String str) { + String result = null; + int ascii = getChsAscii(str); + if (ascii > 0 && ascii < 160) { + result = String.valueOf((char) ascii); + } else { + for (int i = (pyvalue.length - 1); i >= 0; i--) { + if (pyvalue[i] <= ascii) { + result = pystr[i]; + break; + } + } + } + return result; + } + + /** + * 词组解析(将汉字转成拼音) + * + * @param chs + * @return + * + **/ + public String getSelling(String chs) { + String key, value; + buffer = new StringBuilder(); + for (int i = 0; i < chs.length(); i++) { + key = chs.substring(i, i + 1); + if (key.getBytes().length >= 2) { + value= PinYin.getPinYin(key); +// value = (String) convert(key); + if (value == null) { + value = "unknown"; + } + } else { + value = key; + } + buffer.append(value); + } + return buffer.toString(); + } + + /** + * 将汉字转成拼音老写法 + * @return + */ +// public String getSelling(String chs) { +// String key, value; +// buffer = new StringBuilder(); +// for (int i = 0; i < chs.length(); i++) { +// key = chs.substring(i, i + 1); +// if (key.getBytes().length >= 2) { +// value = (String) convert(key); +// if (value == null) { +// value = "unknown"; +// } +// } else { +// value = key; +// } +// buffer.append(value); +// } +// return buffer.toString(); +// } + + public String getSpelling() { + return this.getSelling(this.getResource()); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/PinyinComparator.java b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/PinyinComparator.java new file mode 100644 index 0000000..1839856 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/PinyinComparator.java @@ -0,0 +1,21 @@ +package cn.shangyu.gdxzExpert.patientlist; + +import java.util.Comparator; + +import cn.shangyu.gdxzExpert.bean.PatientListBean.PatientData; + +public class PinyinComparator implements Comparator { + + public int compare(PatientData o1, PatientData o2) { + if (o1.getSortLetters().equals("@") || o2.getSortLetters().equals("#")) { + return -1; + } else if (o1.getSortLetters().equals("#") + || o2.getSortLetters().equals("@")) { + return 1; + } else { + return o1.getSortLetters().compareTo(o2.getSortLetters()); + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SideBar.java b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SideBar.java new file mode 100644 index 0000000..44b64c4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SideBar.java @@ -0,0 +1,140 @@ +package cn.shangyu.gdxzExpert.patientlist; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +public class SideBar extends View { + // 触摸事件 + private OnTouchingLetterChangedListener onTouchingLetterChangedListener; + // 26个字母 + public static String[] b = { "A", "B", "C", "D", "E", "F", "G", "H", + "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", + "V", "W", "X", "Y", "Z","#" }; + private int choose = -1;// 选中 + private Paint paint = new Paint(); + + private TextView mTextDialog; + + public void setTextView(TextView mTextDialog) { + this.mTextDialog = mTextDialog; + } + + public SideBar(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public SideBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public SideBar(Context context) { + super(context); + } + + /** + * 重写这个方法 + */ + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + // 获取焦点改变背景颜色. + int height = getHeight();// 获取对应高度 + int width = getWidth(); // 获取对应宽度 + int singleHeight = height / b.length;// 获取每一个字母的高度 + + for (int i = 0; i < b.length; i++) { + paint.setColor(Color.rgb(33, 65, 98)); + // paint.setColor(Color.WHITE); +// paint.setTypeface(Typeface.DEFAULT_BOLD); + paint.setAntiAlias(true); + paint.setTextSize(30); + if(CommonUtil.BigModule()) + { + paint.setTextSize(40); + paint.setColor(getResources().getColor(R.color.c999999)); + } + // 选中的状态 + if (i == choose) { + paint.setColor(Color.parseColor("#ff0000")); + paint.setFakeBoldText(true); + } + // x坐标等于中间-字符串宽度的一半. + float xPos = width / 2 - paint.measureText(b[i]) / 2; + float yPos = singleHeight * i + singleHeight; + canvas.drawText(b[i], xPos, yPos, paint); + paint.reset();// 重置画笔 + } + + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + final int action = event.getAction(); + final float y = event.getY();// 点击y坐标 + final int oldChoose = choose; + final OnTouchingLetterChangedListener listener = onTouchingLetterChangedListener; + final int c = (int) (y / getHeight() * b.length);// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数. + + switch (action) { + case MotionEvent.ACTION_UP: + setBackgroundDrawable(new ColorDrawable(0x00000000)); + choose = -1;// + invalidate(); + if (mTextDialog != null) { + mTextDialog.setVisibility(View.INVISIBLE); + } + break; + + default: + // 设置右侧字母列表[A,B,C,D,E....]的背景颜色 + setBackgroundResource(R.drawable.sortlistview_sidebar_background); + if (oldChoose != c) { + if (c >= 0 && c < b.length) { + if (listener != null) { + listener.onTouchingLetterChanged(b[c]); + } + if (mTextDialog != null) { + mTextDialog.setText(b[c]); + mTextDialog.setVisibility(View.VISIBLE); + } + + choose = c; + invalidate(); + } + } + + break; + } + return true; + } + + /** + * 向外公开的方法 + * + * @param onTouchingLetterChangedListener + */ + public void setOnTouchingLetterChangedListener( + OnTouchingLetterChangedListener onTouchingLetterChangedListener) { + this.onTouchingLetterChangedListener = onTouchingLetterChangedListener; + } + + /** + * 接口 + * + * @author coder + * + */ + public interface OnTouchingLetterChangedListener { + public void onTouchingLetterChanged(String s); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SortModel.java b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SortModel.java new file mode 100644 index 0000000..4d36a7a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/patientlist/SortModel.java @@ -0,0 +1,20 @@ +package cn.shangyu.gdxzExpert.patientlist; + +public class SortModel { + + private String name; //显示的数据 + private String sortLetters; //显示数据拼音的首字母 + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getSortLetters() { + return sortLetters; + } + public void setSortLetters(String sortLetters) { + this.sortLetters = sortLetters; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/photo/AlbumPreviewActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/photo/AlbumPreviewActivity.java new file mode 100644 index 0000000..b52d8c7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/photo/AlbumPreviewActivity.java @@ -0,0 +1,299 @@ +package cn.shangyu.gdxzExpert.photo; + +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.text.TextPaint; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CompoundButton; +import android.widget.ImageView; + +import androidx.annotation.RequiresApi; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.AppCompatCheckBox; +import androidx.appcompat.widget.Toolbar; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PhotoAibum; +import cn.shangyu.gdxzExpert.bean.PhotoItem; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.view.PhotoView; + + +/** + * Author: yangshuiqiang + * Date:2017/6/15. + */ + + +public class AlbumPreviewActivity extends AppCompatActivity implements View.OnClickListener { + + public static final String ARG_BUCKET_INDEX = "ARG_BUCKET_INDEX"; + public static final String MAX_NUMBER = "MAX_NUMBER"; + public static final String ARG_INDEX = "ARG_INDEX"; + +// public static final String ARG_MODE = "ARG_MODE"; + +// private List mImageBeen; + List mImageBeen; + private AppCompatCheckBox mCheckBox; + + private ViewPager mViewPager; + +// private AppBarLayout mAppbarLayout; + +// private int mMode; + private ImageView top_back_layout;// 返回按钮 + private boolean mIsFullScreen; + private ArrayList potisions; + int maxnumber,haveNums; + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.ysq_activity_album_preview); +// mAppbarLayout = (AppBarLayout) findViewById(R.id.appbar); + Toolbar toolbar =findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(toolbar).init(); +// setSupportActionBar(toolbar); + //noinspection ConstantConditions +// getSupportActionBar().setDisplayHomeAsUpEnabled(true); +// initActionbar(); +// mMode = getIntent().getIntExtra(ARG_MODE, -1); + final int currentPosition = getIntent().getIntExtra(ARG_INDEX, 0); + maxnumber=getIntent().getIntExtra(MAX_NUMBER,0); + haveNums=getIntent().getIntExtra("haveNums",0); + potisions=getIntent().getStringArrayListExtra("potisions"); + PhotoAibum aibum= (PhotoAibum) getIntent().getSerializableExtra("aibum"); + mImageBeen = aibum.getBitList(); +// Collections.reverse(mImageBeen); +// getSupportActionBar().setTitle(getTitle(mImageBeen.get(currentPosition).getPhotoID()+"")); + mViewPager = (ViewPager) findViewById(R.id.viewpager); + mViewPager.setAdapter(mPreviewAdapter); + mViewPager.setCurrentItem(currentPosition); + mViewPager.addOnPageChangeListener(mOnPageChangeListener); + mCheckBox =findViewById(R.id.checkbox); + + if(potisions!=null) { + String p = potisions.stream() + .filter(new Predicate() { + @Override + public boolean test(String customer) { + return (currentPosition+"").equals(customer); + } + }) + .findAny() + .orElse(null); + if (p != null) { + mCheckBox.setChecked(true); + } else { + mCheckBox.setChecked(false); + } + } +// mCheckBox.setChecked(mImageBeen.get(currentPosition).isSelected()); + mCheckBox.setOnCheckedChangeListener(mOnCheckedChangeListener); + mCheckBox.setOnClickListener(this); +// mCheckBox.setOnCannotCheckMoreListener(mOnCannotCheckMoreListener); + top_back_layout = findViewById(R.id.top_back_layout); + top_back_layout.setOnClickListener(this); +// getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); +// mAppbarLayout.setVisibility(View.VISIBLE); + } + + private PagerAdapter mPreviewAdapter = new PagerAdapter() { + @Override + public int getCount() { + return mImageBeen.size(); + } + + @Override + public boolean isViewFromObject(View view, Object object) { + return view == object; + } + + @Override + public Object instantiateItem(ViewGroup container, final int position) { + PhotoView imageview = new PhotoView(AlbumPreviewActivity.this); + imageview.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); + imageview.setTag(R.id.tag_position, position); + imageview.setOnClickListener(AlbumPreviewActivity.this); + Glide.with(AlbumPreviewActivity.this).load(mImageBeen.get(position).getPath()) + .transition(DrawableTransitionOptions.withCrossFade(400)) + .into(imageview); + container.addView(imageview); + return imageview; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); + } + }; + + + private ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + + } + + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onPageSelected(final int position) { + //noinspection ConstantConditions +// getSupportActionBar().setTitle(getTitle(mImageBeen.get(position).getPhotoID()+"")); + mCheckBox.setOnCheckedChangeListener(null); + if(potisions!=null) + { + String p=potisions.stream() + .filter(new Predicate() { + @Override + public boolean test(String customer) { + return ("" + position).equals(customer); + } + }) + .findAny() + .orElse(null); + if(p!=null) + { + mCheckBox.setChecked(true); + } + else + { + mCheckBox.setChecked(false); + } + } + + mCheckBox.setOnCheckedChangeListener(mOnCheckedChangeListener); + + } + + @Override + public void onPageScrollStateChanged(int state) { + + } + }; + + private CompoundButton.OnCheckedChangeListener mOnCheckedChangeListener = new CompoundButton.OnCheckedChangeListener() { + @RequiresApi(api = Build.VERSION_CODES.N) + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { +// mImageBeen.get(mViewPager.getCurrentItem()).setSelected(isChecked); +// RecyclerView recyclerView = AlbumAdapter0.mWeakRecyclerViewRef.get(); +// int childCount = recyclerView.getChildCount(); +// for (int i = 0; i < childCount; i++) { +// View childView = recyclerView.getChildAt(i); +// AlbumAdapter0.VH childViewHolder = (AlbumAdapter0.VH) recyclerView.getChildViewHolder(childView); +// AlbumAdapter0 adapter = (AlbumAdapter0) recyclerView.getAdapter(); +// if (mImageBeen.get(mViewPager.getCurrentItem()).getPath() +// .equals(adapter.getPicPath(childViewHolder))) { +// adapter.setCheckBox(childViewHolder); +// break; +// } +// } + if (isChecked) + { + if(haveNums) potisions.stream() + .filter(new Predicate() { + @Override + public boolean test(String customer) { + return !(mViewPager.getCurrentItem()+"").equals(customer); + } + }) + .collect(Collectors.toList()) + ; + } +// AlbumActivity.albumPicker.add(mImageBeen.get(mViewPager.getCurrentItem())); +// else +// AlbumActivity.albumPicker.remove(mImageBeen.get(mViewPager.getCurrentItem())); + } + }; + + + + + @Override + public void onBackPressed() { + Intent intent = new Intent(); + intent.putStringArrayListExtra("potisions",potisions); + intent.putExtra("haveNums",haveNums); + setResult(RESULT_OK, intent); + finish(); + } + + + + + private void initActionbar() { + int statusBarHeight = 0; + int id = getResources().getIdentifier("status_bar_height", "dimen", "android"); + if (id > 0) { + statusBarHeight = getResources().getDimensionPixelOffset(id); + } +// mAppbarLayout.setPadding(0, statusBarHeight, 0, 0); + } + + private String getTitle(String title) { + TextPaint paint = new TextPaint(); + paint.setTextSize(sp2px(20)); + return TextUtils.ellipsize(title, paint, dp2px(200), TextUtils.TruncateAt.END).toString(); + } + + private int dp2px(int dpValue) { + return (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics()); + } + + private int sp2px(int dpValue) { + return (int) TypedValue.applyDimension( + TypedValue.COMPLEX_UNIT_SP, dpValue, getResources().getDisplayMetrics()); + } + + @Override + public void onClick(View v) { + switch (v.getId()) + { + case R.id.top_back_layout: + Intent intent = new Intent(); + intent.putStringArrayListExtra("potisions",potisions); + intent.putExtra("haveNums",haveNums); + setResult(RESULT_OK, intent); + finish(); + break; + case R.id.checkbox: + break; + } + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/photo/PreviewViewPager.java b/app/src/main/java/cn/shangyu/gdxzExpert/photo/PreviewViewPager.java new file mode 100644 index 0000000..c890e20 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/photo/PreviewViewPager.java @@ -0,0 +1,39 @@ +package cn.shangyu.gdxzExpert.photo; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + + +/** + * author:ysq + * date:2017/2/16. + */ + +public class PreviewViewPager extends ViewPager { + + public PreviewViewPager(Context context) { + super(context); + } + + public PreviewViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + setPadding(getPaddingLeft(), 0, getPaddingRight(), getPaddingBottom()); + super.onLayout(changed, l, t, r, b); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + try { + return super.onInterceptTouchEvent(ev); + } catch (Exception e) { + return false; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/BuyIntegerActivty.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/BuyIntegerActivty.java new file mode 100644 index 0000000..692a3d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/BuyIntegerActivty.java @@ -0,0 +1,514 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PayActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DestroyActivityUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/4/15. + */ + +public class BuyIntegerActivty extends BaseActivity implements OnCallBackFromNet,RadioGroup.OnCheckedChangeListener{ + + private LinearLayout ll_choose; + private LinearLayout ll_sort; + private TextView tv_buy,tv_choose; + private ImageView iv_choose; + private LinearLayout ll_500,ll_1000,ll_2500,ll_5000,ll_10000; + private ImageView iv_500,iv_1000,iv_2500,iv_5000,iv_10000; + private TextView tv_500,tv_1000,tv_2500,tv_5000,tv_10000; + private TextView tv_num,tv_needpoint; + private RadioGroup ll_num; + private RadioButton tv_num1,tv_num2,tv_num3,tv_num4,tv_num5; + private int point; + private ECAlertDialog buildAlert; + private String pointUnitPrice; + private double pointUnitPrice1; + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what){ + case 1: + closeProgressDialog(); + pointUnitPrice1 = Double.parseDouble(pointUnitPrice); + + break; + } + } + }; + private String order_id; + private int amount; + private RadioGroup rg_group,rg_group1; + private RadioButton rb_1,rb_2,rb_3,rb_4,rb_5; + + @Override + public void setTitle() { + top_title.setText("购买积分"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_buyintegral_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_buyintegral); + } + DestroyActivityUtil.addDestoryActivityToMap(this,"BuyIntegerActivty"); + findview(view); + getPointUnitPrice(); + initOnListenr(); + return view; + } + + private void getPointUnitPrice() { + showProgressDialog("请稍等"); + new Thread(){ + @Override + public void run() { + super.run(); + HttpHelper.HttpResult httpResult = HttpHelper.post( + Url.getPointUnitPrice, null);// 请求网络 + String result = httpResult.getString();// str为服务器返回的json串 + LogUtils.e("result = "+result); + try { + JSONObject jsonObject = new JSONObject(result); + pointUnitPrice = jsonObject.getString("PointUnitPrice"); + handler.sendEmptyMessage(1); + } catch (JSONException e) { + e.printStackTrace(); + } + } + }.start(); + } + + private void initOnListenr() { + ll_choose.setOnClickListener(this); + tv_buy.setOnClickListener(this); + ll_500.setOnClickListener(this); + ll_1000.setOnClickListener(this); + ll_2500.setOnClickListener(this); + ll_5000.setOnClickListener(this); + ll_10000.setOnClickListener(this); + tv_num.setOnClickListener(this); + tv_num1.setOnClickListener(this); + tv_num2.setOnClickListener(this); + tv_num3.setOnClickListener(this); + tv_num4.setOnClickListener(this); + tv_num5.setOnClickListener(this); + rg_group.setOnCheckedChangeListener(this); + rg_group1.setOnCheckedChangeListener(this); + } + + private void findview(View view) { + ll_choose = view.findViewById(R.id.ll_choose); + ll_sort = view.findViewById(R.id.ll_sort); + tv_buy = view.findViewById(R.id.tv_buy); + tv_choose = view.findViewById(R.id.tv_choose); + iv_choose = view.findViewById(R.id.iv_choose); + iv_choose = view.findViewById(R.id.iv_choose); + ll_500 = view.findViewById(R.id.ll_500); + ll_1000 = view.findViewById(R.id.ll_1000); + ll_2500 = view.findViewById(R.id.ll_2500); + ll_5000 = view.findViewById(R.id.ll_5000); + ll_10000 = view.findViewById(R.id.ll_10000); + iv_500 = view.findViewById(R.id.iv_500); + iv_1000 = view.findViewById(R.id.iv_1000); + iv_2500 = view.findViewById(R.id.iv_2500); + iv_5000 = view.findViewById(R.id.iv_5000); + iv_10000 = view.findViewById(R.id.iv_10000); + tv_500 = view.findViewById(R.id.tv_500); + tv_1000 = view.findViewById(R.id.tv_1000); + tv_2500 = view.findViewById(R.id.tv_2500); + tv_5000 = view.findViewById(R.id.tv_5000); + tv_10000 = view.findViewById(R.id.tv_10000); + + tv_num = view.findViewById(R.id.tv_num); + tv_needpoint = view.findViewById(R.id.tv_needpoint); + ll_num = view.findViewById(R.id.ll_num); + tv_num1 = (RadioButton) view.findViewById(R.id.tv_num1); + tv_num2 = (RadioButton) view.findViewById(R.id.tv_num2); + tv_num3 = (RadioButton) view.findViewById(R.id.tv_num3); + tv_num4 = (RadioButton) view.findViewById(R.id.tv_num4); + tv_num5 = (RadioButton) view.findViewById(R.id.tv_num5); + + + rg_group = view.findViewById(R.id.rg_group); + rg_group1 = view.findViewById(R.id.rg_group1); + + rb_1 = view.findViewById(R.id.rb_1); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + rb_4 = view.findViewById(R.id.rb_4); + rb_5 = view.findViewById(R.id.rb_5); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.ll_choose: + if (ll_sort.getVisibility()==View.GONE){ + ll_sort.setVisibility(View.VISIBLE); + iv_choose.setImageResource(R.drawable.point_up); + }else { + ll_sort.setVisibility(View.GONE); + iv_choose.setImageResource(R.drawable.point_down); + } + break; + + case R.id.ll_500: + chengeChoose(500); + point = 500; + tv_500.setTextColor(Color.parseColor("#8D2316")); + tv_1000.setTextColor(Color.parseColor("#333333")); + tv_2500.setTextColor(Color.parseColor("#333333")); + tv_10000.setTextColor(Color.parseColor("#333333")); + tv_5000.setTextColor(Color.parseColor("#333333")); + iv_500.setVisibility(View.VISIBLE); + iv_1000.setVisibility(View.GONE); + iv_2500.setVisibility(View.GONE); + iv_5000.setVisibility(View.GONE); + iv_10000.setVisibility(View.GONE); + break; + case R.id.ll_1000: + chengeChoose(1000); + point = 1000; + tv_1000.setTextColor(Color.parseColor("#8D2316")); + tv_500.setTextColor(Color.parseColor("#333333")); + tv_2500.setTextColor(Color.parseColor("#333333")); + tv_10000.setTextColor(Color.parseColor("#333333")); + tv_5000.setTextColor(Color.parseColor("#333333")); + iv_1000.setVisibility(View.VISIBLE); + iv_500.setVisibility(View.GONE); + iv_2500.setVisibility(View.GONE); + iv_5000.setVisibility(View.GONE); + iv_10000.setVisibility(View.GONE); + break; + case R.id.ll_2500: + point = 2500; + chengeChoose(2500); + tv_2500.setTextColor(Color.parseColor("#8D2316")); + tv_500.setTextColor(Color.parseColor("#333333")); + tv_1000.setTextColor(Color.parseColor("#333333")); + tv_10000.setTextColor(Color.parseColor("#333333")); + tv_5000.setTextColor(Color.parseColor("#333333")); + iv_2500.setVisibility(View.VISIBLE); + iv_500.setVisibility(View.GONE); + iv_1000.setVisibility(View.GONE); + iv_5000.setVisibility(View.GONE); + iv_10000.setVisibility(View.GONE); + break; + case R.id.ll_5000: + chengeChoose(5000); + point = 5000; + tv_5000.setTextColor(Color.parseColor("#8D2316")); + tv_500.setTextColor(Color.parseColor("#333333")); + tv_2500.setTextColor(Color.parseColor("#333333")); + tv_10000.setTextColor(Color.parseColor("#333333")); + tv_1000.setTextColor(Color.parseColor("#333333")); + iv_5000.setVisibility(View.VISIBLE); + iv_500.setVisibility(View.GONE); + iv_2500.setVisibility(View.GONE); + iv_1000.setVisibility(View.GONE); + iv_10000.setVisibility(View.GONE); + break; + + case R.id.ll_10000: + point = 10000; + chengeChoose(10000); + tv_10000.setTextColor(Color.parseColor("#8D2316")); + tv_500.setTextColor(Color.parseColor("#333333")); + tv_2500.setTextColor(Color.parseColor("#333333")); + tv_1000.setTextColor(Color.parseColor("#333333")); + tv_5000.setTextColor(Color.parseColor("#333333")); + iv_10000.setVisibility(View.VISIBLE); + iv_500.setVisibility(View.GONE); + iv_2500.setVisibility(View.GONE); + iv_5000.setVisibility(View.GONE); + iv_1000.setVisibility(View.GONE); + break; + case R.id.tv_num: + if (ll_num.getVisibility()==View.VISIBLE) { + ll_num.setVisibility(View.GONE); + changeChooseDown(); + }else{ + changeChooseUp(); + ll_num.setVisibility(View.VISIBLE); + } + break; + case R.id.tv_num1: + tv_num.setText("1张"); + tv_needpoint.setText(point*pointUnitPrice1/100*1+"元"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_num2: + tv_num.setText("2张"); + tv_needpoint.setText(point*pointUnitPrice1/100*2+"元"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_num3: + tv_num.setText("3张"); + tv_needpoint.setText(point*pointUnitPrice1/100*3+"元"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_num4: + tv_num.setText("4张"); + tv_needpoint.setText(point*pointUnitPrice1/100*4+"元"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_num5: + tv_num.setText("5张"); + tv_needpoint.setText(point*pointUnitPrice1/100*5+"元"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_buy: + if (!"0元".equals(tv_needpoint.getText().toString())){ + buildAlert = ECAlertDialog.buildAlert(BuyIntegerActivty.this, "您确定是否购买?", "否", "是", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + getPayResult("购买积分"); + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(BuyIntegerActivty.this.getResources().getColor( + R.color.top_title)); + buildAlert.show(); + }else + ToastUtil.showMessage("请先选择您要购买的积分"); + break; + + } + } + public void getPayResult(String message) { + showProgressDialog("创建订单中"); + Map param = new HashMap(); + param.put("point", point+""); +// param.put("point", 1+""); + sendJsonPostParamtoNetSignMD5(Url.createPointOrder, param, 101, BuyIntegerActivty.this); + } + private void changeChooseDown(){ + Drawable drawable= getResources().getDrawable(R.drawable.choose_num_down); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + tv_num.setCompoundDrawables(null,null,drawable,null); + } + private void changeChooseUp(){ + Drawable drawable= getResources().getDrawable(R.drawable.choose_num_up); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + tv_num.setCompoundDrawables(null,null,drawable,null); + } + private void chengeChoose(int point){ + + tv_choose.setText(point+"积分"); + tv_choose.setTextColor(Color.parseColor("#3cc7c0")); + iv_choose.setImageResource(R.drawable.point_down); + ll_sort.setVisibility(View.GONE); + + tv_num.setText("1张"); + tv_num1.setChecked(true); + tv_needpoint.setText(point*pointUnitPrice1/100*1+"元"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case 101: + Log.d("WXEntryActivity","resultCode "+resultJson); + closeProgressDialog(); +// PayWechatBean payBean= GsonTools.fromGsonToBean(resultJson, +// PayWechatBean.class); +// if(payBean!=null&&"200".equals(payBean.getCode())) +// { +// PayReq request = new PayReq(); +// request.appId = payBean.getData().getAppid(); +// request.partnerId = payBean.getData().getPartnerid(); +// request.prepayId= payBean.getData().getPrepayid(); +// request.packageValue = payBean.getData().getPackage_str(); +// request.nonceStr= payBean.getData().getNoncestr(); +// request.timeStamp= payBean.getData().getTimestamp(); +// request.sign=payBean.getData().getSign(); +// api.sendReq(request); +// +// } +// else +// { +// ToastUtil.showToast(payBean.getMessage()); +// } + closeProgressDialog(); + JSONObject jsonobj = null; + String code = null; + + try { + jsonobj = new JSONObject(resultJson); + code = jsonobj.getString("code"); + if("200".equals(code)) + { + amount=jsonobj.getJSONObject("data").getInt("amount"); + Intent intent = new Intent(BuyIntegerActivty.this, PayActivity.class); + intent.putExtra("money", amount+ ""); + intent.putExtra("order_id", jsonobj.getJSONObject("data").getString("trade_no")); + intent.putExtra("pay", tv_needpoint.getText().toString()); + intent.putExtra("jifen", (Integer.parseInt(tv_needpoint.getText().toString().replace("元",""))*100/pointUnitPrice1)+""); + intent.putExtra("jifen", point+""); + startActivityForResult(intent, 201); + } + else + { + ToastUtil.showToast(jsonobj.getString("msg")); + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } +// LogUtil.i("resultJson = "+resultJson); +// if (StringUtil.isEmpty(resultJson)) { +// ToastUtil.showMessage("服务器异常"); +// return; +// } +// Gson gson = new Gson(); +// CreateOrderBean1 createOrderBean = gson.fromJson(resultJson, +// CreateOrderBean1.class); +// if (createOrderBean.getOrder()!=null){ +// order_id = createOrderBean.getOrder().getId(); +// amount = createOrderBean.getOrder().getAmount(); +// closeProgressDialog(); +// Intent intent = new Intent(BuyIntegerActivty.this, PayActivity.class); +// intent.putExtra("money", amount+""); +// intent.putExtra("order_id", order_id); +// intent.putExtra("pay", tv_needpoint.getText().toString()); +// intent.putExtra("jifen", (Integer.parseInt(tv_needpoint.getText().toString().replace("元",""))*100/pointUnitPrice1)+""); +// intent.putExtra("jifen", point+""); +// startActivityForResult(intent, 201); +// }else { +// closeProgressDialog(); +// ToastUtil.showMessage("请求失败"); +// } + + break; + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + DestroyActivityUtil.destoryActivity("BuyIntegerActivty"); + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + if(group != null && checkedId>0){ + if(group == rg_group){ + rg_group1.clearCheck(); + }else if(group == rg_group1){ + rg_group.clearCheck(); + } + group.check(checkedId); + } + + switch(checkedId) { + case R.id.rb_1: + tv_needpoint.setText(getDoubleString(500 * pointUnitPrice1 / 100 * 1) + "元"); + point = 500; + break; + case R.id.rb_2: + tv_needpoint.setText(getDoubleString(1000 * pointUnitPrice1 / 100 * 1 )+ "元"); + point = 1000; + break; + case R.id.rb_3: + tv_needpoint.setText(getDoubleString(2500 * pointUnitPrice1 / 100 * 1 )+ "元"); + point = 2500; + break; + case R.id.rb_4: + point = 5000; + tv_needpoint.setText(getDoubleString(5000 * pointUnitPrice1 / 100 * 1 )+ "元"); + break; + case R.id.rb_5: + point = 10000; + tv_needpoint.setText(getDoubleString(10000 * pointUnitPrice1 / 100 * 1 )+ "元"); + break; + } + } + /* + * ,非小数,保留整数 + * @param number + */ + public static String getDoubleString(double number) { + String numberStr; +// if (((int) number * 1000) == (int) (number * 1000)) { + //如果是一个整数 + numberStr = String.valueOf((int) number); +// } else { +// numberStr = String.valueOf(number); +// } + return numberStr; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ContactEmailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ContactEmailActivity.java new file mode 100644 index 0000000..919e59a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ContactEmailActivity.java @@ -0,0 +1,763 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.os.AsyncTask; +import android.text.Editable; +import android.text.TextPaint; +import android.text.TextUtils; +import android.text.TextWatcher; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnTouchListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.City; +import cn.shangyu.gdxzExpert.bean.CreateGoodsOrderBean; +import cn.shangyu.gdxzExpert.bean.PayGoodsOrderbean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SQLdm; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.utils.ValidateUtils; +import cn.shangyu.gdxzExpert.widge.pickerview.OptionsPopupWindow; +import cn.shangyu.gdxzExpert.widget.CustomToast; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ContactEmailActivity extends BaseActivity implements OnCallBackFromNet{ + private Button btn_save; + private EditText et_myemail; + private int type;//1:实物,2:虚拟 + private EditText et_name,et_tele,et_addressdetail,et_email; + private TextView dizhi,et_address; + private View line3,line4; + private TextView xiangxidizhi; + private ImageView img; + public static final int CREATEGOODSORDER = 201; + public static final int PAYGOODSORDER = 202; + public static final int USEWELFARENUM = 203; + private OptionsPopupWindow pwCityOptions; + // 声明城市列表的一些集合 + private ArrayList province = new ArrayList(); + private ArrayList> city = new ArrayList>(); + private ArrayList>> county = new ArrayList>>(); + private ArrayList> cityIdList = new ArrayList>(); + private ArrayList>> countyIdList = new ArrayList>>(); + private List provinceList; + private String provinceId = "";// 省ID + private String cityId = "";// 市ID + private String disctictId = "";// 区ID + private SQLiteDatabase db; + private String uuid,goodsNum,typeupan; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_contactemailoraddress); + Intent intent = getIntent(); + type = intent.getExtras().getInt("type"); + uuid = intent.getExtras().getString("uuid"); + goodsNum = intent.getExtras().getString("goodsNum"); + typeupan = intent.getType(); + + AppManager.getAppManager().addActivity1(this); + initView(view); + +// et_myemail = (EditText) view.findViewById(R.id.et_myemail); +// String emailString = SharePrefUtil.getString(this, "email", ""); +// et_myemail.setText(emailString); + switch (this.type) { + case 1: + top_title.setText("收货地址"); + initKJDB(); + et_name.setText(SharePrefUtil.getString(ct, "address_username", "")); + et_tele.setText(SharePrefUtil.getString(ct, "address_tele", "")); + et_address.setText(SharePrefUtil.getString(ct, "address_address", "")); + if (!SharePrefUtil.getString(this, "address_address", "").isEmpty()) { + tp.setFakeBoldText(true); + } + et_addressdetail.setText(SharePrefUtil.getString(ct, "address_addressdetail", "")); + et_name.setSelection(et_name.getText().toString().length()); + break; + + case 2: + top_title.setText("联系邮箱"); + et_name.setText(SharePrefUtil.getString(ct, "email_username", "")); + et_tele.setText(SharePrefUtil.getString(ct, "email_tele", "")); + et_email.setText(SharePrefUtil.getString(ct, "email_email", "")); + et_name.setSelection(et_name.getText().toString().length()); + line4.setVisibility(View.GONE); + rl_img.setVisibility(View.GONE); + et_addressdetail.setVisibility(View.GONE); + xiangxidizhi.setVisibility(View.GONE); + et_address.setVisibility(View.GONE); + dizhi.setText("邮箱"); + et_email.setVisibility(View.VISIBLE); + img.setVisibility(View.GONE); + break; + } + + btn_save.setOnClickListener(this); + et_address.setOnClickListener(this); + rl_img.setOnClickListener(this); + return view; + } + /** + * 初始化数据库 + */ + private void initKJDB() { + // TODO Auto-generated method stub + // 取出定位的地址 + String lon = SharePrefUtil.getString(ContactEmailActivity.this, + Constant.LON, "116.3"); + String lat = SharePrefUtil.getString(ContactEmailActivity.this, + Constant.LAT, "39.9"); + String province = SharePrefUtil.getString(ContactEmailActivity.this, + Constant.PROVINCE, "北京市"); + String city = SharePrefUtil.getString(ContactEmailActivity.this, + Constant.CITY, "北京市"); + String district = SharePrefUtil.getString(ContactEmailActivity.this, + Constant.DISTRICT, "东城区"); + LogUtil.i("lon=" + lon + "lat=" + lat + "province=" + province + + "city=" + city + "district=" + district); + // 设置默认选中城市 + setSelectedCity(province, city, district); + // 执行检出城市 + new InitAreaTask().execute(); + } + private String currentProvince, currentCity, currentCounty; + private CreateGoodsOrderBean fromJsonBean; + private CustomProgressDialog pd; + private Dialog dialog; + private PayGoodsOrderbean fromJsonBean1; + private String goods_order_uuid; + private RelativeLayout rl_img; + private RelativeLayout activity_contactmail; + private TextPaint tp; + + /** + * 设置默认选中的位置,这个为定位的地方,如果定位失败就选中0位置 setSelectedCity + * + * @param province + * @param city + * @param county + * void + */ + public void setSelectedCity(String province, String city, String county) { + this.currentProvince = province; + this.currentCity = city; + this.currentCounty = county; + } + @SuppressLint("ClickableViewAccessibility") + private void initView(View view) { + // TODO Auto-generated method stub + activity_contactmail = (RelativeLayout) view.findViewById(R.id.activity_contactmail); + btn_save = (Button) view.findViewById(R.id.btn_save); + et_name = (EditText) view.findViewById(R.id.et_name); + et_tele = (EditText) view.findViewById(R.id.et_tele); + et_address = (TextView) view.findViewById(R.id.et_address); + img = (ImageView) view.findViewById(R.id.img); + et_email = (EditText) view.findViewById(R.id.et_email); + rl_img = (RelativeLayout) view.findViewById(R.id.rl_img); + et_addressdetail = (EditText) view.findViewById(R.id.et_addressdetail); + dizhi = (TextView) view.findViewById(R.id.dizhi); + line4 = view.findViewById(R.id.line4); + xiangxidizhi = (TextView) view.findViewById(R.id.xiangxidizhi); + pd = new CustomProgressDialog(this, "请稍候"); + tp = et_address.getPaint(); + + + /** + * 添加监听,在hint时和text时切换字体大小 + */ + et_name.addTextChangedListener(new TextWatcher() { + boolean hint; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + TextPaint tp = et_name.getPaint(); + if(s.length() == 0) { + // no text, hint is visible + hint = true; + tp.setFakeBoldText(false); + } else { + // no hint, text is visible + hint = false; + + tp.setFakeBoldText(true); + } + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + + + et_tele.addTextChangedListener(new TextWatcher() { + boolean hint; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + TextPaint tp = et_tele.getPaint(); + if(s.length() == 0) { + // no text, hint is visible + hint = true; + tp.setFakeBoldText(false); + } else { + // no hint, text is visible + hint = false; + + tp.setFakeBoldText(true); + } + } + + @Override + public void afterTextChanged(Editable s) { + } + }); +et_addressdetail.addTextChangedListener(new TextWatcher() { + boolean hint; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + TextPaint tp = et_addressdetail.getPaint(); + if(s.length() == 0) { + // no text, hint is visible + hint = true; + tp.setFakeBoldText(false); + } else { + // no hint, text is visible + hint = false; + tp.setFakeBoldText(true); + } + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + + et_email.addTextChangedListener(new TextWatcher() { + boolean hint; + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) {} + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + TextPaint tp = et_email.getPaint(); + if(s.length() == 0) { + // no text, hint is visible + hint = true; + tp.setFakeBoldText(false); + } else { + // no hint, text is visible + hint = false; + + tp.setFakeBoldText(true); + } + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + + + + activity_contactmail.setOnTouchListener(new OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + // TODO Auto-generated method stub + InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); + if (getCurrentFocus()!=null){ + return imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); + }else + return false; + + + } + }); + } + +// private void etSet(EditText et_name2, String string) { +// // TODO Auto-generated method stub +// // 新建一个可以添加属性的文本对象 +// SpannableString ss = new SpannableString(string); +// // 新建一个属性对象,设置文字的大小 +// AbsoluteSizeSpan ass = new AbsoluteSizeSpan(14,true); +// // 附加属性到文本 +// ss.setSpan(ass, 0, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); +// // 设置hint +// et_name2.setHint(new SpannedString(ss)); // 一定要进行转换,否则属性会消失 +// } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.btn_save: + String tele = et_tele.getText().toString().trim(); + String name = et_name.getText().toString().trim(); + if (TextUtils.isEmpty(name)) { + ToastUtil.showToast("请输入收货人名字"); + break; + } + if (!ValidateUtils.isMobileNum(tele)) { + ToastUtil.showToast("请输入正确的手机号"); + break; + } + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + if (type==1) { + String address = et_address.getText().toString().trim(); + String addressdetail = et_addressdetail.getText().toString().trim(); + if (TextUtils.isEmpty(address)||TextUtils.isEmpty(addressdetail)) { + ToastUtil.showToast("为了更好的为您提供服务,请完善并确认您的收货地址"); + break; + } + SharePrefUtil.saveString(ct, "address_username", name); + SharePrefUtil.saveString(ct, "address_tele", tele); + SharePrefUtil.saveString(ct, "address_address", address); + SharePrefUtil.saveString(ct, "address_addressdetail", addressdetail); + pd.show(); + Map param = new HashMap<>(); + param.put("goodsUuid",uuid); + param.put("address",address+addressdetail.replace(" ","")); + param.put("mobile",tele); + param.put("goodsNum",goodsNum); + param.put("email",""); + param.put("user_name",name.replace(" ","")); + + sendJsonPostParamtoNetSignMD5(Url.createGoodsOrder, param, CREATEGOODSORDER, this); + + + }else{ + String email = et_email.getText().toString().trim(); + SharePrefUtil.saveString(ct, "email_username", name); + SharePrefUtil.saveString(ct, "email_tele", tele); + SharePrefUtil.saveString(ct, "email_email", email); + if (!TextUtils.isEmpty(email)) { + if (!ValidateUtils.isValidEmail(email)) { + ToastUtil.showMessage("请输入正确的邮箱"); + break; + } + } + pd.show(); + Map param = new HashMap<>(); + param.put("goodsUuid",uuid); + param.put("address",""); + param.put("mobile",tele); + param.put("goodsNum",goodsNum); + param.put("email",email); + param.put("user_name",name.replace(" ","")); + + sendJsonPostParamtoNetSignMD5(Url.createGoodsOrder, param, CREATEGOODSORDER, this); + + } + + break; + + case R.id.et_address: + case R.id.rl_img: + // 设置弹出方式为底部 + View parent = getWindow().getDecorView(); + pwCityOptions.showAtLocation(parent, Gravity.BOTTOM, 0, 0); + break; + case R.id.btn_sure: + dialog.dismiss(); + pd.show(); + if ("UpanExchangeActivityt".equals(typeupan)){ + Map param = new HashMap<>(); + param.put("type","5"); + param.put("other_uuid",goods_order_uuid); + sendJsonPostParamtoNetSignMD5(Url.useWelfareNum, param, USEWELFARENUM, this); + }else { + Map param = new HashMap<>(); + param.put("goods_order_uuid",goods_order_uuid); + sendJsonPostParamtoNetSignMD5(Url.payGoodsOrder, param, PAYGOODSORDER, this); + } + + break; + + case R.id.top_back_layout: + finish(); + break; + } + } + + // 加载城市数据,耗时操作,需要异步 + private class InitAreaTask extends AsyncTask { + + private ProgressDialog progressDialog; + + public InitAreaTask() { + progressDialog = new CustomProgressDialog( + ContactEmailActivity.this, "正在初始化城市数据..."); + progressDialog.show(); + + } + + @Override + protected synchronized Boolean doInBackground(Void... params) { + return areaData(); + } + + @Override + protected void onPostExecute(Boolean result) { + progressDialog.dismiss(); + if (result) { + // 初始化联动划框 + showCityPwOptions(); + } else { + CustomToast.show(ContactEmailActivity.this, "城市数据初始化失败", + Toast.LENGTH_SHORT); + } + } + + } + + /** + * 弹出城市三级联动选择框 void + */ + private void showCityPwOptions() { + // 选项选择器 + pwCityOptions = new OptionsPopupWindow(ct); + // 设置标题 + // pwCityOptions.setPopupTitle("请选择城市"); + // //设置确定按钮为下一步 + // pwCityOptions.setSubmitTitle("下一步"); + // 一级联动 + pwCityOptions.setPicker(province, city, county, true); + // 设置选择的三级单位 + // pwCityOptions.setLabels("省", "市", "区"); + + // 根据定位的数据取出相应位置 + int currentProvinceIndex = 0, currentCityIndex = 0, currentCountyIndex = 0; + if (!TextUtils.isEmpty(currentProvince) + && !TextUtils.isEmpty(currentCity) + && !TextUtils.isEmpty(currentCounty)) { + for (int i = 0; i < province.size(); i++) { + if (province.get(i).contains(currentProvince)) { + currentProvinceIndex = i; + ArrayList iCity = city.get(i); + for (int j = 0; j < iCity.size(); j++) { + if (iCity.get(j).contains(currentCity)) { + currentCityIndex = j; + ArrayList jCounty = county.get(i).get(j); + for (int k = 0; k < jCounty.size(); k++) { + if (jCounty.get(k).contains(currentCounty)) { + currentCountyIndex = k; + break; + } + } + break; + } + } + break; + } + } + } + // 设置默认选中的项目 + pwCityOptions.setSelectOptions(currentProvinceIndex, currentCityIndex, + currentCountyIndex); + + // 监听确定选择按钮 + pwCityOptions + .setOnoptionsSelectListener(new OptionsPopupWindow.OnOptionsSelectListener() { + + @Override + public void onOptionsSelect(int options1, int option2, + int options3) { + + // 返回的分别是三个级别的选中位置 + String tx1 = province.get(options1); + String tx2 = city.get(options1).get(option2); + String tx3 = county.get(options1).get(option2) + .get(options3); + String tx = tx1; + if (!TextUtils.isEmpty(tx2)) { + tx = tx + tx2; + } + if (!TextUtils.isEmpty(tx3)) { + tx = tx + tx3; + } + // 选择 的id + // 省id + provinceId = provinceList.get(options1).get_id(); + // 市id + cityId = cityIdList.get(options1).get(option2).get_id(); + // 区id + disctictId = countyIdList.get(options1).get(option2) + .get(options3).get_id(); + et_address.setText(tx); + + tp.setFakeBoldText(true); + LogUtil.i("选择的为。。" + tx + "provinceId=" + provinceId + + "cityId=" + cityId + "disctictId=" + + disctictId); + } + }); + + } + + /* + * 点击省时,,,,初始化城市选择 + */ + + private boolean areaData() { + provinceList = new ArrayList(); + SQLdm s = new SQLdm(); + db = s.openDatabase(ContactEmailActivity.this); + if (db != null) { + // 查询数据库中的数据 + Cursor cursor = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { "0" }); + + while (cursor.moveToNext()) { + City cityProvince = new City(); + cityProvince.set_id(cursor.getString(cursor + .getColumnIndex("_id"))); + cityProvince.setName(cursor.getString(cursor + .getColumnIndex("name"))); + provinceList.add(cityProvince); + // 省名称 + this.province.add(cityProvince.getName()); + // LogUtil.i("省id="+cityProvince.get_id()+"FullName="+cityProvince.getFullName()); + + // 市 + String provinceId = cursor.getString(cursor + .getColumnIndex("_id")); + Cursor cursorCity = db + .rawQuery( + "select * from cn_shangyu_gdxzExpert_bean_City where parent=?", + new String[] { provinceId }); + + ArrayList cityList = new ArrayList(); + // 储存该省的所有城市名称 + ArrayList cityName = new ArrayList(); + // 该省该市所有区名称 + ArrayList> cityDisctict = new ArrayList>(); + ArrayList> cityDisctictId = new ArrayList>(); + while (cursorCity.moveToNext()) { + City city = new City(); + city.set_id(cursorCity.getString(cursorCity + .getColumnIndex("_id"))); + city.setName(cursorCity.getString(cursorCity + .getColumnIndex("name"))); + // 城市列表 + cityList.add(city); + // 城市名称 + cityName.add(city.getName()); + // LogUtil.i("市id="+city.get_id()+"FullName="+city.getFullName()); + + // 区 + String cityId = cursorCity.getString(cursorCity + .getColumnIndex("_id")); + Cursor cursorDisctict = db.rawQuery("select * from cn_shangyu_gdxzExpert_bean_City where parent=?",new String[] { cityId }); + + ArrayList disctictList = new ArrayList(); + // 该市的所有区名称 + ArrayList disctictName = new ArrayList(); + while (cursorDisctict.moveToNext()) { + City cityDis = new City(); + cityDis.set_id(cursorDisctict.getString(cursorDisctict + .getColumnIndex("_id"))); + cityDis.setName(cursorDisctict.getString(cursorDisctict + .getColumnIndex("name"))); + // 区id + disctictList.add(cityDis); + // 区名称 + disctictName.add(cityDis.getName()); + // LogUtil.i("区id="+cityDis.get_id()+"FullName="+cityDis.getFullName()); + } + // 如果只有市区没有区县,为了不为空,则手动添加“”;比如北京,东城区,没有了第三级,为了防止异常,虚构第三级为空 + if (!cursorDisctict.moveToFirst()) { + disctictName.add(""); + disctictList.add(city); + } + // LogUtil.i("moveToNext()="+cursorDisctict.moveToNext() + + // "moveToFirst()=" + cursorDisctict.moveToFirst()); + cursorDisctict.close(); + // 该城市里的所有区名称 + cityDisctict.add(disctictName); + // 该城市里的所有区id + cityDisctictId.add(disctictList); + + } + cursorCity.close(); + // 该省的所有市id + this.cityIdList.add(cityList); + // 该省的所有市名称 + this.city.add(cityName); + // 该省的该市的所有区名称 + this.county.add(cityDisctict); + // 该省的该市的所有区id + this.countyIdList.add(cityDisctictId); + + } + cursor.close(); + return true; + } else { + return false; + } + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case CREATEGOODSORDER: + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, CreateGoodsOrderBean.class); + pd.dismiss(); + if (fromJsonBean!=null&&"200".equals(fromJsonBean.getCode())) { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_makesureinfo, null); + dialog = new AlertDialog.Builder(ContactEmailActivity.this).create(); + TextView tv_infotitle = (TextView) layout.findViewById(R.id.tv_infotitle); + TextView tv_name = (TextView) layout.findViewById(R.id.tv_name); + TextView tv_tele = (TextView) layout.findViewById(R.id.tv_tele); + TextView tv_address = (TextView) layout.findViewById(R.id.tv_address); + TextView tv_addressdetail = (TextView) layout.findViewById(R.id.tv_addressdetail); + TextView tv_point = (TextView) layout.findViewById(R.id.tv_point); + TextView tv_baoyou = (TextView) layout.findViewById(R.id.tv_baoyou); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + tv_name.setText(fromJsonBean.getData().getUser_name()); + tv_tele.setText(fromJsonBean.getData().getMobile()); + if ("UpanExchangeActivityt".equals(typeupan)){ + tv_point.setText("0积分"); + }else { + tv_point.setText(fromJsonBean.getData().getPionts()+"积分"); + } + + goods_order_uuid = fromJsonBean.getData().getGoods_order_id(); + if (type==1) { + + tv_addressdetail.setText(fromJsonBean.getData().getAddress()); + }else { + tv_infotitle.setText("确认兑换信息"); + tv_address.setText("邮 箱:"); + if (TextUtils.isEmpty(fromJsonBean.getData().getEmail())) { + tv_addressdetail.setText("无"); + }else { + tv_addressdetail.setText(fromJsonBean.getData().getEmail()); + } + + tv_baoyou.setVisibility(View.GONE); + } + +// dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(this); + + }else { + ToastUtil.showMessage("创建订单失败"); + } + + break; + + case PAYGOODSORDER: + Gson gson1 = new Gson(); + fromJsonBean1 = gson1.fromJson(resultJson, PayGoodsOrderbean.class); + pd.dismiss(); + if (fromJsonBean1!=null&&"200".equals(fromJsonBean1.getCode())){ + ToastUtil.showMessage("支付成功"); + AppManager.getAppManager().finishAllActivity1(); + }else if ("106".equals(fromJsonBean1.getCode())) { + ToastUtil.showMessage("积分不足"); + }else { + ToastUtil.showMessage("支付失败"); + } + + break; + case USEWELFARENUM: + Gson gson12 = new Gson(); + BaseBean bean1 = gson12.fromJson( resultJson, BaseBean.class); + if (bean1!=null&&"1".equals(bean1.code)){ + AppManager.getAppManager().finishAllActivity1(); + } + ToastUtil.showMessage(bean1.message); + break; + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ExchangeDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ExchangeDetailActivity.java new file mode 100644 index 0000000..adf36f7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ExchangeDetailActivity.java @@ -0,0 +1,432 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LogisticsActivity; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GetGoodsOrderBean; +import cn.shangyu.gdxzExpert.bean.PayGoodsOrderbean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.CopyButtonLibrary; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ExchangeDetailActivity extends BaseActivity implements OnCallBackFromNet{ + + private String uuid; + private TextView tv_id,tv_good,tv_num,tv_point,tv_time,tv_type,tv_typenum,wuliu; + private GetGoodsOrderBean fromJsonBean; + private RelativeLayout rl_wuliubianhuan; + private CustomProgressDialog pd; + private LinearLayout ll_time; + private Button btn_cancle; + private Button btn_go_to_pay; + private ECAlertDialog buildAlert1; + private PayGoodsOrderbean fromJsonBean3; + private GetGoodsOrderBean fromJsonBean1; + private AlertDialog dialog; + private int recLen; + private String goods_order_uuid; + private Timer timer; + private TextView tv_pay_time; + private boolean flag =false; + private Button btn_copy; + TextView btn_cha; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("兑换详情"); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_exchangedetail_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_exchangedetail); + } + uuid = getIntent().getExtras().getString("uuid"); + AppManager.getAppManager().addActivity1(this); + + initView(view); + getData(); + return view; + } + + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.getGoodsOrder, param, 1, this); + } + + private void initView(View view) { + // TODO Auto-generated method stub + tv_id = (TextView) view.findViewById(R.id.tv_id);//兑换号: + tv_good = (TextView) view.findViewById(R.id.tv_good);//兑换物品: + tv_num = (TextView) view.findViewById(R.id.tv_num);//兑换数量: + tv_point = (TextView) view.findViewById(R.id.tv_point);//积分: + tv_time = (TextView) view.findViewById(R.id.tv_time);//创建时间: + tv_type = (TextView) view.findViewById(R.id.tv_type);//物流: + tv_typenum = (TextView) view.findViewById(R.id.tv_typenum);//物流编号: + tv_pay_time = (TextView) view.findViewById(R.id.tv_pay_time);// + wuliu = (TextView) view.findViewById(R.id.wuliu);//物流 + rl_wuliubianhuan = (RelativeLayout) view.findViewById(R.id.rl_wuliubianhuan);//物流编号: + ll_time = (LinearLayout) view.findViewById(R.id.ll_time); + btn_cancle = (Button) view.findViewById(R.id.btn_cancle); + btn_go_to_pay = (Button) view.findViewById(R.id.btn_go_to_pay); + btn_copy = view.findViewById(R.id.btn_copy); + btn_cha = view.findViewById(R.id.btn_cha); + + btn_copy.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + CopyButtonLibrary copyButtonLibrary = new CopyButtonLibrary(getApplicationContext(),tv_typenum); + copyButtonLibrary.init(); + } + }); + btn_cha.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(ExchangeDetailActivity.this, LogisticsActivity.class); +// Intent intent = new Intent(ExchangeDetailActivity.this, H5AllActivity.class); +// intent.putExtra("title","物流信息"); + intent.putExtra("order_id",fromJsonBean.getData().getGoods_order_id()); + intent.putExtra("number",fromJsonBean.getData().getExpress_id()); + intent.putExtra("name",fromJsonBean.getData().getExpress_name()); + startActivity(intent); + } + }); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + default: + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 1: + LogUtil.i("resultJson = "+resultJson); + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, GetGoodsOrderBean.class); + if (fromJsonBean!=null&&"200".equals(fromJsonBean.getCode())) { + tv_id.setText(fromJsonBean.getData().getGoods_order_id()); + tv_good.setText(fromJsonBean.getData().getName()); + tv_num.setText(fromJsonBean.getData().getGoods_num()+""); + tv_point.setText(fromJsonBean.getData().getPionts()+""); + String millon = DateUtil.timestampToString((Integer)fromJsonBean.getData().getCreate_date()); + tv_time.setText(millon); + if (fromJsonBean.getData().getType()==1) { + tv_type.setText(fromJsonBean.getData().getExpress_name()); + tv_typenum.setText(fromJsonBean.getData().getExpress_id()); + if (!StringUtil.isEmpty(tv_typenum.getText().toString())){ + btn_copy.setVisibility(View.VISIBLE); + btn_cha.setVisibility(View.VISIBLE); + } + }else{ + wuliu.setText("手机:"); + rl_wuliubianhuan.setVisibility(View.GONE); + tv_type.setText(fromJsonBean.getData().getMobile()); + + } + + + if (fromJsonBean.getData().getStatus()==1) { + ll_time.setVisibility(View.VISIBLE); + btn_cancle.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + showAlertDialog(); + } + + + }); + btn_go_to_pay.setOnClickListener(new OnClickListener() { + + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + LayoutInflater inflater = LayoutInflater.from(ExchangeDetailActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_makesureinfo, null); + dialog = new AlertDialog.Builder( + ExchangeDetailActivity.this).create(); + TextView tv_infotitle = (TextView) layout.findViewById(R.id.tv_infotitle); + TextView tv_name = (TextView) layout.findViewById(R.id.tv_name); + TextView tv_tele = (TextView) layout.findViewById(R.id.tv_tele); + TextView tv_address = (TextView) layout.findViewById(R.id.tv_address); + TextView tv_addressdetail = (TextView) layout.findViewById(R.id.tv_addressdetail); + TextView tv_point = (TextView) layout.findViewById(R.id.tv_point); + TextView tv_baoyou = (TextView) layout.findViewById(R.id.tv_baoyou); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + tv_name.setText(fromJsonBean.getData().getUser_name()); + tv_tele.setText(fromJsonBean.getData().getMobile()); + tv_point.setText(fromJsonBean.getData().getPionts()+"积分"); + goods_order_uuid = fromJsonBean.getData().getGoods_order_id(); + int type = fromJsonBean.getData().getType(); + if (type==1) { + + tv_addressdetail.setText(fromJsonBean.getData().getAddress()); + }else { + tv_infotitle.setText("确认兑换信息"); + tv_address.setText("邮箱:"); + if (TextUtils.isEmpty(fromJsonBean.getData().getEmail())) { + tv_addressdetail.setText("无"); + }else { + tv_addressdetail.setText(fromJsonBean.getData().getEmail()); + } + tv_baoyou.setVisibility(View.GONE); + } + +// dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + payGoodsOrder(); + } + + }); + } + }); + + Date date = new Date(Long.parseLong(fromJsonBean.getData().getTime_expire()+"") * 1000); + Date date1 = new Date(Long.parseLong(fromJsonBean.getData().getSystem_time()+"") * 1000); + recLen = (int) ((date.getTime() - date1.getTime()) / 1000); + TimerTask task = new TimerTask() { + @Override + public void run() { + + runOnUiThread(new Runnable() { // UI thread + + + + @Override + public void run() { + recLen--; + tv_pay_time.setText(secToTime(recLen)); + if (recLen <= 0) { + timer.cancel(); + ll_time.setVisibility(View.GONE); + flag = true; + CancleOrder(); + + } + } + }); + } + }; + timer = new Timer(); + timer.schedule(task, 1000, 1000); // timeTask + + } + }else { + ToastUtil.showMessage("请求失败"); + } + + pd.dismiss(); + break; + case 2: + Gson gson1 = new Gson(); + fromJsonBean1 = gson1.fromJson(resultJson, GetGoodsOrderBean.class); + if (fromJsonBean1!=null&&"200".equals(fromJsonBean1.getCode())) { + if (!flag) { + ToastUtil.showMessage("已取消"); + AppManager.getAppManager().finishAllActivity1(); + } + }else{ + if (!flag) { + ToastUtil.showMessage("请求失败"); + } + } + break; + + case 3: + Gson gson3 = new Gson(); + fromJsonBean3 = gson3.fromJson(resultJson, PayGoodsOrderbean.class); + pd.dismiss(); + if (fromJsonBean3!=null&&"200".equals(fromJsonBean3.getCode())){ + ToastUtil.showMessage("支付成功"); + AppManager.getAppManager().finishAllActivity1(); + }else if ("106".equals(fromJsonBean3.getCode())) { + ToastUtil.showMessage("积分不足"); + }else { + ToastUtil.showMessage("支付失败"); + } + break; + default: + break; + } + } + private void payGoodsOrder() { + // TODO Auto-generated method stub + dialog.dismiss(); + pd.show(); + Map param = new HashMap<>(); + param.put("goods_order_uuid",goods_order_uuid); + sendJsonPostParamtoNetSignMD5(Url.payGoodsOrder, param, 3, this); + } + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + default: + break; + } + } + public static String secToTime(int time) { + String timeStr = null; + int hour = 0; + int minute = 0; + int second = 0; + if (time <= 0) + return "00:00"; + else { + minute = time / 60; + if (minute < 60) { + second = time % 60; + timeStr = unitFormat(minute) + ":" + unitFormat(second); + } else { + hour = minute / 60; + if (hour > 99) + return "99:59:59"; + minute = minute % 60; + second = time - hour * 3600 - minute * 60; + timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + + unitFormat(second); + } + } + return timeStr; + } + + public static String unitFormat(int i) { + String retStr = null; + if (i >= 0 && i < 10) + retStr = "0" + Integer.toString(i); + else + retStr = "" + i; + return retStr; + } + protected void showAlertDialog() { + // TODO Auto-generated method stub + if (buildAlert1 == null) { + buildAlert1 = ECAlertDialog.buildAlert(ExchangeDetailActivity.this, + "确定取消本次订单支付吗?", "否", "是", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) {// 取消 + // TODO Auto-generated method stub + buildAlert1.dismiss(); + return; + + } + }, new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert1.dismiss(); + + CancleOrder(); + } + }); + buildAlert1.setTitle("提示"); + + buildAlert1.setCanceledOnTouchOutside(false); + } + buildAlert1.show(); + } + private void CancleOrder() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("goods_order_uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.cancleGoodsOrder, param,2, this); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/HeaderGridView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/HeaderGridView.java new file mode 100644 index 0000000..7f0ed05 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/HeaderGridView.java @@ -0,0 +1,397 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import java.util.ArrayList; + + +import android.annotation.SuppressLint; +import android.content.Context; +import android.database.DataSetObservable; +import android.database.DataSetObserver; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.Filter; +import android.widget.Filterable; +import android.widget.FrameLayout; +import android.widget.GridView; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.WrapperListAdapter; +/** + * A {@link GridView} that supports adding header rows in a + * very similar way to {@link ListView}. + * See {@link HeaderGridView#addHeaderView(View, Object, boolean)} + */ +@SuppressLint("NewApi") +public class HeaderGridView extends GridView { + private static final String TAG = "HeaderGridView"; + /** + * A class that represents a fixed view in a list, for example a header at the top + * or a footer at the bottom. + */ + private static class FixedViewInfo { + /** The view to add to the grid */ + public View view; + public ViewGroup viewContainer; + /** The data backing the view. This is returned from {@link ListAdapter#getItem(int)}. */ + public Object data; + /** true if the fixed view should be selectable in the grid */ + public boolean isSelectable; + } + private ArrayList mHeaderViewInfos = new ArrayList(); + private void initHeaderGridView() { + super.setClipChildren(false); + } + public HeaderGridView(Context context) { + super(context); + initHeaderGridView(); + } + public HeaderGridView(Context context, AttributeSet attrs) { + super(context, attrs); + initHeaderGridView(); + } + public HeaderGridView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initHeaderGridView(); + } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + ListAdapter adapter = getAdapter(); + if (adapter != null && adapter instanceof HeaderViewGridAdapter) { + ((HeaderViewGridAdapter) adapter).setNumColumns(getNumColumns()); + } + } + @Override + public void setClipChildren(boolean clipChildren) { + // Ignore, since the header rows depend on not being clipped + } + /** + * Add a fixed view to appear at the top of the grid. If addHeaderView is + * called more than once, the views will appear in the order they were + * added. Views added using this call can take focus if they want. + *

+ * NOTE: Call this before calling setAdapter. This is so HeaderGridView can wrap + * the supplied cursor with one that will also account for header views. + * + * @param v The view to add. + * @param data Data to associate with this view + * @param isSelectable whether the item is selectable + */ + public void addHeaderView(View v, Object data, boolean isSelectable) { + ListAdapter adapter = getAdapter(); + if (adapter != null && ! (adapter instanceof HeaderViewGridAdapter)) { + throw new IllegalStateException( + "Cannot add header view to grid -- setAdapter has already been called."); + } + FixedViewInfo info = new FixedViewInfo(); + FrameLayout fl = new FullWidthFixedViewLayout(getContext()); + fl.addView(v); + info.view = v; + info.viewContainer = fl; + info.data = data; + info.isSelectable = isSelectable; + mHeaderViewInfos.add(info); + // in the case of re-adding a header view, or adding one later on, + // we need to notify the observer + if (adapter != null) { + ((HeaderViewGridAdapter) adapter).notifyDataSetChanged(); + } + } + /** + * Add a fixed view to appear at the top of the grid. If addHeaderView is + * called more than once, the views will appear in the order they were + * added. Views added using this call can take focus if they want. + *

+ * NOTE: Call this before calling setAdapter. This is so HeaderGridView can wrap + * the supplied cursor with one that will also account for header views. + * + * @param v The view to add. + */ + public void addHeaderView(View v) { + addHeaderView(v, null, true); + } + public int getHeaderViewCount() { + return mHeaderViewInfos.size(); + } + /** + * Removes a previously-added header view. + * + * @param v The view to remove + * @return true if the view was removed, false if the view was not a header + * view + */ + public boolean removeHeaderView(View v) { + if (mHeaderViewInfos.size() > 0) { + boolean result = false; + ListAdapter adapter = getAdapter(); + if (adapter != null && ((HeaderViewGridAdapter) adapter).removeHeader(v)) { + result = true; + } + removeFixedViewInfo(v, mHeaderViewInfos); + return result; + } + return false; + } + private void removeFixedViewInfo(View v, ArrayList where) { + int len = where.size(); + for (int i = 0; i < len; ++i) { + FixedViewInfo info = where.get(i); + if (info.view == v) { + where.remove(i); + break; + } + } + } + @Override + public void setAdapter(ListAdapter adapter) { + if (mHeaderViewInfos.size() > 0) { + HeaderViewGridAdapter hadapter = new HeaderViewGridAdapter(mHeaderViewInfos, adapter); + int numColumns = getNumColumns(); + if (numColumns > 1) { + hadapter.setNumColumns(numColumns); + } + super.setAdapter(hadapter); + } else { + super.setAdapter(adapter); + } + } + private class FullWidthFixedViewLayout extends FrameLayout { + public FullWidthFixedViewLayout(Context context) { + super(context); + } + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int targetWidth = HeaderGridView.this.getMeasuredWidth() + - HeaderGridView.this.getPaddingLeft() + - HeaderGridView.this.getPaddingRight(); + widthMeasureSpec = MeasureSpec.makeMeasureSpec(targetWidth, + MeasureSpec.getMode(widthMeasureSpec)); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } + /** + * ListAdapter used when a HeaderGridView has header views. This ListAdapter + * wraps another one and also keeps track of the header views and their + * associated data objects. + *

This is intended as a base class; you will probably not need to + * use this class directly in your own code. + */ + private static class HeaderViewGridAdapter implements WrapperListAdapter, Filterable { + // This is used to notify the container of updates relating to number of columns + // or headers changing, which changes the number of placeholders needed + private final DataSetObservable mDataSetObservable = new DataSetObservable(); + private final ListAdapter mAdapter; + private int mNumColumns = 1; + // This ArrayList is assumed to NOT be null. + ArrayList mHeaderViewInfos; + boolean mAreAllFixedViewsSelectable; + private final boolean mIsFilterable; + public HeaderViewGridAdapter(ArrayList headerViewInfos, ListAdapter adapter) { + mAdapter = adapter; + mIsFilterable = adapter instanceof Filterable; + if (headerViewInfos == null) { + throw new IllegalArgumentException("headerViewInfos cannot be null"); + } + mHeaderViewInfos = headerViewInfos; + mAreAllFixedViewsSelectable = areAllListInfosSelectable(mHeaderViewInfos); + } + public int getHeadersCount() { + return mHeaderViewInfos.size(); + } + @Override + public boolean isEmpty() { + return (mAdapter == null || mAdapter.isEmpty()) && getHeadersCount() == 0; + } + public void setNumColumns(int numColumns) { + if (numColumns < 1) { + throw new IllegalArgumentException("Number of columns must be 1 or more"); + } + if (mNumColumns != numColumns) { + mNumColumns = numColumns; + notifyDataSetChanged(); + } + } + private boolean areAllListInfosSelectable(ArrayList infos) { + if (infos != null) { + for (FixedViewInfo info : infos) { + if (!info.isSelectable) { + return false; + } + } + } + return true; + } + public boolean removeHeader(View v) { + for (int i = 0; i < mHeaderViewInfos.size(); i++) { + FixedViewInfo info = mHeaderViewInfos.get(i); + if (info.view == v) { + mHeaderViewInfos.remove(i); + mAreAllFixedViewsSelectable = areAllListInfosSelectable(mHeaderViewInfos); + mDataSetObservable.notifyChanged(); + return true; + } + } + return false; + } + @Override + public int getCount() { + if (mAdapter != null) { + return getHeadersCount() * mNumColumns + mAdapter.getCount(); + } else { + return getHeadersCount() * mNumColumns; + } + } + @Override + public boolean areAllItemsEnabled() { + if (mAdapter != null) { + return mAreAllFixedViewsSelectable && mAdapter.areAllItemsEnabled(); + } else { + return true; + } + } + @Override + public boolean isEnabled(int position) { + // Header (negative positions will throw an ArrayIndexOutOfBoundsException) + int numHeadersAndPlaceholders = getHeadersCount() * mNumColumns; + if (position < numHeadersAndPlaceholders) { + return (position % mNumColumns == 0) + && mHeaderViewInfos.get(position / mNumColumns).isSelectable; + } + // Adapter + final int adjPosition = position - numHeadersAndPlaceholders; + int adapterCount = 0; + if (mAdapter != null) { + adapterCount = mAdapter.getCount(); + if (adjPosition < adapterCount) { + return mAdapter.isEnabled(adjPosition); + } + } + throw new ArrayIndexOutOfBoundsException(position); + } + @Override + public Object getItem(int position) { + // Header (negative positions will throw an ArrayIndexOutOfBoundsException) + int numHeadersAndPlaceholders = getHeadersCount() * mNumColumns; + if (position < numHeadersAndPlaceholders) { + if (position % mNumColumns == 0) { + return mHeaderViewInfos.get(position / mNumColumns).data; + } + return null; + } + // Adapter + final int adjPosition = position - numHeadersAndPlaceholders; + int adapterCount = 0; + if (mAdapter != null) { + adapterCount = mAdapter.getCount(); + if (adjPosition < adapterCount) { + return mAdapter.getItem(adjPosition); + } + } + throw new ArrayIndexOutOfBoundsException(position); + } + @Override + public long getItemId(int position) { + int numHeadersAndPlaceholders = getHeadersCount() * mNumColumns; + if (mAdapter != null && position >= numHeadersAndPlaceholders) { + int adjPosition = position - numHeadersAndPlaceholders; + int adapterCount = mAdapter.getCount(); + if (adjPosition < adapterCount) { + return mAdapter.getItemId(adjPosition); + } + } + return -1; + } + @Override + public boolean hasStableIds() { + if (mAdapter != null) { + return mAdapter.hasStableIds(); + } + return false; + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // Header (negative positions will throw an ArrayIndexOutOfBoundsException) + int numHeadersAndPlaceholders = getHeadersCount() * mNumColumns ; + if (position < numHeadersAndPlaceholders) { + View headerViewContainer = mHeaderViewInfos + .get(position / mNumColumns).viewContainer; + if (position % mNumColumns == 0) { + return headerViewContainer; + } else { + if (convertView == null) { + convertView = new View(parent.getContext()); + } + // We need to do this because GridView uses the height of the last item + // in a row to determine the height for the entire row. + convertView.setVisibility(View.INVISIBLE); + convertView.setMinimumHeight(headerViewContainer.getHeight()); + return convertView; + } + } + // Adapter + final int adjPosition = position - numHeadersAndPlaceholders; + int adapterCount = 0; + if (mAdapter != null) { + adapterCount = mAdapter.getCount(); + if (adjPosition < adapterCount) { + return mAdapter.getView(adjPosition, convertView, parent); + } + } + throw new ArrayIndexOutOfBoundsException(position); + } + @Override + public int getItemViewType(int position) { + int numHeadersAndPlaceholders = getHeadersCount() * mNumColumns; + if (position < numHeadersAndPlaceholders && (position % mNumColumns != 0)) { + // Placeholders get the last view type number + return mAdapter != null ? mAdapter.getViewTypeCount() : 1; + } + if (mAdapter != null && position >= numHeadersAndPlaceholders) { + int adjPosition = position - numHeadersAndPlaceholders; + int adapterCount = mAdapter.getCount(); + if (adjPosition < adapterCount) { + return mAdapter.getItemViewType(adjPosition); + } + } + return AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER; + } + @Override + public int getViewTypeCount() { + if (mAdapter != null) { + return mAdapter.getViewTypeCount() + 1; + } + return 2; + } + @Override + public void registerDataSetObserver(DataSetObserver observer) { + mDataSetObservable.registerObserver(observer); + if (mAdapter != null) { + mAdapter.registerDataSetObserver(observer); + } + } + @Override + public void unregisterDataSetObserver(DataSetObserver observer) { + mDataSetObservable.unregisterObserver(observer); + if (mAdapter != null) { + mAdapter.unregisterDataSetObserver(observer); + } + } + @Override + public Filter getFilter() { + if (mIsFilterable) { + return ((Filterable) mAdapter).getFilter(); + } + return null; + } + @Override + public ListAdapter getWrappedAdapter() { + return mAdapter; + } + public void notifyDataSetChanged() { + mDataSetObservable.notifyChanged(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/IntegralTicketActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/IntegralTicketActivity.java new file mode 100644 index 0000000..21f10e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/IntegralTicketActivity.java @@ -0,0 +1,407 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.app.AlertDialog; +import android.content.Context; +import android.graphics.Color; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.PointTicketlistBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/4/15. + */ + +public class IntegralTicketActivity extends BaseActivity implements RadioGroup.OnCheckedChangeListener,OnCallBackFromNet{ + + private RadioGroup rg_ticket; + private PullToRefreshListView lv_ticket; + private int status = 1;//1未兑换、2已兑换、3过期、4作废 + private int page = 1; + private static final int POINTTICKETLIST = 101; + private static final int UPDATESTATUS = 102; + private PointTicketlistBean pointTicketlistBean; + private List list; + private CustomProgressDialog pd; + private IntegralTicketAdapter adapter; + private boolean ischange; + private LinearLayout ll_empty; + private AlertDialog dialog; + + @Override + public void setTitle() { + top_title.setText("积分券"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_integralticket_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_integralticket); + } + rg_ticket = view.findViewById(R.id.rg_ticket); + lv_ticket = view.findViewById(R.id.lv_ticket); + ll_empty = view.findViewById(R.id.ll_empty); + ll_empty.setBackgroundColor(Color.parseColor("#EFEFEF")); + lv_ticket.setEmptyView(ll_empty); + pd = new CustomProgressDialog(this, "请稍候"); + initListViewTipText(); + //积分券列表 + list = new ArrayList<>(); + getPointTicketlist(); + lv_ticket.setMode(PullToRefreshBase.Mode.BOTH); + pd.show(); + rg_ticket.setOnCheckedChangeListener(this); + return view; + } + + private void getPointTicketlist() { + pd.show(); + Map map = new HashMap<>(); + map.put("page",page+""); + map.put("status",status+""); + sendJsonPostParamtoNetSignMD5(Url.pointTicketlist,map,POINTTICKETLIST,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + lv_ticket.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + ischange = false; + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + ischange = false; + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_ticket + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_ticket.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub + page = 1; + getPointTicketlist(); + } + private void geneItems() { + // TODO Auto-generated method stub + page++; + getPointTicketlist(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId){ + case R.id.rb_1://未兑换 + status = 1; + ischange = true; + refreshItems(); + break; + case R.id.rb_2://已兑换 + status = 2; + ischange = true; + refreshItems(); + break; + case R.id.rb_3://已过期 + status = 3; + ischange = true; + refreshItems(); + break; + case R.id.rb_4://已作废 + status = 4; + ischange = true; + refreshItems(); + break; + + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + pd.dismiss(); + switch (resultCode){ + case POINTTICKETLIST: + LogUtil.i("POINTTICKETLIST = "+resultJson); + if (TextUtils.isEmpty(resultJson)) { + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson1 = new Gson(); + pointTicketlistBean = gson1.fromJson(resultJson,PointTicketlistBean.class); + if (page==1) { + list.clear(); + }else{ + if (pointTicketlistBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + } + } + if (pointTicketlistBean.getData()!=null){ + list.addAll(pointTicketlistBean.getData().getList()); + } + if (adapter == null|| ischange ) { + adapter = new IntegralTicketAdapter(this,list); + lv_ticket.setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + lv_ticket.onRefreshComplete(); + break; + case UPDATESTATUS: + LogUtil.i("UPDATESTATUS = "+resultJson); + if (resultJson.contains("200")){ + refreshItems(); + ToastUtil.showMessage("兑换成功"); + }else { + try { + JSONObject jsonObject = new JSONObject(resultJson); + ToastUtil.showMessage(jsonObject.optString("message")); + } catch (JSONException e) { + e.printStackTrace(); + } + + } + break; + } + } + + class IntegralTicketAdapter extends BaseAdapter{ + private Context mContent; + private List list; + public IntegralTicketAdapter(Context mContent, List list) { + super(); + this.mContent = mContent; + this.list = list; + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(final int position, View convertView, ViewGroup parent) { + + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContent, R.layout.item_ticket,null); + holder.tv_onlineexchange = convertView.findViewById(R.id.tv_onlineexchange); + holder.tv_time = convertView.findViewById(R.id.tv_time); + holder.rl_bg = convertView.findViewById(R.id.rl_bg); + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + + String day = DateUtil.timestamp2Date(list.get(position).getEnd_date()+"","yyyy-MM-dd"); + String[] split = day.split("-"); + holder.tv_time.setText("有效期:"+split[0]+"年"+split[1]+"月"+split[2]+"日"); + if (status!=1){ + holder.tv_onlineexchange.setVisibility(View.GONE); + switch (list.get(position).getPoint()){ + case 250: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_250_1)); + break; + case 500: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_500_1)); + break; + case 1000: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_1000_1)); + break; + case 5000: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_5000_1)); + break; + case 10000: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_10000_1)); + break; + } + }else { + switch (list.get(position).getPoint()){ + case 250: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_250)); + break; + case 500: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_500)); + break; + case 1000: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_1000)); + break; + case 5000: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_5000)); + break; + case 10000: + holder.rl_bg.setBackground(getResources().getDrawable(R.drawable.bg_10000)); + break; + } + } + + holder.tv_onlineexchange.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + //积分券兑换 + LayoutInflater inflater = LayoutInflater.from(IntegralTicketActivity.this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_integralticket, null); + dialog = new AlertDialog.Builder(IntegralTicketActivity.this).create(); + TextView btn_cancel = layout.findViewById(R.id.btn_cancel); + TextView btn_sure = layout.findViewById(R.id.btn_sure); + + + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + updateStatus(list.get(position).getUuid()); + dialog.dismiss(); + } + }); + + } + + + }); + + return convertView; + } + + class Holder { + TextView tv_onlineexchange,tv_time; + RelativeLayout rl_bg; + + + } + + } + + private void updateStatus(String uuid) { + Map map = new HashMap<>(); + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.updateStatus,map,UPDATESTATUS,this); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/MyExchangeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/MyExchangeActivity.java new file mode 100644 index 0000000..a352c9c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/MyExchangeActivity.java @@ -0,0 +1,347 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GoodsOrderListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class MyExchangeActivity extends BaseActivity implements OnItemClickListener,OnCallBackFromNet{ + + private PullToRefreshListView lv_myexchange; + private int startPage = 1; + private CustomProgressDialog pd; + private GoodsOrderListBean fromJsonBean; + private List beans; + + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private Handler handler = new Handler() { + private MyExchangeAdapter adapter; + + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + ll_empty.setVisibility(View.VISIBLE); + lv_myexchange.setMode(Mode.DISABLED); + return; + } + if (beans.size() < 4) {//||fromJsonBean.getData().getList().size()==0 + lv_myexchange.setMode(Mode.PULL_FROM_START); + }else { + lv_myexchange.setMode(Mode.BOTH); + } + setAdapter(); + pd.dismiss(); + lv_myexchange.onRefreshComplete(); + + break; + default: + break; + } + + } + + private void setAdapter() { + // TODO Auto-generated method stub + if (adapter == null) { + adapter = new MyExchangeAdapter(); + lv_myexchange.setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + + } + + }; + private LinearLayout ll_empty; + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("我的兑换"); + top_back_layout.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_myexchange); + AppManager.getAppManager().addActivity1(this); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + lv_myexchange = (PullToRefreshListView) view.findViewById(R.id.lv_myexchange); + lv_myexchange.setEmptyView(ll_empty); + initListViewTipText(); + beans = new ArrayList<>(); + getData(); + lv_myexchange.setOnItemClickListener(this); + return view; + } + + class MyExchangeAdapter extends BaseAdapter{ + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beans.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beans.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder vh = null; + if (convertView == null) { + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_myexchange_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_myexchange); + } + vh = new ViewHolder(); + vh.tv_goodname = (TextView) convertView.findViewById(R.id.tv_goodname); + vh.tv_goodtime = (TextView) convertView.findViewById(R.id.tv_goodtime); + vh.tv_state = (TextView) convertView.findViewById(R.id.tv_state); + convertView.setTag(vh); + } else { + vh = (ViewHolder) convertView.getTag(); + } + String day = DateUtil.timestamp2Date(beans.get(position).getCreate_date()+"","yyyy-MM-dd"); + vh.tv_goodname.setText(beans.get(position).getGoods_name()); + vh.tv_goodtime.setText(day); + String statesString = null; + switch (beans.get(position).getStatus()) { + case 1: + statesString = "待支付"; + break; + case 2: + statesString = "已支付"; + break; + case 3: + statesString = "已取消"; + break; + case 4: + statesString = "已发货"; + break; + case 5: + statesString = "已收货"; + break; + case 6: + statesString = "订单异常"; + break; + } + vh.tv_state.setText(statesString); + return convertView; + } + //第一个Item的ViewHolder + private class ViewHolder{ + + TextView tv_goodname,tv_state,tv_goodtime; + } + + +} + + + + private void initListViewTipText() { + // TODO Auto-generated method stub + + lv_myexchange.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = lv_myexchange + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = lv_myexchange.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub + startPage = 1; + getData(); + } + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + sendJsonPostParamtoNetSignMD5(Url.goodsOrderList, param, 1, this); + + } + + private void geneItems() { + // TODO Auto-generated method stub + startPage ++; + getData(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(MyExchangeActivity.this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.top_back_layout: + finish(); + break; + default: + break; + } + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + int headerViewsCount = lv_myexchange.getRefreshableView() + .getHeaderViewsCount(); + int position1 = position - headerViewsCount; + Intent intent = new Intent(MyExchangeActivity.this,ExchangeDetailActivity.class); + String uuid = beans.get(position1).getUuid(); + intent.putExtra("uuid", uuid); + startActivity(intent); + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 1: + if (TextUtils.isEmpty(resultJson)) { + pd.dismiss(); + ToastUtil.showMessage("服务器连接异常"); + return; + } + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, GoodsOrderListBean.class); + if (startPage==1) { + if (beans.size() != 0) { + beans.clear(); + startPage = 1; + } + }else{ + if (fromJsonBean.getData().getList().size() == 0) { + ToastUtil.showMessage("没有更多数据了"); + } + } + beans.addAll(fromJsonBean.getData().getList()); + handler.sendEmptyMessage(GET_DATA_SUCCESS); + break; + + default: + break; + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/OnlineExchangeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/OnlineExchangeActivity.java new file mode 100644 index 0000000..57adb27 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/OnlineExchangeActivity.java @@ -0,0 +1,283 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class OnlineExchangeActivity extends BaseActivity implements OnClickListener,OnCallBackFromNet,RadioGroup.OnCheckedChangeListener{ + + private TextView tv_num; + private RadioButton tv_num1,tv_num2,tv_num3; + private RadioGroup ll_num; + private TextView tv_exchange; + private int type;//1:实物,2:虚拟 + private int points;//积分 + private String name,times,uuid; + private TextView tv_name,tv_jifen,tv_duihuan,tv_needpoint; + public static final int GETTOTALPOINTS = 200; + private int allpoint; + private ECAlertDialog dilaog2; + private RadioGroup rg_group; + private int num = 1;//购买数量 + private int unum; + private RadioButton rb_2,rb_3; + int upan; + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("在线兑换"); + top_back_layout.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_onlineexchange); + Intent intent = getIntent(); + type = intent.getExtras().getInt("type"); + points = intent.getExtras().getInt("points"); + name = intent.getExtras().getString("name"); + times = intent.getExtras().getString("times"); + uuid = intent.getExtras().getString("uuid"); + upan=getIntent().getIntExtra("upan",0); + allpoint = points; + AppManager.getAppManager().addActivity1(this); + initView(view); + setData(); + setOnClick(); + + return view; + } + + private void setData() { + // TODO Auto-generated method stub + tv_name.setText(name); + tv_duihuan.setText(times); + tv_jifen.setText(points+"积分"); + tv_needpoint.setText(points+"积分"); + } + + private void initView(View view) { + // TODO Auto-generated method stub + tv_num = (TextView) view.findViewById(R.id.tv_num); + tv_num1 = (RadioButton) view.findViewById(R.id.tv_num1); + tv_num2 = (RadioButton) view.findViewById(R.id.tv_num2); + tv_num3 = (RadioButton) view.findViewById(R.id.tv_num3); + ll_num = (RadioGroup) view.findViewById(R.id.ll_num); + tv_exchange = (TextView) view.findViewById(R.id.tv_exchange); + tv_name = (TextView) view.findViewById(R.id.tv_name); + tv_jifen = (TextView) view.findViewById(R.id.tv_jifen); + tv_duihuan = (TextView) view.findViewById(R.id.tv_duihuan); + tv_needpoint = (TextView) view.findViewById(R.id.tv_needpoint); + rg_group = view.findViewById(R.id.rg_group); + rb_2 = view.findViewById(R.id.rb_2); + rb_3 = view.findViewById(R.id.rb_3); + } + + private void setOnClick() { + // TODO Auto-generated method stub + tv_num.setOnClickListener(this); + tv_num1.setOnClickListener(this); + tv_num2.setOnClickListener(this); + tv_num3.setOnClickListener(this); + tv_exchange.setOnClickListener(this); + rg_group.setOnCheckedChangeListener(this); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + + private void changeChooseDown(){ + Drawable drawable= getResources().getDrawable(R.drawable.choose_num_down); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + tv_num.setCompoundDrawables(null,null,drawable,null); + } + private void changeChooseUp(){ + Drawable drawable= getResources().getDrawable(R.drawable.choose_num_up); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); + tv_num.setCompoundDrawables(null,null,drawable,null); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.tv_num: + if (ll_num.getVisibility()==View.VISIBLE) { + ll_num.setVisibility(View.GONE); + changeChooseDown(); + }else{ + changeChooseUp(); + ll_num.setVisibility(View.VISIBLE); + } + break; + + case R.id.tv_num1: + tv_num.setText("1件"); + allpoint = points*1; + tv_needpoint.setText(allpoint+"积分"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_num2: + tv_num.setText("2件"); + allpoint = points*2; + tv_needpoint.setText(allpoint+"积分"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + case R.id.tv_num3: + tv_num.setText("3件"); + allpoint = points*3; + tv_needpoint.setText(allpoint+"积分"); + changeChooseDown(); + ll_num.setVisibility(View.GONE); + break; + + case R.id.tv_exchange: + + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getTotalPoints,map,GETTOTALPOINTS,OnlineExchangeActivity.this); + + + + break; + case R.id.top_back_layout: + finish(); + break; + + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + switch (resultCode){ + case GETTOTALPOINTS: + LogUtil.i("resultJson = "+resultJson);//{"code":"1","message":"查询成功","totalpoints":7011} + if (!StringUtil.isEmpty(resultJson)){ + try { + + JSONObject jsonObject = new JSONObject(resultJson); + int totalpoints = jsonObject.optInt("totalpoints"); + String code = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(code)){ + if (totalpoints>=allpoint){ + Intent intent = new Intent(OnlineExchangeActivity.this,ContactEmailActivity.class); + intent.putExtra("type", type); + intent.putExtra("uuid", uuid); + if (num == 1) { + intent.putExtra("goodsNum", "1"); + }else if (num == 2){ + intent.putExtra("goodsNum", "2"); + }else { + intent.putExtra("goodsNum", "3"); + } + startActivity(intent); + if(upan==1) + { + needreportPay("boint_jifengood",allpoint+"","积分",num+"",name,null,"U盘","积分商城"); + } + else if(name.contains("京东E卡")) + { + needreportPay("boint_jifengood",allpoint+"","积分",num+"",name,null,"京东E卡","积分商城"); + } + else + { + needreportPay("boint_jifengood",allpoint+"","积分",num+"",name,null,"书籍","积分商城"); + } + + }else { + + dilaog2 = ECAlertDialog.buildAlert(OnlineExchangeActivity.this, + "您的积分不足,是否购买积分?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + startActivity(new Intent(OnlineExchangeActivity.this,BuyIntegerActivty.class)); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + +// ToastUtil.showMessage("积分不足"); + } + }else { + ToastUtil.showMessage(message); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + }else { + ToastUtil.showMessage("请求失败"); + } + + + break; + } + } + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch(checkedId){ + case R.id.rb_1: + allpoint = points*1; + num = 1; + tv_needpoint.setText(allpoint+"积分"); + break; + case R.id.rb_2: + allpoint = points*2; + num = 2; + tv_needpoint.setText(allpoint+"积分"); + break; + case R.id.rb_3: + allpoint = points*3; + num = 3; + tv_needpoint.setText(allpoint+"积分"); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PointsMallActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PointsMallActivity.java new file mode 100644 index 0000000..5ff5324 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PointsMallActivity.java @@ -0,0 +1,793 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.text.format.DateUtils; +import android.util.Log; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.PublicSearchActivity; +import cn.shangyu.gdxzExpert.adapter.HospitalAdapter; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GoodsListBean; +import cn.shangyu.gdxzExpert.bean.GoodsNewsListBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterCheckBox; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PointsMallActivity extends BaseActivity implements OnClickListener,OnItemClickListener,OnCallBackFromNet{ + + private PullToRefreshHeadGridView gv_product; + private int startPage = 1; + private PointsMallAdapter adapter; + private RelativeLayout headerView; + private CustomProgressDialog pd; + private GoodsListBean fromJsonBean; + private List beans; + private LinearLayout ll_empty; + private LinearLayout top_news_viewpager,dots_ll; + private ArrayList dotList; + private RollViewPager mViewPager; + private ArrayList titleList; + protected static final int GET_DATA_SUCCESS = 0; // 请求数据成功的结果码 + private DrawableCenterCheckBox cb_exchange,cb_score,cb_shelf; + private Boolean cb_exchangeb=false; + private Boolean cb_scoreb=false; + private Boolean cb_shelfb=false; + private String sort ="1"; + String tag_type=""; + private PullToRefreshListView ptrLv; + private PullToRefreshListView ptrLvpx; + String name=""; + RelativeLayout rl_pop_list,rl_pop_listp; + private Handler handler = new Handler() { + public void handleMessage(Message msg) { + pd.dismiss(); + switch (msg.what) { + case GET_DATA_SUCCESS: + if (beans.size() == 0) { + // 没有获取则显示暂无随访的图文信息 + pd.dismiss(); + gv_product.setEmptyView(ll_empty); +// ll_empty.setVisibility(View.VISIBLE); + gv_product.setMode(Mode.DISABLED); + setAdapter(); + return; + } + if (beans.size() < 4||fromJsonBean.getData().getList().size()==0) { + gv_product.setMode(Mode.PULL_FROM_START); + }else { + gv_product.setMode(Mode.BOTH); + } + setAdapter(); + pd.dismiss(); + gv_product.onRefreshComplete(); + + break; + default: + break; + } + + } + + }; + private GoodsNewsListBean fromJsonBean1; + private TextView topNewsTitle; + private Button bt_qualitycourse; + private LinearLayout ll_integraltickit,ll_buy_point; + + private void setAdapter() { + // TODO Auto-generated method stub + if (adapter == null) { + adapter = new PointsMallAdapter(); + gv_product.getRefreshableView().setAdapter(adapter); + } else { + adapter.notifyDataSetChanged(); + } + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("积分商城"); + top_back_layout.setOnClickListener(this); + top_right_text = (TextView) findViewById(R.id.top_right_text); + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("搜索"); + top_right_text.setOnClickListener(this); + top_back_layout.setOnClickListener(this); + } + int[]sx; + String[]ssx; + String[]ssxid; + int[]px=new int[4]; + HospitalAdapter sxhospitalAdapter,pxhospitalAdapter; + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_pointsmall); + getTypeData(); + + if (!StringUtil.isEmpty(getIntent().getStringExtra("name"))) { + + name=getIntent().getStringExtra("name"); + } + ll_integraltickit = view.findViewById(R.id.ll_integraltickit); + ll_buy_point = view.findViewById(R.id.ll_buy_point); + ll_empty = (LinearLayout) View.inflate(UIUtils.getContext(),R.layout.layout_empty, null); + gv_product = (PullToRefreshHeadGridView) view.findViewById(R.id.gv_product); + bt_qualitycourse = view.findViewById(R.id.bt_qualitycourse); + bt_qualitycourse.setOnClickListener(this); + HeaderGridView refreshableView = gv_product.getRefreshableView(); + headerView =view.findViewById(R.id.header); + + final Drawable drawable_n = getResources().getDrawable(R.drawable.triangle_normal); + drawable_n.setBounds(0, 0, drawable_n.getMinimumWidth(),drawable_n.getMinimumHeight()); //此为必须写的 + final Drawable drawable_s = getResources().getDrawable(R.drawable.triangle_green_theme); + drawable_s.setBounds(0, 0, drawable_n.getMinimumWidth(),drawable_n.getMinimumHeight()); //此为必须写的 + final Drawable drawable_d = getResources().getDrawable(R.drawable.triangle_green_theme); + drawable_d.setBounds(0, 0, drawable_n.getMinimumWidth(),drawable_n.getMinimumHeight()); //此为必须写的 + rl_pop_list=view.findViewById(R.id.rl_pop_list); + rl_pop_listp=view.findViewById(R.id.rl_pop_listp); + ptrLv = view.findViewById(R.id.lv_item);// 下拉刷新的listview控件 + ptrLvpx= view.findViewById(R.id.lv_item_px); + ptrLv.setMode(PullToRefreshBase.Mode.DISABLED); + + ptrLvpx.setMode(PullToRefreshBase.Mode.DISABLED); + ptrLv.getRefreshableView().setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + cb_shelf.setTextColor(getResources().getColor(R.color.tab_text_sel)); + cb_shelf.setText(getResources().getStringArray(R.array.sx_array_item)[i-1]); + tag_type=ssxid[i-1]; +// name=""; + Arrays.fill(sx,0); + sx[i-1]=1; + sxhospitalAdapter.notifyDataSetChanged(); + cb_shelfb=true; + rl_pop_list.setVisibility(View.GONE); + cb_shelf.setCompoundDrawables(null, null, drawable_s, null); + getSortData(); + } + }); + + pxhospitalAdapter=new HospitalAdapter(PointsMallActivity.this,getResources().getStringArray(R.array.px_array_item),px); + ptrLvpx.getRefreshableView().setAdapter(pxhospitalAdapter); + ptrLvpx.getRefreshableView().setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(AdapterView adapterView, View view, int i, long l) { + cb_score.setTextColor(getResources().getColor(R.color.tab_text_sel)); + cb_score.setText(getResources().getStringArray(R.array.px_array_item)[i-1]); +// name=""; + switch (i-1) + { + case 0: + sort="4"; + break; + case 1: + sort="3"; + break; + case 2: + sort="5"; + break; + case 3: + sort="6"; + break; + } + Arrays.fill(px,0); + px[i-1]=1; + pxhospitalAdapter.notifyDataSetChanged(); + cb_scoreb=true; + rl_pop_listp.setVisibility(View.GONE); + cb_score.setCompoundDrawables(null, null, drawable_s, null); + getSortData(); + } + }); + topNewsTitle = (TextView) headerView.findViewById(R.id.top_news_title1); + top_news_viewpager = (LinearLayout) headerView.findViewById(R.id.top_news_viewpager);//头部轮播 + dots_ll = (LinearLayout) headerView.findViewById(R.id.dots_ll);//头部轮播 + top_news_viewpager.setFocusable(true); + top_news_viewpager.setFocusableInTouchMode(true); + top_news_viewpager.requestFocus(); + cb_exchange=view.findViewById(R.id.cb_exchange); + cb_score=view.findViewById(R.id.cb_score); + cb_shelf=view.findViewById(R.id.cb_shelf); + int width =getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + ViewGroup.LayoutParams ivLp = top_news_viewpager + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + top_news_viewpager.setLayoutParams(ivLp); + + + gv_product.setMode(Mode.BOTH); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + refreshableView.setNumColumns(2); +// refreshableView.addHeaderView(headerView); + initListViewTipText(); + beans = new ArrayList<>(); + getHeadScrollImg(); + getSortData(); + +// cb_score.setOnClickListener(this); + cb_score.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { +// cb_score.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// cb_shelfb=false; +// cb_shelf.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// cb_shelf.setCompoundDrawables(null, null, drawable_n, null); +// cb_exchangeb=false; +// cb_exchange.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// cb_exchange.setCompoundDrawables(null, null, drawable_n, null); + startPage = 1; + if(!cb_scoreb) + { + cb_scoreb=true; + rl_pop_listp.setVisibility(View.VISIBLE); + rl_pop_list.setVisibility(View.GONE); +// cb_scoreb=true; +// cb_score.setCompoundDrawables(null, null, drawable_s, null); +// sort="3"; +// getData(); + + } + else + { + cb_scoreb=false; + rl_pop_listp.setVisibility(View.GONE); +// cb_score.setCompoundDrawables(null, null, drawable_d, null); +// cb_scoreb=false; +// sort="4"; +// getData(); + } + } + }); + cb_exchange.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + cb_exchange.setTextColor(getResources().getColor(R.color.tab_text_sel)); + cb_shelfb=false; + cb_shelf.setTextColor(getResources().getColor(R.color.tab_text_nor)); + cb_shelf.setCompoundDrawables(null, null, drawable_n, null); + cb_scoreb=false; + cb_score.setTextColor(getResources().getColor(R.color.tab_text_nor)); + cb_score.setCompoundDrawables(null, null, drawable_n, null); + startPage = 1; + if(!cb_exchangeb) + { + cb_exchange.setCompoundDrawables(null, null, drawable_s, null); + cb_exchangeb=true; + sort="5"; + getData(); + } + else + { + cb_exchangeb=false; + cb_exchange.setCompoundDrawables(null, null, drawable_d, null); + sort="6"; + getData(); + } + } + }); + cb_shelf.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { +// cb_shelf.setTextColor(getResources().getColor(R.color.tab_text_sel)); +// cb_exchangeb=false; +// cb_exchange.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// cb_exchange.setCompoundDrawables(null, null, drawable_n, null); +// cb_scoreb=false; +// cb_score.setTextColor(getResources().getColor(R.color.tab_text_nor)); +// cb_score.setCompoundDrawables(null, null, drawable_n, null); + startPage = 1; + if(!cb_shelfb) + { + cb_shelfb=true; +// ptrLvsx.setVisibility(View.GONE); + rl_pop_list.setVisibility(View.VISIBLE); + rl_pop_listp.setVisibility(View.GONE); +// ptrLv.setVisibility(View.VISIBLE); +// cb_shelf.setCompoundDrawables(null, null, drawable_d, null); +// cb_shelfb=false; +// sort="2"; +// getData(); + + } + else + { + cb_shelfb=false; + rl_pop_list.setVisibility(View.GONE); + +// cb_shelf.setCompoundDrawables(null, null, drawable_s, null); +// cb_shelfb=true; +// sort="1"; +// getData(); + + } + } + }); + gv_product.setOnItemClickListener(this); + ll_buy_point.setOnClickListener(this); + ll_integraltickit.setOnClickListener(this); + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("积分商城"); + } + + private void getHeadScrollImg() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); +// param.put("debug","true"); + sendJsonPostParamtoNetSignMD5(Url.goodsNewsList, param, 2, this); + } + + private void getData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + param.put("sort",sort); + sendJsonPostParamtoNetSignMD5(Url.goodsList, param, 1, this); + } + private void getTypeData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + + sendJsonPostParamtoNetSignMD5(Url.goodsTagList, param, 101, this); + } + private void getSortData() { + // TODO Auto-generated method stub + Map param = new HashMap<>(); + param.put("page",startPage +""); + param.put("sort",sort); + param.put("tag_type",tag_type); + param.put("name",name); + sendJsonPostParamtoNetSignMD5(Url.goodsListV2, param, 1, this); + } + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { +// case R.id.cb_score: +// if (rl_pop_list.getVisibility() == View.GONE) { +// rl_pop_list.setVisibility(View.VISIBLE); +// +// } else { +// rl_pop_list.setVisibility(View.GONE); +// } +// break; + case R.id.top_right_text: + Intent intentv = new Intent(PointsMallActivity.this, + PublicSearchActivity.class); + intentv.setType("shopping"); + startActivity(intentv); +// Intent intent = new Intent(PointsMallActivity.this,MyExchangeActivity.class); +// startActivity(intent); + break; + case R.id.top_back_layout: + finish(); + break; + case R.id.bt_qualitycourse: + startActivity(new Intent(PointsMallActivity.this, QualityCourseActivity.class)); + break; + case R.id.ll_integraltickit://积分券 + Intent intent = new Intent(PointsMallActivity.this,MyExchangeActivity.class); + startActivity(intent); +// Intent intent1 = new Intent(PointsMallActivity.this, IntegralTicketActivity.class); +// startActivity(intent1); + break; + case R.id.ll_buy_point://购买积分 + Intent intent2 = new Intent(PointsMallActivity.this, BuyIntegerActivty.class); + startActivity(intent2); + break; + } + } + + class PointsMallAdapter extends BaseAdapter{ + private final int LEFT_TYPE=0; + private final int RIGHT_TYPE=1; + private int currentType; + + @Override + public int getCount() { + // TODO Auto-generated method stub + return beans!=null&beans.size()>0?beans.size():0; + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return beans.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + + @Override + public int getViewTypeCount() { + return 2; + } + + @Override + public int getItemViewType(int position) { + if (position%2==0) { + return LEFT_TYPE; + } else { + return RIGHT_TYPE; + } + } + + @SuppressWarnings("null") + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View firstItemView = null; + View othersItemView=null; + currentType= getItemViewType(position); + if (currentType== LEFT_TYPE) { + firstItemView = convertView; + FirstItemViewHolder firstItemViewHolder=null; + if (firstItemView==null) { + firstItemView = UIUtils.inflate(R.layout.item_gv_product); + firstItemViewHolder=new FirstItemViewHolder(); + firstItemViewHolder.iv_product=(ImageView) firstItemView.findViewById(R.id.iv_product); + firstItemViewHolder.tv_pruduct_name=(TextView) firstItemView.findViewById(R.id.tv_pruduct_name); + firstItemViewHolder.tv_pruduct_point=(TextView) firstItemView.findViewById(R.id.tv_pruduct_point); + firstItemView.setTag(firstItemViewHolder); + + } else { + firstItemViewHolder=(FirstItemViewHolder) firstItemView.getTag(); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml + beans.get(position).getImg(), firstItemViewHolder.iv_product, + ImageOptions.getImageOptions(R.drawable.default_video)); + firstItemViewHolder.tv_pruduct_name.setText(beans.get(position).getName()); + firstItemViewHolder.tv_pruduct_point.setText(beans.get(position).getBonuspoints()+"积分"); + convertView=firstItemView; + }else{ + othersItemView = convertView; + OthersViewHolder othersViewHolder=null; + if (othersItemView==null) { + othersItemView = UIUtils.inflate(R.layout.item_gv_product1); + othersViewHolder=new OthersViewHolder(); + othersViewHolder.iv_product1=(ImageView) othersItemView.findViewById(R.id.iv_product); + othersViewHolder.tv_pruduct_name1=(TextView) othersItemView.findViewById(R.id.tv_pruduct_name); + othersViewHolder.tv_pruduct_point1=(TextView) othersItemView.findViewById(R.id.tv_pruduct_point); + othersItemView.setTag(othersViewHolder); + } else { + othersViewHolder=(OthersViewHolder) othersItemView.getTag(); + } + /** + * + * */ + + ImageLoader.getInstance().displayImage( + Url.urlHtml + beans.get(position).getImg(), othersViewHolder.iv_product1, + ImageOptions.getImageOptions(R.drawable.default_video)); + othersViewHolder.tv_pruduct_name1.setText(beans.get(position).getName()); + othersViewHolder.tv_pruduct_point1.setText(beans.get(position).getBonuspoints()+"积分"); + + convertView=othersItemView; + } + + return convertView; + } + //第一个Item的ViewHolder + private class FirstItemViewHolder{ + ImageView iv_product; + TextView tv_pruduct_name,tv_pruduct_point; + } + + //除第一个Item以外其余Item的ViewHolder + private class OthersViewHolder{ + ImageView iv_product1; + TextView tv_pruduct_name1,tv_pruduct_point1; + } + } + /** + * 初始化列表刷新时的提示文本 + */ + private void initListViewTipText() { + gv_product.setOnRefreshListener(new OnRefreshListener2() { + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + refreshItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + if (UIUtils.isNetWorkConnected(UIUtils.getContext())) { + setUpdateTime(refreshView); + geneItems(); + } else { + ToastUtil.showMessage("当前网络链接不可用..请检查网络.."); + } + } + + + }); + + + // TODO Auto-generated method stub + // 设置上拉刷新文本 + ILoadingLayout startLabels = gv_product + .getLoadingLayoutProxy(true, false); + startLabels.setPullLabel("下拉刷新..."); + startLabels.setReleaseLabel("放开立即刷新..."); + startLabels.setRefreshingLabel("正在刷新..."); + + // 设置下拉刷新文本 + ILoadingLayout endLabels = gv_product.getLoadingLayoutProxy(false, true); + endLabels.setPullLabel("上拉加载更多..."); + endLabels.setReleaseLabel("放开加载更多..."); + endLabels.setRefreshingLabel("正在加载..."); + } + private void refreshItems() { + // TODO Auto-generated method stub + startPage = 1; + getSortData(); +// getData(); + } + private void geneItems() { + // TODO Auto-generated method stub + startPage++; + getSortData(); +// getData(); + } + + // 设置更新时间 + protected void setUpdateTime(PullToRefreshBase refreshView) { + // TODO Auto-generated method stub + String label = DateUtils.formatDateTime(PointsMallActivity.this, + System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME + | DateUtils.FORMAT_SHOW_DATE + | DateUtils.FORMAT_ABBREV_ALL); + refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, + long id) { + // TODO Auto-generated method stub + Intent intent = new Intent(PointsMallActivity.this,ProductDetailActivity.class); + intent.putExtra("uuid", beans.get(position).getUuid()); + intent.putExtra("type", beans.get(position).getType()); + intent.putExtra("name", beans.get(position).getName()); + intent.putExtra("upan",beans.get(position).getUpan()); + startActivity(intent); + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + Log.d("gdxzsort","resultJson = " + resultJson); + switch (resultCode) { + case 101: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.optString("code"))) + { + if(!jsonObject.isNull("data")) + { + JSONArray jsonArray= jsonObject.optJSONArray("data"); + if(jsonArray!=null) + { + ssx=new String[jsonArray.length()]; + ssxid=new String[jsonArray.length()]; + sx=new int[jsonArray.length()]; + for(int i=0;i0){ + initDot(fromJsonBean1.getData().size()); + mViewPager = new RollViewPager(PointsMallActivity.this, dotList, + R.drawable.dot_focus4, R.drawable.dot_normal, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intentt1 = new Intent(PointsMallActivity.this, NewsDetailActivity.class); + intentt1.putExtra("url", Url.urlHtml+fromJsonBean1.getData().get(position).getPath()); + intentt1.putExtra("title", "积分商城"); + intentt1.putExtra("newsTitle", fromJsonBean1.getData().get(position).getTitle()); + intentt1.putExtra("summary", "爱学习爱分享,领积分兑奖品,今天你兑了吗?"); + intentt1.putExtra("flag", 1); + startActivity(intentt1); + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + // top图片地址 + ArrayList list = new ArrayList<>(); + titleList = new ArrayList(); + for (int i = 0; i < fromJsonBean1.getData().size(); i++) { + list.add(Url.urlHtml+fromJsonBean1.getData().get(i).getHeadImg()); + titleList.add(fromJsonBean1.getData().get(i).getTitle()); + } + mViewPager.setUriList(list); + // 开始滚动 + mViewPager.startRoll(); + // top标题 + mViewPager.setTitle(topNewsTitle, titleList); + // 加载到布局 + top_news_viewpager.removeAllViews(); + top_news_viewpager.addView(mViewPager); + }else { + + } + + + }else { + ToastUtil.showMessage("请求失败"); + } + break; + } + } + + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dots_ll.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(this, 6), CommonUtil.dip2px( + this, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(this); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus4); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dots_ll.addView(m); + dotList.add(m); + } + } + + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + AppManager.getAppManager().finishAllActivity1(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ProductDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ProductDetailActivity.java new file mode 100644 index 0000000..3172842 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ProductDetailActivity.java @@ -0,0 +1,404 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.net.http.SslError; +import android.os.Build; +import android.text.TextPaint; +import android.view.View; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.SslErrorHandler; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.UpanExchangeActivity; +import cn.shangyu.gdxzExpert.base.AppManager; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.GetGoodsBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.view.RollViewPager.OnPagerClickCallback; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ProductDetailActivity extends BaseActivity implements OnCallBackFromNet{ + + private LinearLayout dots_ll; + private TextView tv_exchange,productshow,tv_exchange1; + private String uuid,detail_path,name;//商品uuid,网页详情 + private GetGoodsBean fromJsonBean; + private RollViewPager mViewPager; + private ArrayList dotList; + private TextView tv_product_name,tv_product_point,tv_product_salenum; + private X5WebView wv; + private CustomProgressDialog pd; + View v1; + private int type;//1:实物,2:虚拟 + private int upan;//是否是u盘 + private int upannum=0; + + private LinearLayout top_news_viewpager; + @Override + public void setTitle() { + // TODO Auto-generated method stub + name = getIntent().getExtras().getString("name"); + top_title.setText(name); + top_back_layout.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_title.setText("商品详情"); + } +// top_right_text = (TextView) findViewById(R.id.top_right_text); +// top_right_text.setVisibility(View.VISIBLE); +// top_right_text.setText("我的兑换"); +// top_right_text.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view; + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_productdetail_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_productdetail); + } + uuid = getIntent().getExtras().getString("uuid"); + type = getIntent().getExtras().getInt("type"); + upan=getIntent().getIntExtra("upan",0); + AppManager.getAppManager().addActivity1(this); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + initView(view); + setOnclick(); + getData(); + return view; + } + + + + private void initView(View view) { + // TODO Auto-generated method stub + tv_exchange = (TextView) view.findViewById(R.id.tv_exchange); + tv_exchange1 = (TextView) view.findViewById(R.id.tv_exchange1); + v1=view.findViewById(R.id.v1); + + productshow = (TextView) view.findViewById(R.id.productshow); + TextPaint tp = productshow.getPaint(); + tp.setFakeBoldText(true); + + top_news_viewpager = (LinearLayout) view.findViewById(R.id.top_news_viewpager); + dots_ll = (LinearLayout) view.findViewById(R.id.dots_ll); + top_news_viewpager.setFocusable(true); + top_news_viewpager.setFocusableInTouchMode(true); + top_news_viewpager.requestFocus(); + int width =getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + LogUtil.i("width=" + width + "height=" + height); + } + android.view.ViewGroup.LayoutParams ivLp = top_news_viewpager + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + top_news_viewpager.setLayoutParams(ivLp); + tv_product_name = (TextView) view.findViewById(R.id.tv_product_name); + tv_product_point = (TextView) view.findViewById(R.id.tv_product_point); + tv_product_salenum = (TextView) view.findViewById(R.id.tv_product_salenum); + X5WebView.initHardwareAccelerate(this); + wv = view.findViewById(R.id.wv); + //loadurl(wv, "file:///android_asset/error/error.html"); + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); +// WebSettings setting = wv.getSettings(); +// setting.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// setting.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// setting.setDatabaseEnabled(true); +// setting.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// setting.setJavaScriptEnabled(true);// 启用javascript脚本 +// setting.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = setting.getUserAgentString(); +// setting.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// setting.setLoadWithOverviewMode(true); +// setting.setUseWideViewPort(true); +// setting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); +// setting.setSupportZoom(true); +// setting.setBuiltInZoomControls(true); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + wv.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + + + + + } + public void loadurl( WebView view, String url) { + view.loadUrl(url); + //view.loadUrl("https://www.baidu.com"); + view.setWebViewClient(new WebViewClient(){ + + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { + loadurl(wv, "file:///android_asset/error/error.html"); + //super.onReceivedError(view, errorCode, description, failingUrl); + } + + public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){ + + handler.proceed(); + + } + }); + } + + @Override + protected void onDestroy() { + //释放资源 + if (wv != null) + wv.destroy(); + + super.onDestroy(); + } + + private void getData() { + // TODO Auto-generated method stub + if(upan==0) + { + tv_exchange1.setVisibility(View.GONE); + v1.setVisibility(View.GONE); + } + else + { + tv_exchange1.setVisibility(View.VISIBLE); + v1.setVisibility(View.VISIBLE); + tv_exchange1.setBackgroundColor(Color.LTGRAY); + tv_exchange1.setEnabled(false); + getUpan(); + } + Map param = new HashMap<>(); + param.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.getGoods, param, 1, this); + } + private void getUpan() + { + Map param1= new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getUpanWelfareCount, param1, 2, this); + } + + private void setOnclick() { + // TODO Auto-generated method stub + tv_exchange.setOnClickListener(this); + tv_exchange1.setOnClickListener(this); + + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.tv_exchange1: + Intent intent1 = new Intent(ProductDetailActivity.this, UpanExchangeActivity.class); + intent1.putExtra("upannum",upannum); + startActivity(intent1); + break; + case R.id.tv_exchange: + Intent intent = new Intent(ProductDetailActivity.this,OnlineExchangeActivity.class); + intent.putExtra("name", fromJsonBean.getData().getName()); + intent.putExtra("points", fromJsonBean.getData().getBonuspoints()); + if (fromJsonBean.getData().getTimes()==0) { + intent.putExtra("times", ""); + }else { + intent.putExtra("times", "已兑换"+fromJsonBean.getData().getTimes()+"件"); + } + intent.putExtra("type", type); + intent.putExtra("upan",upan); + intent.putExtra("uuid", fromJsonBean.getData().getUuid()); + startActivity(intent); + break; + case R.id.top_back_layout: + finish(); + break; + default: + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + switch (resultCode) { + case 2: + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(resultJson); + if("200".equals(jsonObject.getString("code"))) + { + upannum=jsonObject.getInt("data"); + + if(upannum>0) + { + tv_exchange1.setText("福利兑换剩余"+upannum+"个"); + tv_exchange1.setBackgroundColor(Color.parseColor("#3cc7c0")); + tv_exchange1.setEnabled(true); + } + else + { + tv_exchange1.setText("福利兑换"); + tv_exchange1.setBackgroundColor(Color.LTGRAY); + tv_exchange1.setEnabled(false); + } + + + } + else + { + ToastUtil.showMessage(jsonObject.getString("msg")+""); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case 1: + + Gson gson = new Gson(); + fromJsonBean = gson.fromJson(resultJson, GetGoodsBean.class); + pd.dismiss(); + if (fromJsonBean!=null&&"200".equals(fromJsonBean.getCode())) { + // top图片地址 + ArrayList list = new ArrayList<>(); + String detial_imgpath = fromJsonBean.getData().getDetial_imgpath(); + if (detial_imgpath.contains(",")) { + String[] split = detial_imgpath.split(","); + for (int i = 0; i < split.length; i++) { + list.add(Url.urlHtml+split[i]); + } + }else{ + list.add(Url.urlHtml+fromJsonBean.getData().getDetial_imgpath()); + } + // 轮播图的点 + initDot(list.size()); + mViewPager = new RollViewPager(ProductDetailActivity.this, dotList, + R.drawable.dot_focus4, R.drawable.shape_point_unselect, + // 轮播图点击事件 + new OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + + } + }); + mViewPager.setLayoutParams(new LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); + + mViewPager.setUriList(list); + // 开始滚动 + mViewPager.startRoll(); + // 加载到布局 + top_news_viewpager.removeAllViews(); + top_news_viewpager.addView(mViewPager); + if (type==1) { + tv_product_name.setText("[包邮]"+fromJsonBean.getData().getName()); + }else { + tv_product_name.setText(fromJsonBean.getData().getName()); + } + + tv_product_point.setText(fromJsonBean.getData().getBonuspoints()+"积分"); + if (fromJsonBean.getData().getTimes()==0) { + tv_product_salenum.setText(""); + }else { + tv_product_salenum.setText("已兑换"+fromJsonBean.getData().getTimes()+"件"); + } + + loadurl(wv, Url.urlHtml+fromJsonBean.getData().getDetail_path()); + }else { + ToastUtil.showMessage("请求失败"); + } + break; + + default: + break; + } + } + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dots_ll.removeAllViews(); + for (int i = 0; i < size; i++) { + LayoutParams params = new LayoutParams( + CommonUtil.dip2px(this, 6), CommonUtil.dip2px( + this, 6)); + params.setMargins(5, 0, 5, 0); + View m = new View(this); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_focus4); + } else { + m.setBackgroundResource(R.drawable.shape_point_unselect); + } + m.setLayoutParams(params); + dots_ll.addView(m); + dotList.add(m); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PullToRefreshHeadGridView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PullToRefreshHeadGridView.java new file mode 100644 index 0000000..033239c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/PullToRefreshHeadGridView.java @@ -0,0 +1,107 @@ +package cn.shangyu.gdxzExpert.pointsmall; + + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.OverscrollHelper; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshAdapterViewBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.EmptyViewMethodAccessor; +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.util.AttributeSet; +import android.view.View; + + +public class PullToRefreshHeadGridView extends PullToRefreshAdapterViewBase{ + + +public PullToRefreshHeadGridView(Context context) { +super(context); +} + + +public PullToRefreshHeadGridView(Context context, AttributeSet attrs) { +super(context, attrs); +} + + +public PullToRefreshHeadGridView(Context context, Mode mode) { +super(context, mode); +} + + +public PullToRefreshHeadGridView(Context context, Mode mode, AnimationStyle style) { +super(context, mode, style); +} + + +@Override +public final Orientation getPullToRefreshScrollDirection() { +return Orientation.VERTICAL; +} + + +@Override +protected final HeaderGridView createRefreshableView(Context context, AttributeSet attrs) { +final HeaderGridView gv; +if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { +gv = new InternalGridViewSDK9(context, attrs); +} else { +gv = new InternalGridView(context, attrs); +} + + +// Use Generated ID (from res/values/ids.xml) +gv.setId(R.id.gridview); + return gv; +} + + +class InternalGridView extends HeaderGridView implements EmptyViewMethodAccessor { + + +public InternalGridView(Context context, AttributeSet attrs) { +super(context, attrs); +} + + +@Override +public void setEmptyView(View emptyView) { +PullToRefreshHeadGridView.this.setEmptyView(emptyView); +} + + +@Override +public void setEmptyViewInternal(View emptyView) { +super.setEmptyView(emptyView); +} +} + + +@TargetApi(9) +final class InternalGridViewSDK9 extends InternalGridView { + + +public InternalGridViewSDK9(Context context, AttributeSet attrs) { +super(context, attrs); +} + + +@Override +protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, +int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + +final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, +scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + +// Does all of the hard work... +OverscrollHelper.overScrollBy(PullToRefreshHeadGridView.this, deltaX, scrollX, deltaY, scrollY, isTouchEvent); + + +return returnValue; +} +} +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ShippingAddressActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ShippingAddressActivity.java new file mode 100644 index 0000000..064fada --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/ShippingAddressActivity.java @@ -0,0 +1,43 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.view.View; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class ShippingAddressActivity extends BaseActivity{ + + + + @Override + public void setTitle() { + // TODO Auto-generated method stub + top_title.setText("收货地址"); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_shippingaddress); + + return view; + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/YuanJiaoImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/YuanJiaoImageView.java new file mode 100644 index 0000000..773d901 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pointsmall/YuanJiaoImageView.java @@ -0,0 +1,37 @@ +package cn.shangyu.gdxzExpert.pointsmall; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.widget.ImageView; + +public class YuanJiaoImageView extends ImageView { + + //圆角弧度 + private float[] rids = {5.0f,5.0f,5.0f,5.0f,0.0f,0.0f,0.0f,0.0f,}; + + public YuanJiaoImageView(Context context) { + super(context); + } + + public YuanJiaoImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public YuanJiaoImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + + protected void onDraw(Canvas canvas) { + Path path = new Path(); + int w = this.getWidth(); + int h = this.getWidth(); + //绘制圆角imageview + path.addRoundRect(new RectF(0,0,w,h),rids,Path.Direction.CW); + canvas.clipPath(path); + super.onDraw(canvas); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/CourseDetailPolyvPlayerActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/CourseDetailPolyvPlayerActivity.java new file mode 100644 index 0000000..8508bcf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/CourseDetailPolyvPlayerActivity.java @@ -0,0 +1,1685 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import static cn.shangyu.gdxzExpert.ecdemo.common.utils.CommomUtil.simpleDateFormat; +import static cn.shangyu.gdxzExpert.polyvplayer.util.PolyvNetworkUtils.isConnected; +import static cn.shangyu.gdxzExpert.utils.DateUtil.getTimeSpan; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY_DETAILS; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_CLASS_QUALITY_PAY; +import static cn.shangyu.gdxzExpert.utils.StringUtil.fenGetYuanFormat; +import static cn.shangyu.gdxzExpert.utils.Url.weurl; + +import android.annotation.SuppressLint; +import android.content.BroadcastReceiver; +import android.content.Intent; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.Paint; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.PowerManager; +import android.text.TextUtils; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewTreeObserver; +import android.view.WindowManager; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; + +import com.easefun.polyvsdk.PolyvBitRate; +import com.easefun.polyvsdk.PolyvSDKClient; +import com.easefun.polyvsdk.po.PolyvViewerInfo; +import com.easefun.polyvsdk.srt.PolyvSRTItemVO; +import com.easefun.polyvsdk.video.PolyvPlayErrorReason; +import com.easefun.polyvsdk.video.PolyvSeekType; +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.video.auxiliary.PolyvAuxiliaryVideoView; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementCountDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementEventListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementOutListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnChangeModeListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureClickListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureLeftDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureLeftUpListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureRightDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureRightUpListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureSwipeLeftListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureSwipeRightListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnPreloadPlayListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnPreparedListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnTeaserCountDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnTeaserOutListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoPlayErrorListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoSRTListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoSRTPreparedListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoStatusListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoTimeoutListener; +import com.easefun.polyvsdk.vo.PolyvADMatterVO; +import com.easefun.polyvsdk.vo.PolyvVideoVO; +import com.google.android.material.appbar.AppBarLayout; +import com.google.android.material.tabs.TabLayout; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.EvaluateActivity; +import cn.shangyu.gdxzExpert.activity.PayClassActivity; +import cn.shangyu.gdxzExpert.adapter.BaseFragemetAdapter; +import cn.shangyu.gdxzExpert.bean.ClassDetailBean; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.cast.PolyvScreencastManager; +import cn.shangyu.gdxzExpert.cast.widget.PolyvScreencastSearchLayout; +import cn.shangyu.gdxzExpert.cast.widget.PolyvScreencastStatusLayout; +import cn.shangyu.gdxzExpert.fragment.IntroduceClassFragment; +import cn.shangyu.gdxzExpert.fragment.IntroduceDetailFragment; +import cn.shangyu.gdxzExpert.fragment.IntroduceEvaluateFragment; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAudioCoverView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAuxiliaryView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerLightView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerMediaController; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerPreviewView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerProgressView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerVolumeView; +import cn.shangyu.gdxzExpert.polyvplayer.ppt.PolyvPPTView; +import cn.shangyu.gdxzExpert.polyvplayer.ppt.PolyvViceScreenLayout; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvErrorMessageUtils; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.SnapUpCountDownTimerView; + +public class CourseDetailPolyvPlayerActivity extends AppCompatActivity implements View.OnClickListener, IntroduceDetailFragment.ChooseListener { + private FrameLayout head; + /** + * 视频控制栏 + */ + private PolyvPlayerMediaController mediaController = null; + /** + * 播放器的parentView + */ + private RelativeLayout viewLayout = null; + /** + * 播放主视频播放器 + */ + private PolyvVideoView videoView = null; + + /** + * 用于播放广告片头的播放器 + */ + private PolyvAuxiliaryVideoView auxiliaryVideoView = null; + /** + * 视频广告,视频片头加载缓冲视图 + */ + private ProgressBar auxiliaryLoadingProgress = null; + /** + * 图片广告界面 + */ + private PolyvPlayerAuxiliaryView auxiliaryView = null; + /** + * 音频模式下的封面 + */ + private PolyvPlayerAudioCoverView coverView = null; + //mp3源文件播放时的封面图 + private PolyvPlayerAudioCoverView audioSourceCoverView = null; + /** + * 字幕文本视图 + */ + private TextView srtTextView = null; + private TextView topSrtTextView = null; + /** + * 手势出现的亮度界面 + */ + private PolyvPlayerLightView lightView = null; + /** + * 手势出现的音量界面 + */ + private PolyvPlayerVolumeView volumeView = null; + /** + * 手势出现的进度界面 + */ + private PolyvPlayerProgressView progressView = null; + /** + * 视频加载缓冲视图 + */ + private ProgressBar loadingProgress = null; + /** + * 广告倒计时 + */ + private TextView advertCountDown = null; + /** + * 缩略图界面 + */ + private PolyvPlayerPreviewView firstStartView = null; + private ImageView iv_screencast_search,iv_screencast_search_land; + private LinearLayout videoErrorLayout; + private TextView videoErrorContent,videoErrorRetry; + private TextView tv_exchange1,mTitle; + private PowerManager powerManager; + private PowerManager.WakeLock wakeLock; + private int fastForwardPos = 0; + private ImageView top_back; + + public static final int GETDETAIL = 101; + private String excellentcourse_id,opencontents,openid,pinglun;//课程id,二级目录,id,评论 + private String vid,comment_num; + private TabLayout tabs; + private String[] mTitles={"课程介绍","课程目录","评价"}; + private ArrayList fgs=new ArrayList(); + private ViewPager viewpager; + public TextView tv_name,tv_d,tp_yh,tv_pr,tv_ppr,im_yuan,tv_e,tv_tian; + private String descs; + public String type="0"; + private String isbuy="0"; + RelativeLayout r_yh,r_buy,r_e; + private SnapUpCountDownTimerView rushBuyCountDownTimerView; + AppBarLayout appBarLayout; + public String starnum; + LinearLayout l_t; + TextView tv_type,tv_texs; + private boolean isPlay = false; + +// private boolean isBackgroundPlay = true; + private boolean isBackgroundPlay = false ; + private String vid1; + private BaseFragemetAdapter adapter; + private ImageButton top_right_search; + //投屏相关 + private PolyvScreencastManager screencastManager; + private PolyvScreencastStatusLayout fl_screencast_status; + private PolyvScreencastSearchLayout fl_screencast_search, fl_screencast_search_land; +// private ServiceConnection playConnection; +// private PolyvBackgroundPlayService.PlayBinder playBinder; + //ppt + private PolyvViceScreenLayout viceScreenLayout; + private boolean isCalledStopOnPipModeChanged = false; + private boolean isOnBackKeyPressed; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(head).init(); + setContentView(R.layout.activity_course_detail_polyv_player); + MobclickAgent.onEvent(CourseDetailPolyvPlayerActivity.this,EXPERT_CLASS_QUALITY_DETAILS); + excellentcourse_id=getIntent().getStringExtra("excellentcourse_id"); + opencontents=getIntent().getStringExtra("opencontents"); + openid=getIntent().getStringExtra("openid"); + pinglun=getIntent().getStringExtra("pinglun"); + initnormalview(); + initPolyview(); + initView(); + initScreencast(); + initOnClick(); + boolean isConnected = isConnected(CourseDetailPolyvPlayerActivity.this); + if (isConnected){//联网正常执行 + + videoDetail(excellentcourse_id); + }else{//没联网 + ToastUtil.showMessage("无网络,请检查网络连接!"); + } + +// PolyvBackgroundPlayService.bindService(this, playConnection = new ServiceConnection() { +// @Override +// public void onServiceConnected(ComponentName name, IBinder service) { +// playBinder = (PolyvBackgroundPlayService.PlayBinder) service; +// } +// +// @Override +// public void onServiceDisconnected(ComponentName name) { +// } +// }); + + } + private boolean isInPictureInPictureMode; + private BroadcastReceiver pipReceiver; + private PolyvPPTView pptView; + ViewTreeObserver.OnGlobalLayoutListener videoviewChange = new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + resetVideoHeight(); + } + }; + + //添加副屏布局 + private void addViceScreenLayout(final PolyvVideoView videoView) { + videoView.post(new Runnable() { + @Override + public void run() { + //添加副屏布局 + viceScreenLayout = PolyvViceScreenLayout.addViceLayoutInWindow(CourseDetailPolyvPlayerActivity.this, videoView.getBottom()); + mediaController.setPPTLayout(viceScreenLayout); + //添加ppt布局 + pptView = new PolyvPPTView(CourseDetailPolyvPlayerActivity.this); + viceScreenLayout.addView(pptView); + viceScreenLayout.bindView(videoView, pptView); + } + }); + } + + /** + * 修复小米8中开启画中画后,控件高度没有适应变化问题 + */ + @SuppressLint("NewApi") + private void resetVideoHeight() { + //onCreate中初始化了高度,PolyvScreenUtils.generateHeight16_9(this); + //如果高度相同,则画中画高度没有成功缩小 + if (viewLayout.getHeight() == PolyvScreenUtils.getHeight16_9() && isInPipMode()) { + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) viewLayout.getLayoutParams(); + params.height = LinearLayout.LayoutParams.MATCH_PARENT; + viewLayout.setLayoutParams(params); + } + } + private boolean isInPipMode() { + if (Build.VERSION.SDK_INT >= 26) { + return isInPictureInPictureMode(); + } + return false; + } + +// @Override +// public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Configuration newConfig) { +// +// super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig); +// this.isInPictureInPictureMode = isInPictureInPictureMode; +// if (isInPictureInPictureMode) { +// // Starts receiving events from action items in PiP mode. +// pipReceiver = new BroadcastReceiver() { +// @Override +// public void onReceive(Context context, Intent intent) { +// if (intent == null +// || !"media_control".equals(intent.getAction()) +// || !(videoView.isInPlaybackState() || videoView.isExceptionCompleted())) { +// return; +// } +// +// +// final int controlType = intent.getIntExtra("control_type", 0); +// switch (controlType) { +// case 1: +// videoView.start(); +// break; +// case 2: +// videoView.pause(); +// break; +// } +// } +// }; +// viewLayout.getViewTreeObserver().addOnGlobalLayoutListener(videoviewChange); +// registerReceiver(pipReceiver, new IntentFilter("media_control")); +//// if (playBinder != null) { +//// Log.d("gdxzplayBinder","正在小窗播放视频"); +//// playBinder.start("正在小窗播放视频", "点击进入播放页面", R.mipmap.ic_launcher); +//// } +// } else { +// // We are out of PiP mode. We can stop receiving events from it. +// if (pipReceiver != null) { +// unregisterReceiver(pipReceiver); +// pipReceiver = null; +// } +// if (mediaController.isViceHideInPipMode()) { +// viceScreenLayout.show(); +// } +//// if (playBinder != null) { +//// playBinder.stop(); +//// } +// +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { +// viewLayout.getViewTreeObserver().removeOnGlobalLayoutListener(videoviewChange); +// } +// } +// if (isCalledStopOnPipModeChanged && !isInPictureInPictureMode) { +// finish(); +// } +// } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) + { + + if(mediaController!=null) + { + + if(mediaController.iv_land.getVisibility()==View.VISIBLE) + { + mediaController.changeToLandscape(); + } + + } + } + else + { + if(mediaController!=null) + { + + if(mediaController.iv_port.getVisibility()==View.VISIBLE) + { + mediaController.changeToPortrait(); + + + } + + + } + } + + } + @Override + protected void onResume() { + super.onResume(); + +// if (!isInPipMode()) { +// if (!isBackgroundPlay) { +// //回来后继续播放 +// if (isPlay) { +// videoView.onActivityResume(); +// if (auxiliaryView.isPauseAdvert()) { +// auxiliaryView.hide(); +// } +// } +// } +// else if (playBinder != null) { +// playBinder.stop(); +// } +// } +// mediaController.resume(); + if (!isBackgroundPlay) { + //回来后继续播放 + if (isPlay) { + videoView.onActivityResume(); + if (auxiliaryView.isPauseAdvert()) { + auxiliaryView.hide(); + } + } + } + mediaController.resume(); + + } + private void initScreencast() { + fl_screencast_status.setScreencastSearchLayout(fl_screencast_search); + fl_screencast_status.setLandScreencastSearchLayout(fl_screencast_search_land); + fl_screencast_status.setVideoView(videoView); + fl_screencast_status.setMediaController(mediaController); + + screencastManager = PolyvScreencastManager.getInstance(null);//如果之前已经初始化,那么这里可以传null + fl_screencast_search.setScreencastStatusLayout(fl_screencast_status); + fl_screencast_search.setScreencastManager(screencastManager); + fl_screencast_search_land.setScreencastStatusLayout(fl_screencast_status); + fl_screencast_search_land.setScreencastManager(screencastManager); + + iv_screencast_search.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (iv_screencast_search.isSelected()) { + fl_screencast_search.hide(true); + } else { + fl_screencast_search.show(); + } + } + }); + iv_screencast_search_land.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + fl_screencast_search_land.show(); + } + }); + + fl_screencast_search.setOnVisibilityChangedListener(new PolyvScreencastSearchLayout.OnVisibilityChangedListener() { + @Override + public void onVisibilityChanged(@NonNull View changedView, int visibility) { + iv_screencast_search.setSelected(visibility == View.VISIBLE); + } + }); + } + private void initOnClick() { + top_back.setOnClickListener(this); + tv_exchange1.setOnClickListener(this); + top_right_search.setOnClickListener(this); + } + private void initnormalview() + { + rushBuyCountDownTimerView = (SnapUpCountDownTimerView) findViewById(R.id.rushtimerView); + tabs=findViewById(R.id.tabs); + top_right_search=findViewById(R.id.top_right_search); + viewpager=findViewById(R.id.viewpager); + tv_name=findViewById(R.id.tv_name); + tv_d=findViewById(R.id.tv_d); + r_yh=findViewById(R.id.r_yh); + tp_yh=findViewById(R.id.tp_yh); + tv_pr=findViewById(R.id.tv_pr); + tv_ppr=findViewById(R.id.tv_ppr); + r_buy=findViewById(R.id.r_buy); + r_buy.setOnClickListener(this); + r_buy.setEnabled(false); + im_yuan=findViewById(R.id.im_yuan); + tv_tian=findViewById(R.id.tv_tian); + r_e=findViewById(R.id.r_e); + tv_e=findViewById(R.id.tv_e); + l_t=findViewById(R.id.l_t); + tv_type=findViewById(R.id.tv_type); + tv_texs=findViewById(R.id.tv_texs); + appBarLayout=findViewById(R.id.appBarLayout); + r_e.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent=new Intent(CourseDetailPolyvPlayerActivity.this, EvaluateActivity.class); + intent.putExtra("excellentcourse_id",excellentcourse_id); + intent.putExtra("p_id",""); + intent.putExtra("type",type); + intent.putExtra("starnum",starnum); + startActivityForResult(intent,301); + } + }); + + } + private void initMenus(){ + + fgs.clear(); + fgs.add(IntroduceClassFragment.newInstance(descs)); + fgs.add(IntroduceDetailFragment.newInstance(excellentcourse_first_title_list,opencontents,openid,isbuy)); + fgs.add(IntroduceEvaluateFragment.newInstance(excellentcourse_id,type,isbuy,starnum,comment_num)); + tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + tab.setCustomView(R.layout.custrom_tab); + TextView textView =tab.getCustomView().findViewById(R.id.t_tab); + textView.setText(tab.getText()); + + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + tab.setCustomView(null); + + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }); + adapter=new BaseFragemetAdapter( + getSupportFragmentManager()); + if(StringUtil.isEmpty(comment_num)||Integer.valueOf(comment_num)<1) + { + mTitles[2]="评价"; + } + else + { + mTitles[2]="评价("+comment_num+")"; + } + + adapter.setFgs(fgs,mTitles); + viewpager.setAdapter(adapter); + tabs.setupWithViewPager(viewpager); + + if(!StringUtil.isEmpty(opencontents)) + { + appBarLayout.setExpanded(false, true); + viewpager.setCurrentItem(1); + } + else if("yes".equals(pinglun)) + { + appBarLayout.setExpanded(false, true); + viewpager.setCurrentItem(2); + } + + + }; + + + private void initPolyview() + { + PolyvScreenUtils.generateHeight16_9(this); + head = findViewById(R.id.head); + + top_back = (ImageView) findViewById(R.id.top_back); + mTitle = (TextView) this.findViewById(R.id.top_title); + + + mediaController = (PolyvPlayerMediaController) findViewById(R.id.polyv_player_media_controller); + iv_screencast_search = (ImageView) mediaController.findViewById(R.id.iv_screencast_search); + iv_screencast_search_land = (ImageView) mediaController.findViewById(R.id.iv_screencast_search_land); + fl_screencast_search = (PolyvScreencastSearchLayout) findViewById(R.id.fl_screencast_search); + fl_screencast_search_land = (PolyvScreencastSearchLayout) findViewById(R.id.fl_screencast_search_land); + fl_screencast_status = (PolyvScreencastStatusLayout) findViewById(R.id.fl_screencast_status); + iv_screencast_search.setVisibility(View.GONE); + iv_screencast_search_land.setVisibility(View.GONE);//关闭投屏因为课程目录那里点击下一个投屏不会自动投屏到下一个 + viewLayout = (RelativeLayout) findViewById(R.id.view_layout); + videoView = (PolyvVideoView) findViewById(R.id.polyv_video_view); + coverView = (PolyvPlayerAudioCoverView) findViewById(R.id.polyv_cover_view); + audioSourceCoverView = (PolyvPlayerAudioCoverView) findViewById(R.id.polyv_source_audio_cover); + srtTextView = (TextView) findViewById(R.id.srt); + topSrtTextView = (TextView) findViewById(R.id.top_srt); + lightView = (PolyvPlayerLightView) findViewById(R.id.polyv_player_light_view); + volumeView = (PolyvPlayerVolumeView) findViewById(R.id.polyv_player_volume_view); + progressView = (PolyvPlayerProgressView) findViewById(R.id.polyv_player_progress_view); + loadingProgress = (ProgressBar) findViewById(R.id.loading_progress); + auxiliaryVideoView = (PolyvAuxiliaryVideoView) findViewById(R.id.polyv_auxiliary_video_view); + auxiliaryLoadingProgress = (ProgressBar) findViewById(R.id.auxiliary_loading_progress); + auxiliaryView = (PolyvPlayerAuxiliaryView) findViewById(R.id.polyv_player_auxiliary_view); + advertCountDown = (TextView) findViewById(R.id.count_down); + firstStartView = (PolyvPlayerPreviewView) findViewById(R.id.polyv_player_first_start_view); + videoErrorLayout = (LinearLayout) findViewById(R.id.video_error_layout); + videoErrorContent = (TextView) findViewById(R.id.video_error_content); + videoErrorRetry = (TextView) findViewById(R.id.video_error_retry); + tv_exchange1 = (TextView) findViewById(R.id.tv_exchange1); +// mediaController.initConfig(head, viewLayout, tv_exchange1, 0, 0); + mediaController.initConfig(head, viewLayout, tv_exchange1, 0, 0); + mediaController.setAudioCoverView(coverView); + + auxiliaryVideoView.setPlayerBufferingIndicator(auxiliaryLoadingProgress); + videoView.setMediaController(mediaController); + videoView.setPlayerBufferingIndicator(loadingProgress); + powerManager = (PowerManager)this.getSystemService(this.POWER_SERVICE); + wakeLock = this.powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyClass Lock"); + mTitle.setText("课程详情"); + //添加副屏布局 + addViceScreenLayout(videoView); + } + private void initView() { + videoView.setOpenAd(true); + videoView.setOpenTeaser(true); + videoView.setOpenQuestion(true); + videoView.setOpenSRT(true); + videoView.setOpenPreload(true, 2); + videoView.setOpenMarquee(true); + videoView.setAutoContinue(true); + videoView.setNeedGestureDetector(true); + videoView.setSeekType(PolyvSeekType.SEEKTYPE_NORMAL); + videoView.setLoadTimeoutSecond(25);//加载超时时间,单位:秒 + videoView.setBufferTimeoutSecond(15);//缓冲超时时间,单位:秒 + videoView.disableScreenCAP(this, false);//防录屏开关,true为开启,如果开启防录屏,投屏功能将不可用 + String realName = SharePrefUtil.getString(CourseDetailPolyvPlayerActivity.this, Constant.realName, "肝胆相照专家端app用户"); + vid1=SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "")+"_EC_"+excellentcourse_id; + PolyvViewerInfo polyvViewerInfo = new PolyvViewerInfo(); +// polyvViewerInfo.setViewerId(SharePrefUtil.getString(CourseDetailPolyvPlayerActivity.this, Constant.POLVID, "123")); + polyvViewerInfo.setViewerId(vid1); + polyvViewerInfo.setViewerExtraInfo1(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "")); + polyvViewerInfo.setViewerExtraInfo2(Constant.Report_userId); + polyvViewerInfo.setViewerName(realName); + PolyvSDKClient.getInstance().setViewerInfo(polyvViewerInfo); +// PolyvSDKClient.getInstance().setViewerId(vid1); + videoView.setOnPreparedListener(new IPolyvOnPreparedListener2() { + @Override + public void onPrepared() { + if (videoView.getVideo() != null && videoView.getVideo().isMp3Source()) { + audioSourceCoverView.onlyShowCover(videoView); + } else { + audioSourceCoverView.hide(); + } + mediaController.preparedView(); + progressView.setViewMaxValue(videoView.getDuration()); + // 没开预加载在这里开始弹幕 + // danmuFragment.start(); + } + }); + + videoView.setOnPreloadPlayListener(new IPolyvOnPreloadPlayListener() { + @Override + public void onPlay() { + // 开启预加载在这里开始弹幕 +// danmuFragment.start(); + } + }); + + + videoView.setOnChangeModeListener(new IPolyvOnChangeModeListener() { + @Override + public void onChangeMode(String changedMode) { + coverView.changeModeFitCover(videoView, changedMode); + } + }); + + videoView.setOnVideoTimeoutListener(new IPolyvOnVideoTimeoutListener() { + @Override + public void onBufferTimeout(int timeoutSecond, int times) {//在一个缓冲里,每超过设置的timeoutSecond都会回调一次 + Toast.makeText(CourseDetailPolyvPlayerActivity.this, "视频加载速度缓慢,请调整网络", Toast.LENGTH_LONG).show(); + } + }); + + videoView.setOnVideoStatusListener(new IPolyvOnVideoStatusListener() { + @Override + public void onStatus(int status) { + if (status < 60) { + Toast.makeText(CourseDetailPolyvPlayerActivity.this, "状态错误 " + status, Toast.LENGTH_SHORT).show(); + } else { + } + } + }); + + videoView.setOnVideoPlayErrorListener(new IPolyvOnVideoPlayErrorListener2() { + @Override + public boolean onVideoPlayError(@PolyvPlayErrorReason.PlayErrorReason int playErrorReason) { + String message = PolyvErrorMessageUtils.getPlayErrorMessage(playErrorReason); + message += "(error code " + playErrorReason + ")"; + + showErrorView(message); + return true; + } + }); + + //为了能更好的统一错误处理,这个错误回调合并到setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)中,对应的错误类型是PolyvPlayErrorReason.VIDEO_ERROR。 + //为了向后兼容,以前的程序不受影响,当设置了这个错误回调时,setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)错误回调不会被触发。 + //没有设置这个错误回调时,setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)错误回调才会触发。 +// videoView.setOnErrorListener(new IPolyvOnErrorListener2() { +// @Override +// public boolean onError() { +// String message = "当前视频无法播放,请尝试切换网络重新播放或者向管理员反馈(error code " + PolyvPlayErrorReason.VIDEO_ERROR + ")"; +// showErrorView(message); +// Toast.makeText(PolyvPlayerActivity.this, message, Toast.LENGTH_SHORT).show(); +// return true; +// } +// }); + + videoView.setOnAdvertisementOutListener(new IPolyvOnAdvertisementOutListener2() { + @Override + public void onOut(@NonNull PolyvADMatterVO adMatter) { + auxiliaryView.show(adMatter); + } + }); + + videoView.setOnAdvertisementCountDownListener(new IPolyvOnAdvertisementCountDownListener() { + @Override + public void onCountDown(int num) { + advertCountDown.setText("广告也精彩:" + num + "秒"); + advertCountDown.setVisibility(View.VISIBLE); + } + + @Override + public void onEnd() { + advertCountDown.setVisibility(View.GONE); + auxiliaryView.hide(); + } + }); + + videoView.setOnAdvertisementEventListener(new IPolyvOnAdvertisementEventListener2() { + @Override + public void onShow(PolyvADMatterVO adMatter) { + + + } + + @Override + public void onClick(PolyvADMatterVO adMatter) { + if (!TextUtils.isEmpty(adMatter.getAddrUrl())) { + try { + new URL(adMatter.getAddrUrl()); + } catch (MalformedURLException e1) { +// Log.e(TAG, PolyvSDKUtil.getExceptionFullMessage(e1, -1)); + return; + } + + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(adMatter.getAddrUrl())); + startActivity(intent); + } + } + }); + + + + videoView.setOnTeaserOutListener(new IPolyvOnTeaserOutListener() { + @Override + public void onOut(@NonNull String url) { + auxiliaryView.show(url); + } + }); + + videoView.setOnTeaserCountDownListener(new IPolyvOnTeaserCountDownListener() { + @Override + public void onEnd() { + auxiliaryView.hide(); + } + }); + + + videoView.setOnVideoSRTPreparedListener(new IPolyvOnVideoSRTPreparedListener() { + @Override + public void onVideoSRTPrepared() { + mediaController.preparedSRT(videoView); + } + }); + + videoView.setOnVideoSRTListener(new IPolyvOnVideoSRTListener() { + @Override + public void onVideoSRT(@Nullable List subTitleItems) { + srtTextView.setText(""); + topSrtTextView.setText(""); + + if (subTitleItems != null) { + for (PolyvSRTItemVO srtItemVO : subTitleItems) { + if (srtItemVO.isBottomCenterSubTitle()) { + srtTextView.setText(srtItemVO.getSubTitle()); + } else if (srtItemVO.isTopCenterSubTitle()) { + topSrtTextView.setText(srtItemVO.getSubTitle()); + } + } + } + + srtTextView.setVisibility(View.VISIBLE); + topSrtTextView.setVisibility(View.VISIBLE); + } + }); + + videoView.setOnGestureLeftUpListener(new IPolyvOnGestureLeftUpListener() { + + @Override + public void callback(boolean start, boolean end) { +// Log.d(TAG, String.format("LeftUp %b %b brightness %d", start, end, videoView.getBrightness(VideoDetailPolyvPlayerActivity.this))); + if(mediaController.isLocked()){ + return; + } + + int brightness = videoView.getBrightness(CourseDetailPolyvPlayerActivity.this) + 5; + if (brightness > 100) { + brightness = 100; + } + + videoView.setBrightness(CourseDetailPolyvPlayerActivity.this, brightness); + lightView.setViewLightValue(brightness, end); + } + }); + + videoView.setOnGestureLeftDownListener(new IPolyvOnGestureLeftDownListener() { + + @Override + public void callback(boolean start, boolean end) { +// Log.d(TAG, String.format("LeftDown %b %b brightness %d", start, end, videoView.getBrightness(CourseDetailPolyvPlayerActivity.this))); + if(mediaController.isLocked()){ + return; + } + int brightness = videoView.getBrightness(CourseDetailPolyvPlayerActivity.this) - 5; + if (brightness < 0) { + brightness = 0; + } + + videoView.setBrightness(CourseDetailPolyvPlayerActivity.this, brightness); + lightView.setViewLightValue(brightness, end); + } + }); + + videoView.setOnGestureRightUpListener(new IPolyvOnGestureRightUpListener() { + + @Override + public void callback(boolean start, boolean end) { +// Log.d(TAG, String.format("RightUp %b %b volume %d", start, end, videoView.getVolume())); + // 加减单位最小为10,否则无效果 + if(mediaController.isLocked()){ + return; + } + int volume = videoView.getVolume() + 10; + if (volume > 100) { + volume = 100; + } + + videoView.setVolume(volume); + volumeView.setViewVolumeValue(volume, end); + } + }); + + videoView.setOnGestureRightDownListener(new IPolyvOnGestureRightDownListener() { + + @Override + public void callback(boolean start, boolean end) { +// Log.d(TAG, String.format("RightDown %b %b volume %d", start, end, videoView.getVolume())); + // 加减单位最小为10,否则无效果 + if(mediaController.isLocked()){ + return; + } + int volume = videoView.getVolume() - 10; + if (volume < 0) { + volume = 0; + } + + videoView.setVolume(volume); + volumeView.setViewVolumeValue(volume, end); + } + }); + + videoView.setOnGestureSwipeLeftListener(new IPolyvOnGestureSwipeLeftListener() { + + @Override + public void callback(boolean start, int times, boolean end) { + // 左滑事件 +// Log.d(TAG, String.format("SwipeLeft %b %b", start, end)); + if(mediaController.isLocked()){ + return; + } + mediaController.hideTickTips(); + if (fastForwardPos == 0) { + fastForwardPos = videoView.getCurrentPosition(); + } + + if (end) { + if (fastForwardPos < 0) + fastForwardPos = 0; + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + if (videoView.isCompletedState()) { + videoView.start(); +// danmuFragment.resume(); + } + fastForwardPos = 0; + } else { + fastForwardPos -= 1000 * times; + if (fastForwardPos <= 0) + fastForwardPos = -1; + } + progressView.setViewProgressValue(fastForwardPos, videoView.getDuration(), end, false); + } + }); + + videoView.setOnGestureSwipeRightListener(new IPolyvOnGestureSwipeRightListener() { + + @Override + public void callback(boolean start, int times, boolean end) { + // 右滑事件 +// Log.d(TAG, String.format("SwipeRight %b %b", start, end)); + if(mediaController.isLocked()){ + return; + } + mediaController.hideTickTips(); + if (fastForwardPos == 0) { + fastForwardPos = videoView.getCurrentPosition(); + } + + if (end) { + if (fastForwardPos > videoView.getDuration()) + fastForwardPos = videoView.getDuration(); + if (!videoView.isCompletedState()) { + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + } else if (videoView.isCompletedState() && fastForwardPos != videoView.getDuration()) { + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + videoView.start(); +// danmuFragment.resume(); + } + fastForwardPos = 0; + } else { + fastForwardPos += 1000 * times; + if (fastForwardPos > videoView.getDuration()) + fastForwardPos = videoView.getDuration(); + } + progressView.setViewProgressValue(fastForwardPos, videoView.getDuration(), end, true); + } + }); + + videoView.setOnGestureClickListener(new IPolyvOnGestureClickListener() { + @Override + public void callback(boolean start, boolean end) { + if (videoView.isInPlaybackState() || videoView.isExceptionCompleted() && mediaController != null) + if (mediaController.isShowing()) + mediaController.hide(); + else + mediaController.show(); + } + }); + + videoErrorRetry.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + videoErrorLayout.setVisibility(View.GONE); + //调用setVid方法视频会自动播放 + play(vid, PolyvBitRate.ziDong.getNum(), true,false); + } + }); +// videoView.setOnPlayPauseListener(new IPolyvOnPlayPauseListener() { +// @Override +// public void onPause() { +// coverView.stopAnimation(); +// mediaController.updatePictureInPictureActions(R.drawable.polyv_btn_play_port, "pause", 1, 1); +// +// } +// +// @Override +// public void onPlay() { +// coverView.startAnimation(); +// mediaController.updatePictureInPictureActions(R.drawable.polyv_btn_pause_port, "start", 2, 2); +// +// } +// +// @Override +// public void onCompletion() { +// coverView.stopAnimation(); +// mediaController.updatePictureInPictureActions(R.drawable.polyv_btn_play_port, "pause", 1, 1); +// +// } +// }); + } + public void showErrorView(String message){ + videoErrorLayout.setVisibility(View.VISIBLE); + videoErrorContent.setText(message); + } + /** + * 播放视频 + * + * @param vid 视频id + * @param bitrate 码率(清晰度) + * @param startNow 是否现在开始播放视频 + * @param isMustFromLocal 是否必须从本地(本地缓存的视频)播放 + */ + public void play(final String vid, final int bitrate, boolean startNow, final boolean isMustFromLocal) { + + LogUtil.i("vid = "+vid); + /**每次播放计算播放数+1*/ +// Map map = new HashMap<>(); +// map.put("uuid",uuid); +// HttpMD5SendInfoUtil.sendJsonPostParamNoResultMD5(Url.readSeriesVideo,map); + +// if (iv_vlms_cover != null && iv_vlms_cover.getVisibility() == View.VISIBLE) { +// iv_vlms_cover.setVisibility(View.GONE); +// } + + + boolean isConnected = isConnected(CourseDetailPolyvPlayerActivity.this); + if (isConnected){//联网正常执行 + + }else{//没联网 + ToastUtil.showMessage("无网络,请检查网络连接!"); + return; + } + if(videoView==null) + return; + if (videoView.isDisableScreenCAP()) { + iv_screencast_search.setVisibility(View.GONE); + iv_screencast_search_land.setVisibility(View.GONE); + } + + videoView.release(); + srtTextView.setVisibility(View.GONE); + topSrtTextView.setVisibility(View.GONE); + mediaController.hide(); + mediaController.resetView(); + loadingProgress.setVisibility(View.GONE); + + auxiliaryVideoView.hide(); + auxiliaryLoadingProgress.setVisibility(View.GONE); + auxiliaryView.hide(); + advertCountDown.setVisibility(View.GONE); + firstStartView.hide(); + progressView.resetMaxValue(); + audioSourceCoverView.hide(); + if (StringUtil.isEmpty(vid)) + { + + firstStartView.show(classDetailBean.getData().getIndex_img(),0); + return; + } + +// danmuFragment.setVid(vid, videoView); + if (startNow) { + //调用setVid方法视频会自动播放 + videoView.setVid(vid, bitrate, isMustFromLocal); + } else { + //视频不播放,先显示一张缩略图 + firstStartView.setCallback(new PolyvPlayerPreviewView.Callback() { + + @Override + public void onClickStart() { + /** + * 调用setVid方法视频会自动播放 + * 如果是有学员登陆的播放,可以在登陆的时候通过 + * {@link com.easefun.polyvsdk.PolyvSDKClient.getinstance().setViewerId()}设置学员id + * 或者调用{@link videoView.setVidWithStudentId}传入学员id进行播放 + */ + videoView.setVidWithStudentId(vid, bitrate, isMustFromLocal,vid1); + } + }); + + firstStartView.show(vid,""); + } + if (PolyvVideoVO.MODE_VIDEO.equals(videoView.getPriorityMode())) { + coverView.hide(); + } + } + /**视频详情*/ + private void videoDetail(String excellentcourse_id) { + +// showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("excellentcourse_id",excellentcourse_id); + sendJsonPostParamNoResultMD5(Url.getexcellencourseDetail,map,GETDETAIL); + } + CustomProgressDialog dialog; + public void showProgressDialog(String content) { + + if (dialog == null) { + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog( + this, content); + } else { + dialog.setContent(content); + } + dialog.show(); + } + + public ClassDetailBean classDetailBean; + List excellentcourse_first_title_list; + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { +// closeProgressDialog(); + switch (msg.what){ + case GETDETAIL: + String resultData = (String) msg.obj; + Gson gson = new Gson(); + classDetailBean=gson.fromJson(resultData,ClassDetailBean.class); + if ("200".equals(classDetailBean.getCode())&&classDetailBean.getData()!=null) + { + needreportDetail("肝胆精品课", classDetailBean.getData().getTags(), classDetailBean.getData().getTitle()); + descs = classDetailBean.getData().getDescs(); + excellentcourse_first_title_list = classDetailBean.getData().getExcellentcourse_first_title_list(); + if(excellentcourse_first_title_list!=null + &&excellentcourse_first_title_list.size()>0 + ) { + flag: for(ClassDetailBean.FirstBean firstBean:excellentcourse_first_title_list) + { + List secondBeans=firstBean.getExcellentcourse_second_title_list(); + if(secondBeans!=null) + { + for(ClassDetailBean.SecondBean secondBean:secondBeans) + { + if("0".equals(secondBean.getType())) + { + vid =secondBean.getVid(); + break flag; + } + + } + } + } + + + isbuy=classDetailBean.getData().getIs_buy(); + tv_name.setText(classDetailBean.getData().getTitle()); + String text1="",text2="",text3=""; + if(!StringUtil.isEmpty(classDetailBean.getData().getStudy_num())&&Integer.valueOf(classDetailBean.getData().getStudy_num())>4) + { + text1=classDetailBean.getData().getStudy_num() + "人学" + "•"; + } + + switch (classDetailBean.getData().getState()) { + case "1": + text2="•" + "已完结"; + break; + case "0": + text2="•" + "更新"+classDetailBean.getData().getUpload_num()+"节"; + break; + + } comment_num=classDetailBean.getData().getComment_num(); + type=classDetailBean.getData().getIs_commented(); + r_buy.setEnabled(true); + + + if("1".equals(isbuy)) + { + initIntent("",false); + r_yh.setVisibility(View.GONE); + r_buy.setVisibility(View.GONE); + r_e.setVisibility(View.VISIBLE); + + if("1".equals(type)) + { + starnum=classDetailBean.getData().getComment_star(); + tv_e.setText("追加评价"); + + } + else + { + tv_e.setText("参与评价有福利"); + } + } + else + { + initIntent(vid,false); + r_buy.setVisibility(View.VISIBLE); + r_e.setVisibility(View.GONE); + if(!StringUtil.isEmpty(classDetailBean.getData().getDiscount_type())) + { + switch (classDetailBean.getData().getDiscount_type()) + { + case "0": + im_yuan.setText(fenGetYuanFormat(classDetailBean.getData().getAccount())); + break; + case "1": + r_yh.setVisibility(View.VISIBLE); + tp_yh.setText("永久优惠"); + tv_pr.setText(fenGetYuanFormat(classDetailBean.getData().getDiscount_price())); + tv_ppr.setText(fenGetYuanFormat(classDetailBean.getData().getAccount())); + tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + im_yuan.setText(fenGetYuanFormat(classDetailBean.getData().getDiscount_price())); + break; + case "2": + r_yh.setVisibility(View.VISIBLE); + tv_pr.setText(fenGetYuanFormat(classDetailBean.getData().getDiscount_price())); + tv_ppr.setText(fenGetYuanFormat(classDetailBean.getData().getAccount())); + tv_ppr.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG ); + im_yuan.setText(fenGetYuanFormat(classDetailBean.getData().getDiscount_price())); + Date date = new Date(System.currentTimeMillis()); + int[]time=getTimeSpan(simpleDateFormat.format(date),classDetailBean.getData().getDiscount_end_date()); + tv_tian.setText(time[0]+"天"); + rushBuyCountDownTimerView.setTime(time[1],time[2],time[3]); + rushBuyCountDownTimerView.start(); + tp_yh.setText("限时优惠"); + } + + } + } + switch (classDetailBean.getData().getSpecial_type_name()+"") { + + + case "福利课堂": + tv_type.setText("福利课堂"); + l_t.setVisibility(View.VISIBLE); + if(Integer.valueOf(classDetailBean.getData().getFuli_remaining())>0) + { + text3= "•"+"福利剩"+classDetailBean.getData().getFuli_remaining()+"份"; + } + else + { + text3= "•"+"福利已发完"; + } + if("1".equals(isbuy)) + { + if("0".equals(classDetailBean.getData().getStudy_status())) + { + if(Integer.valueOf(classDetailBean.getData().getFuli_remaining())>0) + { + tv_texs.setText("先学完先得,奖励"+classDetailBean.getData().getFuli_bon()+"积分"); + + } + else + { + + tv_texs.setText("他人抢先,下次趁早学习"); + } + + tv_texs.setTextColor(Color.parseColor("#999999")); + } + else + { + if("1".equals(classDetailBean.getData().getIs_granted())) + { + + tv_texs.setText("恭喜您学完本课程,"+classDetailBean.getData().getFuli_bon()+"积分福利已发放"); + tv_texs.setTextColor(Color.parseColor("#FD0808")); + + } + else + { + + tv_texs.setText("他人抢先,下次趁早学习"); + tv_texs.setTextColor(Color.parseColor("#999999")); + } + + + } + } + else + { + if(Integer.valueOf(classDetailBean.getData().getFuli_remaining())>0) + { + tv_texs.setText("课程学完将奖励"+classDetailBean.getData().getFuli_bon()+"积分"); + } + else + { + r_buy.setVisibility(View.GONE); + r_e.setVisibility(View.VISIBLE); + tv_e.setText("本福利课堂已结束"); + r_e.setClickable(false); + r_e.setBackgroundColor(Color.parseColor("#80000000")); + + } + } + tv_d.setText(text1 + classDetailBean.getData().getVideo_num() + "节课" + text2+text3); + break; + case "学完返现": + tv_type.setText("学完返现"); + if(StringUtil.isEmpty(classDetailBean.getData().getBack_bon())|| + Integer.valueOf(classDetailBean.getData().getBack_bon())<0.1) + { + l_t.setVisibility(View.GONE); + } + else + { + l_t.setVisibility(View.VISIBLE); + } + if("0".equals(classDetailBean.getData().getStudy_status())) + { + tv_texs.setText("课程学完预期将返还"+classDetailBean.getData().getBack_bon()+"积分"); + tv_texs.setTextColor(Color.parseColor("#999999")); + } + else + { + tv_texs.setText("恭喜您学完本课程,"+classDetailBean.getData().getBack_bon()+"积分已返还"); + tv_texs.setTextColor(Color.parseColor("#FD0808")); + } +// l_t.setVisibility(View.VISIBLE); + tv_d.setText(text1 + classDetailBean.getData().getVideo_num() + "节课" + text2); + break; + default: +// case "为您推荐": +// case "精品小课": + l_t.setVisibility(View.GONE); + tv_d.setText(text1 + classDetailBean.getData().getVideo_num() + "节课" + text2); +// break; + break; + } + + + + + initMenus(); + } + if("1".equals(classDetailBean.getData().getStatus())) + { + top_right_search.setVisibility(View.VISIBLE); + } + else + { + top_right_search.setVisibility(View.GONE); + } + + } + else + { + ToastUtil.showToast(classDetailBean.getMsg()); + } + + + break; + case 0: + ToastUtil.showToast((String)msg.obj); + break; + + + case 404://第一次请求失败 + LogUtil.e("提交失败,重新请求 "); + videoDetail(excellentcourse_id); + + break; + } + + } + }; + }; + private void initIntent(String vid,Boolean startNow) { + + + int playModeCode = getIntent().getIntExtra("playMode", PolyvPlayerActivity.PlayMode.portrait.getCode()); + PolyvPlayerActivity.PlayMode playMode = PolyvPlayerActivity.PlayMode.getPlayMode(playModeCode); + if (playMode == null) + playMode = PolyvPlayerActivity.PlayMode.portrait; + + int bitrate = getIntent().getIntExtra("bitrate", PolyvBitRate.ziDong.getNum()); +// boolean startNow = getIntent().getBooleanExtra("startNow", false); + + switch (playMode) { + case landScape: + mediaController.changeToLandscape(); + break; + case portrait: + mediaController.changeToPortrait(); + break; + } +// if (!StringUtil.isEmpty(vid)){ + play(vid, bitrate, startNow, false); +// } + + + + } + + /** + * + * closeProgressDialog 关闭加载框 void + */ + public void closeProgressDialog() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + + public void sendJsonPostParamNoResultMD5(final String postUrl, final Map param,final int callType) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)||"106".equals(optString)||"1".equals(optString)) { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + mHandler.sendMessage(msg); + }else { + mHandler.sendEmptyMessage(0); + } + }else { + mHandler.sendEmptyMessage(0); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + mHandler.sendEmptyMessage(404); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + } + }); + + } + @Override + public void onClick(View v) { + switch (v.getId()) + { + case R.id.top_right_search: + share(); + needreportSome("share","",""); + break; + case R.id.top_back: + finish(); + break; + case R.id.r_buy: + MobclickAgent.onEvent(CourseDetailPolyvPlayerActivity.this,EXPERT_CLASS_QUALITY_PAY); + Intent intent=new Intent(CourseDetailPolyvPlayerActivity.this, PayClassActivity.class); + intent.putExtra("price",im_yuan.getText().toString()); + intent.putExtra("tags",classDetailBean.getData().getTags()); + intent.putExtra("imgurl",classDetailBean.getData().getIndex_img()); + intent.putExtra("title",tv_name.getText().toString()); + intent.putExtra("excellencourse_id",excellentcourse_id); + startActivity(intent); + + break; + } + + } + + + @Override + protected void onStop() { + super.onStop(); + if (!isBackgroundPlay) { + //弹出去暂停 + isPlay = videoView.onActivityStop(); + + } +// isCalledStopOnPipModeChanged = isInPipMode(); +// mediaController.pause(); +// if (!isInPipMode()) { +// if (!isBackgroundPlay || isInPictureInPictureMode) { +// //弹出去暂停 +// isPlay = videoView.onActivityStop(); +// } +//// else if (playBinder != null && !isOnBackKeyPressed) { +//// playBinder.start("正在后台播放视频", "点击进入播放页面", R.mipmap.ic_launcher); +//// } +// } +// PolyvScreenUtils.removePIPSingleInstanceTask(this, PolyvPlayerActivity.class.getName(), isInPictureInPictureMode); + } + @Override + protected void onDestroy() { + super.onDestroy(); + fl_screencast_search.destroy(); + fl_screencast_search_land.destroy(); + screencastManager.release(); + if(rushBuyCountDownTimerView!=null) + { + rushBuyCountDownTimerView.stop(); + } + videoView.destroy(); + videoView = null; + auxiliaryView.hide(); + firstStartView.hide(); + coverView.hide(); + mediaController.disable(); + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + if (viceScreenLayout != null) { + viceScreenLayout.destroy(); + } + } + + @Override + public void chosecourse(String excellentcourse_id,Boolean startnow) { + initIntent(excellentcourse_id,startnow); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if(requestCode==301&&data!=null) + { + viewpager.setCurrentItem(2); + adapter.currentFragment.getView().findViewById(R.id.r_notr).setVisibility(View.GONE);; + starnum = data.getStringExtra("starnum"); + tv_e.setText("追加评价"); + type="1"; + ((IntroduceEvaluateFragment) adapter.currentFragment).isAllEva=true; + ((ImageView)adapter.currentFragment.getView().findViewById(R.id.im_eva)).setImageResource(R.drawable.all_eva); + needreportSome("comment","",""); + } + } + /** + * 调用分享功能 + */ + private void share() { + if(classDetailBean==null||classDetailBean.getData()==null) + { + return; + } + String shareTitle =classDetailBean.getData().getTitle() +"-肝胆精品课"; + String shareUrl = weurl+"excellencourse/index.htm#/courseDetail?excellentcourse_id="+classDetailBean.getData().getId();//测试环境 +// String shareUrl = "https://wx.igandan.com/excellencourse/index.htm#/courseDetail?excellentcourse_id="+classDetailBean.getData().getId();//正式环境 + String msgSinaContent = "肝胆相照®肝胆病在线公共服务平台"; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + + + Bitmap bitmap = ImageLoader.getInstance().loadImageSync("http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + ShareUtils.shareUmeng(CourseDetailPolyvPlayerActivity.this, shareTitle, msgSinaContent, msgSinaContent, + "http://doc.igandan.com/app/html/img/2016/20160714132557.png", shareUrl, bitmap); + // ShareUtils.mController.openShare(GDEventDetailActivity.this, false); + } + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (fl_screencast_search.getVisibility() == View.VISIBLE) { + fl_screencast_search.hide(true); + return true; + } + if (fl_screencast_search_land.getVisibility() == View.VISIBLE) { + fl_screencast_search_land.hide(true); + return true; + } +// isOnBackKeyPressed = true; + + } + + return super.onKeyDown(keyCode, event); + } + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (hideViewOnTouchOutside(ev, fl_screencast_search_land)) { + return true; + } +// else if (hideViewOnTouchOutside(ev, landPptDirLayout)) { +// return true; +// } + return super.dispatchTouchEvent(ev); + } + + private boolean hideViewOnTouchOutside(MotionEvent ev, View view) { + if (ev.getAction() == MotionEvent.ACTION_DOWN && view.getVisibility() == View.VISIBLE) { + int[] location = new int[2]; + view.getLocationInWindow(location); + if (ev.getX() < location[0]) { + if (view instanceof PolyvScreencastSearchLayout) { + ((PolyvScreencastSearchLayout) view).hide(true); + } else { + view.setVisibility(View.GONE); + } + return true; + } + } + return false; + } + public void needreportSome(String name,String page,String tags) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + if(classDetailBean!=null&&classDetailBean.getData()!=null) + { + rbens.setResource_name( classDetailBean.getData().getTitle()); + rbens.setResource_option(classDetailBean.getData().getTags()+""); + } + rbens.setPage_type("肝胆精品课"); + + + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(CourseDetailPolyvPlayerActivity.this, ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + startService(intent); + } + public void needreportDetail(String page,String tags,String name) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("detail_page"); + rbens.setPage_type(page); + rbens.setResource_name(name); + rbens.setPage_type(page); + rbens.setResource_option(tags+""); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ExchangeAreaActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ExchangeAreaActivity.java new file mode 100644 index 0000000..74f7412 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ExchangeAreaActivity.java @@ -0,0 +1,718 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ListSeriesTypeBean; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.ExchangeAdapter; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.MyListSeriesAdapter; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/3/25. + */ + +public class ExchangeAreaActivity extends BaseActivity implements OnCallBackFromNet{ + + public static final int EXCHANGE=1; + private PullToRefreshListView lv_exchange; + private PullToRefreshListView lv_exchange_my;//以兑换的list + private ListSeriesTypeBean listFreeBean; + private DrawableCenterButtonR dcb_sort; + private LinearLayout ll_sort,ll_new,ll_hot,ll_time; + private RelativeLayout rl_pop_screen; + private DrawableCenterButtonR bt_screen,cb_yiduihuan; + private boolean ischange; + private TextView tv_new,tv_hot,tv_time; + private ImageView iv_new,iv_hot,iv_time; + private String sort; + private final static int MYLIST = 2; + private ListSeriesTypeBean listSeriesTypeBean; + private View ll_empty; + private TextView tv_empty_msg; + private TagList mTagList; + private ScreenAdapter mAdapter2; + private GridView mGv_screen; + private List TagPosition = null; + private Button mBt_sure, mBt_reset; + private ArrayList Tags; + private int freePage = 1; + private int mySerPage = 1; + private String keywords =""; + private ExchangeAdapter adapter; + private List data = new ArrayList<>(); + private MyListSeriesAdapter exchangeAdapter; + private List data1 = new ArrayList<>(); + private View line3; + + @Override + public void setTitle() { + top_title.setText("兑换专区"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_exchangearea); + initView(view); + initOnClick(); + sort = "2"; + getData(); + return view; + } + + private void initOnClick() { + dcb_sort.setOnClickListener(this); + bt_screen.setOnClickListener(this); + cb_yiduihuan.setOnClickListener(this); + ll_new.setOnClickListener(this); + ll_hot.setOnClickListener(this); + ll_time.setOnClickListener(this); + mBt_sure.setOnClickListener(this); + lv_exchange.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (ll_sort.getVisibility()==View.VISIBLE){ + ll_sort.setVisibility(View.GONE); + return; + } + if (rl_pop_screen.getVisibility()==View.VISIBLE){ + return; + } + position --; + Intent intent = PolyvPlayerActivity.newIntent(ExchangeAreaActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("series_type_uuid", data.get(position).getUuid()); + startActivity(intent); + } + }); + + lv_exchange_my.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (ll_sort.getVisibility()==View.VISIBLE){ + ll_sort.setVisibility(View.GONE); + return; + } + if (rl_pop_screen.getVisibility()==View.VISIBLE){ + return; + } + position --; + Intent intent = PolyvPlayerActivity.newIntent(ExchangeAreaActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("series_type_uuid",data1.get(position).getUuid()); + startActivity(intent); + } + }); + + + + mGv_screen.setOnItemClickListener( new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + lv_exchange.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + + freePage = 1; + getData(); + + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + + freePage++; + getData(); + + + } + }); + + lv_exchange_my.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + + + mySerPage = 1; + getMySeriesType(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + + mySerPage++; + getMySeriesType(); + + } + }); + + + } + + private void initView(View view) { + lv_exchange = view.findViewById(R.id.lv_exchange); + lv_exchange_my = view.findViewById(R.id.lv_exchange_my); + dcb_sort = view.findViewById(R.id.dcb_sort); + ll_sort = view.findViewById(R.id.ll_sort); + rl_pop_screen = view.findViewById(R.id.rl_pop_screen); + bt_screen = view.findViewById(R.id.bt_screen); + cb_yiduihuan = view.findViewById(R.id.cb_yiduihuan); + ll_new = view.findViewById(R.id.ll_new); + ll_hot = view.findViewById(R.id.ll_hot); + ll_time = view.findViewById(R.id.ll_time); + tv_new = view.findViewById(R.id.tv_new); + tv_hot = view.findViewById(R.id.tv_hot); + tv_time = view.findViewById(R.id.tv_time); + iv_new = view.findViewById(R.id.iv_new); + iv_hot = view.findViewById(R.id.iv_hot); + iv_time = view.findViewById(R.id.iv_time); + ll_empty = view.findViewById(R.id.ll_empty); + tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + line3 = view.findViewById(R.id.line3); + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(this, + "加载中"); + dialog.show(); + ll_time.setVisibility(View.GONE); + line3.setVisibility(View.GONE); + } + + private void getData() { + lv_exchange_my.setVisibility(View.GONE); + Map map = new HashMap<>(); + map.put("page",freePage+""); + map.put("title",""); + map.put("keywords",keywords); + map.put("sort",sort); + sendJsonPostParamtoNetSignMD5(Url.listSeriesType,map,EXCHANGE,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.dcb_sort://最新 + if (ischange){ + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + ischange = false; + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + return; + } + if (rl_pop_screen.getVisibility() == View.VISIBLE) { + rl_pop_screen.setVisibility(View.GONE); + return; + } + if (ll_sort.getVisibility()== View.GONE){ + ll_sort.setVisibility(View.VISIBLE); + }else { + ll_sort.setVisibility(View.GONE); + } + break; + case R.id.bt_screen://筛选 + if (ischange){ + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + ischange = false; + } + if (rl_pop_screen.getVisibility() == View.VISIBLE) { + rl_pop_screen.setVisibility(View.GONE); + return; + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + return; + } + if (mTagList == null) { + getTagList(); + } + if (rl_pop_screen.getVisibility() == View.GONE) { + rl_pop_screen.setVisibility(View.VISIBLE); + } else { + rl_pop_screen.setVisibility(View.GONE); + } + + break; + case R.id.cb_yiduihuan://已兑换 + + if (rl_pop_screen.getVisibility() == View.VISIBLE) { + rl_pop_screen.setVisibility(View.GONE); +// return; + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); +// return; + } + if (!ischange) {//已兑换 + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.top_title)); + ischange = true; + lv_exchange.setVisibility(View.GONE); + lv_exchange_my.setVisibility(View.VISIBLE); + if (listSeriesTypeBean == null){ + dialog.show(); + mySerPage = 1; + getMySeriesType(); + }else if (listSeriesTypeBean.getData().getList().size()==0){ + ll_empty.setVisibility(View.VISIBLE); + } + } else { + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + ischange = false; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + ll_empty.setVisibility(View.GONE); +// getData(); + } + break; + + case R.id.ll_new: + tv_hot.setTextColor(getResources().getColor( + R.color.text_color)); + tv_time.setTextColor(getResources().getColor( + R.color.text_color)); + tv_new.setTextColor(getResources().getColor( + R.color.top_title)); + iv_new.setVisibility(View.VISIBLE); + iv_hot.setVisibility(View.GONE); + iv_time.setVisibility(View.GONE); + dcb_sort.setText(getResources().getString(R.string.zuixin)); + chengeImg(dcb_sort); + ll_sort.setVisibility(View.GONE); + sort = "2"; + freePage = 1; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + case R.id.ll_hot: + + tv_new.setTextColor(getResources().getColor( + R.color.text_color)); + tv_time.setTextColor(getResources().getColor( + R.color.text_color)); + tv_hot.setTextColor(getResources().getColor( + R.color.top_title)); + iv_hot.setVisibility(View.VISIBLE); + iv_new.setVisibility(View.GONE); + iv_time.setVisibility(View.GONE); + dcb_sort.setText(getResources().getString(R.string.zuire)); + chengeImg(dcb_sort); + ll_sort.setVisibility(View.GONE); + sort = "1"; + freePage = 1; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + case R.id.ll_time: + tv_new.setTextColor(getResources().getColor( + R.color.text_color)); + tv_time.setTextColor(getResources().getColor( + R.color.top_title)); + tv_hot.setTextColor(getResources().getColor( + R.color.text_color)); + iv_hot.setVisibility(View.GONE); + iv_new.setVisibility(View.GONE); + iv_time.setVisibility(View.VISIBLE); + dcb_sort.setText(getResources().getString(R.string.shichang)); + chengeImg(dcb_sort); + ll_sort.setVisibility(View.GONE); + sort = "3"; + freePage = 1; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + case R.id.bt_sure: + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + rl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null && TagPosition.size() != 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + freePage = 1; + mySerPage = 1; + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + + } + ExchangeAreaActivity.this.keywords = keywords.toString(); + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + } + } + private void getTagList() { + RequestParams params = new RequestParams(); + params.addBodyParameter("type", "7"); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getTagList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess info.result = " + + info.result); + SharePrefUtil.saveString(ExchangeAreaActivity.this, Url.getTagList, + info.result); + processTage(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + } + }); + + } + private void processTage(String result) { + rl_pop_screen.setVisibility(View.VISIBLE); + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList.data.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + + private void getMySeriesType() { + Map map = new HashMap<>(); + map.put("page",mySerPage+""); + sendJsonPostParamtoNetSignMD5(Url.listMySeriesType,map,MYLIST,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case EXCHANGE: + dialog.dismiss(); + LogUtil.i("EXCHANGE = "+resultJson); + Gson gson = new Gson(); + ll_empty.setVisibility(View.GONE); + listFreeBean = gson.fromJson(resultJson, ListSeriesTypeBean.class); + // 判断是下拉刷新还是加载更多 + if (freePage == 1) { + data.clear(); + if (listFreeBean.getData() == null || listFreeBean.getData().getList().size()==0) { + // 显示空布局 + lv_exchange.setVisibility(View.GONE); + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无视频"); + // 完成刷新 + onLoaded(); + return; + } else { + lv_exchange.setVisibility(View.VISIBLE); + data.addAll(listFreeBean.getData().getList()); + } + } else { + data.addAll(listFreeBean.getData().getList()); + } + if (adapter == null){ + adapter = new ExchangeAdapter(ExchangeAreaActivity.this,data); + lv_exchange.setAdapter(adapter); + }else { +// lv_exchange.setAdapter(adapter); + adapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (freePage > 1) { + // 是否有更多 + if (listFreeBean.getData() == null || listFreeBean.getData().getList().size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + lv_exchange.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (freePage > 1) + freePage--; + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (freePage == 1) { + // 得到总页码数 + int totalPage = listFreeBean.getData().getTotal(); + if (totalPage <= 1 || totalPage < freePage) { + lv_exchange.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + +// if (listFreeBean!=null&&listFreeBean.getData().getList()!=null&&listFreeBean.getData().getList().size()>0){ +// FreeAdapter adapter = new FreeAdapter(FreeAreaActivity.this,listFreeBean.getData().getList()); +// lv_exchange.setAdapter(adapter); +// ll_empty.setVisibility(View.GONE); +// }else{ +// ll_empty.setVisibility(View.VISIBLE); +// tv_empty_msg.setText("暂无视频"); +// } + break; + case MYLIST: + dialog.dismiss(); + LogUtil.i("MYLIST = "+resultJson); + ll_empty.setVisibility(View.GONE); + Gson gson1 = new Gson(); + listSeriesTypeBean = gson1.fromJson(resultJson, ListSeriesTypeBean.class); + + // 判断是下拉刷新还是加载更多 + if (mySerPage == 1) { + data1.clear(); + if (listSeriesTypeBean.getData() == null || listSeriesTypeBean.getData().getList().size()==0) { + // 显示空布局 + lv_exchange_my.setVisibility(View.GONE); + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无视频"); + // 完成刷新 + onLoaded(); + return; + } else { + lv_exchange_my.setVisibility(View.VISIBLE); + data1.addAll(listSeriesTypeBean.getData().getList()); + } + } else { + data1.addAll(listSeriesTypeBean.getData().getList()); + } + if (exchangeAdapter == null){ + exchangeAdapter = new MyListSeriesAdapter(ExchangeAreaActivity.this,data1); + lv_exchange_my.setAdapter(exchangeAdapter); + }else { +// lv_exchange.setAdapter(exchangeAdapter); + exchangeAdapter.notifyDataSetChanged(); + + } + // 完成刷新 + onLoaded(); + + if (mySerPage > 1) { + // 是否有更多 + if (listSeriesTypeBean.getData() == null || listSeriesTypeBean.getData().getList().size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + lv_exchange_my.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (mySerPage > 1) + mySerPage--; + } else { + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (mySerPage == 1) { + // 得到总页码数 + int totalPage = listSeriesTypeBean.getData().getTotal(); + if (totalPage <= 1 || totalPage < mySerPage) { + lv_exchange_my.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + } + + + break; + } + + + } + private void onLoaded() { + dismissLoadingProgress(); + if (lv_exchange != null) { + lv_exchange.onRefreshComplete(); + } + if (lv_exchange_my != null) { + lv_exchange_my.onRefreshComplete(); + } + + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_exchange.getLoadingLayoutProxy().setLastUpdatedLabel(text); + lv_exchange_my.getLoadingLayoutProxy().setLastUpdatedLabel(text); + + } + public void chengeImg(DrawableCenterButtonR mDb_sort){ + Drawable icon_new = UIUtils.getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(ExchangeAreaActivity.this.getResources().getColor( + R.color.top_title)); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/FreeAreaActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/FreeAreaActivity.java new file mode 100644 index 0000000..d824fb0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/FreeAreaActivity.java @@ -0,0 +1,699 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.content.Intent; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.Button; +import android.widget.GridView; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ListFreeBean; +import cn.shangyu.gdxzExpert.bean.ListSeriesTypeBean; +import cn.shangyu.gdxzExpert.bean.TagList; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.FreeAdapter; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.MyListSeriesAdapter; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.DrawableCenterButtonR; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by wangchengxin on 2019/4/1. + */ + +public class FreeAreaActivity extends BaseActivity implements OnCallBackFromNet{ + public static final int FREE=1; + private PullToRefreshListView lv_exchange; + private PullToRefreshListView lv_exchange_my ; + private ListFreeBean listFreeBean; + private DrawableCenterButtonR dcb_sort; + private LinearLayout ll_sort,ll_new,ll_hot,ll_time; + private RelativeLayout rl_pop_screen; + private DrawableCenterButtonR bt_screen,cb_yiduihuan; + private boolean ischange; + private TextView tv_new,tv_hot,tv_time; + private ImageView iv_new,iv_hot,iv_time; + private String sort; + private final static int MYLIST = 2; + private ListSeriesTypeBean listSeriesTypeBean; + private View ll_empty; + private TextView tv_empty_msg; + private TagList mTagList; + private ScreenAdapter mAdapter2; + private GridView mGv_screen; + private List TagPosition = null; + private Button mBt_sure, mBt_reset; + private ArrayList Tags; + private int freePage = 1; + private int mySerPage = 1; + private String keywords1 =""; + private FreeAdapter adapter; + private List data = new ArrayList<>(); + private MyListSeriesAdapter exchangeAdapter; + private List data1 = new ArrayList<>(); + + @Override + public void setTitle() { + top_title.setText("免费专区"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_exchangearea); + initView(view); + initOnClick(); + sort = "2"; + getData(); + return view; + } + + private void initOnClick() { + dcb_sort.setOnClickListener(this); + bt_screen.setOnClickListener(this); + cb_yiduihuan.setOnClickListener(this); + ll_new.setOnClickListener(this); + ll_hot.setOnClickListener(this); + ll_time.setOnClickListener(this); + mBt_sure.setOnClickListener(this); + lv_exchange.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (ll_sort.getVisibility()==View.VISIBLE){ + ll_sort.setVisibility(View.GONE); + return; + } + if (rl_pop_screen.getVisibility()==View.VISIBLE){ + return; + } + position --; + Intent intent1 = PolyvPlayerActivity.newIntent(FreeAreaActivity.this, PolyvPlayerActivity.PlayMode.portrait, data.get(position).getPolyv_uuid()); + intent1.putExtra("startNow", true); + intent1.putExtra("isVlmsOnline", false); + intent1.putExtra("series_type_uuid",data.get(position).getSeries_type_uuid()); + intent1.putExtra("uuid",data.get(position).getUuid()); + startActivity(intent1); + + + + } + }); + lv_exchange_my.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + if (ll_sort.getVisibility()==View.VISIBLE){ + ll_sort.setVisibility(View.GONE); + return; + } + if (rl_pop_screen.getVisibility()==View.VISIBLE){ + return; + } + position --; + Intent intent = PolyvPlayerActivity.newIntent(FreeAreaActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("series_type_uuid", data1.get(position).getUuid()); + startActivity(intent); + } + }); + mGv_screen.setOnItemClickListener(new AdapterView.OnItemClickListener() { + + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // TODO Auto-generated method stub + if (TagPosition == null) { + TagPosition = new ArrayList(); + } + if (TagPosition.contains(position + "")) { + TagPosition.remove(position + ""); + } else { + if (TagPosition.size() < 3) { + TagPosition.add(position + ""); + } else { + ToastUtil.showMessage("最多选择三个标签"); + } + } + mAdapter2.notifyDataSetChanged(); + } + }); + mBt_reset.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + if (TagPosition == null) { + return; + } else { + TagPosition.clear(); + mAdapter2.notifyDataSetChanged(); + } + } + }); + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + lv_exchange.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + + freePage = 1; + getData(); + + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + + freePage++; + getData(); + + + } + }); + + lv_exchange_my.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + + + mySerPage = 1; + getMySeriesType(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + + mySerPage++; + getMySeriesType(); + + } + }); + + + } + + private void initView(View view) { + lv_exchange = view.findViewById(R.id.lv_exchange); + lv_exchange_my = view.findViewById(R.id.lv_exchange_my); + dcb_sort = view.findViewById(R.id.dcb_sort); + ll_sort = view.findViewById(R.id.ll_sort); + rl_pop_screen = view.findViewById(R.id.rl_pop_screen); + bt_screen = view.findViewById(R.id.bt_screen); + cb_yiduihuan = view.findViewById(R.id.cb_yiduihuan); + ll_new = view.findViewById(R.id.ll_new); + ll_hot = view.findViewById(R.id.ll_hot); + ll_time = view.findViewById(R.id.ll_time); + tv_new = view.findViewById(R.id.tv_new); + tv_hot = view.findViewById(R.id.tv_hot); + tv_time = view.findViewById(R.id.tv_time); + iv_new = view.findViewById(R.id.iv_new); + iv_hot = view.findViewById(R.id.iv_hot); + iv_time = view.findViewById(R.id.iv_time); + ll_empty = view.findViewById(R.id.ll_empty); + tv_empty_msg = view.findViewById(R.id.tv_empty_msg); + mGv_screen = (GridView) view.findViewById(R.id.gv_teach); + mBt_sure = (Button) view.findViewById(R.id.bt_sure); + mBt_reset = (Button) view.findViewById(R.id.bt_reset); + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(this, + "加载中"); + dialog.show(); + } + + private void getData() { + lv_exchange_my.setVisibility(View.GONE); + Map map = new HashMap<>(); + map.put("page",freePage+""); + map.put("title",""); + map.put("keywords",keywords1); + map.put("sort",sort); + sendJsonPostParamtoNetSignMD5(Url.listFree,map,FREE,this); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.dcb_sort://最新 + if (ischange){ + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + ischange = false; + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + return; + } + if (rl_pop_screen.getVisibility() == View.VISIBLE) { + rl_pop_screen.setVisibility(View.GONE); + return; + } + if (ll_sort.getVisibility()== View.GONE){ + ll_sort.setVisibility(View.VISIBLE); + }else { + ll_sort.setVisibility(View.GONE); + } + + break; + case R.id.bt_screen://筛选 + if (ischange){ + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + ischange = false; + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + return; + } + if (mTagList == null) { + getTagList(); + } + if (rl_pop_screen.getVisibility() == View.GONE) { + rl_pop_screen.setVisibility(View.VISIBLE); + } else { + rl_pop_screen.setVisibility(View.GONE); + } + + break; + case R.id.cb_yiduihuan://已兑换 + if (rl_pop_screen.getVisibility() == View.VISIBLE) { + rl_pop_screen.setVisibility(View.GONE); + } + if (ll_sort.getVisibility() == View.VISIBLE) { + ll_sort.setVisibility(View.GONE); + } + + if (!ischange) {//已兑换 + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.top_title)); + ischange = true; + lv_exchange.setVisibility(View.GONE); + lv_exchange_my.setVisibility(View.VISIBLE); + if (listSeriesTypeBean == null){ + dialog.show(); + mySerPage = 1; + getMySeriesType(); + }else if (listSeriesTypeBean.getData().getList().size()==0){ + ll_empty.setVisibility(View.VISIBLE); + } + + } else { + cb_yiduihuan.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + ischange = false; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + ll_empty.setVisibility(View.GONE); + } + + break; + + case R.id.ll_new: + tv_hot.setTextColor(getResources().getColor( + R.color.text_color)); + tv_time.setTextColor(getResources().getColor( + R.color.text_color)); + tv_new.setTextColor(getResources().getColor( + R.color.top_title)); + iv_new.setVisibility(View.VISIBLE); + iv_hot.setVisibility(View.GONE); + iv_time.setVisibility(View.GONE); + dcb_sort.setText(getResources().getString(R.string.zuixin)); + chengeImg(dcb_sort); + ll_sort.setVisibility(View.GONE); + sort = "2"; + freePage = 1; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + case R.id.ll_hot: + tv_new.setTextColor(getResources().getColor( + R.color.text_color)); + tv_time.setTextColor(getResources().getColor( + R.color.text_color)); + tv_hot.setTextColor(getResources().getColor( + R.color.top_title)); + iv_hot.setVisibility(View.VISIBLE); + iv_new.setVisibility(View.GONE); + iv_time.setVisibility(View.GONE); + dcb_sort.setText(getResources().getString(R.string.zuire)); + chengeImg(dcb_sort); + ll_sort.setVisibility(View.GONE); + sort = "1"; + freePage = 1; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + case R.id.ll_time: + tv_new.setTextColor(getResources().getColor( + R.color.text_color)); + tv_time.setTextColor(getResources().getColor( + R.color.top_title)); + tv_hot.setTextColor(getResources().getColor( + R.color.text_color)); + iv_hot.setVisibility(View.GONE); + iv_new.setVisibility(View.GONE); + iv_time.setVisibility(View.VISIBLE); + dcb_sort.setText(getResources().getString(R.string.shichang)); + chengeImg(dcb_sort); + ll_sort.setVisibility(View.GONE); + sort = "3"; + freePage = 1; + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + case R.id.bt_sure: + if (Tags == null) { + Tags = new ArrayList(); + } + Tags.clear(); + if (TagPosition != null) { + for (int i = 0; i < TagPosition.size(); i++) { + int positon = Integer.parseInt(TagPosition.get(i)); + Tags.add(mTagList.data.get(positon).getNAME()); + + } + } + + rl_pop_screen.setVisibility(View.GONE); + if (TagPosition != null && TagPosition.size() != 0) { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_yes); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_sel)); + } else { + Drawable drawable = getResources().getDrawable( + R.drawable.cb_screen_no); + drawable.setBounds(0, 0, drawable.getMinimumWidth(), + drawable.getMinimumHeight()); // 设置边界 + bt_screen.setCompoundDrawables(null, null, drawable, null); + bt_screen.setTextColor(getResources().getColor( + R.color.tab_text_nor)); + } + freePage = 1; + mySerPage = 1; + StringBuilder keywords = new StringBuilder(); + if (Tags != null && Tags.size() > 0) { + for (int i = 0; i < Tags.size(); i++) { + keywords.append(Tags.get(i) + ","); + } + + } + keywords1 = keywords.toString(); + lv_exchange_my.setVisibility(View.GONE); + lv_exchange.setVisibility(View.VISIBLE); + getData(); + break; + } + } + + private void getTagList() { + RequestParams params = new RequestParams(); + params.addBodyParameter("type", "7"); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getTagList, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + LogUtil.i("getLibraryList.onSuccess info.result = " + + info.result); + SharePrefUtil.saveString(FreeAreaActivity.this, Url.getTagList, + info.result); + processTage(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("getLibraryList.onFailure = " + arg1); + } + }); + + } + + private void processTage(String result) { + try { + mTagList = GsonTools.fromGsonToBean(result, TagList.class); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if (mTagList != null) { + if (StringUtil.isOneToCode(mTagList.code)) { + ToastUtil.showToast(mTagList.message); + return; + } + } else { + ToastUtil.showToast("服务器异常"); + } + if (mAdapter2 == null) { + mAdapter2 = new ScreenAdapter(); + mGv_screen.setAdapter(mAdapter2); + } + } + + public class ScreenAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return mTagList.data.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return mTagList.data.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + View view = UIUtils.inflate(R.layout.gv_item_screen); + TextView tv_item = (TextView) view + .findViewById(R.id.tv_gv_item_screen); + tv_item.setText(mTagList.data.get(position).getNAME()); + if (TagPosition != null && TagPosition.contains(position + "")) { + tv_item.setEnabled(true); + } else { + tv_item.setEnabled(false); + } + + return view; + } + + } + + private void getMySeriesType() { + Map map = new HashMap<>(); + map.put("page",mySerPage+""); + sendJsonPostParamtoNetSignMD5(Url.listMySeriesType,map,MYLIST,this); + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode){ + case FREE: + dialog.dismiss(); + LogUtil.i("FREE = "+resultJson); + Gson gson = new Gson(); + ll_empty.setVisibility(View.GONE); + listFreeBean = gson.fromJson(resultJson, ListFreeBean.class); + + // 判断是下拉刷新还是加载更多 + if (freePage == 1) { + data.clear(); + if (listFreeBean.getData() == null || listFreeBean.getData().getList().size()==0) { + // 显示空布局 + lv_exchange.setVisibility(View.GONE); + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无视频"); + // 完成刷新 + onLoaded(); + return; + } else { + lv_exchange.setVisibility(View.VISIBLE); + data.addAll(listFreeBean.getData().getList()); + } + } else { + data.addAll(listFreeBean.getData().getList()); + } + if (adapter == null){ + adapter = new FreeAdapter(FreeAreaActivity.this,data); + lv_exchange.setAdapter(adapter); + }else { + adapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (freePage > 1) { + // 是否有更多 + if (listFreeBean.getData() == null || listFreeBean.getData().getList().size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + lv_exchange.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (freePage > 1) + freePage--; + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (freePage == 1) { + // 得到总页码数 + int totalPage = listFreeBean.getData().getTotal(); + if (totalPage <= 1 || totalPage < freePage) { + lv_exchange.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + + + break; + case MYLIST: + dialog.dismiss(); + LogUtil.i("MYLIST = "+resultJson); + ll_empty.setVisibility(View.GONE); + Gson gson1 = new Gson(); + listSeriesTypeBean = gson1.fromJson(resultJson, ListSeriesTypeBean.class); + + + // 判断是下拉刷新还是加载更多 + if (mySerPage == 1) { + data1.clear(); + if (listSeriesTypeBean.getData() == null || listSeriesTypeBean.getData().getList().size()==0) { + // 显示空布局 + lv_exchange_my.setVisibility(View.GONE); + ll_empty.setVisibility(View.VISIBLE); + tv_empty_msg.setText("暂无视频"); + // 完成刷新 + onLoaded(); + return; + } else { + lv_exchange_my.setVisibility(View.VISIBLE); + data1.addAll(listSeriesTypeBean.getData().getList()); + } + } else { + data1.addAll(listSeriesTypeBean.getData().getList()); + } + if (exchangeAdapter == null){ + exchangeAdapter = new MyListSeriesAdapter(FreeAreaActivity.this,data1); + lv_exchange_my.setAdapter(exchangeAdapter); + }else { + exchangeAdapter.notifyDataSetChanged(); + } + // 完成刷新 + onLoaded(); + + if (mySerPage > 1) { + // 是否有更多 + if (listSeriesTypeBean.getData() == null || listSeriesTypeBean.getData().getList().size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + lv_exchange_my.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (mySerPage > 1) + mySerPage--; + } else { + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (mySerPage == 1) { + // 得到总页码数 + int totalPage = listSeriesTypeBean.getData().getTotal(); + if (totalPage <= 1 || totalPage < mySerPage) { + lv_exchange_my.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + lv_exchange_my.setMode(PullToRefreshBase.Mode.BOTH); + } + + + break; + } + + + } + private void onLoaded() { + dismissLoadingProgress(); + if (lv_exchange != null) { + lv_exchange.onRefreshComplete(); + } + if (lv_exchange_my != null) { + lv_exchange_my.onRefreshComplete(); + } + } + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_exchange.getLoadingLayoutProxy().setLastUpdatedLabel(text); + lv_exchange_my.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + public void chengeImg(DrawableCenterButtonR mDb_sort){ + Drawable icon_new = UIUtils.getDrawable(R.drawable.triangle_green_theme); + icon_new.setBounds(0, 0, icon_new.getMinimumWidth(), + icon_new.getMinimumHeight()); + mDb_sort.setCompoundDrawables(null, null, icon_new, + null); + mDb_sort.setTextColor(FreeAreaActivity.this.getResources().getColor( + R.color.top_title)); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/MyDownLoadVideoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/MyDownLoadVideoActivity.java new file mode 100644 index 0000000..a791ec0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/MyDownLoadVideoActivity.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.content.Intent; +import android.view.View; +import android.widget.RelativeLayout; + +import com.gyf.immersionbar.ImmersionBar; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/10/29. + */ + +public class MyDownLoadVideoActivity extends BaseActivity { + private View view; + private MyDownLoadVideoActivity mActivity; + private RelativeLayout rl_1,rl_2; + + @Override + public void setTitle() { + top_title.setText("我的视频"); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_my_down_loadvideo_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_my_down_loadvideo); + } + rl_1 = view.findViewById(R.id.rl_1); + rl_2 = view.findViewById(R.id.rl_2); + rl_1.setOnClickListener(this); + rl_2.setOnClickListener(this); + mActivity = this; + return view; + } + + @Override + protected void onResume() { + super.onResume(); + needreportPage("我的视频"); + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.rl_1: + startActivity(new Intent(MyDownLoadVideoActivity.this, VideohistoryActivity.class)); + break; + case R.id.rl_2: + startActivity(new Intent(MyDownLoadVideoActivity.this, PolyvDownloadActivity.class)); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/OnlineVideoExchangeActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/OnlineVideoExchangeActivity.java new file mode 100644 index 0000000..6bece92 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/OnlineVideoExchangeActivity.java @@ -0,0 +1,347 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.VideoOrderBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/3/27. + */ + +public class OnlineVideoExchangeActivity extends BaseActivity implements OnCallBackFromNet,View.OnClickListener{ + + private TextView tv_exchange; + private String series_type_uuid; + private Dialog dialog; + private String title; + private String paid_num; + private String price; + private String order_uuid; + private Intent intent; + private ECAlertDialog dilaog2; + public static final int GETWELFARENUM = 201; + public static final int USEWELFARENUM = 202; + public static final int CREATESERIESVIDEOORDER = 101; + public static final int PAYSERIESVIDEOORDER = 102; + private int welfareNum; + private AlertDialog dialog1; + private boolean is_welfareNum; + + @Override + public void setTitle() { + top_title.setText("在线兑换"); + + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_onlinevideoexchange); + TextView tv_name = view.findViewById(R.id.tv_name); + TextView tv_jifen = view.findViewById(R.id.tv_jifen); + TextView tv_duihuan = view.findViewById(R.id.tv_duihuan); + TextView tv_needpoint = view.findViewById(R.id.tv_needpoint); + intent = getIntent(); + series_type_uuid = getIntent().getStringExtra("series_type_uuid"); + title = getIntent().getStringExtra("title"); + paid_num = getIntent().getStringExtra("paid_num"); + price = getIntent().getStringExtra("price"); + tv_exchange = view.findViewById(R.id.tv_exchange); + + tv_name.setText(title); + if ("0".equals(paid_num)){ + tv_duihuan.setVisibility(View.GONE); + }else { + tv_duihuan.setText(paid_num); + } + tv_jifen.setText(price); + tv_needpoint.setText(price); + tv_exchange.setOnClickListener(this); + getWelfareNum(); + return view; + } + //查询福利剩余次数 + //参数type (1视频2课件3精品4万方5U盘) + private void getWelfareNum() { + Map map = new HashMap<>(); + map.put("type","3"); + sendJsonPostParamtoNetSignMD5(Url.getWelfareNum,map,GETWELFARENUM,this); + } + + //使用福利操作 + private void useWelfareNum() { + Map map = new HashMap<>(); + map.put("type","3"); + map.put("other_uuid",order_uuid); + sendJsonPostParamtoNetSignMD5(Url.useWelfareNum,map,USEWELFARENUM,this); + } + //创建订单 + private void createSeriesVideoOrder() { + Map map = new HashMap<>(); + map.put("series_type_uuid",series_type_uuid); + sendJsonPostParamtoNetSignMD5(Url.createSeriesVideoOrder,map,CREATESERIESVIDEOORDER,OnlineVideoExchangeActivity.this); + } + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.tv_exchange: + if (welfareNum>0){ + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_videoexcheng, null); + dialog1 = new AlertDialog.Builder(OnlineVideoExchangeActivity.this).create(); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_1 = layout.findViewById(R.id.tv_1); + TextView tv_2 = layout.findViewById(R.id.tv_2); + TextView tv_3 = layout.findViewById(R.id.tv_3); + Button btn_sure1 = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel1 = (Button) layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("温馨提示"); + tv_1.setText("您还可以免费下载精品课程"+welfareNum+"次,本次是否使用免费下载?"); + tv_2.setVisibility(View.GONE); + tv_3.setVisibility(View.GONE); + dialog1.show(); + Window window =dialog1.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + + btn_sure1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + is_welfareNum = true; + createSeriesVideoOrder(); + dialog1.dismiss(); + } + }); + btn_cancel1.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createSeriesVideoOrder(); + dialog1.dismiss(); + } + }); + }else { + createSeriesVideoOrder(); + } + + break; + case R.id.btn_sure: + Map map1 = new HashMap<>(); + map1.put("order_uuid",order_uuid); + sendJsonPostParamtoNetSignMD5(Url.paySeriesVideoOrder,map1,PAYSERIESVIDEOORDER,OnlineVideoExchangeActivity.this); + break; + case R.id.btn_cancel: +// Map map2 = new HashMap<>(); +// map2.put("order_uuid",order_uuid); +// sendJsonPostParamtoNetSignMD5(Url.cancleSeriesVideoOrder,map2,3,OnlineVideoExchangeActivity.this); +// + dialog.dismiss(); +// setResult(1,intent); +// Intent intent2 = PolyvPlayerActivity.newIntent(OnlineVideoExchangeActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); +// intent2.putExtra("isVlmsOnline", false); +// intent2.putExtra("series_type_uuid", series_type_uuid); +// startActivity(intent2); +// OnlineVideoExchangeActivity.this.finish(); + break; + + + } + } + + + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + Gson gson = new Gson(); + VideoOrderBean videoOrderBean = gson.fromJson(resultJson, VideoOrderBean.class); + + switch (resultCode){ + case CREATESERIESVIDEOORDER://106积分不足 + LogUtil.i("CREATESERIESVIDEOORDER = "+resultJson); + if (videoOrderBean.getCode().equals("200")){ + order_uuid = videoOrderBean.getOrder_uuid(); + if (is_welfareNum){ + useWelfareNum(); + }else { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_videoexcheng, null); + dialog = new AlertDialog.Builder(OnlineVideoExchangeActivity.this).create(); + TextView tv_2 = layout.findViewById(R.id.tv_2); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + tv_2.setText(price.replace("积分","")); + dialog.show(); + Window window =dialog.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + btn_sure.setOnClickListener(this); + btn_cancel.setOnClickListener(this); + } + }else if (videoOrderBean.getCode().equals("106")){ + + dilaog2 = ECAlertDialog.buildAlert(OnlineVideoExchangeActivity.this, + "您的积分不足,是否购买积分?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + startActivity(new Intent(OnlineVideoExchangeActivity.this,BuyIntegerActivty.class)); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); +// ToastUtil.showMessage("积分不足"); + }else { + ToastUtil.showMessage("创建订单失败"); + } + break; + case PAYSERIESVIDEOORDER: + LogUtil.i("PAYSERIESVIDEOORDER = "+resultJson); + dialog.dismiss(); + if (videoOrderBean.getCode().equals("200")){ + Constant.fragmentHeight1=0; + Constant.fragmentHeight2=0; + Constant.fragmentHeight3=0; + SharePrefUtil.saveInt(OnlineVideoExchangeActivity.this,"fragmentHeight1",0); + LogUtil.i("SharePrefUtil OnlineVideoExchangeActivity = 0"); + setResult(1,intent); + Intent intent2 = PolyvPlayerActivity.newIntent(OnlineVideoExchangeActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent2.putExtra("isVlmsOnline", false); + intent2.putExtra("series_type_uuid", series_type_uuid); + startActivity(intent2); + OnlineVideoExchangeActivity.this.finish(); + ToastUtil.showMessage("兑换成功"); + }else if (videoOrderBean.getCode().equals("106")) { + dilaog2 = ECAlertDialog.buildAlert(OnlineVideoExchangeActivity.this, + "您的积分不足,是否购买积分?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + startActivity(new Intent(OnlineVideoExchangeActivity.this,BuyIntegerActivty.class)); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); + } + break; + case 3: +// LogUtil.i("取消订单 = "+resultJson); +// if (videoOrderBean.getCode().equals("200")){ +// dialog.dismiss(); +// } + break; + case USEWELFARENUM://{"code":"1","message":"使用成功"} + LogUtil.i("USEWELFARENUM = "+resultJson); + try { + JSONObject jsonObject = new JSONObject(resultJson); + String code = jsonObject.optString("code"); + if("1".equals(code)){ + LogUtil.i("USEWELFARENUM = "+resultJson); + Constant.fragmentHeight1=0; + Constant.fragmentHeight2=0; + Constant.fragmentHeight3=0; + SharePrefUtil.saveInt(OnlineVideoExchangeActivity.this,"fragmentHeight1",0); + LogUtil.i("SharePrefUtil OnlineVideoExchangeActivity = 0"); + setResult(1,intent); + Intent intent2 = PolyvPlayerActivity.newIntent(OnlineVideoExchangeActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent2.putExtra("isVlmsOnline", false); + intent2.putExtra("series_type_uuid", series_type_uuid); + startActivity(intent2); + ToastUtil.showMessage("兑换成功"); + OnlineVideoExchangeActivity.this.finish(); + }else { + ToastUtil.showMessage(jsonObject.optString("message")); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case GETWELFARENUM://{"WelfareNum":0,"code":"1","message":"查询成功"} + LogUtil.i("GETWELFARENUM = "+resultJson); + try { + JSONObject jsonObject = new JSONObject(resultJson); + welfareNum = jsonObject.optInt("WelfareNum"); + if(welfareNum>0){ + tv_exchange.setText("我要兑换"+"(剩余免费下载"+welfareNum+"次)"); + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + } + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + Map map2 = new HashMap<>(); + map2.put("order_uuid",series_type_uuid); + sendJsonPostParamtoNetSignMD5(Url.cancleSeriesVideoOrder,map2,3,OnlineVideoExchangeActivity.this); + } + + return super.onKeyDown(keyCode, event); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvDownloadActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvDownloadActivity.java new file mode 100644 index 0000000..3a8f46c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvDownloadActivity.java @@ -0,0 +1,164 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.content.Intent; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.widget.Toolbar; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager.widget.ViewPager; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.PolyvPlayerFragmentAdapter; +import cn.shangyu.gdxzExpert.polyvplayer.fragment.PolyvDownloadFragment; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +/** + * 离线缓存 + * */ +public class PolyvDownloadActivity extends FragmentActivity { + private ViewPager vp_download; + private List downloadFragments; + private PolyvPlayerFragmentAdapter downloadAdapter; + // 返回按钮 + private ImageView iv_finish; + private TextView tv_downloaded, tv_downloading; + + private PolyvDownloadFragment downloadedFragment;//已完成 + private PolyvDownloadFragment downloadingFragment;//缓存中 + private CheckBox top_right_text; + + private void findIdAndNew() { + vp_download = (ViewPager) findViewById(R.id.vp_download); + iv_finish = (ImageView) findViewById(R.id.iv_finish); + tv_downloaded = (TextView) findViewById(R.id.tv_downloaded); + tv_downloading = (TextView) findViewById(R.id.tv_downloading); + top_right_text = (CheckBox) findViewById(R.id.top_right_text); + downloadFragments = new ArrayList<>(); + } + + public PolyvDownloadFragment getDownloadedFragment() { + return downloadedFragment; + } + + private void initView() { + Bundle bundle = new Bundle(); + downloadedFragment = new PolyvDownloadFragment(top_right_text); + bundle.putBoolean("isFinished", true); + downloadedFragment.setArguments(bundle); + + downloadingFragment = new PolyvDownloadFragment(top_right_text); + bundle = new Bundle(); + bundle.putBoolean("isFinished", false); + downloadingFragment.setArguments(bundle); + downloadFragments.add(downloadedFragment); + downloadFragments.add(downloadingFragment); + downloadAdapter = new PolyvPlayerFragmentAdapter(getSupportFragmentManager(), downloadFragments); + vp_download.setAdapter(downloadAdapter); + vp_download.setOffscreenPageLimit(1); + vp_download.setPageMargin(30); + vp_download.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + } + + @Override + public void onPageSelected(int position) { + tv_downloading.setSelected(false); + tv_downloaded.setSelected(false); + if (position == 0) { + tv_downloaded.setSelected(true); + } else if (position == 1) { + tv_downloading.setSelected(true); + } + } + + @Override + public void onPageScrollStateChanged(int state) { + } + }); + + iv_finish.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Intent intent = new Intent(); + setResult(101,intent); + finish(); + } + }); + tv_downloaded.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + vp_download.setCurrentItem(0); + } + }); + tv_downloading.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + vp_download.setCurrentItem(1); + } + }); + + final boolean isStarting = getIntent().getBooleanExtra("isStarting", false); + if (isStarting) { + tv_downloading.setSelected(true); + } else { + tv_downloaded.setSelected(true); + } + vp_download.setCurrentItem(isStarting ? 1 : 0); + + top_right_text.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (isChecked){ + top_right_text.setText("取消"); + downloadedFragment.setEdit(true); + downloadingFragment.setEdit(true); + }else { + top_right_text.setText("编辑"); + downloadedFragment.setEdit(false); + downloadingFragment.setEdit(false); + } + } + }); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode==KeyEvent.KEYCODE_BACK){ + Intent intent = new Intent(); + setResult(101,intent); + } + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if(CommonUtil.BigModule()) + { + setContentView(R.layout.polyv_activity_downlaod_big); + } + else + { + setContentView(R.layout.polyv_activity_downlaod); + } + Toolbar toolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(toolbar).init(); + findIdAndNew(); + initView(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPermission.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPermission.java new file mode 100644 index 0000000..48cd70f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPermission.java @@ -0,0 +1,221 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.Manifest; +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.provider.Settings; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import android.widget.Toast; + +import java.util.ArrayList; + + +/** + * Polyv权限 + * targetSdkVersion 设置了23或以上需要实现运行时权限功能,否则无法播放视频 + */ +public class PolyvPermission { + private ResponseCallback responseCallback = null; + private Activity activity = null; + + public enum OperationType { + play(100), + download(101), + upload(102), + playAndDownload(103), + readImei(104); + + private final int num; + private OperationType(int num) { + this.num = num; + } + + public int getNum() { + return num; + } + + public static OperationType getOperationType(int num) { + if (num == play.getNum()) { + return play; + } else if (num == download.getNum()) { + return download; + } else if (num == readImei.getNum()) { + return readImei; + } else if (num == upload.getNum()) { + return upload; + } else if (num == playAndDownload.getNum()) { + return playAndDownload; + } + + return play; + } + } + + @TargetApi(Build.VERSION_CODES.M) + public void applyPermission(Activity activity, OperationType type) { + this.activity = activity; + if (!canMakeSmores()) { + if (responseCallback != null) { + responseCallback.callback(type); + } + + return; + } + + ArrayList permissions = new ArrayList<>(); + int resultCode = 0; + switch (type) { + case play: + //播放视频需要的权限 + permissions.add(Manifest.permission.READ_PHONE_STATE); + //投屏功能在android9.0获取wifi名称及搜索设备所需的权限 + permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION); + permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + resultCode = OperationType.play.getNum(); + break; + case readImei: + permissions.add(Manifest.permission.READ_PHONE_STATE); + resultCode = OperationType.readImei.getNum(); + break; + case download: + //下载需要的权限 + permissions.add(Manifest.permission.READ_PHONE_STATE); + permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + resultCode = OperationType.download.getNum(); + break; + case upload: + //上传需要的权限 + permissions.add(Manifest.permission.READ_PHONE_STATE); + permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + resultCode = OperationType.upload.getNum(); + break; + case playAndDownload: + //播放视频和下载需要的权限 + permissions.add(Manifest.permission.READ_PHONE_STATE); + permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE); + resultCode = OperationType.playAndDownload.getNum(); + break; + } + + //筛选出我们已经接受的权限 + /* 请求的权限列表 */ + ArrayList permissionsToRequest = findUnAskedPermissions(permissions); + //get the permissions we have asked for before but are not granted.. + //we will store this in a global list to access later. + /* 拒绝的权限列表 */ + ArrayList permissionsRejected = findRejectedPermissions(permissions); + + if(permissionsToRequest.size()>0){//we need to ask for permissions + //but have we already asked for them? + activity.requestPermissions(permissionsToRequest.toArray(new String[permissionsToRequest.size()]), resultCode); + }else{ + if(permissionsRejected.size()>0){ + for (int i = 0; i < permissionsRejected.size() ; i++) { + if (!ActivityCompat.shouldShowRequestPermissionRationale(activity, permissionsRejected.get(i))) { + Toast.makeText(activity, "点击权限,并打开全部权限", Toast.LENGTH_LONG).show(); + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.fromParts("package", activity.getPackageName(), null)); + activity.startActivityForResult(intent, type.getNum()); + return; + } + } + } else { + if (responseCallback != null) { + responseCallback.callback(type); + } + } + } + } + + public boolean operationHasPermission(int num) { + OperationType operationType = OperationType.getOperationType(num); + if (operationType == null) return false; + switch (operationType) { + case play: + return hasPermission(Manifest.permission.READ_PHONE_STATE) + && hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + case download: + return hasPermission(Manifest.permission.READ_PHONE_STATE) + && hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + case upload: + return hasPermission(Manifest.permission.READ_PHONE_STATE) + && hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + case playAndDownload: + return hasPermission(Manifest.permission.READ_PHONE_STATE) + && hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); + } + + return false; + } + + /** + * method that will return whether the permission is accepted. By default it is true if the user is using a device below + * version 23 + * @param permission + * @return + */ + @TargetApi(Build.VERSION_CODES.M) + private boolean hasPermission(String permission) { + if (canMakeSmores()) { + return(activity.checkSelfPermission(permission)== PackageManager.PERMISSION_GRANTED); + } + return true; + } + + /** + * This method is used to determine the permissions we do not have accepted yet and ones that we have not already + * bugged the user about. This comes in handle when you are asking for multiple permissions at once. + * @param wanted + * @return + */ + private ArrayList findUnAskedPermissions(ArrayList wanted) { + ArrayList result = new ArrayList<>(); + for (String perm : wanted) { + if (!hasPermission(perm)) { + result.add(perm); + } + } + + return result; + } + + /** + * this will return us all the permissions we have previously asked for but + * currently do not have permission to use. This may be because they declined us + * or later revoked our permission. This becomes useful when you want to tell the user + * what permissions they declined and why they cannot use a feature. + * @param wanted + * @return + */ + private ArrayList findRejectedPermissions(ArrayList wanted) { + ArrayList result = new ArrayList<>(); + for (String perm : wanted) { + if (!hasPermission(perm)) { + result.add(perm); + } + } + + return result; + } + + /** + * Just a check to see if we have marshmallows (version 23) + * @return + */ + public static boolean canMakeSmores() { + return(Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP_MR1); + } + + public void setResponseCallback(ResponseCallback responseCallback) { + this.responseCallback = responseCallback; + } + + public interface ResponseCallback { + void callback(@NonNull OperationType type); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPlayerActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPlayerActivity.java new file mode 100644 index 0000000..37c31c1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/PolyvPlayerActivity.java @@ -0,0 +1,1491 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.annotation.SuppressLint; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.graphics.Paint; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentTransaction; + +import com.easefun.polyvsdk.PolyvBitRate; +import com.easefun.polyvsdk.PolyvDownloaderErrorReason; +import com.easefun.polyvsdk.PolyvSDKClient; +import com.easefun.polyvsdk.PolyvSDKUtil; +import com.easefun.polyvsdk.download.listener.IPolyvDownloaderProgressListener; +import com.easefun.polyvsdk.marquee.PolyvMarqueeItem; +import com.easefun.polyvsdk.marquee.PolyvMarqueeView; +import com.easefun.polyvsdk.po.PolyvViewerInfo; +import com.easefun.polyvsdk.srt.PolyvSRTItemVO; +import com.easefun.polyvsdk.video.PolyvPlayErrorReason; +import com.easefun.polyvsdk.video.PolyvSeekType; +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.video.auxiliary.PolyvAuxiliaryVideoView; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementCountDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementEventListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementOutListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnChangeModeListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureClickListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureLeftDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureLeftUpListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureRightDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureRightUpListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureSwipeLeftListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureSwipeRightListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnPreloadPlayListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnPreparedListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnTeaserCountDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnTeaserOutListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoPlayErrorListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoSRTListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoSRTPreparedListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoStatusListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoTimeoutListener; +import com.easefun.polyvsdk.vo.PolyvADMatterVO; +import com.easefun.polyvsdk.vo.PolyvVideoVO; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.ref.WeakReference; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.bean.PolyvDownloadInfo; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.polyvplayer.database.PolyvDownloadSQLiteHelper; +import cn.shangyu.gdxzExpert.polyvplayer.fragment.PolyvPlayerTabFragment; +import cn.shangyu.gdxzExpert.polyvplayer.fragment.PolyvPlayerViewPagerFragment; +import cn.shangyu.gdxzExpert.polyvplayer.listener.GetHeightListener; +import cn.shangyu.gdxzExpert.polyvplayer.listener.GetVidListener; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAudioCoverView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAuxiliaryView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerLightView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerMediaController; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerPreviewView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerProgressView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerVolumeView; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvErrorMessageUtils; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; + + + + +public class PolyvPlayerActivity extends FragmentActivity implements View.OnClickListener,GetHeightListener,GetVidListener { + private static final String TAG = PolyvPlayerActivity.class.getSimpleName(); + + private ImageView iv_vlms_cover; + + + private ImageView iv_screencast_search, iv_screencast_search_land; + /** + * 播放器的parentView + */ + private RelativeLayout viewLayout = null; + /** + * 播放主视频播放器 + */ + private PolyvVideoView videoView = null; + /** + * 跑马灯控件 + */ + private PolyvMarqueeView marqueeView = null; + private PolyvMarqueeItem marqueeItem = null; + /** + * 视频控制栏 + */ + private PolyvPlayerMediaController mediaController = null; + /** + * 字幕文本视图 + */ + private TextView srtTextView = null; + private TextView topSrtTextView = null; + + + /** + * 用于播放广告片头的播放器 + */ + private PolyvAuxiliaryVideoView auxiliaryVideoView = null; + /** + * 视频广告,视频片头加载缓冲视图 + */ + private ProgressBar auxiliaryLoadingProgress = null; + /** + * 图片广告界面 + */ + private PolyvPlayerAuxiliaryView auxiliaryView = null; + /** + * 广告倒计时 + */ + private TextView advertCountDown = null; + /** + * 缩略图界面 + */ + private PolyvPlayerPreviewView firstStartView = null; + /** + * 手势出现的亮度界面 + */ + private PolyvPlayerLightView lightView = null; + /** + * 手势出现的音量界面 + */ + private PolyvPlayerVolumeView volumeView = null; + /** + * 手势出现的进度界面 + */ + private PolyvPlayerProgressView progressView = null; + /** + * 音频模式下的封面 + */ + private PolyvPlayerAudioCoverView coverView = null; + //mp3源文件播放时的封面图 + private PolyvPlayerAudioCoverView audioSourceCoverView = null; + /** + * 视频加载缓冲视图 + */ + private ProgressBar loadingProgress = null; + + private int fastForwardPos = 0; + private boolean isPlay = false; + + private boolean isBackgroundPlay = false; + + private LinearLayout videoErrorLayout; + private TextView videoErrorContent,videoErrorRetry; + private String vid; + private int bitrate; + private boolean isMustFromLocal; + private PolyvPlayerViewPagerFragment viewPagerFragment; + private PolyvPlayerTabFragment tabFragment; + private TextView tv_exchange1; + private ImageView top_back; +// private ScrollView sc; + public static final int VIDEODETAIL = 1; + public static final int LISTSERIESVIDEOBYTYPE = 2; + + private String series_type_uuid; + private FrameLayout fl_viewpager; + private ListSeriesVideoByTypeBean listSeriesVideoByTypeBean; + private int recLen; + private Timer timer; + private int paid_num; + private String title; + private int price; + private double discount; + private int is_white; + private int is_paid; + private boolean nostart; + private String is_2099; + private String author;//作者 + private String img;//封面 + private int welfareNum;//剩余福利次数 + @SuppressLint("HandlerLeak") + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + String resultData = (String) msg.obj; + int i = msg.what; + switch (i){ + + case VIDEODETAIL: + LogUtil.i("VIDEODETAIL = "+resultData); + break; + case LISTSERIESVIDEOBYTYPE: + LogUtil.i("LISTSERIESVIDEOBYTYPE = "+resultData); + Gson gson1 = new Gson(); + listSeriesVideoByTypeBean = gson1.fromJson(resultData, ListSeriesVideoByTypeBean.class); + if ("200".equals(listSeriesVideoByTypeBean.getCode())){ + is_paid = listSeriesVideoByTypeBean.getSeriesType().getIs_paid(); + price = listSeriesVideoByTypeBean.getSeriesType().getPrice(); + title = listSeriesVideoByTypeBean.getSeriesType().getTitle(); + author = listSeriesVideoByTypeBean.getSeriesType().getAuthor(); + img = listSeriesVideoByTypeBean.getSeriesType().getImg(); + paid_num = listSeriesVideoByTypeBean.getSeriesType().getPaid_num(); + jiangshi.setText("讲师:"+author); + if (paid_num==0){ + tv_exchange_num.setVisibility(View.GONE); + }else { + tv_exchange_num.setVisibility(View.VISIBLE); + tv_exchange_num.setText("兑换:"+paid_num+"人"); + } + tv_name.setText(title); + ImageLoader.getInstance().displayImage( + Url.urlHtml+img, iv_vlms_cover, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + is_white = listSeriesVideoByTypeBean.getSeriesType().getIs_white(); + long discount_end_date = listSeriesVideoByTypeBean.getSeriesType().getDiscount_end_date(); + long discount_begin_date = listSeriesVideoByTypeBean.getSeriesType().getDiscount_begin_date(); + is_2099 = DateUtil.timestamp2Date(discount_end_date + "", "yyyy-MM-dd HH:mm:ss"); + + if (is_paid==0){//没购买 + discount = listSeriesVideoByTypeBean.getSeriesType().getDiscount(); + if (discount==1){//无打折 + rl_course1.setVisibility(View.GONE); + rl_course3.setVisibility(View.VISIBLE); + tv_course_point.setText(price+""); + }else if (is_2099.contains("2099")){//永久优惠(包括了永久免费和永久打折) + if (discount==0){ + rl_course1.setVisibility(View.GONE); + rl_course3.setVisibility(View.VISIBLE); + tv_course_point.setText("免费"); + jifen.setVisibility(View.GONE); + }else { + rl_course1.setVisibility(View.GONE); + rl_course3.setVisibility(View.VISIBLE); + int v = (int) (price * discount); + LogUtil.i("正常不会出现的永久打折 = "+v); + tv_course_point.setText(v+""); + } + }else {//限时优惠 + rl_course1.setVisibility(View.VISIBLE); + tv_yuanjian.setText(price+""); + rl_course3.setVisibility(View.GONE); + tv_yuanjian.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); + int v = (int) (price * discount); + tv_point.setText(v+""); + long l = Long.parseLong(nowTime + ""); + Date date; + if (discount_begin_date>l){//还没有到优惠开始时间 + date = new Date(Long.parseLong(discount_begin_date+"") * 1000); + huodong.setText("距离活动开始还有:"); + nostart = true; + }else{ + date = new Date(Long.parseLong(discount_end_date+"") * 1000); + } + Date date1 = new Date(Long.parseLong(nowTime+"") * 1000); + recLen = (int) ((date.getTime() - date1.getTime()) / 1000); + TimerTask task = new TimerTask() { + @Override + public void run() { + runOnUiThread(new Runnable() { // UI thread + @Override + public void run() { + if (recLen <= 0) { + rl_course1.setVisibility(View.GONE); + rl_course3.setVisibility(View.VISIBLE); + tv_course_point.setText(price+""); + timer.cancel(); + } + recLen--; + secToTime(recLen); + if (!StringUtil.isEmpty(endday)){ + tv_exchange_day.setText(endday+"天"); + }else { + tv_exchange_day.setVisibility(View.GONE); + } + if (!StringUtil.isEmpty(endhour)&&!"0".equals(endhour)){ + if (endhour.length()==1){ + tv_daojishi1.setText("0"+endhour); + }else + tv_daojishi1.setText(endhour); + }else { + tv_daojishi1.setText("00"); + } + tv_daojishi2.setText(endmin); + tv_daojishi3.setText(ends); + + } + }); + } + }; + timer = new Timer(); + timer.schedule(task, 1000, 1000); // timeTask + } + + }else { + rl_course1.setVisibility(View.GONE); + tv_exchange1.setVisibility(View.VISIBLE); + tv_exchange1.setText("您已兑换"); + mediaController.getIs_whiteOrIs_paid(1); + } + if (is_white==1){//白名单人员无需兑换 + tv_exchange1.setVisibility(View.GONE); + mediaController.getIs_whiteOrIs_paid(0); + } + addFragment(); + + } + + break; + } + + } + }; + }; + private AlertDialog dialog; + private LinearLayout rl_course1;//是否已购买is_paid或者是否有打折discount + private LinearLayout rl_course3;// + private TextView tv_point;//打折后积分 + private TextView tv_yuanjian;//原积分 + private TextView tv_exchange_day; + private TextView tv_daojishi1; + private TextView tv_daojishi2; + private TextView tv_daojishi3; + private TextView tv_name;//标题 + private TextView jiangshi; + private TextView tv_exchange_num; + private TextView tv_course_point,jifen; + private String nowTime; + private String endday ; + private String endhour; + private String endmin; + private String ends; + private int fragmenth ; + private FrameLayout head; + private LinearLayout ll_polyv_player; + private String uuid; + private TextView huodong; + private AlertDialog dialog1; + private ScrollView scrollView; + private FrameLayout fl_tab; + private View flag_line; + private static PolyvDownloadSQLiteHelper downloadSQLiteHelper; + + @Override + protected void onCreate(Bundle savedInstanceState) { + if (savedInstanceState != null) + savedInstanceState.putParcelable("android:support:fragments", null); + super.onCreate(savedInstanceState); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(head).init(); + setContentView(R.layout.polyv_activity_player); + + findIdAndNew(); + initView(); + initOnClick(); + + PolyvScreenUtils.generateHeight16_9(this); + int playModeCode = getIntent().getIntExtra("playMode", PlayMode.portrait.getCode()); + PlayMode playMode = PlayMode.getPlayMode(playModeCode); + if (playMode == null) + playMode = PlayMode.portrait; + vid = getIntent().getStringExtra("value"); + bitrate = getIntent().getIntExtra("bitrate", PolyvBitRate.ziDong.getNum()); + boolean startNow = getIntent().getBooleanExtra("startNow", false); + isMustFromLocal = getIntent().getBooleanExtra("isMustFromLocal", false); + uuid = getIntent().getStringExtra("uuid"); + + switch (playMode) { + case landScape: + mediaController.changeToLandscape(); + break; + case portrait: + mediaController.changeToPortrait(); + break; + } + if (!StringUtil.isEmpty(vid)){ + play(vid, bitrate, startNow, isMustFromLocal); + } + + initData(); + + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) + { + + if(mediaController!=null) + { + + if(mediaController.iv_land.getVisibility()==View.VISIBLE) + { + mediaController.changeToLandscape(); + } + + } + } + else + { + if(mediaController!=null) + { + + if(mediaController.iv_port.getVisibility()==View.VISIBLE) + { + mediaController.changeToPortrait(); + + + } + + + } + } + + } + + + public String secToTime(int time) { + String timeStr = null; + int hour = 0; + int minute = 0; + int second = 0; + if (time <= 0) + return "00:00"; + else { + minute = (int)time / 60; + if (minute < 60) { + second = time % 60; + endmin = unitFormat(minute); + ends = unitFormat(second); + timeStr = unitFormat(minute) + ":" + unitFormat(second); + } else { + hour = minute / 60; + if (hour > 24){ + int i = hour / 24; + endday = i+""; +// minute = hour % 24; + } + minute = minute % 60; + second = time - hour * 3600 - minute * 60; + endhour = hour%24+""; + endmin = unitFormat(minute); + ends = unitFormat(second); + timeStr = unitFormat(hour) + ":" + unitFormat(minute) + ":" + + unitFormat(second); + } + } + return timeStr; + } + public static String unitFormat(int i) { + String retStr = null; + if (i >= 0 && i < 10) + retStr = "0" + Integer.toString(i); + else + retStr = "" + i; + return retStr; + } + private void initData() { + + series_type_uuid = getIntent().getStringExtra("series_type_uuid"); + Map map1 = new HashMap<>(); + map1.put("series_type_uuid",series_type_uuid); + map1.put("page","1"); + map1.put("title",""); + map1.put("sort",""); + sendJsonPostParamtoNetSignMD5(Url.listSeriesVideoByType,map1,LISTSERIESVIDEOBYTYPE); + + } + + + public void sendJsonPostParamtoNetSignMD5(final String postUrl, + final Map param, final int callType) { + param.put("user_uuid", SharePrefUtil.getString(this, "uuid", "")); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + try { + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + nowTime = bean.getTimestamp(); + param.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + Message message = new Message(); + message.what = callType; + message.obj = new String(result); + mHandler.sendMessage(message); + } else { + mHandler.sendEmptyMessage(010); + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + } + + } + }).start(); + + } + + + private void initOnClick() { + top_back.setOnClickListener(this); + tv_exchange1.setOnClickListener(this); + } + + private void addFragment() { + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + tabFragment = new PolyvPlayerTabFragment(); + viewPagerFragment = new PolyvPlayerViewPagerFragment(PolyvPlayerActivity.this); + Bundle bundle = new Bundle(); + bundle.putSerializable("listSeriesVideoByTypeBean",listSeriesVideoByTypeBean); + if (!StringUtil.isEmpty(vid)){ + bundle.putString("vid",vid); + } + viewPagerFragment.setArguments(bundle);//数据传递到fragment中 + tabFragment.setArguments(bundle); + ft.add(R.id.fl_tab, tabFragment, "tabFragment"); + ft.add(R.id.fl_viewpager, viewPagerFragment, "viewPagerFragment"); + ft.commit(); + } + + + private void findIdAndNew() { + videoErrorLayout = (LinearLayout) findViewById(R.id.video_error_layout); + videoErrorContent = (TextView) findViewById(R.id.video_error_content); + videoErrorRetry = (TextView) findViewById(R.id.video_error_retry); + + viewLayout = (RelativeLayout) findViewById(R.id.view_layout); + videoView = (PolyvVideoView) findViewById(R.id.polyv_video_view); + marqueeView = (PolyvMarqueeView) findViewById(R.id.polyv_marquee_view); + mediaController = (PolyvPlayerMediaController) findViewById(R.id.polyv_player_media_controller); + srtTextView = (TextView) findViewById(R.id.srt); + topSrtTextView = (TextView) findViewById(R.id.top_srt); + + auxiliaryVideoView = (PolyvAuxiliaryVideoView) findViewById(R.id.polyv_auxiliary_video_view); + auxiliaryLoadingProgress = (ProgressBar) findViewById(R.id.auxiliary_loading_progress); + auxiliaryView = (PolyvPlayerAuxiliaryView) findViewById(R.id.polyv_player_auxiliary_view); + advertCountDown = (TextView) findViewById(R.id.count_down); + firstStartView = (PolyvPlayerPreviewView) findViewById(R.id.polyv_player_first_start_view); + lightView = (PolyvPlayerLightView) findViewById(R.id.polyv_player_light_view); + volumeView = (PolyvPlayerVolumeView) findViewById(R.id.polyv_player_volume_view); + progressView = (PolyvPlayerProgressView) findViewById(R.id.polyv_player_progress_view); + loadingProgress = (ProgressBar) findViewById(R.id.loading_progress); + coverView = (PolyvPlayerAudioCoverView) findViewById(R.id.polyv_cover_view); + audioSourceCoverView = (PolyvPlayerAudioCoverView) findViewById(R.id.polyv_source_audio_cover); + tv_exchange1 = (TextView) findViewById(R.id.tv_exchange1); + top_back = (ImageView) findViewById(R.id.top_back); + scrollView = (ScrollView) findViewById(R.id.sc); + fl_tab = findViewById(R.id.fl_tab); + + fl_viewpager = findViewById(R.id.fl_viewpager); + head = findViewById(R.id.head); + + iv_screencast_search = (ImageView) mediaController.findViewById(R.id.iv_screencast_search); + iv_screencast_search_land = (ImageView) mediaController.findViewById(R.id.iv_screencast_search_land); + + mediaController.initConfig(head, viewLayout, tv_exchange1, is_white, is_paid); + mediaController.setAudioCoverView(coverView); + + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(this, + "加载中"); + dialog.show(); + + auxiliaryVideoView.setPlayerBufferingIndicator(auxiliaryLoadingProgress); + + videoView.setMediaController(mediaController); + + videoView.setPlayerBufferingIndicator(loadingProgress); + + rl_course1 = findViewById(R.id.rl_course1); + tv_point = findViewById(R.id.tv_point); + tv_yuanjian = findViewById(R.id.tv_yuanjian); + tv_exchange_day = findViewById(R.id.tv_exchange_day); + tv_daojishi1 = findViewById(R.id.tv_daojishi1); + tv_daojishi2 = findViewById(R.id.tv_daojishi2); + tv_daojishi3 = findViewById(R.id.tv_daojishi3); + tv_name = findViewById(R.id.tv_name); + jiangshi = findViewById(R.id.jiangshi); + tv_exchange_num = findViewById(R.id.tv_exchange_num); + tv_course_point = findViewById(R.id.tv_course_point); + jifen = findViewById(R.id.jifen); + rl_course3 = findViewById(R.id.rl_course3); + iv_vlms_cover = findViewById(R.id.iv_vlms_cover); + huodong = findViewById(R.id.huodong); + flag_line = findViewById(R.id.flag_line); + + +// btn_look.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// startActivity(new Intent(PolyvPlayerActivity.this, PolyvDownloadActivity.class)); +// } +// }); +// downloadSQLiteHelper = PolyvDownloadSQLiteHelper.getInstance(PolyvPlayerActivity.this); +// btn_down.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(final View view) { +// LoadVideoInfoTask loadVideoInfoTask = new LoadVideoInfoTask(new ILoadVideoInfoListener() { +// +// @Override +// public void onloaded(final PolyvVideoVO v) { +// if (v == null) { +// ToastUtil.showMessage("获取下载信息失败,请重试"); +// return; +// } +// +// // 码率数 +// String[] items = PolyvBitRate.getBitRateNameArray(v.getDfNum()); +// if (StringUtil.isEmpty(img)){ +// img = "series/img/2019/20190415171848.jpg"; +// author = "作者"; +// } +// final PolyvDownloadInfo downloadInfo = new PolyvDownloadInfo(vid, v.getDuration(), v.getFileSizeMatchVideoType(items.length), items.length, title,img,author);//下载最高码率 +// if (downloadSQLiteHelper != null && !downloadSQLiteHelper.isAdd(downloadInfo)) { +// downloadSQLiteHelper.insert(downloadInfo); +// PolyvDownloader polyvDownloader = PolyvDownloaderManager.getPolyvDownloader(vid, items.length); +// polyvDownloader.setPolyvDownloadProressListener(new MyDownloadListener(PolyvPlayerActivity.this, downloadInfo)); +// polyvDownloader.start(PolyvPlayerActivity.this); +// } else { +// ((Activity) PolyvPlayerActivity.this).runOnUiThread(new Runnable() { +// +// @Override +// public void run() { +// Toast.makeText(PolyvPlayerActivity.this, "视频已下载", Toast.LENGTH_SHORT).show(); +// } +// }); +// } + +// final AlertDialog.Builder selectDialog = new AlertDialog.Builder(PolyvPlayerActivity.this).setTitle("请选择下载码率").setSingleChoiceItems(items, 0, +// new DialogInterface.OnClickListener() { +// @Override +// public void onClick(DialogInterface dialog, int which) { +// int bitrate = which + 1; +// +//// final PolyvDownloadInfo downloadInfo = new PolyvDownloadInfo(vid, v.getDuration(),v.getFileSizeMatchVideoType(bitrate), bitrate, title); +//// Log.i("videoAdapter", downloadInfo.toString()); +//// if (downloadSQLiteHelper != null && !downloadSQLiteHelper.isAdd(downloadInfo)) { +//// downloadSQLiteHelper.insert(downloadInfo); +//// PolyvDownloader polyvDownloader = PolyvDownloaderManager.getPolyvDownloader(vid, bitrate); +//// polyvDownloader.setPolyvDownloadProressListener(new MyDownloadListener(PolyvPlayerActivity.this, downloadInfo)); +//// polyvDownloader.start(PolyvPlayerActivity.this); +//// } else { +//// ((Activity) PolyvPlayerActivity.this).runOnUiThread(new Runnable() { +//// +//// @Override +//// public void run() { +//// Toast.makeText(PolyvPlayerActivity.this, "视频已下载", Toast.LENGTH_SHORT).show(); +//// } +//// }); +//// } +// +// dialog.dismiss(); +// } +// }); + +// if (view.getWindowToken() != null) +// selectDialog.show().setCanceledOnTouchOutside(true); +// } +// }); +// loadVideoInfoTask.execute(vid); +// } +// }); + + } + + private static class MyDownloadListener implements IPolyvDownloaderProgressListener { + private long total; + private WeakReference contextWeakReference; + private PolyvDownloadInfo downloadInfo; + + MyDownloadListener(Context context, PolyvDownloadInfo downloadInfo) { + this.contextWeakReference = new WeakReference<>(context); + this.downloadInfo = downloadInfo; + } + + @Override + public void onDownloadSuccess() { + if (total == 0) + total = 1; + ToastUtil.showMessage("下载完成"); + downloadSQLiteHelper.update(downloadInfo, total, total); + } + + @Override + public void onDownloadFail(@NonNull PolyvDownloaderErrorReason errorReason) { + String errorMsg = PolyvErrorMessageUtils.getDownloaderErrorMessage(errorReason.getType()); + errorMsg += "(error code " + errorReason.getType().getCode() + ")"; + Log.e(TAG, errorMsg); + if (contextWeakReference.get() != null) + Toast.makeText(contextWeakReference.get(), errorMsg, Toast.LENGTH_LONG).show(); + } + + @Override + public void onDownload(long current, long total) { + this.total = total; + } + } + + private static class LoadVideoInfoTask extends AsyncTask { + + private final ILoadVideoInfoListener l; + + LoadVideoInfoTask(ILoadVideoInfoListener l) { + this.l = l; + } + + @Override + protected PolyvVideoVO doInBackground(String... params) { + try { + return PolyvSDKUtil.loadVideoJSON2Video(params[0]); + } catch (Exception e) { + Log.e(TAG, PolyvSDKUtil.getExceptionFullMessage(e, -1)); + return null; + } + } + + @Override + protected void onPostExecute(PolyvVideoVO v) { + super.onPostExecute(v); + l.onloaded(v); + } + } + + private interface ILoadVideoInfoListener { + void onloaded(PolyvVideoVO v); + } + + private void initView() { + videoView.setOpenAd(true); + videoView.setOpenTeaser(true); + videoView.setOpenQuestion(true); + videoView.setOpenSRT(true); + videoView.setOpenPreload(true, 2); + videoView.setOpenMarquee(true); + videoView.setAutoContinue(true); + videoView.setNeedGestureDetector(true); + videoView.setSeekType(PolyvSeekType.SEEKTYPE_NORMAL); + videoView.setLoadTimeoutSecond(25);//加载超时时间,单位:秒 + videoView.setBufferTimeoutSecond(15);//缓冲超时时间,单位:秒 + videoView.disableScreenCAP(this, false);//防录屏开关,true为开启,如果开启防录屏,投屏功能将不可用 + + String realName = SharePrefUtil.getString(PolyvPlayerActivity.this, Constant.realName, "肝胆相照专家端app用户"); + PolyvViewerInfo polyvViewerInfo = new PolyvViewerInfo(); + polyvViewerInfo.setViewerId(SharePrefUtil.getString(PolyvPlayerActivity.this, Constant.POLVID, "123")); + polyvViewerInfo.setViewerName(realName); + polyvViewerInfo.setViewerExtraInfo1(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "")); + polyvViewerInfo.setViewerExtraInfo2(Constant.Report_userId); + PolyvSDKClient.getInstance().setViewerInfo(polyvViewerInfo); + + videoView.setOnPreparedListener(new IPolyvOnPreparedListener2() { + @Override + public void onPrepared() { + if (videoView.getVideo() != null && videoView.getVideo().isMp3Source()) { + audioSourceCoverView.onlyShowCover(videoView); + } else { + audioSourceCoverView.hide(); + } + mediaController.preparedView(); + progressView.setViewMaxValue(videoView.getDuration()); + // 没开预加载在这里开始弹幕 + // danmuFragment.start(); + } + }); + + videoView.setOnPreloadPlayListener(new IPolyvOnPreloadPlayListener() { + @Override + public void onPlay() { + // 开启预加载在这里开始弹幕 +// danmuFragment.start(); + } + }); + + + videoView.setOnChangeModeListener(new IPolyvOnChangeModeListener() { + @Override + public void onChangeMode(String changedMode) { + coverView.changeModeFitCover(videoView, changedMode); + } + }); + + videoView.setOnVideoTimeoutListener(new IPolyvOnVideoTimeoutListener() { + @Override + public void onBufferTimeout(int timeoutSecond, int times) {//在一个缓冲里,每超过设置的timeoutSecond都会回调一次 + Toast.makeText(PolyvPlayerActivity.this, "视频加载速度缓慢,请切换到低清晰度的视频或调整网络", Toast.LENGTH_LONG).show(); + } + }); + + videoView.setOnVideoStatusListener(new IPolyvOnVideoStatusListener() { + @Override + public void onStatus(int status) { + if (status < 60) { + Toast.makeText(PolyvPlayerActivity.this, "状态错误 " + status, Toast.LENGTH_SHORT).show(); + } else { + Log.d(TAG, String.format("状态正常 %d", status)); + } + } + }); + + videoView.setOnVideoPlayErrorListener(new IPolyvOnVideoPlayErrorListener2() { + @Override + public boolean onVideoPlayError(@PolyvPlayErrorReason.PlayErrorReason int playErrorReason) { + String message = PolyvErrorMessageUtils.getPlayErrorMessage(playErrorReason); + message += "(error code " + playErrorReason + ")"; + + showErrorView(message); + return true; + } + }); + + //为了能更好的统一错误处理,这个错误回调合并到setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)中,对应的错误类型是PolyvPlayErrorReason.VIDEO_ERROR。 + //为了向后兼容,以前的程序不受影响,当设置了这个错误回调时,setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)错误回调不会被触发。 + //没有设置这个错误回调时,setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)错误回调才会触发。 +// videoView.setOnErrorListener(new IPolyvOnErrorListener2() { +// @Override +// public boolean onError() { +// String message = "当前视频无法播放,请尝试切换网络重新播放或者向管理员反馈(error code " + PolyvPlayErrorReason.VIDEO_ERROR + ")"; +// showErrorView(message); +// Toast.makeText(PolyvPlayerActivity.this, message, Toast.LENGTH_SHORT).show(); +// return true; +// } +// }); + + videoView.setOnAdvertisementOutListener(new IPolyvOnAdvertisementOutListener2() { + @Override + public void onOut(@NonNull PolyvADMatterVO adMatter) { + auxiliaryView.show(adMatter); + } + }); + + videoView.setOnAdvertisementCountDownListener(new IPolyvOnAdvertisementCountDownListener() { + @Override + public void onCountDown(int num) { + advertCountDown.setText("广告也精彩:" + num + "秒"); + advertCountDown.setVisibility(View.VISIBLE); + } + + @Override + public void onEnd() { + advertCountDown.setVisibility(View.GONE); + auxiliaryView.hide(); + } + }); + + videoView.setOnAdvertisementEventListener(new IPolyvOnAdvertisementEventListener2() { + @Override + public void onShow(PolyvADMatterVO adMatter) { + Log.i(TAG, "开始播放视频广告"); + } + + @Override + public void onClick(PolyvADMatterVO adMatter) { + if (!TextUtils.isEmpty(adMatter.getAddrUrl())) { + try { + new URL(adMatter.getAddrUrl()); + } catch (MalformedURLException e1) { + Log.e(TAG, PolyvSDKUtil.getExceptionFullMessage(e1, -1)); + return; + } + + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(adMatter.getAddrUrl())); + startActivity(intent); + } + } + }); + + + + videoView.setOnTeaserOutListener(new IPolyvOnTeaserOutListener() { + @Override + public void onOut(@NonNull String url) { + auxiliaryView.show(url); + } + }); + + videoView.setOnTeaserCountDownListener(new IPolyvOnTeaserCountDownListener() { + @Override + public void onEnd() { + auxiliaryView.hide(); + } + }); + + + videoView.setOnVideoSRTPreparedListener(new IPolyvOnVideoSRTPreparedListener() { + @Override + public void onVideoSRTPrepared() { + mediaController.preparedSRT(videoView); + } + }); + + videoView.setOnVideoSRTListener(new IPolyvOnVideoSRTListener() { + @Override + public void onVideoSRT(@Nullable List subTitleItems) { + srtTextView.setText(""); + topSrtTextView.setText(""); + + if (subTitleItems != null) { + for (PolyvSRTItemVO srtItemVO : subTitleItems) { + if (srtItemVO.isBottomCenterSubTitle()) { + srtTextView.setText(srtItemVO.getSubTitle()); + } else if (srtItemVO.isTopCenterSubTitle()) { + topSrtTextView.setText(srtItemVO.getSubTitle()); + } + } + } + + srtTextView.setVisibility(View.VISIBLE); + topSrtTextView.setVisibility(View.VISIBLE); + } + }); + + videoView.setOnGestureLeftUpListener(new IPolyvOnGestureLeftUpListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("LeftUp %b %b brightness %d", start, end, videoView.getBrightness(PolyvPlayerActivity.this))); + if(mediaController.isLocked()){ + return; + } + + int brightness = videoView.getBrightness(PolyvPlayerActivity.this) + 5; + if (brightness > 100) { + brightness = 100; + } + + videoView.setBrightness(PolyvPlayerActivity.this, brightness); + lightView.setViewLightValue(brightness, end); + } + }); + + videoView.setOnGestureLeftDownListener(new IPolyvOnGestureLeftDownListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("LeftDown %b %b brightness %d", start, end, videoView.getBrightness(PolyvPlayerActivity.this))); + if(mediaController.isLocked()){ + return; + } + int brightness = videoView.getBrightness(PolyvPlayerActivity.this) - 5; + if (brightness < 0) { + brightness = 0; + } + + videoView.setBrightness(PolyvPlayerActivity.this, brightness); + lightView.setViewLightValue(brightness, end); + } + }); + + videoView.setOnGestureRightUpListener(new IPolyvOnGestureRightUpListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("RightUp %b %b volume %d", start, end, videoView.getVolume())); + // 加减单位最小为10,否则无效果 + if(mediaController.isLocked()){ + return; + } + int volume = videoView.getVolume() + 10; + if (volume > 100) { + volume = 100; + } + + videoView.setVolume(volume); + volumeView.setViewVolumeValue(volume, end); + } + }); + + videoView.setOnGestureRightDownListener(new IPolyvOnGestureRightDownListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("RightDown %b %b volume %d", start, end, videoView.getVolume())); + // 加减单位最小为10,否则无效果 + if(mediaController.isLocked()){ + return; + } + int volume = videoView.getVolume() - 10; + if (volume < 0) { + volume = 0; + } + + videoView.setVolume(volume); + volumeView.setViewVolumeValue(volume, end); + } + }); + + videoView.setOnGestureSwipeLeftListener(new IPolyvOnGestureSwipeLeftListener() { + + @Override + public void callback(boolean start, int times, boolean end) { + // 左滑事件 + Log.d(TAG, String.format("SwipeLeft %b %b", start, end)); + if(mediaController.isLocked()){ + return; + } + mediaController.hideTickTips(); + if (fastForwardPos == 0) { + fastForwardPos = videoView.getCurrentPosition(); + } + + if (end) { + if (fastForwardPos < 0) + fastForwardPos = 0; + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + if (videoView.isCompletedState()) { + videoView.start(); +// danmuFragment.resume(); + } + fastForwardPos = 0; + } else { + fastForwardPos -= 1000 * times; + if (fastForwardPos <= 0) + fastForwardPos = -1; + } + progressView.setViewProgressValue(fastForwardPos, videoView.getDuration(), end, false); + } + }); + + videoView.setOnGestureSwipeRightListener(new IPolyvOnGestureSwipeRightListener() { + + @Override + public void callback(boolean start, int times, boolean end) { + // 右滑事件 + Log.d(TAG, String.format("SwipeRight %b %b", start, end)); + if(mediaController.isLocked()){ + return; + } + mediaController.hideTickTips(); + if (fastForwardPos == 0) { + fastForwardPos = videoView.getCurrentPosition(); + } + + if (end) { + if (fastForwardPos > videoView.getDuration()) + fastForwardPos = videoView.getDuration(); + if (!videoView.isCompletedState()) { + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + } else if (videoView.isCompletedState() && fastForwardPos != videoView.getDuration()) { + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + videoView.start(); +// danmuFragment.resume(); + } + fastForwardPos = 0; + } else { + fastForwardPos += 1000 * times; + if (fastForwardPos > videoView.getDuration()) + fastForwardPos = videoView.getDuration(); + } + progressView.setViewProgressValue(fastForwardPos, videoView.getDuration(), end, true); + } + }); + + videoView.setOnGestureClickListener(new IPolyvOnGestureClickListener() { + @Override + public void callback(boolean start, boolean end) { + if (videoView.isInPlaybackState() || videoView.isExceptionCompleted() && mediaController != null) + if (mediaController.isShowing()) + mediaController.hide(); + else + mediaController.show(); + } + }); + + videoErrorRetry.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + videoErrorLayout.setVisibility(View.GONE); + //调用setVid方法视频会自动播放 + play(vid, bitrate, true,isMustFromLocal); + } + }); + } + + /** + * 播放视频 + * + * @param vid 视频id + * @param bitrate 码率(清晰度) + * @param startNow 是否现在开始播放视频 + * @param isMustFromLocal 是否必须从本地(本地缓存的视频)播放 + */ + public void play(final String vid, final int bitrate, boolean startNow, final boolean isMustFromLocal) { + if (TextUtils.isEmpty(vid)) return; + LogUtil.i("vid = "+vid); + /**每次播放计算播放数+1*/ + Map map = new HashMap<>(); + map.put("uuid",uuid); + HttpMD5SendInfoUtil.sendJsonPostParamNoResultMD5(Url.readSeriesVideo,map); + + if (iv_vlms_cover != null && iv_vlms_cover.getVisibility() == View.VISIBLE) { + iv_vlms_cover.setVisibility(View.GONE); + } + + if (videoView.isDisableScreenCAP()) { + iv_screencast_search.setVisibility(View.GONE); + iv_screencast_search_land.setVisibility(View.GONE); + } + + videoView.release(); + srtTextView.setVisibility(View.GONE); + topSrtTextView.setVisibility(View.GONE); + mediaController.hide(); + mediaController.resetView(); + loadingProgress.setVisibility(View.GONE); + + auxiliaryVideoView.hide(); + auxiliaryLoadingProgress.setVisibility(View.GONE); + auxiliaryView.hide(); + advertCountDown.setVisibility(View.GONE); + firstStartView.hide(); + progressView.resetMaxValue(); + audioSourceCoverView.hide(); + +// danmuFragment.setVid(vid, videoView); + if (startNow) { + //调用setVid方法视频会自动播放 + videoView.setVid(vid, bitrate, isMustFromLocal); + } else { + //视频不播放,先显示一张缩略图 + firstStartView.setCallback(new PolyvPlayerPreviewView.Callback() { + + @Override + public void onClickStart() { + /** + * 调用setVid方法视频会自动播放 + * 如果是有学员登陆的播放,可以在登陆的时候通过 + * {@link com.easefun.polyvsdk.PolyvSDKClient.getinstance().setViewerId()}设置学员id + * 或者调用{@link videoView.setVidWithStudentId}传入学员id进行播放 + */ + + videoView.setVidWithStudentId(vid, bitrate, isMustFromLocal,SharePrefUtil.getString(PolyvPlayerActivity.this, Constant.POLVID, "123")); + } + }); + + firstStartView.show(vid); + } + if (PolyvVideoVO.MODE_VIDEO.equals(videoView.getPriorityMode())) { + coverView.hide(); + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode==1){ + finish(); + } + } + + @Override + protected void onResume() { + super.onResume(); + if (!isBackgroundPlay) { + //回来后继续播放 + if (isPlay) { + videoView.onActivityResume(); +// danmuFragment.resume(); + if (auxiliaryView.isPauseAdvert()) { + auxiliaryView.hide(); + } + } + } + mediaController.resume(); + } + + @Override + protected void onPause() { + super.onPause(); + mediaController.pause(); + } + + @Override + protected void onStop() { + super.onStop(); + if (!isBackgroundPlay) { + //弹出去暂停 + isPlay = videoView.onActivityStop(); +// danmuFragment.pause(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + videoView.destroy(); + videoView = null; + SharePrefUtil.saveInt(PolyvPlayerActivity.this,"fragmentHeight1",0); + auxiliaryView.hide(); + firstStartView.hide(); + coverView.hide(); + mediaController.disable(); + + } + + + + + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (timer!=null){ + timer.cancel(); + } + if (mediaController != null && mediaController.isLocked()) { + return true; + } + if (PolyvScreenUtils.isLandscape(this) && mediaController != null) { + mediaController.changeToPortrait(); + return true; + } + + } + + return super.onKeyDown(keyCode, event); + } + + public static Intent newIntent(Context context, PlayMode playMode, String vid) { + return newIntent(context, playMode, vid, PolyvBitRate.ziDong.getNum()); + } + + public static Intent newIntent(Context context, PlayMode playMode, String vid, int bitrate) { + return newIntent(context, playMode, vid, bitrate, false); + } + + public static Intent newIntent(Context context, PlayMode playMode, String vid, int bitrate, boolean startNow) { + return newIntent(context, playMode, vid, bitrate, startNow, false); + } + + public static Intent newIntent(Context context, PlayMode playMode, String vid, int bitrate, boolean startNow, + boolean isMustFromLocal) { + Intent intent = new Intent(context, PolyvPlayerActivity.class); + intent.putExtra("playMode", playMode.getCode()); + intent.putExtra("value", vid); + intent.putExtra("bitrate", bitrate); + intent.putExtra("startNow", startNow); + intent.putExtra("isMustFromLocal", isMustFromLocal); + return intent; + } + + public static void intentTo(Context context, PlayMode playMode, String vid) { + intentTo(context, playMode, vid, PolyvBitRate.ziDong.getNum()); + } + + public static void intentTo(Context context, PlayMode playMode, String vid, int bitrate) { + intentTo(context, playMode, vid, bitrate, false); + } + + public static void intentTo(Context context, PlayMode playMode, String vid, int bitrate, boolean startNow) { + intentTo(context, playMode, vid, bitrate, startNow, false); + } + + public static void intentTo(Context context, PlayMode playMode, String vid, int bitrate, boolean startNow, + boolean isMustFromLocal) { + context.startActivity(newIntent(context, playMode, vid, bitrate, startNow, isMustFromLocal)); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.top_back: + finish(); + if (timer!=null){ + timer.cancel(); + } + break; + case R.id.tv_exchange1: + if (nostart){ + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_videoexcheng, null); + dialog1 = new AlertDialog.Builder(PolyvPlayerActivity.this).create(); + TextView tv_infotitle = layout.findViewById(R.id.tv_infotitle); + TextView tv_1 = layout.findViewById(R.id.tv_1); + TextView tv_2 = layout.findViewById(R.id.tv_2); + TextView tv_3 = layout.findViewById(R.id.tv_3); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + tv_infotitle.setText("温馨提示"); + tv_1.setText("优惠活动尚未开始,是否原价兑换?"); + tv_2.setVisibility(View.GONE); + tv_3.setVisibility(View.GONE); + dialog1.show(); + Window window =dialog1.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog1.getWindow().setContentView(layout); + btn_sure.setOnClickListener(this); + btn_cancel.setOnClickListener(this); + }else if (is_paid == 0 ){ + toPay(); + } + + break; + case R.id.btn_sure: + dialog1.dismiss(); + toPay(); + break; + case R.id.btn_cancel: + dialog1.dismiss(); + break; + + } + } + + + private void toPay(){ + + + Intent intent = new Intent(this,OnlineVideoExchangeActivity.class); + intent.putExtra("series_type_uuid",series_type_uuid); + intent.putExtra("title",title); + if (paid_num==0){ + intent.putExtra("paid_num",paid_num+""); + }else { + intent.putExtra("paid_num","已兑换"+paid_num+"次"); + } + if (discount==1){//无打折 + intent.putExtra("price",price+"积分"); + }else if (discount==0){//免费 + intent.putExtra("price","0积分"); + }else if (nostart){//优惠未开始 + intent.putExtra("price",price+"积分"); + }else { + int v1 = (int) (price * discount); + intent.putExtra("price",v1+"积分"); + } + startActivityForResult(intent,1); + + + + } + @Override + public void getheightListenr(int height) { + ViewGroup.LayoutParams layoutParams = fl_viewpager.getLayoutParams(); + layoutParams.height = height; + fl_viewpager.setLayoutParams(layoutParams); + dialog.dismiss(); + + } + + @Override + public void getVidlistener(String vid,String uuid) { + this.uuid = uuid; + play(vid, bitrate, true, isMustFromLocal); + } + + + /** + * 播放模式 + * + * @author TanQu + */ + public enum PlayMode { + /** + * 横屏 + */ + landScape(3), + /** + * 竖屏 + */ + portrait(4); + + private final int code; + + private PlayMode(int code) { + this.code = code; + } + + /** + * 取得类型对应的code + * + * @return + */ + public int getCode() { + return code; + } + + public static PlayMode getPlayMode(int code) { + switch (code) { + case 3: + return landScape; + case 4: + return portrait; + } + + return null; + } + } + + + public void showErrorView(String message){ + videoErrorLayout.setVisibility(View.VISIBLE); + videoErrorContent.setText(message); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/QualityCourseActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/QualityCourseActivity.java new file mode 100644 index 0000000..1f0a59a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/QualityCourseActivity.java @@ -0,0 +1,337 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import android.content.Intent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.ListFreeBean; +import cn.shangyu.gdxzExpert.bean.ListSeriesTypeBean; +import cn.shangyu.gdxzExpert.bean.SeriesVideoNewsListBean; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.pointsmall.IntegralTicketActivity; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.ExchangeAdapter; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RollViewPager; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; + +/** + * Created by WANGChengXin on 2019/3/25. + */ + +public class QualityCourseActivity extends BaseActivity implements OnCallBackFromNet{ + private CustomProgressDialog pd; + private LinearLayout top_news_viewpager; + private LinearLayout dots_ll; + private PullToRefreshListView lv_exchange; + private LinearLayout headerView; + public static final int FREE=1; + public static final int EXCHANGE=2; + public static final int NEWS=3; + private RelativeLayout rl_exchange,rl_free; + private ListSeriesTypeBean listSeriesTypeBean; + private ListFreeBean listFreeBean; + private LinearLayout ll_free2,ll_free1; + private TextView tv_free1,tv_free2; + private SeriesVideoNewsListBean seriesVideoNewsListBean; + private RollViewPager mViewPager; + private ArrayList dotList; + private View free_line; + private LinearLayout ll_jifenshop,ll_integraltickit,ll_buy_point; + @Override + public void setTitle() { + top_title.setText("精品课程"); + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + View view = UIUtils.inflate(R.layout.activity_qualitycourse); + lv_exchange = view.findViewById(R.id.lv_exchange); + ll_jifenshop = view.findViewById(R.id.ll_point_shop); + ll_integraltickit = view.findViewById(R.id.ll_integraltickit); + ll_buy_point = view.findViewById(R.id.ll_buy_point); + headerView = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_qualitycourse_header, null); + initView(headerView); + ListView refreshableView = lv_exchange.getRefreshableView(); + refreshableView.addHeaderView(headerView); + pd = new CustomProgressDialog(this, "请稍候"); + pd.show(); + initOnClick(); + getData(); + return view; + } + + private void initOnClick() { + rl_exchange.setOnClickListener(this); + rl_free.setOnClickListener(this); + ll_free1.setOnClickListener(this); + ll_free2.setOnClickListener(this); + ll_jifenshop.setOnClickListener(this); + ll_buy_point.setOnClickListener(this); + ll_integraltickit.setOnClickListener(this); + lv_exchange.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + int i = position - 2; + String uuid = listSeriesTypeBean.getData().getList().get(i).getUuid(); + Intent intent = PolyvPlayerActivity.newIntent(QualityCourseActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("series_type_uuid", uuid); + startActivity(intent); + } + }); + + } + + private void getData() { + Map map = new HashMap<>(); + map.put("page","1"); + map.put("title",""); + map.put("keywords",""); + map.put("sort",""); + sendJsonPostParamtoNetSignMD5(Url.listSeriesType,map,EXCHANGE,this); + + Map map1 = new HashMap<>(); + map1.put("page","1"); + map1.put("title",""); + map1.put("keywords",""); + map1.put("sort","2"); + sendJsonPostParamtoNetSignMD5(Url.listFree,map1,FREE,this); + + + Map map2 = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.SeriesVideoNewsList,map2,NEWS,this); + + + } + + private void initView(View view) { + top_news_viewpager = (LinearLayout) view.findViewById(R.id.top_news_viewpager); + dots_ll = (LinearLayout) view.findViewById(R.id.dots_ll); + rl_exchange = view.findViewById(R.id.rl_exchange); + rl_free = view.findViewById(R.id.rl_free); + ll_free2 = view.findViewById(R.id.ll_free2); + ll_free1 = view.findViewById(R.id.ll_free1); + tv_free1 = view.findViewById(R.id.tv_free1); + tv_free2 = view.findViewById(R.id.tv_free2); + free_line = view.findViewById(R.id.free_line); + + top_news_viewpager.setFocusable(true); + top_news_viewpager.setFocusableInTouchMode(true); + top_news_viewpager.requestFocus(); + int width =getResources().getDisplayMetrics().widthPixels; + // int height = CommonUtil.dip2px(mActivity, 180); + int height = width * 320 / 640; + if (width < 720) { + height = width * 7 / 16 - 10; + // height = width/2; + + } + android.view.ViewGroup.LayoutParams ivLp = top_news_viewpager + .getLayoutParams(); + ivLp.width = width; + ivLp.height = height; + top_news_viewpager.setLayoutParams(ivLp); + + + + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.rl_exchange: + Intent intent = new Intent(QualityCourseActivity.this, ExchangeAreaActivity.class); + startActivity(intent); + break; + case R.id.rl_free: + startActivity(new Intent(QualityCourseActivity.this,FreeAreaActivity.class)); + break; + case R.id.ll_free1: + intent = PolyvPlayerActivity.newIntent(QualityCourseActivity.this, PolyvPlayerActivity.PlayMode.portrait, listFreeBean.getData().getList().get(0).getPolyv_uuid()); + intent.putExtra("startNow", true); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("series_type_uuid", listFreeBean.getData().getList().get(0).getSeries_type_uuid()); + intent.putExtra("uuid", listFreeBean.getData().getList().get(0).getUuid()); + startActivity(intent); + break; + case R.id.ll_free2: + intent = PolyvPlayerActivity.newIntent(QualityCourseActivity.this, PolyvPlayerActivity.PlayMode.portrait,listFreeBean.getData().getList().get(1).getPolyv_uuid()); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("startNow", true); + intent.putExtra("series_type_uuid", listFreeBean.getData().getList().get(1).getSeries_type_uuid()); + intent.putExtra("uuid", listFreeBean.getData().getList().get(1).getUuid()); + startActivity(intent); + break; + case R.id.ll_point_shop://积分商城 + if(BigModule()) + { + Intent intent3 = new Intent(QualityCourseActivity.this, BigPointsMallActivity.class); + startActivity(intent3); + } + else + { + Intent intent3 = new Intent(QualityCourseActivity.this, PointsMallActivity.class); + startActivity(intent3); + } + + break; + case R.id.ll_integraltickit://积分券 + Intent intent1 = new Intent(QualityCourseActivity.this, IntegralTicketActivity.class); + startActivity(intent1); + break; + case R.id.ll_buy_point://购买积分 + Intent intent2 = new Intent(QualityCourseActivity.this, BuyIntegerActivty.class); + startActivity(intent2); + break; + } + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + pd.dismiss(); + switch (resultCode){ + case EXCHANGE: + LogUtil.i("EXCHANGE = "+resultJson); + Gson gson = new Gson(); + listSeriesTypeBean = gson.fromJson(resultJson, ListSeriesTypeBean.class); + if (listSeriesTypeBean.getData()!=null){ + + ExchangeAdapter adapter = null; + if (listSeriesTypeBean.getData().getList().size()>=3){ + List list = new ArrayList<>(); + for (int i = 0;i<3;i++){ + list.add(listSeriesTypeBean.getData().getList().get(i)); + adapter = new ExchangeAdapter(QualityCourseActivity.this,list); + } + }else { + adapter = new ExchangeAdapter(QualityCourseActivity.this,listSeriesTypeBean.getData().getList()); + } + + lv_exchange.setAdapter(adapter); + } + break; + case FREE: + LogUtil.i("FREE = "+resultJson); + Gson gson1 = new Gson(); + listFreeBean = gson1.fromJson(resultJson, ListFreeBean.class); + if (listFreeBean.getData()!=null){ + if (listFreeBean.getData().getList().size()==0){ + rl_free.setVisibility(View.GONE); + ll_free2.setVisibility(View.GONE); + ll_free1.setVisibility(View.GONE); + free_line.setVisibility(View.GONE); + }else if (listFreeBean.getData().getList().size()>1){ + ll_free2.setVisibility(View.VISIBLE); + tv_free1.setText(listFreeBean.getData().getList().get(0).getTitle()); + tv_free2.setText(listFreeBean.getData().getList().get(1).getTitle()); + }else { + tv_free1.setText(listFreeBean.getData().getList().get(0).getTitle()); + + } + + } + break; + case NEWS: + LogUtil.i("NEWS = "+resultJson); + Gson gson3 = new Gson(); + seriesVideoNewsListBean = gson3.fromJson(resultJson, SeriesVideoNewsListBean.class); + if (seriesVideoNewsListBean!=null&&"200".equals(seriesVideoNewsListBean.getCode())&&seriesVideoNewsListBean.getData().size()!=0) { + // 轮播图的点 + initDot(seriesVideoNewsListBean.getData().size()); + mViewPager = new RollViewPager(QualityCourseActivity.this, dotList, + R.drawable.dot_white, R.drawable.dot_normal, + // 轮播图点击事件 + new RollViewPager.OnPagerClickCallback() { + @Override + public void onPagerClick(int position) { + Intent intent = PolyvPlayerActivity.newIntent(QualityCourseActivity.this, PolyvPlayerActivity.PlayMode.portrait, ""); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("series_type_uuid",seriesVideoNewsListBean.getData().get(position).getUuid()); + startActivity(intent); + } + }); + mViewPager.setLayoutParams(new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); + // top图片地址 + ArrayList list = new ArrayList<>(); + for (int i = 0; i < seriesVideoNewsListBean.getData().size(); i++) { + list.add(Url.urlHtml+seriesVideoNewsListBean.getData().get(i).getImg()); + } + mViewPager.setUriList(list); + // 开始滚动 + mViewPager.startRoll(); + // top标题 +// mViewPager.setTitle(topNewsTitle, seriesVideoNewsListBean); + // 加载到布局 + top_news_viewpager.removeAllViews(); + top_news_viewpager.addView(mViewPager); + + }else { + ToastUtil.showMessage("请求失败"); + } + break; + } + } + /** + * 实例化轮播图点 initDot + * + * @param size + * void + */ + private void initDot(int size) { + dotList = new ArrayList(); + dots_ll.removeAllViews(); + for (int i = 0; i < size; i++) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + CommonUtil.dip2px(this, 6), CommonUtil.dip2px( + this, 6)); + params.setMargins(10, 0, 5, 0); + View m = new View(this); + if (i == 0) { + m.setBackgroundResource(R.drawable.dot_white); + } else { + m.setBackgroundResource(R.drawable.dot_normal); + } + m.setLayoutParams(params); + dots_ll.addView(m); + dotList.add(m); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideoDetailPolyvPlayerActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideoDetailPolyvPlayerActivity.java new file mode 100644 index 0000000..aa71b2e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideoDetailPolyvPlayerActivity.java @@ -0,0 +1,3995 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + +import static cn.shangyu.gdxzExpert.polyvplayer.adapter.PolyvDownloadListViewAdapter.getTime; +import static cn.shangyu.gdxzExpert.polyvplayer.util.PolyvNetworkUtils.getNetWorkTypeName; +import static cn.shangyu.gdxzExpert.polyvplayer.util.PolyvNetworkUtils.isConnected; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.FROMEXPERT; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.FROMEXPERT1; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.os.Handler; +import android.os.IBinder; +import android.os.Looper; +import android.os.Message; +import android.os.PowerManager; +import android.text.TextUtils; +import android.text.method.ScrollingMovementMethod; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.BaseExpandableListAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ExpandableListView; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; +import android.widget.ProgressBar; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.RelativeLayout; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.FragmentActivity; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.easefun.polyvsdk.PolyvBitRate; +import com.easefun.polyvsdk.PolyvDownloader; +import com.easefun.polyvsdk.PolyvDownloaderErrorReason; +import com.easefun.polyvsdk.PolyvDownloaderManager; +import com.easefun.polyvsdk.PolyvSDKClient; +import com.easefun.polyvsdk.PolyvSDKUtil; +import com.easefun.polyvsdk.download.listener.IPolyvDownloaderProgressListener; +import com.easefun.polyvsdk.marquee.PolyvMarqueeItem; +import com.easefun.polyvsdk.marquee.PolyvMarqueeView; +import com.easefun.polyvsdk.po.PolyvViewerInfo; +import com.easefun.polyvsdk.srt.PolyvSRTItemVO; +import com.easefun.polyvsdk.video.PolyvPlayErrorReason; +import com.easefun.polyvsdk.video.PolyvSeekType; +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.video.auxiliary.PolyvAuxiliaryVideoView; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementCountDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementEventListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnAdvertisementOutListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnChangeModeListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureClickListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureLeftDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureLeftUpListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureRightDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureRightUpListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureSwipeLeftListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnGestureSwipeRightListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnPreloadPlayListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnPreparedListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnTeaserCountDownListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnTeaserOutListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoPlayErrorListener2; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoSRTListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoSRTPreparedListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoStatusListener; +import com.easefun.polyvsdk.video.listener.IPolyvOnVideoTimeoutListener; +import com.easefun.polyvsdk.vo.PolyvADMatterVO; +import com.easefun.polyvsdk.vo.PolyvVideoVO; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; +import com.umeng.socialize.ShareAction; +import com.umeng.socialize.UMShareAPI; +import com.umeng.socialize.UMShareListener; +import com.umeng.socialize.bean.SHARE_MEDIA; +import com.umeng.socialize.media.UMImage; +import com.umeng.socialize.media.UMMin; +import com.umeng.socialize.media.UMWeb; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.lang.ref.WeakReference; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Timer; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GroupChatSelectPatientActivity; +import cn.shangyu.gdxzExpert.activity.GroupSelectParentActivity; +import cn.shangyu.gdxzExpert.activity.SettingFeedbackActivity; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.adapter.VideoCommentPolyVplayerAdapter; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.Child; +import cn.shangyu.gdxzExpert.bean.CommentBean; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.bean.NewCommentBean; +import cn.shangyu.gdxzExpert.bean.PolyvDownloadInfo; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.bean.VideoTeachDetailBean; +import cn.shangyu.gdxzExpert.cast.PolyvScreencastManager; +import cn.shangyu.gdxzExpert.cast.widget.PolyvScreencastSearchLayout; +import cn.shangyu.gdxzExpert.cast.widget.PolyvScreencastStatusLayout; +import cn.shangyu.gdxzExpert.ecdemo.ECAsyncTask; +import cn.shangyu.gdxzExpert.ecdemo.RichTextBean; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.BitmapUtil; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.pointsmall.BuyIntegerActivty; +import cn.shangyu.gdxzExpert.polyvplayer.database.PolyvDownloadSQLiteHelper; +import cn.shangyu.gdxzExpert.polyvplayer.fragment.VideoDetailPolyvPlayerTabFragment; +import cn.shangyu.gdxzExpert.polyvplayer.fragment.VideoDetailPolyvPlayerViewPagerFragment; +import cn.shangyu.gdxzExpert.polyvplayer.listener.GetVidListener; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAudioCoverView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAuxiliaryView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerLightView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerMediaController; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerPreviewView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerProgressView; +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerVolumeView; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvErrorMessageUtils; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.report.CommUtil; +import cn.shangyu.gdxzExpert.report.ReportService; +import cn.shangyu.gdxzExpert.report.reportBean; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.CommentExpandableListView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; + +/** + * Created by WANGChengXin on 2019/10/28. + * 视频详情(集成polyvplayer播放器) + */ + +public class VideoDetailPolyvPlayerActivity extends FragmentActivity implements View.OnClickListener,GetVidListener { + private static final String TAG = PolyvPlayerActivity.class.getSimpleName(); + + private ImageView iv_vlms_cover; + + + private ImageView iv_screencast_search, iv_screencast_search_land; + /** + * 播放器的parentView + */ + private RelativeLayout viewLayout = null; + /** + * 播放主视频播放器 + */ + private PolyvVideoView videoView = null; + /** + * 跑马灯控件 + */ + private PolyvMarqueeView marqueeView = null; + private PolyvMarqueeItem marqueeItem = null; + /** + * 视频控制栏 + */ + private PolyvPlayerMediaController mediaController = null; + /** + * 字幕文本视图 + */ + private TextView srtTextView = null; + private TextView topSrtTextView = null; + + + /** + * 用于播放广告片头的播放器 + */ + private PolyvAuxiliaryVideoView auxiliaryVideoView = null; + /** + * 视频广告,视频片头加载缓冲视图 + */ + private ProgressBar auxiliaryLoadingProgress = null; + /** + * 图片广告界面 + */ + private PolyvPlayerAuxiliaryView auxiliaryView = null; + /** + * 广告倒计时 + */ + private TextView advertCountDown = null; + /** + * 缩略图界面 + */ + private PolyvPlayerPreviewView firstStartView = null; + /** + * 手势出现的亮度界面 + */ + private PolyvPlayerLightView lightView = null; + /** + * 手势出现的音量界面 + */ + private PolyvPlayerVolumeView volumeView = null; + /** + * 手势出现的进度界面 + */ + private PolyvPlayerProgressView progressView = null; + /** + * 音频模式下的封面 + */ + private PolyvPlayerAudioCoverView coverView = null; + //mp3源文件播放时的封面图 + private PolyvPlayerAudioCoverView audioSourceCoverView = null; + /** + * 视频加载缓冲视图 + */ + private ProgressBar loadingProgress = null; + + private int fastForwardPos = 0; + private boolean isPlay = false; + + private boolean isBackgroundPlay = false; + + private LinearLayout videoErrorLayout; + private TextView videoErrorContent,videoErrorRetry; + private String vid; + private boolean isMustFromLocal; + private VideoDetailPolyvPlayerViewPagerFragment viewPagerFragment; + private VideoDetailPolyvPlayerTabFragment tabFragment; + private TextView tv_exchange1; + private TextView tv_exchange; + private ImageView top_back; + // private ScrollView sc; + public static final int LISTSERIESVIDEOBYTYPE = 2; + private String series_type_uuid; +// private FrameLayout fl_viewpager; + private ListSeriesVideoByTypeBean listSeriesVideoByTypeBean; + private int recLen; + private Timer timer; + private int paid_num; + private String title; + private int price; + private double discount; + private int is_white; + private int is_paid; + private boolean nostart; + private String is_2099; + private AlertDialog dialog1; + private LinearLayout rl_course1;//是否已购买is_paid或者是否有打折discount + private LinearLayout rl_course3;// + private TextView tv_point;//打折后积分 + private TextView tv_yuanjian;//原积分 + private TextView tv_exchange_day; + private TextView tv_daojishi1; + private TextView tv_daojishi2; + private TextView tv_daojishi3; + private TextView tv_name;//标题 + private TextView jiangshi; + private TextView tv_exchange_num; + private TextView tv_course_point,jifen; + private String nowTime; + private String endday ; + private String endhour; + private String endmin; + private String ends; + private int fragmenth ; + private FrameLayout head; + private LinearLayout ll_polyv_player; + private String uuid; + private TextView huodong; + private ScrollView scrollView; +// private FrameLayout fl_tab; + private View flag_line; + private TextView mTv_jinajie; + private View mLine_jianjie, mLine_pinglun; +// private PullToRefreshListView mLv_video_pinglun; + private LinearLayout mLl_video_pinglun; + private EditText mEt_add; + private Button mBt_add; + private boolean isCollt = false; + private int page = 1; + private View loading_view; + private PowerManager.WakeLock wakeLock; + private PowerManager powerManager; + private static PolyvDownloadSQLiteHelper downloadSQLiteHelper; + private ImageButton top_right, top_colloct; + private RadioGroup mRg_video; + private LinearLayout mLl_video_below; + private TextView mTitle; + private String url; + private String expertUuid; + private String videoUuid; + private String readnum; + private String imgpath; + private String public_name; + private String note; + private VideoDetailPolyvPlayerActivity mActivity; + private RelativeLayout rl_video_download; + private TextView tv_loading,tv_size,tv_delete,tv_video_long; + private ImageView iv_video_Long; + private int bitrate;;//码率 + public static final int VIDEODETAIL = 200; + public static final int ISVIDEODOWNLOADRECORD = 300; + public static final int PAYVIDEODOWNLOAD = 400; + public static final int ADDVIDEOWATCHRECORD = 500; + public static final int GETWELFARENUM = 202; + public static final int USEWELFARENUM = 203; + /** * 以下为评论代码 + */ + public static final int GET_HF_COMMENT_RESULT = 201; + private static VideoTeachDetailBean videoTeachDetailBean; + private int isCollection; + private PolyvDownloadInfo downloadInfo; + public static final int DOWNFINISH = 3; + private int point; + private int result;//是否支付过改视频 + private String content; + private ECAlertDialog dilaog2; + private int welfareNum;//剩余福利剩余次数 + private String isvideodownloadrecord_code; + Boolean ispatientvideo; + private CommentExpandableListView expandableListView; + private CommentExpandAdapter adapterex; + @SuppressLint("HandlerLeak") + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + closeProgressDialog(); + switch (msg.what){ + case 302: + mEt_add.setText(""); + getCommentList(); + ToastUtil.showMessage("评论成功"); + break; + case 301: +// closeProgressDialog(); + prossData((String) msg.obj); + break; + case VIDEODETAIL: + String resultData = (String) msg.obj; + LogUtil.i("VIDEODETAIL = "+resultData); + videoTeachDetailBean = GsonTools.fromGsonToBean(resultData, VideoTeachDetailBean.class); + vid = videoTeachDetailBean.getVideo().getPolyv_uuid(); + url = videoTeachDetailBean.getVideo().getPath(); + title = videoTeachDetailBean.getVideo().getName(); + readnum = videoTeachDetailBean.getVideo().getReadnum()+""; + imgpath = videoTeachDetailBean.getVideo().getImgpath(); + public_name = videoTeachDetailBean.getVideo().getPublic_name(); + point = videoTeachDetailBean.getVideo().getPoint(); + content = videoTeachDetailBean.getVideo().getContent(); + if (StringUtil.isEmpty(vid)){ + String[] split = content.split("\"vid\" : "); + if (split.length<2){ + split = content.split("'vid' : "); + for (int i = 0;i1){ + String[] split1 = split[1].split("\""); + vid = split1[1]; + } + } + isCollection = videoTeachDetailBean.getVideo().getIsCollection(); + note = videoTeachDetailBean.getVideo().getNote(); + if (1==isCollection) { + isCollt = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + isCollt = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } + mTv_jinajie.setText(note); + tv_title.setText(title); + tv_author.setText(public_name); + + //添加我的福利后可以注释 +// if (point == 0){ +// tv_jifen.setText("(限时免费)"); +// }else { +// if (Constant.IV_5ZHE==1){ +// if (25==point){ +// ll_dazhe.setVisibility(View.VISIBLE); +// tv_jifen.setVisibility(View.GONE); +// tv_jifen13.setText("折,仅需"+point+"积分)"); +// }else { +// tv_jifen.setText("("+point+"积分)"); +// } +// }else { +// tv_jifen.setText("("+point+"积分)"); +// } +// } + + LinkedList polyvDownloadInfos = downloadSQLiteHelper.getloadInfo(vid); + if (polyvDownloadInfos!=null&&polyvDownloadInfos.size()>0){ + downloadInfo = polyvDownloadInfos.get(0); + long percent = downloadInfo.getPercent(); + long total = downloadInfo.getTotal(); + if (percent==total){ + tv_exchange.setText("查看缓存"); + }else { + tv_exchange.setText("视频缓存中"); + } + } + + initIntent(); + getCommentList(); + addVideoWatchRecord(); + isVideoDownloadRecord(); + needreportDetail(getIntent().getStringExtra("pagetype"), videoTeachDetailBean.getVideo().getTags(),title); + break; + case 0: + + break; + case 2: + tv_loading.setVisibility(View.VISIBLE); + String loading = (String) msg.obj; + tv_loading.setText(loading); + LogUtil.i("tv_loading = "+loading); + break; + case DOWNFINISH: + tv_exchange.setText("查看缓存"); + tv_jifen.setVisibility(View.GONE); + ll_dazhe.setVisibility(View.GONE); + tv_loading.setVisibility(View.GONE); + break; + case ISVIDEODOWNLOADRECORD: + String resultData1 = (String) msg.obj; + LogUtil.i(" ISVIDEODOWNLOADRECORD = "+resultData1); + try { + JSONObject jsonObject = new JSONObject(resultData1); + isvideodownloadrecord_code = jsonObject.optString("code"); + result = jsonObject.optInt("result"); + if ("200".equals(isvideodownloadrecord_code)){ + if (result==0){ + tv_jifen.setVisibility(View.VISIBLE); + if (point==0){ + tv_jifen.setText("(限时免费)"); + }else { + + //添加我的福利后可以注释 +// if (Constant.IV_5ZHE==1){ +// if (25==point){ +// ll_dazhe.setVisibility(View.VISIBLE); +// tv_jifen.setVisibility(View.GONE); +// tv_jifen13.setText("折,仅需"+point+"积分)"); +// }else { +// tv_jifen.setText("("+point+"积分)"); +// } +// }else { +// tv_jifen.setText("("+point+"积分)"); +// } + getWelfareNum(); + } + }else{ + tv_jifen.setVisibility(View.GONE); + ll_dazhe.setVisibility(View.GONE); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + + + break; + case PAYVIDEODOWNLOAD: + String resultData2 = (String) msg.obj; + LogUtil.i(" ISVIDEODOWNLOADRECORD = "+resultData2); + BaseBean bean = GsonTools.fromGsonToBean(resultData2, BaseBean.class); + if ("200".equals(bean.code)&&"pay succeed".equals(bean.message)){ + result = 1 ; + tv_jifen.setVisibility(View.GONE); + ll_dazhe.setVisibility(View.GONE); + downVideo(); + needreportPay("viorder_deo_download",point+"","积分",1+"",title,videoTeachDetailBean.getVideo().getTags()); + }else if ("106".equals(bean.code)){ + dilaog2 = ECAlertDialog.buildAlert(VideoDetailPolyvPlayerActivity.this, + "您的积分不足,是否购买积分?", "取消", "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dilaog2.dismiss(); + startActivity(new Intent(VideoDetailPolyvPlayerActivity.this,BuyIntegerActivty.class)); + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCancelable(false); + dilaog2.getWindow(); + dilaog2.show(); +// ToastUtil.showMessage("您的积分不够,请赚取积分或购买后来支付!"); + }else { + ToastUtil.showMessage("支付失败"); + } + break; + case ADDVIDEOWATCHRECORD: + + break; + case GETWELFARENUM://{"WelfareNum":0,"code":"1","message":"查询成功"} + LogUtil.i("GETWELFARENUM = "+(String) msg.obj); + try { + JSONObject jsonObject = new JSONObject((String) msg.obj); + welfareNum = jsonObject.optInt("WelfareNum"); + if (point>0&&welfareNum>0){ + ll_dazhe.setVisibility(View.GONE); + tv_jifen.setVisibility(View.VISIBLE); + tv_jifen.setText("(剩余免费下载"+welfareNum+"次)"); + }else { + if (Constant.IV_5ZHE==1){ + if (50==point){ + ll_dazhe.setVisibility(View.VISIBLE); + tv_jifen.setVisibility(View.GONE); + tv_jifen13.setText("折,仅需"+point+"积分)"); + }else { + tv_jifen.setText("("+point+"积分)"); + } + }else { + tv_jifen.setText("("+point+"积分)"); + } + } + } catch (JSONException e) { + e.printStackTrace(); + } + break; + case USEWELFARENUM: + LogUtil.i("USEWELFARENUM = "+(String) msg.obj); + Gson gson = new Gson(); + BaseBean bean1 = gson.fromJson( (String) msg.obj, BaseBean.class); + if (bean1!=null&&"1".equals(bean1.code)){ + downVideo(); + } + + break; + case 404://第一次请求失败 + LogUtil.e("提交失败,重新请求 "); + videoDetail(); + isVideoDownloadRecord(); + addVideoWatchRecord(); + break; + } + + } + }; + }; + + + + private TextView tv_title; + private TextView tv_author; + private LinearLayout tab_rbn_down; + private RadioButton tab_rbn_jianjie; + private RadioButton tab_rbn_pinglun; + private TextView tv_huancun; + private TextView tv_jifen; + private ECAlertDialog buildAlert; + private LocalBroadcastManager localBroadcastManager; + private IntentFilter intentFilter; + private LocalReceiver localReceiver; + private RelativeLayout rl_huancun; + private LinearLayout ll_dazhe; + private TextView tv_jifen13; + private Button bt_inside_share; + private String need_inside_share; + + //投屏相关 + private PolyvScreencastManager screencastManager; + private PolyvScreencastStatusLayout fl_screencast_status; + private PolyvScreencastSearchLayout fl_screencast_search, fl_screencast_search_land; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// if (!UIUtils.isLogined()) +// { +// Intent intent = new Intent(); +// intent.setClass(this, LoginNewActivity.class); +// startActivity(intent); +// finish(); +// return; +// } + getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(head).init(); + if(CommonUtil.BigModule()) + { + setContentView(R.layout.polyv_activity_videodetailplayer_big); + } + else + { + setContentView(R.layout.polyv_activity_videodetailplayer); + } + mActivity = this; + PolyvScreenUtils.generateHeight16_9(this); + videoUuid = getIntent().getStringExtra("uuid"); +// if(StringUtil.isEmpty(videoUuid)&&getIntent().getData()!=null) +// { +// videoUuid=getIntent().getData().getQueryParameter("uuid"); +// } + need_inside_share=getIntent().getStringExtra("need_inside_share"); + ispatientvideo=getIntent().getBooleanExtra("ispatientvideo",false); + findIdAndNew();//初始化界面 + initView();//视频播放初始化 + initScreencast(); + boolean mustplay = getIntent().getBooleanExtra("mustplay",false);//视频的uuid + if (mustplay){ + String vid = getIntent().getStringExtra("value");//视频的uuid + PolyvScreenUtils.generateHeight16_9(this); + int playModeCode = getIntent().getIntExtra("playMode",PlayMode.portrait.getCode()); + PlayMode playMode = PlayMode.getPlayMode(playModeCode); + if (playMode == null) + playMode = PlayMode.portrait; + bitrate = getIntent().getIntExtra("bitrate", PolyvBitRate.ziDong.getNum()); + boolean startNow = getIntent().getBooleanExtra("startNow", false); + isMustFromLocal = getIntent().getBooleanExtra("isMustFromLocal", false); + + switch (playMode) { + case landScape: + mediaController.changeToLandscape(); + break; + case portrait: + mediaController.changeToPortrait(); + break; + } + if (!StringUtil.isEmpty(vid)){ + play(vid, bitrate, startNow, isMustFromLocal); + } + top_back.setOnClickListener(this); + top_colloct.setVisibility(View.GONE); + top_right.setVisibility(View.GONE); + mLl_video_below.setVisibility(View.GONE); + }else { + boolean isConnected = isConnected(VideoDetailPolyvPlayerActivity.this); + if (isConnected){//联网正常执行 + initOnClick(); + videoDetail(); + localBroadcastManager = LocalBroadcastManager.getInstance(this); + intentFilter = new IntentFilter(); + intentFilter.addAction("LOADEND"); + localReceiver = new LocalReceiver(); + //注册本地接收器 + localBroadcastManager.registerReceiver(localReceiver,intentFilter); + }else{//没联网 + ToastUtil.showMessage("无网络,请检查网络连接!"); + } + } + AddReadNum(); + + } + + @Override + public void onConfigurationChanged(@NonNull Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if(newConfig.orientation==Configuration.ORIENTATION_LANDSCAPE) + { + + if(mediaController!=null) + { + + if(mediaController.iv_land.getVisibility()==View.VISIBLE) + { + mediaController.changeToLandscape(); + } + + } + } + else + { + if(mediaController!=null) + { + + if(mediaController.iv_port.getVisibility()==View.VISIBLE) + { + mediaController.changeToPortrait(); + + + } + + + } + } + + } + + private class LocalReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + String vid1 = intent.getStringExtra("vid"); + if (!StringUtil.isEmpty(vid)&&vid.equals(vid1)) { + tv_exchange.setText("查看缓存"); + Drawable img_off; + Resources res = getResources(); + img_off = res.getDrawable(R.drawable.video_down_doctor); + //调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示 + img_off.setBounds(0, 0, img_off.getMinimumWidth(), img_off.getMinimumHeight()); + tv_huancun.setCompoundDrawables(null, null, img_off, null); //设置you图标 + tv_jifen.setVisibility(View.GONE); + ll_dazhe.setVisibility(View.GONE); + } + } + } + //使用福利操作 + private void useWelfareNum() { + Map map = new HashMap<>(); + map.put("type","1"); + map.put("other_uuid",videoUuid); + sendJsonPostParamNoResultMD5(Url.useWelfareNum,map,USEWELFARENUM); + } + //查询福利剩余次数 + //参数type (1视频2课件3精品4万方5U盘) + private void getWelfareNum() { + Map map = new HashMap<>(); + map.put("type","1"); + sendJsonPostParamNoResultMD5(Url.getWelfareNum,map,GETWELFARENUM); + } + /**视频详情*/ + private void videoDetail() { + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("video_uuid",videoUuid); + sendJsonPostParamNoResultMD5(Url.videoDetail,map,VIDEODETAIL); + } + /**查询是否缓存过该视频*/ + private void isVideoDownloadRecord() { + Map map = new HashMap<>(); + map.put("video_uuid",videoUuid); + sendJsonPostParamNoResultMD5(Url.isVideoDownloadRecord,map,ISVIDEODOWNLOADRECORD); + } + /**支付视频缓存积分*/ + private void payVideoDownload() { + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("video_uuid",videoUuid); + sendJsonPostParamNoResultMD5(Url.payVideoDownload,map,PAYVIDEODOWNLOAD); + } + public void sendJsonPostParamNoResultMD5(final String postUrl, final Map param,final int callType) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)||"106".equals(optString)||"1".equals(optString)) { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + mHandler.sendMessage(msg); + }else { + mHandler.sendEmptyMessage(0); + } + }else { + mHandler.sendEmptyMessage(0); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + mHandler.sendEmptyMessage(404); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + } + }); + + } + + /**添加视频浏览记录*/ + private void addVideoWatchRecord() { + Map map = new HashMap<>(); + map.put("video_uuid",videoUuid); + sendJsonPostParamNoResultMD5(Url.addVideoWatchRecord,map,ADDVIDEOWATCHRECORD); + } + + + + // 评论列表 + public void getCommentList() { + Map map = new HashMap<>(); + map.put("uuid", videoUuid); +// map.put("page", page + ""); + sendJsonPostParamNoResultMD5(Url.getCommentList,map,301); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("uuid", videoUuid); +// params.addBodyParameter("page", page + ""); +// HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getCommentList, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// prossData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// LogUtil.i("数据请求失败了: " + arg1); +// } +// }); + } + /** + * 初始化评论和回复列表 + */ + private void initExpandableListView(final List commentList){ + expandableListView.setGroupIndicator(null); + //默认展开所有回复 + adapterex = new CommentExpandAdapter(this, commentList); + expandableListView.setAdapter(adapterex); + + for(int i = 0; i mList = new ArrayList<>();// 评论数据的集合 + public void prossData(String result) { + mList.clear(); + JSONObject jo= null; + try { + jo = new JSONObject(result); + JSONArray jsonArray = jo.getJSONArray("data"); + if(jsonArray==null||jsonArray.length()<1) + { + } + else + { + for(int j=0;j0) + { + List childList=new ArrayList<>(); + for(int i=0;i datas = new ArrayList(); + +// public void prossData(String result) { +// +// CommentBean data = GsonTools.fromGsonToBean(result, CommentBean.class); +// if (page == 1) { +// datas.clear(); +// } +// if (data.data != null && data.data.list.size() > 0) { +// datas.addAll(data.data.list); +// Iterator it=datas.iterator(); +// while (it.hasNext()) { +// CommentBean.CommentData bean1=it.next(); +// if("0".equals(bean1.getExamine_status())) +// { +// if(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "").equals(bean1.getExpert_uuid())){ +// continue; +// } +// else +// { +// it.remove(); +// } +// } +// } +// if (mAdapter == null) { +// mAdapter = new VideoCommentPolyVplayerAdapter(mActivity, expertUuid,datas); +// mAdapter.getDatas(datas); +// mLv_video_pinglun.setAdapter(mAdapter); +// +// } else { +// mAdapter.getDatas(datas); +// mAdapter.notifyDataSetChanged(); +// } +// long totalPage = (data.data.total / 10) + 1; +// if (totalPage <= 1 || totalPage <= page) { +// if (page != 1) { +// ToastUtil.showMessage("没有更多数据了"); +// onLoaded(); +// } +// mLv_video_pinglun.setMode(PullToRefreshBase.Mode.PULL_FROM_START); +// +// } else { +// mLv_video_pinglun.setMode(PullToRefreshBase.Mode.BOTH); +// } +// } +// setLastUpdateTime(); +// onLoaded(); +// } + public void prossData1(String result) { +// LogUtil.i("评论 result = "+result); +// OldCommentBean data = GsonTools.fromGsonToBean(result, OldCommentBean.class); +// if (page == 1) { +// datas.clear(); +// } +// if (data.data != null && data.data.size() > 0) { +// datas.addAll(data.data); +// if (mAdapter == null) { +// mAdapter = new VideoCommentPolyVplayerAdapter(mActivity, expertUuid,datas); +// mAdapter.getDatas(datas); +// mLv_video_pinglun.setAdapter(mAdapter); +// +// } else { +// mAdapter.getDatas(datas); +// mAdapter.notifyDataSetChanged(); +// } +// long totalPage = (data.total / 10) + 1; +// if (totalPage <= 1 || totalPage <= page) { +// if (page != 1) { +// ToastUtil.showMessage("没有更多数据了"); +// onLoaded(); +// } +// mLv_video_pinglun.setMode(PullToRefreshBase.Mode.PULL_FROM_START); +// +// } else { +// mLv_video_pinglun.setMode(PullToRefreshBase.Mode.BOTH); +// } +// } +// setLastUpdateTime(); +// onLoaded(); + } + /** + * 设置刷新时间 + */ +// private void setLastUpdateTime() { +// String text = CommonUtil.getStringDate(); +// mLv_video_pinglun.getLoadingLayoutProxy().setLastUpdatedLabel(text); +// } + + /** + * 数据加载完成时,取消加载动画 + */ +// private void onLoaded() { +// mLv_video_pinglun.onRefreshComplete(); +// } + + // 删除评论 + int deletePosition = -1; + + public void getDeleteComment(String uid) { + showProgressDialog("加载中"); +// deletePosition = position; + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("uuid",uid); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getDeleteComment, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + getCommentList(); +// prossDataDelete(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + closeProgressDialog(); + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + public void prossDataDelete(String result) { + BaseBean bean = GsonTools.fromGsonToBean(result, BaseBean.class); + if (StringUtil.isOneToCode(bean.code)) { + ToastUtil.showToast(bean.message); + return; + } else { + if (deletePosition > -1) { + datas.remove(datas.get(deletePosition)); + mAdapter.getDatas(datas); + mAdapter.notifyDataSetChanged(); + } + + } + } + + // 添加评论 + private void getAddComment() { + page = 1; + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("article_uuid", videoUuid); + map.put("type", "8"); + map.put("page", "1"); + map.put("comment", mEt_add.getText().toString().replaceAll(" +","")); + sendJsonPostParamNoResultMD5(Url.addCommentV2,map,302); + needreportSome("comment","",""); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("article_uuid", videoUuid); +// params.addBodyParameter("user_uuid", expertUuid); +// params.addBodyParameter("type", "8"); +// params.addBodyParameter("page", "1"); +// params.addBodyParameter("comment", mEt_add.getText().toString().trim()); +// HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getAddComment, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// mEt_add.setText(""); +// prossData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// LogUtil.i("数据请求失败了: " + arg1); +// } +// }); + } + + // 回复评论 + private void getAddCommentReply(String content) { + page = 1; + showProgressDialog("加载中"); + Map map = new HashMap<>(); + map.put("article_uuid", videoUuid); + map.put("type", "8"); + map.put("page", "1"); + map.put("comment", content.replaceAll(" +","")); + sendJsonPostParamNoResultMD5(Url.getAddComment,map,302); + needreportSome("comment","",""); +// RequestParams params = new RequestParams();// 封装参数 +// params.addBodyParameter("article_uuid", videoUuid); +// params.addBodyParameter("user_uuid", expertUuid); +// params.addBodyParameter("type", "8"); +// params.addBodyParameter("page", "1"); +// params.addBodyParameter("comment", content); +// HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getAddCommentReply, params, +// new RequestCallBack() { +// @Override +// public void onSuccess(ResponseInfo info) { +// closeProgressDialog(); +// mEt_add.setText(""); +// prossData(info.result); +// } +// +// @Override +// public void onFailure(HttpException arg0, String arg1) { +// closeProgressDialog(); +// LogUtil.i("数据请求失败了: " + arg1); +// } +// }); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == 69 + && resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + return; + } + mRecipients = data.getStringExtra("uuid"); + if (pd==null){ + pd = new CustomProgressDialog(VideoDetailPolyvPlayerActivity.this, "请稍候"); + } + pd.show(); + new ParseHtmlTask(UIUtils.getContext()).execute(); + return; + } + if (requestCode!=101&&resultCode==1){ + finish(); + } + if (resultCode == GET_HF_COMMENT_RESULT) { + String content = data.getStringExtra("content"); +// mEt_add.setText(content); + getAddCommentReply(content); + + } + if (requestCode==101){ + if (downloadInfo!=null&&downloadSQLiteHelper.isAdd(downloadInfo)){ +// LinkedList polyvDownloadInfos = downloadSQLiteHelper.getloadInfo(vid); +// PolyvDownloadInfo info = polyvDownloadInfos.get(0); +// long percent = info.getPercent(); +// long total = info.getTotal(); +//// if (total==percent){ +// tv_loading.setVisibility(View.GONE); +// iv_video_Long.setImageResource(R.drawable.video_long); +// String duration = downloadInfo.getDuration(); +// int i = duration.length() - 2; +//// tv_huancun.setText("已缓存"); +// String substring = duration.substring(0, i); +// tv_video_long.setText(""+getTime(Integer.parseInt(substring))); +// tv_video_long.setEnabled(false); +// iv_video_Long.setEnabled(false); + + }else { + tv_exchange.setText("点击下载"); + } + } + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + private void initIntent() { + int playModeCode = getIntent().getIntExtra("playMode", PolyvPlayerActivity.PlayMode.portrait.getCode()); + PolyvPlayerActivity.PlayMode playMode = PolyvPlayerActivity.PlayMode.getPlayMode(playModeCode); + if (playMode == null) + playMode = PolyvPlayerActivity.PlayMode.portrait; + + bitrate = getIntent().getIntExtra("bitrate", PolyvBitRate.ziDong.getNum()); + boolean startNow = getIntent().getBooleanExtra("startNow", false); + isMustFromLocal = getIntent().getBooleanExtra("isMustFromLocal", false); + uuid = getIntent().getStringExtra("uuid"); + + switch (playMode) { + case landScape: + mediaController.changeToLandscape(); + break; + case portrait: + mediaController.changeToPortrait(); + break; + } + if (!StringUtil.isEmpty(vid)){ + play(vid, bitrate, startNow, isMustFromLocal); + } + expertUuid = SharePrefUtil.getString(VideoDetailPolyvPlayerActivity.this, Constant.uuid, ""); + + } + public boolean isMainThread() { + return Looper.getMainLooper() == Looper.myLooper(); + } + public void downVideo(){ + new LoadVideoInfoTask(new ILoadVideoInfoListener() { + + @Override + public void onloaded(final PolyvVideoVO v) { + if (v == null||PolyvBitRate.getBitRateNameArray(v.getDfNum())==null) { + ToastUtil.showMessage("获取下载信息失败,请重试"); + return; + } + + // 码率数 + String[] items = PolyvBitRate.getBitRateNameArray(v.getDfNum()); + bitrate = items.length; + + downloadInfo = new PolyvDownloadInfo(vid, v.getDuration(), v.getFileSizeMatchVideoType(items.length), items.length, title,imgpath,public_name,videoUuid); + Log.i("videoAdapter", downloadInfo.toString()); + if (downloadSQLiteHelper != null && !downloadSQLiteHelper.isAdd(downloadInfo)) { + downloadSQLiteHelper.insert(downloadInfo); + PolyvDownloader polyvDownloader = PolyvDownloaderManager.getPolyvDownloader(vid, items.length); + polyvDownloader.setPolyvDownloadProressListener(new MyDownloadListener(VideoDetailPolyvPlayerActivity.this, downloadInfo,tv_size,tv_loading,tv_video_long,iv_video_Long,mHandler)); + polyvDownloader.start(VideoDetailPolyvPlayerActivity.this); + tv_exchange.setText("视频缓存中"); + tv_jifen.setVisibility(View.GONE); + ToastUtil.showMessage("正在下载"); + } else { + ((Activity) VideoDetailPolyvPlayerActivity.this).runOnUiThread(new Runnable() { + + @Override + public void run() { + LinkedList polyvDownloadInfos = downloadSQLiteHelper.getloadInfo(vid); + PolyvDownloadInfo info = polyvDownloadInfos.get(0); + long percent = info.getPercent(); + long total = info.getTotal(); + if (total==percent){ + tv_exchange.setText("查看缓存"); + }else { + ToastUtil.showMessage("视频已在缓存列表中"); + tv_exchange.setText("视频缓存中"); + } +// tv_loading.setVisibility(View.GONE); +// iv_video_Long.setImageResource(R.drawable.video_long); +// String duration = downloadInfo.getDuration(); +// int i = duration.length() - 2; +// String substring = duration.substring(0, i); +// tv_video_long.setText(""+getTime(Integer.parseInt(substring))); +// tv_video_long.setEnabled(false); +// iv_video_Long.setEnabled(false); + + } + }); + + } +// String duration = downloadInfo.getDuration(); +// int i = duration.length() - 2; +// String substring = duration.substring(0, i); +// tv_video_long.setText(""+getTime(Integer.parseInt(substring))); +// tv_video_long.setEnabled(false); +// iv_video_Long.setEnabled(false); +// +// tab_rbn_jianjie.setChecked(false); +// tab_rbn_pinglun.setChecked(false); +// mTv_jinajie.setVisibility(View.GONE); +// mLl_video_pinglun.setVisibility(View.GONE); +// mLv_video_pinglun.setVisibility(View.GONE); +// mLine_jianjie.setVisibility(View.INVISIBLE); +// mLine_pinglun.setVisibility(View.INVISIBLE); +// rl_video_download.setVisibility(View.VISIBLE); +// tv_huancun.setTextColor(getResources().getColor(R.color.doctor_theme)); +// Drawable img_off; +// Resources res = getResources(); +// img_off = res.getDrawable(R.drawable.video_down_doctor); +// //调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示 +// img_off.setBounds(0, 0, img_off.getMinimumWidth(), img_off.getMinimumHeight()); +// tv_huancun.setCompoundDrawables(null, null, img_off, null); //设置you图标 +// +// tv_loading.setVisibility(View.GONE); +// tv_size.setText(FileUtils.formatFileSize( downloadInfo.getFilesize())); + + } + }).execute(vid); + } + + /**可取消,在视频详情接口中有*/ + private void AddReadNum() { + // 提取专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("news_article_uuid", videoUuid); + params.addBodyParameter("type", String.valueOf(4)); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getRead, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) + { +// processData(info.result); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { +// LogUtil.i("数据请求失败了: " + arg1); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + + } + }); + + } + public void processData(String result) { + String code = null; + String message = null; + // "isAgree": 0, + // "code": "1", + // "isCollection": 0, + // String isAgree=null; + String isCollection = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + isCollection = jsonObject.getString("isCollection"); + note = jsonObject.getString("note"); + if (isCollection.equals("1")) { + isCollt = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + isCollt = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } + mTv_jinajie.setText(note); + } catch (JSONException e) { + e.printStackTrace(); + } + } + CustomProgressDialog dialog; + public void showProgressDialog(String content) { + + if (dialog == null && mActivity != null) { + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog( + mActivity, content); + } else { + dialog.setContent(content); + } + dialog.show(); + } + /** + * + * closeProgressDialog 关闭加载框 void + */ + public void closeProgressDialog() { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } + private void initOnClick() { + top_back.setOnClickListener(this); + tv_exchange1.setOnClickListener(this); + top_colloct.setOnClickListener(this); + top_right.setOnClickListener(this); + if(CommonUtil.BigModule()) + { + + } + else + { + mEt_add.setOnClickListener(this); + } + + mBt_add.setOnClickListener(this); + tv_delete.setOnClickListener(this); + tab_rbn_down.setOnClickListener(this); + tv_exchange.setOnClickListener(this); + rl_huancun.setOnClickListener(this); + mRg_video.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + // TODO Auto-generated method stub + switch (checkedId) { + case R.id.tab_rbn_jianjie: + mTv_jinajie.setVisibility(View.VISIBLE); + mLl_video_pinglun.setVisibility(View.GONE); +// mLv_video_pinglun.setVisibility(View.GONE); + expandableListView.setVisibility(View.GONE); + mLine_jianjie.setVisibility(View.VISIBLE); + mLine_pinglun.setVisibility(View.INVISIBLE); + rl_video_download.setVisibility(View.GONE); + rl_huancun.setVisibility(View.VISIBLE); + tv_huancun.setTextColor(getResources().getColor(R.color.tab_text_nor)); + +// Drawable img_off; +// Resources res = getResources(); +// img_off = res.getDrawable(R.drawable.video_down); +// //调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示 +// img_off.setBounds(0, 0, img_off.getMinimumWidth(), img_off.getMinimumHeight()); +// tv_huancun.setCompoundDrawables(null, null, img_off, null); //设置you图标 + break; + case R.id.tab_rbn_pinglun: + mTv_jinajie.setVisibility(View.GONE); + mLl_video_pinglun.setVisibility(View.VISIBLE); +// mLv_video_pinglun.setVisibility(View.VISIBLE); + expandableListView.setVisibility(View.VISIBLE); + mLine_jianjie.setVisibility(View.INVISIBLE); + mLine_pinglun.setVisibility(View.VISIBLE); + rl_video_download.setVisibility(View.GONE); + tv_huancun.setTextColor(getResources().getColor(R.color.tab_text_nor)); + rl_huancun.setVisibility(View.GONE); +// Drawable img_off1; +// Resources res1 = getResources(); +// img_off1 = res1.getDrawable(R.drawable.video_down); +// //调用setCompoundDrawables时,必须调用Drawable.setBounds()方法,否则图片不显示 +// img_off1.setBounds(0, 0, img_off1.getMinimumWidth(), img_off1.getMinimumHeight()); +// tv_huancun.setCompoundDrawables(null, null, img_off1, null); //设置you图标 + + break; + + default: + break; + } + } + }); + } + private void findIdAndNew() { + videoErrorLayout = (LinearLayout) findViewById(R.id.video_error_layout); + videoErrorContent = (TextView) findViewById(R.id.video_error_content); + videoErrorRetry = (TextView) findViewById(R.id.video_error_retry); + + viewLayout = (RelativeLayout) findViewById(R.id.view_layout); + videoView = (PolyvVideoView) findViewById(R.id.polyv_video_view); + marqueeView = (PolyvMarqueeView) findViewById(R.id.polyv_marquee_view); + mediaController = (PolyvPlayerMediaController) findViewById(R.id.polyv_player_media_controller); + srtTextView = (TextView) findViewById(R.id.srt); + topSrtTextView = (TextView) findViewById(R.id.top_srt); + auxiliaryVideoView = (PolyvAuxiliaryVideoView) findViewById(R.id.polyv_auxiliary_video_view); + auxiliaryLoadingProgress = (ProgressBar) findViewById(R.id.auxiliary_loading_progress); + auxiliaryView = (PolyvPlayerAuxiliaryView) findViewById(R.id.polyv_player_auxiliary_view); + advertCountDown = (TextView) findViewById(R.id.count_down); + firstStartView = (PolyvPlayerPreviewView) findViewById(R.id.polyv_player_first_start_view); + lightView = (PolyvPlayerLightView) findViewById(R.id.polyv_player_light_view); + volumeView = (PolyvPlayerVolumeView) findViewById(R.id.polyv_player_volume_view); + progressView = (PolyvPlayerProgressView) findViewById(R.id.polyv_player_progress_view); + loadingProgress = (ProgressBar) findViewById(R.id.loading_progress); + coverView = (PolyvPlayerAudioCoverView) findViewById(R.id.polyv_cover_view); + audioSourceCoverView = (PolyvPlayerAudioCoverView) findViewById(R.id.polyv_source_audio_cover); + tv_exchange1 = (TextView) findViewById(R.id.tv_exchange1); + tv_exchange = (TextView) findViewById(R.id.tv_exchange); + top_back = (ImageView) findViewById(R.id.top_back); + head = findViewById(R.id.head); + + iv_screencast_search = (ImageView) mediaController.findViewById(R.id.iv_screencast_search); + iv_screencast_search_land = (ImageView) mediaController.findViewById(R.id.iv_screencast_search_land); + fl_screencast_search = (PolyvScreencastSearchLayout) findViewById(R.id.fl_screencast_search); + fl_screencast_search_land = (PolyvScreencastSearchLayout) findViewById(R.id.fl_screencast_search_land); + fl_screencast_status = (PolyvScreencastStatusLayout) findViewById(R.id.fl_screencast_status); + iv_screencast_search.setVisibility(View.VISIBLE); + iv_screencast_search_land.setVisibility(View.VISIBLE); + mediaController.initConfig(head, viewLayout, tv_exchange1, is_white, is_paid); + mediaController.setAudioCoverView(coverView); + + auxiliaryVideoView.setPlayerBufferingIndicator(auxiliaryLoadingProgress); + videoView.setMediaController(mediaController); + videoView.setPlayerBufferingIndicator(loadingProgress); + + top_colloct = (ImageButton) findViewById(R.id.top_right_search); + top_right = (ImageButton) this.findViewById(R.id.top_right); + mTitle = (TextView) this.findViewById(R.id.top_title); + mRg_video = (RadioGroup) this.findViewById(R.id.rg_video_detil); + tab_rbn_jianjie = (RadioButton) this.findViewById(R.id.tab_rbn_jianjie); + tab_rbn_pinglun = (RadioButton) this.findViewById(R.id.tab_rbn_pinglun); + mLl_video_below = (LinearLayout) this.findViewById(R.id.ll_video_below); + loading_view = this.findViewById(R.id.loading_view); + mTv_jinajie = (TextView) this.findViewById(R.id.tv_video_jianjie); + + mTv_jinajie.setMovementMethod(ScrollingMovementMethod.getInstance()); + mLine_jianjie = this.findViewById(R.id.v_line_jianjie); + mLine_pinglun = this.findViewById(R.id.v_line_pinglun); + expandableListView = findViewById(R.id.lv_video_pinglun); +// mLv_video_pinglun = (PullToRefreshListView) this +// .findViewById(R.id.lv_video_pinglun); + mLl_video_pinglun = (LinearLayout) this + .findViewById(R.id.ll_video_pinglun); + rl_video_download = findViewById(R.id.rl_video_download); + mEt_add = (EditText) this.findViewById(R.id.et_add_pinglun); + mBt_add = (Button) this.findViewById(R.id.bt_add_pinglun); + tv_loading = (TextView) this.findViewById(R.id.tv_loading); + iv_video_Long = (ImageView) this.findViewById(R.id.iv_video_Long); + tv_size = (TextView) this.findViewById(R.id.tv_size); + tv_delete = (TextView) this.findViewById(R.id.tv_delete); + tv_video_long = (TextView) this.findViewById(R.id.tv_video_long); + tv_title = (TextView) this.findViewById(R.id.tv_titlename); + tv_author = (TextView) this.findViewById(R.id.tv_author); + tab_rbn_down = (LinearLayout) this.findViewById(R.id.tab_rbn_down); + tv_huancun = (TextView) this.findViewById(R.id.tv_huancun); + tv_jifen = (TextView) this.findViewById(R.id.tv_jifen); + rl_huancun = (RelativeLayout) this.findViewById(R.id.rl_huancun); + ll_dazhe = (LinearLayout) this.findViewById(R.id.ll_dazhe); + tv_jifen13 = (TextView) this.findViewById(R.id.tv_jifen13); + if(!StringUtil.isEmpty(need_inside_share)&&need_inside_share.equals("yes")) + { + bt_inside_share=findViewById(R.id.bt_inside_share); + bt_inside_share.setVisibility(View.GONE); + bt_inside_share.setOnClickListener(this); + } + + powerManager = (PowerManager)this.getSystemService(this.POWER_SERVICE); + wakeLock = this.powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "My Lock"); + + // 设置只有下拉刷新模式 +// mLv_video_pinglun.setMode(PullToRefreshBase.Mode.BOTH); +// // 得到实际的ListView 设置点击 +// mLv_video_pinglun.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { +// +// @Override +// public void onPullDownToRefresh( +// PullToRefreshBase refreshView) { +// page = 1; +// getCommentList(); +// +// } +// +// @Override +// public void onPullUpToRefresh( +// PullToRefreshBase refreshView) { +// page++; +// getCommentList(); +// } +// }); + + mTitle.setText("视频详情"); + if(CommonUtil.BigModule()) + { + mTitle.setTextSize((float) 22.5); + } +// mLv_video_pinglun.setVisibility(View.GONE); + expandableListView.setVisibility(View.GONE); + downloadSQLiteHelper = PolyvDownloadSQLiteHelper.getInstance(VideoDetailPolyvPlayerActivity.this); + + } + private void hideSoftInputFromWindow() + { + View view = getWindow().peekDecorView(); + if (view != null) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0); + } + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.bt_inside_share: + delVisit(); + break; + case R.id.top_back: + + Intent intent = new Intent(); + intent.putExtra("uuid", videoUuid); + intent.putExtra("isCollection", isCollt); + mActivity.setResult( + VideoActivity.GET_READ_NUM_RESULT, intent); + hideSoftInputFromWindow(); + this.finish(); + break; + case R.id.top_right: + if (isCollt) { + showProgressDialog("正在取消收藏"); + DisCollection(); + } else { + showProgressDialog("收藏"); + AddCollection(); + + needreportSome("collect","",""); + + } + break; + case R.id.top_right_search: + if(!StringUtil.isEmpty(need_inside_share)&&need_inside_share.equals("yes")) + { + showSharePopupWindownew(v); + } + else + { + share(); + } + needreportSome("share","",""); + + break; + case R.id.bt_add_pinglun: + if (StringUtil.isEmpty(mEt_add.getText().toString().trim())) { + ToastUtil.showMessage("输入内容"); + return; + } + getAddComment(); + hideSoftInputFromWindow(); + break; + case R.id.et_add_pinglun: + if(CommonUtil.BigModule()) + { + + } + else + { + showPopupWindow(v); + } + + break; + case R.id.tv_delete://删除 + + if ( downloadInfo!=null&&!downloadSQLiteHelper.isAdd(downloadInfo)){ + return; + } + buildAlert = ECAlertDialog.buildAlert(VideoDetailPolyvPlayerActivity.this,"您确定删除此视频吗?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //移除任务 + if (!StringUtil.isEmpty(vid)&&downloadInfo!=null&&downloadSQLiteHelper!=null){ + PolyvDownloader downloader = PolyvDownloaderManager.clearPolyvDownload(vid, downloadInfo.getBitrate()); + //删除文件 + downloader.deleteVideo(); + //移除数据库的下载信息 + downloadSQLiteHelper.delete(downloadInfo); + + ToastUtil.showMessage("删除成功"); + + tv_huancun.setText("缓存"); + tv_loading.setVisibility(View.GONE); + iv_video_Long.setImageResource(R.drawable.video_long); + String duration = downloadInfo.getDuration(); + rl_video_download.setVisibility(View.GONE); + int i = duration.length() - 2; + String substring = duration.substring(0, i); + tv_video_long.setText(""+getTime(Integer.parseInt(substring))); + tv_video_long.setEnabled(false); + iv_video_Long.setEnabled(false); + }else { + ToastUtil.showMessage("删除失败,可在离线缓存中编辑删除"); + } + buildAlert.dismiss(); + } + }); + buildAlert.setTitle("删除提示"); + buildAlert.show(); + + break; + case R.id.tv_video_long: + case R.id.iv_video_Long://继续/停止 + final PolyvDownloader downloader1 = PolyvDownloaderManager.getPolyvDownloader(vid, bitrate); + if ("停止".equals(tv_video_long.getText().toString())){ + downloader1.stop(); + tv_video_long.setText("继续"); + iv_video_Long.setImageResource(R.drawable.down_true); + }else{ + downloader1.start(VideoDetailPolyvPlayerActivity.this); + tv_video_long.setText("停止"); + iv_video_Long.setImageResource(R.drawable.down_false); + } + + break; + case R.id.tv_exchange1: + startActivityForResult(new Intent(VideoDetailPolyvPlayerActivity.this, PolyvDownloadActivity.class),101); + break; + case R.id.rl_huancun: + case R.id.tv_exchange: + String netWorkTypeName = getNetWorkTypeName(VideoDetailPolyvPlayerActivity.this); + if ("NETWORK_WIFI".equals(netWorkTypeName)){ + if ("点击下载".equals(tv_exchange.getText().toString())){ + buildAlert = ECAlertDialog.buildAlert(VideoDetailPolyvPlayerActivity.this,"当前为Wifi网络,确定下载?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + videoDown(); + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.show(); + }else if("视频缓存中".equals(tv_exchange.getText().toString())){ + Intent intent1 = new Intent(VideoDetailPolyvPlayerActivity.this, PolyvDownloadActivity.class); + intent1.putExtra("isStarting",true); + startActivityForResult(intent1,101); + }else { + startActivityForResult(new Intent(VideoDetailPolyvPlayerActivity.this, PolyvDownloadActivity.class),101); + } + }else if ("NETWORK_NO".equals(netWorkTypeName)){ + ToastUtil.showMessage("无网络,请查看联网情况"); + }else { + if ("点击下载".equals(tv_exchange.getText().toString())){ + buildAlert = ECAlertDialog.buildAlert(VideoDetailPolyvPlayerActivity.this,"当前为移动网络,确定下载?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + videoDown(); + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.show(); + } else if("视频缓存中".equals(tv_exchange.getText().toString())){ + Intent intent1 = new Intent(VideoDetailPolyvPlayerActivity.this, PolyvDownloadActivity.class); + intent1.putExtra("isStarting",true); + startActivityForResult(intent1,101); + }else{ + startActivityForResult(new Intent(VideoDetailPolyvPlayerActivity.this, PolyvDownloadActivity.class),101); + } + } + break; + } + } + + private void videoDown() { + if (result==0){//未支付视频 + if (welfareNum>0){ + useWelfareNum(); + needreportPay("viorder_deo_download",0+"","积分",1+"",title,videoTeachDetailBean.getVideo().getTags()); + ToastUtil.showMessage("使用免费次数下载"); + }else { + buildAlert = ECAlertDialog.buildAlert(VideoDetailPolyvPlayerActivity.this,"该视频需"+point+"积分兑换,若删除,可以再次免费缓存", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + + payVideoDownload();//支付视频缓存积分 + } + }); + buildAlert.setTitle("下载提示"); + buildAlert.show(); + } + + }else { + needreportPay("viorder_deo_download",0+"","积分",1+"",title,videoTeachDetailBean.getVideo().getTags()); + downVideo(); +// rl_video_download.setVisibility(View.VISIBLE); +// tab_rbn_jianjie.setChecked(false); +// tab_rbn_pinglun.setChecked(false); +// mTv_jinajie.setVisibility(View.GONE); +// mLl_video_pinglun.setVisibility(View.GONE); +// mLv_video_pinglun.setVisibility(View.GONE); +// mLine_jianjie.setVisibility(View.INVISIBLE); +// mLine_pinglun.setVisibility(View.INVISIBLE); +// rl_video_download.setVisibility(View.VISIBLE); +// tv_huancun.setTextColor(getResources().getColor(R.color.doctor_theme)); + + + } + } + + private void showSharePopupWindownew(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(this) + .inflate(R.layout.popu_share_video, null); + LinearLayout ll_huan = contentView.findViewById(R.id.ll_huan); + LinearLayout ll_weixin = contentView.findViewById(R.id.ll_weixin); + LinearLayout ll_weixincircle = contentView.findViewById(R.id.ll_weixincircle); + LinearLayout ll_sina = contentView.findViewById(R.id.ll_sina); + Button btn_quxiao = contentView.findViewById(R.id.btn_quxiao); + + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + btn_quxiao.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + } + }); + ll_huan.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + delVisit(); + } + }); + ll_weixin.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.WEIXIN); + popupWindow.dismiss(); + } + }); + ll_weixincircle.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.WEIXIN_CIRCLE); + popupWindow.dismiss(); + } + }); + ll_sina.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(SHARE_MEDIA.SINA); + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + + + return false; + } + + }); + + popupWindow.showAtLocation(view, 0, 0, 0); + + } + private void share(SHARE_MEDIA media) { + Constant.isShareGetPoint = true; + String shareTitle = title; + String shareUrl = null; +// if (url.startsWith("http://") || url.startsWith("https://")) { +// shareUrl = url; +// } else { +// shareUrl = Url.urlHtml + url; +// } + +// shareUrl = Url.urlHtml + url; + shareUrl = Url.videodetailURL + videoUuid+"&expertshare=videoshare"; + if(ispatientvideo) + { + shareUrl = Url.weurl +"video/patient_detial?uuid="+uuid; + } + String msgSinaContent = shareTitle + shareUrl; + String imageurl = Url.urlHtml + imgpath; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageurl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(note)) { + note = ""; + } + if (TextUtils.isEmpty(imageurl)) { + imageurl = ""; + } + + UMImage shareImg; + ShareUtils.shareUmeng(mActivity, shareTitle, note, msgSinaContent, + imageurl, shareUrl, bitmap,media); +// if(StringUtil.isEmpty(content)){ +// +// }else { +// +//// new ShareAction(VideoDetailPolyvPlayerActivity.this) +//// .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)//传入平台 +//// .withText("hello")//分享内容 +//// .setCallback(shareListener)//回调监听器 +//// .share(); +// +// //小程序 +// bitmap = ImageLoader.getInstance().loadImageSync("assets://share_video.jpg"); +// shareImg = new UMImage(VideoDetailPolyvPlayerActivity.this, bitmap); +// UMMin umMin = new UMMin(shareUrl); +// //兼容低版本的网页链接 +// umMin.setThumb(shareImg); +// // 小程序消息封面图片 +// umMin.setTitle(shareTitle); +// // 小程序消息title +// umMin.setDescription(note); +// +// // 小程序消息描述 +//// umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content); +// umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content+"¬eIN="+note+"&titleName="+shareTitle); +// //小程序页面路径 +// umMin.setUserName("gh_11f9423d9de3"); +// // 小程序原始id,在微信平台查询 +// new ShareAction(VideoDetailPolyvPlayerActivity.this) +// .withMedia(umMin) +// .setPlatform(SHARE_MEDIA.WEIXIN) +// .setCallback(shareListener)//回调监听器 +//// .setCallback(new UMengShareHelper(VideoDetailPolyvPlayerActivity.this).shareListener) +// .share(); +// } + + } + /** + * 调用分享功能 + * @param + */ + private void share() { + Constant.isShareGetPoint = true; + String shareTitle = title; + String shareUrl = null; +// if (url.startsWith("http://") || url.startsWith("https://")) { +// shareUrl = url; +// } else { +// shareUrl = Url.urlHtml + url; +// } + +// shareUrl = Url.urlHtml + url; + shareUrl = Url.videodetailURL + videoUuid+"&expertshare=videoshare"; + if(ispatientvideo) + { + shareUrl = Url.weurl +"video/patient_detial?uuid="+uuid; + } + String msgSinaContent = shareTitle + shareUrl; + String imageurl = Url.urlHtml + imgpath; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageurl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(note)) { + note = ""; + } + if (TextUtils.isEmpty(imageurl)) { + imageurl = ""; + } + + UMImage shareImg; + ShareUtils.shareUmeng(mActivity, shareTitle, note, msgSinaContent, + imageurl, shareUrl, bitmap); +// if(StringUtil.isEmpty(content)){ +// +// }else { +// +//// new ShareAction(VideoDetailPolyvPlayerActivity.this) +//// .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)//传入平台 +//// .withText("hello")//分享内容 +//// .setCallback(shareListener)//回调监听器 +//// .share(); +// +// //小程序 +// bitmap = ImageLoader.getInstance().loadImageSync("assets://share_video.jpg"); +// shareImg = new UMImage(VideoDetailPolyvPlayerActivity.this, bitmap); +// UMMin umMin = new UMMin(shareUrl); +// //兼容低版本的网页链接 +// umMin.setThumb(shareImg); +// // 小程序消息封面图片 +// umMin.setTitle(shareTitle); +// // 小程序消息title +// umMin.setDescription(note); +// +// // 小程序消息描述 +//// umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content); +// umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content+"¬eIN="+note+"&titleName="+shareTitle); +// //小程序页面路径 +// umMin.setUserName("gh_11f9423d9de3"); +// // 小程序原始id,在微信平台查询 +// new ShareAction(VideoDetailPolyvPlayerActivity.this) +// .withMedia(umMin) +// .setPlatform(SHARE_MEDIA.WEIXIN) +// .setCallback(shareListener)//回调监听器 +//// .setCallback(new UMengShareHelper(VideoDetailPolyvPlayerActivity.this).shareListener) +// .share(); +// } + + } + /** + * 调用分享功能 + * @param i + */ + private void share(int i) { + Constant.isShareGetPoint = true; + String shareTitle = title; + String shareUrl = null; +// if (url.startsWith("http://") || url.startsWith("https://")) { +// shareUrl = url; +// } else { +// shareUrl = Url.urlHtml + url; +// } + shareUrl = Url.videodetailURL + videoUuid+"&expertshare=videoshare"; + if(ispatientvideo) + { + shareUrl = Url.weurl +"video/patient_detial?uuid="+uuid; + } + if(shareUrl!=null&&shareUrl.contains("?")) + { + shareUrl=shareUrl+FROMEXPERT1; + } + else + { + shareUrl=shareUrl+FROMEXPERT; + } + String msgSinaContent = shareTitle + shareUrl; + String imageurl = Url.urlHtml + imgpath; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageurl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(note)) { + note = ""; + } + if (TextUtils.isEmpty(imageurl)) { + imageurl = ""; + } + UMImage shareImg; + if (i == 3){ + if (StringUtil.isEmpty(imageurl.replace(Url.urlHtml, ""))) { + shareImg = new UMImage(mActivity, + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + if (bitmap != null) { + shareImg = new UMImage(mActivity, bitmap); + } else { + shareImg = new UMImage(mActivity, imageurl); + } + + } + shareImg.compressStyle = UMImage.CompressStyle.SCALE; + //网页 + UMWeb web = new UMWeb(shareUrl); + web.setTitle(shareTitle);//标题 + web.setThumb(shareImg); //缩略图 + web.setDescription(note);//描述 + new ShareAction(mActivity) + .setPlatform(SHARE_MEDIA.SINA)//传入平台 + .withMedia(web) + .setCallback(shareListener)//回调监听器 + .share(); +// ShareUtils.shareUmeng(mActivity, shareTitle, note, msgSinaContent, +// imageurl, shareUrl, bitmap); + }else if (i == 2){ + if (StringUtil.isEmpty(imageurl.replace(Url.urlHtml, ""))) { + shareImg = new UMImage(mActivity, + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + if (bitmap != null) { + shareImg = new UMImage(mActivity, bitmap); + } else { + shareImg = new UMImage(mActivity, imageurl); + } + + } + shareImg.compressStyle = UMImage.CompressStyle.SCALE; + //网页 + UMWeb web = new UMWeb(shareUrl); + web.setTitle(shareTitle);//标题 + web.setThumb(shareImg); //缩略图 + web.setDescription(note);//描述 + new ShareAction(mActivity) + .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)//传入平台 + .withMedia(web) + .setCallback(shareListener)//回调监听器 + .share(); +// ShareUtils.shareUmeng(mActivity, shareTitle, note, msgSinaContent, +// imageurl, shareUrl, bitmap); + }else { + +// new ShareAction(VideoDetailPolyvPlayerActivity.this) +// .setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)//传入平台 +// .withText("hello")//分享内容 +// .setCallback(shareListener)//回调监听器 +// .share(); + + //小程序 + bitmap = ImageLoader.getInstance().loadImageSync("assets://share_video.jpg"); + shareImg = new UMImage(VideoDetailPolyvPlayerActivity.this, bitmap); + UMMin umMin = new UMMin(shareUrl); + //兼容低版本的网页链接 + umMin.setThumb(shareImg); + // 小程序消息封面图片 + umMin.setTitle(shareTitle); + // 小程序消息title + umMin.setDescription(note); + + // 小程序消息描述 +// umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content); + umMin.setPath("pages/gandanVideoDetailApp/gandanVideoDetailApp?contentID="+content+"¬eIN="+note+"&titleName="+shareTitle); + //小程序页面路径 + umMin.setUserName("gh_11f9423d9de3"); + // 小程序原始id,在微信平台查询 + new ShareAction(VideoDetailPolyvPlayerActivity.this) + .withMedia(umMin) + .setPlatform(SHARE_MEDIA.WEIXIN) + .setCallback(shareListener)//回调监听器 +// .setCallback(new UMengShareHelper(VideoDetailPolyvPlayerActivity.this).shareListener) + .share(); + } + + } + + private UMShareListener shareListener = new UMShareListener() { + /** + * @descrption 分享开始的回调 + * @param platform 平台类型 + */ + @Override + public void onStart(SHARE_MEDIA platform) { + switch (platform){ +// case WEIXIN: +// ToastUtil.showMessage("微信"); +// break; +// case WEIXIN_CIRCLE: +// +// ToastUtil.showMessage("微信朋友圈"); +// break; + + } + } + + /** + * @descrption 分享成功的回调 + * @param platform 平台类型 + */ + @Override + public void onResult(SHARE_MEDIA platform) { +// ToastUtil.showMessage("成功了"); + } + + /** + * @descrption 分享失败的回调 + * @param platform 平台类型 + * @param t 错误原因 + */ + @Override + public void onError(SHARE_MEDIA platform, Throwable t) { +// ToastUtil.showMessage("失败"+t.getMessage()); + } + + /** + * @descrption 分享取消的回调 + * @param platform 平台类型 + */ + @Override + public void onCancel(SHARE_MEDIA platform) { + ToastUtil.showMessage("取消了"); + + } + }; + + + private void AddCollection() { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", videoUuid); + params.addBodyParameter("title", title); + params.addBodyParameter("path", url); + params.addBodyParameter("readnum", readnum); + params.addBodyParameter("imgpath", imgpath); + params.addBodyParameter("public_name", public_name); + params.addBodyParameter("type", String.valueOf(5)); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + private void DisCollection() { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", videoUuid); + params.addBodyParameter("type", String.valueOf(5)); + HttpHelper.loadData(HttpRequest.HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + public void processDataColl(String result) { + String code = null; + String message = null; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + if (code.equals("1")) { + if (isCollt) { + isCollt = false; + top_right.setImageResource(R.drawable.nor_nes_no); + ToastUtil.showMessage("取消收藏成功"); + } else { + isCollt = true; + top_right.setImageResource(R.drawable.nor_news_yes); + ToastUtil.showMessage("收藏成功"); + } + + } else { + ToastUtil.showMessage(message); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + EditText mEt_adds; + TextView mTV_Sure, mTV_Cancel; + + private void showPopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(mActivity) + .inflate(R.layout.popu_add_comment, null); + // 设置按钮的点击事件 + mTV_Sure = (TextView) contentView.findViewById(R.id.bt_pop_sure); + mTV_Cancel = (TextView) contentView.findViewById(R.id.bt_pop_cancel); + mEt_adds = (EditText) contentView.findViewById(R.id.et_pop_add); + if (mEt_add != null && !TextUtils.isEmpty(mEt_add.getText())) { + mEt_adds.setText(mEt_add.getText().toString().trim()); + mEt_adds.setSelection(mEt_add.getText().toString().trim().length()); + } + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + mTV_Cancel.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(v.getWindowToken(), 0); + // TODO Auto-generated method stub + popupWindow.dismiss(); + + } + }); + mTV_Sure.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + InputMethodManager inputmanger = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + inputmanger.hideSoftInputFromWindow(v.getWindowToken(), 0); + // TODO Auto-generated method stub + if (mEt_add != null) { + mEt_add.setText(mEt_adds.getText().toString()); + } + popupWindow.dismiss(); + + } + }); + popupWindow.setTouchable(true); + popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + Log.i("mengdd", "onTouch : "); + + return false; + } + + }); + + popupWindow.showAtLocation(view, 0, 0, 0); + + } + + private void showSharePopupWindow(View view) { + + // 一个自定义的布局,作为显示的内容 + View contentView = LayoutInflater.from(mActivity) + .inflate(R.layout.popu_share_video, null); + + LinearLayout ll_weixin = contentView.findViewById(R.id.ll_weixin); + LinearLayout ll_weixincircle = contentView.findViewById(R.id.ll_weixincircle); + LinearLayout ll_sina = contentView.findViewById(R.id.ll_sina); + Button btn_quxiao = contentView.findViewById(R.id.btn_quxiao); + + // 设置按钮的点击事件 +// mTV_Sure = (TextView) contentView.findViewById(R.id.bt_pop_sure); +// mTV_Cancel = (TextView) contentView.findViewById(R.id.bt_pop_cancel); +// mEt_adds = (EditText) contentView.findViewById(R.id.et_pop_add); +// if (mEt_add != null && !TextUtils.isEmpty(mEt_add.getText())) { +// mEt_adds.setText(mEt_add.getText().toString().trim()); +// mEt_adds.setSelection(mEt_add.getText().length()); +// } + final PopupWindow popupWindow = new PopupWindow(contentView, + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true); + btn_quxiao.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + popupWindow.dismiss(); + } + }); + ll_weixin.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(1); + popupWindow.dismiss(); + } + }); + ll_weixincircle.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(2); + popupWindow.dismiss(); + } + }); + ll_sina.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + share(3); + popupWindow.dismiss(); + } + }); + popupWindow.setTouchable(true); + popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + popupWindow.setTouchInterceptor(new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + + Log.i("mengdd", "onTouch : "); + + return false; + } + + }); + + popupWindow.showAtLocation(view, 0, 0, 0); + + } + @Override + public void getVidlistener(String vid, String uuid) { + this.uuid = uuid; + play(vid, bitrate, true, isMustFromLocal); + } + + + + private static class MyDownloadListener implements IPolyvDownloaderProgressListener { + private long total; + private WeakReference contextWeakReference; + private PolyvDownloadInfo downloadInfo; + private TextView tv_size; + private TextView tv_loading; + private TextView tv_video_long; + private ImageView iv_video_Long; + private Handler mHandler; + + MyDownloadListener(Context context, PolyvDownloadInfo downloadInfo, TextView tv_size, TextView tv_loading, TextView tv_video_long, ImageView iv_video_Long, Handler mHandler) { + this.contextWeakReference = new WeakReference<>(context); + this.downloadInfo = downloadInfo; + this.tv_size = tv_size; + this.tv_loading = tv_loading; + this.tv_video_long = tv_video_long; + this.iv_video_Long = iv_video_Long; + this.mHandler = mHandler; + } + + @Override + public void onDownloadSuccess() { + if (total == 0) + total = 1; + ToastUtil.showMessage("下载完成"); + downloadSQLiteHelper.update(downloadInfo, total, total); + String duration = downloadInfo.getDuration(); + int i = duration.length() - 2; + String substring = duration.substring(0, i); + tv_video_long.setText(""+getTime(Integer.parseInt(substring))); + iv_video_Long.setImageResource(R.drawable.video_long); + tv_video_long.setEnabled(false); + iv_video_Long.setEnabled(false); + tv_loading.setVisibility(View.GONE); + mHandler.sendEmptyMessage(DOWNFINISH); + } + + @Override + public void onDownloadFail(@NonNull PolyvDownloaderErrorReason errorReason) { + String errorMsg = PolyvErrorMessageUtils.getDownloaderErrorMessage(errorReason.getType()); + errorMsg += "(error code " + errorReason.getType().getCode() + ")"; + Log.e(TAG, errorMsg); + if (contextWeakReference.get() != null) + ToastUtil.showMessage(errorMsg); + } + + @Override + public void onDownload(long current, long total) { + this.total = total; +// int progress = (int) (current * 100 / total); +// String s = tv_size.getText().toString(); +// String substring = s.substring(0, s.length() - 2); +// double v = Double.parseDouble(substring); +// double v1 = v * progress/100; +// DecimalFormat df = new DecimalFormat("0.00");//格式化,区小数后两位 +// final String format = df.format(v1); +// Message msg = Message.obtain(); +// msg.what = 2; +// msg.obj = format+"MB"+"/"; +// mHandler.sendMessage(msg); + + } + } + private static class LoadVideoInfoTask extends AsyncTask { + + private final ILoadVideoInfoListener l; + + LoadVideoInfoTask(ILoadVideoInfoListener l) { + this.l = l; + } + + @Override + protected PolyvVideoVO doInBackground(String... params) { + try { + return PolyvSDKUtil.loadVideoJSON2Video(params[0]); + } catch (Exception e) { + Log.e(TAG, PolyvSDKUtil.getExceptionFullMessage(e, -1)); + return null; + } + } + + @Override + protected void onPostExecute(PolyvVideoVO v) { + super.onPostExecute(v); + l.onloaded(v); + } + } + + private interface ILoadVideoInfoListener { + void onloaded(PolyvVideoVO v); + } + private void initView() { + videoView.setOpenAd(true); + videoView.setOpenTeaser(true); + videoView.setOpenQuestion(true); + videoView.setOpenSRT(true); + videoView.setOpenPreload(true, 2); + videoView.setOpenMarquee(true); + videoView.setAutoContinue(true); + videoView.setNeedGestureDetector(true); + videoView.setSeekType(PolyvSeekType.SEEKTYPE_NORMAL); + videoView.setLoadTimeoutSecond(25);//加载超时时间,单位:秒 + videoView.setBufferTimeoutSecond(15);//缓冲超时时间,单位:秒 + videoView.disableScreenCAP(this, false);//防录屏开关,true为开启,如果开启防录屏,投屏功能将不可用 + String realName = SharePrefUtil.getString(VideoDetailPolyvPlayerActivity.this, Constant.realName, "肝胆相照专家端app用户"); + PolyvViewerInfo polyvViewerInfo = new PolyvViewerInfo(); + polyvViewerInfo.setViewerId(SharePrefUtil.getString(VideoDetailPolyvPlayerActivity.this, Constant.POLVID, "123")); + polyvViewerInfo.setViewerName(realName); + polyvViewerInfo.setViewerExtraInfo1(SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, "")); + polyvViewerInfo.setViewerExtraInfo2(Constant.Report_userId); + PolyvSDKClient.getInstance().setViewerInfo(polyvViewerInfo); + videoView.setOnPreparedListener(new IPolyvOnPreparedListener2() { + @Override + public void onPrepared() { + if (videoView.getVideo() != null && videoView.getVideo().isMp3Source()) { + audioSourceCoverView.onlyShowCover(videoView); + } else { + audioSourceCoverView.hide(); + } + mediaController.preparedView(); + progressView.setViewMaxValue(videoView.getDuration()); + // 没开预加载在这里开始弹幕 + // danmuFragment.start(); + } + }); + + videoView.setOnPreloadPlayListener(new IPolyvOnPreloadPlayListener() { + @Override + public void onPlay() { + // 开启预加载在这里开始弹幕 +// danmuFragment.start(); + } + }); + + + videoView.setOnChangeModeListener(new IPolyvOnChangeModeListener() { + @Override + public void onChangeMode(String changedMode) { + coverView.changeModeFitCover(videoView, changedMode); + } + }); + + videoView.setOnVideoTimeoutListener(new IPolyvOnVideoTimeoutListener() { + @Override + public void onBufferTimeout(int timeoutSecond, int times) {//在一个缓冲里,每超过设置的timeoutSecond都会回调一次 + Toast.makeText(VideoDetailPolyvPlayerActivity.this, "视频加载速度缓慢,请调整网络", Toast.LENGTH_LONG).show(); + } + }); + + videoView.setOnVideoStatusListener(new IPolyvOnVideoStatusListener() { + @Override + public void onStatus(int status) { + if (status < 60) { + Toast.makeText(VideoDetailPolyvPlayerActivity.this, "状态错误 " + status, Toast.LENGTH_SHORT).show(); + } else { + Log.d(TAG, String.format("状态正常 %d", status)); + } + } + }); + + videoView.setOnVideoPlayErrorListener(new IPolyvOnVideoPlayErrorListener2() { + @Override + public boolean onVideoPlayError(@PolyvPlayErrorReason.PlayErrorReason int playErrorReason) { + String message = PolyvErrorMessageUtils.getPlayErrorMessage(playErrorReason); + message += "(error code " + playErrorReason + ")"; + + showErrorView(message); + return true; + } + }); + + //为了能更好的统一错误处理,这个错误回调合并到setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)中,对应的错误类型是PolyvPlayErrorReason.VIDEO_ERROR。 + //为了向后兼容,以前的程序不受影响,当设置了这个错误回调时,setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)错误回调不会被触发。 + //没有设置这个错误回调时,setOnVideoPlayErrorListener(IPolyvOnVideoPlayErrorListener2)错误回调才会触发。 +// videoView.setOnErrorListener(new IPolyvOnErrorListener2() { +// @Override +// public boolean onError() { +// String message = "当前视频无法播放,请尝试切换网络重新播放或者向管理员反馈(error code " + PolyvPlayErrorReason.VIDEO_ERROR + ")"; +// showErrorView(message); +// Toast.makeText(PolyvPlayerActivity.this, message, Toast.LENGTH_SHORT).show(); +// return true; +// } +// }); + + videoView.setOnAdvertisementOutListener(new IPolyvOnAdvertisementOutListener2() { + @Override + public void onOut(@NonNull PolyvADMatterVO adMatter) { + auxiliaryView.show(adMatter); + } + }); + + videoView.setOnAdvertisementCountDownListener(new IPolyvOnAdvertisementCountDownListener() { + @Override + public void onCountDown(int num) { + advertCountDown.setText("广告也精彩:" + num + "秒"); + advertCountDown.setVisibility(View.VISIBLE); + } + + @Override + public void onEnd() { + advertCountDown.setVisibility(View.GONE); + auxiliaryView.hide(); + } + }); + + videoView.setOnAdvertisementEventListener(new IPolyvOnAdvertisementEventListener2() { + @Override + public void onShow(PolyvADMatterVO adMatter) { + Log.i(TAG, "开始播放视频广告"); + } + + @Override + public void onClick(PolyvADMatterVO adMatter) { + if (!TextUtils.isEmpty(adMatter.getAddrUrl())) { + try { + new URL(adMatter.getAddrUrl()); + } catch (MalformedURLException e1) { + Log.e(TAG, PolyvSDKUtil.getExceptionFullMessage(e1, -1)); + return; + } + + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(adMatter.getAddrUrl())); + startActivity(intent); + } + } + }); + + + + videoView.setOnTeaserOutListener(new IPolyvOnTeaserOutListener() { + @Override + public void onOut(@NonNull String url) { + auxiliaryView.show(url); + } + }); + + videoView.setOnTeaserCountDownListener(new IPolyvOnTeaserCountDownListener() { + @Override + public void onEnd() { + auxiliaryView.hide(); + } + }); + + + videoView.setOnVideoSRTPreparedListener(new IPolyvOnVideoSRTPreparedListener() { + @Override + public void onVideoSRTPrepared() { + mediaController.preparedSRT(videoView); + } + }); + + videoView.setOnVideoSRTListener(new IPolyvOnVideoSRTListener() { + @Override + public void onVideoSRT(@Nullable List subTitleItems) { + srtTextView.setText(""); + topSrtTextView.setText(""); + + if (subTitleItems != null) { + for (PolyvSRTItemVO srtItemVO : subTitleItems) { + if (srtItemVO.isBottomCenterSubTitle()) { + srtTextView.setText(srtItemVO.getSubTitle()); + } else if (srtItemVO.isTopCenterSubTitle()) { + topSrtTextView.setText(srtItemVO.getSubTitle()); + } + } + } + + srtTextView.setVisibility(View.VISIBLE); + topSrtTextView.setVisibility(View.VISIBLE); + } + }); + + videoView.setOnGestureLeftUpListener(new IPolyvOnGestureLeftUpListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("LeftUp %b %b brightness %d", start, end, videoView.getBrightness(VideoDetailPolyvPlayerActivity.this))); + if(mediaController.isLocked()){ + return; + } + + int brightness = videoView.getBrightness(VideoDetailPolyvPlayerActivity.this) + 5; + if (brightness > 100) { + brightness = 100; + } + + videoView.setBrightness(VideoDetailPolyvPlayerActivity.this, brightness); + lightView.setViewLightValue(brightness, end); + } + }); + + videoView.setOnGestureLeftDownListener(new IPolyvOnGestureLeftDownListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("LeftDown %b %b brightness %d", start, end, videoView.getBrightness(VideoDetailPolyvPlayerActivity.this))); + if(mediaController.isLocked()){ + return; + } + int brightness = videoView.getBrightness(VideoDetailPolyvPlayerActivity.this) - 5; + if (brightness < 0) { + brightness = 0; + } + + videoView.setBrightness(VideoDetailPolyvPlayerActivity.this, brightness); + lightView.setViewLightValue(brightness, end); + } + }); + + videoView.setOnGestureRightUpListener(new IPolyvOnGestureRightUpListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("RightUp %b %b volume %d", start, end, videoView.getVolume())); + // 加减单位最小为10,否则无效果 + if(mediaController.isLocked()){ + return; + } + int volume = videoView.getVolume() + 10; + if (volume > 100) { + volume = 100; + } + + videoView.setVolume(volume); + volumeView.setViewVolumeValue(volume, end); + } + }); + + videoView.setOnGestureRightDownListener(new IPolyvOnGestureRightDownListener() { + + @Override + public void callback(boolean start, boolean end) { + Log.d(TAG, String.format("RightDown %b %b volume %d", start, end, videoView.getVolume())); + // 加减单位最小为10,否则无效果 + if(mediaController.isLocked()){ + return; + } + int volume = videoView.getVolume() - 10; + if (volume < 0) { + volume = 0; + } + + videoView.setVolume(volume); + volumeView.setViewVolumeValue(volume, end); + } + }); + + videoView.setOnGestureSwipeLeftListener(new IPolyvOnGestureSwipeLeftListener() { + + @Override + public void callback(boolean start, int times, boolean end) { + // 左滑事件 + Log.d(TAG, String.format("SwipeLeft %b %b", start, end)); + if(mediaController.isLocked()){ + return; + } + mediaController.hideTickTips(); + if (fastForwardPos == 0) { + fastForwardPos = videoView.getCurrentPosition(); + } + + if (end) { + if (fastForwardPos < 0) + fastForwardPos = 0; + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + if (videoView.isCompletedState()) { + videoView.start(); +// danmuFragment.resume(); + } + fastForwardPos = 0; + } else { + fastForwardPos -= 1000 * times; + if (fastForwardPos <= 0) + fastForwardPos = -1; + } + progressView.setViewProgressValue(fastForwardPos, videoView.getDuration(), end, false); + } + }); + + videoView.setOnGestureSwipeRightListener(new IPolyvOnGestureSwipeRightListener() { + + @Override + public void callback(boolean start, int times, boolean end) { + // 右滑事件 + Log.d(TAG, String.format("SwipeRight %b %b", start, end)); + if(mediaController.isLocked()){ + return; + } + mediaController.hideTickTips(); + if (fastForwardPos == 0) { + fastForwardPos = videoView.getCurrentPosition(); + } + + if (end) { + if (fastForwardPos > videoView.getDuration()) + fastForwardPos = videoView.getDuration(); + if (!videoView.isCompletedState()) { + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + } else if (videoView.isCompletedState() && fastForwardPos != videoView.getDuration()) { + videoView.seekTo(fastForwardPos); +// danmuFragment.seekTo(); + videoView.start(); +// danmuFragment.resume(); + } + fastForwardPos = 0; + } else { + fastForwardPos += 1000 * times; + if (fastForwardPos > videoView.getDuration()) + fastForwardPos = videoView.getDuration(); + } + progressView.setViewProgressValue(fastForwardPos, videoView.getDuration(), end, true); + } + }); + + videoView.setOnGestureClickListener(new IPolyvOnGestureClickListener() { + @Override + public void callback(boolean start, boolean end) { + if (videoView.isInPlaybackState() || videoView.isExceptionCompleted() && mediaController != null) + if (mediaController.isShowing()) + mediaController.hide(); + else + mediaController.show(); + } + }); + + videoErrorRetry.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + videoErrorLayout.setVisibility(View.GONE); + //调用setVid方法视频会自动播放 + play(vid, bitrate, true,isMustFromLocal); + } + }); + } + + /** + * 播放视频 + * + * @param vid 视频id + * @param bitrate 码率(清晰度) + * @param startNow 是否现在开始播放视频 + * @param isMustFromLocal 是否必须从本地(本地缓存的视频)播放 + */ + public void play(final String vid, final int bitrate, boolean startNow, final boolean isMustFromLocal) { + if (TextUtils.isEmpty(vid)) return; + LogUtil.i("vid = "+vid); + /**每次播放计算播放数+1*/ + Map map = new HashMap<>(); + map.put("uuid",uuid); + HttpMD5SendInfoUtil.sendJsonPostParamNoResultMD5(Url.readSeriesVideo,map); + + if (iv_vlms_cover != null && iv_vlms_cover.getVisibility() == View.VISIBLE) { + iv_vlms_cover.setVisibility(View.GONE); + } + + if (videoView.isDisableScreenCAP()) { + iv_screencast_search.setVisibility(View.GONE); + iv_screencast_search_land.setVisibility(View.GONE); + } + + videoView.release(); + srtTextView.setVisibility(View.GONE); + topSrtTextView.setVisibility(View.GONE); + mediaController.hide(); + mediaController.resetView(); + loadingProgress.setVisibility(View.GONE); + + auxiliaryVideoView.hide(); + auxiliaryLoadingProgress.setVisibility(View.GONE); + auxiliaryView.hide(); + advertCountDown.setVisibility(View.GONE); + firstStartView.hide(); + progressView.resetMaxValue(); + audioSourceCoverView.hide(); + +// danmuFragment.setVid(vid, videoView); + if (startNow) { + //调用setVid方法视频会自动播放 + videoView.setVid(vid, bitrate, isMustFromLocal); + } else { + //视频不播放,先显示一张缩略图 + firstStartView.setCallback(new PolyvPlayerPreviewView.Callback() { + + @Override + public void onClickStart() { + /** + * 调用setVid方法视频会自动播放 + * 如果是有学员登陆的播放,可以在登陆的时候通过 + * {@link com.easefun.polyvsdk.PolyvSDKClient.getinstance().setViewerId()}设置学员id + * 或者调用{@link videoView.setVidWithStudentId}传入学员id进行播放 + */ + videoView.setVidWithStudentId(vid, bitrate, isMustFromLocal,SharePrefUtil.getString(VideoDetailPolyvPlayerActivity.this, Constant.POLVID, "123")); + } + }); + + firstStartView.show(vid); + } + if (PolyvVideoVO.MODE_VIDEO.equals(videoView.getPriorityMode())) { + coverView.hide(); + } + } + /** + * 播放模式 + * + * @author TanQu + */ + public enum PlayMode { + /** + * 横屏 + */ + landScape(3), + /** + * 竖屏 + */ + portrait(4); + + private final int code; + + private PlayMode(int code) { + this.code = code; + } + + /** + * 取得类型对应的code + * + * @return + */ + public int getCode() { + return code; + } + + public static PlayMode getPlayMode(int code) { + switch (code) { + case 3: + return landScape; + case 4: + return portrait; + } + + return null; + } + } + public void showErrorView(String message){ + videoErrorLayout.setVisibility(View.VISIBLE); + videoErrorContent.setText(message); + } + + + + @Override + protected void onResume() { + super.onResume(); + if (!isBackgroundPlay) { + //回来后继续播放 + if (isPlay) { + videoView.onActivityResume(); +// danmuFragment.resume(); + if (auxiliaryView.isPauseAdvert()) { + auxiliaryView.hide(); + } + } + } + mediaController.resume(); + + } + + @Override + protected void onPause() { + super.onPause(); + mediaController.pause(); + } + + @Override + protected void onStop() { + super.onStop(); + if (!isBackgroundPlay) { + //弹出去暂停 + isPlay = videoView.onActivityStop(); +// danmuFragment.pause(); + } + } + private void initScreencast() { + fl_screencast_status.setScreencastSearchLayout(fl_screencast_search); + fl_screencast_status.setLandScreencastSearchLayout(fl_screencast_search_land); + fl_screencast_status.setVideoView(videoView); + fl_screencast_status.setMediaController(mediaController); + + screencastManager = PolyvScreencastManager.getInstance(null);//如果之前已经初始化,那么这里可以传null + fl_screencast_search.setScreencastStatusLayout(fl_screencast_status); + fl_screencast_search.setScreencastManager(screencastManager); + fl_screencast_search_land.setScreencastStatusLayout(fl_screencast_status); + fl_screencast_search_land.setScreencastManager(screencastManager); + + iv_screencast_search.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (iv_screencast_search.isSelected()) { + fl_screencast_search.hide(true); + } else { + fl_screencast_search.show(); + } + } + }); + iv_screencast_search_land.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + fl_screencast_search_land.show(); + } + }); + + fl_screencast_search.setOnVisibilityChangedListener(new PolyvScreencastSearchLayout.OnVisibilityChangedListener() { + @Override + public void onVisibilityChanged(@NonNull View changedView, int visibility) { + iv_screencast_search.setSelected(visibility == View.VISIBLE); + } + }); + } + @Override + protected void onDestroy() { + super.onDestroy(); + fl_screencast_search.destroy(); + fl_screencast_search_land.destroy(); + screencastManager.release(); + if(videoView!=null) + videoView.destroy(); + videoView = null; + if(auxiliaryView!=null) + auxiliaryView.hide(); + if(firstStartView!=null) + firstStartView.hide(); + if(coverView!=null) + coverView.hide(); + if(mediaController!=null) + mediaController.disable(); + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + + hideSoftKeyboard(); + } + + /** + * hide inputMethod + */ + public void hideSoftKeyboard() { + InputMethodManager inputMethodManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); + if (inputMethodManager != null) { + View localView = getCurrentFocus(); + if (localView != null && localView.getWindowToken() != null) { + IBinder windowToken = localView.getWindowToken(); + inputMethodManager.hideSoftInputFromWindow(windowToken, 0); + } + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (hideViewOnTouchOutside(ev, fl_screencast_search_land)) { + return true; + } +// else if (hideViewOnTouchOutside(ev, landPptDirLayout)) { +// return true; +// } + return super.dispatchTouchEvent(ev); + } + + private boolean hideViewOnTouchOutside(MotionEvent ev, View view) { + if (ev.getAction() == MotionEvent.ACTION_DOWN && view.getVisibility() == View.VISIBLE) { + int[] location = new int[2]; + view.getLocationInWindow(location); + if (ev.getX() < location[0]) { + if (view instanceof PolyvScreencastSearchLayout) { + ((PolyvScreencastSearchLayout) view).hide(true); + } else { + view.setVisibility(View.GONE); + } + return true; + } + } + return false; + } + + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (fl_screencast_search.getVisibility() == View.VISIBLE) { + fl_screencast_search.hide(true); + return true; + } + if (fl_screencast_search_land.getVisibility() == View.VISIBLE) { + fl_screencast_search_land.hide(true); + return true; + } + Intent intent = new Intent(); + intent.putExtra("isCollection", isCollt); + intent.putExtra("uuid", videoUuid); + mActivity.setResult( + VideoActivity.GET_READ_NUM_RESULT, intent); + if (timer!=null){ + timer.cancel(); + } + if (mediaController != null && mediaController.isLocked()) { + return true; + } + if (PolyvScreenUtils.isLandscape(this) && mediaController != null) { + mediaController.changeToPortrait(); + return true; + } + + } + + return super.onKeyDown(keyCode, event); + } + + public static Intent newIntent(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid) { + return newIntent(context, playMode, vid, PolyvBitRate.ziDong.getNum()); + } + + public static Intent newIntent(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid, int bitrate) { + return newIntent(context, playMode, vid, bitrate, false); + } + + public static Intent newIntent(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid, int bitrate, boolean startNow) { + return newIntent(context, playMode, vid, bitrate, startNow, false); + } + + public static Intent newIntent(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid, int bitrate, boolean startNow, + boolean isMustFromLocal) { + Intent intent = new Intent(context, VideoDetailPolyvPlayerActivity.class); + intent.putExtra("playMode", playMode.getCode()); + intent.putExtra("value", vid); + intent.putExtra("bitrate", bitrate); + intent.putExtra("startNow", startNow); + intent.putExtra("isMustFromLocal", isMustFromLocal); + return intent; + } + + public static void intentTo(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid) { + intentTo(context, playMode, vid, PolyvBitRate.ziDong.getNum()); + } + + public static void intentTo(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid, int bitrate) { + intentTo(context, playMode, vid, bitrate, false); + } + + public static void intentTo(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid, int bitrate, boolean startNow) { + intentTo(context, playMode, vid, bitrate, startNow, false); + } + + public static void intentTo(Context context, VideoDetailPolyvPlayerActivity.PlayMode playMode, String vid, int bitrate, boolean startNow, + boolean isMustFromLocal) { + context.startActivity(newIntent(context, playMode, vid, bitrate, startNow, isMustFromLocal)); + } + public void delVisit() { + final ECListDialog dialog = new ECListDialog(VideoDetailPolyvPlayerActivity.this, new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(VideoDetailPolyvPlayerActivity.this, GroupChatSelectPatientActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + } else { + + Intent intent = new Intent(VideoDetailPolyvPlayerActivity.this, GroupSelectParentActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(VideoDetailPolyvPlayerActivity.this.getResources().getColor(R.color.top_title)); + dialog.show(); + } + RichTextBean richTextBean; + public String imagUrl; + public String urlShare; + public String content1; + // private ArrayList list; + private String mRecipients = ""; + CustomProgressDialog pd; + public class ParseHtmlTask extends ECAsyncTask { + + public ParseHtmlTask(Context context) { + super(context); + } + + @Override + protected Object doInBackground(Object[] params) { + if (url.startsWith("http://") || url.startsWith("https://")) { + urlShare = url; + } else { + urlShare = Url.urlHtml + url; + } + +// url = "http://wx.igandan.com/expert/outpatient_details?expert_uuid=" + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); +// urlShare = Url.urlOutpatient+ SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + content1 = "肝胆相照®肝胆病在线公共服务平台"; + imagUrl = "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png"; + // 从患者数据库里取出患者列表 + +// for (int i = 0;i list = new ArrayList<>(); +// String[] split = mRecipients.split(","); +// for (int j = 0; j < split.length; j++) { +// if (!StringUtil.isEmpty(split[j])&&!list.contains(split[j])) { +// list.add(split[j]); +// IMChattingHelper.getInstance().handleSendRichTextMessage(bean, Constant.Patient_AppKey+split[j], "2,1,2,0",VideoDetailPolyvPlayerActivity.this); +// } +// } + //添加群发记录富文本 + addGroupSendMsg("4",videoUuid,""); + + }else { + IMChattingHelper.getInstance().handleSendRichTextMessage(bean, mRecipients, "2,1,2,0", VideoDetailPolyvPlayerActivity.this); + if(pd!=null) + pd.dismiss(); + } + } + }); + + } + private final ReentrantLock lock = new ReentrantLock(); + private void addGroupSendMsg(String msg_type, String msg_content, final String mFilePath1) { + +// if (pd==null){ +// pd = new CustomProgressDialog(NewsDetailActivity.this, "请稍候"); +// } +// pd.show(); + needreport(mRecipients.split(",").length+"","患教视频"); + final Map map = new HashMap<>(); + map.put("msg_type",msg_type); + if (StringUtil.isEmpty(mFilePath1)){ + map.put("msg_content",msg_content); + } + map.put("patient_user_uuid",mRecipients); + map.put("user_uuid", SharePrefUtil.getString(VideoDetailPolyvPlayerActivity.this, "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(VideoDetailPolyvPlayerActivity.this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + if(!StringUtil.isEmpty(mFilePath1)){ + FileInputStream fileInputStream = new FileInputStream(mFilePath1); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(mFilePath1,opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream, + null, opts); + String s = Base64Util.BitmaptoBase64(bitmap); + map.put("msg_content",s); + } + + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + LogUtil.i("params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.addGroupSendMsg); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + if ("200".equals(code)){ + if(pd!=null) + pd.dismiss(); + ToastUtil.showMessage("推荐成功"); + } + else + { + if(pd!=null) + pd.dismiss(); + ToastUtil.showMessage("提交失败,请重试"); + } + } + else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } + public class CommentExpandAdapter extends BaseExpandableListAdapter { + private List commentBeanList; + private List replyBeanList; + private Context context; + ECAlertDialog buildAlert; + private int delPos;// 删除评论的位置 + public CommentExpandAdapter(Context context, List commentBeanList) { + this.context = context; + this.commentBeanList = commentBeanList; + } + + @Override + public int getGroupCount() { + return commentBeanList.size(); + } + + @Override + public int getChildrenCount(int i) { + if(commentBeanList.get(i).getChildList() == null){ + return 0; + }else { + if(!commentBeanList.get(i).getExpanded()&&commentBeanList.get(i).getChildList().size()>3) + { + return 3; + } + else + { + return commentBeanList.get(i).getChildList().size()>0 ? commentBeanList.get(i).getChildList().size():0; + } + + } + + } + + @Override + public Object getGroup(int i) { + return commentBeanList.get(i); + } + + @Override + public Object getChild(int i, int i1) { + return commentBeanList.get(i).getChildList().get(i1); + } + + @Override + public long getGroupId(int groupPosition) { + return groupPosition; + } + + @Override + public long getChildId(int groupPosition, int childPosition) { + return getCombinedChildId(groupPosition, childPosition); + } + + @Override + public boolean hasStableIds() { + return true; + } + + @Override + public View getGroupView(final int groupPosition, boolean isExpand, View convertView, ViewGroup viewGroup) { + final CommentExpandAdapter.GroupHolder groupHolder; + + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new_p, viewGroup, false); + groupHolder = new CommentExpandAdapter.GroupHolder(convertView); + convertView.setTag(groupHolder); + }else { + groupHolder = (CommentExpandAdapter.GroupHolder) convertView.getTag(); + } + if(expertUuid.equals(commentBeanList.get(groupPosition).getUser_uuid())) + { + groupHolder.iv_item_comment_delete.setVisibility(View.VISIBLE); + groupHolder.item_comment_hf.setVisibility(View.GONE); + } + else + { + groupHolder.iv_item_comment_delete.setVisibility(View.GONE); + groupHolder.item_comment_hf.setVisibility(View.VISIBLE); + } + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(VideoDetailPolyvPlayerActivity.this).load( + Url.urlHtml + commentBeanList.get(groupPosition).getPhoto()).apply(requestOptions).into(groupHolder.logo); + } + else + { + Glide.with(VideoDetailPolyvPlayerActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into(groupHolder.logo); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getPhoto(), +// groupHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + if("0".equals(commentBeanList.get(groupPosition).getUser_status())) + { + groupHolder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + } +// groupHolder.tv_name.setText(commentBeanList.get(groupPosition).getName()); + groupHolder.tv_time.setText(commentBeanList.get(groupPosition).getCreate_date()); + groupHolder.tv_content.setText(commentBeanList.get(groupPosition).getContent()); + groupHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getComment_uuid(); + getDeleteComment(uid); + //mList.remove(groupPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + groupHolder.item_comment_hf.setOnClickListener(new View.OnClickListener() { + + // 添加回复 + @Override + public void onClick(View v) { + if("0".equals(mList.get(groupPosition).getUser_status())) + { + ToastUtil.showMessage("该评论无法回复"); + return; + } + Intent intent = new Intent(VideoDetailPolyvPlayerActivity.this, + SettingFeedbackActivity.class); + intent.setType("commentY"); + intent.putExtra("name", mList.get(groupPosition).getName()); + intent.putExtra("uuid", mList.get(groupPosition).getUser_uuid()); + intent.putExtra("content", mList.get(groupPosition).getContent()); + + startActivityForResult(intent, + GET_HF_COMMENT_RESULT); +// // TODO Auto-generated method stub +// Intent intent = new Intent(GDEventDetailTopActivity.this, +// SettingFeedbackActivity.class); +// intent.setType("commentY"); +// intent.putExtra("name", mList.get(groupPosition).getName()); +// intent.putExtra("uuid", mList.get(groupPosition).getUser_uuid()); +// intent.putExtra("content", mList.get(groupPosition).getContent()); +// startActivityForResult(intent, +// GET_HF_COMMENT_RESULT); + + } + }); + return convertView; + } + + @Override + public View getChildView(final int groupPosition, final int childPosition, boolean b, View convertView, ViewGroup viewGroup) { + final CommentExpandAdapter.ChildHolder childHolder; + if(convertView == null){ + convertView = LayoutInflater.from(context).inflate(R.layout.item_comment_new,viewGroup, false); + childHolder = new CommentExpandAdapter.ChildHolder(convertView); + convertView.setTag(childHolder); + } + else { + childHolder = (CommentExpandAdapter.ChildHolder) convertView.getTag(); + } + if(childPosition==2&&commentBeanList.get(groupPosition).getChildList().size()>3&&!commentBeanList.get(groupPosition).getExpanded()) + { + childHolder.morer.setVisibility(View.VISIBLE); + childHolder.more.setText("— —展开更多回复"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.exp)); + } + else + { + if(commentBeanList.get(groupPosition).getExpanded()&&(childPosition==(commentBeanList.get(groupPosition).getChildList().size()-1))) + { + childHolder.more.setText("— —收起"); + childHolder.more_i.setImageDrawable(getResources().getDrawable(R.drawable.coll)); + childHolder.morer.setVisibility(View.VISIBLE); + } + else + { + childHolder.morer.setVisibility(View.GONE); + } + } + + if(!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date())) + { + childHolder.tv_time.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getCreate_date()); + } + else + { + childHolder.tv_time.setText(""); + } + childHolder.morer.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + if(!commentBeanList.get(groupPosition).getExpanded()) + { + commentBeanList.get(groupPosition).setExpanded(true); + + notifyDataSetChanged(); + + } + else + { + commentBeanList.get(groupPosition).setExpanded(false); + + notifyDataSetChanged(); + + } + } + }); + if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { + RequestOptions requestOptions = new RequestOptions(); + requestOptions.placeholder(R.drawable.icon_touxiang_persion_gray_big); + requestOptions.error(R.drawable.icon_touxiang_persion_gray_big); + Glide.with(VideoDetailPolyvPlayerActivity.this). + load( Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto()) + .apply(requestOptions).into(childHolder.logo); + + } + else + { + Glide.with(VideoDetailPolyvPlayerActivity.this).load(R.drawable.icon_touxiang_persion_gray_big).into( childHolder.logo); + } +// if (!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto())) { +// ImageLoader +// .getInstance() +// .displayImage( +// Url.urlHtml + commentBeanList.get(groupPosition).getChildList().get(childPosition).getPhoto(), +// childHolder.logo, +// ImageOptions +// .getImageOptions(R.drawable.icon_touxiang_persion_gray_big)); +// } + String replyUser = commentBeanList.get(groupPosition).getChildList().get(childPosition).getName(); + if("0".equals(commentBeanList.get(groupPosition).getChildList().get(childPosition).getUser_status())) + { + childHolder.tv_name.setText(getResources().getString(com.netease.nim.uikit.R.string.cancellation)); + } + else + { + childHolder.tv_name.setText(replyUser); + } + delPos=childPosition; + if(!TextUtils.isEmpty(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent())) + { + childHolder.tv_content.setText(commentBeanList.get(groupPosition).getChildList().get(childPosition).getContent()); + } + else + { + childHolder.tv_content.setText(""); + } + + childHolder.iv_item_comment_delete.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + buildAlert = ECAlertDialog.buildAlert( + context, "确定删除评论吗?", "取消", + "确定", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, + int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 确定 + + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + buildAlert.dismiss(); + String uid=mList.get(groupPosition).getChildList().get(childPosition).getComment_uuid(); + getDeleteComment(uid); + mList.get(groupPosition).getChildList().remove(childPosition); + + } + }); + buildAlert.setTitle("删除评论"); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + }); + return convertView; + } + + @Override + public boolean isChildSelectable(int i, int i1) { + return true; + } + + private class GroupHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete; + private TextView tv_name, tv_content, tv_time,item_comment_hf; + // private ImageView iv_like; + public GroupHolder(View view) { + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + item_comment_hf=view.findViewById(R.id.item_comment_hf); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + + } + } + + private class ChildHolder{ + private ImageView logo; + private ImageView iv_item_comment_delete,more_i; + private TextView tv_name, tv_content, tv_time,more; + private RelativeLayout all_child,morer; + public ChildHolder(View view) { + all_child=view.findViewById(R.id.all_child); + logo = view.findViewById(R.id.iv_patient_touxiang); + tv_content = (TextView) view.findViewById(R.id.item_comment_content); + tv_name = (TextView) view.findViewById(R.id.item_comment_name); + tv_time = (TextView) view.findViewById(R.id.item_comment_time); + iv_item_comment_delete=view.findViewById(R.id.iv_item_comment_delete); + more=view.findViewById(R.id.more); + morer=view.findViewById(R.id.morer); + more_i=view.findViewById(R.id.more_i); + } + } + + + + } + public void needreportSome(String name,String page,String tags) + { + if(StringUtil.isEmpty(getIntent().getStringExtra("pagetype"))) + { + return; + } + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + + rbens.setResource_name(title); + rbens.setResource_option(videoTeachDetailBean.getVideo().getTags()+""); + + rbens.setPage_type(getIntent().getStringExtra("pagetype")); + + + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + private void needreport(String number,String belogn) + { + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("group_message"); + rbens.setNumber(number); + rbens.setBelong(belogn); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void startReport(List list) + { + Intent intent = new Intent(VideoDetailPolyvPlayerActivity.this, ReportService.class); + if(list!=null) + { + intent.putExtra("report_list", (Serializable) list); + + } + intent.putExtra("report_token", Constant.Repotr_token); + + startService(intent); + } + public void needreportPay(String name, String ev,String ui,String num,String rs,String op) + { + if(StringUtil.isEmpty(getIntent().getStringExtra("pagetype"))) + { + return; + } + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname(name); + rbens.setEvent_val(ev); + rbens.setEvent_unit(ui); + rbens.setNumber(num); + rbens.setResource_name(rs); + rbens.setResource_option(op); + rbens.setPage_type(getIntent().getStringExtra("pagetype")); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } + public void needreportDetail(String page,String tags,String name) + { + if(StringUtil.isEmpty(getIntent().getStringExtra("pagetype"))) + { + return; + } + List reportBeans=new ArrayList<>(); + reportBean rbens=new reportBean(); + rbens.setUser_id(Constant.Report_userId); + rbens.setApp_key(Constant.Repotr_app_key); + rbens.setOs(CommUtil.Repotr_os); + rbens.setDevice(CommUtil.getDeviceName()); + rbens.setDevice_type(CommUtil.getDeviceType()); + rbens.setApp_version(CommUtil.getVersionName()); + rbens.setNetwork_carrier(CommUtil.getCarrierName); + rbens.setNetwork_type(CommUtil.getCurrentNetworkType(UIUtils.getContext())); + rbens.setEvent_nickname("detail_page"); + rbens.setPage_type(page); + rbens.setResource_name(name); + rbens.setPage_type(page); + rbens.setResource_option(tags+""); + rbens.setCreate_date(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + reportBeans.add(rbens); + startReport(reportBeans); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideohistoryActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideohistoryActivity.java new file mode 100644 index 0000000..29827ce --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/VideohistoryActivity.java @@ -0,0 +1,468 @@ +package cn.shangyu.gdxzExpert.polyvplayer; + + +import android.content.Intent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.BaseBean; +import cn.shangyu.gdxzExpert.bean.VideoWatchRecordBean; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.DialogUtil; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; +import cn.shangyu.gdxzExpert.widget.LoadingPage; + +/** + * Created by WANGChengXin on 2019/10/30. + * 观看历史 + */ + +public class VideohistoryActivity extends BaseActivity implements OnCallBackFromNet,AdapterView.OnItemClickListener{ + private View view; + private PullToRefreshListView lv_exchange; + private int page = 1; + public static final int VIDEOWATCHRECORD = 200; + public static final int DELETERECORD = 201; + private VideoWatchRecordBean videoWatchRecordBean; + private List data = new ArrayList(); + private VideoHistoryAdapter adapter; + private RelativeLayout rl_bot; + private boolean flag; + private TextView tv_all; + private TextView tv_deleteall; + private View ll_empty; + + @Override + public void setTitle() { + top_title.setText("观看历史"); + top_right_text.setText("编辑"); + top_right_text.setVisibility(View.VISIBLE); + if(CommonUtil.BigModule()) + { + top_title.setTextSize(23); + top_right_text.setTextSize(18); + } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + if(CommonUtil.BigModule()) + { + view = UIUtils.inflate(R.layout.activity_videohistory_big); + } + else + { + view = UIUtils.inflate(R.layout.activity_videohistory); + } + lv_exchange = view.findViewById(R.id.lv_exchange); + rl_bot = view.findViewById(R.id.rl_bot); + tv_all = view.findViewById(R.id.tv_all); + tv_deleteall = view.findViewById(R.id.tv_deleteall); + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂无观看历史"); + ll_empty = view.findViewById(R.id.ll_empty); + lv_exchange.getRefreshableView().setEmptyView(ll_empty); + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(this, + "加载中"); + + tv_all.setOnClickListener(this); + tv_deleteall.setOnClickListener(this); + getVideoWatchRecord(); + lv_exchange.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2() { + + @Override + public void onPullDownToRefresh(PullToRefreshBase refreshView) { + + + page = 1; + getVideoWatchRecord(); + + } + + @Override + public void onPullUpToRefresh(PullToRefreshBase refreshView) { + + page++; + getVideoWatchRecord(); + + } + }); + lv_exchange.setOnItemClickListener(this); + return view; + } + + private void getVideoWatchRecord() { + dialog.show(); + Map map = new HashMap<>(); + map.put("page",page+""); + sendJsonPostParamtoNetSignMD5(Url.VideoWatchRecord,map,VIDEOWATCHRECORD,VideohistoryActivity.this); + + } + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + switch (v.getId()){ + case R.id.top_right_text: + if(flag){ + top_right_text.setText("编辑"); + flag = false; + rl_bot.setVisibility(View.GONE); + }else { + top_right_text.setText("取消"); + for (int i = 0;i 1) { + // 是否有更多 + if (videoWatchRecordBean.getData() == null || videoWatchRecordBean.getData().getList().size()==0) {// 由于暂时虚构没数据,所以加载更多也没数据 + ToastUtil.showMessage("没有更多了"); + lv_exchange.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + if (page > 1) + page--; + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + } else if (page == 1) { + // 得到总页码数 + int totalPage = videoWatchRecordBean.getData().getTotal(); + if (totalPage <= 1 || totalPage < page) { + lv_exchange.setMode(PullToRefreshBase.Mode.PULL_FROM_START); + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + } else { + lv_exchange.setMode(PullToRefreshBase.Mode.BOTH); + } + + // 设置刷新的时间 + setLastUpdateTime(); + } + break; + case DELETERECORD: + LogUtil.i("DELETERECORD = "+resultJson); + Gson gsonuse1 = new Gson(); + BaseBean baseBean = gsonuse1.fromJson(resultJson, BaseBean.class); + if ("200".equals(baseBean.code)){ + getVideoWatchRecord(); + top_right_text.setText("编辑"); + flag = false; + rl_bot.setVisibility(View.GONE); + } + ToastUtil.showMessage(baseBean.message); + break; + } + } + + private void setLastUpdateTime() { + String text = CommonUtil.getStringDate(); + lv_exchange.getLoadingLayoutProxy().setLastUpdatedLabel(text); + } + + private void onLoaded() { + dismissLoadingProgress(); + if (lv_exchange != null) { + lv_exchange.onRefreshComplete(); + } + + } + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { +// Intent intent = VideoDetailPolyvPlayerActivity.newIntent(VideohistoryActivity.this, VideoDetailPolyvPlayerActivity.PlayMode.portrait, ""); +// intent.putExtra("startNow", false); +// intent.putExtra("isVlmsOnline", false); +// intent.putExtra("uuid", data.get(position - 1).getVideo_uuid()); +// startActivity(intent); + } + + class VideoHistoryAdapter extends BaseAdapter{ + + + + @Override + public int getCount() { + return data.size(); + } + + @Override + public Object getItem(int position) { + return data.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + final Holder holder; + if (convertView == null) { + holder = new Holder(); + if(CommonUtil.BigModule()) + { + convertView = UIUtils.inflate(R.layout.item_video_history_big); + } + else + { + convertView = UIUtils.inflate(R.layout.item_video_history); + } + holder.iv_start = convertView.findViewById(R.id.iv_start); + holder.tv_author = convertView.findViewById(R.id.tv_author); + holder.tv_title = convertView.findViewById(R.id.tv_title); + holder.cb_check = convertView.findViewById(R.id.cb_check); + holder.ll_history = convertView.findViewById(R.id.ll_history); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + if (flag){ + holder.cb_check.setVisibility(View.VISIBLE); + }else { + holder.cb_check.setVisibility(View.GONE); + } + final VideoWatchRecordBean.DataBean.ListBean listBean = data.get(position); + + if (listBean.getStatus()==99){ + if(CommonUtil.BigModule()) + { + holder.cb_check.setImageResource(R.drawable.check_video_true_big); + } + else + { + holder.cb_check.setImageResource(R.drawable.check_video_true); + } + }else { + if(CommonUtil.BigModule()) + { + holder.cb_check.setImageResource(R.drawable.check_video_false_big); + } + else + { + holder.cb_check.setImageResource(R.drawable.check_video_false); + } + } + + holder.ll_history.setOnClickListener(new LlHistoryListener(holder.cb_check,listBean)); + + + ImageLoader.getInstance().displayImage( + Url.urlHtml+listBean.getImgpath(), holder.iv_start, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + holder.tv_author.setText(listBean.getPublic_name()); + holder.tv_title.setText(listBean.getVideo_name()); + return convertView; + } + + class Holder { + ImageView cb_check; + RoundImageView iv_start; + TextView tv_title, tv_author; + LinearLayout ll_history; + } + } + + private class LlHistoryListener implements View.OnClickListener{ + + private ImageView cb_check; + private VideoWatchRecordBean.DataBean.ListBean listBean; + public LlHistoryListener(ImageView cb_check, VideoWatchRecordBean.DataBean.ListBean listBean) { + this.cb_check = cb_check; + this.listBean = listBean; + } + + @Override + public void onClick(View v) { + if (flag){ + int status = listBean.getStatus(); + if (status==98||status==1){ + listBean.setStatus(99); + if(CommonUtil.BigModule()) + { + cb_check.setImageResource(R.drawable.check_video_true_big); + } + else + { + cb_check.setImageResource(R.drawable.check_video_true); + } +// cb_check.setImageResource(R.drawable.check_video_true); + }else { + listBean.setStatus(98); + if(CommonUtil.BigModule()) + { + cb_check.setImageResource(R.drawable.check_video_false_big); + } + else + { + cb_check.setImageResource(R.drawable.check_video_false); + } +// cb_check.setImageResource(R.drawable.check_video_false); + + } + int k = 0; + for (int i = 0;i { + + private Context context; + + protected RecyclerView mRecyclerView; + + private List mListeners = new ArrayList<>(); + + + public AbsRecyclerViewAdapter(RecyclerView recyclerView) { + + this.mRecyclerView = recyclerView; + this.mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + + @Override + public void onScrollStateChanged(RecyclerView rv, int newState) { + + for (RecyclerView.OnScrollListener listener : mListeners) { + listener.onScrollStateChanged(rv, newState); + } + } + + + @Override + public void onScrolled(RecyclerView rv, int dx, int dy) { + + for (RecyclerView.OnScrollListener listener : mListeners) { + listener.onScrolled(rv, dx, dy); + } + } + }); + } + + + public void addOnScrollListener(RecyclerView.OnScrollListener listener) { + + mListeners.add(listener); + } + + + public interface OnItemClickListener { + + void onItemClick(int position, ClickableViewHolder holder); + } + + interface OnItemLongClickListener { + + boolean onItemLongClick(int position, ClickableViewHolder holder); + } + + private OnItemClickListener itemClickListener; + + private OnItemLongClickListener itemLongClickListener; + + + public void setOnItemClickListener(OnItemClickListener listener) { + + this.itemClickListener = listener; + } + + + public void setOnItemLongClickListener(OnItemLongClickListener listener) { + + this.itemLongClickListener = listener; + } + + + public void bindContext(Context context) { + + this.context = context; + } + + + public Context getContext() { + + return this.context; + } + + + @Override + public void onBindViewHolder(final ClickableViewHolder holder, final int position) { + + holder.getParentView().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (itemClickListener != null) { + itemClickListener.onItemClick(position, holder); + } + } + }); + holder.getParentView().setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + return itemLongClickListener != null + && itemLongClickListener.onItemLongClick(position, holder); + } + }); + } + + + public static class ClickableViewHolder extends RecyclerView.ViewHolder { + + private View parentView; + + + public ClickableViewHolder(View itemView) { + + super(itemView); + this.parentView = itemView; + } + + + View getParentView() { + + return parentView; + } + + + @SuppressWarnings("unchecked") + public T $(@IdRes int id) { + + return (T) parentView.findViewById(id); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/CurriculumAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/CurriculumAdapter.java new file mode 100644 index 0000000..8005be5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/CurriculumAdapter.java @@ -0,0 +1,99 @@ +package cn.shangyu.gdxzExpert.polyvplayer.adapter; + +import android.content.Context; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.utils.DateUtil; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * Created by WANGChengXin on 2019/3/26. + */ + +public class CurriculumAdapter extends BaseAdapter{ + private Context mContent; + private List list; + private int isPlayingPosition = 99; + public int num; + + public CurriculumAdapter(Context mContent, List list) { + super(); + this.mContent = mContent; + this.list = list; + + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + final Holder holder; + + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContent, R.layout.item_curriculum,null); + holder.tv_time = convertView.findViewById(R.id.tv_time); + holder.tv_name = convertView.findViewById(R.id.tv_name); + holder.tv_data = convertView.findViewById(R.id.tv_data); + holder.tv_play = convertView.findViewById(R.id.tv_play); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + holder.tv_time.setText("时长 "+list.get(position).getTime()); + holder.tv_name.setText(list.get(position).getTitle()); + + + String day = DateUtil.timestamp2Date(list.get(position).getCreate_date()+"","yyyy-MM-dd"); + holder.tv_data.setText(day); + if ("1".equals(list.get(position).getType())){ + holder.tv_play.setText("免费"); + holder.tv_play.setVisibility(View.VISIBLE); + }else if ("2".equals(list.get(position).getType())){ + holder.tv_play.setText("试播"); + holder.tv_play.setVisibility(View.VISIBLE); + }else { + holder.tv_play.setVisibility(View.GONE); + } + if (isPlayingPosition!=99){ + if (isPlayingPosition==position){ + holder.tv_name.setTextColor(mContent.getResources().getColor(R.color.doctor_theme)); + }else { + holder.tv_name.setTextColor(mContent.getResources().getColor(R.color.c333333)); + } + } + return convertView; + } + + public void setPlayingPosition(int position) { + isPlayingPosition = position; + } + + class Holder { + TextView tv_name,tv_data,tv_time,tv_play; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/ExchangeAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/ExchangeAdapter.java new file mode 100644 index 0000000..322ca2d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/ExchangeAdapter.java @@ -0,0 +1,110 @@ +package cn.shangyu.gdxzExpert.polyvplayer.adapter; + +import android.content.Context; +import android.graphics.Paint; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesTypeBean; +import cn.shangyu.gdxzExpert.polyvplayer.FreeAreaActivity; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + + +/** + * Created by WANGChengXin on 2019/3/25. + */ + +public class ExchangeAdapter extends BaseAdapter { + + private Context mContent; + private List list; + private boolean b;//是否已兑换 + + + public ExchangeAdapter(Context mContent, List list) { + super(); + this.mContent = mContent; + this.list = list; + + } + + + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContent, R.layout.item_exchange,null); + holder.tv_exchange_title = convertView.findViewById(R.id.tv_exchange_title); + holder.iv_exchange_video = convertView.findViewById(R.id.iv_exchange_video); + holder.tv_exchange_title2 = convertView.findViewById(R.id.tv_exchange_title2); + holder.tv_red1 = convertView.findViewById(R.id.tv_red1); + holder.tv_red2 = convertView.findViewById(R.id.tv_red2); + holder.tv_red3 = convertView.findViewById(R.id.tv_red3); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + holder.tv_exchange_title.setText(list.get(position).getTitle()); + holder.tv_exchange_title2.setText(list.get(position).getSlogan()); + double discount = list.get(position).getDiscount(); + if (discount==1){//不打折 + holder.tv_red1.setText(list.get(position).getPrice()+"积分"); + holder.tv_red2.setVisibility(View.GONE); + holder.tv_red3.setVisibility(View.GONE); + }else if (discount>0){//打折不免费 + int v = (int) (list.get(position).getPrice() * discount); + holder.tv_red1.setText(v+"积分"); + holder.tv_red3.setText(list.get(position).getPrice()+"积分"); + holder.tv_red3.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); + holder.tv_red2.setVisibility(View.VISIBLE); + holder.tv_red3.setVisibility(View.VISIBLE); + }else if (discount == 0){//限时优惠 免费 + holder.tv_red1.setText("免费"); + holder.tv_red2.setVisibility(View.VISIBLE); + holder.tv_red3.setText(list.get(position).getPrice()+"积分"); + holder.tv_red3.setVisibility(View.VISIBLE); + holder.tv_red3.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); + } + ImageLoader.getInstance().displayImage( + Url.urlHtml+list.get(position).getImg(), holder.iv_exchange_video, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + + + return convertView; + + } + class Holder { + RoundImageView iv_exchange_video; + TextView tv_exchange_title,tv_exchange_title2,tv_red1,tv_red2,tv_red3; + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/FreeAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/FreeAdapter.java new file mode 100644 index 0000000..7c60aba --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/FreeAdapter.java @@ -0,0 +1,97 @@ +package cn.shangyu.gdxzExpert.polyvplayer.adapter; + +import android.content.Context; +import android.graphics.Paint; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListFreeBean; +import cn.shangyu.gdxzExpert.polyvplayer.FreeAreaActivity; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +/** + * Created by wangchengxin on 2019/4/1. + */ + +public class FreeAdapter extends BaseAdapter{ + + private Context mContent; + private List list; + public FreeAdapter(Context mContent, List list) { + this.mContent = mContent; + this.list = list; + + } + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContent, R.layout.item_free,null); + holder.tv_exchange_title = convertView.findViewById(R.id.tv_exchange_title); + holder.iv_exchange_video = convertView.findViewById(R.id.iv_exchange_video); + holder.tv_exchange_title2 = convertView.findViewById(R.id.tv_exchange_title2); + holder.tv_watchtime = convertView.findViewById(R.id.tv_watchtime); + + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + holder.tv_exchange_title.setText(list.get(position).getTitle()); + holder.tv_exchange_title2.setText(list.get(position).getTime()); + holder.tv_watchtime.setText(list.get(position).getReadnum()+"观看"); + ImageLoader.getInstance().displayImage( + Url.urlHtml+list.get(position).getImg(), holder.iv_exchange_video, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// double discount = list.get(position).getDiscount(); +// discount = 0.8; +// if (discount!=1){ +// holder.tv_red2.setVisibility(View.VISIBLE); +// holder.tv_red3.setVisibility(View.VISIBLE); +// double v = list.get(position).getPrice() / discount; +// holder.tv_red3.setText(v+"积分"); +// holder.tv_red3.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG ); +// }else { +// holder.tv_red2.setVisibility(View.GONE); +// holder.tv_red3.setVisibility(View.GONE); +// } +// ImageLoader.getInstance().displayImage( +// list.get(position).get(), holder.iv_exchange_video, +// ImageOptions.getImageOptions(R.drawable.default_news_iv)); + + return convertView; + + } + class Holder { + RoundImageView iv_exchange_video; + TextView tv_exchange_title,tv_exchange_title2,tv_watchtime,tv_red2,tv_red3; + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/MyListSeriesAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/MyListSeriesAdapter.java new file mode 100644 index 0000000..01c4652 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/MyListSeriesAdapter.java @@ -0,0 +1,90 @@ +package cn.shangyu.gdxzExpert.polyvplayer.adapter; + +import android.content.Context; +import android.graphics.Paint; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesTypeBean; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +/** + * Created by wangchengxin on 2019/4/4. + */ + +public class MyListSeriesAdapter extends BaseAdapter { + + private Context mContent; + private List list; + private boolean b;//是否已兑换 + + + public MyListSeriesAdapter(Context mContent, List list) { + super(); + this.mContent = mContent; + this.list = list; + + } + + + @Override + public int getCount() { + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + Holder holder; + + if (convertView == null) { + holder = new Holder(); + convertView = View.inflate(mContent, R.layout.item_mylistseries,null); + holder.tv_exchange_title = convertView.findViewById(R.id.tv_exchange_title); + holder.iv_exchange_video = convertView.findViewById(R.id.iv_exchange_video); + holder.tv_exchange_title2 = convertView.findViewById(R.id.tv_exchange_title2); + holder.tv_red1 = convertView.findViewById(R.id.tv_red1); + holder.tv_red2 = convertView.findViewById(R.id.tv_red2); + holder.tv_red3 = convertView.findViewById(R.id.tv_red3); + + convertView.setTag(holder); + } else { + holder = (Holder) convertView.getTag(); + } + holder.tv_exchange_title.setText(list.get(position).getTitle()); + holder.tv_exchange_title2.setText(list.get(position).getSlogan()); + + ImageLoader.getInstance().displayImage( + Url.urlHtml+list.get(position).getImg(), holder.iv_exchange_video, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + + + return convertView; + + } + class Holder { + RoundImageView iv_exchange_video; + TextView tv_exchange_title,tv_exchange_title2,tv_red1,tv_red2,tv_red3; + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvDownloadListViewAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvDownloadListViewAdapter.java new file mode 100644 index 0000000..019de87 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvDownloadListViewAdapter.java @@ -0,0 +1,804 @@ +package cn.shangyu.gdxzExpert.polyvplayer.adapter; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.easefun.polyvsdk.PolyvDownloader; +import com.easefun.polyvsdk.PolyvDownloaderErrorReason; +import com.easefun.polyvsdk.PolyvDownloaderManager; +import com.easefun.polyvsdk.download.listener.IPolyvDownloaderProgressListener; +import com.easefun.polyvsdk.download.listener.IPolyvDownloaderSpeedListener; +import com.easefun.polyvsdk.download.listener.IPolyvDownloaderStartListener; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.lang.ref.WeakReference; +import java.text.DecimalFormat; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PolyvDownloadInfo; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.database.PolyvDownloadSQLiteHelper; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvErrorMessageUtils; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.FileUtils; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.RoundImageView; + +import static cn.shangyu.gdxzExpert.polyvplayer.fragment.PolyvDownloadFragment.DOWNEND; +import static cn.shangyu.gdxzExpert.polyvplayer.fragment.PolyvDownloadFragment.DOWNING; + +public class PolyvDownloadListViewAdapter extends BaseAdapter { + private static final String TAG = PolyvDownloadListViewAdapter.class.getSimpleName(); + private static final String DOWNLOADED = "已下载"; + private static final String DOWNLOADING = "正在下载"; + private static final String PAUSEED = "暂停下载"; + private static final String WAITED = "等待下载"; + private static PolyvDownloadSQLiteHelper downloadSQLiteHelper; + private static Context appContext; + private Context context; + private ListView lv_download; + private List lists; + private LayoutInflater inflater; + private ViewHolder viewHolder; + private boolean isEdit; + private Handler mHandler; + public PolyvDownloadListViewAdapter(List lists, Context context, ListView lv_download, Handler mHandler) { + this.lists = lists; + this.context = context; + appContext = context.getApplicationContext(); + this.inflater = LayoutInflater.from(this.context); + this.lv_download = lv_download; + downloadSQLiteHelper = PolyvDownloadSQLiteHelper.getInstance(this.context); + init(); + this.mHandler = mHandler; + } + + private void init() { + for (int i = 0; i < lists.size(); i++) { + PolyvDownloadInfo downloadInfo = lists.get(i); + String vid = downloadInfo.getVid(); + int bitrate = downloadInfo.getBitrate(); + PolyvDownloaderManager.getPolyvDownloader(vid, bitrate); + } + } + + /** + * 删除选中任务 + */ + public void deleteAllTask() { + for (int i = 0; i < lists.size(); i++) { + PolyvDownloadInfo downloadInfo = lists.get(i); + if (downloadInfo.isCheck()){ + + //移除任务 + PolyvDownloader downloader = PolyvDownloaderManager.clearPolyvDownload(downloadInfo.getVid(), downloadInfo.getBitrate()); + //删除文件 + downloader.deleteVideo(); + //移除数据库的下载信息 + downloadSQLiteHelper.delete(downloadInfo); + lists.remove(i--); + } + + } + + notifyDataSetChanged(); + } + + + + + + @Override + public int getCount() { + return lists.size(); + } + + @Override + public Object getItem(int position) { + return lists.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + if (convertView == null) { + viewHolder = new ViewHolder(); + if(CommonUtil.BigModule()) + { + convertView = LayoutInflater.from(context).inflate(R.layout.polyv_listview_download_item_big, null); + } + else + { + convertView = LayoutInflater.from(context).inflate(R.layout.polyv_listview_download_item, null); + } + viewHolder.iv_start = (RoundImageView) convertView.findViewById(R.id.iv_start); + viewHolder.tv_size = (TextView) convertView.findViewById(R.id.tv_size); + viewHolder.tv_speed = (TextView) convertView.findViewById(R.id.tv_speed); + viewHolder.tv_status = (TextView) convertView.findViewById(R.id.tv_status); + viewHolder.tv_title = (TextView) convertView.findViewById(R.id.tv_title); + viewHolder.pb_progress = (ProgressBar) convertView.findViewById(R.id.pb_progress); + viewHolder.tv_video_long = (TextView) convertView.findViewById(R.id.tv_video_long); + viewHolder.tv_author = (TextView) convertView.findViewById(R.id.tv_author); + viewHolder.iv_video_Long = (ImageView) convertView.findViewById(R.id.iv_video_Long); + viewHolder.sl_download = (RelativeLayout) convertView.findViewById(R.id.sl_download); + viewHolder.cb_check = (ImageView) convertView.findViewById(R.id.cb_check); + viewHolder.rl_check = (RelativeLayout) convertView.findViewById(R.id.rl_check); + convertView.setTag(viewHolder); + } else { + viewHolder = (ViewHolder) convertView.getTag(); + } + final PolyvDownloadInfo downloadInfo = lists.get(position); + String vid = downloadInfo.getVid(); + int bitrate = downloadInfo.getBitrate(); + long percent = downloadInfo.getPercent(); + long total = downloadInfo.getTotal(); + String title = downloadInfo.getTitle(); + long filesize = downloadInfo.getFilesize(); + String duration = downloadInfo.getDuration(); + String author = downloadInfo.getAuthor(); + String img = downloadInfo.getHeadImg(); + final boolean check = downloadInfo.isCheck(); + // 已下载的百分比 + int progress = 0; + if (total != 0) { + progress = (int) (percent * 100 / total); + } + /** + * 编辑/取消 + * */ + if (isEdit){ + viewHolder.rl_check.setVisibility(View.VISIBLE); + }else { + viewHolder.rl_check.setVisibility(View.GONE); + } + if (check){ + if(CommonUtil.BigModule()) + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true_big); + } + else + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true); + } + + }else { + if(CommonUtil.BigModule()) + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false_big); + } + else + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false); + } + } + viewHolder.rl_check.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (check){ + downloadInfo.setCheck(false); + if(CommonUtil.BigModule()) + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false_big); + } + else + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false); + } + + }else { + downloadInfo.setCheck(true); + if(CommonUtil.BigModule()) + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true_big); + } + else + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true); + } + } + mHandler.sendEmptyMessage(0); + } + }); + + + PolyvDownloader downloader = PolyvDownloaderManager.getPolyvDownloader(vid, bitrate); + viewHolder.pb_progress.setVisibility(View.GONE);//VISIBLE + viewHolder.tv_speed.setVisibility(View.VISIBLE); + viewHolder.tv_status.setSelected(false); + viewHolder.tv_author.setText(author); + ImageLoader.getInstance().displayImage( + Url.urlHtml+img, viewHolder.iv_start, + ImageOptions.getImageOptions(R.drawable.default_news_iv)); + if (progress == 100) { + int i = duration.length() - 2; + String substring = duration.substring(0, i); + viewHolder.tv_video_long.setText(""+getTime(Integer.parseInt(substring))); +// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_play); + viewHolder.tv_status.setText(DOWNLOADED); + if(CommonUtil.BigModule()) + { + viewHolder.iv_video_Long.setImageResource(R.drawable.video_long_big); + } + else + { + viewHolder.iv_video_Long.setImageResource(R.drawable.video_long); + } + viewHolder.pb_progress.setVisibility(View.GONE); + viewHolder.tv_speed.setVisibility(View.GONE); + } else if (downloader.isDownloading()) { +// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_dlpause); + viewHolder.tv_status.setText(DOWNLOADING); + viewHolder.tv_video_long.setText("停止"); + if(CommonUtil.BigModule()) + { + viewHolder.iv_video_Long.setImageResource(R.drawable.down_false_big); + } + else + { + viewHolder.iv_video_Long.setImageResource(R.drawable.down_false); + } +// viewHolder.tv_speed.setText("0.00B/S"); + } else if (PolyvDownloaderManager.isWaitingDownload(vid, bitrate)) { +// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_download); + viewHolder.tv_status.setText(WAITED); + viewHolder.tv_video_long.setText("等待"); + viewHolder.iv_video_Long.setImageResource(R.drawable.video_long); + viewHolder.tv_status.setSelected(true); + viewHolder.tv_speed.setText(FileUtils.formatFileSize(filesize * progress / 100)+"/"); + } else { +// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_download); + viewHolder.tv_status.setText(PAUSEED); + viewHolder.tv_status.setSelected(true); + viewHolder.tv_video_long.setText("继续"); + if(CommonUtil.BigModule()) + { + viewHolder.iv_video_Long.setImageResource(R.drawable.down_true_big); + } + else + { + viewHolder.iv_video_Long.setImageResource(R.drawable.down_true); + } + + viewHolder.tv_speed.setText(FileUtils.formatFileSize(filesize * progress / 100)+"/"); + } + + viewHolder.tv_title.setText(title); + viewHolder.tv_size.setText(FileUtils.formatFileSize(filesize)); +// viewHolder.pb_progress.setProgress(progress); + viewHolder.sl_download.setOnClickListener(new DownloadOnClickListener(downloadInfo, viewHolder.iv_start, viewHolder.tv_status, viewHolder.tv_speed, viewHolder.tv_video_long,viewHolder.iv_video_Long)); + viewHolder.setDownloadListener(downloader, downloadInfo, position, lists,mHandler); + return convertView; + } + + +// @Override +// public View getView(int position, ViewGroup parent) { +// View view = LayoutInflater.from(context).inflate(R.layout.polyv_listview_download_item, null); +//// SwipeLayout swipeLayout = (SwipeLayout) view.findViewById(getSwipeLayoutResourceId(position)); +//// swipeLayout.setShowMode(SwipeLayout.ShowMode.LayDown); +//// swipeLayout.addDrag(SwipeLayout.DragEdge.Right, swipeLayout.findViewWithTag("ll_delete")); +//// swipeLayout.setSwipeEnabled(false); +// viewHolder = new ViewHolder(); +// viewHolder.iv_start = (RoundImageView) view.findViewById(R.id.iv_start); +// viewHolder.tv_size = (TextView) view.findViewById(R.id.tv_size); +// viewHolder.tv_speed = (TextView) view.findViewById(R.id.tv_speed); +// viewHolder.tv_status = (TextView) view.findViewById(R.id.tv_status); +// viewHolder.tv_title = (TextView) view.findViewById(R.id.tv_title); +// viewHolder.pb_progress = (ProgressBar) view.findViewById(R.id.pb_progress); +// viewHolder.tv_video_long = (TextView) view.findViewById(R.id.tv_video_long); +// viewHolder.tv_author = (TextView) view.findViewById(R.id.tv_author); +// viewHolder.iv_video_Long = (ImageView) view.findViewById(R.id.iv_video_Long); +// viewHolder.sl_download = (SwipeLayout) view.findViewById(R.id.sl_download); +// viewHolder.cb_check = (ImageView) view.findViewById(R.id.cb_check); +// viewHolder.rl_check = (RelativeLayout) view.findViewById(R.id.rl_check); +// view.setTag(viewHolder); +// return view; +// } +// +// @Override +// public void fillValues(final int position, View convertView) { +// viewHolder = (ViewHolder) convertView.getTag(); +// +// final PolyvDownloadInfo downloadInfo = lists.get(position); +// String vid = downloadInfo.getVid(); +// int bitrate = downloadInfo.getBitrate(); +// long percent = downloadInfo.getPercent(); +// long total = downloadInfo.getTotal(); +// String title = downloadInfo.getTitle(); +// long filesize = downloadInfo.getFilesize(); +// String duration = downloadInfo.getDuration(); +// String author = downloadInfo.getAuthor(); +// String img = downloadInfo.getHeadImg(); +// final boolean check = downloadInfo.isCheck(); +// // 已下载的百分比 +// int progress = 0; +// if (total != 0) { +// progress = (int) (percent * 100 / total); +// } +// /** +// * 编辑/取消 +// * */ +// if (isEdit){ +// viewHolder.rl_check.setVisibility(View.VISIBLE); +// }else { +// viewHolder.rl_check.setVisibility(View.GONE); +// } +// if (check){ +// viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true); +// }else { +// viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false); +// } +// viewHolder.rl_check.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// if (check){ +// downloadInfo.setCheck(false); +// viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false); +// }else { +// downloadInfo.setCheck(true); +// viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true); +// } +// mHandler.sendEmptyMessage(0); +// } +// }); +// +// +// PolyvDownloader downloader = PolyvDownloaderManager.getPolyvDownloader(vid, bitrate); +// viewHolder.pb_progress.setVisibility(View.GONE);//VISIBLE +// viewHolder.tv_speed.setVisibility(View.VISIBLE); +// viewHolder.tv_status.setSelected(false); +// viewHolder.tv_author.setText(author); +// ImageLoader.getInstance().displayImage( +// Url.urlHtml+img, viewHolder.iv_start, +// ImageOptions.getImageOptions(R.drawable.default_news_iv)); +// if (progress == 100) { +// int i = duration.length() - 2; +// String substring = duration.substring(0, i); +// viewHolder.tv_video_long.setText(""+getTime(Integer.parseInt(substring))); +//// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_play); +// viewHolder.tv_status.setText(DOWNLOADED); +// viewHolder.iv_video_Long.setImageResource(R.drawable.video_long); +// viewHolder.pb_progress.setVisibility(View.GONE); +// viewHolder.tv_speed.setVisibility(View.GONE); +// } else if (downloader.isDownloading()) { +//// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_dlpause); +// viewHolder.tv_status.setText(DOWNLOADING); +// viewHolder.tv_video_long.setText("停止"); +// viewHolder.iv_video_Long.setImageResource(R.drawable.down_false); +//// viewHolder.tv_speed.setText("0.00B/S"); +// } else if (PolyvDownloaderManager.isWaitingDownload(vid, bitrate)) { +//// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_download); +// viewHolder.tv_status.setText(WAITED); +// viewHolder.tv_video_long.setText("继续"); +// viewHolder.iv_video_Long.setImageResource(R.drawable.down_true); +// viewHolder.tv_status.setSelected(true); +// viewHolder.tv_speed.setText(Formatter.formatFileSize(context, filesize * progress / 100)+"/"); +// } else { +//// viewHolder.iv_start.setImageResource(R.drawable.polyv_btn_download); +// viewHolder.tv_status.setText(PAUSEED); +// viewHolder.tv_status.setSelected(true); +// viewHolder.tv_video_long.setText("继续"); +// viewHolder.iv_video_Long.setImageResource(R.drawable.down_true); +// viewHolder.tv_speed.setText(Formatter.formatFileSize(context, filesize * progress / 100)+"/"); +// } +// +// viewHolder.tv_title.setText(title); +// viewHolder.tv_size.setText(Formatter.formatFileSize(context, filesize)); +//// viewHolder.pb_progress.setProgress(progress); +// viewHolder.sl_download.setOnClickListener(new DownloadOnClickListener(downloadInfo, viewHolder.iv_start, viewHolder.tv_status, viewHolder.tv_speed, viewHolder.tv_video_long,viewHolder.iv_video_Long)); +// viewHolder.setDownloadListener(downloader, downloadInfo, position, lists); +// +// } + public static String getTime(int second) { + if (second < 10) { + return "00:00:0" + second; + } + if (second < 60) { + return "00:00:" + second; + } + if (second < 3600) { + int minute = second / 60; + second = second - minute * 60; + if (minute < 10) { + if (second < 10) { + return "00:0" + minute + ":0" + second; + } + return "00:0" + minute + ":" + second; + } + if (second < 10) { + return "00:"+minute + ":0" + second; + } + return "00:"+minute + ":" + second; + } + int hour = second / 3600; + int minute = (second - hour * 3600) / 60; + second = second - hour * 3600 - minute * 60; + if (hour < 10) { + if (minute < 10) { + if (second < 10) { + return "0" + hour + ":0" + minute + ":0" + second; + } + return "0" + hour + ":0" + minute + ":" + second; + } + if (second < 10) { + return "0" + hour +":"+ minute + ":0" + second; + } + return "0" + hour +":"+ minute + ":" + second; + } + if (minute < 10) { + if (second < 10) { + return hour + ":0" + minute + ":0" + second; + } + return hour + ":0" + minute + ":" + second; + } + if (second < 10) { + return hour +":"+ minute + ":0" + second; + } + return hour +":"+ minute + ":" + second; + } + + public void setEditData(boolean b) { + this.isEdit = b; + } + + public interface DownloadSuccessListener { + void onDownloadSuccess(PolyvDownloadInfo downloadInfo); + } + + private static DownloadSuccessListener downloadSuccessListener; + + public void setDownloadSuccessListener(DownloadSuccessListener downloadSuccessListener) { + this.downloadSuccessListener = downloadSuccessListener; + } + + private static class MyDownloadListener implements IPolyvDownloaderProgressListener { + private WeakReference contextWeakReference; + private WeakReference wr_lv_download; + private WeakReference viewHolder1; + private PolyvDownloadInfo downloadInfo; + private List lists; + private Handler handlerListener; + private int position; + private long total; + + MyDownloadListener(Context context, ListView lv_download, ViewHolder viewHolder, PolyvDownloadInfo downloadInfo, int position, List lists,Handler handlerListener) { + this.contextWeakReference = new WeakReference<>(context); + this.wr_lv_download = new WeakReference<>(lv_download); + this.viewHolder1 = new WeakReference<>(viewHolder); + this.downloadInfo = downloadInfo; + this.position = position; + this.lists = lists; + this.handlerListener = handlerListener; + } + + private boolean canUpdateView() { + ListView lv_download = wr_lv_download.get(); + return lv_download != null && viewHolder1.get() != null && lv_download.getChildAt(position - lv_download.getFirstVisiblePosition()) != null; + } + + private void removeToDownloadedQueue(int position) { + if (position>=lists.size()){//防止数组越界 + position = 0; + PolyvDownloadInfo downloadInfo = lists.remove(position); + ((BaseAdapter) wr_lv_download.get().getAdapter()).notifyDataSetChanged(); + if (downloadSuccessListener != null) { + downloadSuccessListener.onDownloadSuccess(downloadInfo); + } + }else { + PolyvDownloadInfo downloadInfo = lists.remove(position); + ((BaseAdapter) wr_lv_download.get().getAdapter()).notifyDataSetChanged(); + if (downloadSuccessListener != null) { + downloadSuccessListener.onDownloadSuccess(downloadInfo); + } + } + + } + + @Override + public void onDownload(long current, long total) { + this.total = total; + downloadInfo.setPercent(current); + downloadInfo.setTotal(total); + downloadSQLiteHelper.update(downloadInfo, current, total); + if (canUpdateView()) { + // 已下载的百分比 + int progress = (int) (current * 100 / total); + viewHolder1.get().pb_progress.setProgress(progress); + String s = viewHolder1.get().tv_size.getText().toString(); + String substring = s.substring(0, s.length() - 1); + double v = Double.parseDouble(substring); + double v1 = v * progress/100; + DecimalFormat df = new DecimalFormat("0.00");//格式化,区小数后两位 + final String format = df.format(v1); + viewHolder1.get().tv_speed.setText(format+"M"+"/"); + viewHolder1.get().tv_video_long.setText("停止"); + if(CommonUtil.BigModule()) + { + viewHolder1.get().iv_video_Long.setImageResource(R.drawable.down_false_big); + } + else + { + viewHolder1.get().iv_video_Long.setImageResource(R.drawable.down_false); + } + handlerListener.sendEmptyMessage(DOWNING); +// showPauseSpeeView(downloadInfo, viewHolder1.get().tv_speed); + } + + } + + @Override + public void onDownloadSuccess() { + if (total == 0) + total = 1; + downloadInfo.setPercent(total); + downloadInfo.setTotal(total); + downloadSQLiteHelper.update(downloadInfo, total, total); + if (canUpdateView()) { + viewHolder1.get().tv_status.setText(DOWNLOADED); + viewHolder1.get().tv_status.setSelected(false); + viewHolder1.get().tv_video_long.setText("继续"); + if(CommonUtil.BigModule()) + { + viewHolder1.get().iv_video_Long.setImageResource(R.drawable.video_long_big); + } + else + { + viewHolder1.get().iv_video_Long.setImageResource(R.drawable.video_long); + } + viewHolder1.get().pb_progress.setVisibility(View.GONE); + viewHolder1.get().tv_speed.setVisibility(View.GONE); + ToastUtil.showMessage(downloadInfo.getTitle()+ "下载成功"); + Message obtain = Message.obtain(); + obtain.obj = downloadInfo.getVid(); + obtain.what = DOWNEND; + handlerListener.sendMessage(obtain); + removeToDownloadedQueue(position); + } + } + + @Override + public void onDownloadFail(@NonNull PolyvDownloaderErrorReason errorReason) { + if (canUpdateView()) { + viewHolder1.get().tv_status.setText(PAUSEED); + viewHolder1.get().tv_status.setSelected(true); + showPauseSpeeView(downloadInfo, viewHolder1.get().tv_speed); + String message = "第" + (position + 1) + "个任务"; + message += PolyvErrorMessageUtils.getDownloaderErrorMessage(errorReason.getType()); + viewHolder1.get().tv_video_long.setText("继续"); + if(CommonUtil.BigModule()) + { + viewHolder1.get().iv_video_Long.setImageResource(R.drawable.down_true_big); + } + else + { + viewHolder1.get().iv_video_Long.setImageResource(R.drawable.down_true); + } + + handlerListener.sendEmptyMessage(DOWNING); + AlertDialog.Builder builder = new AlertDialog.Builder(contextWeakReference.get()); + builder.setTitle("错误"); + builder.setMessage(message); + builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + dialog.dismiss(); + } + }); + + try{ + builder.show(); + }catch (Exception e){ + ToastUtil.showMessage(message); + } + } + } + } + + private static class MyDownloadSpeedListener implements IPolyvDownloaderSpeedListener { + private WeakReference wr_lv_download; + private WeakReference viewHolder; + private PolyvDownloader downloader; + private int position; + + public MyDownloadSpeedListener(ListView lv_download, ViewHolder viewHolder, PolyvDownloader downloader, int position) { + this.wr_lv_download = new WeakReference(lv_download); + this.viewHolder = new WeakReference(viewHolder); + this.downloader = downloader; + this.position = position; + } + + private boolean canUpdateView() { + ListView lv_download = wr_lv_download.get(); + return lv_download != null && viewHolder.get() != null && lv_download.getChildAt(position - lv_download.getFirstVisiblePosition()) != null; + } + + @Override + public void onSpeed(int speed) { + LogUtil.e("下载速度"+speed); + + } + } + + private static class MyDownloaderStartListener implements IPolyvDownloaderStartListener { + private WeakReference wr_lv_download; + private WeakReference viewHolder; + private int position; + + public MyDownloaderStartListener(ListView lv_download, ViewHolder viewHolder, int position) { + this.wr_lv_download = new WeakReference(lv_download); + this.viewHolder = new WeakReference(viewHolder); + this.position = position; + } + + private boolean canUpdateView() { + ListView lv_download = wr_lv_download.get(); + return lv_download != null && viewHolder.get() != null && lv_download.getChildAt(position - lv_download.getFirstVisiblePosition()) != null; + } + + @Override + public void onStart() { + if (canUpdateView()) { + viewHolder.get().tv_status.setText(DOWNLOADING); + viewHolder.get().tv_status.setSelected(false); + } + } + } + + private static void showPauseSpeeView(PolyvDownloadInfo downloadInfo, TextView tv_speed) { + long percent = downloadInfo.getPercent(); + long total = downloadInfo.getTotal(); + int progress = 0; + if (total != 0) + progress = (int) (percent * 100 / total); + // 已下载的文件大小 + long downloaded = downloadInfo.getFilesize() * progress / 100; + tv_speed.setText(FileUtils.formatFileSize( downloaded)+"/"); + } + + private class ViewHolder { + RoundImageView iv_start; + ImageView iv_video_Long; + TextView tv_title, tv_size, tv_status, tv_speed; + ProgressBar pb_progress; + TextView tv_video_long; + TextView tv_author; + RelativeLayout sl_download; + ImageView cb_check; + RelativeLayout rl_check; + + public void setDownloadListener(PolyvDownloader downloader, final PolyvDownloadInfo downloadInfo, final int position, List lists,Handler handler) { + downloader.setPolyvDownloadSpeedListener(new MyDownloadSpeedListener(lv_download, this, downloader, position)); + downloader.setPolyvDownloadProressListener(new MyDownloadListener(context, lv_download, this, downloadInfo, position, lists,handler)); + downloader.setPolyvDownloadStartListener(new MyDownloaderStartListener(lv_download, this, position)); + } + } + + private class DownloadOnClickListener implements View.OnClickListener { + private PolyvDownloadInfo downloadInfo; + private ImageView iv_start; + private TextView tv_status; + private TextView tv_speed; + private TextView tv_video_long; + private ImageView iv_video_long; + + public DownloadOnClickListener(PolyvDownloadInfo downloadInfo, ImageView iv_start, TextView tv_status, TextView tv_speed,TextView tv_video_long,ImageView iv_video_long) { + this.downloadInfo = downloadInfo; + this.iv_start = iv_start; + this.tv_status = tv_status; + this.tv_speed = tv_speed; + this.tv_video_long = tv_video_long; + this.iv_video_long = iv_video_long; + } + + @Override + public void onClick(View v) { + boolean check = downloadInfo.isCheck(); + if (!isEdit){ + String vid = downloadInfo.getVid(); + int bitrate = downloadInfo.getBitrate(); + + final PolyvDownloader downloader = PolyvDownloaderManager.getPolyvDownloader(vid, bitrate); + if (tv_status.getText().equals(DOWNLOADED)) {//已下载 + Intent intent = VideoDetailPolyvPlayerActivity.newIntent(context, VideoDetailPolyvPlayerActivity.PlayMode.portrait,vid); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent.putExtra("startNow", true); + intent.putExtra("isVlmsOnline", false); + intent.putExtra("uuid",downloadInfo.getUuid()); + intent.putExtra("mustplay",true); + context.startActivity(intent); + + } else if (tv_status.getText().equals(DOWNLOADING) || tv_status.getText().equals(WAITED)) { + tv_status.setText(PAUSEED); + tv_status.setSelected(true); + tv_video_long.setText("继续"); + if(CommonUtil.BigModule()) + { + iv_video_long.setImageResource(R.drawable.down_true_big); + } + else + { + iv_video_long.setImageResource(R.drawable.down_true); + } + downloader.stop(); + showPauseSpeeView(downloadInfo, tv_speed); + } else { + tv_status.setText(DOWNLOADING); + tv_status.setSelected(false); + tv_video_long.setText("停止"); + if(CommonUtil.BigModule()) + { + iv_video_long.setImageResource(R.drawable.down_false_big); + } + else + { + iv_video_long.setImageResource(R.drawable.down_false); + } + + downloader.start(context); + if (!downloader.isDownloading() && PolyvDownloaderManager.isWaitingDownload(vid, bitrate)) { + tv_status.setText(WAITED); + tv_video_long.setText("等待"); + if(CommonUtil.BigModule()) + { + iv_video_long.setImageResource(R.drawable.video_long_big); + } + else + { + iv_video_long.setImageResource(R.drawable.video_long); + } + tv_status.setSelected(true); + } + } + }else { + if (check){ + downloadInfo.setCheck(false); + if(CommonUtil.BigModule()) + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false_big); + } + else + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_false); + } + + }else { + downloadInfo.setCheck(true); + if(CommonUtil.BigModule()) + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true_big); + } + else + { + viewHolder.cb_check.setBackgroundResource(R.drawable.check_video_true); + } + + } + mHandler.sendEmptyMessage(0); + } + + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvPlayerFragmentAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvPlayerFragmentAdapter.java new file mode 100644 index 0000000..401434f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/adapter/PolyvPlayerFragmentAdapter.java @@ -0,0 +1,32 @@ +package cn.shangyu.gdxzExpert.polyvplayer.adapter; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentPagerAdapter; + +import java.util.ArrayList; +import java.util.List; + +public class PolyvPlayerFragmentAdapter extends FragmentPagerAdapter { + List fragmentList = new ArrayList(); + + public PolyvPlayerFragmentAdapter(FragmentManager fm) { + super(fm); + } + + public PolyvPlayerFragmentAdapter(FragmentManager fm, List fragmentList) { + super(fm); + this.fragmentList = fragmentList; + } + + @Override + public Fragment getItem(int position) { + return fragmentList.get(position); + } + + @Override + public int getCount() { + return fragmentList.size(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/cast/PolyvIUIUpdateListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/cast/PolyvIUIUpdateListener.java new file mode 100644 index 0000000..4cf6efe --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/cast/PolyvIUIUpdateListener.java @@ -0,0 +1,26 @@ +package cn.shangyu.gdxzExpert.polyvplayer.cast; + +public interface PolyvIUIUpdateListener { + + int STATE_SEARCH_SUCCESS = 1; + int STATE_SEARCH_ERROR = 2; + int STATE_SEARCH_NO_RESULT = 3; + int STATE_CONNECT_SUCCESS = 10; + int STATE_DISCONNECT = 11;// 连接断开 + int STATE_CONNECT_FAILURE = 12;// 连接失败 + int STATE_PLAY = 20; + int STATE_PAUSE = 21; + int STATE_COMPLETION = 22; + int STATE_STOP = 23; + int STATE_SEEK = 24; + int STATE_POSITION_UPDATE = 25; + int STATE_PLAY_ERROR = 26; + int STATE_LOADING = 27; + int STATE_INPUT_SCREENCODE = 28; + int RELEVANCE_DATA_UNSUPPORT = 29; + + void onUpdateState(int state, Object object); + + void onUpdateText(String msg); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvDownloadSQLiteHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvDownloadSQLiteHelper.java new file mode 100644 index 0000000..b7b1ef8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvDownloadSQLiteHelper.java @@ -0,0 +1,161 @@ +package cn.shangyu.gdxzExpert.polyvplayer.database; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import java.util.LinkedList; + +import cn.shangyu.gdxzExpert.bean.PolyvDownloadInfo; + + +public class PolyvDownloadSQLiteHelper extends SQLiteOpenHelper { + private static PolyvDownloadSQLiteHelper sqLiteHelper; + private static final String DATABASENAME = "downloadlist.db"; + private static final int VERSION = 6; + + public static PolyvDownloadSQLiteHelper getInstance(Context context) { + if (sqLiteHelper == null) { + synchronized (PolyvDownloadSQLiteHelper.class) { + if (sqLiteHelper == null) + sqLiteHelper = new PolyvDownloadSQLiteHelper(context.getApplicationContext(), DATABASENAME, null, VERSION); + } + } + return sqLiteHelper; + } + + private PolyvDownloadSQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { + super(context, name, factory, version); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL( + "create table if not exists downloadlist(vid varchar(20),title varchar(100),duration varchar(20),filesize int,bitrate int,percent int default 0,total int default 0,img varchar(100),author varchar(20),uuid varchar(100),primary key (vid, bitrate))"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("drop table if exists downloadlist"); + onCreate(db); + } + + /** + * 添加下载信息至数据库 + * @param info + */ + public void insert(PolyvDownloadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "insert into downloadlist(vid,title,duration,filesize,bitrate,img,author,uuid) values(?,?,?,?,?,?,?,?)"; + db.execSQL(sql, new Object[]{info.getVid(), info.getTitle(), info.getDuration(),info.getFilesize(), info.getBitrate(),info.getHeadImg(),info.getAuthor(),info.getUuid()}); + } + + /** + * 移除下载信息从数据库中 + * @param info + */ + public void delete(PolyvDownloadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "delete from downloadlist where vid=? and bitrate=?"; + db.execSQL(sql, new Object[]{info.getVid(), info.getBitrate()}); + } + + /** + * 更新下载的进度至数据库 + * @param info + * @param percent + * @param total + */ + public void update(PolyvDownloadInfo info, long percent, long total) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "update downloadlist set percent=?,total=? where vid=? and bitrate=?"; + db.execSQL(sql, new Object[]{percent, total, info.getVid(), info.getBitrate()}); + } + + /** + * 判断该下载信息是否已以添加过 + * @param info + * @return + */ + public boolean isAdd(PolyvDownloadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "select vid ,duration,filesize,bitrate from downloadlist where vid=? and bitrate=?"; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql, new String[]{info.getVid(), info.getBitrate() + ""}); + return cursor.getCount() == 1 ? true : false; + } finally { + if (cursor != null) + cursor.close(); + } + } + + /** + * 获取所有的下载信息对象 + * @return + */ + public LinkedList getAll() { + LinkedList infos = new LinkedList(); + SQLiteDatabase db = getWritableDatabase(); + String sql = "select vid,title,duration,filesize,bitrate,percent,total,img,author,uuid from downloadlist"; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql, null); + while (cursor.moveToNext()) { + String vid = cursor.getString(cursor.getColumnIndex("vid")); + String title = cursor.getString(cursor.getColumnIndex("title")); + String duration = cursor.getString(cursor.getColumnIndex("duration")); + long filesize = cursor.getInt(cursor.getColumnIndex("filesize")); + int bitrate = cursor.getInt(cursor.getColumnIndex("bitrate")); + long percent = cursor.getInt(cursor.getColumnIndex("percent")); + long total = cursor.getInt(cursor.getColumnIndex("total")); + String img = cursor.getString(cursor.getColumnIndex("img")); + String author = cursor.getString(cursor.getColumnIndex("author")); + String uuid = cursor.getString(cursor.getColumnIndex("uuid")); + PolyvDownloadInfo info = new PolyvDownloadInfo(vid, duration, filesize, bitrate, title,img,author,uuid); + info.setPercent(percent); + info.setTotal(total); + infos.addLast(info); + } + } finally { + if (cursor != null) + cursor.close(); + } + return infos; + } + + /** + * 获取某个的下载信息对象 + * @return + */ + public LinkedList getloadInfo(String vid1) { + LinkedList infos = new LinkedList(); + SQLiteDatabase db = getWritableDatabase(); + String sql = "select vid,title,duration,filesize,bitrate,percent,total,img,author,uuid from downloadlist where vid=?"; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql, new String[]{vid1}); + while (cursor.moveToNext()) { + String vid = cursor.getString(cursor.getColumnIndex("vid")); + String title = cursor.getString(cursor.getColumnIndex("title")); + String duration = cursor.getString(cursor.getColumnIndex("duration")); + long filesize = cursor.getInt(cursor.getColumnIndex("filesize")); + int bitrate = cursor.getInt(cursor.getColumnIndex("bitrate")); + long percent = cursor.getInt(cursor.getColumnIndex("percent")); + long total = cursor.getInt(cursor.getColumnIndex("total")); + String img = cursor.getString(cursor.getColumnIndex("img")); + String author = cursor.getString(cursor.getColumnIndex("author")); + String uuid = cursor.getString(cursor.getColumnIndex("uuid")); + PolyvDownloadInfo info = new PolyvDownloadInfo(vid, duration, filesize, bitrate, title,img,author,uuid); + info.setPercent(percent); + info.setTotal(total); + infos.addLast(info); + } + } finally { + if (cursor != null) + cursor.close(); + } + return infos; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvUploadSQLiteHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvUploadSQLiteHelper.java new file mode 100644 index 0000000..456c5e2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/database/PolyvUploadSQLiteHelper.java @@ -0,0 +1,135 @@ +package cn.shangyu.gdxzExpert.polyvplayer.database; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +import java.util.LinkedList; + +import cn.shangyu.gdxzExpert.bean.PolyvUploadInfo; + + +public class PolyvUploadSQLiteHelper extends SQLiteOpenHelper{ + private static PolyvUploadSQLiteHelper sqLiteHelper; + private static final String DATABASENAME = "uploadlist.db"; + private static final int VERSION = 6; + + public static PolyvUploadSQLiteHelper getInstance(Context context) { + if (sqLiteHelper == null) { + synchronized (PolyvUploadSQLiteHelper.class) { + if (sqLiteHelper == null) + sqLiteHelper = new PolyvUploadSQLiteHelper(context.getApplicationContext(), DATABASENAME, null, VERSION); + } + } + return sqLiteHelper; + } + + private PolyvUploadSQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { + super(context, name, factory, version); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL( + "create table if not exists uploadlist(title varchar(100),filepath varchar(120),desc varchar(20),filesize int,percent int default 0,total int default 0,cataid varchar(20),primary key (filepath))"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.execSQL("drop table if exists uploadlist"); + onCreate(db); + } + + /** + * 添加上传信息至数据库 + * @param info + */ + public void insert(PolyvUploadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "insert into uploadlist(title,desc,filesize,filepath,cataid) values(?,?,?,?,?)"; + db.execSQL(sql, new Object[] {info.getTitle(), info.getDesc(), info.getFilesize(), + info.getFilepath(),info.getCataid() }); + } + + /** + * 移除上传信息从数据库中 + * @param info + */ + public void delete(PolyvUploadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "delete from uploadlist where filepath=?"; + db.execSQL(sql, new Object[] { info.getFilepath() }); + } + + /** + * 更新上传的分类id至数据库 + * @param info + */ + public void updateCataid(PolyvUploadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "update uploadlist set cataid=? where filepath=?"; + db.execSQL(sql, new Object[]{ info.getCataid(), info.getFilepath() }); + } + + /** + * 更新上传的进度至数据库 + * @param info + * @param percent + * @param total + */ + public void update(PolyvUploadInfo info, long percent, long total) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "update uploadlist set percent=?,total=? where filepath=?"; + db.execSQL(sql, new Object[] { percent, total, info.getFilepath() }); + } + + /** + * 判断该上传信息是否已以添加过 + * @param info + * @return + */ + public boolean isAdd(PolyvUploadInfo info) { + SQLiteDatabase db = getWritableDatabase(); + String sql = "select filepath ,title,desc from uploadlist where filepath=?"; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql, new String[] { info.getFilepath() }); + return cursor.getCount() == 1 ? true : false; + } finally { + if (cursor != null) + cursor.close(); + } + } + + /** + * 获取所有的上传信息对象 + * @return + */ + public LinkedList getAll() { + LinkedList infos = new LinkedList(); + SQLiteDatabase db = getWritableDatabase(); + String sql = "select title,filepath,desc,filesize,percent,total,cataid from uploadlist"; + Cursor cursor = null; + try { + cursor = db.rawQuery(sql, null); + while (cursor.moveToNext()) { + String title = cursor.getString(cursor.getColumnIndex("title")); + String filepath = cursor.getString(cursor.getColumnIndex("filepath")); + String desc = cursor.getString(cursor.getColumnIndex("desc")); + long filesize = cursor.getLong(cursor.getColumnIndex("filesize")); + long percent = cursor.getInt(cursor.getColumnIndex("percent")); + long total = cursor.getInt(cursor.getColumnIndex("total")); + String cataid = cursor.getString(cursor.getColumnIndex("cataid")); + PolyvUploadInfo info = new PolyvUploadInfo(title, desc, filesize, filepath, cataid); + info.setPercent(percent); + info.setTotal(total); + infos.addLast(info); + } + } finally { + if (cursor != null) + cursor.close(); + } + return infos; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/CurriculumFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/CurriculumFragment.java new file mode 100644 index 0000000..ab5c19d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/CurriculumFragment.java @@ -0,0 +1,91 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import android.text.TextPaint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.ListView; +import android.widget.TextView; + +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.polyvplayer.PolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.CurriculumAdapter; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + + +/** + * Created by WANGChengXin on 2019/3/25. + */ + +@SuppressLint("ValidFragment") +public class CurriculumFragment extends Fragment implements AdapterView.OnItemClickListener{ + private View view; + private ListView lv_curriculum; + private TextView tv_mulu_title; + private PolyvPlayerActivity polyvPlayerActivity; + private List list; + private String title; + private CurriculumAdapter adapter; + private int is_paid; + private int is_white; + private String vid; + + + @SuppressLint("ValidFragment") + public CurriculumFragment(PolyvPlayerActivity polyvPlayerActivity, List list, String title, int is_paid, int is_white, String vid) { + this.polyvPlayerActivity = polyvPlayerActivity; + this.list = list; + this.title = title; + this.is_paid = is_paid; + this.is_white = is_white; + this.vid = vid; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + if (view == null) + view = inflater.inflate(R.layout.fragment_curriculum, container, false); + lv_curriculum = view.findViewById(R.id.lv_curriculum); + tv_mulu_title = view.findViewById(R.id.tv_mulu_title); + tv_mulu_title.setText(title); + TextPaint tp = tv_mulu_title.getPaint(); + tp.setFakeBoldText(true); + adapter = new CurriculumAdapter(getActivity(),list); + lv_curriculum.setAdapter(adapter); + lv_curriculum.setOnItemClickListener(this); + + for (int i = 0;i parent, View view, int position, long id) { + if (is_white==1 || is_paid == 1||"1".equals(list.get(position).getType())||"2".equals(list.get(position).getType())){ + polyvPlayerActivity.getVidlistener(list.get(position).getPolyv_uuid(),list.get(position).getUuid()); + adapter.setPlayingPosition(position); + adapter.notifyDataSetChanged(); + + + }else { + ToastUtil.showMessage("请兑换后再点击观看"); + + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/ExchangeFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/ExchangeFragment.java new file mode 100644 index 0000000..e653704 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/ExchangeFragment.java @@ -0,0 +1,131 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight3; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Bundle; +import android.os.Handler; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.JavascriptInterface; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import androidx.fragment.app.Fragment; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.PolyvPlayerActivity; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.view.X5WebView; + +/** + * Created by WANGChengXin on 2019/3/25. + */ + +@SuppressLint("ValidFragment") +public class ExchangeFragment extends Fragment { + private View view; + private WebSettings settings; + private X5WebView wv; + Mobile mobile = new Mobile(); + private String note_url; + private PolyvPlayerActivity polyvPlayerActivity; + private CustomProgressDialog dialog; + private boolean isVisibleToUser; + @SuppressLint("ValidFragment") + public ExchangeFragment(PolyvPlayerActivity polyvPlayerActivity) { + this.polyvPlayerActivity = polyvPlayerActivity; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + if (view == null) + view = inflater.inflate(R.layout.fragment_summary, container, false); + X5WebView.initHardwareAccelerate(getActivity()); + wv = view.findViewById(R.id.wb); + wv.loadUrl("http://doc.igandan.com/app/seriesvideo/notice.html"); + settings = wv.getSettings(); + settings.setJavaScriptEnabled(true);//支持js + wv.setWebViewClient(mClient); + wv.addJavascriptInterface(mobile, "mobile"); + + return view; + } + + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + this.isVisibleToUser = isVisibleToUser; + LogUtil.i("isVisibleToUser = "+isVisibleToUser); + if (isVisibleToUser){ + + } + } + @Override + public void onResume() { + super.onResume(); + if (this.isVisibleToUser) { + + } + } + private class Mobile { + @JavascriptInterface + public void onGetWebContentHeight() { + + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + wv.measure(0, 0); + int measuredHeight = wv.getMeasuredHeight(); + LogUtil.i("measuredHeight32 = "+measuredHeight); + if (fragmentHeight3==0){ + fragmentHeight3 =measuredHeight; + if (isVisibleToUser){ + polyvPlayerActivity.getheightListenr(fragmentHeight3); + } + + } + + } + }, 300); + + + } + } + + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + + private WebViewClient mClient = new WebViewClient() { + + + + @Override + public void onPageFinished(WebView view, String url) { + mobile.onGetWebContentHeight(); + + } + + @Override + public void onLoadResource(WebView view, String url) { + + super.onLoadResource(view, url); + } + + @Override + public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { + super.onReceivedError(view, request, error); + } + }; + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/LazyLoadFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/LazyLoadFragment.java new file mode 100644 index 0000000..847397a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/LazyLoadFragment.java @@ -0,0 +1,128 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Toast; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +/** + * Fragment预加载问题的解决方案: + * 1.可以懒加载的Fragment + * 2.切换到其他页面时停止加载数据(可选) + * Created by yuandl on 2016-11-17. + * blog :http://blog.csdn.net/linglongxin24/article/details/53205878 + */ + +public abstract class LazyLoadFragment extends Fragment { + /** + * 视图是否已经初初始化 + */ + protected boolean isInit = false; + protected boolean isLoad = false; + protected final String TAG = "LazyLoadFragment"; + private View view; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + view = inflater.inflate(setContentView(), container, false); + isInit = true; + /**初始化的时候去加载数据**/ + isCanLoadData(); + return view; + } + + /** + * 视图是否已经对用户可见,系统的方法 + */ + @Override + public void setUserVisibleHint(boolean isVisibleToUser) { + super.setUserVisibleHint(isVisibleToUser); + isCanLoadData(); + } + + /** + * 是否可以加载数据 + * 可以加载数据的条件: + * 1.视图已经初始化 + * 2.视图对用户可见 + */ + private void isCanLoadData() { + if (!isInit) { + return; + } + + if (getUserVisibleHint()) { + lazyLoad(); + isLoad = true; + } else { + if (isLoad) { + stopLoad(); + } + } + } + + /** + * 视图销毁的时候讲Fragment是否初始化的状态变为false + */ + @Override + public void onDestroyView() { + super.onDestroyView(); + isInit = false; + isLoad = false; + + } + + protected void showToast(String message) { + if (!TextUtils.isEmpty(message)) { + Toast.makeText(getContext(), message, Toast.LENGTH_SHORT).show(); + } + + } + + /** + * 设置Fragment要显示的布局 + * + * @return 布局的layoutId + */ + protected abstract int setContentView(); + + /** + * 获取设置的布局 + * + * @return + */ + protected View getContentView() { + return view; + } + + /** + * 找出对应的控件 + * + * @param id + * @param + * @return + */ + protected T findViewById(int id) { + + return (T) getContentView().findViewById(id); + } + + /** + * 当视图初始化并且对用户可见的时候去真正的加载数据 + */ + protected abstract void lazyLoad(); + + /** + * 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以覆写此方法 + */ + protected void stopLoad() { + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvDownloadFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvDownloadFragment.java new file mode 100644 index 0000000..0f9724a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvDownloadFragment.java @@ -0,0 +1,269 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.content.DialogInterface; +import android.content.Intent; +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.CheckBox; +import android.widget.ListView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.PolyvDownloadInfo; +import cn.shangyu.gdxzExpert.polyvplayer.PolyvDownloadActivity; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.PolyvDownloadListViewAdapter; +import cn.shangyu.gdxzExpert.polyvplayer.database.PolyvDownloadSQLiteHelper; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.MemoryTools; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +/** + * 已完成/缓存中 + * */ +@SuppressLint("ValidFragment") +public class PolyvDownloadFragment extends Fragment { + private View view; + private ListView lv_download; + private List downloadInfos;//已完成/缓冲中的集合 + private PolyvDownloadListViewAdapter downloadAdapter; + + private RelativeLayout rl_bot; +// 底部下载全部按钮 +// private LinearLayout ll_downloadall, ll_deleteall; +// // 下载全部的文本控件 +// private TextView tv_downloadall; + private ECAlertDialog buildAlert; + private TextView tv_deleteall; + private TextView tv_all; + private TextView tv_zong; + private TextView tv_zong2; + private CheckBox top_right_text; + public static final int DOWNING = 1; + public static final int DOWNEND = 2; + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { + int i = msg.what; + switch (i){ + case 0: + int k = 0; + for (int j = 0;j(); + downloadInfos.addAll(getTask(PolyvDownloadSQLiteHelper.getInstance(getContext()).getAll(), isFinished)); + downloadAdapter = new PolyvDownloadListViewAdapter(downloadInfos, getContext(), lv_download,mHandler); + if (!isFinished) { + downloadAdapter.setDownloadSuccessListener(new PolyvDownloadListViewAdapter.DownloadSuccessListener() { + @Override + public void onDownloadSuccess(PolyvDownloadInfo downloadInfo) { + ((PolyvDownloadActivity) getActivity()).getDownloadedFragment().addTask(downloadInfo); + } + }); + } + + + lv_download.setAdapter(downloadAdapter); + TextView tv_empty_msg = (TextView) view.findViewById(R.id.tv_empty_msg); + tv_empty_msg.setText("暂无视频"); + lv_download.setEmptyView(view.findViewById(R.id.ll_empty)); + + rl_bot = (RelativeLayout) view.findViewById(R.id.rl_bot); + + tv_deleteall = (TextView) view.findViewById(R.id.tv_deleteall); + tv_zong = (TextView) view.findViewById(R.id.tv_zong); + tv_zong2 = (TextView) view.findViewById(R.id.tv_zong2); + tv_all = (TextView) view.findViewById(R.id.tv_all); +// DrawableCompat.setTint(DrawableCompat.wrap(((ImageView) view.findViewById(R.id.iv_trash)).getDrawable().mutate()), getResources().getColor(R.color.center_bottom_text_color_red)); + + tv_all.setOnClickListener(new View.OnClickListener() {//全选 + @Override + public void onClick(View v) { + if ("全选".equals(tv_all.getText().toString())){ + for (int i = 0;i getTask(List downloadInfos, boolean isFinished) { + if (downloadInfos == null) { + return null; + } + List infos = new ArrayList<>(); + for (PolyvDownloadInfo downloadInfo : downloadInfos) { + long percent = downloadInfo.getPercent(); + long total = downloadInfo.getTotal(); + // 已下载的百分比 + int progress = 0; + if (total != 0) { + progress = (int) (percent * 100 / total); + } + if (progress == 100) { + if (isFinished) { + infos.add(downloadInfo); + } + } else if (!isFinished) { + infos.add(downloadInfo); + } + } + return infos; + } + + @Override + public void onDestroy() { + super.onDestroy(); + downloadAdapter.setDownloadSuccessListener(null); + } + + public void setEdit(boolean b) { + if (b){ + downloadAdapter.setEditData(true); + rl_bot.setVisibility(View.VISIBLE); + }else { + downloadAdapter.setEditData(false); + for (int i = 0;i= 16) + getView().getViewTreeObserver().removeOnGlobalLayoutListener(this); + else + getView().getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + }); + + } + + public void resetViewStatus(int arg0) { + tv_cur.setSelected(false); + tv_sum.setSelected(false); + tv_talk.setSelected(false); + tv_cur.setTextColor(Color.parseColor("#999999")); + tv_sum.setTextColor(Color.parseColor("#999999")); + tv_talk.setTextColor(Color.parseColor("#999999")); + switch (arg0) { + case 0: + tv_cur.setSelected(true); + tv_cur.setTextColor(getResources().getColor(R.color.polyv_tab_text_color)); + lp.leftMargin = (int) (arg0 * (length)) + 1 * eLength; + break; + case 1: + tv_sum.setSelected(true); + tv_sum.setTextColor(getResources().getColor(R.color.polyv_tab_text_color)); + lp.leftMargin = (int) (arg0 * (length)) + 3 * eLength; + break; + case 2: + tv_talk.setSelected(true); + tv_talk.setTextColor(getResources().getColor(R.color.polyv_tab_text_color)); + lp.leftMargin = (int) (arg0 * (length)) + 5 * eLength; + break; + } + v_line.setLayoutParams(lp); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findIdAndNew(); + initView(); + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.tv_talk: + viewPagerFragment.setCurrentItem(2); + break; + case R.id.tv_sum: + viewPagerFragment.setCurrentItem(1); + break; + case R.id.tv_cur: + viewPagerFragment.setCurrentItem(0); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvPlayerViewPagerFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvPlayerViewPagerFragment.java new file mode 100644 index 0000000..59f3cb3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/PolyvPlayerViewPagerFragment.java @@ -0,0 +1,166 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.polyvplayer.PolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.PolyvPlayerFragmentAdapter; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; + +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight1; +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight2; +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight3; + +@SuppressLint("ValidFragment") +public class PolyvPlayerViewPagerFragment extends Fragment { + //fragmentView + private View view; + // 播放页的viewPager + private ViewPager vp_player; + private PolyvPlayerFragmentAdapter adapter; + // 当前的索引 + private int currentIndex; + private List lists; + // 播放页viewpager的fragment + private Fragment curFragment, sumFragment, talkFragment; + private PolyvPlayerTabFragment tabFragment; + private PolyvPlayerActivity polyvPlayerActivity; + private TextView tv_name; + + + @SuppressLint("ValidFragment") + public PolyvPlayerViewPagerFragment(PolyvPlayerActivity polyvPlayerActivity) { + this.polyvPlayerActivity = polyvPlayerActivity; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (view == null) + view = inflater.inflate(R.layout.polyv_fragment_player_viewpager, container, false); + return view; + } + + private void findIdAndNew() { + vp_player = (ViewPager) view.findViewById(R.id.vp_player); + tabFragment = (PolyvPlayerTabFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.fl_tab); + lists = new ArrayList(); + + } + + private void initView() { + Bundle bundle =this.getArguments();//得到从Activity传来的数据 + ListSeriesVideoByTypeBean listSeriesVideoByTypeBean = (ListSeriesVideoByTypeBean) bundle.getSerializable("listSeriesVideoByTypeBean"); + String vid = bundle.getString("vid"); + /**计算fragmentHeight2高度**/ + for (int i = 0;i13){ + fragmentHeight2 = fragmentHeight2+getResources().getDimensionPixelOffset(R.dimen.dp_103); + }else { + fragmentHeight2 = fragmentHeight2+getResources().getDimensionPixelOffset(R.dimen.dp_78); + } + + } + fragmentHeight2 = fragmentHeight2+getResources().getDimensionPixelOffset(R.dimen.dp_78); + if (!StringUtil.isEmpty(vid)){ + LogUtil.i("vid 不为空"); + polyvPlayerActivity.getheightListenr(fragmentHeight2); + } + sumFragment = new SummaryFragment(polyvPlayerActivity,listSeriesVideoByTypeBean.getSeriesType().getNote_url(),vid); + curFragment = new CurriculumFragment(polyvPlayerActivity,listSeriesVideoByTypeBean.getData().getList(),listSeriesVideoByTypeBean.getSeriesType().getTitle(),listSeriesVideoByTypeBean.getSeriesType().getIs_paid(),listSeriesVideoByTypeBean.getSeriesType().getIs_white(),vid); + talkFragment = new ExchangeFragment(polyvPlayerActivity); + + lists.add(sumFragment); + lists.add(curFragment); + lists.add(talkFragment); + for (int i = 0; i < lists.size(); i++) + lists.get(i).setArguments(getActivity().getIntent().getExtras()); + adapter = new PolyvPlayerFragmentAdapter(getActivity().getSupportFragmentManager(), lists); + vp_player.setAdapter(adapter); + if (!StringUtil.isEmpty(vid)){ + vp_player.setCurrentItem(1); + currentIndex = 1; + }else { + vp_player.setCurrentItem(0); + currentIndex = 0; + } + + vp_player.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + + @Override + // arg0:移动后的位置 + public void onPageSelected(int arg0) { + currentIndex = arg0; + tabFragment.resetViewStatus(arg0); + switch (arg0){ + case 0: + polyvPlayerActivity.getheightListenr(fragmentHeight1); + break; + case 1: + polyvPlayerActivity.getheightListenr(fragmentHeight2); + break; + case 2: +// polyvPlayerActivity.getheightListenr(fragmentHeight3); + if (fragmentHeight3>getResources().getDimensionPixelOffset(R.dimen.dp_700)){ + polyvPlayerActivity.getheightListenr(fragmentHeight3); + }else + polyvPlayerActivity.getheightListenr(getResources().getDimensionPixelOffset(R.dimen.dp_700)); + break; + } + } + + @Override + // arg0:当前位置(右移)/下一位置(左移) + // arg1:页面偏移百分比 + // arg2:页面偏移像素 + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + // arg0:移动状态 + public void onPageScrollStateChanged(int arg0) { + } + }); + } + + + //改变viewpager的当前页 + public void setCurrentItem(int index) { + vp_player.setCurrentItem(index); + } + + public int getCurrentIndex() { + return currentIndex; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findIdAndNew(); + initView(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + fragmentHeight1 = 0; + fragmentHeight2 = 0; + fragmentHeight3 = 0; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/SummaryFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/SummaryFragment.java new file mode 100644 index 0000000..734b1fe --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/SummaryFragment.java @@ -0,0 +1,114 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.os.Handler; +import androidx.fragment.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.JavascriptInterface; +import android.webkit.WebResourceError; +import android.webkit.WebResourceRequest; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.PolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; + + +/** + * Created by WANGChengXin on 2019/3/25. + */ + +@SuppressLint("ValidFragment") +public class SummaryFragment extends Fragment { + private View view; + private PolyvPlayerActivity polyvPlayerActivity; + private WebSettings settings; + private WebSettings settings1; + private X5WebView wv; + private WebView wv1; + Mobile mobile = new Mobile(); + + private String note_url; + private String vid; + @SuppressLint("ValidFragment") + public SummaryFragment(PolyvPlayerActivity polyvPlayerActivity, String note_url,String vid) { + this.polyvPlayerActivity = polyvPlayerActivity; + this.note_url = note_url; + this.vid = vid; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + if (view == null) + view = inflater.inflate(R.layout.fragment_summary, container, false); + X5WebView.initHardwareAccelerate(getActivity()); + wv = view.findViewById(R.id.wb); + + wv.loadUrl(Url.urlHtml+note_url); + settings = wv.getSettings(); + + + settings.setJavaScriptEnabled(true);//支持js + + wv.setWebViewClient(mClient); + + wv.addJavascriptInterface(mobile, "mobile"); + + return view; + } + + private class Mobile { + @JavascriptInterface + public void onGetWebContentHeight() { + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + wv.measure(0, 0); + int measuredHeight = wv.getMeasuredHeight(); + int fragmentHeight1 = SharePrefUtil.getInt(getActivity(), "fragmentHeight1", 0); + if (fragmentHeight1 == 0|| Constant.fragmentHeight1 == 0){ + SharePrefUtil.saveInt(getActivity(), "fragmentHeight1", measuredHeight); + Constant.fragmentHeight1 =measuredHeight; + if (StringUtil.isEmpty(vid)){ + polyvPlayerActivity.getheightListenr(Constant.fragmentHeight1); + } + + } + } + }, 1000); + } + } + + + + private WebViewClient mClient = new WebViewClient() { + + + @Override + public void onPageFinished(WebView view, String url) { + mobile.onGetWebContentHeight(); + } + + @Override + public void onLoadResource(WebView view, String url) { + + super.onLoadResource(view, url); + } + + @Override + public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { + super.onReceivedError(view, request, error); + } + }; + + } diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoCurriculumFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoCurriculumFragment.java new file mode 100644 index 0000000..6709e95 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoCurriculumFragment.java @@ -0,0 +1,43 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import android.text.method.ScrollingMovementMethod; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.view.X5WebView; + +/** + * Created by WANGChengXin on 2019/10/28. + */ + +@SuppressLint("ValidFragment") +public class VideoCurriculumFragment extends Fragment { + private View view; + private String info; + + @SuppressLint("ValidFragment") + public VideoCurriculumFragment(String info) { + this.info = info; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (view == null) + view = inflater.inflate(R.layout.fragment_summary, container, false); + X5WebView.initHardwareAccelerate(getActivity()); + view.findViewById(R.id.wb).setVisibility(View.GONE); + TextView tv_info = view.findViewById(R.id.tv_info); + tv_info.setVisibility(View.VISIBLE); + tv_info.setText(info); + tv_info.setMovementMethod(ScrollingMovementMethod.getInstance()); + return view; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerTabFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerTabFragment.java new file mode 100644 index 0000000..de08447 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerTabFragment.java @@ -0,0 +1,149 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.graphics.Color; +import android.os.Build; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; + + +public class VideoDetailPolyvPlayerTabFragment extends Fragment implements View.OnClickListener { + //fragmentView + private View view; + //viewpagerFragment + private VideoDetailPolyvPlayerViewPagerFragment viewPagerFragment; + // tab文本的TextView,用于改变颜色 + private TextView tv_cur, tv_sum, tv_talk; + // tab的导航线 + private View v_line; + private int screenWidth; + private int length; + private int eLength; + private RelativeLayout.LayoutParams lp; + private String vid; + private LinearLayout ll_down; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (view == null) + view = inflater.inflate(R.layout.polyv_fragment_videodetailplayer_tab, container, false); + return view; + } + + private void findIdAndNew() { + tv_cur = (TextView) view.findViewById(R.id.tv_cur); + tv_sum = (TextView) view.findViewById(R.id.tv_sum); + tv_talk = (TextView) view.findViewById(R.id.tv_talk); + ll_down = (LinearLayout) view.findViewById(R.id.ll_down); + v_line = view.findViewById(R.id.v_line); + viewPagerFragment = (VideoDetailPolyvPlayerViewPagerFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.fl_viewpager); + + + + + } + + private void initView() { + Bundle bundle =this.getArguments();//得到从Activity传来的数据 + ListSeriesVideoByTypeBean listSeriesVideoByTypeBean = (ListSeriesVideoByTypeBean) bundle.getSerializable("listSeriesVideoByTypeBean"); + vid = bundle.getString("vid"); + + initLineSetting(); + tv_cur.setSelected(true); + tv_cur.setOnClickListener(this); + tv_sum.setOnClickListener(this); + ll_down.setOnClickListener(this); + } + + private void initLineSetting() { + lp = (RelativeLayout.LayoutParams) v_line.getLayoutParams(); + v_line.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + final DisplayMetrics dm = new DisplayMetrics(); + getActivity().getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm); + if(PolyvScreenUtils.isLandscape(getContext())) + screenWidth = dm.heightPixels; + else + screenWidth = dm.widthPixels; + length = v_line.getWidth(); + int sLength = screenWidth / 3; + eLength = (sLength - length) / 2; + if (viewPagerFragment.getCurrentIndex() == 0) + resetViewStatus(0); + if (!StringUtil.isEmpty(vid)){ + resetViewStatus(1); + } + if (Build.VERSION.SDK_INT >= 16) + getView().getViewTreeObserver().removeOnGlobalLayoutListener(this); + else + getView().getViewTreeObserver().removeGlobalOnLayoutListener(this); + } + }); + + } + + public void resetViewStatus(int arg0) { + tv_cur.setSelected(false); + tv_sum.setSelected(false); + ll_down.setSelected(false); + tv_cur.setTextColor(Color.parseColor("#999999")); + tv_sum.setTextColor(Color.parseColor("#999999")); + tv_talk.setTextColor(Color.parseColor("#999999")); + switch (arg0) { + case 0: + tv_cur.setSelected(true); + tv_cur.setTextColor(getResources().getColor(R.color.polyv_tab_text_color)); + lp.leftMargin = (int) (arg0 * (length)) + 1 * eLength; + break; + case 1: + tv_sum.setSelected(true); + tv_sum.setTextColor(getResources().getColor(R.color.polyv_tab_text_color)); + lp.leftMargin = (int) (arg0 * (length)) + 3 * eLength; + break; + case 2: + tv_talk.setSelected(true); + tv_talk.setText("下载中"); + tv_talk.setTextColor(getResources().getColor(R.color.polyv_tab_text_color)); + lp.leftMargin = (int) (arg0 * (length)) + 5 * eLength; + break; + } + v_line.setLayoutParams(lp); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findIdAndNew(); + initView(); + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.ll_down: + viewPagerFragment.setCurrentItem(2); + break; + case R.id.tv_sum: + viewPagerFragment.setCurrentItem(1); + break; + case R.id.tv_cur: + viewPagerFragment.setCurrentItem(0); + break; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerViewPagerFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerViewPagerFragment.java new file mode 100644 index 0000000..8420ba5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoDetailPolyvPlayerViewPagerFragment.java @@ -0,0 +1,132 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import androidx.viewpager.widget.ViewPager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.ListSeriesVideoByTypeBean; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.adapter.PolyvPlayerFragmentAdapter; + +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight1; +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight2; +import static cn.shangyu.gdxzExpert.utils.Constant.fragmentHeight3; + +@SuppressLint("ValidFragment") +public class VideoDetailPolyvPlayerViewPagerFragment extends Fragment { + //fragmentView + private View view; + // 播放页的viewPager + private ViewPager vp_player; + private PolyvPlayerFragmentAdapter adapter; + // 当前的索引 + private int currentIndex; + private List lists; + // 播放页viewpager的fragment + private Fragment curFragment, sumFragment, talkFragment; + private VideoDetailPolyvPlayerTabFragment tabFragment; + private VideoDetailPolyvPlayerActivity polyvPlayerActivity; + private TextView tv_name; + private String info;//视频简介 + + + @SuppressLint("ValidFragment") + public VideoDetailPolyvPlayerViewPagerFragment(VideoDetailPolyvPlayerActivity polyvPlayerActivity) { + this.polyvPlayerActivity = polyvPlayerActivity; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (view == null) + view = inflater.inflate(R.layout.polyv_fragment_player_viewpager, container, false); + return view; + } + + private void findIdAndNew() { + vp_player = (ViewPager) view.findViewById(R.id.vp_player); + tabFragment = (VideoDetailPolyvPlayerTabFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.fl_tab); + lists = new ArrayList(); + + } + + private void initView() { + Bundle bundle =this.getArguments();//得到从Activity传来的数据 + ListSeriesVideoByTypeBean listSeriesVideoByTypeBean = (ListSeriesVideoByTypeBean) bundle.getSerializable("listSeriesVideoByTypeBean"); + String vid = bundle.getString("vid"); + + sumFragment = new VideoInfoFragment(info); + curFragment = new VideoCurriculumFragment(info); + talkFragment = new VideoCurriculumFragment(info); + + lists.add(sumFragment); + lists.add(curFragment); + lists.add(talkFragment); + for (int i = 0; i < lists.size(); i++) + lists.get(i).setArguments(getActivity().getIntent().getExtras()); + adapter = new PolyvPlayerFragmentAdapter(getActivity().getSupportFragmentManager(), lists); + vp_player.setAdapter(adapter); + vp_player.setCurrentItem(0); + currentIndex = 0; + + vp_player.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { + + @Override + // arg0:移动后的位置 + public void onPageSelected(int arg0) { + currentIndex = arg0; + tabFragment.resetViewStatus(arg0); + } + + @Override + // arg0:当前位置(右移)/下一位置(左移) + // arg1:页面偏移百分比 + // arg2:页面偏移像素 + public void onPageScrolled(int arg0, float arg1, int arg2) { + + } + + @Override + // arg0:移动状态 + public void onPageScrollStateChanged(int arg0) { + } + }); + } + + + //改变viewpager的当前页 + public void setCurrentItem(int index) { + vp_player.setCurrentItem(index); + } + + public int getCurrentIndex() { + return currentIndex; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + findIdAndNew(); + initView(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + fragmentHeight1 = 0; + fragmentHeight2 = 0; + fragmentHeight3 = 0; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoInfoFragment.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoInfoFragment.java new file mode 100644 index 0000000..0f13886 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/fragment/VideoInfoFragment.java @@ -0,0 +1,43 @@ +package cn.shangyu.gdxzExpert.polyvplayer.fragment; + +import android.annotation.SuppressLint; +import android.os.Bundle; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; +import android.text.method.ScrollingMovementMethod; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.view.X5WebView; + +/** + * Created by WANGChengXin on 2019/10/28. + */ + +@SuppressLint("ValidFragment") +public class VideoInfoFragment extends Fragment { + private View view; + private String info; + + @SuppressLint("ValidFragment") + public VideoInfoFragment(String info) { + this.info = info; + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + if (view == null) + view = inflater.inflate(R.layout.fragment_summary, container, false); + X5WebView.initHardwareAccelerate(getActivity()); + view.findViewById(R.id.wb).setVisibility(View.GONE); + TextView tv_info = view.findViewById(R.id.tv_info); + tv_info.setVisibility(View.VISIBLE); + tv_info.setText(info); + tv_info.setMovementMethod(ScrollingMovementMethod.getInstance()); + return view; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetHeightListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetHeightListener.java new file mode 100644 index 0000000..9ceb6df --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetHeightListener.java @@ -0,0 +1,9 @@ +package cn.shangyu.gdxzExpert.polyvplayer.listener; + +/** + * Created by WANGChengXin on 2019/3/27. + */ + +public interface GetHeightListener { + public void getheightListenr(int height); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetVidListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetVidListener.java new file mode 100644 index 0000000..f05da4e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/listener/GetVidListener.java @@ -0,0 +1,9 @@ +package cn.shangyu.gdxzExpert.polyvplayer.listener; + +/** + * Created by wangchengxin on 2019/3/28. + */ + +public interface GetVidListener { + void getVidlistener(String vid,String uuid); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvAnimateFirstDisplayListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvAnimateFirstDisplayListener.java new file mode 100644 index 0000000..d544376 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvAnimateFirstDisplayListener.java @@ -0,0 +1,33 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.graphics.Bitmap; +import android.view.View; +import android.widget.ImageView; + +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; +import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener; + +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public class PolyvAnimateFirstDisplayListener extends SimpleImageLoadingListener { + boolean cacheFound; + public static List displayedImages = Collections.synchronizedList(new LinkedList()); + + @Override + public void onLoadingStarted(String imageUri, View view){ + + } + @Override + public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage){ + if (loadedImage != null){ + ImageView imageView = (ImageView) view; + boolean firstDisplay = !displayedImages.contains(imageUri); + if (firstDisplay){ + FadeInBitmapDisplayer.animate(imageView, 500); + displayedImages.add(imageUri); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAudioCoverView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAudioCoverView.java new file mode 100644 index 0000000..e0fa7d3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAudioCoverView.java @@ -0,0 +1,165 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.animation.ObjectAnimator; +import android.animation.ValueAnimator; +import android.content.Context; +import android.content.res.TypedArray; +import android.net.Uri; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.animation.LinearInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.easefun.polyvsdk.util.PolyvDownloadDirUtil; +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.vo.PolyvVideoVO; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.File; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; + + +public class PolyvPlayerAudioCoverView extends FrameLayout { + /** + * 播放音频时的封面图 + */ + private ImageView iv_audio_cover = null; + private ImageView iv_audio_cover_m = null; + private FrameLayout fl_cover = null; + private ObjectAnimator animator; + private float currentValue; + private String currentMode; + + private boolean isShowFilm; + + public PolyvPlayerAudioCoverView(@NonNull Context context) { + this(context, null); + } + + public PolyvPlayerAudioCoverView(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerAudioCoverView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.PolyvPlayerAudioCoverView); + isShowFilm = typedArray.getBoolean(R.styleable.PolyvPlayerAudioCoverView_show_film, true); + typedArray.recycle(); + init(); + } + + private void init() { + LayoutInflater.from(getContext()).inflate(R.layout.polyv_player_audio_cover, this); + iv_audio_cover = (ImageView) findViewById(R.id.iv_audio_cover); + iv_audio_cover_m = (ImageView) findViewById(R.id.iv_audio_cover_m); + fl_cover = (FrameLayout) findViewById(R.id.fl_cover); + if (!isShowFilm) { + iv_audio_cover_m.setScaleType(ImageView.ScaleType.FIT_CENTER); + fl_cover.setVisibility(View.GONE); + } else { + iv_audio_cover_m.setAlpha(0.4f); + } + } + + private void showCover(PolyvVideoView videoView, ImageView imageView, boolean isRotateView) { + imageView.setImageBitmap(null); + imageView.setVisibility(View.VISIBLE); + PolyvVideoVO videoVO = videoView.getVideo(); + if (videoVO != null) + if (!videoView.isLocalPlay()) { + ImageLoader.getInstance().displayImage(videoVO.getFirstImage(), imageView + , new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true) + .showImageForEmptyUri(isRotateView ? R.drawable.polyv_rotate_cover_default : R.drawable.polyv_bg_cover_default)//显示默认的图片 + .showImageOnFail(isRotateView ? R.drawable.polyv_rotate_cover_default : R.drawable.polyv_bg_cover_default).build() + , new PolyvAnimateFirstDisplayListener()); + } else { + int index = 0; + if (videoVO.getFirstImage().contains("/")) { + index = videoVO.getFirstImage().lastIndexOf("/"); + } + String fileName = videoVO.getFirstImage().substring(index); + File file = PolyvDownloadDirUtil.getFileFromExtraResourceDir(videoVO.getVid(), fileName); + if (file != null) + imageView.setImageURI(Uri.parse(file.getAbsolutePath())); + else + imageView.setImageResource(isRotateView ? R.drawable.polyv_rotate_cover_default : R.drawable.polyv_bg_cover_default);//显示默认的图片 + } + else + imageView.setImageResource(isRotateView ? R.drawable.polyv_rotate_cover_default : R.drawable.polyv_bg_cover_default);//显示默认的图片 + } + + //用于音视频切换 + public void changeModeFitCover(PolyvVideoView videoView, String changedMode) { + this.currentMode = changedMode; + if (PolyvVideoVO.MODE_AUDIO.equals(changedMode)) { + currentValue = 0; + startAnimation(); + fl_cover.setVisibility(View.VISIBLE); + showCover(videoView, iv_audio_cover_m, false); + showCover(videoView, iv_audio_cover, true); + } else { + hide(); + } + } + + public void hide() { + if (animator != null) + animator.cancel(); + fl_cover.setVisibility(View.GONE); + iv_audio_cover.setVisibility(View.GONE); + iv_audio_cover_m.setVisibility(View.GONE); + } + + //用于mp3源文件播放 + public void onlyShowCover(PolyvVideoView videoView) { + showCover(videoView, iv_audio_cover_m, false); + } + + public void stopAnimation() { + if (PolyvVideoVO.MODE_AUDIO.equals(currentMode)) { + if (animator != null) + animator.cancel(); + } + } + + public void startAnimation() { + stopAnimation(); + if (PolyvVideoVO.MODE_AUDIO.equals(currentMode)) { + animator = ObjectAnimator.ofFloat(fl_cover, "rotation", currentValue - 360, currentValue); + animator.setDuration(15000); + animator.setRepeatMode(ValueAnimator.RESTART); + animator.setRepeatCount(ValueAnimator.INFINITE); + animator.setInterpolator(new LinearInterpolator()); + animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + currentValue = (float) animation.getAnimatedValue(); + } + }); + animator.start(); + } + } + public void fitLocationChange(boolean isInMainScreen) { + if (fl_cover == null) + return; + RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) fl_cover.getLayoutParams(); + if (isInMainScreen) { + rlp.width = PolyvScreenUtils.dip2px(getContext(), 150); + rlp.height = PolyvScreenUtils.dip2px(getContext(),150); + } else { + rlp.width = PolyvScreenUtils.dip2px(getContext(), 70); + rlp.height = PolyvScreenUtils.dip2px(getContext(), 70); + } + fl_cover.setLayoutParams(rlp); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAuxiliaryView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAuxiliaryView.java new file mode 100644 index 0000000..fc293db --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerAuxiliaryView.java @@ -0,0 +1,147 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.vo.PolyvADMatterVO; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +import java.net.MalformedURLException; +import java.net.URL; + +import cn.shangyu.gdxzExpert.R; + + +/** + * 图片广告和图片片头视图,视频广告和视频片头在{@link PolyvVideoView}中已经处理 + * @author TanQu 2016-11-15 + */ +public class PolyvPlayerAuxiliaryView extends RelativeLayout { + private Context mContext = null; + private PolyvVideoView mVideoView = null; + private ImageView mAdvertisementImage = null; + private ImageButton mStartBtn = null; + private DisplayImageOptions mOptions = null; + private PolyvADMatterVO mADMatter = null; + + public PolyvPlayerAuxiliaryView(Context context) { + this(context, null); + } + + public PolyvPlayerAuxiliaryView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerAuxiliaryView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + initViews(); + } + + + private void initViews() { + LayoutInflater.from(getContext()).inflate(R.layout.polyv_player_auxiliary_view, this); + mAdvertisementImage = (ImageView) findViewById(R.id.advertisement_image); + mAdvertisementImage.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (mADMatter == null) return; + String path = mADMatter.getAddrUrl(); + if (TextUtils.isEmpty(path) == false) { + try { + new URL(path); + } catch (MalformedURLException e) { + return; + } + + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setData(Uri.parse(path)); + mContext.startActivity(intent); + } + } + }); + + mStartBtn = (ImageButton) findViewById(R.id.advertisement_start_btn); + mStartBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + mVideoView.start(); +// danmuFragment.resume(); + hide(); + } + }); + + if (mOptions == null) { + mOptions = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.polyv_avatar_def) // 设置图片在下载期间显示的图片 + .showImageForEmptyUri(R.drawable.polyv_avatar_def)// 设置图片Uri为空或是错误的时候显示的图片 + .showImageOnFail(R.drawable.polyv_avatar_def) // 设置图片加载/解码过程中错误时候显示的图片 + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型 + .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 + .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中 + .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间 + .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();// 构建完成 + } + } + + /** + * 设置图片并显示 + * @param adMatter + */ + public void show(PolyvADMatterVO adMatter) { + mADMatter = adMatter; + ImageLoader.getInstance().displayImage(mADMatter.getMatterUrl(), mAdvertisementImage, mOptions, new PolyvAnimateFirstDisplayListener()); + + //暂停图片广告不需要倒计时,是点击开始按钮继续 + if (PolyvADMatterVO.LOCATION_PAUSE.equals(adMatter.getLocation())) { + mStartBtn.setVisibility(View.VISIBLE); + } else { + mStartBtn.setVisibility(View.GONE); + } + + setVisibility(View.VISIBLE); + } + + /** + * 设置图片并显示 + * @param url + */ + public void show(String url) { + mADMatter = null; + ImageLoader.getInstance().displayImage(url, mAdvertisementImage, mOptions, new PolyvAnimateFirstDisplayListener()); + mStartBtn.setVisibility(View.GONE); + setVisibility(View.VISIBLE); + } + + public boolean isPauseAdvert() { + return mADMatter != null && PolyvADMatterVO.LOCATION_PAUSE.equals(mADMatter.getLocation()); + } + + /** + * 隐藏 + */ + public void hide() { + setVisibility(View.GONE); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + super.onTouchEvent(event); + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerLightView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerLightView.java new file mode 100644 index 0000000..95d0c1c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerLightView.java @@ -0,0 +1,51 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + + +public class PolyvPlayerLightView extends FrameLayout { + //lightView + private View view; + private RelativeLayout rl_center_light; + private TextView tv_light; + + public PolyvPlayerLightView(Context context) { + this(context, null); + } + + public PolyvPlayerLightView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerLightView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.view = LayoutInflater.from(context).inflate(R.layout.polyv_player_media_center_light, this); + findIdAndNew(); + } + + private void findIdAndNew() { + rl_center_light = (RelativeLayout) view.findViewById(R.id.rl_center_light); + tv_light = (TextView) view.findViewById(R.id.tv_light); + } + + public void hide() { + if (rl_center_light != null) + rl_center_light.setVisibility(View.GONE); + } + + public void setViewLightValue(int brightness, boolean end) { + if (end) + rl_center_light.setVisibility(View.GONE); + else + rl_center_light.setVisibility(View.VISIBLE); + tv_light.setText(brightness + "%"); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerMediaController.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerMediaController.java new file mode 100644 index 0000000..ee11ab0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerMediaController.java @@ -0,0 +1,1922 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.app.Activity; +import android.app.PendingIntent; +import android.app.PictureInPictureParams; +import android.app.RemoteAction; +import android.content.Context; +import android.content.Intent; +import android.content.res.Configuration; +import android.graphics.Color; +import android.graphics.drawable.Icon; +import android.net.Uri; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.inputmethod.EditorInfo; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.SeekBar; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.DrawableRes; + +import com.easefun.polyvsdk.ijk.PolyvPlayerScreenRatio; +import com.easefun.polyvsdk.sub.danmaku.entity.PolyvDanmakuInfo; +import com.easefun.polyvsdk.sub.screenshot.PolyvScreenShot; +import com.easefun.polyvsdk.video.IPolyvVideoView; +import com.easefun.polyvsdk.video.PolyvBaseMediaController; +import com.easefun.polyvsdk.video.PolyvVideoView; +import com.easefun.polyvsdk.vo.PolyvVideoVO; +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.ppt.PolyvViceScreenLayout; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvKeyBoardUtils; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvSensorHelper; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvTimeUtils; +import cn.shangyu.gdxzExpert.polyvplayer.view.PolyvTickSeekBar; +import cn.shangyu.gdxzExpert.polyvplayer.view.PolyvTickTips; + + +public class PolyvPlayerMediaController extends PolyvBaseMediaController implements View.OnClickListener { + private static final String TAG = PolyvPlayerMediaController.class.getSimpleName(); + private Context mContext = null; + private PolyvVideoView videoView = null; + private PolyvVideoVO videoVO; +// private PolyvPlayerDanmuFragment1 danmuFragment; + //播放器所在的activity + private Activity videoActivity; + //播放器的ParentView + private View parentView; + //显示的状态 + private boolean isShowing; + //控制栏显示的时间 + private static final int longTime = 5000; + private static final int HIDE = 12; + private static final int SHOW_PROGRESS = 13; + private TextView tv_exchange1; + //controllerView + private View view; + /** + * 竖屏的view + */ + // 竖屏的控制栏 + private RelativeLayout rl_port; + // 竖屏的切屏按钮,竖屏的播放/暂停按钮 + public ImageView iv_land, iv_play,iv_pip_portrait,iv_pip; + // 竖屏的显示播放进度控件,切换清晰度按钮,切换倍速按钮,切换线路按钮 + private TextView tv_curtime, tv_tottime, tv_bit_portrait, tv_speed_portrait, tv_route_portrait; + // 竖屏的进度条 + private SeekBar sb_play; + /** + * 竖屏的播放速度布局 + */ + //播放速度布局 + private RelativeLayout rl_center_speed_portrait; + //选择播放速度控件 + private TextView tv_speed05_portrait, tv_speed10_portrait, tv_speed12_portrait, tv_speed15_portrait, tv_speed20_portrait; + /** + * 竖屏的播放码率布局 + */ + //播放码率布局 + private RelativeLayout rl_center_bit_portrait; + //选择播放码率的控件 + private TextView tv_sc_portrait, tv_hd_portrait, tv_flu_portrait, tv_auto_portrait; + /** + * 竖屏的播放线路布局 + */ + //播放线路布局 + private RelativeLayout rl_center_route_portrait; + //选择播放码率的控件 + private TextView tv_route1_portrait, tv_route2_portrait, tv_route3_portrait; + /** + * 横屏的view + */ + //横屏的控制栏,顶部布局,底部布局 + private RelativeLayout rl_land, rl_top, rl_bot; + //横屏的切屏按钮,横屏的播放/暂停按钮,横屏的返回按钮,设置按钮,分享按钮,弹幕开关 + public ImageView iv_port, iv_play_land, iv_finish, iv_set, iv_share, iv_dmswitch; + // 横屏的显示播放进度控件,视频的标题,选择播放速度按钮,选择码率按钮,选择线路按钮 + private TextView tv_curtime_land, tv_tottime_land, tv_title, tv_speed, tv_bit, tv_route; + // 横屏的进度条 + private PolyvTickSeekBar sb_play_land; + /** + * 侧边布局的view + */ + //侧边布局 + private LinearLayout ll_side; + //弹幕按钮,截图按钮 + private ImageView iv_danmu, iv_screens; + /** + * 左侧边布局的view + */ + //左侧边布局 + private LinearLayout ll_left_side, ll_left_side_land, ll_left_side_t, ll_left_side_t_land; + //视频/音频切换按钮 + private ImageView iv_video, iv_video_land, iv_audio, iv_audio_land; + private TextView tv_video, tv_video_land, tv_audio, tv_audio_land; + /** + * 设置布局的view + */ + //设置布局 + private RelativeLayout rl_center_set; + //调节亮度控件,调节音量控件 + private SeekBar sb_light, sb_volume; + // 设置播放器银幕比率控件,设置字幕的控件 + private LinearLayout ll_adaptive_mode, ll_subtitle, ll_subtitle_b; + private TextView tv_full, tv_fit, tv_sixteennine, tv_fourthree, tv_srt1, tv_srt2, tv_srt3, tv_srtnone; + // 关闭布局按钮 + private ImageView iv_close_set; + /** + * 弹幕布局的view + */ + //弹幕布局,底部的设置布局 + private RelativeLayout rl_center_danmu, rl_dmbot; + //设置按钮,返回按钮,选择颜色按钮 + private ImageView iv_dmset, iv_finish_danmu, iv_dmwhite, iv_dmred, iv_dmpurple, iv_dmblue, iv_dmgreen, iv_dmyellow; + //选择弹幕样式按钮,选择弹幕字体大小按钮,发送弹幕按钮 + private TextView tv_dmroll, tv_dmtop, tv_dmbottom, tv_dmfonts, tv_dmfontm, tv_dmfontl, tv_dmsend; + //弹幕输入栏 + private EditText et_dmedit; + //弹幕的配置信息 + private String fontmode, fontsize; + private int color; + /** + * 分享布局的view + */ + //分享布局 + private RelativeLayout rl_center_share; + // 分享控件,关闭布局按钮 + private ImageView iv_shareqq, iv_sharewechat, iv_shareweibo, iv_close_share; + /** + * 横屏的播放速度布局 + */ + //播放速度布局 + private RelativeLayout rl_center_speed; + //选择播放速度控件 + private TextView tv_speed05, tv_speed10, tv_speed12, tv_speed15, tv_speed20; + //关闭布局按钮 + private ImageView iv_close_speed; + /** + * 横屏的播放码率布局 + */ + //播放码率布局 + private RelativeLayout rl_center_bit; + //选择播放码率的控件 + private TextView tv_sc, tv_hd, tv_flu, tv_auto; + //关闭布局按钮 + private ImageView iv_close_bit; + /** + * 横屏的播放线路布局 + */ + //播放线路布局 + private RelativeLayout rl_center_route; + //选择播放码率的控件 + private TextView tv_route1, tv_route2, tv_route3; + //关闭布局按钮 + private ImageView iv_close_route; + //----------------------------------------- + // 进度条是否处于拖动的状态 + private boolean status_dragging; + // 控制栏是否处于一直显示的状态 + private boolean status_showalways; + // 播放器在显示弹幕布局前的状态 + private boolean status_isPlaying; + private PolyvSensorHelper sensorHelper; + private PolyvPlayerAudioCoverView coverView; + private PolyvTickTips tickTips; + //副屏布局 + private PolyvViceScreenLayout viceLayout; + + + private PictureInPictureParams.Builder pipBuilder; + private ImageView polyvScreenLock, polyvScreenLockAudio; + private int is_white; + private int is_paid; + private View head; + private boolean isViceHideInPipMode; + //用于处理控制栏的显示状态 + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case HIDE: + hide(); + break; + case SHOW_PROGRESS: + showProgress(); + break; + } + } + }; + + // 更新显示的播放进度,以及暂停/播放按钮 + private void showProgress() { + if (isShowing && videoView != null) { + // 单位:毫秒 + int position = videoView.getCurrentPosition(); + int totalTime = videoView.getDuration() / 1000 * 1000; + if (!videoView.isExceptionCompleted() && (videoView.isCompletedState() || position > totalTime)) + position = totalTime; + int bufPercent = videoView.getBufferPercentage(); + //在拖动进度条的时候,这里不更新 + if (!status_dragging) { + tv_curtime.setText(PolyvTimeUtils.generateTime(position)); + tv_curtime_land.setText(PolyvTimeUtils.generateTime(position)); + if (totalTime > 0) { + sb_play.setProgress((int) (sb_play.getMax() * 1L * position / totalTime)); + sb_play_land.setProgress((int) (sb_play_land.getMax() * 1L * position / totalTime)); + } else { + sb_play.setProgress(0); + sb_play_land.setProgress(0); + } + } + sb_play.setSecondaryProgress(sb_play.getMax() * bufPercent / 100); + sb_play_land.setSecondaryProgress(sb_play_land.getMax() * bufPercent / 100); + if (videoView.isPlaying()) { + iv_play.setSelected(false); + iv_play_land.setSelected(false); + } else { + iv_play.setSelected(true); + iv_play_land.setSelected(true); + } + handler.sendMessageDelayed(handler.obtainMessage(SHOW_PROGRESS), 1000 - (position % 1000)); + } + } + + public PolyvPlayerMediaController(Context context) { + this(context, null); + } + + public PolyvPlayerMediaController(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerMediaController(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.mContext = context; + this.videoActivity = (Activity) mContext; + this.view = LayoutInflater.from(getContext()).inflate(R.layout.polyv_controller_media, this); + findIdAndNew(); + initView(); + } + + /** + * 初始化控制栏的配置 + * + * @param parentView 播放器的父控件 + */ + public void initConfig(View head,ViewGroup parentView , TextView tv, int is_white, int is_paid) { + this.head = head; + this.parentView = parentView; + this.tv_exchange1 = tv; + + } + + public void getIs_whiteOrIs_paid( int is_paid){ + this.is_paid = is_paid; + } + + public void setAudioCoverView(PolyvPlayerAudioCoverView coverView) { + this.coverView = coverView; + } + + private void findIdAndNew() { + iv_pip_portrait = (ImageView) view.findViewById(R.id.iv_pip_portrait); + iv_pip = (ImageView) view.findViewById(R.id.iv_pip); + //竖屏的view + rl_port = (RelativeLayout) view.findViewById(R.id.rl_port); + iv_land = (ImageView) view.findViewById(R.id.iv_land); + iv_play = (ImageView) view.findViewById(R.id.iv_play); + tv_curtime = (TextView) view.findViewById(R.id.tv_curtime); + tv_tottime = (TextView) view.findViewById(R.id.tv_tottime); + tv_bit_portrait = (TextView) view.findViewById(R.id.tv_bit_portrait); + tv_speed_portrait = (TextView) view.findViewById(R.id.tv_speed_portrait); + tv_route_portrait = (TextView) view.findViewById(R.id.tv_route_portrait); + sb_play = (SeekBar) view.findViewById(R.id.sb_play); + //竖屏的播放速度布局的view + rl_center_speed_portrait = (RelativeLayout) view.findViewById(R.id.rl_center_speed_portrait); + tv_speed05_portrait = (TextView) view.findViewById(R.id.tv_speed05_portrait); + tv_speed10_portrait = (TextView) view.findViewById(R.id.tv_speed10_portrait); + tv_speed12_portrait = (TextView) view.findViewById(R.id.tv_speed12_portrait); + tv_speed15_portrait = (TextView) view.findViewById(R.id.tv_speed15_portrait); + tv_speed20_portrait = (TextView) view.findViewById(R.id.tv_speed20_portrait); + //竖屏的播放码率布局的view + rl_center_bit_portrait = (RelativeLayout) view.findViewById(R.id.rl_center_bit_portrait); + tv_sc_portrait = (TextView) view.findViewById(R.id.tv_sc_portrait); + tv_hd_portrait = (TextView) view.findViewById(R.id.tv_hd_portrait); + tv_flu_portrait = (TextView) view.findViewById(R.id.tv_flu_portrait); + tv_auto_portrait = (TextView) view.findViewById(R.id.tv_auto_portrait); + //视频的播放线路布局的view + rl_center_route_portrait = (RelativeLayout) view.findViewById(R.id.rl_center_route_portrait); + tv_route1_portrait = (TextView) view.findViewById(R.id.tv_route1_portrait); + tv_route2_portrait = (TextView) view.findViewById(R.id.tv_route2_portrait); + tv_route3_portrait = (TextView) view.findViewById(R.id.tv_route3_portrait); + //横屏的view + rl_land = (RelativeLayout) view.findViewById(R.id.rl_land); + rl_top = (RelativeLayout) view.findViewById(R.id.rl_top); + rl_bot = (RelativeLayout) view.findViewById(R.id.rl_bot); + iv_port = (ImageView) view.findViewById(R.id.iv_port); + iv_play_land = (ImageView) view.findViewById(R.id.iv_play_land); + iv_finish = (ImageView) view.findViewById(R.id.iv_finish); + tv_curtime_land = (TextView) view.findViewById(R.id.tv_curtime_land); + tv_tottime_land = (TextView) view.findViewById(R.id.tv_tottime_land); + sb_play_land = (PolyvTickSeekBar) view.findViewById(R.id.sb_play_land); + tv_title = (TextView) view.findViewById(R.id.tv_title); + iv_set = (ImageView) view.findViewById(R.id.iv_set); + iv_share = (ImageView) view.findViewById(R.id.iv_share); + iv_dmswitch = (ImageView) view.findViewById(R.id.iv_dmswitch); + tv_speed = (TextView) view.findViewById(R.id.tv_speed); + tv_bit = (TextView) view.findViewById(R.id.tv_bit); + tv_route = (TextView) view.findViewById(R.id.tv_route); + //设置布局的view + rl_center_set = (RelativeLayout) view.findViewById(R.id.rl_center_set); + sb_light = (SeekBar) view.findViewById(R.id.sb_light); + sb_volume = (SeekBar) view.findViewById(R.id.sb_volume); + tv_full = (TextView) view.findViewById(R.id.tv_full); + tv_fit = (TextView) view.findViewById(R.id.tv_fit); + tv_sixteennine = (TextView) view.findViewById(R.id.tv_sixteennine); + tv_fourthree = (TextView) view.findViewById(R.id.tv_fourthree); + tv_srt1 = (TextView) view.findViewById(R.id.tv_srt1); + tv_srt2 = (TextView) view.findViewById(R.id.tv_srt2); + tv_srt3 = (TextView) view.findViewById(R.id.tv_srt3); + tv_srtnone = (TextView) view.findViewById(R.id.tv_srtnone); + iv_close_set = (ImageView) view.findViewById(R.id.iv_close_set); + ll_adaptive_mode = (LinearLayout) findViewById(R.id.ll_adaptive_mode); + ll_subtitle = (LinearLayout) findViewById(R.id.ll_subtitle); + ll_subtitle_b = (LinearLayout) findViewById(R.id.ll_subtitle_b); + //侧边布局的view + ll_side = (LinearLayout) view.findViewById(R.id.ll_side); + iv_danmu = (ImageView) view.findViewById(R.id.iv_danmu); + iv_screens = (ImageView) view.findViewById(R.id.iv_screens); + //左侧边布局的view + ll_left_side = (LinearLayout) view.findViewById(R.id.ll_left_side); + ll_left_side_land = (LinearLayout) view.findViewById(R.id.ll_left_side_land); + ll_left_side_t = (LinearLayout) view.findViewById(R.id.ll_left_side_t); + ll_left_side_t_land = (LinearLayout) view.findViewById(R.id.ll_left_side_t_land); + iv_video = (ImageView) view.findViewById(R.id.iv_video); + iv_video_land = (ImageView) view.findViewById(R.id.iv_video_land); + iv_audio = (ImageView) view.findViewById(R.id.iv_audio); + iv_audio_land = (ImageView) view.findViewById(R.id.iv_audio_land); + tv_video = (TextView) view.findViewById(R.id.tv_video); + tv_video_land = (TextView) view.findViewById(R.id.tv_video_land); + tv_audio = (TextView) view.findViewById(R.id.tv_audio); + tv_audio_land = (TextView) view.findViewById(R.id.tv_audio_land); + //弹幕布局的view + rl_center_danmu = (RelativeLayout) view.findViewById(R.id.rl_center_danmu); + rl_dmbot = (RelativeLayout) view.findViewById(R.id.rl_dmbot); + iv_dmset = (ImageView) view.findViewById(R.id.iv_dmset); + iv_finish_danmu = (ImageView) view.findViewById(R.id.iv_finish_danmu); + et_dmedit = (EditText) view.findViewById(R.id.et_dmedit); + iv_dmwhite = (ImageView) view.findViewById(R.id.iv_dmwhite); + iv_dmblue = (ImageView) view.findViewById(R.id.iv_dmblue); + iv_dmgreen = (ImageView) view.findViewById(R.id.iv_dmgreen); + iv_dmpurple = (ImageView) view.findViewById(R.id.iv_dmpurple); + iv_dmred = (ImageView) view.findViewById(R.id.iv_dmred); + iv_dmyellow = (ImageView) view.findViewById(R.id.iv_dmyellow); + tv_dmroll = (TextView) view.findViewById(R.id.tv_dmroll); + tv_dmtop = (TextView) view.findViewById(R.id.tv_dmtop); + tv_dmbottom = (TextView) view.findViewById(R.id.tv_dmbottom); + tv_dmfonts = (TextView) view.findViewById(R.id.tv_dmfonts); + tv_dmfontm = (TextView) view.findViewById(R.id.tv_dmfontm); + tv_dmfontl = (TextView) view.findViewById(R.id.tv_dmfontl); + tv_dmsend = (TextView) view.findViewById(R.id.tv_dmsend); + //分享布局的view + rl_center_share = (RelativeLayout) view.findViewById(R.id.rl_center_share); + iv_shareqq = (ImageView) view.findViewById(R.id.iv_shareqq); + iv_sharewechat = (ImageView) view.findViewById(R.id.iv_sharewechat); + iv_shareweibo = (ImageView) view.findViewById(R.id.iv_shareweibo); + iv_close_share = (ImageView) view.findViewById(R.id.iv_close_share); + //横屏的播放速度布局的view + rl_center_speed = (RelativeLayout) view.findViewById(R.id.rl_center_speed); + tv_speed05 = (TextView) view.findViewById(R.id.tv_speed05); + tv_speed10 = (TextView) view.findViewById(R.id.tv_speed10); + tv_speed12 = (TextView) view.findViewById(R.id.tv_speed12); + tv_speed15 = (TextView) view.findViewById(R.id.tv_speed15); + tv_speed20 = (TextView) view.findViewById(R.id.tv_speed20); + iv_close_speed = (ImageView) view.findViewById(R.id.iv_close_speed); + //横屏的播放码率布局的view + rl_center_bit = (RelativeLayout) view.findViewById(R.id.rl_center_bit); + tv_sc = (TextView) view.findViewById(R.id.tv_sc); + tv_hd = (TextView) view.findViewById(R.id.tv_hd); + tv_flu = (TextView) view.findViewById(R.id.tv_flu); + tv_auto = (TextView) view.findViewById(R.id.tv_auto); + iv_close_bit = (ImageView) view.findViewById(R.id.iv_close_bit); + //横屏的播放线路布局的view + rl_center_route = (RelativeLayout) view.findViewById(R.id.rl_center_route); + tv_route1 = (TextView) view.findViewById(R.id.tv_route1); + tv_route2 = (TextView) view.findViewById(R.id.tv_route2); + tv_route3 = (TextView) view.findViewById(R.id.tv_route3); + iv_close_route = (ImageView) view.findViewById(R.id.iv_close_route); + + sensorHelper = new PolyvSensorHelper(videoActivity); + tickTips = (PolyvTickTips) view.findViewById(R.id.fl_tt); + tickTips.setOnSeekClickListener(new PolyvTickTips.OnSeekClickListener() { + @Override + public void onSeekClick(PolyvTickSeekBar.TickData tickData) { + if (videoView != null) { + videoView.seekTo(tickData.getKeyTime() * 1000); + tickTips.hide(); + } + } + }); + + polyvScreenLock = (ImageView) view.findViewById(R.id.polyv_screen_lock); + polyvScreenLockAudio = (ImageView) view.findViewById(R.id.polyv_screen_lock_audio); +// if (Build.VERSION.SDK_INT >= 26) { +// pipBuilder = new PictureInPictureParams.Builder(); +// iv_pip_portrait.setVisibility(View.VISIBLE); +// iv_pip.setVisibility(View.VISIBLE); +// }隐藏小窗口 + } + + public void showAudioLock(boolean show) { + polyvScreenLockAudio.setVisibility(show ? VISIBLE : GONE); + polyvScreenLock.setVisibility(show ? GONE : VISIBLE); + + polyvScreenLock.setSelected(false); + polyvScreenLockAudio.setSelected(false); + } + + private void initView() { + iv_pip_portrait.setOnClickListener(this); + iv_pip.setOnClickListener(this); + iv_land.setOnClickListener(this); + iv_port.setOnClickListener(this); + iv_play.setOnClickListener(this); + iv_play_land.setOnClickListener(this); + iv_finish.setOnClickListener(this); + iv_set.setOnClickListener(this); + iv_danmu.setOnClickListener(this); + iv_dmset.setOnClickListener(this); + iv_finish_danmu.setOnClickListener(this); + iv_share.setOnClickListener(this); + tv_full.setOnClickListener(this); + tv_fit.setOnClickListener(this); + tv_sixteennine.setOnClickListener(this); + tv_fourthree.setOnClickListener(this); + iv_dmwhite.setOnClickListener(this); + //弹幕的初始化配置 + iv_dmwhite.setSelected(true); + tv_dmroll.setSelected(true); + tv_dmfontm.setSelected(true); + color = Color.WHITE; + fontmode = PolyvDanmakuInfo.FONTMODE_ROLL; + fontsize = PolyvDanmakuInfo.FONTSIZE_MIDDLE; + //------------------------------ + iv_dmyellow.setOnClickListener(this); + iv_dmred.setOnClickListener(this); + iv_dmpurple.setOnClickListener(this); + iv_dmgreen.setOnClickListener(this); + iv_dmblue.setOnClickListener(this); + tv_dmroll.setOnClickListener(this); + tv_dmtop.setOnClickListener(this); + tv_dmbottom.setOnClickListener(this); + tv_dmfonts.setOnClickListener(this); + tv_dmfontm.setOnClickListener(this); + tv_dmfontl.setOnClickListener(this); + et_dmedit.setOnClickListener(this); + et_dmedit.setOnEditorActionListener(editorActionListener); + iv_shareqq.setOnClickListener(this); + iv_sharewechat.setOnClickListener(this); + iv_shareweibo.setOnClickListener(this); + iv_dmswitch.setOnClickListener(this); +// /**初始化取消弹幕*/ +// iv_dmswitch.setSelected(true); +// danmuFragment.hide(); + tv_srt1.setOnClickListener(this); + tv_srt2.setOnClickListener(this); + tv_srt3.setOnClickListener(this); + tv_srtnone.setOnClickListener(this); + tv_speed.setOnClickListener(this); + tv_speed_portrait.setOnClickListener(this); + tv_speed05.setOnClickListener(this); + tv_speed05_portrait.setOnClickListener(this); + tv_speed10.setOnClickListener(this); + tv_speed10_portrait.setOnClickListener(this); + tv_speed12.setOnClickListener(this); + tv_speed12_portrait.setOnClickListener(this); + tv_speed15.setOnClickListener(this); + tv_speed15_portrait.setOnClickListener(this); + tv_speed20.setOnClickListener(this); + tv_speed20_portrait.setOnClickListener(this); + tv_bit.setOnClickListener(this); + tv_bit_portrait.setOnClickListener(this); + tv_sc.setOnClickListener(this); + tv_sc_portrait.setOnClickListener(this); + tv_hd.setOnClickListener(this); + tv_hd_portrait.setOnClickListener(this); + tv_flu.setOnClickListener(this); + tv_flu_portrait.setOnClickListener(this); + tv_auto.setOnClickListener(this); + tv_auto_portrait.setOnClickListener(this); + iv_close_bit.setOnClickListener(this); + iv_close_set.setOnClickListener(this); + iv_close_share.setOnClickListener(this); + iv_close_speed.setOnClickListener(this); + tv_dmsend.setOnClickListener(this); + iv_screens.setOnClickListener(this); + sb_play.setOnSeekBarChangeListener(seekBarChangeListener); + sb_play_land.setOnSeekBarChangeListener(seekBarChangeListener); + sb_light.setOnSeekBarChangeListener(seekBarChangeListener); + sb_volume.setOnSeekBarChangeListener(seekBarChangeListener); + iv_video.setOnClickListener(this); + iv_video_land.setOnClickListener(this); + iv_audio.setOnClickListener(this); + iv_audio_land.setOnClickListener(this); + polyvScreenLock.setOnClickListener(this); + polyvScreenLockAudio.setOnClickListener(this); + tv_route.setOnClickListener(this); + tv_route_portrait.setOnClickListener(this); + tv_route1.setOnClickListener(this); + tv_route1_portrait.setOnClickListener(this); + tv_route2.setOnClickListener(this); + tv_route2_portrait.setOnClickListener(this); + tv_route3.setOnClickListener(this); + tv_route3_portrait.setOnClickListener(this); + iv_close_route.setOnClickListener(this); + } + + //是否显示左侧边的切换音视频的布局 + private boolean canShowLeftSideView() { + //是否可以获取到音频的播放地址 + return videoVO != null && videoVO.hasAudioPath(); + } + + public void resetView() { + if (ll_subtitle != null) { + ll_subtitle.setVisibility(View.GONE); + } + if (ll_subtitle_b != null) { + ll_subtitle_b.setVisibility(View.GONE); + } + } + + public void preparedSRT(IPolyvVideoView videoView) { + if (videoView != null) { + this.videoView = (PolyvVideoView) videoView; + this.videoVO = videoView.getVideo(); + //初始化字幕控件 + initSrtView(videoView.getCurrSRTKey()); + int visibility = PolyvVideoVO.MODE_AUDIO.equals(videoView.getCurrentMode()) ? View.GONE : View.VISIBLE; + ll_subtitle.setVisibility(visibility); + ll_subtitle_b.setVisibility(visibility); + } + } + + public void preparedView() { + if (videoView != null) { + videoVO = videoView.getVideo(); + showAudioLock(canShowLeftSideView()); + if (videoVO != null) + tv_title.setText(videoVO.getTitle()); + int totalTime = videoView.getDuration(); + tv_tottime.setText(PolyvTimeUtils.generateTime(totalTime)); + tv_tottime_land.setText(PolyvTimeUtils.generateTime(totalTime)); + //初始化播放器的银幕比率的显示控件 + initRatioView(videoView.getCurrentAspectRatio()); + //初始化倍速控件及其可见性 + initSpeedView((int) (videoView.getSpeed() * 10)); + //初始化码率控件及其可见性 + initBitRateView(videoView.getBitRate()); + initBitRateViewVisible(videoView.getBitRate()); + //初始化切换线路及其可见性 + initRouteView(); + //下面两行代码是设置切换线路默认不可见,如果需要根据是否有线路进行切换,注释这两行代码即可 + tv_route.setVisibility(View.GONE); + tv_route_portrait.setVisibility(View.GONE); + + //音频模式下,隐藏切换码率/填充模式/字幕/截图的按钮 + int visibility = PolyvVideoVO.MODE_AUDIO.equals(videoView.getCurrentMode()) ? View.GONE : View.VISIBLE; + if (visibility == View.GONE) { + rl_center_bit.setVisibility(visibility); + rl_center_bit_portrait.setVisibility(visibility); + rl_center_route.setVisibility(visibility); + rl_center_route_portrait.setVisibility(visibility); + } + tv_bit.setVisibility(visibility); + tv_bit_portrait.setVisibility(visibility); + ll_adaptive_mode.setVisibility(visibility); + iv_screens.setVisibility(GONE); + //设置进度条的打点位置 + if (PolyvVideoVO.MODE_VIDEO.equals(videoView.getCurrentMode())) { + List videokeyframes; + if (videoVO != null && (videokeyframes = videoVO.getVideokeyframes()) != null) { + int maxProgress = videoView.getDuration() / 1000; + double rate = 1; + if (maxProgress < 1000) {//最大进度最小为1000 + rate = 1000 * 1.0 / maxProgress; + maxProgress = 1000; + } + List tickDataList = new ArrayList<>(); + for (PolyvVideoVO.Videokeyframe videokeyframe : videokeyframes) { + //打点的颜色请设置和seekBar的thumb的颜色一致,因为打点是在thumb上层的 + tickDataList.add(new PolyvTickSeekBar.TickData(videokeyframe.getKeytime(), (float) (videokeyframe.getKeytime() * rate), Color.WHITE, videokeyframe)); + } + sb_play_land.setMax(maxProgress); + sb_play_land.setTicks(tickDataList); + sb_play_land.setOnTickClickListener(new PolyvTickSeekBar.OnTickClickListener() { + @Override + public void onTickClick(PolyvTickSeekBar.TickData tickData) { + tickTips.show(tickData); + resetHideTime(longTime); + } + + @Override + public boolean onSeekBarClick() { + tickTips.hide(); + resetHideTime(longTime); + return true;//false:点击非打点处不触发onProgressChanged + } + }); + } + } + + //如果可以获取到音频的播放地址,则显示切换到音频的按钮 + if (canShowLeftSideView()) { + resetLeftSideView(View.VISIBLE); + if (PolyvVideoVO.MODE_VIDEO.equals(videoView.getCurrentMode())) { + resetModeView(true); + } else { + resetModeView(false); + } + } + } + // 视频准备完成后,开启随手势自动切换屏幕 + if (PolyvScreenUtils.isLandscape(mContext)) + sensorHelper.toggle(true, false); + else + sensorHelper.toggle(true, true); + } + + @Override + public void setMediaPlayer(IPolyvVideoView player) { + videoView = (PolyvVideoView) player; + } + + @Override + public void release() { + //播放器release时主动调用 + } + + @Override + public void destroy() { + //播放器destroy时主动调用 + } + + @Override + public void hide() { + if (isShowing) { + handler.removeMessages(HIDE); + handler.removeMessages(SHOW_PROGRESS); + resetPopupLayout(); + isShowing = !isShowing; + setVisibility(View.GONE); + } + } + + @Override + public boolean isShowing() { + return isShowing; + } + + @Override + public void setAnchorView(View view) { + //... + } + + public void hideTickTips() { + tickTips.hide(); + } + + // 关闭监听 + public void pause() { + sensorHelper.disable(); + } + + // 开启监听 + public void resume() { + sensorHelper.enable(); + } + + /** + * 退出播放器的Activity时需调用 + */ + public void disable() { + hide(); + sensorHelper.disable(); + } + + private void resetPopupLayout(){ + resetSetLayout(View.GONE); + resetDanmuLayout(View.GONE); + resetShareLayout(View.GONE); + resetSpeedLayout(View.GONE); + resetBitRateLayout(View.GONE); + resetRouteLayout(View.GONE); + hidePortraitPopupView(); + tickTips.hide(); + } + + /** + * 显示控制栏 + * + * @param timeout 显示的时间,<0时将一直显示 + */ + @Override + public void show(int timeout) { + if (timeout < 0) + status_showalways = true; + else + status_showalways = false; + if (PolyvScreenUtils.isLandscape(getContext()) && (polyvScreenLock.isSelected() || polyvScreenLockAudio.isSelected())) { + setVisibility(View.VISIBLE); + + updateLockStatus(); + resetPopupLayout(); + resetSideLayout(View.GONE); + resetLeftSideView(View.GONE); + resetTopBottomLayout(View.GONE); + isShowing = true; + } else { + if (!isShowing) { + resetTopBottomLayout(View.VISIBLE); + resetSideLayout(View.VISIBLE); + if (canShowLeftSideView()) { + resetLeftSideView(View.VISIBLE); + } + //获取焦点 + requestFocus(); + handler.removeMessages(SHOW_PROGRESS); + handler.sendEmptyMessage(SHOW_PROGRESS); + isShowing = !isShowing; + setVisibility(View.VISIBLE); + ImmersionBar.with((Activity) mContext).keyboardEnable(true).statusBarDarkFont(true).titleBar(head).init(); + } + sensorHelper.toggle(true, PolyvScreenUtils.isLandscape(getContext())); + + } + + + resetHideTime(timeout); + } + + private void updateLockStatus() { + boolean show = canShowLeftSideView(); + polyvScreenLockAudio.setVisibility(show ? VISIBLE : GONE); + polyvScreenLock.setVisibility(show ? GONE : VISIBLE); + + sensorHelper.toggle(!polyvScreenLockAudio.isSelected() && !polyvScreenLock.isSelected(),true); + } + + @Override + public void show() { + show(longTime); + } + + /** + * 切换到横屏 + */ + public void changeToLandscape() { + tv_exchange1.setVisibility(GONE); + head.setVisibility(GONE); + PolyvScreenUtils.setLandscape(videoActivity); + //初始为横屏时,状态栏需要隐藏 + PolyvScreenUtils.hideStatusBar(videoActivity); + //初始为横屏时,控制栏的宽高需要设置 + initLandScapeWH(); + } + + private void initLandScapeWH() { + ViewGroup.LayoutParams vlp = parentView.getLayoutParams(); + vlp.width = ViewGroup.LayoutParams.MATCH_PARENT; + vlp.height = ViewGroup.LayoutParams.MATCH_PARENT; + rl_land.setVisibility(View.VISIBLE); + rl_port.setVisibility(View.GONE); + } + + /** + * 切换到竖屏 + */ + public void changeToPortrait() { + tv_exchange1.setVisibility(VISIBLE); + head.setVisibility(VISIBLE); + + if (is_white==1){ + tv_exchange1.setVisibility(GONE); + } + + PolyvScreenUtils.setPortrait(videoActivity); + initPortraitWH(); + } + + private void initPortraitWH() { + ViewGroup.LayoutParams vlp = parentView.getLayoutParams(); + vlp.width = ViewGroup.LayoutParams.MATCH_PARENT; + vlp.height = PolyvScreenUtils.getHeight16_9(); + rl_port.setVisibility(View.VISIBLE); + rl_land.setVisibility(View.GONE); + ImmersionBar.with((Activity) mContext).titleBar(head).init(); + } + + @Override + protected void onConfigurationChanged(Configuration newConfig) { + super.onConfigurationChanged(newConfig); + resetControllerLayout(); + } + + //根据屏幕状态改变控制栏布局 + private void resetControllerLayout() { + if(polyvScreenLock.isSelected() || polyvScreenLockAudio.isSelected()){ + return; + } + hide(); + PolyvScreenUtils.reSetStatusBar(videoActivity); + if (PolyvScreenUtils.isLandscape(mContext)) { + // 横屏下开启自动切换横竖屏 + sensorHelper.toggle(true, true); + initLandScapeWH(); + } else { + // 竖屏下开启自动切换横竖屏 + sensorHelper.toggle(true, false); + initPortraitWH(); + } + } + + //根据视频的播放状态去暂停或播放 + private void playOrPause() { + if (videoView != null) { + if (videoView.isPlaying()) { +// danmuFragment.pause(); + videoView.pause(); + status_isPlaying = false; + iv_play.setSelected(true); + iv_play_land.setSelected(true); + } else { +// danmuFragment.resume(); + videoView.start(); + status_isPlaying = true; + iv_play.setSelected(false); + iv_play_land.setSelected(false); + } + } + } + + SeekBar.OnSeekBarChangeListener seekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int i, boolean b) { + if (!b) + return; + tickTips.hide(); + switch (seekBar.getId()) { + case R.id.sb_play: + case R.id.sb_play_land: + resetHideTime(longTime); + status_dragging = true; + if (videoView != null) { + int newPosition = (int) (videoView.getDuration() * (long) i / seekBar.getMax()); + tv_curtime.setText(PolyvTimeUtils.generateTime(newPosition)); + tv_curtime_land.setText(PolyvTimeUtils.generateTime(newPosition)); + } + break; + case R.id.sb_light: + if (videoView != null) + videoView.setBrightness(videoActivity, i); + break; + case R.id.sb_volume: + if (videoView != null) + videoView.setVolume(i); + break; + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + if (!seekBar.isSelected()) + seekBar.setSelected(true); + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + if (seekBar.isSelected()) + seekBar.setSelected(false); + switch (seekBar.getId()) { + case R.id.sb_play: + case R.id.sb_play_land: + if (videoView != null) { + int seekToPosition = (int) (videoView.getDuration() * (long) seekBar.getProgress() / seekBar.getMax()); + if (!videoView.isCompletedState()) { + videoView.seekTo(seekToPosition); +// danmuFragment.seekTo(); + } else if (videoView.isCompletedState() && seekToPosition / seekBar.getMax() * seekBar.getMax() < videoView.getDuration() / seekBar.getMax() * seekBar.getMax()) { + videoView.seekTo(seekToPosition); +// danmuFragment.seekTo(); + videoView.start(); +// danmuFragment.resume(); + } + } + status_dragging = false; + break; + } + } + }; + + TextView.OnEditorActionListener editorActionListener = new TextView.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) { + if (i == EditorInfo.IME_ACTION_SEND) { + sendDanmaku(); + return true; + } + return false; + } + }; + + //重置控制栏的隐藏时间 + private void resetHideTime(int delayedTime) { + handler.removeMessages(HIDE); + if (delayedTime >= 0) + handler.sendMessageDelayed(handler.obtainMessage(HIDE), delayedTime); + } + + //重置控制栏的顶部和底部布局以及进度条的显示状态 + private void resetTopBottomLayout(int isVisible) { + resetTopBottomLayout(isVisible, false); + } + + private void resetTopBottomLayout(int isVisible, boolean onlyHideTop) { + rl_top.setVisibility(isVisible); + if (!onlyHideTop) { + rl_bot.setVisibility(isVisible); + sb_play_land.setVisibility(isVisible); + } + } + + //重置侧边的布局的显示状态 + private void resetSideLayout(int isVisible) { + ll_side.setVisibility(isVisible); + } + + //重置设置布局的显示状态 + private void resetSetLayout(int isVisible) { + if (isVisible == View.VISIBLE) { + show(-1); + resetTopBottomLayout(View.GONE); + resetSideLayout(View.GONE); + resetLeftSideView(View.GONE); + if (videoView != null) { + sb_light.setProgress(videoView.getBrightness(videoActivity)); + sb_volume.setProgress(videoView.getVolume()); + } + } + rl_center_set.setVisibility(isVisible); + } + + //重置弹幕布局的显示状态 + private void resetDanmuLayout(int isVisible) { + if (isVisible == View.VISIBLE) { + show(-1); + resetTopBottomLayout(View.GONE); + resetSideLayout(View.GONE); + resetLeftSideView(View.GONE); + resetBitRateLayout(View.GONE, false); + resetSpeedLayout(View.GONE, false); + resetRouteLayout(View.GONE, false); + et_dmedit.requestFocus(); + et_dmedit.setText(""); + if (videoView != null) { + status_isPlaying = videoView.isPlaying(); + videoView.pause(true); +// danmuFragment.pause(); + } + PolyvKeyBoardUtils.openKeybord(et_dmedit, mContext); + } else if (rl_center_danmu.getVisibility() == View.VISIBLE) { + if (videoView != null && status_isPlaying) { + videoView.start(); +// danmuFragment.resume(); + } + PolyvKeyBoardUtils.closeKeybord(et_dmedit, mContext); + } + iv_dmset.setSelected(false); + rl_dmbot.setVisibility(View.GONE); + rl_center_danmu.setVisibility(isVisible); + } + + //重置弹幕布局的底部布局的显示状态 + private void resetDanmuBottomLayout() { + if (rl_dmbot.getVisibility() == View.VISIBLE) { + rl_dmbot.setVisibility(View.GONE); + iv_dmset.setSelected(false); + PolyvKeyBoardUtils.openKeybord(et_dmedit, mContext); + } else { + rl_dmbot.setVisibility(View.VISIBLE); + iv_dmset.setSelected(true); + PolyvKeyBoardUtils.closeKeybord(et_dmedit, mContext); + } + } + + //重置分享布局的显示状态 + private void resetShareLayout(int isVisible) { + if (isVisible == View.VISIBLE) { + show(-1); + resetTopBottomLayout(View.GONE); + resetSideLayout(View.GONE); + resetLeftSideView(View.GONE); + } + rl_center_share.setVisibility(isVisible); + } + + //重置选择播放器银幕比率控件的状态 + private void resetRatioView(int screenRatio) { + initRatioView(screenRatio); + if (videoView != null) + videoView.setAspectRatio(screenRatio); + } + + //初始化选择播放器银幕比率控件 + private void initRatioView(int screenRatio) { + tv_full.setSelected(false); + tv_fit.setSelected(false); + tv_sixteennine.setSelected(false); + tv_fourthree.setSelected(false); + switch (screenRatio) { + case PolyvPlayerScreenRatio.AR_ASPECT_FILL_PARENT: + tv_full.setSelected(true); + break; + case PolyvPlayerScreenRatio.AR_ASPECT_FIT_PARENT: + tv_fit.setSelected(true); + break; + case PolyvPlayerScreenRatio.AR_16_9_FIT_PARENT: + tv_sixteennine.setSelected(true); + break; + case PolyvPlayerScreenRatio.AR_4_3_FIT_PARENT: + tv_fourthree.setSelected(true); + break; + } + } + + //重置弹幕颜色按钮的状态 + private void resetDammuColorView(int color) { + this.color = color; + iv_dmblue.setSelected(false); + iv_dmgreen.setSelected(false); + iv_dmpurple.setSelected(false); + iv_dmred.setSelected(false); + iv_dmwhite.setSelected(false); + iv_dmyellow.setSelected(false); + switch (color) { + case Color.WHITE: + iv_dmwhite.setSelected(true); + break; + case Color.BLUE: + iv_dmblue.setSelected(true); + break; + case Color.GREEN: + iv_dmgreen.setSelected(true); + break; + case Color.YELLOW: + iv_dmyellow.setSelected(true); + break; + case Color.RED: + iv_dmred.setSelected(true); + break; + case Color.MAGENTA: + iv_dmpurple.setSelected(true); + break; + } + } + + //重置弹幕样式按钮的状态 + private void resetDanmaStyleView(String style) { + this.fontmode = style; + tv_dmroll.setSelected(false); + tv_dmtop.setSelected(false); + tv_dmbottom.setSelected(false); + switch (style) { + case PolyvDanmakuInfo.FONTMODE_ROLL: + tv_dmroll.setSelected(true); + break; + case PolyvDanmakuInfo.FONTMODE_TOP: + tv_dmtop.setSelected(true); + break; + case PolyvDanmakuInfo.FONTMODE_BOTTOM: + tv_dmbottom.setSelected(true); + break; + } + } + + //重置弹幕字体大小按钮的状态 + private void resetDanmaFontView(String fontSize) { + this.fontsize = fontSize; + tv_dmfonts.setSelected(false); + tv_dmfontm.setSelected(false); + tv_dmfontl.setSelected(false); + switch (fontSize) { + case PolyvDanmakuInfo.FONTSIZE_SMALL: + tv_dmfonts.setSelected(true); + break; + case PolyvDanmakuInfo.FONTSIZE_MIDDLE: + tv_dmfontm.setSelected(true); + break; + case PolyvDanmakuInfo.FONTSIZE_LARGE: + tv_dmfontl.setSelected(true); + break; + } + } + + //重置选择字幕的控件 + private void resetSrtView(int srtPosition) { + if (videoView != null) + videoView.changeSRT(initSrtView(srtPosition)); + } + + private String initSrtView(int srtPosition) { + tv_srt1.setSelected(false); + tv_srt2.setSelected(false); + tv_srt3.setSelected(false); + tv_srtnone.setSelected(false); + List srtKeys = new ArrayList(); + if (videoVO != null) + srtKeys.addAll(videoVO.getVideoSRT().keySet()); + switch (srtPosition) { + case 0: + tv_srt1.setSelected(true); + break; + case 1: + tv_srt2.setSelected(true); + break; + case 2: + tv_srt3.setSelected(true); + break; + case 3: + tv_srtnone.setSelected(true); + break; + } + return srtPosition == 3 ? "不显示" : srtKeys.get(srtPosition); + } + + //初始化选择字幕的控件 + private void initSrtView(String srtKey) { + tv_srt1.setSelected(false); + tv_srt2.setSelected(false); + tv_srt3.setSelected(false); + tv_srt1.setVisibility(View.VISIBLE); + tv_srt2.setVisibility(View.VISIBLE); + tv_srt3.setVisibility(View.VISIBLE); + tv_srtnone.setSelected(false); + List srtKeys = new ArrayList(); + if (videoVO != null) + srtKeys.addAll(videoVO.getVideoSRT().keySet()); + switch (srtKeys.size()) { + case 0: + tv_srt1.setVisibility(View.GONE); + tv_srt2.setVisibility(View.GONE); + tv_srt3.setVisibility(View.GONE); + break; + case 1: + tv_srt1.setText(srtKeys.get(0)); + tv_srt2.setVisibility(View.GONE); + tv_srt3.setVisibility(View.GONE); + break; + case 2: + tv_srt1.setText(srtKeys.get(0)); + tv_srt2.setText(srtKeys.get(1)); + tv_srt3.setVisibility(View.GONE); + break; + default: + tv_srt1.setText(srtKeys.get(0)); + tv_srt2.setText(srtKeys.get(1)); + tv_srt3.setText(srtKeys.get(2)); + break; + } + if (TextUtils.isEmpty(srtKey)) { + tv_srtnone.setSelected(true); + return; + } + switch (srtKeys.indexOf(srtKey)) { + case 0: + tv_srt1.setSelected(true); + break; + case 1: + tv_srt2.setSelected(true); + break; + case 2: + tv_srt3.setSelected(true); + break; + } + } + + //重置选择播放速度的布局 + private void resetSpeedLayout(int isVisible) { + resetSpeedLayout(isVisible, true); + } + + private void resetSpeedLayout(int isVisible, boolean isShowTopBottomLayout) { + if (isVisible == View.VISIBLE) { + show(-1); + resetTopBottomLayout(View.GONE, true); + resetBitRateLayout(View.GONE, false); + resetRouteLayout(View.GONE, false); + } else if (isShowTopBottomLayout) { + resetTopBottomLayout(View.VISIBLE); + requestFocus(); + resetHideTime(longTime); + } + rl_center_speed.setVisibility(isVisible); + } + + //初始化选择播放速度的控件 + private void initSpeedView(int speed) { + tv_speed05.setSelected(false); + tv_speed05_portrait.setSelected(false); + tv_speed10.setSelected(false); + tv_speed10_portrait.setSelected(false); + tv_speed12.setSelected(false); + tv_speed12_portrait.setSelected(false); + tv_speed15.setSelected(false); + tv_speed15_portrait.setSelected(false); + tv_speed20.setSelected(false); + tv_speed20_portrait.setSelected(false); + switch (speed) { + case 5: + tv_speed05.setSelected(true); + tv_speed05_portrait.setSelected(true); + tv_speed.setText("0.5x"); + tv_speed_portrait.setText("0.5x"); + break; + case 10: + tv_speed10.setSelected(true); + tv_speed10_portrait.setSelected(true); + tv_speed.setText("1x"); + tv_speed_portrait.setText("1x"); + break; + case 12: + tv_speed12.setSelected(true); + tv_speed12_portrait.setSelected(true); + tv_speed.setText("1.2x"); + tv_speed_portrait.setText("1.2x"); + break; + case 15: + tv_speed15.setSelected(true); + tv_speed15_portrait.setSelected(true); + tv_speed.setText("1.5x"); + tv_speed_portrait.setText("1.5x"); + break; + case 20: + tv_speed20.setSelected(true); + tv_speed20_portrait.setSelected(true); + tv_speed.setText("2x"); + tv_speed_portrait.setText("2x"); + break; + } + } + + //重置选择播放速度的控件 + private void resetSpeedView(int speed) { + initSpeedView(speed); + if (videoView != null) { + videoView.setSpeed(speed / 10f); + } + hide(); + } + + //初始化选择码率的控件 + private void initBitRateView(int bitRate) { + tv_sc.setSelected(false); + tv_sc_portrait.setSelected(false); + tv_hd.setSelected(false); + tv_hd_portrait.setSelected(false); + tv_flu.setSelected(false); + tv_flu_portrait.setSelected(false); + tv_auto.setSelected(false); + tv_auto_portrait.setSelected(false); + switch (bitRate) { + case 0: + tv_bit.setText("自动"); + tv_bit_portrait.setText("自动"); + tv_auto.setSelected(true); + tv_auto_portrait.setSelected(true); + break; + case 1: + tv_bit.setText("流畅"); + tv_bit_portrait.setText("流畅"); + tv_flu.setSelected(true); + tv_flu_portrait.setSelected(true); + break; + case 2: + tv_bit.setText("高清"); + tv_bit_portrait.setText("高清"); + tv_hd.setSelected(true); + tv_hd_portrait.setSelected(true); + break; + case 3: + tv_bit.setText("超清"); + tv_bit_portrait.setText("超清"); + tv_sc.setSelected(true); + tv_sc_portrait.setSelected(true); + break; + } + } + + //初始化选择码率控件的可见性 + private void initBitRateViewVisible(int currentBitRate) { + tv_sc.setVisibility(View.GONE); + tv_sc_portrait.setVisibility(View.GONE); + tv_hd.setVisibility(View.GONE); + tv_hd_portrait.setVisibility(View.GONE); + tv_flu.setVisibility(View.GONE); + tv_flu_portrait.setVisibility(View.GONE); + tv_auto.setVisibility(View.GONE); + tv_auto_portrait.setVisibility(View.GONE); + if (videoVO != null) { + switch (videoVO.getDfNum()) { + case 1: + tv_flu.setVisibility(View.VISIBLE); + tv_flu_portrait.setVisibility(View.VISIBLE); + tv_auto.setVisibility(View.VISIBLE); + tv_auto_portrait.setVisibility(View.VISIBLE); + break; + case 2: + tv_hd.setVisibility(View.VISIBLE); + tv_hd_portrait.setVisibility(View.VISIBLE); + tv_flu.setVisibility(View.VISIBLE); + tv_flu_portrait.setVisibility(View.VISIBLE); + tv_auto.setVisibility(View.VISIBLE); + tv_auto_portrait.setVisibility(View.VISIBLE); + break; + case 3: + tv_sc.setVisibility(View.VISIBLE); + tv_sc_portrait.setVisibility(View.VISIBLE); + tv_hd.setVisibility(View.VISIBLE); + tv_hd_portrait.setVisibility(View.VISIBLE); + tv_flu.setVisibility(View.VISIBLE); + tv_flu_portrait.setVisibility(View.VISIBLE); + tv_auto.setVisibility(View.VISIBLE); + tv_auto_portrait.setVisibility(View.VISIBLE); + break; + } + } else { + switch (currentBitRate) { + case 0: + tv_auto.setVisibility(View.VISIBLE); + tv_auto_portrait.setVisibility(View.VISIBLE); + break; + case 1: + tv_flu.setVisibility(View.VISIBLE); + tv_flu_portrait.setVisibility(View.VISIBLE); + break; + case 2: + tv_hd.setVisibility(View.VISIBLE); + tv_hd_portrait.setVisibility(View.VISIBLE); + break; + case 3: + tv_sc.setVisibility(View.VISIBLE); + tv_sc_portrait.setVisibility(View.VISIBLE); + break; + } + } + } + + //重置播放码率布局的状态 + private void resetBitRateLayout(int isVisible) { + resetBitRateLayout(isVisible, true); + } + + private void resetBitRateLayout(int isVisible, boolean isShowTopBottomLayout) { + if (isVisible == View.VISIBLE) { + show(-1); + resetTopBottomLayout(View.GONE, true); + resetSpeedLayout(View.GONE, false); + resetRouteLayout(View.GONE, false); + } else if (isShowTopBottomLayout) { + resetTopBottomLayout(View.VISIBLE); + requestFocus(); + resetHideTime(longTime); + } + rl_center_bit.setVisibility(isVisible); + } + + //重置选择码率的控件 + private void resetBitRateView(int bitRate) { + boolean isChangeSuccess = false; + if (videoView != null) + isChangeSuccess = videoView.changeBitRate(bitRate); + if (isChangeSuccess) { + initBitRateView(bitRate); + hide(); + } + } + + private void changeRoute(int route) { + boolean isChangeSuccess = false; + if (videoView != null) + isChangeSuccess = videoView.changeRoute(route); + if (isChangeSuccess) { + initSelectedRouteView(route); + hide(); + } + } + + private void resetRouteLayout(int isVisible) { + resetRouteLayout(isVisible, true); + } + + private void resetRouteLayout(int isVisible, boolean isShowTopBottomLayout) { + if (isVisible == View.VISIBLE) { + show(-1); + resetTopBottomLayout(View.GONE, true); + resetSpeedLayout(View.GONE, false); + resetBitRateLayout(View.GONE, false); + } else if (isShowTopBottomLayout) { + resetTopBottomLayout(View.VISIBLE); + requestFocus(); + resetHideTime(longTime); + } + rl_center_route.setVisibility(isVisible); + } + + private void initRouteView() { + if (videoView.getRouteCount() > 1) { + tv_route.setVisibility(View.VISIBLE); + tv_route_portrait.setVisibility(View.VISIBLE); + + tv_route1.setVisibility(View.VISIBLE); + tv_route1_portrait.setVisibility(View.VISIBLE); + tv_route2.setVisibility(View.VISIBLE); + tv_route2_portrait.setVisibility(View.VISIBLE); + if (videoView.getRouteCount() > 2) { + tv_route3.setVisibility(View.VISIBLE); + tv_route3_portrait.setVisibility(View.VISIBLE); + } else { + tv_route3.setVisibility(View.GONE); + tv_route3_portrait.setVisibility(View.GONE); + } + + initSelectedRouteView(videoView.getCurrentRoute()); + } else { + tv_route.setVisibility(View.GONE); + tv_route_portrait.setVisibility(View.GONE); + } + } + + private void initSelectedRouteView(int currentRoute) { + tv_route1_portrait.setSelected(false); + tv_route1.setSelected(false); + tv_route2_portrait.setSelected(false); + tv_route2.setSelected(false); + tv_route3_portrait.setSelected(false); + tv_route3.setSelected(false); + + if (currentRoute == 1) { + tv_route1_portrait.setSelected(true); + tv_route1.setSelected(true); + } else if (currentRoute == 2) { + tv_route2_portrait.setSelected(true); + tv_route2.setSelected(true); + } else { + tv_route3_portrait.setSelected(true); + tv_route3.setSelected(true); + } + } + + //重置显示/隐藏弹幕的控件 + private void resetDmSwitchView() { + if (iv_dmswitch.isSelected()) { + iv_dmswitch.setSelected(false); +// danmuFragment.show(); + } else { + iv_dmswitch.setSelected(true); +// danmuFragment.hide(); + } + } + + //网络截图 + private void screenshot() { + String vid = null; + int bit = 0; + int currentTime_second = 0; + int videoVODuration = 0; + if (videoVO != null) { + vid = videoVO.getVid(); + bit = videoVO.getDfNum(); + try { + videoVODuration = (int) Float.parseFloat(videoVO.getDuration()) * 1000; + } catch (Exception e) { + } + } else { + toastMsg("截图失败:videoVO is null"); + return; + } + if (videoView != null) { + int currentPosition = videoView.getCurrentPosition(); + int totalPosition = videoVODuration > 0 ? videoVODuration : videoView.getDuration(); + currentPosition = currentPosition > totalPosition ? totalPosition : currentPosition; + currentTime_second = currentPosition / 1000; + } else { + toastMsg("截图失败:videoView is null"); + return; + } + new PolyvScreenShot(mContext).snapshot(vid, bit, currentTime_second, new PolyvScreenShot.ScreenshotListener() { + @Override + public void fail(Throwable throwable) { + toastMsg("截图失败:" + throwable.getMessage()); + } + + @Override + public void success(String s) { + toastMsg("截图成功:" + s); + } + }); + } + + //发送弹幕并隐藏布局 + private void sendDanmaku() { +// danmuFragment.send(videoView, et_dmedit.getText().toString(), fontmode, fontsize, color); +// hide(); + } + + private void toastMsg(final String msg) { + Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show(); + } + + private void resetLeftSideView(int visibility) { + ll_left_side.setVisibility(visibility); + ll_left_side_land.setVisibility(visibility); + ll_left_side_t.setVisibility(visibility); + ll_left_side_t_land.setVisibility(visibility); + } + + private void resetModeView(boolean isVideo) { + iv_video.setSelected(isVideo); + iv_video_land.setSelected(isVideo); + iv_audio.setSelected(!isVideo); + iv_audio_land.setSelected(!isVideo); + tv_video.setSelected(isVideo); + tv_video_land.setSelected(isVideo); + tv_audio.setSelected(!isVideo); + tv_audio_land.setSelected(!isVideo); + } + + private void hidePortraitPopupView() { + rl_center_bit_portrait.setVisibility(View.GONE); + rl_center_speed_portrait.setVisibility(View.GONE); + rl_center_route_portrait.setVisibility(View.GONE); + } + + public boolean isLocked() { + return PolyvScreenUtils.isLandscape(getContext()) && + (polyvScreenLock.isSelected() || polyvScreenLockAudio.isSelected()); + } + + @Override + public void onClick(View view) { + switch (view.getId()) { + case R.id.iv_pip_portrait: + case R.id.iv_pip: + if (Build.VERSION.SDK_INT < 26) + return; + boolean result = videoActivity.enterPictureInPictureMode(pipBuilder.build()); + if (!result) { + Toast.makeText(videoActivity, "请允许画中画权限后重试!", Toast.LENGTH_LONG).show(); + Intent intent = new Intent("android.settings.PICTURE_IN_PICTURE_SETTINGS"); + Uri uri = Uri.fromParts("package", videoActivity.getPackageName(), null); + intent.setData(uri); + videoActivity.startActivityForResult(intent, 3); + } else { + if (viceLayout != null) { + if (viceLayout.isPPTInMinScreen()) { + viceLayout.switchLocation(false); + } + isViceHideInPipMode = viceLayout.isVisibible(); + viceLayout.hide(); + } + } + break; + case R.id.polyv_screen_lock: + case R.id.polyv_screen_lock_audio: + view.setSelected(!view.isSelected()); + show(); + break; + case R.id.iv_land: + changeToLandscape(); + break; + case R.id.iv_port: + changeToPortrait(); + break; + case R.id.iv_play: + playOrPause(); + break; + case R.id.iv_play_land: + playOrPause(); + break; + case R.id.iv_finish: + changeToPortrait(); + break; + case R.id.iv_set: + resetSetLayout(View.VISIBLE); + break; + case R.id.iv_danmu: + resetDanmuLayout(View.VISIBLE); + break; + case R.id.iv_dmset: + resetDanmuBottomLayout(); + break; + case R.id.iv_finish_danmu: + hide(); + break; + case R.id.iv_share: + resetShareLayout(View.VISIBLE); + break; + case R.id.tv_full: + resetRatioView(PolyvPlayerScreenRatio.AR_ASPECT_FILL_PARENT); + break; + case R.id.tv_fit: + resetRatioView(PolyvPlayerScreenRatio.AR_ASPECT_FIT_PARENT); + break; + case R.id.tv_sixteennine: + resetRatioView(PolyvPlayerScreenRatio.AR_16_9_FIT_PARENT); + break; + case R.id.tv_fourthree: + resetRatioView(PolyvPlayerScreenRatio.AR_4_3_FIT_PARENT); + break; + case R.id.iv_dmblue: + resetDammuColorView(Color.BLUE); + break; + case R.id.iv_dmgreen: + resetDammuColorView(Color.GREEN); + break; + case R.id.iv_dmpurple: + resetDammuColorView(Color.MAGENTA); + break; + case R.id.iv_dmred: + resetDammuColorView(Color.RED); + break; + case R.id.iv_dmwhite: + resetDammuColorView(Color.WHITE); + break; + case R.id.iv_dmyellow: + resetDammuColorView(Color.YELLOW); + break; + case R.id.tv_dmroll: + resetDanmaStyleView(PolyvDanmakuInfo.FONTMODE_ROLL); + break; + case R.id.tv_dmtop: + resetDanmaStyleView(PolyvDanmakuInfo.FONTMODE_TOP); + break; + case R.id.tv_dmbottom: + resetDanmaStyleView(PolyvDanmakuInfo.FONTMODE_BOTTOM); + break; + case R.id.tv_dmfonts: + resetDanmaFontView(PolyvDanmakuInfo.FONTSIZE_SMALL); + break; + case R.id.tv_dmfontm: + resetDanmaFontView(PolyvDanmakuInfo.FONTSIZE_MIDDLE); + break; + case R.id.tv_dmfontl: + resetDanmaFontView(PolyvDanmakuInfo.FONTSIZE_LARGE); + break; + case R.id.et_dmedit: + rl_dmbot.setVisibility(View.GONE); + iv_dmset.setSelected(false); + break; + case R.id.iv_dmswitch: + resetDmSwitchView(); + break; + case R.id.tv_srt1: + resetSrtView(0); + break; + case R.id.tv_srt2: + resetSrtView(1); + break; + case R.id.tv_srt3: + resetSrtView(2); + break; + case R.id.tv_srtnone: + resetSrtView(3); + break; + case R.id.tv_speed_portrait: + boolean isVisible = rl_center_speed_portrait.getVisibility() == View.VISIBLE; + hidePortraitPopupView(); + if (!isVisible) { + rl_center_speed_portrait.setVisibility(View.VISIBLE); + } + break; + case R.id.tv_speed: + if (rl_center_speed.getVisibility() == View.GONE) + resetSpeedLayout(View.VISIBLE); + else + resetSpeedLayout(View.GONE); + break; + case R.id.tv_bit_portrait: + boolean isVisibleBit = rl_center_bit_portrait.getVisibility() == View.VISIBLE; + hidePortraitPopupView(); + if (!isVisibleBit) { + rl_center_bit_portrait.setVisibility(View.VISIBLE); + } + break; + case R.id.tv_bit: + if (rl_center_bit.getVisibility() == View.GONE) + resetBitRateLayout(View.VISIBLE); + else + resetBitRateLayout(View.GONE); + break; + case R.id.tv_sc_portrait: + case R.id.tv_sc: + resetBitRateView(3); + break; + case R.id.tv_hd_portrait: + case R.id.tv_hd: + resetBitRateView(2); + break; + case R.id.tv_flu_portrait: + case R.id.tv_flu: + resetBitRateView(1); + break; + case R.id.tv_auto_portrait: + case R.id.tv_auto: + resetBitRateView(0); + break; + case R.id.tv_speed05_portrait: + case R.id.tv_speed05: + resetSpeedView(5); + break; + case R.id.tv_speed10_portrait: + case R.id.tv_speed10: + resetSpeedView(10); + break; + case R.id.tv_speed12_portrait: + case R.id.tv_speed12: + resetSpeedView(12); + break; + case R.id.tv_speed15_portrait: + case R.id.tv_speed15: + resetSpeedView(15); + break; + case R.id.tv_speed20_portrait: + case R.id.tv_speed20: + resetSpeedView(20); + break; + case R.id.iv_close_bit: + hide(); + break; + case R.id.tv_route_portrait: + boolean isVisibleRoute = rl_center_route_portrait.getVisibility() == View.VISIBLE; + hidePortraitPopupView(); + if (!isVisibleRoute) { + rl_center_route_portrait.setVisibility(View.VISIBLE); + } + break; + case R.id.tv_route: + if (rl_center_route.getVisibility() == View.GONE) + resetRouteLayout(View.VISIBLE); + else + resetRouteLayout(View.GONE); + break; + case R.id.tv_route1_portrait: + case R.id.tv_route1: + changeRoute(1); + break; + case R.id.tv_route2_portrait: + case R.id.tv_route2: + changeRoute(2); + break; + case R.id.tv_route3_portrait: + case R.id.tv_route3: + changeRoute(3); + break; + case R.id.iv_close_route: + hide(); + break; + case R.id.iv_close_set: + hide(); + break; + case R.id.iv_close_share: + hide(); + break; + case R.id.iv_close_speed: + hide(); + break; + case R.id.tv_dmsend: + sendDanmaku(); + break; + case R.id.iv_screens: + screenshot(); + break; + case R.id.iv_video: + case R.id.iv_video_land: + //如果当前已经是优先视频模式,则不再切换 + if (videoView != null && !PolyvVideoVO.MODE_VIDEO.equals(videoView.getPriorityMode())) { + resetModeView(true); + showAudioLock(true); + videoView.changeMode(PolyvVideoVO.MODE_VIDEO); + if (coverView != null) + coverView.hide(); + } + break; + case R.id.iv_audio: + case R.id.iv_audio_land: + //如果当前已经是优先音频模式,则不再切换 + if (videoView != null && !PolyvVideoVO.MODE_AUDIO.equals(videoView.getPriorityMode())) { + resetModeView(false); + showAudioLock(true); + videoView.changeMode(PolyvVideoVO.MODE_AUDIO); + } + break; + } + //如果控制栏不是处于一直显示的状态,那么重置控制栏隐藏的时间 + if (!status_showalways) + resetHideTime(longTime); + } + public boolean isViceHideInPipMode() { + return isViceHideInPipMode; + } + + /** + * 切换到竖屏小窗 + */ + public void changeToSmallScreen() { + changeToPortrait(); +// PolyvScreenUtils.setPortrait(videoActivity); +// initSmallScreenWH(); + } + + + /** + * 切换到全屏 + */ + public void changeToFullScreen() { + changeToLandscape(); +// if (fullScreenStrategy == FULLSCREEN_PORTRAIT) { +// changeToFullPortrait(); +// } else if (fullScreenStrategy == FULLSCREEN_LANDSCAPE) { +// changeToFullLandscape(); +// } else { +// if (videoWidth >= videoHeight) { +// changeToFullLandscape(); +// } else { +// changeToFullPortrait(); +// } +// } + } + /** + * 切换到横屏全屏 + */ + public void changeToFullLandscape() { + +// PolyvScreenUtils.setLandscape(videoActivity); +// //初始为横屏时,状态栏需要隐藏 +// PolyvScreenUtils.hideStatusBar(videoActivity); +// //初始为横屏时,导航栏需要隐藏 +// PolyvScreenUtils.hideNavigationBar(videoActivity); +// //初始为横屏时,控制栏的宽高需要设置 +// initFullScreenWH(); + } + public void setPPTLayout(PolyvViceScreenLayout viceLayout) { + this.viceLayout = viceLayout; +// this.landPptDirLayout = landPptDirLayout; + } + public void updatePictureInPictureActions(@DrawableRes int iconId, String title, int controlType, int requestCode) { + if (Build.VERSION.SDK_INT < 26) + return; + final ArrayList actions = new ArrayList<>(); + + // This is the PendingIntent that is invoked when a user clicks on the action item. + // You need to use distinct request codes for play and pause, or the PendingIntent won't + // be properly updated. + final PendingIntent intent = + PendingIntent.getBroadcast( + videoActivity, + requestCode, + new Intent("media_control").putExtra("control_type", controlType), + 0); + final Icon icon = Icon.createWithResource(videoActivity, iconId); + actions.add(new RemoteAction(icon, title, title, intent)); + + pipBuilder.setActions(actions); + + // This is how you can update action items (or aspect ratio) for Picture-in-Picture mode. + // Note this call can happen even when the app is not in PiP mode. In that case, the + // arguments will be used for at the next call of #enterPictureInPictureMode. + try { + if (!videoActivity.isDestroyed()) { + videoActivity.setPictureInPictureParams(pipBuilder.build()); + } + } catch (Exception e) { + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerPreviewView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerPreviewView.java new file mode 100644 index 0000000..24a20e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerPreviewView.java @@ -0,0 +1,179 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.content.Context; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.AsyncTask; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.easefun.polyvsdk.PolyvSDKUtil; +import com.easefun.polyvsdk.util.PolyvDownloadDirUtil; +import com.easefun.polyvsdk.vo.PolyvVideoVO; +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; +import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; + +import java.io.File; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.ImageOptions; + + +/** + * 预览图视图 + * @author Lion 2016-3-3 + */ +public class PolyvPlayerPreviewView extends RelativeLayout { + private static final String TAG = PolyvPlayerPreviewView.class.getSimpleName(); + private Context mContext = null; + private ImageView mPreviewImage = null; + private ImageButton mStartBtn = null; + private Callback mCallback = null; + private DisplayImageOptions mOptions = null; + private TextView tv_mina=null; + private RelativeLayout r_mb=null; + + public PolyvPlayerPreviewView(Context context) { + this(context, null); + } + + public PolyvPlayerPreviewView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerPreviewView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + initViews(); + } + + private void initViews() { + LayoutInflater.from(getContext()).inflate(R.layout.polyv_player_preview_view, this); + mPreviewImage = (ImageView) findViewById(R.id.preview_image); + mStartBtn = (ImageButton) findViewById(R.id.start_btn); + tv_mina =findViewById(R.id.tv_mina); + r_mb=findViewById(R.id.r_mb); + mStartBtn.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + if (mCallback != null) { + mCallback.onClickStart(); + } + + hide(); + } + }); + + if (mOptions == null) { + mOptions = new DisplayImageOptions.Builder().showImageOnLoading(R.drawable.polyv_avatar_def) // 设置图片在下载期间显示的图片 + .showImageForEmptyUri(R.drawable.polyv_avatar_def)// 设置图片Uri为空或是错误的时候显示的图片 + .showImageOnFail(R.drawable.polyv_avatar_def) // 设置图片加载/解码过程中错误时候显示的图片 + .bitmapConfig(Bitmap.Config.RGB_565)// 设置图片的解码类型 + .cacheInMemory(true)// 设置下载的图片是否缓存在内存中 + .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中 + .displayer(new FadeInBitmapDisplayer(100))// 是否图片加载好后渐入的动画时间 + .imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();// 构建完成 + } + } + + /** + * 设置图片并显示 + * @param vid + */ + public void show(String vid) { + new LoadVideoJson(vid).execute(); + setVisibility(View.VISIBLE); + } + public void show(String vid,String b) { + new LoadVideoJson(vid).execute(); + tv_mina.setVisibility(VISIBLE); + mStartBtn.setVisibility(VISIBLE); + r_mb.setVisibility(VISIBLE); + setVisibility(View.VISIBLE); + } + public void show(String url,int a) + { + ImageLoader.getInstance().displayImage(url, mPreviewImage, ImageOptions.getImageOptions(R.drawable.default_news_iv)); + tv_mina.setVisibility(GONE); + mStartBtn.setVisibility(GONE); + r_mb.setVisibility(GONE); + setVisibility(View.VISIBLE); + } + + private class LoadVideoJson extends AsyncTask { + + private final String mVid; + + LoadVideoJson(String vid) { + mVid = vid; + } + + @Override + protected PolyvVideoVO doInBackground(String... params) { + PolyvVideoVO video = null; + try { + video = PolyvSDKUtil.loadVideoJSON2Video(mVid); + } catch (Exception e) { + e.printStackTrace(); + } + + return video; + } + + @Override + protected void onPostExecute(PolyvVideoVO v) { + super.onPostExecute(v); + if (v == null) { + return; + } + + if (TextUtils.isEmpty(v.getFirstImage())) { + return; + } + + int index = 0; + if (v.getFirstImage().contains("/")) { + index = v.getFirstImage().lastIndexOf("/"); + } + + String fileName = v.getFirstImage().substring(index); + File file = PolyvDownloadDirUtil.getFileFromExtraResourceDir(mVid, fileName); + if (file != null) { + mPreviewImage.setImageURI(Uri.parse(file.getAbsolutePath())); + } else { + ImageLoader.getInstance().displayImage(v.getFirstImage(), mPreviewImage, mOptions, new PolyvAnimateFirstDisplayListener()); + } + } + } + + /** + * 隐藏 + */ + public void hide() { + setVisibility(View.GONE); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + super.onTouchEvent(event); + return true; + } + + public void setCallback(Callback callback) { + mCallback = callback; + } + + public interface Callback { + public void onClickStart(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerProgressView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerProgressView.java new file mode 100644 index 0000000..0ad0587 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerProgressView.java @@ -0,0 +1,76 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvTimeUtils; + + +public class PolyvPlayerProgressView extends FrameLayout { + //progressView + private View view; + private RelativeLayout rl_center_progress; + private TextView tv_curtime, tv_tottime; + private ImageView iv_left, iv_right; + + public PolyvPlayerProgressView(Context context) { + this(context, null); + } + + public PolyvPlayerProgressView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerProgressView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.view = LayoutInflater.from(context).inflate(R.layout.polyv_player_media_center_progress, this); + findIdAndNew(); + } + + private void findIdAndNew() { + rl_center_progress = (RelativeLayout) view.findViewById(R.id.rl_center_progress); + tv_curtime = (TextView) view.findViewById(R.id.tv_curtime); + tv_tottime = (TextView) view.findViewById(R.id.tv_tottime); + iv_left = (ImageView) view.findViewById(R.id.iv_left); + iv_right = (ImageView) view.findViewById(R.id.iv_right); + } + + public void hide() { + if (rl_center_progress != null) + rl_center_progress.setVisibility(View.GONE); + } + + public void resetMaxValue() { + setViewMaxValue(0); + } + + public void setViewMaxValue(int totaltime) { + tv_tottime.setText(PolyvTimeUtils.generateTime(totaltime)); + } + + public void setViewProgressValue(int fastForwardPos, int totaltime, boolean end, boolean isRightSwipe) { + if (end) + rl_center_progress.setVisibility(View.GONE); + else + rl_center_progress.setVisibility(View.VISIBLE); + if (isRightSwipe) { + iv_left.setVisibility(View.GONE); + iv_right.setVisibility(View.VISIBLE); + } else { + iv_left.setVisibility(View.VISIBLE); + iv_right.setVisibility(View.GONE); + } + if (fastForwardPos < 0) + fastForwardPos = 0; + if (fastForwardPos > totaltime) + fastForwardPos = totaltime; + tv_curtime.setText(PolyvTimeUtils.generateTime(fastForwardPos)); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerVolumeView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerVolumeView.java new file mode 100644 index 0000000..e0effb3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/player/PolyvPlayerVolumeView.java @@ -0,0 +1,51 @@ +package cn.shangyu.gdxzExpert.polyvplayer.player; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + + +public class PolyvPlayerVolumeView extends FrameLayout { + //volumeView + private View view; + private RelativeLayout rl_center_volume; + private TextView tv_volume; + + public PolyvPlayerVolumeView(Context context) { + this(context, null); + } + + public PolyvPlayerVolumeView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPlayerVolumeView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.view = LayoutInflater.from(context).inflate(R.layout.polyv_player_media_center_volume, this); + findIdAndNew(); + } + + private void findIdAndNew() { + rl_center_volume = (RelativeLayout) view.findViewById(R.id.rl_center_volume); + tv_volume = (TextView) view.findViewById(R.id.tv_volume); + } + + public void hide() { + if (rl_center_volume != null) + rl_center_volume.setVisibility(View.GONE); + } + + public void setViewVolumeValue(int volume, boolean end) { + if (end) + rl_center_volume.setVisibility(View.GONE); + else + rl_center_volume.setVisibility(View.VISIBLE); + tv_volume.setText(volume + "%"); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvPPTView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvPPTView.java new file mode 100644 index 0000000..66bb719 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvPPTView.java @@ -0,0 +1,153 @@ +package cn.shangyu.gdxzExpert.polyvplayer.ppt; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.PixelFormat; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import com.easefun.polyvsdk.po.ppt.PolyvPptInfo; +import com.easefun.polyvsdk.po.ppt.PolyvPptPageInfo; +import com.easefun.polyvsdk.video.PolyvVideoView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvImageLoader; +import cn.shangyu.gdxzExpert.polyvplayer.view.PolyvCircleProgressView; + +/** + * 三分屏布局的ppt控件 + */ +public class PolyvPPTView extends FrameLayout { + private PolyvCircleProgressView loadView; + private TextView textView; + private ImageView imageView; + private PolyvVideoView currentVideoView; + private String currentImg; + private String currentVid; + private PolyvPptInfo currentPPTVO; + + private int preloadCount = 2; + + private Handler handler = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(Message msg) { + if (msg.what == 1) { + int position = Math.max(0, currentVideoView.getCurrentPosition() / 1000); + PolyvPptPageInfo pageBean = findClosestPPT(position, currentPPTVO.getPages()); + if (pageBean != null && pageBean.getImg() != null && !pageBean.getImg().equals(currentImg)) { + PolyvImageLoader.getInstance().loadImageOrigin(getContext(), currentImg = pageBean.getImg(), imageView, imageView.getDrawable()); + if (Build.VERSION.SDK_INT <29){ + for (int i = 1; i <= preloadCount; i++) { + if (pageBean.getIndex() + i < currentPPTVO.getPages().size()) { + PolyvImageLoader.getInstance().preloadImage(getContext(), currentPPTVO.getPages().get(pageBean.getIndex() + i).getImg()); + } + } + } + } + handler.sendEmptyMessageDelayed(1, 1000); + } + } + }; + + public PolyvPPTView(Context context) { + this(context, null); + } + + public PolyvPPTView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvPPTView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + addView(LayoutInflater.from(context).inflate(R.layout.polyv_ppt_content, this, false)); + imageView = (ImageView) findViewById(R.id.ppt_img); + textView = (TextView) findViewById(R.id.no_ppt); + loadView = (PolyvCircleProgressView) findViewById(R.id.load_view); + } + + public Bitmap getImg() { + if (imageView != null) { + return drawableToBitmap(imageView.getDrawable()); + } + return null; + } + + public static Bitmap drawableToBitmap(Drawable drawable) { + int w = drawable.getIntrinsicWidth(); + int h = drawable.getIntrinsicHeight(); + Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888 + : Bitmap.Config.RGB_565; + Bitmap bitmap = Bitmap.createBitmap(w, h, config); + //注意,下面三行代码要用到,否则在View或者SurfaceView里的canvas.drawBitmap会看不到图 + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, w, h); + drawable.draw(canvas); + return bitmap; + } + + public void acceptProgress(int loadPPTProgress) { + if (loadView != null) { + loadView.setVisibility(View.VISIBLE); + loadView.setmCurrent(loadPPTProgress); + } + if (textView != null) { + textView.setVisibility(View.GONE); + } + } + + public void acceptPPTCallback(final PolyvVideoView videoView, String vid, boolean hasPPT, PolyvPptInfo pptvo) { + handler.removeMessages(1); + if (currentVid != null && !currentVid.equals(vid) || (hasPPT && pptvo == null)) { + imageView.setImageDrawable(null); + loadView.setVisibility(View.GONE); + textView.setVisibility(View.VISIBLE); + } + currentVid = vid; + if (videoView != null && hasPPT && pptvo != null) { + textView.setVisibility(View.GONE); + loadView.setVisibility(View.GONE); + currentVideoView = videoView; + currentPPTVO = pptvo; + + handler.sendEmptyMessage(1); + } + } + + private PolyvPptPageInfo findClosestPPT(int position, ArrayList page) { + PolyvPptPageInfo closestPageBean = null; + int closestSec = -1; + if (page != null) { + for (int i = 0; i < page.size(); i++) { + PolyvPptPageInfo pageBean = page.get(i); + if (pageBean.getSec() == position) { + return pageBean; + } else if (pageBean.getSec() < position) { + if (closestSec == -1 || position - pageBean.getSec() < closestSec) { + closestSec = position - pageBean.getSec(); + closestPageBean = pageBean; + } + } + } + if (closestPageBean == null && page.size() > 0) { + closestPageBean = page.get(0); + } + } + return closestPageBean; + } + + public void destroy() { + handler.removeMessages(1); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvViceScreenLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvViceScreenLayout.java new file mode 100644 index 0000000..75abe80 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/ppt/PolyvViceScreenLayout.java @@ -0,0 +1,293 @@ +package cn.shangyu.gdxzExpert.polyvplayer.ppt; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.graphics.Color; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.FrameLayout; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.easefun.polyvsdk.po.ppt.PolyvPptInfo; +import com.easefun.polyvsdk.video.PolyvVideoView; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.polyvplayer.player.PolyvPlayerAudioCoverView; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; +import cn.shangyu.gdxzExpert.polyvplayer.view.PolyvLoadingLayout; + +/** + * 三分屏的副屏布局 + */ +public class PolyvViceScreenLayout extends FrameLayout { + // 点击的位置 + private float lastX, lastY; + private static int width = 125, height = 70; + private boolean isFromUserHide; + private boolean isPPTInMinScreen; + + private Runnable configChangedTask; + + private GestureDetector gestureDetector; + + + private PolyvVideoView videoView; + private PolyvPPTView pptView; + + //横/竖屏位置 + private static int portraitTopMargin = -1, portraitLeftMargin = -1, landscapeTopMargin = -1, landscapeLeftMargin = -1; + + public PolyvViceScreenLayout(@NonNull Context context) { + this(context, null); + } + + public PolyvViceScreenLayout(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvViceScreenLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { + @Override + public boolean onSingleTapUp(MotionEvent e) { + switchLocation(); + return super.onSingleTapUp(e); + } + }); + } + + public static PolyvViceScreenLayout addViceLayoutInWindow(Activity activity, int marginTop) { + //add ViceScreenLayout + ViewGroup contentView = (ViewGroup) activity.findViewById(Window.ID_ANDROID_CONTENT); + PolyvViceScreenLayout viceScreenLayout = new PolyvViceScreenLayout(activity); + viceScreenLayout.setBackgroundColor(Color.BLACK); + LayoutParams mlp = new LayoutParams(PolyvScreenUtils.dip2px(activity, width), PolyvScreenUtils.dip2px(activity, height)); + if (PolyvScreenUtils.isPortrait(activity)) { + mlp.topMargin = portraitTopMargin = marginTop; + mlp.leftMargin = portraitLeftMargin = contentView.getWidth() - PolyvScreenUtils.dip2px(activity, width); + } else { + mlp.topMargin = landscapeTopMargin = 0; + mlp.leftMargin = landscapeLeftMargin = 0;//contentView.getWidth() - PolyvScreenUtils.dip2px(activity, width); + } + viceScreenLayout.setLayoutParams(mlp); + contentView.addView(viceScreenLayout); + //hide + viceScreenLayout.hide(); + return viceScreenLayout; + } + + public void acceptPPTCallback(String vid, boolean hasPPT, PolyvPptInfo pptvo) { + if (hasPPT) { + if (!isFromUserHide) { + show(); + } + if (pptView != null) { + pptView.acceptPPTCallback(videoView, vid, hasPPT, pptvo); + } + } else { + hide(); + if (isPPTInMinScreen) { + switchLocation(false); + } + } + } + + public void bindView(PolyvVideoView videoView, PolyvPPTView pptView) { + this.videoView = videoView; + this.pptView = pptView; + } + + public PolyvPPTView getPPTView() { + return pptView; + } + + public boolean isPPTInMinScreen() { + return isPPTInMinScreen; + } + + /** + * 切换主副屏的位置 + */ + public void switchLocation() { + switchLocation(!isPPTInMinScreen); + } + + /** + * 切换主副屏的位置 + * + * @param isPPTInMinScreen 是否把ppt切到主屏 + */ + public void switchLocation(boolean isPPTInMinScreen) { + if (this.isPPTInMinScreen == isPPTInMinScreen || pptView == null || videoView == null) + return; + this.isPPTInMinScreen = isPPTInMinScreen; + + List pptChilds = new ArrayList<>(); + for (int i = 0; i < pptView.getChildCount(); i++) { + pptChilds.add(pptView.getChildAt(i)); + } + pptView.removeAllViews(); + List videoChilds = new ArrayList<>(); + for (int i = 0; i < videoView.getChildCount(); i++) { + videoChilds.add(videoView.getChildAt(i)); + } + videoView.removeAllViews(); + + for (int i = 0; i < pptChilds.size(); i++) { + videoView.addView(pptChilds.get(i)); + } + for (int i = 0; i < videoChilds.size(); i++) { + pptView.addView(videoChilds.get(i)); + } + + //适配主副屏里的控件大小 + pptChilds.addAll(videoChilds); + for (View view : pptChilds) { + if (view instanceof PolyvPlayerAudioCoverView) { + ((PolyvPlayerAudioCoverView)view).fitLocationChange(!isPPTInMinScreen); + } else if (view instanceof PolyvLoadingLayout) { + ((PolyvLoadingLayout) view).fitLocationChange(!isPPTInMinScreen); + } + } + } + + /** + * 隐藏副屏 + */ + public void hide() { + setVisibility(View.GONE); + } + + /** + * 通过用户点击按钮的方式隐藏副屏 + */ + public void fromUserHide() { + isFromUserHide = true; + hide(); + } + + /** + * 通过用户点击按钮的方式显示副屏 + */ + public void fromUserShow() { + isFromUserHide = false; + show(); + } + + /** + * 显示副屏 + */ + public void show() { + setVisibility(View.VISIBLE); + } + + /** + * 是否显示 + */ + public boolean isVisibible() { + return getVisibility() == View.VISIBLE; + } + + /** + * 销毁 + */ + public void destroy() { + if (pptView != null) { + pptView.destroy(); + } + } + + @Override + protected void onConfigurationChanged(final Configuration newConfig) { + super.onConfigurationChanged(newConfig); + if (getHandler() != null) { + getHandler().removeCallbacks(configChangedTask); + } + post(configChangedTask = new Runnable() { + @Override + public void run() { + if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { + if (landscapeLeftMargin != -1 && landscapeTopMargin != -1) { + setLocation(landscapeTopMargin, landscapeLeftMargin); + } else { + landscapeTopMargin = 0; + landscapeLeftMargin = 0;//((Activity) getContext()).findViewById(Window.ID_ANDROID_CONTENT).getWidth() - PolyvScreenUtils.dip2px(getContext(), width); + setLocation(landscapeTopMargin, landscapeLeftMargin); + } + } else { + if (portraitLeftMargin != -1 && portraitTopMargin != -1) { + setLocation(portraitTopMargin, portraitLeftMargin); + } else { + if (videoView != null) { + portraitTopMargin = videoView.getBottom(); + portraitLeftMargin = ((Activity) getContext()).findViewById(Window.ID_ANDROID_CONTENT).getWidth() - PolyvScreenUtils.dip2px(getContext(), width); + setLocation(portraitTopMargin, portraitLeftMargin); + } + } + } + } + }); + } + + private void setLocation(int marginTop, int marginLeft) { + LayoutParams mlp = (LayoutParams) getLayoutParams(); + mlp.leftMargin = marginLeft; + mlp.topMargin = marginTop; + setLayoutParams(mlp); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + //子view为invisible时(即非visible)不要拦截点击事件 + boolean firstChildIsVisible = getChildAt(0) == null || (getChildAt(0).getVisibility() == View.VISIBLE); + if (/*getVisibility() != View.VISIBLE || */!firstChildIsVisible) + return super.onTouchEvent(event); + + gestureDetector.onTouchEvent(event); + + if (event.getAction() == MotionEvent.ACTION_DOWN) { + lastX = event.getX(); + lastY = event.getY(); + } + if (event.getAction() == MotionEvent.ACTION_MOVE) { + // 计算移动的距离 + float x = event.getX(); + float y = event.getY(); + // 偏移量 + int offX = (int) (x - lastX); + int offY = (int) (y - lastY); + View view = this; + int left = view.getLeft() + offX; + int top = view.getTop() + offY; + int parentWidth = ((View) view.getParent()).getMeasuredWidth(); + int parentHeight = ((View) view.getParent()).getMeasuredHeight(); + if (offX < 0 && left < 0) + left = 0; + if (offY < 0 && top < 0) + top = 0; + if (offX > 0 && view.getRight() + offX > parentWidth) + left = view.getLeft() + (parentWidth - view.getRight()); + if (offY > 0 && view.getBottom() + offY > parentHeight) + top = view.getTop() + (parentHeight - view.getBottom()); + + MarginLayoutParams rlp = (MarginLayoutParams) view.getLayoutParams(); + rlp.leftMargin = left; + rlp.topMargin = top; + view.setLayoutParams(rlp); + } + if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { + lastX = 0; + lastY = 0; + } + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/PolyvVodBusinessServer.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/PolyvVodBusinessServer.java new file mode 100644 index 0000000..6572cb4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/PolyvVodBusinessServer.java @@ -0,0 +1,83 @@ +package cn.shangyu.gdxzExpert.polyvplayer.server; + + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import android.util.Log; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.polyvplayer.server.request.PolyvGetByUploader; +import cn.shangyu.gdxzExpert.polyvplayer.server.request.PolyvPlayTimes; +import cn.shangyu.gdxzExpert.polyvplayer.server.vo.PolyvGetByUploaderResult; +import cn.shangyu.gdxzExpert.polyvplayer.server.vo.PolyvPlayTimesResult; + + +/** + * 点播业务接口,本类主要是演示POLYV服务业务接口的使用,开发者需要根据自己的业务逻辑调整代码。 + * @author Lionel 2018-11-7 + */ +public class PolyvVodBusinessServer { + private static final String TAG = "PolyvVodBusinessServer"; + + private static final String USER_ID = ""; + private static final String SECRET_KEY = ""; + + /** + * 获取某分类下某子账号的视频列表,接口文档 + * http://dev.polyv.net/2018/videoproduct/v-api/v-api-vmanage/v-api-vmanage-list/get-by-uploader/ + * @param page 页码 + * @return 失败返回null,成功返回结果对象 + */ + @Nullable + public static PolyvGetByUploaderResult getByUploader(int page) { + ArrayList exceptionList = new ArrayList<>(); + PolyvGetByUploaderResult result = null; + //3次重试,容错网络抖动 + for (int i = 0, length = 3 ; i < length ; i++) { + result = PolyvGetByUploader.requestGetByUploader(USER_ID, SECRET_KEY, page, PolyvGetByUploader.ORDER_TYPE_PTIME_ASC, false, exceptionList); + if (result != null) { + break; + } + } + + if (result == null) { + for (String error : exceptionList) { + Log.e(TAG, error); + } + } + + return result; + } + + /** + * 批量获取视频播放次数,接口文档 + * http://dev.polyv.net/2017/videoproduct/v-api/v-api-vmanage/v-api-vmanage-info/getplaytimes/ + * @param vids 视频ID列表 + * @return 失败返回null,成功返回结果对象 + */ + @Nullable + public static PolyvPlayTimesResult playTimes(@NonNull ArrayList vids) { + if (vids.isEmpty()) { + return null; + } + + ArrayList exceptionList = new ArrayList<>(); + PolyvPlayTimesResult result = null; + //3次重试,容错网络抖动 + for (int i = 0, length = 3 ; i < length ; i++) { + result = PolyvPlayTimes.requestPlayTimes(USER_ID, SECRET_KEY, vids, exceptionList); + if (result != null) { + break; + } + } + + if (result == null) { + for (String error : exceptionList) { + Log.e(TAG, error); + } + } + + return result; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvGetByUploader.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvGetByUploader.java new file mode 100644 index 0000000..b621a3a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvGetByUploader.java @@ -0,0 +1,100 @@ +package cn.shangyu.gdxzExpert.polyvplayer.server.request; + +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import android.text.TextUtils; +import android.util.Log; + +import com.easefun.polyvsdk.PolyvSDKUtil; +import com.google.gson.Gson; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.ArrayList; +import java.util.Locale; + +import cn.shangyu.gdxzExpert.polyvplayer.server.vo.PolyvGetByUploaderResult; + + +/** + * 获取某分类下某子账号的视频列表,接口文档 + * http://dev.polyv.net/2018/videoproduct/v-api/v-api-vmanage/v-api-vmanage-list/get-by-uploader/ + * @author Lionel 2018-11-8 + */ +public class PolyvGetByUploader { + private static final String TAG = "PolyvGetByUploader"; + + /** ptime升序 */ + public static final int ORDER_TYPE_PTIME_ASC = 1; + /** ptime降序 */ + public static final int ORDER_TYPE_PTIME_DESC = 2; + /** times升序 */ + public static final int ORDER_TYPE_TIMES_ASC = 3; + /** times降序 */ + public static final int ORDER_TYPE_TIMES_DESC = 4; + + @IntDef({ + ORDER_TYPE_PTIME_ASC, + ORDER_TYPE_PTIME_DESC, + ORDER_TYPE_TIMES_ASC, + ORDER_TYPE_TIMES_DESC + }) + @Retention(RetentionPolicy.SOURCE) + public @interface OrderType {} + + /** + * 获取某分类下某子账号的视频列表,详细请看 + * http://dev.polyv.net/2018/videoproduct/v-api/v-api-vmanage/v-api-vmanage-list/get-by-uploader/ + */ + private static final String GET_BY_UPLOADER_URL = "http://api.polyv.net/v2/video/%s/get-by-uploader"; + + /** + * 获取某分类下某子账号的视频列表,接口文档 + * http://dev.polyv.net/2018/videoproduct/v-api/v-api-vmanage/v-api-vmanage-list/get-by-uploader/ + * @param userId 用户ID + * @param secretKey key + * @param page 页码 + * @param orderType 排序类型 + * @param containSubCata 是否包含子分类 + * @return 失败返回null,成功返回结果对象 + */ + @Nullable + public static PolyvGetByUploaderResult requestGetByUploader(@NonNull String userId, @NonNull String secretKey, int page, @OrderType int orderType, boolean containSubCata, @NonNull ArrayList exceptionList) { + int containSubCataType = containSubCata ? 1 : 0; + long ptime = System.currentTimeMillis(); + String signParam = "containSubCata=" + containSubCataType + "&" + + "orderType=" + orderType + "&" + + "page=" + page + "&" + + "ptime=" + ptime + + secretKey; + + String sign = PolyvSDKUtil.sha1(signParam).toUpperCase(); + String url = String.format(Locale.getDefault(), GET_BY_UPLOADER_URL, userId) + "?" + + "&containSubCata=" + containSubCataType + + "&orderType=" + orderType + + "&page=" + page + + "&ptime=" + ptime + + "&sign=" + sign; + + String body = PolyvSDKUtil.getUrl2String(url, 6000, 6000, exceptionList); + if (TextUtils.isEmpty(body)) { + return null; + } + + Gson gson = new Gson(); + PolyvGetByUploaderResult result = gson.fromJson(body, PolyvGetByUploaderResult.class); + if (result == null) { + return null; + } + + //返回码看接口文档中的响应说明 + if (result.getCode() != PolyvGetByUploaderResult.OK) { + Log.e(TAG, result.toString()); + exceptionList.add(result.toString()); + return null; + } + + return result; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvPlayTimes.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvPlayTimes.java new file mode 100644 index 0000000..a1be848 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/request/PolyvPlayTimes.java @@ -0,0 +1,72 @@ +package cn.shangyu.gdxzExpert.polyvplayer.server.request; + +import androidx.annotation.NonNull; +import android.text.TextUtils; +import android.util.Log; + +import com.easefun.polyvsdk.PolyvSDKUtil; +import com.google.gson.Gson; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Locale; + +import cn.shangyu.gdxzExpert.polyvplayer.server.vo.PolyvPlayTimesResult; + + +/** + * 批量获取视频播放次数,接口文档 + * http://dev.polyv.net/2017/videoproduct/v-api/v-api-vmanage/v-api-vmanage-info/getplaytimes/ + * @author Lionel 2018-11-12 + */ +public class PolyvPlayTimes { + private static final String TAG = "PolyvPlayTimes"; + + /** + * 批量获取视频播放次数,详细请看 + * http://dev.polyv.net/2017/videoproduct/v-api/v-api-vmanage/v-api-vmanage-info/getplaytimes/ + */ + private static final String PLAY_TIMES_URL = "http://api.polyv.net/v2/data/%s/play-times"; + + public static PolyvPlayTimesResult requestPlayTimes(@NonNull String userId, @NonNull String secretKey, @NonNull ArrayList vids, @NonNull ArrayList exceptionList) { + String vidsStr = TextUtils.join(",", vids); + long ptime = System.currentTimeMillis(); + String signParam = "ptime=" + ptime + "&" + + "realTime=" + "1" + "&" + + "vids=" + vidsStr + + secretKey; + + String sign = PolyvSDKUtil.sha1(signParam).toUpperCase(); + String url = String.format(Locale.getDefault(), PLAY_TIMES_URL, userId) + "?" + + "&ptime=" + ptime + + "&realTime=" + "1" + + "&sign=" + sign + + "&vids=" + vidsStr; + + String body = PolyvSDKUtil.getUrl2String(url, 6000, 6000, exceptionList); + if (TextUtils.isEmpty(body)) { + return null; + } + + JSONObject jsonObject; + try { + jsonObject = new JSONObject(body); + } catch (JSONException e) { + exceptionList.add(PolyvSDKUtil.getExceptionFullMessage(e, -1)); + return null; + } + + int code = jsonObject.optInt("code", 0); + //返回码看接口文档中的响应说明 + if (code == PolyvPlayTimesResult.OK) { + Gson gson = new Gson(); + return gson.fromJson(body, PolyvPlayTimesResult.class); + } + + Log.e(TAG, body); + exceptionList.add(body); + return null; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvGetByUploaderResult.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvGetByUploaderResult.java new file mode 100644 index 0000000..d6c2208 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvGetByUploaderResult.java @@ -0,0 +1,229 @@ +package cn.shangyu.gdxzExpert.polyvplayer.server.vo; + + +import java.util.ArrayList; + +/** + * 获取某分类下某子账号的视频列表结果,接口文档 + * http://dev.polyv.net/2018/videoproduct/v-api/v-api-vmanage/v-api-vmanage-list/get-by-uploader/ + * @author Lionel 2018-11-7 + */ +public class PolyvGetByUploaderResult { + /** success */ + public static final int OK = 200; + + private int code; + private String status; + private String message; + private Data data; + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Data getData() { + return data; + } + + public void setData(Data data) { + this.data = data; + } + + @Override + public String toString() { + return "PolyvGetByUploaderResult{" + + "code=" + code + + ", status='" + status + '\'' + + ", message='" + message + '\'' + + ", data=" + data + + '}'; + } + + public class Data { + private int pageSize; + private int pageNumber; + private int totalItems; + private ArrayList contents; + + public int getPageSize() { + return pageSize; + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int pageNumber) { + this.pageNumber = pageNumber; + } + + public int getTotalItems() { + return totalItems; + } + + public void setTotalItems(int totalItems) { + this.totalItems = totalItems; + } + + public ArrayList getContents() { + return contents; + } + + public void setContents(ArrayList contents) { + this.contents = contents; + } + + @Override + public String toString() { + return "Data{" + + "pageSize=" + pageSize + + ", pageNumber=" + pageNumber + + ", totalItems=" + totalItems + + ", contents=" + contents + + '}'; + } + + public class Content { + private String vid; + private long cataid; + private String title; + private String context; + private int times; + private String firstImage; + private String tag; + private String aacLink; + private String status; + private String uploaderEmail; + private long ptime; + + public String getVid() { + return vid; + } + + public void setVid(String vid) { + this.vid = vid; + } + + public long getCataid() { + return cataid; + } + + public void setCataid(long cataid) { + this.cataid = cataid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getContext() { + return context; + } + + public void setContext(String context) { + this.context = context; + } + + public int getTimes() { + return times; + } + + public void setTimes(int times) { + this.times = times; + } + + public String getFirstImage() { + return firstImage; + } + + public void setFirstImage(String firstImage) { + this.firstImage = firstImage; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getAacLink() { + return aacLink; + } + + public void setAacLink(String aacLink) { + this.aacLink = aacLink; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getUploaderEmail() { + return uploaderEmail; + } + + public void setUploaderEmail(String uploaderEmail) { + this.uploaderEmail = uploaderEmail; + } + + public long getPtime() { + return ptime; + } + + public void setPtime(long ptime) { + this.ptime = ptime; + } + + @Override + public String toString() { + return "Content{" + + "vid='" + vid + '\'' + + ", cataid=" + cataid + + ", title='" + title + '\'' + + ", context='" + context + '\'' + + ", times=" + times + + ", firstImage='" + firstImage + '\'' + + ", tag='" + tag + '\'' + + ", aacLink='" + aacLink + '\'' + + ", status='" + status + '\'' + + ", uploaderEmail='" + uploaderEmail + '\'' + + ", ptime=" + ptime + + '}'; + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvPlayTimesResult.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvPlayTimesResult.java new file mode 100644 index 0000000..f730666 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/server/vo/PolyvPlayTimesResult.java @@ -0,0 +1,93 @@ +package cn.shangyu.gdxzExpert.polyvplayer.server.vo; + +import java.util.ArrayList; + +/** + * 批量获取视频播放次数结果,接口文档 + * http://dev.polyv.net/2017/videoproduct/v-api/v-api-vmanage/v-api-vmanage-info/getplaytimes/ + * @author Lionel 2018-11-12 + */ +public class PolyvPlayTimesResult { + /** success */ + public static final int OK = 200; + + private int code; + private String status; + private String message; + private ArrayList data; + + public static int getOK() { + return OK; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public ArrayList getData() { + return data; + } + + public void setData(ArrayList data) { + this.data = data; + } + + public class Data { + private String vid; + private int times; + + public String getVid() { + return vid; + } + + public void setVid(String vid) { + this.vid = vid; + } + + public int getTimes() { + return times; + } + + public void setTimes(int times) { + this.times = times; + } + + @Override + public String toString() { + return "Data{" + + "vid='" + vid + '\'' + + ", times=" + times + + '}'; + } + } + + @Override + public String toString() { + return "PolyvPlayTimesResult{" + + "code=" + code + + ", status='" + status + '\'' + + ", message='" + message + '\'' + + ", data=" + data + + '}'; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvBackgroundPlayService.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvBackgroundPlayService.java new file mode 100644 index 0000000..eaca4d3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvBackgroundPlayService.java @@ -0,0 +1,96 @@ +package cn.shangyu.gdxzExpert.polyvplayer.service; + +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Binder; +import android.os.Build; +import android.os.IBinder; + +import androidx.annotation.Nullable; +import androidx.core.app.NotificationCompat; + +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; + + +/** + * 后台播放服务 + */ +public class PolyvBackgroundPlayService extends Service { + public static final String TAG = "PolyvBgPlayService"; + public static final String CHANNEL_ID = "bgPlayChannel"; + public static final String CHANNEL_NAME = "后台播放服务"; + public static final int NOTIFICATION_ID = 0x111; + public static final int REQUEST_CODE_PLAY_ACTIVITY = 0x222; + + public static void bindService(Context context, ServiceConnection serviceConnection) { + + Intent intent = new Intent(); + intent.setClass(context, PolyvBackgroundPlayService.class); + context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); + } + + public static void startService(Context context) { + Intent intent = new Intent(context, PolyvBackgroundPlayService.class); + context.startService(intent);//startForegroundService 5s + } + + public class PlayBinder extends Binder { + public void start(String title, String text, int icon) { + startForeground(NOTIFICATION_ID, createNotification(title, text, icon)); + } + + public void stop() { + stopForeground(true); + } + } + + @Override + public void onCreate() { + super.onCreate(); + NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT); + channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET); + if (notificationManager != null) { + // 注册通道,注册后除非卸载再安装否则不改变 + notificationManager.createNotificationChannel(channel); + } + } + } + + public Notification createNotification(String title, String text, int icon) { + Intent intent = new Intent(this, CourseDetailPolyvPlayerActivity.class); + PendingIntent pendingIntent = PendingIntent.getActivity(this, REQUEST_CODE_PLAY_ACTIVITY, intent, PendingIntent.FLAG_UPDATE_CURRENT); + NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID); + builder.setContentIntent(pendingIntent); + builder.setShowWhen(false); + builder.setSmallIcon(icon); + builder.setContentTitle(title); + builder.setContentText(text); + builder.setPriority(NotificationCompat.PRIORITY_DEFAULT); + builder.setVisibility(NotificationCompat.VISIBILITY_SECRET); + return builder.build(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + return Service.START_NOT_STICKY; + } + + @Nullable + @Override + public IBinder onBind(Intent intent) { + return new PlayBinder(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvPlayService.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvPlayService.java new file mode 100644 index 0000000..76f8ec6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/service/PolyvPlayService.java @@ -0,0 +1,54 @@ +package cn.shangyu.gdxzExpert.polyvplayer.service; + +import android.content.Intent; +import android.util.Log; + +import com.easefun.polyvsdk.server.AndroidService; + +/** + * 播放视频已改版,不再需要service来播放视频 + */ +@Deprecated +public class PolyvPlayService extends AndroidService { + + private static final String TAG = PolyvPlayService.class.getSimpleName(); + + // 无参数构造函数,调用父类的super(String name) + public PolyvPlayService() { + super(); + // TODO Auto-generated constructor stub + } + + @Override + public void onStart(Intent intent, int startId) { + // TODO Auto-generated method stub + super.onStart(intent, startId); + // Log.i("TAG","service started"); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + // TODO Auto-generated method stub + // Log.i("TAG","service onStartCommand"); + return super.onStartCommand(intent, flags, startId); + } + + @Override + public void onCreate() { + // TODO Auto-generated method stub + super.onCreate(); + + } + + @Override + protected void onHandleIntent(Intent intent) { + super.onHandleIntent(intent); + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + Log.i(TAG, "server destory"); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvErrorMessageUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvErrorMessageUtils.java new file mode 100644 index 0000000..9e4ab76 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvErrorMessageUtils.java @@ -0,0 +1,315 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + + +import androidx.annotation.NonNull; + +import com.easefun.polyvsdk.PolyvDownloaderErrorReason; +import com.easefun.polyvsdk.video.PolyvPlayErrorReason; + + +/** + * 错误类型转成错误信息工具类 + * @author Lion 2017-8-3 + */ +public class PolyvErrorMessageUtils { + /** + * 获取下载错误信息 + * @param type 下载错误类型 + * @return 错误信息字符串 + */ + @NonNull + public static String getDownloaderErrorMessage(PolyvDownloaderErrorReason.ErrorType type) { + switch (type) { + case VID_IS_NULL: + return "视频id不正确,请设置正确的视频id进行下载"; + + case NOT_PERMISSION: + return "非法下载,请向管理员反馈"; + + case RUNTIME_EXCEPTION: + return "当前视频无法下载,请向管理员反馈"; + + case VIDEO_STATUS_ERROR: + return "视频状态异常,无法下载"; + + case M3U8_NOT_DATA: + return "视频数据加载失败,请重新下载"; + + case QUESTION_NOT_DATA: + return "视频问答数据加载失败,请重新下载"; + + case MULTIMEDIA_LIST_EMPTY: + return "当前视频无法下载,请向管理员反馈"; + + case CAN_NOT_MKDIR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case DOWNLOAD_TS_ERROR: + return "视频文件下载失败,请重新下载"; + + case MULTIMEDIA_EMPTY: + return "当前视频无法下载,请向管理员反馈"; + + case NOT_CREATE_DIR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case VIDEO_LOAD_FAILURE: + return "当前视频无法下载,请向管理员反馈"; + + case VIDEO_NULL: + return "视频信息加载失败,请重新下载"; + + case DIR_SPACE_LACK: + return "检测到移动设备存储空间不足,请清除存储空间再重新下载"; + + case DOWNLOAD_DIR_IS_NUll: + return "检测到存储目录未设置,请先设置存储目录再重新下载"; + + case HLS_15X_URL_ERROR: + return "当前视频无法下载,请向管理员反馈"; + + case HLS_SPEED_TYPE_IS_NULL: + return "视频速度类型错误,请设置了速度类型后重新下载"; + + case HLS_15X_ERROR: + return "当前视频无法下载,请向管理员反馈"; + + case GET_VIDEO_INFO_ERROR: + return "视频信息加载失败,请重新下载"; + + case WRITE_EXTERNAL_STORAGE_DENIED: + return "检测到拒绝写入存储设备,请先为应用程序分配权限,再重新下载"; + + case VID_ERROR: + return "视频id不正确,请设置正确的视频id进行下载"; + + case EXTRA_DIR_IS_NUll: + return "检测到资源目录未设置,请先设置存储目录再重新下载"; + + case NOT_CREATE_EXTRA_DIR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case CREATE_NOMEDIA_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case URL_IS_EMPTY: + return "当前视频无法下载,请向管理员反馈"; + + case CREATE_M3U8_FILE_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case WRITE_M3U8_FILE_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case CREATE_VIDEO_JSON_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case WRITE_VIDEO_JSON_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case QUESTION_FORMAT_JSON_ERROR: + return "当前视频无法下载,请重新下载或者切换网络重新下载或者向管理员反馈"; + + case DELETE_ZIP_FILE_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case CREATE_VIDEO_TMP_FILE_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case DOWNLOAD_VIDEO_FILE_LENGTH_ERROR: + return "当前视频无法下载,请重新下载或者切换网络重新下载或者向管理员反馈"; + + case VIDEO_HTTP_CODE_ERROR: + return "当前视频无法下载,请重新下载或者切换网络重新下载或者向管理员反馈"; + + case VIDEO_DOWNLOAD_ERROR: + return "当前视频下载出错,请点击停止/继续下载或删除重新下载";// 当前视频无法下载,请删除后重新下载或者切换网络重新下载或者向管理员反馈 + + case VIDEO_RENAME_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case UNZIP_FILE_ERROR: + return "当前视频解压失败,请尝试删除视频再次下载或者切换网络再次下载或者向管理员反馈"; + + case CREATE_ZIP_TMP_FILE_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case CREATE_UNZIP_DIR_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case DOWNLOAD_ZIP_FILE_LENGTH_ERROR: + return "当前视频无法下载,请重新下载或者切换网络重新下载或者向管理员反馈"; + + case ZIP_HTTP_CODE_ERROR: + return "当前视频无法下载,请重新下载或者切换网络重新下载或者向管理员反馈"; + + case ZIP_DOWNLOAD_ERROR: + return "当前视频下载出错,请删除后重新下载或者切换网络重新下载或者向管理员反馈"; + + case ZIP_RENAME_ERROR: + return "当前视频无法下载,请重启手机再次下载或者向管理员反馈"; + + case NETWORK_DENIED: + return "无法连接网络,请连接网络后下载"; + + case MEDIA_UNKNOWN: + return "SD卡不可用,请重启手机或者更换SD卡或者向管理员反馈"; + + case MEDIA_REMOVED: + return "SD卡被移除,请重启手机或者向管理员反馈"; + + case MEDIA_UNMOUNTED: + return "SD卡存在但未安装,请重新安装SD卡或者向管理员反馈"; + + case MEDIA_CHECKING: + return "SD卡正在进行磁盘检查中,请稍后下载或者重启手机或者向管理员反馈"; + + case MEDIA_NOFS: + return "SD卡空白或正在使用不受支持的文件系统,请重启手机或者更换SD卡或者向管理员反馈"; + + case MEDIA_MOUNTED_READ_ONLY: + return "SD卡不能写入,请重启手机或者向管理员反馈"; + + case MEDIA_SHARED: + return "SD卡不可用,请重启手机或者更换SD卡或者向管理员反馈"; + + case MEDIA_BAD_REMOVAL: + return "SD卡不可用,请重启手机或者更换SD卡或者向管理员反馈"; + + case MEDIA_UNMOUNTABLE: + return "SD卡不可用,请重启手机或者更换SD卡或者向管理员反馈"; + + case MEDIA_EJECTING: + return "SD卡不可用,请重启手机或者更换SD卡或者向管理员反馈"; + + case VIDEO_BITRATE_NOT_EXIST: + return "当前视频下载出错,请尝试切换码率进行下载或者向管理员反馈"; + + default: + return "当前视频无法下载,请向管理员反馈"; + } + } + + /** + * 获取播放错误信息 + * @param playErrorReason 播放错误类型 + * @return 错误信息字符串 + */ + public static String getPlayErrorMessage(@PolyvPlayErrorReason.PlayErrorReason int playErrorReason) { + switch (playErrorReason) { + case PolyvPlayErrorReason.VIDEO_ERROR: + return "当前视频无法播放,请尝试切换网络重新播放或者向管理员反馈"; + + case PolyvPlayErrorReason.NETWORK_DENIED: + return "无法连接网络,请连接网络后播放"; + + case PolyvPlayErrorReason.OUT_FLOW: + return "流量超标,请向管理员反馈"; + + case PolyvPlayErrorReason.TIMEOUT_FLOW: + return "账号过期,请向管理员反馈"; + + case PolyvPlayErrorReason.LOCAL_AUDIO_ERROR: + return "本地视频文件损坏,请重新下载"; + + case PolyvPlayErrorReason.START_ERROR: + return "播放异常,请重新播放"; + + case PolyvPlayErrorReason.NOT_PERMISSION: + return "非法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.USER_TOKEN_ERROR: + return "请先设置播放凭证,再进行播放"; + + case PolyvPlayErrorReason.VIDEO_STATUS_ERROR: + return "视频状态异常,无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.VID_ERROR: + return "视频id不正确,请设置正确的视频id进行播放"; + + case PolyvPlayErrorReason.BITRATE_ERROR: + return "清晰度不正确,请设置正确的清晰度进行播放"; + + case PolyvPlayErrorReason.VIDEO_NULL: + return "视频信息加载失败,请尝试切换网络重新播放"; + + case PolyvPlayErrorReason.MP4_LINK_NUM_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.M3U8_LINK_NUM_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.HLS_SPEED_TYPE_NULL: + return "播放速度不正确,请设置正确的播放速度进行播放"; + + case PolyvPlayErrorReason.NOT_LOCAL_VIDEO: + return "找不到缓存的视频文件,请连网后重新下载"; + + case PolyvPlayErrorReason.HLS_15X_INDEX_EMPTY: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.HLS_15X_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.HLS_15X_URL_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.M3U8_15X_LINK_NUM_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.CHANGE_EQUAL_HLS_SPEED: + return "切换播放速度相同,请选择其它播放速度"; + + case PolyvPlayErrorReason.CAN_NOT_CHANGE_BITRATE: + return "未开始播放视频不能切换清晰度,请先播放视频"; + + case PolyvPlayErrorReason.CAN_NOT_CHANGE_HLS_SPEED: + return "未开始播放视频不能切换播放速度,请先播放视频"; + + case PolyvPlayErrorReason.QUESTION_ERROR: + return "视频问答数据加载失败,请重新播放或者切换网络重新播放"; + + case PolyvPlayErrorReason.CHANGE_BITRATE_NOT_EXIST: + return "视频没有这个清晰度,请切换其它清晰度"; + + case PolyvPlayErrorReason.HLS_URL_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.LOADING_VIDEO_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.HLS2_URL_ERROR: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.TOKEN_NULL: + return "播放授权获取失败,请重新播放或者切换网络重新播放或者向管理员反馈"; + + case PolyvPlayErrorReason.WRITE_EXTERNAL_STORAGE_DENIED: + return "检测到拒绝读取存储设备,请先为应用程序分配权限,再重新播放"; + + case PolyvPlayErrorReason.SOURCE_URL_EMPTY: + return "当前视频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.AUDIO_URL_EMPTY: + return "当前音频无法播放,请向管理员反馈"; + + case PolyvPlayErrorReason.NOT_LOCAL_AUDIO: + return "找不到缓存的音频文件,请连网后重新下载"; + + case PolyvPlayErrorReason.CAN_NOT_CHANGE_AUDIO: + return "未开始播放不能切换到音频,请先开始播放"; + + case PolyvPlayErrorReason.CAN_NOT_CHANGE_VIDEO: + return "未开始播放不能切换到视频,请先开始播放"; + + case PolyvPlayErrorReason.LOCAL_VIDEO_ERROR: + return "本地音频文件损坏,请重新下载"; + + case PolyvPlayErrorReason.LOAD_TIMEOUT: + return "加载超时,请重新播放"; + + default: + return "当前视频无法播放,请向管理员反馈"; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvImageLoader.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvImageLoader.java new file mode 100644 index 0000000..330b896 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvImageLoader.java @@ -0,0 +1,150 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.widget.ImageView; + +import androidx.annotation.DrawableRes; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.load.resource.bitmap.CircleCrop; +import com.bumptech.glide.request.RequestOptions; +import com.bumptech.glide.request.target.Target; + +/** + * 图片二次加载框架 + */ +public class PolyvImageLoader { + + + // + private static PolyvImageLoader INSTANCE; + + private PolyvImageLoader() {/**/} + + public static PolyvImageLoader getInstance() { + if (INSTANCE == null) { + synchronized (PolyvImageLoader.class) { + if (INSTANCE == null) { + INSTANCE = new PolyvImageLoader(); + } + } + } + return INSTANCE; + } + // + + + /** + * 加载图片 + */ + public void loadImage(Context context, String url, ImageView imageView) { + Glide.with(context) + .load(url) + .into(imageView); + } + + /** + * 加载图片 + */ + public void loadImage(Context context, @DrawableRes Integer resourceId, ImageView imageView) { + Glide.with(context) + .load(resourceId) + .into(imageView); + } + + /** + * 预加载 + * @param context + * @param url + */ + public void preloadImage(Context context, String url){ + RequestOptions imgOptions = new RequestOptions() + .diskCacheStrategy(DiskCacheStrategy.ALL) + .override(Target.SIZE_ORIGINAL); + Glide.with(context).load(url).apply(imgOptions).preload(); + } + + /** + * 原始尺寸加载图片 + * @param context + * @param url + * @param imageView + */ + public void loadImageOrigin(Context context, String url, ImageView imageView, @DrawableRes int placeHolderId) { + RequestOptions options = new RequestOptions().override(Target.SIZE_ORIGINAL) + .placeholder(placeHolderId) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE); + loadImageWithOptions(context, url, imageView, options); + } + + /** + * 原始尺寸加载图片 + * @param context + * @param url + * @param imageView + */ + public void loadImageOrigin(Context context, String url, ImageView imageView, Drawable drawable) { + RequestOptions options = new RequestOptions().override(Target.SIZE_ORIGINAL) + .placeholder(drawable) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.RESOURCE); + loadImageWithOptions(context, url, imageView, options); + } + + public void loadImageOriginCircle(Context context, String url, ImageView imageView, @DrawableRes int placeHolderId){ + RequestOptions options = new RequestOptions() + .placeholder(placeHolderId) + .bitmapTransform(new CircleCrop()) + .override(Target.SIZE_ORIGINAL).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.RESOURCE); + loadImageWithOptions(context, url, imageView, options); + } + + + /** + * 加载图片,开启自动缓存策略 + * @param context + * @param url + * @param imageView + */ + public void loadImageWithCache(Context context, String url, ImageView imageView, @DrawableRes int placeHolderId) { + RequestOptions options = new RequestOptions().dontAnimate() + .placeholder(placeHolderId) + .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC); + loadImageWithOptions(context, url, imageView, options); + } + + /** + * 加载图片,关闭缓存策略 + * @param context + * @param url + * @param imageView + */ + public void loadImageNoCache(Context context, String url, ImageView imageView, @DrawableRes int placeHolderId) { + RequestOptions options = new RequestOptions().dontAnimate() + .placeholder(placeHolderId) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE); + loadImageWithOptions(context, url, imageView, options); + } + + /** + * 加载图片,自定义配置 + * @param context + * @param url + * @param imageView + * @param options 自定义配置 + */ + public void loadImageWithOptions(Context context, String url, ImageView imageView, RequestOptions options){ + Glide.with(context) + .load(url) + .apply(options) + .into(imageView); + } + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvKeyBoardUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvKeyBoardUtils.java new file mode 100644 index 0000000..4f49d5e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvKeyBoardUtils.java @@ -0,0 +1,32 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import android.content.Context; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; + +/** + * 软键盘工具类 + */ +public class PolyvKeyBoardUtils +{ + + + public static void openKeybord(EditText mEditText, Context mContext) + { + + InputMethodManager imm = (InputMethodManager) mContext + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN); + imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, + InputMethodManager.HIDE_IMPLICIT_ONLY); + } + + + public static void closeKeybord(EditText mEditText, Context mContext) + { + + InputMethodManager imm = (InputMethodManager) mContext + .getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvNetworkUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvNetworkUtils.java new file mode 100644 index 0000000..c2a604a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvNetworkUtils.java @@ -0,0 +1,230 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import android.content.Context; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.telephony.TelephonyManager; + +public class PolyvNetworkUtils { + + private PolyvNetworkUtils() { + } + + public static final int NETWORK_WIFI = 1; // wifi network + public static final int NETWORK_4G = 4; // "4G" networks + public static final int NETWORK_3G = 3; // "3G" networks + public static final int NETWORK_2G = 2; // "2G" networks + public static final int NETWORK_UNKNOWN = 5; // unknown network + public static final int NETWORK_NO = -1; // no network + + private static final int NETWORK_TYPE_GSM = 16; + private static final int NETWORK_TYPE_TD_SCDMA = 17; + private static final int NETWORK_TYPE_IWLAN = 18; + + /** + * 打开网络设置界面 + *

3.0以下打开设置界面

+ * + * @param context 上下文 + */ + public static void openWirelessSettings(Context context) { + if (android.os.Build.VERSION.SDK_INT > 10) { + context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS)); + } else { + context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS)); + } + } + + /** + * 获取活动网路信息 + * + * @param context 上下文 + * @return NetworkInfo + */ + private static NetworkInfo getActiveNetworkInfo(Context context) { + ConnectivityManager cm = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + return cm.getActiveNetworkInfo(); + } + + /** + * 判断网络是否可用 + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ */ + public static boolean isAvailable(Context context) { + NetworkInfo info = getActiveNetworkInfo(context); + return info != null && info.isAvailable(); + } + + /** + * 判断网络是否连接 + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return true: 是
false: 否 + */ + public static boolean isConnected(Context context) { + NetworkInfo info = getActiveNetworkInfo(context); + return info != null && info.isConnected(); + } + + /** + * 判断网络是否是4G + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return true: 是
false: 不是 + */ + public static boolean is4G(Context context) { + NetworkInfo info = getActiveNetworkInfo(context); + return info != null && info.isAvailable() && info.getSubtype() == TelephonyManager.NETWORK_TYPE_LTE; + } + + /** + * 判断wifi是否连接状态 + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return true: 连接
false: 未连接 + */ + public static boolean isWifiConnected(Context context) { + ConnectivityManager cm = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + return cm != null && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI; + } + + /** + * 获取移动网络运营商名称 + *

如中国联通、中国移动、中国电信

+ * + * @param context 上下文 + * @return 移动网络运营商名称 + */ + public static String getNetworkOperatorName(Context context) { + TelephonyManager tm = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + return tm != null ? tm.getNetworkOperatorName() : null; + } + + /** + * 获取移动终端类型 + * + * @param context 上下文 + * @return 手机制式 + *
    + *
  • PHONE_TYPE_NONE : 0 手机制式未知
  • + *
  • PHONE_TYPE_GSM : 1 手机制式为GSM,移动和联通
  • + *
  • PHONE_TYPE_CDMA : 2 手机制式为CDMA,电信
  • + *
  • PHONE_TYPE_SIP : 3
  • + *
+ */ + public static int getPhoneType(Context context) { + TelephonyManager tm = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + return tm != null ? tm.getPhoneType() : -1; + } + + + /** + * 获取当前的网络类型(WIFI,2G,3G,4G) + *

需添加权限 android.permission.ACCESS_NETWORK_STATE

+ * + * @param context 上下文 + * @return 网络类型 + *
    + *
  • NETWORK_WIFI = 1;
  • + *
  • NETWORK_4G = 4;
  • + *
  • NETWORK_3G = 3;
  • + *
  • NETWORK_2G = 2;
  • + *
  • NETWORK_UNKNOWN = 5;
  • + *
  • NETWORK_NO = -1;
  • + *
+ */ + public static int getNetWorkType(Context context) { + int netType = NETWORK_NO; + NetworkInfo info = getActiveNetworkInfo(context); + if (info != null && info.isAvailable()) { + + if (info.getType() == ConnectivityManager.TYPE_WIFI) { + netType = NETWORK_WIFI; + } else if (info.getType() == ConnectivityManager.TYPE_MOBILE) { + switch (info.getSubtype()) { + + case NETWORK_TYPE_GSM: + case TelephonyManager.NETWORK_TYPE_GPRS: + case TelephonyManager.NETWORK_TYPE_CDMA: + case TelephonyManager.NETWORK_TYPE_EDGE: + case TelephonyManager.NETWORK_TYPE_1xRTT: + case TelephonyManager.NETWORK_TYPE_IDEN: + netType = NETWORK_2G; + break; + + case NETWORK_TYPE_TD_SCDMA: + case TelephonyManager.NETWORK_TYPE_EVDO_A: + case TelephonyManager.NETWORK_TYPE_UMTS: + case TelephonyManager.NETWORK_TYPE_EVDO_0: + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_HSPA: + case TelephonyManager.NETWORK_TYPE_EVDO_B: + case TelephonyManager.NETWORK_TYPE_EHRPD: + case TelephonyManager.NETWORK_TYPE_HSPAP: + netType = NETWORK_3G; + break; + + case NETWORK_TYPE_IWLAN: + case TelephonyManager.NETWORK_TYPE_LTE: + netType = NETWORK_4G; + break; + default: + + String subtypeName = info.getSubtypeName(); + if (subtypeName.equalsIgnoreCase("TD-SCDMA") + || subtypeName.equalsIgnoreCase("WCDMA") + || subtypeName.equalsIgnoreCase("CDMA2000")) { + netType = NETWORK_3G; + } else { + netType = NETWORK_UNKNOWN; + } + break; + } + } else { + netType = NETWORK_UNKNOWN; + } + } + return netType; + } + + /** + * 获取当前的网络类型(WIFI,2G,3G,4G) + *

依赖上面的方法

+ * + * @param context 上下文 + * @return 网络类型名称 + *
    + *
  • NETWORK_WIFI
  • + *
  • NETWORK_4G
  • + *
  • NETWORK_3G
  • + *
  • NETWORK_2G
  • + *
  • NETWORK_UNKNOWN
  • + *
  • NETWORK_NO
  • + *
+ */ + public static String getNetWorkTypeName(Context context) { + switch (getNetWorkType(context)) { + case NETWORK_WIFI: + return "NETWORK_WIFI"; + case NETWORK_4G: + return "NETWORK_4G"; + case NETWORK_3G: + return "NETWORK_3G"; + case NETWORK_2G: + return "NETWORK_2G"; + case NETWORK_NO: + return "NETWORK_NO"; + default: + return "NETWORK_UNKNOWN"; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvScreenUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvScreenUtils.java new file mode 100644 index 0000000..72a2929 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvScreenUtils.java @@ -0,0 +1,138 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import android.app.Activity; +import android.app.ActivityManager; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; +import android.graphics.Point; +import android.os.Build; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.WindowManager; + +import java.util.List; + +/** + * 与屏幕相关的工具类 + */ +public class PolyvScreenUtils { + private static int height16_9; + + // 生成竖屏下w:h=16:9的高 + public static int generateHeight16_9(Activity activity) { + return height16_9 != 0 ? height16_9 : (height16_9 = getNormalWH(activity)[isPortrait(activity) ? 0 : 1] * 9 / 16); + } + + // 获取竖屏下w:h=16:9的高 + public static int getHeight16_9() { + return height16_9; + } + + + // 是否竖屏 + public static boolean isPortrait(Context context) { + return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; + } + + // 是否横屏 + public static boolean isLandscape(Context context) { + return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; + } + + // 设置竖屏 + public static void setPortrait(Activity activity) { + activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); + } + + // 设置横屏 + public static void setLandscape(Activity activity) { + activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); + } + + /** + * 获取包含状态栏的屏幕宽度和高度 + * + * @param activity + * @return {宽,高} + */ + public static int[] getNormalWH(Activity activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + DisplayMetrics dm = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(dm); + return new int[] { dm.widthPixels, dm.heightPixels }; + } else { + Point point = new Point(); + WindowManager wm = activity.getWindowManager(); + wm.getDefaultDisplay().getSize(point); + return new int[] { point.x, point.y }; + } + } + + // 重置状态栏 + public static void reSetStatusBar(Activity activity) { + if (isLandscape(activity)) { + hideStatusBar(activity); + } else { + setDecorVisible(activity); + } + } + + // 隐藏状态栏 + public static void hideStatusBar(Activity activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + View decorView = activity.getWindow().getDecorView(); + activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; + decorView.setSystemUiVisibility(uiOptions); + } + } + + // 恢复为不全屏状态 + public static void setDecorVisible(Activity activity) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } else { + View decorView = activity.getWindow().getDecorView(); + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + int uiOptions = View.SYSTEM_UI_FLAG_VISIBLE; + decorView.setSystemUiVisibility(uiOptions); + } + } + + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + public static int px2dip(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue / scale + 0.5f); + } + //由于画中画的activity为singleInstance模式,如果需要在画中画的activity退出时退出singleInstance模式,那么可以调用该方法 + public static void removePIPSingleInstanceTask(Context context, String pipActivityName, boolean isInPictureInPictureMode) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + ActivityManager activityManager = (ActivityManager) context.getSystemService(Activity.ACTIVITY_SERVICE); + if (activityManager == null) + return; + List tasks = activityManager.getAppTasks(); + if (tasks == null) + return; + for (ActivityManager.AppTask task : tasks) { + ActivityManager.RecentTaskInfo info = task.getTaskInfo(); + if (info != null && info.baseIntent != null && info.baseIntent.getComponent() != null) { + if (pipActivityName.equals(info.baseIntent.getComponent().getClassName())) { + if (isInPictureInPictureMode || info.numActivities == 0) { + task.finishAndRemoveTask(); + } + } + } + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvSensorHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvSensorHelper.java new file mode 100644 index 0000000..9239e8c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvSensorHelper.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import android.app.Activity; +import android.view.OrientationEventListener; + +import java.lang.ref.WeakReference; + +public class PolyvSensorHelper { + private OrientationEventListener eventListener; + private boolean switchFlag; + private boolean isLandscape; + + public PolyvSensorHelper(final Activity activity) { + final WeakReference wr_activity = new WeakReference(activity); + eventListener = new OrientationEventListener(activity.getApplicationContext()) { + @Override + public void onOrientationChanged(int orientation) { + Activity activity1 = wr_activity.get(); + if (activity1 != null) { + boolean isPortrait = PolyvScreenUtils.isPortrait(activity1); + if ((orientation > -1 && orientation <= 10) || orientation >= 350 || (orientation <= 190 && orientation >= 170)) { + if (!isPortrait && switchFlag && !isLandscape) + PolyvScreenUtils.setPortrait(activity1); + if (isPortrait && !isLandscape) + isLandscape = !isLandscape; + } else if ((orientation <= 100 && orientation >= 80) || (orientation <= 280 && orientation >= 260)) { + if (isPortrait && switchFlag && isLandscape) + PolyvScreenUtils.setLandscape(activity1); + if (!isPortrait && isLandscape) + isLandscape = !isLandscape; + } + } + } + }; + } + + // 开启监听 + public void enable() { + eventListener.enable(); + } + + // 关闭监听 + public void disable() { + eventListener.disable(); + } + + /** + * 屏幕方向切换之后,是否开启随手势自动切换屏幕方向 + * + * @param switchFlag 是否开启自动切换 + * @param isLandscape 屏幕切换之后的方向(非自动切换,屏幕方向需要和手动切换之后的方向一致之后,自动切换才会再次生效) + */ + public void toggle(boolean switchFlag, boolean isLandscape) { + this.switchFlag = switchFlag; + this.isLandscape = isLandscape; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvStorageUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvStorageUtils.java new file mode 100644 index 0000000..885536f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvStorageUtils.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import android.content.Context; +import android.os.Build; +import android.os.Environment; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; + + +/** + * 存储工具类 + * @author Lionel 2018-6-12 + */ +public class PolyvStorageUtils { + + private final static String MOUNTED = "mounted"; + + /** + * 获取可使用的外部存储目录
+ * 列表中的第一个条目被视为外部主存储,当Android API 大于等于19时,列表中包含了可移除的存储介质(例如 SD 卡)的路径。 + * 当用户卸载您的应用时,此目录列表中的目录及其内容将被删除。 + * 详细请看:https://developer.android.com/guide/topics/data/data-storage?hl=zh-cn#filesExternal + * @param context + * @return 外部存储目录列表 + */ + @NonNull + public static ArrayList getExternalFilesDirs(@NonNull Context context) { + File[] files; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + //列表中包含了可移除的存储介质(例如 SD 卡)的路径。 + files = context.getExternalFilesDirs(null); + } else { + files = ContextCompat.getExternalFilesDirs(context, null); + } + + ArrayList storageList = new ArrayList<>(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + //判断存储设备可用性 + for (File file : files) { + if (file != null) { + String state = Environment.getExternalStorageState(file); + if (MOUNTED.equals(state)) { + storageList.add(file); + } + } + } + } else { + storageList.addAll(Arrays.asList(files)); + } + + return storageList; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvTimeUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvTimeUtils.java new file mode 100644 index 0000000..17ef15b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/util/PolyvTimeUtils.java @@ -0,0 +1,108 @@ +package cn.shangyu.gdxzExpert.polyvplayer.util; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +/** + * 常用时间工具类 + */ +public class PolyvTimeUtils { + private static SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); + private static SimpleDateFormat formatDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); + + /** + * 解析日期 + */ + private static Date parseDateTime(String datetime) { + + Date mDate = null; + try { + mDate = formatDateTime.parse(datetime); + } catch (ParseException e) { + e.printStackTrace(); + } + + return mDate; + } + + /** + * 以友好的方式显示时间 + */ + public static String friendlyTime(String sdate) { + + Date time = parseDateTime(sdate); + if (time == null) { + return "Unknown"; + } + String ftime = ""; + Calendar cal = Calendar.getInstance(); + + // 判断是否是同一天 + String curDate = formatDate.format(cal.getTime()); + String paramDate = formatDate.format(time); + if (curDate.equals(paramDate)) { + int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); + if (hour == 0) { + ftime = Math.max( + (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + + "分钟前"; + } else { + ftime = hour + "小时前"; + } + return ftime; + } + + long lt = time.getTime() / 86400000; + long ct = cal.getTimeInMillis() / 86400000; + int days = (int) (ct - lt); + if (days == 0) { + int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); + if (hour == 0) { + ftime = Math.max( + (cal.getTimeInMillis() - time.getTime()) / 60000, 1) + + "分钟前"; + } else { + ftime = hour + "小时前"; + } + } else if (days == 1) { + ftime = "昨天"; + } else if (days == 2) { + ftime = "前天"; + } else if (days > 2 && days <= 5) { + ftime = days + "天前"; + } else if (days > 5) { + ftime = formatDate.format(time); + } + return ftime; + } + + /** + * 以友好的方式显示视频时间 + */ + public static String generateTime(long millisecond) { + return generateTime(millisecond, false); + } + + /** + * 以友好的方式显示视频时间 + * + * @param millisecond 毫秒 + * @param fit 小时是否适配"00" + * @return + */ + public static String generateTime(long millisecond, boolean fit) { + int totalSeconds = (int) (millisecond / 1000); + + int seconds = totalSeconds % 60; + int minutes = (totalSeconds / 60) % 60; + int hours = totalSeconds / 3600; + + if (fit || hours > 0) + return String.format(Locale.getDefault(), "%02d:%02d:%02d", hours, minutes, seconds); + else + return String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/IcsLinearLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/IcsLinearLayout.java new file mode 100644 index 0000000..73cefc4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/IcsLinearLayout.java @@ -0,0 +1,431 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; + +/** + * A simple extension of a regular linear layout that supports the divider API + * of Android 4.0+. The dividers are added adjacent to the children by changing + * their layout params. If you need to rely on the margins which fall in the + * same orientation as the layout you should wrap the child in a simple + * {@link android.widget.FrameLayout} so it can receive the margin. + */ +public class IcsLinearLayout extends LinearLayout { + private static final int[] R_styleable_LinearLayout = new int[] { + /* 0 */ android.R.attr.divider, + /* 1 */ android.R.attr.measureWithLargestChild, + /* 2 */ android.R.attr.showDividers, + /* 3 */ android.R.attr.dividerPadding, + }; + private static final int LinearLayout_divider = 0; + private static final int LinearLayout_measureWithLargestChild = 1; + private static final int LinearLayout_showDividers = 2; + private static final int LinearLayout_dividerPadding = 3; + + /** + * Don't show any dividers. + */ + public static final int SHOW_DIVIDER_NONE = 0; + /** + * Show a divider at the beginning of the group. + */ + public static final int SHOW_DIVIDER_BEGINNING = 1; + /** + * Show dividers between each item in the group. + */ + public static final int SHOW_DIVIDER_MIDDLE = 2; + /** + * Show a divider at the end of the group. + */ + public static final int SHOW_DIVIDER_END = 4; + + + private static final boolean IS_HONEYCOMB = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + + + private Drawable mDivider; + protected int mDividerWidth; + protected int mDividerHeight; + private int mShowDividers; + private int mDividerPadding; + private boolean mClipDivider; + + private boolean mUseLargestChild; + + public IcsLinearLayout(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, /*com.android.internal.R.styleable.*/R_styleable_LinearLayout); + + setDividerDrawable(a.getDrawable(/*com.android.internal.R.styleable.*/LinearLayout_divider)); + mShowDividers = a.getInt(/*com.android.internal.R.styleable.*/LinearLayout_showDividers, SHOW_DIVIDER_NONE); + mDividerPadding = a.getDimensionPixelSize(/*com.android.internal.R.styleable.*/LinearLayout_dividerPadding, 0); + mUseLargestChild = a.getBoolean(/*com.android.internal.R.styleable.*/LinearLayout_measureWithLargestChild, false); + + a.recycle(); + } + + /** + * Set how dividers should be shown between items in this layout + * + * @param showDividers One or more of {@link #SHOW_DIVIDER_BEGINNING}, + * {@link #SHOW_DIVIDER_MIDDLE}, or {@link #SHOW_DIVIDER_END}, + * or {@link #SHOW_DIVIDER_NONE} to show no dividers. + */ + public void setShowDividers(int showDividers) { + if (showDividers != mShowDividers) { + requestLayout(); + invalidate(); //XXX This is required if you are toggling a divider off + } + mShowDividers = showDividers; + } + + /** + * @return A flag set indicating how dividers should be shown around items. + * @see #setShowDividers(int) + */ + public int getShowDividers() { + return mShowDividers; + } + + /** + * Set a drawable to be used as a divider between items. + * @param divider Drawable that will divide each item. + * @see #setShowDividers(int) + */ + public void setDividerDrawable(Drawable divider) { + if (divider == mDivider) { + return; + } + mDivider = divider; + mClipDivider = divider instanceof ColorDrawable; + if (divider != null) { + mDividerWidth = divider.getIntrinsicWidth(); + mDividerHeight = divider.getIntrinsicHeight(); + } else { + mDividerWidth = 0; + mDividerHeight = 0; + } + setWillNotDraw(divider == null); + requestLayout(); + } + + /** + * Set padding displayed on both ends of dividers. + * + * @param padding Padding value in pixels that will be applied to each end + * + * @see #setShowDividers(int) + * @see #setDividerDrawable(Drawable) + * @see #getDividerPadding() + */ + public void setDividerPadding(int padding) { + mDividerPadding = padding; + } + + /** + * Get the padding size used to inset dividers in pixels + * + * @see #setShowDividers(int) + * @see #setDividerDrawable(Drawable) + * @see #setDividerPadding(int) + */ + public int getDividerPadding() { + return mDividerPadding; + } + + /** + * Get the width of the current divider drawable. + * + * @hide Used internally by framework. + */ + public int getDividerWidth() { + return mDividerWidth; + } + + @Override + protected void measureChildWithMargins(View child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { + final int index = indexOfChild(child); + final int orientation = getOrientation(); + final LayoutParams params = (LayoutParams) child.getLayoutParams(); + if (hasDividerBeforeChildAt(index)) { + if (orientation == VERTICAL) { + //Account for the divider by pushing everything up + params.topMargin = mDividerHeight; + } else { + //Account for the divider by pushing everything left + params.leftMargin = mDividerWidth; + } + } + + final int count = getChildCount(); + if (index == count - 1) { + if (hasDividerBeforeChildAt(count)) { + if (orientation == VERTICAL) { + params.bottomMargin = mDividerHeight; + } else { + params.rightMargin = mDividerWidth; + } + } + } + super.measureChildWithMargins(child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); + } + + @Override + protected void onDraw(Canvas canvas) { + if (mDivider != null) { + if (getOrientation() == VERTICAL) { + drawDividersVertical(canvas); + } else { + drawDividersHorizontal(canvas); + } + } + super.onDraw(canvas); + } + + void drawDividersVertical(Canvas canvas) { + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + + if (child != null && child.getVisibility() != GONE) { + if (hasDividerBeforeChildAt(i)) { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + final int top = child.getTop() - lp.topMargin/* - mDividerHeight*/; + drawHorizontalDivider(canvas, top); + } + } + } + + if (hasDividerBeforeChildAt(count)) { + final View child = getChildAt(count - 1); + int bottom = 0; + if (child == null) { + bottom = getHeight() - getPaddingBottom() - mDividerHeight; + } else { + //final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + bottom = child.getBottom()/* + lp.bottomMargin*/; + } + drawHorizontalDivider(canvas, bottom); + } + } + + void drawDividersHorizontal(Canvas canvas) { + final int count = getChildCount(); + for (int i = 0; i < count; i++) { + final View child = getChildAt(i); + + if (child != null && child.getVisibility() != GONE) { + if (hasDividerBeforeChildAt(i)) { + final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + final int left = child.getLeft() - lp.leftMargin/* - mDividerWidth*/; + drawVerticalDivider(canvas, left); + } + } + } + + if (hasDividerBeforeChildAt(count)) { + final View child = getChildAt(count - 1); + int right = 0; + if (child == null) { + right = getWidth() - getPaddingRight() - mDividerWidth; + } else { + //final LayoutParams lp = (LayoutParams) child.getLayoutParams(); + right = child.getRight()/* + lp.rightMargin*/; + } + drawVerticalDivider(canvas, right); + } + } + + void drawHorizontalDivider(Canvas canvas, int top) { + if(mClipDivider && !IS_HONEYCOMB) { + canvas.save(); + canvas.clipRect(getPaddingLeft() + mDividerPadding, top, + getWidth() - getPaddingRight() - mDividerPadding, top + mDividerHeight); + mDivider.draw(canvas); + canvas.restore(); + } else { + mDivider.setBounds(getPaddingLeft() + mDividerPadding, top, + getWidth() - getPaddingRight() - mDividerPadding, top + mDividerHeight); + mDivider.draw(canvas); + } + } + + void drawVerticalDivider(Canvas canvas, int left) { + if(mClipDivider && !IS_HONEYCOMB) { + canvas.save(); + canvas.clipRect(left, getPaddingTop() + mDividerPadding, + left + mDividerWidth, getHeight() - getPaddingBottom() - mDividerPadding); + mDivider.draw(canvas); + canvas.restore(); + } else { + mDivider.setBounds(left, getPaddingTop() + mDividerPadding, + left + mDividerWidth, getHeight() - getPaddingBottom() - mDividerPadding); + mDivider.draw(canvas); + } + } + + /** + * Determines where to position dividers between children. + * + * @param childIndex Index of child to check for preceding divider + * @return true if there should be a divider before the child at childIndex + * @hide Pending API consideration. Currently only used internally by the system. + */ + protected boolean hasDividerBeforeChildAt(int childIndex) { + if (childIndex == 0) { + return (mShowDividers & SHOW_DIVIDER_BEGINNING) != 0; + } else if (childIndex == getChildCount()) { + return (mShowDividers & SHOW_DIVIDER_END) != 0; + } else if ((mShowDividers & SHOW_DIVIDER_MIDDLE) != 0) { + boolean hasVisibleViewBefore = false; + for (int i = childIndex - 1; i >= 0; i--) { + if (getChildAt(i).getVisibility() != GONE) { + hasVisibleViewBefore = true; + break; + } + } + return hasVisibleViewBefore; + } + return false; + } + + /** + * When true, all children with a weight will be considered having + * the minimum size of the largest child. If false, all children are + * measured normally. + * + * @return True to measure children with a weight using the minimum + * size of the largest child, false otherwise. + * + * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild + */ + public boolean isMeasureWithLargestChildEnabled() { + return mUseLargestChild; + } + + /** + * When set to true, all children with a weight will be considered having + * the minimum size of the largest child. If false, all children are + * measured normally. + * + * Disabled by default. + * + * @param enabled True to measure children with a weight using the + * minimum size of the largest child, false otherwise. + * + * @attr ref android.R.styleable#LinearLayout_measureWithLargestChild + */ + public void setMeasureWithLargestChildEnabled(boolean enabled) { + mUseLargestChild = enabled; + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + + if (mUseLargestChild) { + final int orientation = getOrientation(); + switch (orientation) { + case HORIZONTAL: + useLargestChildHorizontal(); + break; + + case VERTICAL: + useLargestChildVertical(); + break; + } + } + } + + private void useLargestChildHorizontal() { + final int childCount = getChildCount(); + + // Find largest child width + int largestChildWidth = 0; + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + largestChildWidth = Math.max(child.getMeasuredWidth(), largestChildWidth); + } + + int totalWidth = 0; + // Re-measure childs + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + + if (child == null || child.getVisibility() == View.GONE) { + continue; + } + + final LayoutParams lp = + (LayoutParams) child.getLayoutParams(); + + float childExtra = lp.weight; + if (childExtra > 0) { + child.measure( + MeasureSpec.makeMeasureSpec(largestChildWidth, + MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(child.getMeasuredHeight(), + MeasureSpec.EXACTLY)); + totalWidth += largestChildWidth; + + } else { + totalWidth += child.getMeasuredWidth(); + } + + totalWidth += lp.leftMargin + lp.rightMargin; + } + + totalWidth += getPaddingLeft() + getPaddingRight(); + setMeasuredDimension(totalWidth, getMeasuredHeight()); + } + + private void useLargestChildVertical() { + final int childCount = getChildCount(); + + // Find largest child width + int largestChildHeight = 0; + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + largestChildHeight = Math.max(child.getMeasuredHeight(), largestChildHeight); + } + + int totalHeight = 0; + // Re-measure childs + for (int i = 0; i < childCount; i++) { + final View child = getChildAt(i); + + if (child == null || child.getVisibility() == View.GONE) { + continue; + } + + final LayoutParams lp = + (LayoutParams) child.getLayoutParams(); + + float childExtra = lp.weight; + if (childExtra > 0) { + child.measure( + MeasureSpec.makeMeasureSpec(child.getMeasuredWidth(), + MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec(largestChildHeight, + MeasureSpec.EXACTLY)); + totalHeight += largestChildHeight; + + } else { + totalHeight += child.getMeasuredHeight(); + } + + totalHeight += lp.leftMargin + lp.rightMargin; + } + + totalHeight += getPaddingLeft() + getPaddingRight(); + setMeasuredDimension(getMeasuredWidth(), totalHeight); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/LinearListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/LinearListView.java new file mode 100644 index 0000000..d1180d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/LinearListView.java @@ -0,0 +1,356 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.database.DataSetObserver; +import android.util.AttributeSet; +import android.view.SoundEffectConstants; +import android.view.View; +import android.widget.ArrayAdapter; +import android.widget.ListAdapter; + +import cn.shangyu.gdxzExpert.R; + + +/** + * An extension of a linear layout that supports the divider API of Android + * 4.0+. You can populate this layout with data that comes from a + * {@link ListAdapter} + */ +public class LinearListView extends IcsLinearLayout { + + private static final int[] R_styleable_LinearListView = new int[] { + /* 0 */android.R.attr.entries, + /* 1 */R.attr.dividerThickness + }; + + private static final int LinearListView_entries = 0; + private static final int LinearListView_dividerThickness = 1; + + private View mEmptyView; + private ListAdapter mAdapter; + private boolean mAreAllItemsSelectable; + private OnItemClickListener mOnItemClickListener; + private OnItemLongClickListener mOnItemLongClickListener; + private DataSetObserver mDataObserver = new DataSetObserver() { + + @Override + public void onChanged() { + setupChildren(); + } + + @Override + public void onInvalidated() { + setupChildren(); + } + + }; + + public LinearListView(Context context) { + this(context, null); + } + + public LinearListView(Context context, AttributeSet attrs) { + super(context, attrs); + + TypedArray a = context.obtainStyledAttributes(attrs, + R_styleable_LinearListView); + + // Use the thickness specified, zero being the default + final int thickness = a.getDimensionPixelSize( + LinearListView_dividerThickness, 0); + if (thickness != 0) { + setDividerThickness(thickness); + } + + CharSequence[] entries = a.getTextArray(LinearListView_entries); + if (entries != null) { + setAdapter(new ArrayAdapter(context, + android.R.layout.simple_list_item_1, entries)); + } + + a.recycle(); + } + + @Override + public void setOrientation(int orientation) { + if (orientation != getOrientation()) { + int tmp = mDividerHeight; + mDividerHeight = mDividerWidth; + mDividerWidth = tmp; + } + super.setOrientation(orientation); + } + + /** + * Set the divider thickness size in pixel. That means setting the divider + * height if the layout has an HORIZONTAL orientation and setting the + * divider width otherwise. + * + * @param thickness + * The divider thickness in pixel. + */ + public void setDividerThickness(int thickness) { + if (getOrientation() == VERTICAL) { + mDividerHeight = thickness; + } else { + mDividerWidth = thickness; + } + requestLayout(); + } + + public ListAdapter getAdapter() { + return mAdapter; + } + + /** + * Sets the data behind this LinearListView. + * + * @param adapter + * The ListAdapter which is responsible for maintaining the data + * backing this list and for producing a view to represent an + * item in that data set. + * + * @see #getAdapter() + */ + public void setAdapter(ListAdapter adapter) { + if (mAdapter != null) { + mAdapter.unregisterDataSetObserver(mDataObserver); + } + + mAdapter = adapter; + + if (mAdapter != null) { + mAdapter.registerDataSetObserver(mDataObserver); + mAreAllItemsSelectable = mAdapter.areAllItemsEnabled(); + } + + setupChildren(); + + } + + /** + * Interface definition for a callback to be invoked when an item in this + * LinearListView has been clicked. + */ + public interface OnItemClickListener { + + /** + * Callback method to be invoked when an item in this LinearListView has + * been clicked. + *

+ * Implementers can call getItemAtPosition(position) if they need to + * access the data associated with the selected item. + * + * @param parent + * The LinearListView where the click happened. + * @param view + * The view within the LinearListView that was clicked (this + * will be a view provided by the adapter) + * @param position + * The position of the view in the adapter. + * @param id + * The row id of the item that was clicked. + */ + void onItemClick(LinearListView parent, View view, int position, long id); + } + + /** + * Register a callback to be invoked when an item in this LinearListView has + * been clicked. + * + * @param listener + * The callback that will be invoked. + */ + public void setOnItemClickListener(OnItemClickListener listener) { + mOnItemClickListener = listener; + } + + /** + * @return The callback to be invoked with an item in this LinearListView has + * been clicked, or null id no callback has been set. + */ + public final OnItemClickListener getOnItemClickListener() { + return mOnItemClickListener; + } + + /** + * Call the OnItemClickListener, if it is defined. + * + * @param view + * The view within the LinearListView that was clicked. + * @param position + * The position of the view in the adapter. + * @param id + * The row id of the item that was clicked. + * @return True if there was an assigned OnItemClickListener that was + * called, false otherwise is returned. + */ + public boolean performItemClick(View view, int position, long id) { + if (mOnItemClickListener != null) { + playSoundEffect(SoundEffectConstants.CLICK); + mOnItemClickListener.onItemClick(this, view, position, id); + return true; + } + + return false; + } + + /** + * Sets the view to show if the adapter is empty + */ + public void setEmptyView(View emptyView) { + mEmptyView = emptyView; + + final ListAdapter adapter = getAdapter(); + final boolean empty = ((adapter == null) || adapter.isEmpty()); + updateEmptyStatus(empty); + } + + /** + * When the current adapter is empty, the LinearListView can display a special + * view call the empty view. The empty view is used to provide feedback to + * the user that no data is available in this LinearListView. + * + * @return The view to show if the adapter is empty. + */ + public View getEmptyView() { + return mEmptyView; + } + + /** + * Update the status of the list based on the empty parameter. If empty is + * true and we have an empty view, display it. In all the other cases, make + * sure that the layout is VISIBLE and that the empty view is GONE (if + * it's not null). + */ + private void updateEmptyStatus(boolean empty) { + if (empty) { + if (mEmptyView != null) { + mEmptyView.setVisibility(View.VISIBLE); + setVisibility(View.GONE); + } else { + // If the caller just removed our empty view, make sure the list + // view is visible + setVisibility(View.VISIBLE); + } + } else { + if (mEmptyView != null) + mEmptyView.setVisibility(View.GONE); + setVisibility(View.VISIBLE); + } + } + + private void setupChildren() { + + removeAllViews(); + + updateEmptyStatus((mAdapter == null) || mAdapter.isEmpty()); + + if (mAdapter == null) { + return; + } + + for (int i = 0; i < mAdapter.getCount(); i++) { + // adapter 要使用inflate(layoutId, parent, false); + View child = mAdapter.getView(i, null, this); + if (mAreAllItemsSelectable || mAdapter.isEnabled(i)) { + child.setOnClickListener(new InternalOnClickListener(i)); + child.setOnLongClickListener(new InternalOnLongClickListener(i)); + } + addViewInLayout(child, -1, child.getLayoutParams(), true); + } + } + + /** + * Internal OnClickListener that this view associate of each of its children + * so that they can respond to OnItemClick listener's events. Avoid setting + * an OnClickListener manually. If you need it you can wrap the child in a + * simple {@link android.widget.FrameLayout}. + */ + private class InternalOnClickListener implements OnClickListener { + + int mPosition; + + public InternalOnClickListener(int position) { + mPosition = position; + } + + @Override + public void onClick(View v) { + if ((mOnItemClickListener != null) && (mAdapter != null)) { + mOnItemClickListener.onItemClick(LinearListView.this, v, + mPosition, mAdapter.getItemId(mPosition)); + } + } + } + + /** + * Internal OnClickListener that this view associate of each of its children + * so that they can respond to OnItemClick listener's events. Avoid setting + * an OnClickListener manually. If you need it you can wrap the child in a + * simple {@link android.widget.FrameLayout}. + */ + private class InternalOnLongClickListener implements OnLongClickListener { + + int mPosition; + + public InternalOnLongClickListener(int position) { + mPosition = position; + } + + @Override + public boolean onLongClick(View v) { + if ((mOnItemLongClickListener != null) && (mAdapter != null)) { + return mOnItemLongClickListener.onItemLongClick(LinearListView.this, v, + mPosition, mAdapter.getItemId(mPosition)); + } + return false; + } + } + + /** + * Interface definition for a callback to be invoked when an item in this + * LinearListView has been clicked. + */ + public interface OnItemLongClickListener { + + /** + * Callback method to be invoked when an item in this LinearListView has + * been clicked. + *

+ * Implementers can call getItemAtPosition(position) if they need to + * access the data associated with the selected item. + * + * @param parent + * The LinearListView where the click happened. + * @param view + * The view within the LinearListView that was clicked (this + * will be a view provided by the adapter) + * @param position + * The position of the view in the adapter. + * @param id + * The row id of the item that was clicked. + */ + boolean onItemLongClick(LinearListView parent, View view, int position, long id); + } + + /** + * Register a callback to be invoked when an item in this LinearListView has + * been clicked. + * + * @param listener + * The callback that will be invoked. + */ + public void setOnItemLongClickListener(OnItemLongClickListener listener) { + mOnItemLongClickListener = listener; + } + + /** + * @return The callback to be invoked with an item in this LinearListView has + * been clicked, or null id no callback has been set. + */ + public final OnItemLongClickListener getOnItemLongClickListener() { + return mOnItemLongClickListener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvCircleProgressView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvCircleProgressView.java new file mode 100644 index 0000000..cf4c732 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvCircleProgressView.java @@ -0,0 +1,156 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +import cn.shangyu.gdxzExpert.R; + + +/** + * Created by zhuyong on 2017/6/22. + */ + +public class PolyvCircleProgressView extends View { + + private int mCurrent;//当前进度 + private Paint mPaintOut; + private Paint mPaintCurrent; + private Paint mPaintText; + private float mPaintWidth;//画笔宽度 + private int mPaintColor = Color.RED;//画笔颜色 + private int mTextColor = Color.BLACK;//字体颜色 + private float mTextSize;//字体大小 + private int location;//从哪个位置开始 + private float startAngle;//开始角度 + + private OnLoadingCompleteListener mLoadingCompleteListener; + + public PolyvCircleProgressView(Context context) { + this(context, null); + } + + public PolyvCircleProgressView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvCircleProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + //获取属性值 + TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressView); + location = array.getInt(R.styleable.CircleProgressView_location, 1); + mPaintWidth = array.getDimension(R.styleable.CircleProgressView_progress_paint_width, dip2px(context, 4));//默认4dp + mPaintColor = array.getColor(R.styleable.CircleProgressView_progress_paint_color, mPaintColor); + mTextSize = array.getDimension(R.styleable.CircleProgressView_progress_text_size, dip2px(context, 18));//默认18sp + mTextColor = array.getColor(R.styleable.CircleProgressView_progress_text_color, mTextColor); + array.recycle(); + + //画笔->背景圆弧 + mPaintOut = new Paint(); + mPaintOut.setAntiAlias(true); + mPaintOut.setStrokeWidth(mPaintWidth); + mPaintOut.setStyle(Paint.Style.STROKE); + mPaintOut.setColor(Color.parseColor("#1F1F1F")); + mPaintOut.setStrokeCap(Paint.Cap.ROUND); + //画笔->进度圆弧 + mPaintCurrent = new Paint(); + mPaintCurrent.setAntiAlias(true); + mPaintCurrent.setStrokeWidth(mPaintWidth); + mPaintCurrent.setStyle(Paint.Style.STROKE); + mPaintCurrent.setColor(mPaintColor); +// mPaintCurrent.setStrokeCap(Paint.Cap.ROUND); + //画笔->绘制字体 + mPaintText = new Paint(); + mPaintText.setAntiAlias(true); + mPaintText.setStyle(Paint.Style.FILL); + mPaintText.setColor(mTextColor); + mPaintText.setTextSize(mTextSize); + + if (location == 1) {//默认从左侧开始 + startAngle = -180; + } else if (location == 2) { + startAngle = -90; + } else if (location == 3) { + startAngle = 0; + } else if (location == 4) { + startAngle = 90; + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int width = MeasureSpec.getSize(widthMeasureSpec); + int height = MeasureSpec.getSize(heightMeasureSpec); + int size = width > height ? height : width; + setMeasuredDimension(size, size); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + //绘制背景圆弧,因为画笔有一定的宽度,所有画圆弧的范围要比View本身的大小稍微小一些,不然画笔画出来的东西会显示不完整 + RectF rectF = new RectF(mPaintWidth / 2, mPaintWidth / 2, getWidth() - mPaintWidth / 2, getHeight() - mPaintWidth / 2); + canvas.drawArc(rectF, 0, 360, false, mPaintOut); + + //绘制当前进度 + float sweepAngle = 360 * mCurrent / 100; + canvas.drawArc(rectF, startAngle, sweepAngle, false, mPaintCurrent); + +// //绘制进度数字 +// String text = mCurrent + "%"; +// //获取文字宽度 +// float textWidth = mPaintText.measureText(text, 0, text.length()); +// float dx = getWidth() / 2 - textWidth / 2; +// Paint.FontMetricsInt fontMetricsInt = mPaintText.getFontMetricsInt(); +// float dy = (fontMetricsInt.bottom - fontMetricsInt.top) / 2 - fontMetricsInt.bottom; +// float baseLine = getHeight() / 2 + dy; +// canvas.drawText(text, dx, baseLine, mPaintText); + + if (mLoadingCompleteListener != null && mCurrent == 100) { + mLoadingCompleteListener.complete(); + } + } + + /** + * 获取当前进度值 + * + * @return + */ + public int getmCurrent() { + return mCurrent; + } + + /** + * 设置当前进度并重新绘制界面 + * + * @param mCurrent + */ + public void setmCurrent(int mCurrent) { + this.mCurrent = mCurrent; + invalidate(); + } + + public void setOnLoadingCompleteListener(OnLoadingCompleteListener loadingCompleteListener) { + this.mLoadingCompleteListener = loadingCompleteListener; + } + + public interface OnLoadingCompleteListener { + void complete(); + } + + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvGrayImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvGrayImageView.java new file mode 100644 index 0000000..cfb3cdb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvGrayImageView.java @@ -0,0 +1,40 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Canvas; +import android.util.AttributeSet; +import android.widget.ImageView; + +import cn.shangyu.gdxzExpert.R; + + +@SuppressLint("AppCompatCustomView") +public class PolyvGrayImageView extends ImageView { + + public PolyvGrayImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public PolyvGrayImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PolyvGrayImageView(Context context) { + super(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + if (isPressed()) + // canvas.drawColor(0x33000000); + canvas.drawColor(getResources().getColor(R.color.commom_click_color_gray_half)); + } + + @Override + protected void dispatchSetPressed(boolean pressed) { + super.dispatchSetPressed(pressed); + invalidate(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvLoadingLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvLoadingLayout.java new file mode 100644 index 0000000..bc811c9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvLoadingLayout.java @@ -0,0 +1,126 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.easefun.polyvsdk.video.PolyvVideoView; + +import java.util.Locale; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; + +public class PolyvLoadingLayout extends FrameLayout { + private ProgressBar loadingProgress; + private TextView loadingSpeed; + + private PolyvVideoView videoView; + + private Handler handler = new Handler(Looper.getMainLooper()) { + @Override + public void handleMessage(Message msg) { + if (msg.what == 1) { + if (videoView != null && !videoView.isLocalPlay()) { + loadingSpeed.setVisibility(View.VISIBLE); + loadingSpeed.setText(formatedSpeed(videoView.getTcpSpeed(), 1000)); + + handler.sendEmptyMessageDelayed(1, 500); + } + } + } + }; + + private static String formatedSpeed(long bytes, long elapsed_milli) { + if (elapsed_milli <= 0) { + return "0 B/S"; + } + + if (bytes <= 0) { + return "0 B/S"; + } + + float bytes_per_sec = ((float) bytes) * 1000.f / elapsed_milli; + if (bytes_per_sec >= 1000 * 1000) { + return String.format(Locale.US, "%.2f MB/S", ((float) bytes_per_sec) / 1000 / 1000); + } else if (bytes_per_sec >= 1000) { + return String.format(Locale.US, "%.2f KB/S", ((float) bytes_per_sec) / 1000); + } else { + return String.format(Locale.US, "%d B/S", (long) bytes_per_sec); + } + } + + public PolyvLoadingLayout(@NonNull Context context) { + this(context, null); + } + + public PolyvLoadingLayout(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvLoadingLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + LayoutInflater.from(context).inflate(R.layout.polyv_player_loading_layout, this); + initView(); + } + + private void initView() { + loadingProgress = (ProgressBar) findViewById(R.id.loading_progress); + loadingSpeed = (TextView) findViewById(R.id.loading_speed); + } + + public void bindVideoView(PolyvVideoView videoView) { + this.videoView = videoView; + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + handler.removeCallbacksAndMessages(null); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + acceptVisibilityChange(getVisibility()); + } + + @Override + public void setVisibility(int visibility) { + super.setVisibility(visibility); + acceptVisibilityChange(visibility); + } + + private void acceptVisibilityChange(int visibility) { + handler.removeCallbacksAndMessages(null); + if (visibility == View.VISIBLE) { + handler.sendEmptyMessage(1); + } else { + loadingSpeed.setVisibility(View.GONE); + } + } + + public void fitLocationChange(boolean isInMainScreen) { + if (loadingProgress == null) + return; + MarginLayoutParams rlp = (MarginLayoutParams) loadingProgress.getLayoutParams(); + if (isInMainScreen) { + rlp.width = MarginLayoutParams.WRAP_CONTENT; + rlp.height = MarginLayoutParams.WRAP_CONTENT; + } else { + rlp.width = PolyvScreenUtils.dip2px(getContext(), 32); + rlp.height = PolyvScreenUtils.dip2px(getContext(), 32); + } + loadingProgress.setLayoutParams(rlp); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvSimpleSwipeRefreshLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvSimpleSwipeRefreshLayout.java new file mode 100644 index 0000000..c725033 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvSimpleSwipeRefreshLayout.java @@ -0,0 +1,41 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import android.os.Build; +import androidx.core.view.ViewCompat; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import android.util.AttributeSet; +import android.view.View; +import android.widget.AbsListView; + +public class PolyvSimpleSwipeRefreshLayout extends SwipeRefreshLayout { + // 包含的View + private View view; + + public PolyvSimpleSwipeRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PolyvSimpleSwipeRefreshLayout(Context context) { + super(context); + } + + public void setChildView(View view) { + this.view = view; + } + + @Override + public boolean canChildScrollUp() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + if (view instanceof AbsListView) { + final AbsListView absListView = (AbsListView) view; + return absListView.getChildCount() > 0 && (absListView.getFirstVisiblePosition() > 0 + || absListView.getChildAt(0).getTop() < absListView.getPaddingTop()); + } else { + return view.getScrollY() > 0; + } + } else { + return ViewCompat.canScrollVertically(view, -1); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickSeekBar.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickSeekBar.java new file mode 100644 index 0000000..02f113e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickSeekBar.java @@ -0,0 +1,283 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import androidx.appcompat.widget.AppCompatSeekBar; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import cn.shangyu.gdxzExpert.polyvplayer.util.PolyvScreenUtils; + + +public class PolyvTickSeekBar extends AppCompatSeekBar { + private int height, width; + //画笔 + private Paint mStockPaint; + private List mTickDataList; + private boolean isMoved; + private int moveCount; + private float fingerRadius;//触摸点的px范围的点视为点中打点 + + public PolyvTickSeekBar(Context context) { + this(context, null); + } + + public PolyvTickSeekBar(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvTickSeekBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initStrokePaint(); + + fingerRadius = PolyvScreenUtils.dip2px(getContext(), 16); + } + + //初始化画笔 + private void initStrokePaint() { + mStockPaint = new Paint(); + mStockPaint.setStyle(Paint.Style.FILL_AND_STROKE); + mStockPaint.setAntiAlias(true); + } + + private void initSeekBarInfo() { + height = getHeight(); + width = getWidth(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + initSeekBarInfo(); + drawTicks(canvas); + } + + private void drawTicks(Canvas canvas) { + if (mTickDataList == null || mTickDataList.size() == 0) { + return; + } + for (int i = 0; i < mTickDataList.size(); i++) { + TickData tickData = mTickDataList.get(i); + if (tickData.progress > getMax() || tickData.progress < 0) + continue; + mStockPaint.setColor(tickData.color); + int thumbHeight = height - getPaddingTop() - getPaddingBottom();//thumb的高度 + float cy = thumbHeight / 2.0f + getPaddingTop() - getPaddingBottom();//打点的圆心y轴位置 + float percent = tickData.progress / (getMax() * 1.0f); + float cx = (width - getPaddingLeft() - getPaddingRight()) * percent;//打点的圆心x轴位置 + cx += getPaddingLeft(); + float radius = thumbHeight / 3.6f;//打点的半径 + //圆心在端点上 +// if (cx < getPaddingLeft()) +// cx = getPaddingLeft(); +// else if (cx > width - getPaddingRight()) +// cx = width - getPaddingRight(); + //圆心在端点内 + if (cx < getPaddingLeft() + radius) + cx = getPaddingLeft() + radius; + else if (cx > width - getPaddingRight() - radius) + cx = width - getPaddingRight() - radius; + //调整两端的位置 + if (cx + getPaddingLeft() < radius) + cx = radius - getPaddingLeft(); + else if (width - cx + getPaddingRight() < radius) + cx = cx - (radius - (width - cx) - getPaddingRight()); + tickData.cx = cx;//设置打点的圆心位置 + canvas.drawCircle(cx, cy, radius, mStockPaint); + } + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + boolean hasTick = mTickDataList != null && mTickDataList.size() > 0; + switch (event.getActionMasked()) { + case MotionEvent.ACTION_DOWN: + isMoved = false; + moveCount = 0; + return hasTick || super.onTouchEvent(event); + case MotionEvent.ACTION_MOVE: + if (++moveCount >= 7) { + isMoved = true; + } else { + return hasTick || super.onTouchEvent(event); + } + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + if (!isMoved) { + float ex = event.getX(); + //查找点击的附近是否有打点 + int fitPosition; + if (hasTick && (fitPosition = halfSearch(mTickDataList, 0, mTickDataList.size() - 1, ex, fingerRadius)) != -1) { + if (onTickClickListener != null) { + onTickClickListener.onTickClick(mTickDataList.get(fitPosition)); + } + } else { + if (onTickClickListener != null) { + boolean result = onTickClickListener.onSeekBarClick(); + return hasTick ? (result ? super.onTouchEvent(event) : !result) : super.onTouchEvent(event); + } + } + return hasTick || super.onTouchEvent(event); + } + break; + } + return super.onTouchEvent(event); + } + + private int findCloserPoint(List tickDataList, int position, float ex, boolean isFirst, float fingerRadius) { + if (position < 0 || position > tickDataList.size() - 1) { + return -1; + } + float cxExDistance = Math.abs(tickDataList.get(position).cx - ex); + if (cxExDistance <= fingerRadius) {//满足条件,继续查找是否有离触摸点更近的打点 + int preMiddle = position - 1; + int sufMiddle = position + 1; + int fitPosition = position; + if (preMiddle >= 0) { + float preCxExDistance = Math.abs(tickDataList.get(preMiddle).cx - ex); + if (preCxExDistance < cxExDistance) { + cxExDistance = preCxExDistance; + fitPosition = preMiddle; + } + } + if (sufMiddle <= tickDataList.size() - 1) { + float sufCxExDistance = Math.abs(tickDataList.get(sufMiddle).cx - ex); + if (sufCxExDistance <= cxExDistance) {//相同位置的两点,取后续的 + fitPosition = sufMiddle; + } + } + if (fitPosition != position) { + return findCloserPoint(tickDataList, fitPosition, ex, false, fingerRadius); + } + } else if (isFirst) {//第一次查找不满足条件时返回-1 + return -1; + } + return position; + } + + private int halfSearch(List tickDataList, int startPosition, int endPosition, float ex, float fingerRadius) { + if (tickDataList == null || tickDataList.size() == 0) { + return -1; + } + int length = tickDataList.size(); + if (length < startPosition || length < endPosition || startPosition > endPosition) + return -1; + while (startPosition <= endPosition) { + int middle = startPosition + ((endPosition - startPosition) >> 1);//偶数middle取前面的 + float cx = tickDataList.get(middle).cx; + int fitPosition; + if ((fitPosition = findCloserPoint(tickDataList, middle, ex, true, fingerRadius)) != -1) { + return fitPosition; + } else if (ex - cx > 0) {//中间点在触摸点的前面 + startPosition = middle + 1; + } else {//中间点在触摸点的后面 + endPosition = middle - 1; + } + } + return -1; + } + + //设置时间点 + public void setTicks(List tickDataList) { + this.mTickDataList = tickDataList; + Collections.sort(this.mTickDataList, new Comparator() { + @Override + public int compare(TickData lhs, TickData rhs) { + return (int) (lhs.progress - rhs.progress);//自然排序 + } + }); + invalidate(); + } + + public interface OnTickClickListener { + void onTickClick(TickData tickData); + + /** + * @return 有打点数据时,点击非打点处抬起(中途没有移动),是否会触发onProgressChanged + */ + boolean onSeekBarClick(); + } + + private OnTickClickListener onTickClickListener; + + public void setOnTickClickListener(OnTickClickListener l) { + this.onTickClickListener = l; + } + + public static class TickData { + private int keyTime; + private float progress; + private int color; + private Object tag; + //位置 + private float cx; + + public TickData(float progress, int color, Object tag) { + this((int) progress, progress, color, tag); + } + + public TickData(int keyTime, float progress, int color, Object tag) { + this.keyTime = keyTime; + this.progress = progress; + this.color = color; + this.tag = tag; + } + + public int getKeyTime() { + return keyTime; + } + + public void setKeyTime(int keyTime) { + this.keyTime = keyTime; + } + + public float getProgress() { + return progress; + } + + public void setProgress(float progress) { + this.progress = progress; + } + + public int getColor() { + return color; + } + + public void setColor(int color) { + this.color = color; + } + + public Object getTag() { + return tag; + } + + public void setTag(Object tag) { + this.tag = tag; + } + + public float getCx() { + return cx; + } + + public void setCx(float cx) { + this.cx = cx; + } + + @Override + public String toString() { + return "TickData{" + + "keyTime=" + keyTime + + ", progress=" + progress + + ", color=" + color + + ", tag=" + tag + + ", cx=" + cx + + '}'; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickTips.java b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickTips.java new file mode 100644 index 0000000..a723ef1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/polyvplayer/view/PolyvTickTips.java @@ -0,0 +1,149 @@ +package cn.shangyu.gdxzExpert.polyvplayer.view; + +import android.content.Context; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import com.easefun.polyvsdk.vo.PolyvVideoVO; + +import cn.shangyu.gdxzExpert.R; + + +public class PolyvTickTips extends FrameLayout { + private View view; + private TextView tv_time, tv_context; + private ImageView iv_seek; + private Runnable runnable; + private PolyvTickSeekBar.TickData tickData; + + public PolyvTickTips(@NonNull Context context) { + this(context, null); + } + + public PolyvTickTips(@NonNull Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public PolyvTickTips(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + view = LayoutInflater.from(context).inflate(R.layout.polyv_tick_tips, this); + initView(); + } + + @Override + protected void onDetachedFromWindow() { + super.onDetachedFromWindow(); + removeCallbacks(runnable); + } + + private void initView() { + tv_time = (TextView) view.findViewById(R.id.tv_time); + tv_context = (TextView) view.findViewById(R.id.tv_context); + iv_seek = (ImageView) view.findViewById(R.id.iv_seek); + iv_seek.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (onSeekClickListener != null) + onSeekClickListener.onSeekClick(tickData); + } + }); + } + + public void setOnSeekClickListener(OnSeekClickListener onSeekClickListener) { + this.onSeekClickListener = onSeekClickListener; + } + + private OnSeekClickListener onSeekClickListener; + + public interface OnSeekClickListener { + void onSeekClick(PolyvTickSeekBar.TickData tickData); + } + + public boolean isShow() { + return getVisibility() == View.VISIBLE; + } + + public void hide() { + removeCallbacks(runnable); + setVisibility(View.INVISIBLE); + } + + private void handleData(final PolyvTickSeekBar.TickData tickData) { + if (tickData == null || !(tickData.getTag() instanceof PolyvVideoVO.Videokeyframe)) + return; + MarginLayoutParams mlp = (MarginLayoutParams) getLayoutParams(); + mlp.leftMargin = 0; + setLayoutParams(mlp);//先把margin调整为0,避免textview的文本由于上次的margin显示不全 + PolyvVideoVO.Videokeyframe videokeyframe = (PolyvVideoVO.Videokeyframe) tickData.getTag(); + StringBuilder stringBuilder = new StringBuilder(); + if (videokeyframe.getHouts() > 9) { + stringBuilder.append(videokeyframe.getHouts()).append(":"); + } else if (videokeyframe.getHouts() > 0) { + stringBuilder.append(0).append(videokeyframe.getHouts()).append(":"); + } + if (videokeyframe.getMinutes() > 9) { + stringBuilder.append(videokeyframe.getMinutes()).append(":"); + } else if (videokeyframe.getMinutes() >= 0) { + stringBuilder.append(0).append(videokeyframe.getMinutes()).append(":"); + } + if (videokeyframe.getSeconds() > 9) { + stringBuilder.append(videokeyframe.getSeconds()); + } else if (videokeyframe.getSeconds() >= 0) { + stringBuilder.append(0).append(videokeyframe.getSeconds()); + } + tv_time.setText(stringBuilder.toString()); + tv_context.setMaxWidth(((ViewGroup) getParent()).getWidth() * 3 / 4);//调整最大的宽度,不然iv_seek可能会显示不了 + tv_context.setText(videokeyframe.getKeycontext()); + tv_context.post(runnable = new Runnable() { + @Override + public void run() { + //调整位置 + int parentWidth = ((ViewGroup) getParent()).getWidth(); + int width = getWidth(); + float cx = tickData.getCx(); + MarginLayoutParams mlp = (MarginLayoutParams) getLayoutParams(); + int halfWidth = width / 2; + if (cx > halfWidth) { + int leftMargin = (int) (cx - halfWidth); + if (leftMargin + width > parentWidth) { + if (cx > parentWidth / 2) { + leftMargin = parentWidth - width; + } else { + leftMargin = 0;//中间及左边都为0 + } + } + mlp.leftMargin = leftMargin; + } else { + mlp.leftMargin = 0; + } + setLayoutParams(mlp); + setVisibility(View.VISIBLE); + } + }); + } + + public void show(final PolyvTickSeekBar.TickData tickData) { + if (this.tickData != tickData || !isShow()) { + this.tickData = tickData; + removeCallbacks(runnable); + if (isShow()) { + hide(); + postDelayed(runnable = new Runnable() { + @Override + public void run() { + handleData(tickData); + } + }, 200); + } else { + handleData(tickData); + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/protocol/BaseProtocol.java b/app/src/main/java/cn/shangyu/gdxzExpert/protocol/BaseProtocol.java new file mode 100644 index 0000000..e8447be --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/protocol/BaseProtocol.java @@ -0,0 +1,151 @@ +package cn.shangyu.gdxzExpert.protocol; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.util.List; + +import org.apache.http.message.BasicNameValuePair; + +import android.text.TextUtils; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.IoUtils; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.MD5Utils; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +/** + * + * BaseProtocol.java + * @author gaofei + * @date 2015-8-31 下午3:51:47 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:解析网络数据的父类 + */ +public abstract class BaseProtocol { + + protected List params; + + // 请求网络对应方法 + public T getData(int mimuit) { + // 1,缓存中去取(已经满足不超过缓存时长操作) + String data = getDataFromLocal(); + LogUtil.i("data---------------" + data); + String result = null; + if (!TextUtils.isEmpty(data)) { + LogUtil.i("缓存中去取'''''''''''"); + result = data; + } else { + // 2,网络中去取 + LogUtil.i("网络中去取'''''''''''"); + //检查是否有网络 + if (CommonUtil.isNetworkAvailable(UIUtils.getContext()) == 0) { + ToastUtil.showMessage("网络不可用,请检查网络"); + } + result = getDataFromNet(mimuit); + } + // 解析操作 + return parseJson(result); + } + + public abstract T parseJson(String result); + + /** + * HttpHelper.URL 为主地址 + * + * @return 请求的网络地址 + */ + public abstract String getKey(); + + /** + * + * @return 请求的参数 + */ + public abstract List getParams(); + + public String getDataFromNet(int mimuit) { + + //发送请求 + LogUtil.i("请求地址getKey======="+getKey()); + HttpResult httpResult = HttpHelper.post(getKey(),getParams()); + //获取返回的json串 + LogUtil.i("httpResult======="+httpResult); + String string = httpResult.getString(); + LogUtil.i("返回的JSON======"+string); + //存储的文件可以获取出去,getKey()+getParams(),由当前字符串去判断,数据是那个请求中那页的数据 + if(!TextUtils.isEmpty(string) && mimuit!=0){ + writeToLocal(mimuit,string);//mimuit为分钟 + } + return string; + + } + + // 将json写入文件的操作,并且维护期有效时长,并且将文件名字进行md5转换 + private void writeToLocal(int mimuit ,String json) { + BufferedWriter bufferedWriter = null; + try { + // 写入到文件的 + File cacheDir = UIUtils.getContext().getCacheDir(); + /** + * MD5转换后的文件名 + */ + File file = new File(cacheDir, MD5Utils.md5Encrypt(getKey() + getParams())); + LogUtil.i("getCacheDir()写入库了" + file.getAbsolutePath()); + bufferedWriter = new BufferedWriter(new FileWriter(file.getAbsolutePath())); + // 告知当前文件的有效存储时长,第一行就去写入对应缓存的 有效时间(时间戳)>读取这个文件数据时间(过期) + long time = System.currentTimeMillis() + mimuit * 60 * 1000;//分钟 + // 写入时间到第一行 + bufferedWriter.write(time + "\r\n"); + // json串的写入过程 + bufferedWriter.write(json.toCharArray()); + bufferedWriter.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + IoUtils.close(bufferedWriter); + } + } + + private String getDataFromLocal() { + BufferedReader bufferedReader = null; + try { + // 怎么存储的就怎么读取 + File cacheDir = UIUtils.getContext().getCacheDir(); + /** + * MD5转换后的文件名 + */ + File file = new File(cacheDir, MD5Utils.md5Encrypt(getKey() + getParams())); + LogUtil.i("是否有缓存文件"+file.exists()); + if (!file.exists()) { + return null; + }; + bufferedReader = new BufferedReader(new FileReader(file.getAbsolutePath())); + String lineOne = bufferedReader.readLine(); + long time = Long.valueOf(lineOne); + if (System.currentTimeMillis() < time) { + // 有效 + StringBuffer buffer = new StringBuffer(); + String temp; + while ((temp = bufferedReader.readLine()) != null) { + buffer.append(temp); + } + return buffer.toString(); + }else{ + LogUtil.i("getCacheDir()删除啦" + file.getAbsolutePath()); + file.delete(); + } + } catch (Exception e) { + e.printStackTrace(); + return null; + } finally { + IoUtils.close(bufferedReader); + } + return null; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/protocol/PatientListProtocol.java b/app/src/main/java/cn/shangyu/gdxzExpert/protocol/PatientListProtocol.java new file mode 100644 index 0000000..b7ff7cf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/protocol/PatientListProtocol.java @@ -0,0 +1,48 @@ +package cn.shangyu.gdxzExpert.protocol; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.http.message.BasicNameValuePair; + +import android.text.TextUtils; +import cn.shangyu.gdxzExpert.bean.PatientListBean; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +import com.google.gson.Gson; + + + +public class PatientListProtocol extends BaseProtocol { + + @Override + public PatientListBean parseJson(String result) { + //手动解析 + PatientListBean bean = null; + if(!TextUtils.isEmpty(result)){ + bean = new Gson().fromJson(result, PatientListBean.class); + } + return bean; + } + + @Override + public String getKey() { + // TODO Auto-generated method stub + return Url.getpatientList; + } + + @Override + public List getParams() { + // TODO Auto-generated method stub + String uuid = SharePrefUtil.getString(UIUtils.getContext(), "uuid", ""); + LogUtil.i("uuid:"+uuid); + List parameters = new ArrayList(); + BasicNameValuePair value01 = new BasicNameValuePair("expertUuid", uuid); + parameters.add(value01); + return parameters; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/ILoadingLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/ILoadingLayout.java new file mode 100644 index 0000000..1adb080 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/ILoadingLayout.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; + +public interface ILoadingLayout { + + /** + * Set the Last Updated Text. This displayed under the main label when + * Pulling + * + * @param label - Label to set + */ + public void setLastUpdatedLabel(CharSequence label); + + /** + * Set the drawable used in the loading layout. This is the same as calling + * setLoadingDrawable(drawable, Mode.BOTH) + * + * @param drawable - Drawable to display + */ + public void setLoadingDrawable(Drawable drawable); + + /** + * Set Text to show when the Widget is being Pulled + * setPullLabel(releaseLabel, Mode.BOTH) + * + * @param pullLabel - CharSequence to display + */ + public void setPullLabel(CharSequence pullLabel); + + /** + * Set Text to show when the Widget is refreshing + * setRefreshingLabel(releaseLabel, Mode.BOTH) + * + * @param refreshingLabel - CharSequence to display + */ + public void setRefreshingLabel(CharSequence refreshingLabel); + + /** + * Set Text to show when the Widget is being pulled, and will refresh when + * released. This is the same as calling + * setReleaseLabel(releaseLabel, Mode.BOTH) + * + * @param releaseLabel - CharSequence to display + */ + public void setReleaseLabel(CharSequence releaseLabel); + + /** + * Set's the Sets the typeface and style in which the text should be + * displayed. Please see + * {@link android.widget.TextView#setTypeface(Typeface) + * TextView#setTypeface(Typeface)}. + */ + public void setTextTypeface(Typeface tf); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/IPullToRefresh.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/IPullToRefresh.java new file mode 100644 index 0000000..0dae923 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/IPullToRefresh.java @@ -0,0 +1,245 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.view.View; +import android.view.animation.Interpolator; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnPullEventListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.State; + +public interface IPullToRefresh { + + /** + * Demos the Pull-to-Refresh functionality to the user so that they are + * aware it is there. This could be useful when the user first opens your + * app, etc. The animation will only happen if the Refresh View (ListView, + * ScrollView, etc) is in a state where a Pull-to-Refresh could occur by a + * user's touch gesture (i.e. scrolled to the top/bottom). + * + * @return true - if the Demo has been started, false if not. + */ + public boolean demo(); + + /** + * Get the mode that this view is currently in. This is only really useful + * when using Mode.BOTH. + * + * @return Mode that the view is currently in + */ + public Mode getCurrentMode(); + + /** + * Returns whether the Touch Events are filtered or not. If true is + * returned, then the View will only use touch events where the difference + * in the Y-axis is greater than the difference in the X-axis. This means + * that the View will not interfere when it is used in a horizontal + * scrolling View (such as a ViewPager). + * + * @return boolean - true if the View is filtering Touch Events + */ + public boolean getFilterTouchEvents(); + + /** + * Returns a proxy object which allows you to call methods on all of the + * LoadingLayouts (the Views which show when Pulling/Refreshing). + *

+ * You should not keep the result of this method any longer than you need + * it. + * + * @return Object which will proxy any calls you make on it, to all of the + * LoadingLayouts. + */ + public ILoadingLayout getLoadingLayoutProxy(); + + /** + * Returns a proxy object which allows you to call methods on the + * LoadingLayouts (the Views which show when Pulling/Refreshing). The actual + * LoadingLayout(s) which will be affected, are chosen by the parameters you + * give. + *

+ * You should not keep the result of this method any longer than you need + * it. + * + * @param includeStart - Whether to include the Start/Header Views + * @param includeEnd - Whether to include the End/Footer Views + * @return Object which will proxy any calls you make on it, to the + * LoadingLayouts included. + */ + public ILoadingLayout getLoadingLayoutProxy(boolean includeStart, boolean includeEnd); + + /** + * Get the mode that this view has been set to. If this returns + * Mode.BOTH, you can use getCurrentMode() to + * check which mode the view is currently in + * + * @return Mode that the view has been set to + */ + public Mode getMode(); + + /** + * Get the Wrapped Refreshable View. Anything returned here has already been + * added to the content view. + * + * @return The View which is currently wrapped + */ + public T getRefreshableView(); + + /** + * Get whether the 'Refreshing' View should be automatically shown when + * refreshing. Returns true by default. + * + * @return - true if the Refreshing View will be show + */ + public boolean getShowViewWhileRefreshing(); + + /** + * @return - The state that the View is currently in. + */ + public State getState(); + + /** + * Whether Pull-to-Refresh is enabled + * + * @return enabled + */ + public boolean isPullToRefreshEnabled(); + + /** + * Gets whether Overscroll support is enabled. This is different to + * Android's standard Overscroll support (the edge-glow) which is available + * from GINGERBREAD onwards + * + * @return true - if both PullToRefresh-OverScroll and Android's inbuilt + * OverScroll are enabled + */ + public boolean isPullToRefreshOverScrollEnabled(); + + /** + * Returns whether the Widget is currently in the Refreshing mState + * + * @return true if the Widget is currently refreshing + */ + public boolean isRefreshing(); + + /** + * Returns whether the widget has enabled scrolling on the Refreshable View + * while refreshing. + * + * @return true if the widget has enabled scrolling while refreshing + */ + public boolean isScrollingWhileRefreshingEnabled(); + + /** + * Mark the current Refresh as complete. Will Reset the UI and hide the + * Refreshing View + */ + public void onRefreshComplete(); + + /** + * Set the Touch Events to be filtered or not. If set to true, then the View + * will only use touch events where the difference in the Y-axis is greater + * than the difference in the X-axis. This means that the View will not + * interfere when it is used in a horizontal scrolling View (such as a + * ViewPager), but will restrict which types of finger scrolls will trigger + * the View. + * + * @param filterEvents - true if you want to filter Touch Events. Default is + * true. + */ + public void setFilterTouchEvents(boolean filterEvents); + + /** + * Set the mode of Pull-to-Refresh that this view will use. + * + * @param mode - Mode to set the View to + */ + public void setMode(Mode mode); + + /** + * Set OnPullEventListener for the Widget + * + * @param listener - Listener to be used when the Widget has a pull event to + * propogate. + */ + public void setOnPullEventListener(OnPullEventListener listener); + + /** + * Set OnRefreshListener for the Widget + * + * @param listener - Listener to be used when the Widget is set to Refresh + */ + public void setOnRefreshListener(OnRefreshListener listener); + + /** + * Set OnRefreshListener for the Widget + * + * @param listener - Listener to be used when the Widget is set to Refresh + */ + public void setOnRefreshListener(OnRefreshListener2 listener); + + /** + * Sets whether Overscroll support is enabled. This is different to + * Android's standard Overscroll support (the edge-glow). This setting only + * takes effect when running on device with Android v2.3 or greater. + * + * @param enabled - true if you want Overscroll enabled + */ + public void setPullToRefreshOverScrollEnabled(boolean enabled); + + /** + * Sets the Widget to be in the refresh state. The UI will be updated to + * show the 'Refreshing' view, and be scrolled to show such. + */ + public void setRefreshing(); + + /** + * Sets the Widget to be in the refresh state. The UI will be updated to + * show the 'Refreshing' view. + * + * @param doScroll - true if you want to force a scroll to the Refreshing + * view. + */ + public void setRefreshing(boolean doScroll); + + /** + * Sets the Animation Interpolator that is used for animated scrolling. + * Defaults to a DecelerateInterpolator + * + * @param interpolator - Interpolator to use + */ + public void setScrollAnimationInterpolator(Interpolator interpolator); + + /** + * By default the Widget disables scrolling on the Refreshable View while + * refreshing. This method can change this behaviour. + * + * @param scrollingWhileRefreshingEnabled - true if you want to enable + * scrolling while refreshing + */ + public void setScrollingWhileRefreshingEnabled(boolean scrollingWhileRefreshingEnabled); + + /** + * A mutator to enable/disable whether the 'Refreshing' View should be + * automatically shown when refreshing. + * + * @param showView + */ + public void setShowViewWhileRefreshing(boolean showView); + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/LoadingLayoutProxy.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/LoadingLayoutProxy.java new file mode 100644 index 0000000..7c5f0e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/LoadingLayoutProxy.java @@ -0,0 +1,72 @@ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import java.util.HashSet; + +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.LoadingLayout; + +public class LoadingLayoutProxy implements ILoadingLayout { + + private final HashSet mLoadingLayouts; + + LoadingLayoutProxy() { + mLoadingLayouts = new HashSet(); + } + + /** + * This allows you to add extra LoadingLayout instances to this proxy. This + * is only necessary if you keep your own instances, and want to have them + * included in any + * {@link PullToRefreshBase#createLoadingLayoutProxy(boolean, boolean) + * createLoadingLayoutProxy(...)} calls. + * + * @param layout - LoadingLayout to have included. + */ + public void addLayout(LoadingLayout layout) { + if (null != layout) { + mLoadingLayouts.add(layout); + } + } + + @Override + public void setLastUpdatedLabel(CharSequence label) { + for (LoadingLayout layout : mLoadingLayouts) { + layout.setLastUpdatedLabel(label); + } + } + + @Override + public void setLoadingDrawable(Drawable drawable) { + for (LoadingLayout layout : mLoadingLayouts) { + layout.setLoadingDrawable(drawable); + } + } + + @Override + public void setRefreshingLabel(CharSequence refreshingLabel) { + for (LoadingLayout layout : mLoadingLayouts) { + layout.setRefreshingLabel(refreshingLabel); + } + } + + @Override + public void setPullLabel(CharSequence label) { + for (LoadingLayout layout : mLoadingLayouts) { + layout.setPullLabel(label); + } + } + + @Override + public void setReleaseLabel(CharSequence label) { + for (LoadingLayout layout : mLoadingLayouts) { + layout.setReleaseLabel(label); + } + } + + public void setTextTypeface(Typeface tf) { + for (LoadingLayout layout : mLoadingLayouts) { + layout.setTextTypeface(tf); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/OverscrollHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/OverscrollHelper.java new file mode 100644 index 0000000..3a064aa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/OverscrollHelper.java @@ -0,0 +1,177 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.util.Log; +import android.view.View; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.State; + +@TargetApi(9) +public final class OverscrollHelper { + + static final String LOG_TAG = "OverscrollHelper"; + static final float DEFAULT_OVERSCROLL_SCALE = 1f; + + /** + * Helper method for Overscrolling that encapsulates all of the necessary + * function. + *

+ * This should only be used on AdapterView's such as ListView as it just + * calls through to overScrollBy() with the scrollRange = 0. AdapterView's + * do not have a scroll range (i.e. getScrollY() doesn't work). + * + * @param view - PullToRefreshView that is calling this. + * @param deltaX - Change in X in pixels, passed through from from + * overScrollBy call + * @param scrollX - Current X scroll value in pixels before applying deltaY, + * passed through from from overScrollBy call + * @param deltaY - Change in Y in pixels, passed through from from + * overScrollBy call + * @param scrollY - Current Y scroll value in pixels before applying deltaY, + * passed through from from overScrollBy call + * @param isTouchEvent - true if this scroll operation is the result of a + * touch event, passed through from from overScrollBy call + */ + public static void overScrollBy(final PullToRefreshBase view, final int deltaX, final int scrollX, + final int deltaY, final int scrollY, final boolean isTouchEvent) { + overScrollBy(view, deltaX, scrollX, deltaY, scrollY, 0, isTouchEvent); + } + + /** + * Helper method for Overscrolling that encapsulates all of the necessary + * function. This version of the call is used for Views that need to specify + * a Scroll Range but scroll back to it's edge correctly. + * + * @param view - PullToRefreshView that is calling this. + * @param deltaX - Change in X in pixels, passed through from from + * overScrollBy call + * @param scrollX - Current X scroll value in pixels before applying deltaY, + * passed through from from overScrollBy call + * @param deltaY - Change in Y in pixels, passed through from from + * overScrollBy call + * @param scrollY - Current Y scroll value in pixels before applying deltaY, + * passed through from from overScrollBy call + * @param scrollRange - Scroll Range of the View, specifically needed for + * ScrollView + * @param isTouchEvent - true if this scroll operation is the result of a + * touch event, passed through from from overScrollBy call + */ + public static void overScrollBy(final PullToRefreshBase view, final int deltaX, final int scrollX, + final int deltaY, final int scrollY, final int scrollRange, final boolean isTouchEvent) { + overScrollBy(view, deltaX, scrollX, deltaY, scrollY, scrollRange, 0, DEFAULT_OVERSCROLL_SCALE, isTouchEvent); + } + + /** + * Helper method for Overscrolling that encapsulates all of the necessary + * function. This is the advanced version of the call. + * + * @param view - PullToRefreshView that is calling this. + * @param deltaX - Change in X in pixels, passed through from from + * overScrollBy call + * @param scrollX - Current X scroll value in pixels before applying deltaY, + * passed through from from overScrollBy call + * @param deltaY - Change in Y in pixels, passed through from from + * overScrollBy call + * @param scrollY - Current Y scroll value in pixels before applying deltaY, + * passed through from from overScrollBy call + * @param scrollRange - Scroll Range of the View, specifically needed for + * ScrollView + * @param fuzzyThreshold - Threshold for which the values how fuzzy we + * should treat the other values. Needed for WebView as it + * doesn't always scroll back to it's edge. 0 = no fuzziness. + * @param scaleFactor - Scale Factor for overscroll amount + * @param isTouchEvent - true if this scroll operation is the result of a + * touch event, passed through from from overScrollBy call + */ + public static void overScrollBy(final PullToRefreshBase view, final int deltaX, final int scrollX, + final int deltaY, final int scrollY, final int scrollRange, final int fuzzyThreshold, + final float scaleFactor, final boolean isTouchEvent) { + + final int deltaValue, currentScrollValue, scrollValue; + switch (view.getPullToRefreshScrollDirection()) { + case HORIZONTAL: + deltaValue = deltaX; + scrollValue = scrollX; + currentScrollValue = view.getScrollX(); + break; + case VERTICAL: + default: + deltaValue = deltaY; + scrollValue = scrollY; + currentScrollValue = view.getScrollY(); + break; + } + + // Check that OverScroll is enabled and that we're not currently + // refreshing. + if (view.isPullToRefreshOverScrollEnabled() && !view.isRefreshing()) { + final Mode mode = view.getMode(); + + // Check that Pull-to-Refresh is enabled, and the event isn't from + // touch + if (mode.permitsPullToRefresh() && !isTouchEvent && deltaValue != 0) { + final int newScrollValue = (deltaValue + scrollValue); + + if (PullToRefreshBase.DEBUG) { + Log.d(LOG_TAG, "OverScroll. DeltaX: " + deltaX + ", ScrollX: " + scrollX + ", DeltaY: " + deltaY + + ", ScrollY: " + scrollY + ", NewY: " + newScrollValue + ", ScrollRange: " + scrollRange + + ", CurrentScroll: " + currentScrollValue); + } + + if (newScrollValue < (0 - fuzzyThreshold)) { + // Check the mode supports the overscroll direction, and + // then move scroll + if (mode.showHeaderLoadingLayout()) { + // If we're currently at zero, we're about to start + // overscrolling, so change the state + if (currentScrollValue == 0) { + view.setState(State.OVERSCROLLING); + } + + view.setHeaderScroll((int) (scaleFactor * (currentScrollValue + newScrollValue))); + } + } else if (newScrollValue > (scrollRange + fuzzyThreshold)) { + // Check the mode supports the overscroll direction, and + // then move scroll + if (mode.showFooterLoadingLayout()) { + // If we're currently at zero, we're about to start + // overscrolling, so change the state + if (currentScrollValue == 0) { + view.setState(State.OVERSCROLLING); + } + + view.setHeaderScroll((int) (scaleFactor * (currentScrollValue + newScrollValue - scrollRange))); + } + } else if (Math.abs(newScrollValue) <= fuzzyThreshold + || Math.abs(newScrollValue - scrollRange) <= fuzzyThreshold) { + // Means we've stopped overscrolling, so scroll back to 0 + view.setState(State.RESET); + } + } else if (isTouchEvent && State.OVERSCROLLING == view.getState()) { + // This condition means that we were overscrolling from a fling, + // but the user has touched the View and is now overscrolling + // from touch instead. We need to just reset. + view.setState(State.RESET); + } + } + } + + static boolean isAndroidOverScrollEnabled(View view) { + return view.getOverScrollMode() != View.OVER_SCROLL_NEVER; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshAdapterViewBase.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshAdapterViewBase.java new file mode 100644 index 0000000..625ba2a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshAdapterViewBase.java @@ -0,0 +1,475 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.widget.AbsListView; +import android.widget.AbsListView.OnScrollListener; +import android.widget.Adapter; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.ListAdapter; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.EmptyViewMethodAccessor; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.IndicatorLayout; + +public abstract class PullToRefreshAdapterViewBase extends PullToRefreshBase implements + OnScrollListener { + + private static FrameLayout.LayoutParams convertEmptyViewLayoutParams(ViewGroup.LayoutParams lp) { + FrameLayout.LayoutParams newLp = null; + + if (null != lp) { + newLp = new FrameLayout.LayoutParams(lp); + + if (lp instanceof LayoutParams) { + newLp.gravity = ((LayoutParams) lp).gravity; + } else { + newLp.gravity = Gravity.CENTER; + } + } + + return newLp; + } + + private boolean mLastItemVisible; + private OnScrollListener mOnScrollListener; + private OnLastItemVisibleListener mOnLastItemVisibleListener; + private View mEmptyView; + + private IndicatorLayout mIndicatorIvTop; + private IndicatorLayout mIndicatorIvBottom; + + private boolean mShowIndicator; + private boolean mScrollEmptyView = true; + + public PullToRefreshAdapterViewBase(Context context) { + super(context); + mRefreshableView.setOnScrollListener(this); + } + + public PullToRefreshAdapterViewBase(Context context, AttributeSet attrs) { + super(context, attrs); + mRefreshableView.setOnScrollListener(this); + } + + public PullToRefreshAdapterViewBase(Context context, Mode mode) { + super(context, mode); + mRefreshableView.setOnScrollListener(this); + } + + public PullToRefreshAdapterViewBase(Context context, Mode mode, AnimationStyle animStyle) { + super(context, mode, animStyle); + mRefreshableView.setOnScrollListener(this); + } + + /** + * Gets whether an indicator graphic should be displayed when the View is in + * a state where a Pull-to-Refresh can happen. An example of this state is + * when the Adapter View is scrolled to the top and the mode is set to + * {@link Mode#PULL_FROM_START}. The default value is true if + * {@link PullToRefreshBase#isPullToRefreshOverScrollEnabled() + * isPullToRefreshOverScrollEnabled()} returns false. + * + * @return true if the indicators will be shown + */ + public boolean getShowIndicator() { + return mShowIndicator; + } + + public final void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, + final int totalItemCount) { + + if (DEBUG) { + Log.d(LOG_TAG, "First Visible: " + firstVisibleItem + ". Visible Count: " + visibleItemCount + + ". Total Items:" + totalItemCount); + } + + /** + * Set whether the Last Item is Visible. lastVisibleItemIndex is a + * zero-based index, so we minus one totalItemCount to check + */ + if (null != mOnLastItemVisibleListener) { + mLastItemVisible = (totalItemCount > 0) && (firstVisibleItem + visibleItemCount >= totalItemCount - 1); + } + + // If we're showing the indicator, check positions... + if (getShowIndicatorInternal()) { + updateIndicatorViewsVisibility(); + } + + // Finally call OnScrollListener if we have one + if (null != mOnScrollListener) { + mOnScrollListener.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); + } + } + + public final void onScrollStateChanged(final AbsListView view, final int state) { + /** + * Check that the scrolling has stopped, and that the last item is + * visible. + */ + if (state == OnScrollListener.SCROLL_STATE_IDLE && null != mOnLastItemVisibleListener && mLastItemVisible) { + mOnLastItemVisibleListener.onLastItemVisible(); + } + + if (null != mOnScrollListener) { + mOnScrollListener.onScrollStateChanged(view, state); + } + } + + /** + * Pass-through method for {@link PullToRefreshBase#getRefreshableView() + * getRefreshableView()}. + * {@link AdapterView#setAdapter(Adapter)} + * setAdapter(adapter)}. This is just for convenience! + * + * @param adapter - Adapter to set + */ + public void setAdapter(ListAdapter adapter) { + ((AdapterView) mRefreshableView).setAdapter(adapter); + } + + /** + * Sets the Empty View to be used by the Adapter View. + *

+ * We need it handle it ourselves so that we can Pull-to-Refresh when the + * Empty View is shown. + *

+ * Please note, you do not usually need to call this method + * yourself. Calling setEmptyView on the AdapterView will automatically call + * this method and set everything up. This includes when the Android + * Framework automatically sets the Empty View based on it's ID. + * + * @param newEmptyView - Empty View to be used + */ + public final void setEmptyView(View newEmptyView) { + FrameLayout refreshableViewWrapper = getRefreshableViewWrapper(); + + if (null != newEmptyView) { + // New view needs to be clickable so that Android recognizes it as a + // target for Touch Events + newEmptyView.setClickable(true); + + ViewParent newEmptyViewParent = newEmptyView.getParent(); + if (null != newEmptyViewParent && newEmptyViewParent instanceof ViewGroup) { + ((ViewGroup) newEmptyViewParent).removeView(newEmptyView); + } + + // We need to convert any LayoutParams so that it works in our + // FrameLayout + FrameLayout.LayoutParams lp = convertEmptyViewLayoutParams(newEmptyView.getLayoutParams()); + if (null != lp) { + refreshableViewWrapper.addView(newEmptyView, lp); + } else { + refreshableViewWrapper.addView(newEmptyView); + } + } + + if (mRefreshableView instanceof EmptyViewMethodAccessor) { + ((EmptyViewMethodAccessor) mRefreshableView).setEmptyViewInternal(newEmptyView); + } else { + mRefreshableView.setEmptyView(newEmptyView); + } + mEmptyView = newEmptyView; + } + + /** + * Pass-through method for {@link PullToRefreshBase#getRefreshableView() + * getRefreshableView()}. + * {@link AdapterView#setOnItemClickListener(OnItemClickListener) + * setOnItemClickListener(listener)}. This is just for convenience! + * + * @param listener - OnItemClickListener to use + */ + public void setOnItemClickListener(OnItemClickListener listener) { + mRefreshableView.setOnItemClickListener(listener); + } + + public final void setOnLastItemVisibleListener(OnLastItemVisibleListener listener) { + mOnLastItemVisibleListener = listener; + } + + public final void setOnScrollListener(OnScrollListener listener) { + mOnScrollListener = listener; + } + + public final void setScrollEmptyView(boolean doScroll) { + mScrollEmptyView = doScroll; + } + + /** + * Sets whether an indicator graphic should be displayed when the View is in + * a state where a Pull-to-Refresh can happen. An example of this state is + * when the Adapter View is scrolled to the top and the mode is set to + * {@link Mode#PULL_FROM_START} + * + * @param showIndicator - true if the indicators should be shown. + */ + public void setShowIndicator(boolean showIndicator) { + mShowIndicator = showIndicator; + + if (getShowIndicatorInternal()) { + // If we're set to Show Indicator, add/update them + addIndicatorViews(); + } else { + // If not, then remove then + removeIndicatorViews(); + } + } + + ; + + @Override + protected void onPullToRefresh() { + super.onPullToRefresh(); + + if (getShowIndicatorInternal()) { + switch (getCurrentMode()) { + case PULL_FROM_END: + mIndicatorIvBottom.pullToRefresh(); + break; + case PULL_FROM_START: + mIndicatorIvTop.pullToRefresh(); + break; + default: + // NO-OP + break; + } + } + } + + protected void onRefreshing(boolean doScroll) { + super.onRefreshing(doScroll); + + if (getShowIndicatorInternal()) { + updateIndicatorViewsVisibility(); + } + } + + @Override + protected void onReleaseToRefresh() { + super.onReleaseToRefresh(); + + if (getShowIndicatorInternal()) { + switch (getCurrentMode()) { + case PULL_FROM_END: + mIndicatorIvBottom.releaseToRefresh(); + break; + case PULL_FROM_START: + mIndicatorIvTop.releaseToRefresh(); + break; + default: + // NO-OP + break; + } + } + } + + @Override + protected void onReset() { + super.onReset(); + + if (getShowIndicatorInternal()) { + updateIndicatorViewsVisibility(); + } + } + + @Override + protected void handleStyledAttributes(TypedArray a) { + // Set Show Indicator to the XML value, or default value + mShowIndicator = a.getBoolean(R.styleable.PullToRefresh_ptrShowIndicator, !isPullToRefreshOverScrollEnabled()); + } + + protected boolean isReadyForPullStart() { + return isFirstItemVisible(); + } + + protected boolean isReadyForPullEnd() { + return isLastItemVisible(); + } + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + super.onScrollChanged(l, t, oldl, oldt); + if (null != mEmptyView && !mScrollEmptyView) { + mEmptyView.scrollTo(-l, -t); + } + } + + @Override + protected void updateUIForMode() { + super.updateUIForMode(); + + // Check Indicator Views consistent with new Mode + if (getShowIndicatorInternal()) { + addIndicatorViews(); + } else { + removeIndicatorViews(); + } + } + + private void addIndicatorViews() { + Mode mode = getMode(); + FrameLayout refreshableViewWrapper = getRefreshableViewWrapper(); + + if (mode.showHeaderLoadingLayout() && null == mIndicatorIvTop) { + // If the mode can pull down, and we don't have one set already + mIndicatorIvTop = new IndicatorLayout(getContext(), Mode.PULL_FROM_START); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + params.rightMargin = getResources().getDimensionPixelSize(R.dimen.indicator_right_padding); + params.gravity = Gravity.TOP | Gravity.RIGHT; + refreshableViewWrapper.addView(mIndicatorIvTop, params); + + } else if (!mode.showHeaderLoadingLayout() && null != mIndicatorIvTop) { + // If we can't pull down, but have a View then remove it + refreshableViewWrapper.removeView(mIndicatorIvTop); + mIndicatorIvTop = null; + } + + if (mode.showFooterLoadingLayout() && null == mIndicatorIvBottom) { + // If the mode can pull down, and we don't have one set already + mIndicatorIvBottom = new IndicatorLayout(getContext(), Mode.PULL_FROM_END); + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + params.rightMargin = getResources().getDimensionPixelSize(R.dimen.indicator_right_padding); + params.gravity = Gravity.BOTTOM | Gravity.RIGHT; + refreshableViewWrapper.addView(mIndicatorIvBottom, params); + + } else if (!mode.showFooterLoadingLayout() && null != mIndicatorIvBottom) { + // If we can't pull down, but have a View then remove it + refreshableViewWrapper.removeView(mIndicatorIvBottom); + mIndicatorIvBottom = null; + } + } + + private boolean getShowIndicatorInternal() { + return mShowIndicator && isPullToRefreshEnabled(); + } + + private boolean isFirstItemVisible() { + final Adapter adapter = mRefreshableView.getAdapter(); + + if (null == adapter || adapter.isEmpty()) { + if (DEBUG) { + Log.d(LOG_TAG, "isFirstItemVisible. Empty View."); + } + return true; + + } else { + + /** + * This check should really just be: + * mRefreshableView.getFirstVisiblePosition() == 0, but PtRListView + * internally use a HeaderView which messes the positions up. For + * now we'll just add one to account for it and rely on the inner + * condition which checks getTop(). + */ + if (mRefreshableView.getFirstVisiblePosition() <= 1) { + final View firstVisibleChild = mRefreshableView.getChildAt(0); + if (firstVisibleChild != null) { + return firstVisibleChild.getTop() >= mRefreshableView.getTop(); + } + } + } + + return false; + } + + private boolean isLastItemVisible() { + final Adapter adapter = mRefreshableView.getAdapter(); + + if (null == adapter || adapter.isEmpty()) { + if (DEBUG) { + Log.d(LOG_TAG, "isLastItemVisible. Empty View."); + } + return true; + } else { + final int lastItemPosition = mRefreshableView.getCount() - 1; + final int lastVisiblePosition = mRefreshableView.getLastVisiblePosition(); + + if (DEBUG) { + Log.d(LOG_TAG, "isLastItemVisible. Last Item Position: " + lastItemPosition + " Last Visible Pos: " + + lastVisiblePosition); + } + + /** + * This check should really just be: lastVisiblePosition == + * lastItemPosition, but PtRListView internally uses a FooterView + * which messes the positions up. For me we'll just subtract one to + * account for it and rely on the inner condition which checks + * getBottom(). + */ + if (lastVisiblePosition >= lastItemPosition - 1) { + final int childIndex = lastVisiblePosition - mRefreshableView.getFirstVisiblePosition(); + final View lastVisibleChild = mRefreshableView.getChildAt(childIndex); + if (lastVisibleChild != null) { + return lastVisibleChild.getBottom() <= mRefreshableView.getBottom(); + } + } + } + + return false; + } + + private void removeIndicatorViews() { + if (null != mIndicatorIvTop) { + getRefreshableViewWrapper().removeView(mIndicatorIvTop); + mIndicatorIvTop = null; + } + + if (null != mIndicatorIvBottom) { + getRefreshableViewWrapper().removeView(mIndicatorIvBottom); + mIndicatorIvBottom = null; + } + } + + private void updateIndicatorViewsVisibility() { + if (null != mIndicatorIvTop) { + if (!isRefreshing() && isReadyForPullStart()) { + if (!mIndicatorIvTop.isVisible()) { + mIndicatorIvTop.show(); + } + } else { + if (mIndicatorIvTop.isVisible()) { + mIndicatorIvTop.hide(); + } + } + } + + if (null != mIndicatorIvBottom) { + if (!isRefreshing() && isReadyForPullEnd()) { + if (!mIndicatorIvBottom.isVisible()) { + mIndicatorIvBottom.show(); + } + } else { + if (mIndicatorIvBottom.isVisible()) { + mIndicatorIvBottom.hide(); + } + } + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshBase.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshBase.java new file mode 100644 index 0000000..7844062 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshBase.java @@ -0,0 +1,1668 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.widget.FrameLayout; +import android.widget.LinearLayout; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.LoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.TweenAnimLoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.Utils; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.ViewCompat; + +public abstract class PullToRefreshBase extends LinearLayout implements IPullToRefresh { + + // =========================================================== + // Constants + // =========================================================== + + static final boolean DEBUG = false; + + static final boolean USE_HW_LAYERS = false; + + static final String LOG_TAG = "PullToRefresh"; + + static final float FRICTION = 2.0f; + + public static final int SMOOTH_SCROLL_DURATION_MS = 200; + public static final int SMOOTH_SCROLL_LONG_DURATION_MS = 325; + static final int DEMO_SCROLL_INTERVAL = 225; + + static final String STATE_STATE = "ptr_state"; + static final String STATE_MODE = "ptr_mode"; + static final String STATE_CURRENT_MODE = "ptr_current_mode"; + static final String STATE_SCROLLING_REFRESHING_ENABLED = "ptr_disable_scrolling"; + static final String STATE_SHOW_REFRESHING_VIEW = "ptr_show_refreshing_view"; + static final String STATE_SUPER = "ptr_super"; + + // =========================================================== + // Fields + // =========================================================== + + private int mTouchSlop; + private float mLastMotionX, mLastMotionY; + private float mInitialMotionX, mInitialMotionY; + + private boolean mIsBeingDragged = false; + private State mState = State.RESET; + private Mode mMode = Mode.getDefault(); + + private Mode mCurrentMode; + T mRefreshableView; + private FrameLayout mRefreshableViewWrapper; + + private boolean mShowViewWhileRefreshing = true; + private boolean mScrollingWhileRefreshingEnabled = false; + private boolean mFilterTouchEvents = true; + private boolean mOverScrollEnabled = true; + private boolean mLayoutVisibilityChangesEnabled = true; + + private Interpolator mScrollAnimationInterpolator; + private AnimationStyle mLoadingAnimationStyle = AnimationStyle.getDefault(); + + private LoadingLayout mHeaderLayout; + private LoadingLayout mFooterLayout; + + private OnRefreshListener mOnRefreshListener; + private OnRefreshListener2 mOnRefreshListener2; + private OnPullEventListener mOnPullEventListener; + + private SmoothScrollRunnable mCurrentSmoothScrollRunnable; + + // =========================================================== + // Constructors + // =========================================================== + + public PullToRefreshBase(Context context) { + super(context); + init(context, null); + } + + public PullToRefreshBase(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public PullToRefreshBase(Context context, Mode mode) { + super(context); + mMode = mode; + init(context, null); + } + + public PullToRefreshBase(Context context, Mode mode, AnimationStyle animStyle) { + super(context); + mMode = mode; + mLoadingAnimationStyle = animStyle; + init(context, null); + } + + @Override + public void addView(View child, int index, ViewGroup.LayoutParams params) { + if (DEBUG) { + Log.d(LOG_TAG, "addView: " + child.getClass().getSimpleName()); + } + + final T refreshableView = getRefreshableView(); + + if (refreshableView instanceof ViewGroup) { + ((ViewGroup) refreshableView).addView(child, index, params); + } else { + throw new UnsupportedOperationException("Refreshable View is not a ViewGroup so can't addView"); + } + } + + @Override + public final boolean demo() { + if (mMode.showHeaderLoadingLayout() && isReadyForPullStart()) { + smoothScrollToAndBack(-getHeaderSize() * 2); + return true; + } else if (mMode.showFooterLoadingLayout() && isReadyForPullEnd()) { + smoothScrollToAndBack(getFooterSize() * 2); + return true; + } + + return false; + } + + @Override + public final Mode getCurrentMode() { + return mCurrentMode; + } + + @Override + public final boolean getFilterTouchEvents() { + return mFilterTouchEvents; + } + + @Override + public final ILoadingLayout getLoadingLayoutProxy() { + return getLoadingLayoutProxy(true, true); + } + + @Override + public final ILoadingLayout getLoadingLayoutProxy(boolean includeStart, boolean includeEnd) { + return createLoadingLayoutProxy(includeStart, includeEnd); + } + + @Override + public final Mode getMode() { + return mMode; + } + + @Override + public final T getRefreshableView() { + return mRefreshableView; + } + + @Override + public final boolean getShowViewWhileRefreshing() { + return mShowViewWhileRefreshing; + } + + @Override + public final State getState() { + return mState; + } + + /** + * @deprecated See {@link #isScrollingWhileRefreshingEnabled()}. + */ + public final boolean isDisableScrollingWhileRefreshing() { + return !isScrollingWhileRefreshingEnabled(); + } + + @Override + public final boolean isPullToRefreshEnabled() { + return mMode.permitsPullToRefresh(); + } + + @Override + public final boolean isPullToRefreshOverScrollEnabled() { + return VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD && mOverScrollEnabled + && OverscrollHelper.isAndroidOverScrollEnabled(mRefreshableView); + } + + @Override + public final boolean isRefreshing() { + return mState == State.REFRESHING || mState == State.MANUAL_REFRESHING; + } + + @Override + public final boolean isScrollingWhileRefreshingEnabled() { + return mScrollingWhileRefreshingEnabled; + } + + @Override + public final boolean onInterceptTouchEvent(MotionEvent event) { + + if (!isPullToRefreshEnabled()) { + return false; + } + + final int action = event.getAction(); + + if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { + mIsBeingDragged = false; + return false; + } + + if (action != MotionEvent.ACTION_DOWN && mIsBeingDragged) { + return true; + } + + switch (action) { + case MotionEvent.ACTION_MOVE: { + // If we're refreshing, and the flag is set. Eat all MOVE events + if (!mScrollingWhileRefreshingEnabled && isRefreshing()) { + return true; + } + + if (isReadyForPull()) { + final float y = event.getY(), x = event.getX(); + final float diff, oppositeDiff, absDiff; + + // We need to use the correct values, based on scroll + // direction + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + diff = x - mLastMotionX; + oppositeDiff = y - mLastMotionY; + break; + case VERTICAL: + default: + diff = y - mLastMotionY; + oppositeDiff = x - mLastMotionX; + break; + } + absDiff = Math.abs(diff); + + if (absDiff > mTouchSlop && (!mFilterTouchEvents || absDiff > Math.abs(oppositeDiff))) { + if (mMode.showHeaderLoadingLayout() && diff >= 1f && isReadyForPullStart()) { + mLastMotionY = y; + mLastMotionX = x; + mIsBeingDragged = true; + if (mMode == Mode.BOTH) { + mCurrentMode = Mode.PULL_FROM_START; + } + } else if (mMode.showFooterLoadingLayout() && diff <= -1f && isReadyForPullEnd()) { + mLastMotionY = y; + mLastMotionX = x; + mIsBeingDragged = true; + if (mMode == Mode.BOTH) { + mCurrentMode = Mode.PULL_FROM_END; + } + } + } + } + break; + } + case MotionEvent.ACTION_DOWN: { + if (isReadyForPull()) { + mLastMotionY = mInitialMotionY = event.getY(); + mLastMotionX = mInitialMotionX = event.getX(); + mIsBeingDragged = false; + } + break; + } + } + + return mIsBeingDragged; + } + + @Override + public final void onRefreshComplete() { + if (isRefreshing()) { + setState(State.RESET); + } + } + + @Override + public final boolean onTouchEvent(MotionEvent event) { + + if (!isPullToRefreshEnabled()) { + return false; + } + + // If we're refreshing, and the flag is set. Eat the event + if (!mScrollingWhileRefreshingEnabled && isRefreshing()) { + return true; + } + + if (event.getAction() == MotionEvent.ACTION_DOWN && event.getEdgeFlags() != 0) { + return false; + } + + switch (event.getAction()) { + case MotionEvent.ACTION_MOVE: { + if (mIsBeingDragged) { + mLastMotionY = event.getY(); + mLastMotionX = event.getX(); + pullEvent(); + return true; + } + break; + } + + case MotionEvent.ACTION_DOWN: { + if (isReadyForPull()) { + mLastMotionY = mInitialMotionY = event.getY(); + mLastMotionX = mInitialMotionX = event.getX(); + return true; + } + break; + } + + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: { + if (mIsBeingDragged) { + mIsBeingDragged = false; + + if (mState == State.RELEASE_TO_REFRESH + && (null != mOnRefreshListener || null != mOnRefreshListener2)) { + setState(State.REFRESHING, true); + return true; + } + + // If we're already refreshing, just scroll back to the top + if (isRefreshing()) { + smoothScrollTo(0); + return true; + } + + // If we haven't returned by here, then we're not in a state + // to pull, so just reset + setState(State.RESET); + + return true; + } + break; + } + } + + return false; + } + + public final void setScrollingWhileRefreshingEnabled(boolean allowScrollingWhileRefreshing) { + mScrollingWhileRefreshingEnabled = allowScrollingWhileRefreshing; + } + + /** + * @deprecated See {@link #setScrollingWhileRefreshingEnabled(boolean)} + */ + public void setDisableScrollingWhileRefreshing(boolean disableScrollingWhileRefreshing) { + setScrollingWhileRefreshingEnabled(!disableScrollingWhileRefreshing); + } + + @Override + public final void setFilterTouchEvents(boolean filterEvents) { + mFilterTouchEvents = filterEvents; + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy()}. + */ + public void setLastUpdatedLabel(CharSequence label) { + getLoadingLayoutProxy().setLastUpdatedLabel(label); + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy()}. + */ + public void setLoadingDrawable(Drawable drawable) { + getLoadingLayoutProxy().setLoadingDrawable(drawable); + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy(boolean, boolean)}. + */ + public void setLoadingDrawable(Drawable drawable, Mode mode) { + getLoadingLayoutProxy(mode.showHeaderLoadingLayout(), mode.showFooterLoadingLayout()).setLoadingDrawable( + drawable); + } + + @Override + public void setLongClickable(boolean longClickable) { + getRefreshableView().setLongClickable(longClickable); + } + + @Override + public final void setMode(Mode mode) { + if (mode != mMode) { + if (DEBUG) { + Log.d(LOG_TAG, "Setting mode to: " + mode); + } + mMode = mode; + updateUIForMode(); + } + } + + public void setOnPullEventListener(OnPullEventListener listener) { + mOnPullEventListener = listener; + } + + @Override + public final void setOnRefreshListener(OnRefreshListener listener) { + mOnRefreshListener = listener; + mOnRefreshListener2 = null; + } + + @Override + public final void setOnRefreshListener(OnRefreshListener2 listener) { + mOnRefreshListener2 = listener; + mOnRefreshListener = null; + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy()}. + */ + public void setPullLabel(CharSequence pullLabel) { + getLoadingLayoutProxy().setPullLabel(pullLabel); + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy(boolean, boolean)}. + */ + public void setPullLabel(CharSequence pullLabel, Mode mode) { + getLoadingLayoutProxy(mode.showHeaderLoadingLayout(), mode.showFooterLoadingLayout()).setPullLabel(pullLabel); + } + + /** + * @param enable Whether Pull-To-Refresh should be used + * @deprecated This simple calls setMode with an appropriate mode based on + * the passed value. + */ + public final void setPullToRefreshEnabled(boolean enable) { + setMode(enable ? Mode.getDefault() : Mode.DISABLED); + } + + @Override + public final void setPullToRefreshOverScrollEnabled(boolean enabled) { + mOverScrollEnabled = enabled; + } + + @Override + public final void setRefreshing() { + setRefreshing(true); + } + + @Override + public final void setRefreshing(boolean doScroll) { + if (!isRefreshing()) { + setState(State.MANUAL_REFRESHING, doScroll); + } + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy()}. + */ + public void setRefreshingLabel(CharSequence refreshingLabel) { + getLoadingLayoutProxy().setRefreshingLabel(refreshingLabel); + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy(boolean, boolean)}. + */ + public void setRefreshingLabel(CharSequence refreshingLabel, Mode mode) { + getLoadingLayoutProxy(mode.showHeaderLoadingLayout(), mode.showFooterLoadingLayout()).setRefreshingLabel( + refreshingLabel); + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy()}. + */ + public void setReleaseLabel(CharSequence releaseLabel) { + setReleaseLabel(releaseLabel, Mode.BOTH); + } + + /** + * @deprecated You should now call this method on the result of + * {@link #getLoadingLayoutProxy(boolean, boolean)}. + */ + public void setReleaseLabel(CharSequence releaseLabel, Mode mode) { + getLoadingLayoutProxy(mode.showHeaderLoadingLayout(), mode.showFooterLoadingLayout()).setReleaseLabel( + releaseLabel); + } + + public void setScrollAnimationInterpolator(Interpolator interpolator) { + mScrollAnimationInterpolator = interpolator; + } + + @Override + public final void setShowViewWhileRefreshing(boolean showView) { + mShowViewWhileRefreshing = showView; + } + + /** + * @return Either {@link Orientation#VERTICAL} or + * {@link Orientation#HORIZONTAL} depending on the scroll direction. + */ + public abstract Orientation getPullToRefreshScrollDirection(); + + final void setState(State state, final boolean... params) { + mState = state; + if (DEBUG) { + Log.d(LOG_TAG, "State: " + mState.name()); + } + + switch (mState) { + case RESET: + onReset(); + break; + case PULL_TO_REFRESH: + onPullToRefresh(); + break; + case RELEASE_TO_REFRESH: + onReleaseToRefresh(); + break; + case REFRESHING: + case MANUAL_REFRESHING: + onRefreshing(params[0]); + break; + case OVERSCROLLING: + // NO-OP + break; + } + + // Call OnPullEventListener + if (null != mOnPullEventListener) { + mOnPullEventListener.onPullEvent(this, mState, mCurrentMode); + } + } + + /** + * Used internally for adding view. Need because we override addView to + * pass-through to the Refreshable View + */ + protected final void addViewInternal(View child, int index, ViewGroup.LayoutParams params) { + super.addView(child, index, params); + } + + /** + * Used internally for adding view. Need because we override addView to + * pass-through to the Refreshable View + */ + protected final void addViewInternal(View child, ViewGroup.LayoutParams params) { + super.addView(child, -1, params); + } + + protected LoadingLayout createLoadingLayout(Context context, Mode mode, TypedArray attrs) { + LoadingLayout layout = mLoadingAnimationStyle.createLoadingLayout(context, mode, + getPullToRefreshScrollDirection(), attrs); + layout.setVisibility(View.INVISIBLE); + return layout; + } + + /** + * Used internally for {@link #getLoadingLayoutProxy(boolean, boolean)}. + * Allows derivative classes to include any extra LoadingLayouts. + */ + protected LoadingLayoutProxy createLoadingLayoutProxy(final boolean includeStart, final boolean includeEnd) { + LoadingLayoutProxy proxy = new LoadingLayoutProxy(); + + if (includeStart && mMode.showHeaderLoadingLayout()) { + proxy.addLayout(mHeaderLayout); + } + if (includeEnd && mMode.showFooterLoadingLayout()) { + proxy.addLayout(mFooterLayout); + } + + return proxy; + } + + /** + * This is implemented by derived classes to return the created View. If you + * need to use a custom View (such as a custom ListView), override this + * method and return an instance of your custom class. + *

+ * Be sure to set the ID of the view in this method, especially if you're + * using a ListActivity or ListFragment. + * + * @param context Context to create view with + * @param attrs AttributeSet from wrapped class. Means that anything you + * include in the XML layout declaration will be routed to the + * created View + * @return New instance of the Refreshable View + */ + protected abstract T createRefreshableView(Context context, AttributeSet attrs); + + protected final void disableLoadingLayoutVisibilityChanges() { + mLayoutVisibilityChangesEnabled = false; + } + + protected final LoadingLayout getFooterLayout() { + return mFooterLayout; + } + + protected final int getFooterSize() { + return mFooterLayout.getContentSize(); + } + + protected final LoadingLayout getHeaderLayout() { + return mHeaderLayout; + } + + protected final int getHeaderSize() { + return mHeaderLayout.getContentSize(); + } + + protected int getPullToRefreshScrollDuration() { + return SMOOTH_SCROLL_DURATION_MS; + } + + protected int getPullToRefreshScrollDurationLonger() { + return SMOOTH_SCROLL_LONG_DURATION_MS; + } + + protected FrameLayout getRefreshableViewWrapper() { + return mRefreshableViewWrapper; + } + + /** + * Allows Derivative classes to handle the XML Attrs without creating a + * TypedArray themsevles + * + * @param a - TypedArray of PullToRefresh Attributes + */ + protected void handleStyledAttributes(TypedArray a) { + } + + /** + * Implemented by derived class to return whether the View is in a state + * where the user can Pull to Refresh by scrolling from the end. + * + * @return true if the View is currently in the correct state (for example, + * bottom of a ListView) + */ + protected abstract boolean isReadyForPullEnd(); + + /** + * Implemented by derived class to return whether the View is in a state + * where the user can Pull to Refresh by scrolling from the start. + * + * @return true if the View is currently the correct state (for example, top + * of a ListView) + */ + protected abstract boolean isReadyForPullStart(); + + /** + * Called by {@link #onRestoreInstanceState(Parcelable)} so that derivative + * classes can handle their saved instance state. + * + * @param savedInstanceState - Bundle which contains saved instance state. + */ + protected void onPtrRestoreInstanceState(Bundle savedInstanceState) { + } + + /** + * Called by {@link #onSaveInstanceState()} so that derivative classes can + * save their instance state. + * + * @param saveState - Bundle to be updated with saved state. + */ + protected void onPtrSaveInstanceState(Bundle saveState) { + } + + /** + * Called when the UI has been to be updated to be in the + * {@link State#PULL_TO_REFRESH} state. + */ + protected void onPullToRefresh() { + switch (mCurrentMode) { + case PULL_FROM_END: + mFooterLayout.pullToRefresh(); + break; + case PULL_FROM_START: + mHeaderLayout.pullToRefresh(); + break; + default: + // NO-OP + break; + } + } + + /** + * Called when the UI has been to be updated to be in the + * {@link State#REFRESHING} or {@link State#MANUAL_REFRESHING} state. + * + * @param doScroll - Whether the UI should scroll for this event. + */ + protected void onRefreshing(final boolean doScroll) { + if (mMode.showHeaderLoadingLayout()) { + mHeaderLayout.refreshing(); + } + if (mMode.showFooterLoadingLayout()) { + mFooterLayout.refreshing(); + } + + if (doScroll) { + if (mShowViewWhileRefreshing) { + + // Call Refresh Listener when the Scroll has finished + OnSmoothScrollFinishedListener listener = new OnSmoothScrollFinishedListener() { + @Override + public void onSmoothScrollFinished() { + callRefreshListener(); + } + }; + + switch (mCurrentMode) { + case MANUAL_REFRESH_ONLY: + case PULL_FROM_END: + smoothScrollTo(getFooterSize(), listener); + break; + default: + case PULL_FROM_START: + smoothScrollTo(-getHeaderSize(), listener); + break; + } + } else { + smoothScrollTo(0); + } + } else { + // We're not scrolling, so just call Refresh Listener now + callRefreshListener(); + } + } + + /** + * Called when the UI has been to be updated to be in the + * {@link State#RELEASE_TO_REFRESH} state. + */ + protected void onReleaseToRefresh() { + switch (mCurrentMode) { + case PULL_FROM_END: + mFooterLayout.releaseToRefresh(); + break; + case PULL_FROM_START: + mHeaderLayout.releaseToRefresh(); + break; + default: + // NO-OP + break; + } + } + + /** + * Called when the UI has been to be updated to be in the + * {@link State#RESET} state. + */ + protected void onReset() { + mIsBeingDragged = false; + mLayoutVisibilityChangesEnabled = true; + + // Always reset both layouts, just in case... + mHeaderLayout.reset(); + mFooterLayout.reset(); + + smoothScrollTo(0); + } + + @Override + protected final void onRestoreInstanceState(Parcelable state) { + if (state instanceof Bundle) { + Bundle bundle = (Bundle) state; + + setMode(Mode.mapIntToValue(bundle.getInt(STATE_MODE, 0))); + mCurrentMode = Mode.mapIntToValue(bundle.getInt(STATE_CURRENT_MODE, 0)); + + mScrollingWhileRefreshingEnabled = bundle.getBoolean(STATE_SCROLLING_REFRESHING_ENABLED, false); + mShowViewWhileRefreshing = bundle.getBoolean(STATE_SHOW_REFRESHING_VIEW, true); + + // Let super Restore Itself + super.onRestoreInstanceState(bundle.getParcelable(STATE_SUPER)); + + State viewState = State.mapIntToValue(bundle.getInt(STATE_STATE, 0)); + if (viewState == State.REFRESHING || viewState == State.MANUAL_REFRESHING) { + setState(viewState, true); + } + + // Now let derivative classes restore their state + onPtrRestoreInstanceState(bundle); + return; + } + + super.onRestoreInstanceState(state); + } + + @Override + protected final Parcelable onSaveInstanceState() { + Bundle bundle = new Bundle(); + + // Let derivative classes get a chance to save state first, that way we + // can make sure they don't overrite any of our values + onPtrSaveInstanceState(bundle); + + bundle.putInt(STATE_STATE, mState.getIntValue()); + bundle.putInt(STATE_MODE, mMode.getIntValue()); + bundle.putInt(STATE_CURRENT_MODE, mCurrentMode.getIntValue()); + bundle.putBoolean(STATE_SCROLLING_REFRESHING_ENABLED, mScrollingWhileRefreshingEnabled); + bundle.putBoolean(STATE_SHOW_REFRESHING_VIEW, mShowViewWhileRefreshing); + bundle.putParcelable(STATE_SUPER, super.onSaveInstanceState()); + + return bundle; + } + + @Override + protected final void onSizeChanged(int w, int h, int oldw, int oldh) { + if (DEBUG) { + Log.d(LOG_TAG, String.format("onSizeChanged. W: %d, H: %d", w, h)); + } + + super.onSizeChanged(w, h, oldw, oldh); + + // We need to update the header/footer when our size changes + refreshLoadingViewsSize(); + + // Update the Refreshable View layout + refreshRefreshableViewSize(w, h); + + /** + * As we're currently in a Layout Pass, we need to schedule another one + * to layout any changes we've made here + */ + post(new Runnable() { + @Override + public void run() { + requestLayout(); + } + }); + } + + /** + * Re-measure the Loading Views height, and adjust internal padding as + * necessary + */ + protected final void refreshLoadingViewsSize() { + final int maximumPullScroll = (int) (getMaximumPullScroll() * 1.2f); + + int pLeft = getPaddingLeft(); + int pTop = getPaddingTop(); + int pRight = getPaddingRight(); + int pBottom = getPaddingBottom(); + + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + if (mMode.showHeaderLoadingLayout()) { + mHeaderLayout.setWidth(maximumPullScroll); + pLeft = -maximumPullScroll; + } else { + pLeft = 0; + } + + if (mMode.showFooterLoadingLayout()) { + mFooterLayout.setWidth(maximumPullScroll); + pRight = -maximumPullScroll; + } else { + pRight = 0; + } + break; + + case VERTICAL: + if (mMode.showHeaderLoadingLayout()) { + mHeaderLayout.setHeight(maximumPullScroll); + pTop = -maximumPullScroll; + } else { + pTop = 0; + } + + if (mMode.showFooterLoadingLayout()) { + mFooterLayout.setHeight(maximumPullScroll); + pBottom = -maximumPullScroll; + } else { + pBottom = 0; + } + break; + } + + if (DEBUG) { + Log.d(LOG_TAG, String.format("Setting Padding. L: %d, T: %d, R: %d, B: %d", pLeft, pTop, pRight, pBottom)); + } + setPadding(pLeft, pTop, pRight, pBottom); + } + + protected final void refreshRefreshableViewSize(int width, int height) { + // We need to set the Height of the Refreshable View to the same as + // this layout + LayoutParams lp = (LayoutParams) mRefreshableViewWrapper.getLayoutParams(); + + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + if (lp.width != width) { + lp.width = width; + mRefreshableViewWrapper.requestLayout(); + } + break; + case VERTICAL: + if (lp.height != height) { + lp.height = height; + mRefreshableViewWrapper.requestLayout(); + } + break; + } + } + + /** + * Helper method which just calls scrollTo() in the correct scrolling + * direction. + * + * @param value - New Scroll value + */ + protected final void setHeaderScroll(int value) { + if (DEBUG) { + Log.d(LOG_TAG, "setHeaderScroll: " + value); + } + + // Clamp value to with pull scroll range + final int maximumPullScroll = getMaximumPullScroll(); + value = Math.min(maximumPullScroll, Math.max(-maximumPullScroll, value)); + + if (mLayoutVisibilityChangesEnabled) { + if (value < 0) { + mHeaderLayout.setVisibility(View.VISIBLE); + } else if (value > 0) { + mFooterLayout.setVisibility(View.VISIBLE); + } else { + mHeaderLayout.setVisibility(View.INVISIBLE); + mFooterLayout.setVisibility(View.INVISIBLE); + } + } + + if (USE_HW_LAYERS) { + /** + * Use a Hardware Layer on the Refreshable View if we've scrolled at + * all. We don't use them on the Header/Footer Views as they change + * often, which would negate any HW layer performance boost. + */ + ViewCompat.setLayerType(mRefreshableViewWrapper, value != 0 ? View.LAYER_TYPE_HARDWARE + : View.LAYER_TYPE_NONE); + } + + switch (getPullToRefreshScrollDirection()) { + case VERTICAL: + scrollTo(0, value); + break; + case HORIZONTAL: + scrollTo(value, 0); + break; + } + } + + /** + * Smooth Scroll to position using the default duration of + * {@value #SMOOTH_SCROLL_DURATION_MS} ms. + * + * @param scrollValue - Position to scroll to + */ + protected final void smoothScrollTo(int scrollValue) { + smoothScrollTo(scrollValue, getPullToRefreshScrollDuration()); + } + + /** + * Smooth Scroll to position using the default duration of + * {@value #SMOOTH_SCROLL_DURATION_MS} ms. + * + * @param scrollValue - Position to scroll to + * @param listener - Listener for scroll + */ + protected final void smoothScrollTo(int scrollValue, OnSmoothScrollFinishedListener listener) { + smoothScrollTo(scrollValue, getPullToRefreshScrollDuration(), 0, listener); + } + + /** + * Smooth Scroll to position using the longer default duration of + * {@value #SMOOTH_SCROLL_LONG_DURATION_MS} ms. + * + * @param scrollValue - Position to scroll to + */ + protected final void smoothScrollToLonger(int scrollValue) { + smoothScrollTo(scrollValue, getPullToRefreshScrollDurationLonger()); + } + + /** + * Updates the View State when the mode has been set. This does not do any + * checking that the mode is different to current state so always updates. + */ + protected void updateUIForMode() { + // We need to use the correct LayoutParam values, based on scroll + // direction + final LayoutParams lp = getLoadingLayoutLayoutParams(); + + // Remove Header, and then add Header Loading View again if needed + if (this == mHeaderLayout.getParent()) { + removeView(mHeaderLayout); + } + if (mMode.showHeaderLoadingLayout()) { + addViewInternal(mHeaderLayout, 0, lp); + } + + // Remove Footer, and then add Footer Loading View again if needed + if (this == mFooterLayout.getParent()) { + removeView(mFooterLayout); + } + if (mMode.showFooterLoadingLayout()) { + addViewInternal(mFooterLayout, lp); + } + + // Hide Loading Views + refreshLoadingViewsSize(); + + // If we're not using Mode.BOTH, set mCurrentMode to mMode, otherwise + // set it to pull down + mCurrentMode = (mMode != Mode.BOTH) ? mMode : Mode.PULL_FROM_START; + } + + private void addRefreshableView(Context context, T refreshableView) { + mRefreshableViewWrapper = new FrameLayout(context); + mRefreshableViewWrapper.addView(refreshableView, ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT); + + addViewInternal(mRefreshableViewWrapper, new LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT)); + } + + /**回滚的时间*/ + private static final int SCROLL_DURATION = 600; + private void callRefreshListener() { + if (null != mOnRefreshListener) { + mOnRefreshListener.onRefresh(this); + } else if (null != mOnRefreshListener2) { + if (mCurrentMode == Mode.PULL_FROM_START) { +// mOnRefreshListener2.onPullDownToRefresh(this); + // 因为滚动回原始位置的时间是200,我们需要等回滚完后才执行刷新回调 + postDelayed(new Runnable() { + @Override + public void run() { + mOnRefreshListener2.onPullDownToRefresh(PullToRefreshBase.this); + } + }, SCROLL_DURATION); + } else if (mCurrentMode == Mode.PULL_FROM_END) { +// mOnRefreshListener2.onPullUpToRefresh(this); + postDelayed(new Runnable() { + @Override + public void run() { + mOnRefreshListener2.onPullUpToRefresh(PullToRefreshBase.this); + } + }, SCROLL_DURATION); + } + } + } + + @SuppressWarnings("deprecation") + private void init(Context context, AttributeSet attrs) { + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + setOrientation(LinearLayout.HORIZONTAL); + break; + case VERTICAL: + default: + setOrientation(LinearLayout.VERTICAL); + break; + } + + setGravity(Gravity.CENTER); + + ViewConfiguration config = ViewConfiguration.get(context); + mTouchSlop = config.getScaledTouchSlop(); + + // Styleables from XML + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PullToRefresh); + + if (a.hasValue(R.styleable.PullToRefresh_ptrMode)) { + mMode = Mode.mapIntToValue(a.getInteger(R.styleable.PullToRefresh_ptrMode, 0)); + } + + if (a.hasValue(R.styleable.PullToRefresh_ptrAnimationStyle)) { + mLoadingAnimationStyle = AnimationStyle.mapIntToValue(a.getInteger( + R.styleable.PullToRefresh_ptrAnimationStyle, 0)); + } + + // Refreshable View + // By passing the attrs, we can add ListView/GridView params via XML + mRefreshableView = createRefreshableView(context, attrs); + addRefreshableView(context, mRefreshableView); + + // We need to create now layouts now + mHeaderLayout = createLoadingLayout(context, Mode.PULL_FROM_START, a); + mFooterLayout = createLoadingLayout(context, Mode.PULL_FROM_END, a); + + /** + * Styleables from XML + */ + if (a.hasValue(R.styleable.PullToRefresh_ptrRefreshableViewBackground)) { + Drawable background = a.getDrawable(R.styleable.PullToRefresh_ptrRefreshableViewBackground); + if (null != background) { + mRefreshableView.setBackgroundDrawable(background); + } + } else if (a.hasValue(R.styleable.PullToRefresh_ptrAdapterViewBackground)) { + Utils.warnDeprecation("ptrAdapterViewBackground", "ptrRefreshableViewBackground"); + Drawable background = a.getDrawable(R.styleable.PullToRefresh_ptrAdapterViewBackground); + if (null != background) { + mRefreshableView.setBackgroundDrawable(background); + } + } + + if (a.hasValue(R.styleable.PullToRefresh_ptrOverScroll)) { + mOverScrollEnabled = a.getBoolean(R.styleable.PullToRefresh_ptrOverScroll, true); + } + + if (a.hasValue(R.styleable.PullToRefresh_ptrScrollingWhileRefreshingEnabled)) { + mScrollingWhileRefreshingEnabled = a.getBoolean( + R.styleable.PullToRefresh_ptrScrollingWhileRefreshingEnabled, false); + } + + // Let the derivative classes have a go at handling attributes, then + // recycle them... + handleStyledAttributes(a); + a.recycle(); + + // Finally update the UI for the modes + updateUIForMode(); + } + + private boolean isReadyForPull() { + switch (mMode) { + case PULL_FROM_START: + return isReadyForPullStart(); + case PULL_FROM_END: + return isReadyForPullEnd(); + case BOTH: + return isReadyForPullEnd() || isReadyForPullStart(); + default: + return false; + } + } + + /** + * Actions a Pull Event + * + * @return true if the Event has been handled, false if there has been no + * change + */ + private void pullEvent() { + final int newScrollValue; + final int itemDimension; + final float initialMotionValue, lastMotionValue; + + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + initialMotionValue = mInitialMotionX; + lastMotionValue = mLastMotionX; + break; + case VERTICAL: + default: + initialMotionValue = mInitialMotionY; + lastMotionValue = mLastMotionY; + break; + } + + switch (mCurrentMode) { + case PULL_FROM_END: + newScrollValue = Math.round(Math.max(initialMotionValue - lastMotionValue, 0) / FRICTION); + itemDimension = getFooterSize(); + break; + case PULL_FROM_START: + default: + newScrollValue = Math.round(Math.min(initialMotionValue - lastMotionValue, 0) / FRICTION); + itemDimension = getHeaderSize(); + break; + } + + setHeaderScroll(newScrollValue); + + if (newScrollValue != 0 && !isRefreshing()) { + float scale = Math.abs(newScrollValue) / (float) itemDimension; + switch (mCurrentMode) { + case PULL_FROM_END: + mFooterLayout.onPull(scale); + break; + case PULL_FROM_START: + default: + mHeaderLayout.onPull(scale); + break; + } + + if (mState != State.PULL_TO_REFRESH && itemDimension >= Math.abs(newScrollValue)) { + setState(State.PULL_TO_REFRESH); + } else if (mState == State.PULL_TO_REFRESH && itemDimension < Math.abs(newScrollValue)) { + setState(State.RELEASE_TO_REFRESH); + } + } + } + + private LayoutParams getLoadingLayoutLayoutParams() { + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + return new LayoutParams(LayoutParams.WRAP_CONTENT, + LayoutParams.MATCH_PARENT); + case VERTICAL: + default: + return new LayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.WRAP_CONTENT); + } + } + + private int getMaximumPullScroll() { + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + return Math.round(getWidth() / FRICTION); + case VERTICAL: + default: + return Math.round(getHeight() / FRICTION); + } + } + + /** + * Smooth Scroll to position using the specific duration + * + * @param scrollValue - Position to scroll to + * @param duration - Duration of animation in milliseconds + */ + private final void smoothScrollTo(int scrollValue, long duration) { + smoothScrollTo(scrollValue, duration, 0, null); + } + + private final void smoothScrollTo(int newScrollValue, long duration, long delayMillis, + OnSmoothScrollFinishedListener listener) { + if (null != mCurrentSmoothScrollRunnable) { + mCurrentSmoothScrollRunnable.stop(); + } + + final int oldScrollValue; + switch (getPullToRefreshScrollDirection()) { + case HORIZONTAL: + oldScrollValue = getScrollX(); + break; + case VERTICAL: + default: + oldScrollValue = getScrollY(); + break; + } + + if (oldScrollValue != newScrollValue) { + if (null == mScrollAnimationInterpolator) { + // Default interpolator is a Decelerate Interpolator + mScrollAnimationInterpolator = new DecelerateInterpolator(); + } + mCurrentSmoothScrollRunnable = new SmoothScrollRunnable(oldScrollValue, newScrollValue, duration, listener); + + if (delayMillis > 0) { + postDelayed(mCurrentSmoothScrollRunnable, delayMillis); + } else { + post(mCurrentSmoothScrollRunnable); + } + } + } + + private final void smoothScrollToAndBack(int y) { + smoothScrollTo(y, SMOOTH_SCROLL_DURATION_MS, 0, new OnSmoothScrollFinishedListener() { + + @Override + public void onSmoothScrollFinished() { + smoothScrollTo(0, SMOOTH_SCROLL_DURATION_MS, DEMO_SCROLL_INTERVAL, null); + } + }); + } + + public static enum AnimationStyle { + /** + * This is the default for Android-PullToRefresh. Allows you to use any + * drawable, which is automatically rotated and used as a Progress Bar. + */ + ROTATE, + + /** + * This is the old default, and what is commonly used on iOS. Uses an + * arrow image which flips depending on where the user has scrolled. + */ + FLIP; + + public static AnimationStyle getDefault() { + return ROTATE; + } + + /** + * Maps an int to a specific mode. This is needed when saving state, or + * inflating the view from XML where the mode is given through a attr + * int. + * + * @param modeInt - int to map a Mode to + * @return Mode that modeInt maps to, or ROTATE by default. + */ + static AnimationStyle mapIntToValue(int modeInt) { + switch (modeInt) { + case 0x0: + default: + return ROTATE; + case 0x1: + return FLIP; + } + } + + LoadingLayout createLoadingLayout(Context context, Mode mode, Orientation scrollDirection, TypedArray attrs) { + switch (this) { + case ROTATE: + default: + return new TweenAnimLoadingLayout(context, mode, scrollDirection, attrs); + case FLIP: + return new TweenAnimLoadingLayout(context, mode, scrollDirection, attrs); + } + } + } + + public static enum Mode { + + /** + * Disable all Pull-to-Refresh gesture and Refreshing handling + */ + DISABLED(0x0), + + /** + * Only allow the user to Pull from the start of the Refreshable View to + * refresh. The start is either the Top or Left, depending on the + * scrolling direction. + */ + PULL_FROM_START(0x1), + + /** + * Only allow the user to Pull from the end of the Refreshable View to + * refresh. The start is either the Bottom or Right, depending on the + * scrolling direction. + */ + PULL_FROM_END(0x2), + + /** + * Allow the user to both Pull from the start, from the end to refresh. + */ + BOTH(0x3), + + /** + * Disables Pull-to-Refresh gesture handling, but allows manually + * setting the Refresh state via + * {@link PullToRefreshBase#setRefreshing() setRefreshing()}. + */ + MANUAL_REFRESH_ONLY(0x4); + + /** + * @deprecated Use {@link #PULL_FROM_START} from now on. + */ + public static Mode PULL_DOWN_TO_REFRESH = Mode.PULL_FROM_START; + + /** + * @deprecated Use {@link #PULL_FROM_END} from now on. + */ + public static Mode PULL_UP_TO_REFRESH = Mode.PULL_FROM_END; + + /** + * Maps an int to a specific mode. This is needed when saving state, or + * inflating the view from XML where the mode is given through a attr + * int. + * + * @param modeInt - int to map a Mode to + * @return Mode that modeInt maps to, or PULL_FROM_START by default. + */ + static Mode mapIntToValue(final int modeInt) { + for (Mode value : Mode.values()) { + if (modeInt == value.getIntValue()) { + return value; + } + } + + // If not, return default + return getDefault(); + } + + static Mode getDefault() { + return PULL_FROM_START; + } + + private int mIntValue; + + // The modeInt values need to match those from attrs.xml + Mode(int modeInt) { + mIntValue = modeInt; + } + + /** + * @return true if the mode permits Pull-to-Refresh + */ + boolean permitsPullToRefresh() { + return !(this == DISABLED || this == MANUAL_REFRESH_ONLY); + } + + /** + * @return true if this mode wants the Loading Layout Header to be shown + */ + public boolean showHeaderLoadingLayout() { + return this == PULL_FROM_START || this == BOTH; + } + + /** + * @return true if this mode wants the Loading Layout Footer to be shown + */ + public boolean showFooterLoadingLayout() { + return this == PULL_FROM_END || this == BOTH || this == MANUAL_REFRESH_ONLY; + } + + int getIntValue() { + return mIntValue; + } + + } + + // =========================================================== + // Inner, Anonymous Classes, and Enumerations + // =========================================================== + + /** + * Simple Listener that allows you to be notified when the user has scrolled + * to the end of the AdapterView. See ( + * {@link PullToRefreshAdapterViewBase#setOnLastItemVisibleListener}. + * + * @author Chris Banes + */ + public static interface OnLastItemVisibleListener { + + /** + * Called when the user has scrolled to the end of the list + */ + public void onLastItemVisible(); + + } + + /** + * Listener that allows you to be notified when the user has started or + * finished a touch event. Useful when you want to append extra UI events + * (such as sounds). See ( + * {@link PullToRefreshAdapterViewBase#setOnPullEventListener}. + * + * @author Chris Banes + */ + public static interface OnPullEventListener { + + /** + * Called when the internal state has been changed, usually by the user + * pulling. + * + * @param refreshView - View which has had it's state change. + * @param state - The new state of View. + * @param direction - One of {@link Mode#PULL_FROM_START} or + * {@link Mode#PULL_FROM_END} depending on which direction + * the user is pulling. Only useful when state is + * {@link State#PULL_TO_REFRESH} or + * {@link State#RELEASE_TO_REFRESH}. + */ + public void onPullEvent(final PullToRefreshBase refreshView, State state, Mode direction); + + } + + /** + * Simple Listener to listen for any callbacks to Refresh. + * + * @author Chris Banes + */ + public static interface OnRefreshListener { + + /** + * onRefresh will be called for both a Pull from start, and Pull from + * end + */ + public void onRefresh(final PullToRefreshBase refreshView); + + } + + /** + * An advanced version of the Listener to listen for callbacks to Refresh. + * This listener is different as it allows you to differentiate between Pull + * Ups, and Pull Downs. + * + * @author Chris Banes + */ + public static interface OnRefreshListener2 { + // TODO These methods need renaming to START/END rather than DOWN/UP + + /** + * onPullDownToRefresh will be called only when the user has Pulled from + * the start, and released. + */ + public void onPullDownToRefresh(final PullToRefreshBase refreshView); + + /** + * onPullUpToRefresh will be called only when the user has Pulled from + * the end, and released. + */ + public void onPullUpToRefresh(final PullToRefreshBase refreshView); + + } + + public static enum Orientation { + VERTICAL, HORIZONTAL; + } + + public static enum State { + + /** + * When the UI is in a state which means that user is not interacting + * with the Pull-to-Refresh function. + */ + RESET(0x0), + + /** + * When the UI is being pulled by the user, but has not been pulled far + * enough so that it refreshes when released. + */ + PULL_TO_REFRESH(0x1), + + /** + * When the UI is being pulled by the user, and has + * been pulled far enough so that it will refresh when released. + */ + RELEASE_TO_REFRESH(0x2), + + /** + * When the UI is currently refreshing, caused by a pull gesture. + */ + REFRESHING(0x8), + + /** + * When the UI is currently refreshing, caused by a call to + * {@link PullToRefreshBase#setRefreshing() setRefreshing()}. + */ + MANUAL_REFRESHING(0x9), + + /** + * When the UI is currently overscrolling, caused by a fling on the + * Refreshable View. + */ + OVERSCROLLING(0x10); + + /** + * Maps an int to a specific state. This is needed when saving state. + * + * @param stateInt - int to map a State to + * @return State that stateInt maps to + */ + static State mapIntToValue(final int stateInt) { + for (State value : State.values()) { + if (stateInt == value.getIntValue()) { + return value; + } + } + + // If not, return default + return RESET; + } + + private int mIntValue; + + State(int intValue) { + mIntValue = intValue; + } + + int getIntValue() { + return mIntValue; + } + } + + final class SmoothScrollRunnable implements Runnable { + private final Interpolator mInterpolator; + private final int mScrollToY; + private final int mScrollFromY; + private final long mDuration; + private OnSmoothScrollFinishedListener mListener; + + private boolean mContinueRunning = true; + private long mStartTime = -1; + private int mCurrentY = -1; + + public SmoothScrollRunnable(int fromY, int toY, long duration, OnSmoothScrollFinishedListener listener) { + mScrollFromY = fromY; + mScrollToY = toY; + mInterpolator = mScrollAnimationInterpolator; + mDuration = duration; + mListener = listener; + } + + @Override + public void run() { + + /** + * Only set mStartTime if this is the first time we're starting, + * else actually calculate the Y delta + */ + if (mStartTime == -1) { + mStartTime = System.currentTimeMillis(); + } else { + + /** + * We do do all calculations in long to reduce software float + * calculations. We use 1000 as it gives us good accuracy and + * small rounding errors + */ + long normalizedTime = (1000 * (System.currentTimeMillis() - mStartTime)) / mDuration; + normalizedTime = Math.max(Math.min(normalizedTime, 1000), 0); + + final int deltaY = Math.round((mScrollFromY - mScrollToY) + * mInterpolator.getInterpolation(normalizedTime / 1000f)); + mCurrentY = mScrollFromY - deltaY; + setHeaderScroll(mCurrentY); + } + + // If we're not at the target Y, keep going... + if (mContinueRunning && mScrollToY != mCurrentY) { + ViewCompat.postOnAnimation(PullToRefreshBase.this, this); + } else { + if (null != mListener) { + mListener.onSmoothScrollFinished(); + } + } + } + + public void stop() { + mContinueRunning = false; + removeCallbacks(this); + } + } + + static interface OnSmoothScrollFinishedListener { + void onSmoothScrollFinished(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshExpandableListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshExpandableListView.java new file mode 100644 index 0000000..b04d7d7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshExpandableListView.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ExpandableListView; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.EmptyViewMethodAccessor; + +public class PullToRefreshExpandableListView extends PullToRefreshAdapterViewBase { + + public PullToRefreshExpandableListView(Context context) { + super(context); + } + + public PullToRefreshExpandableListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PullToRefreshExpandableListView(Context context, Mode mode) { + super(context, mode); + } + + public PullToRefreshExpandableListView(Context context, Mode mode, AnimationStyle style) { + super(context, mode, style); + } + + @Override + public final Orientation getPullToRefreshScrollDirection() { + return Orientation.VERTICAL; + } + + @Override + protected ExpandableListView createRefreshableView(Context context, AttributeSet attrs) { + final ExpandableListView lv; + if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { + lv = new InternalExpandableListViewSDK9(context, attrs); + } else { + lv = new InternalExpandableListView(context, attrs); + } + + // Set it to this so it can be used in ListActivity/ListFragment + lv.setId(android.R.id.list); + return lv; + } + + class InternalExpandableListView extends ExpandableListView implements EmptyViewMethodAccessor { + + public InternalExpandableListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void setEmptyView(View emptyView) { + PullToRefreshExpandableListView.this.setEmptyView(emptyView); + } + + @Override + public void setEmptyViewInternal(View emptyView) { + super.setEmptyView(emptyView); + } + } + + @TargetApi(9) + final class InternalExpandableListViewSDK9 extends InternalExpandableListView { + + public InternalExpandableListViewSDK9(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, + int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, + scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + // Does all of the hard work... + OverscrollHelper.overScrollBy(PullToRefreshExpandableListView.this, deltaX, scrollX, deltaY, scrollY, + isTouchEvent); + + return returnValue; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshGridView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshGridView.java new file mode 100644 index 0000000..faef0ee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshGridView.java @@ -0,0 +1,102 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.util.AttributeSet; +import android.view.View; +import android.widget.GridView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.EmptyViewMethodAccessor; + +public class PullToRefreshGridView extends PullToRefreshAdapterViewBase { + + public PullToRefreshGridView(Context context) { + super(context); + } + + public PullToRefreshGridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PullToRefreshGridView(Context context, Mode mode) { + super(context, mode); + } + + public PullToRefreshGridView(Context context, Mode mode, AnimationStyle style) { + super(context, mode, style); + } + + @Override + public final Orientation getPullToRefreshScrollDirection() { + return Orientation.VERTICAL; + } + + @Override + protected final GridView createRefreshableView(Context context, AttributeSet attrs) { + final GridView gv; + if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { + gv = new InternalGridViewSDK9(context, attrs); + } else { + gv = new InternalGridView(context, attrs); + } + + // Use Generated ID (from res/values/ids.xml) + gv.setId(R.id.gridview); + return gv; + } + + class InternalGridView extends GridView implements EmptyViewMethodAccessor { + + public InternalGridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void setEmptyView(View emptyView) { + PullToRefreshGridView.this.setEmptyView(emptyView); + } + + @Override + public void setEmptyViewInternal(View emptyView) { + super.setEmptyView(emptyView); + } + } + + @TargetApi(9) + final class InternalGridViewSDK9 extends InternalGridView { + + public InternalGridViewSDK9(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, + int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, + scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + // Does all of the hard work... + OverscrollHelper.overScrollBy(PullToRefreshGridView.this, deltaX, scrollX, deltaY, scrollY, isTouchEvent); + + return returnValue; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshHorizontalScrollView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshHorizontalScrollView.java new file mode 100644 index 0000000..0c78b83 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshHorizontalScrollView.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.util.AttributeSet; +import android.view.View; +import android.widget.HorizontalScrollView; +import cn.shangyu.gdxzExpert.R; + +public class PullToRefreshHorizontalScrollView extends PullToRefreshBase { + + public PullToRefreshHorizontalScrollView(Context context) { + super(context); + } + + public PullToRefreshHorizontalScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PullToRefreshHorizontalScrollView(Context context, Mode mode) { + super(context, mode); + } + + public PullToRefreshHorizontalScrollView(Context context, Mode mode, AnimationStyle style) { + super(context, mode, style); + } + + @Override + public final Orientation getPullToRefreshScrollDirection() { + return Orientation.HORIZONTAL; + } + + @Override + protected HorizontalScrollView createRefreshableView(Context context, AttributeSet attrs) { + HorizontalScrollView scrollView; + + if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { + scrollView = new InternalHorizontalScrollViewSDK9(context, attrs); + } else { + scrollView = new HorizontalScrollView(context, attrs); + } + + scrollView.setId(R.id.scrollview); + return scrollView; + } + + @Override + protected boolean isReadyForPullStart() { + return mRefreshableView.getScrollX() == 0; + } + + @Override + protected boolean isReadyForPullEnd() { + View scrollViewChild = mRefreshableView.getChildAt(0); + if (null != scrollViewChild) { + return mRefreshableView.getScrollX() >= (scrollViewChild.getWidth() - getWidth()); + } + return false; + } + + @TargetApi(9) + final class InternalHorizontalScrollViewSDK9 extends HorizontalScrollView { + + public InternalHorizontalScrollViewSDK9(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, + int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, + scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + // Does all of the hard work... + OverscrollHelper.overScrollBy(PullToRefreshHorizontalScrollView.this, deltaX, scrollX, deltaY, scrollY, + getScrollRange(), isTouchEvent); + + return returnValue; + } + + /** + * Taken from the AOSP ScrollView source + */ + private int getScrollRange() { + int scrollRange = 0; + if (getChildCount() > 0) { + View child = getChildAt(0); + scrollRange = Math.max(0, child.getWidth() - (getWidth() - getPaddingLeft() - getPaddingRight())); + } + return scrollRange; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshListView.java new file mode 100644 index 0000000..df8f401 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshListView.java @@ -0,0 +1,337 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.util.AttributeSet; +import android.view.Gravity; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.ListAdapter; +import android.widget.ListView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.EmptyViewMethodAccessor; +import cn.shangyu.gdxzExpert.pulltorefreshview.internal.LoadingLayout; + +public class PullToRefreshListView extends PullToRefreshAdapterViewBase { + + private LoadingLayout mHeaderLoadingView; + private LoadingLayout mFooterLoadingView; + + private FrameLayout mLvFooterLoadingFrame; + + private boolean mListViewExtrasEnabled; + + public PullToRefreshListView(Context context) { + super(context); + } + + public PullToRefreshListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PullToRefreshListView(Context context, Mode mode) { + super(context, mode); + } + + public PullToRefreshListView(Context context, Mode mode, AnimationStyle style) { + super(context, mode, style); + } + + @Override + public final Orientation getPullToRefreshScrollDirection() { + return Orientation.VERTICAL; + } + + @Override + protected void onRefreshing(final boolean doScroll) { + /** + * If we're not showing the Refreshing view, or the list is empty, the + * the header/footer views won't show so we use the normal method. + */ + ListAdapter adapter = mRefreshableView.getAdapter(); + if (!mListViewExtrasEnabled || !getShowViewWhileRefreshing() || null == adapter || adapter.isEmpty()) { + super.onRefreshing(doScroll); + return; + } + + super.onRefreshing(false); + + final LoadingLayout origLoadingView, listViewLoadingView, oppositeListViewLoadingView; + final int selection, scrollToY; + + switch (getCurrentMode()) { + case MANUAL_REFRESH_ONLY: + case PULL_FROM_END: + origLoadingView = getFooterLayout(); + listViewLoadingView = mFooterLoadingView; + oppositeListViewLoadingView = mHeaderLoadingView; + selection = mRefreshableView.getCount() - 1; + scrollToY = getScrollY() - getFooterSize(); + break; + case PULL_FROM_START: + default: + origLoadingView = getHeaderLayout(); + listViewLoadingView = mHeaderLoadingView; + oppositeListViewLoadingView = mFooterLoadingView; + selection = 0; + scrollToY = getScrollY() + getHeaderSize(); + break; + } + + // Hide our original Loading View + origLoadingView.reset(); + origLoadingView.hideAllViews(); + + // Make sure the opposite end is hidden too + oppositeListViewLoadingView.setVisibility(View.GONE); + + // Show the ListView Loading View and set it to refresh. + listViewLoadingView.setVisibility(View.VISIBLE); + listViewLoadingView.refreshing(); + + if (doScroll) { + // We need to disable the automatic visibility changes for now + disableLoadingLayoutVisibilityChanges(); + + // We scroll slightly so that the ListView's header/footer is at the + // same Y position as our normal header/footer + setHeaderScroll(scrollToY); + + // Make sure the ListView is scrolled to show the loading + // header/footer + mRefreshableView.setSelection(selection); + + // Smooth scroll as normal + smoothScrollTo(0); + } + } + + @Override + protected void onReset() { + /** + * If the extras are not enabled, just call up to super and return. + */ + if (!mListViewExtrasEnabled) { + super.onReset(); + return; + } + + final LoadingLayout originalLoadingLayout, listViewLoadingLayout; + final int scrollToHeight, selection; + final boolean scrollLvToEdge; + + switch (getCurrentMode()) { + case MANUAL_REFRESH_ONLY: + case PULL_FROM_END: + originalLoadingLayout = getFooterLayout(); + listViewLoadingLayout = mFooterLoadingView; + selection = mRefreshableView.getCount() - 1; + scrollToHeight = getFooterSize(); + scrollLvToEdge = Math.abs(mRefreshableView.getLastVisiblePosition() - selection) <= 1; + break; + case PULL_FROM_START: + default: + originalLoadingLayout = getHeaderLayout(); + listViewLoadingLayout = mHeaderLoadingView; + scrollToHeight = -getHeaderSize(); + selection = 0; + scrollLvToEdge = Math.abs(mRefreshableView.getFirstVisiblePosition() - selection) <= 1; + break; + } + + // If the ListView header loading layout is showing, then we need to + // flip so that the original one is showing instead + if (listViewLoadingLayout.getVisibility() == View.VISIBLE) { + + // Set our Original View to Visible + originalLoadingLayout.showInvisibleViews(); + + // Hide the ListView Header/Footer + listViewLoadingLayout.setVisibility(View.GONE); + + /** + * Scroll so the View is at the same Y as the ListView + * header/footer, but only scroll if: we've pulled to refresh, it's + * positioned correctly + */ + if (scrollLvToEdge && getState() != State.MANUAL_REFRESHING) { + mRefreshableView.setSelection(selection); + setHeaderScroll(scrollToHeight); + } + } + + // Finally, call up to super + super.onReset(); + } + + @Override + protected LoadingLayoutProxy createLoadingLayoutProxy(final boolean includeStart, final boolean includeEnd) { + LoadingLayoutProxy proxy = super.createLoadingLayoutProxy(includeStart, includeEnd); + + if (mListViewExtrasEnabled) { + final Mode mode = getMode(); + + if (includeStart && mode.showHeaderLoadingLayout()) { + proxy.addLayout(mHeaderLoadingView); + } + if (includeEnd && mode.showFooterLoadingLayout()) { + proxy.addLayout(mFooterLoadingView); + } + } + + return proxy; + } + + protected ListView createListView(Context context, AttributeSet attrs) { + final ListView lv; + if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { + lv = new InternalListViewSDK9(context, attrs); + } else { + lv = new InternalListView(context, attrs); + } + return lv; + } + + @Override + protected ListView createRefreshableView(Context context, AttributeSet attrs) { + ListView lv = createListView(context, attrs); + + // Set it to this so it can be used in ListActivity/ListFragment + lv.setId(android.R.id.list); + return lv; + } + + @Override + protected void handleStyledAttributes(TypedArray a) { + super.handleStyledAttributes(a); + + mListViewExtrasEnabled = a.getBoolean(R.styleable.PullToRefresh_ptrListViewExtrasEnabled, true); + + if (mListViewExtrasEnabled) { + final FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.WRAP_CONTENT, Gravity.CENTER_HORIZONTAL); + + // Create Loading Views ready for use later + FrameLayout frame = new FrameLayout(getContext()); + mHeaderLoadingView = createLoadingLayout(getContext(), Mode.PULL_FROM_START, a); + mHeaderLoadingView.setVisibility(View.GONE); + frame.addView(mHeaderLoadingView, lp); + mRefreshableView.addHeaderView(frame, null, false); + + mLvFooterLoadingFrame = new FrameLayout(getContext()); + mFooterLoadingView = createLoadingLayout(getContext(), Mode.PULL_FROM_END, a); + mFooterLoadingView.setVisibility(View.GONE); + mLvFooterLoadingFrame.addView(mFooterLoadingView, lp); + + /** + * If the value for Scrolling While Refreshing hasn't been + * explicitly set via XML, enable Scrolling While Refreshing. + */ + if (!a.hasValue(R.styleable.PullToRefresh_ptrScrollingWhileRefreshingEnabled)) { + setScrollingWhileRefreshingEnabled(true); + } + } + } + + @TargetApi(9) + final class InternalListViewSDK9 extends InternalListView { + + public InternalListViewSDK9(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, + int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, + scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + // Does all of the hard work... + OverscrollHelper.overScrollBy(PullToRefreshListView.this, deltaX, scrollX, deltaY, scrollY, isTouchEvent); + + return returnValue; + } + } + + protected class InternalListView extends ListView implements EmptyViewMethodAccessor { + + private boolean mAddedLvFooter = false; + + public InternalListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + /** + * This is a bit hacky, but Samsung's ListView has got a bug in it + * when using Header/Footer Views and the list is empty. This masks + * the issue so that it doesn't cause an FC. See Issue #66. + */ + try { + super.dispatchDraw(canvas); + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + } + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + /** + * This is a bit hacky, but Samsung's ListView has got a bug in it + * when using Header/Footer Views and the list is empty. This masks + * the issue so that it doesn't cause an FC. See Issue #66. + */ + try { + return super.dispatchTouchEvent(ev); + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + return false; + } + } + + @Override + public void setAdapter(ListAdapter adapter) { + // Add the Footer View at the last possible moment + if (null != mLvFooterLoadingFrame && !mAddedLvFooter) { + addFooterView(mLvFooterLoadingFrame, null, false); + mAddedLvFooter = true; + } + + super.setAdapter(adapter); + } + + @Override + public void setEmptyView(View emptyView) { + PullToRefreshListView.this.setEmptyView(emptyView); + } + + @Override + public void setEmptyViewInternal(View emptyView) { + super.setEmptyView(emptyView); + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshScrollView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshScrollView.java new file mode 100644 index 0000000..b9b8bcf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshScrollView.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ScrollView; +import cn.shangyu.gdxzExpert.R; + +public class PullToRefreshScrollView extends PullToRefreshBase { + + public PullToRefreshScrollView(Context context) { + super(context); + } + + public PullToRefreshScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PullToRefreshScrollView(Context context, Mode mode) { + super(context, mode); + } + + public PullToRefreshScrollView(Context context, Mode mode, AnimationStyle style) { + super(context, mode, style); + } + + @Override + public final Orientation getPullToRefreshScrollDirection() { + return Orientation.VERTICAL; + } + + @Override + protected ScrollView createRefreshableView(Context context, AttributeSet attrs) { + ScrollView scrollView; + if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { + scrollView = new InternalScrollViewSDK9(context, attrs); + } else { + scrollView = new ScrollView(context, attrs); + } + + scrollView.setId(R.id.scrollview); + return scrollView; + } + + @Override + protected boolean isReadyForPullStart() { + return mRefreshableView.getScrollY() == 0; + } + + @Override + protected boolean isReadyForPullEnd() { + View scrollViewChild = mRefreshableView.getChildAt(0); + if (null != scrollViewChild) { + return mRefreshableView.getScrollY() >= (scrollViewChild.getHeight() - getHeight()); + } + return false; + } + + @TargetApi(9) + final class InternalScrollViewSDK9 extends ScrollView { + + public InternalScrollViewSDK9(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, + int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, + scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + // Does all of the hard work... + OverscrollHelper.overScrollBy(PullToRefreshScrollView.this, deltaX, scrollX, deltaY, scrollY, + getScrollRange(), isTouchEvent); + + return returnValue; + } + + /** + * Taken from the AOSP ScrollView source + */ + private int getScrollRange() { + int scrollRange = 0; + if (getChildCount() > 0) { + View child = getChildAt(0); + scrollRange = Math.max(0, child.getHeight() - (getHeight() - getPaddingBottom() - getPaddingTop())); + } + return scrollRange; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshWebView.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshWebView.java new file mode 100644 index 0000000..ba10226 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/PullToRefreshWebView.java @@ -0,0 +1,166 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview; + +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.os.Bundle; +import android.util.AttributeSet; +import android.util.FloatMath; +import android.webkit.WebChromeClient; +import android.webkit.WebView; +import cn.shangyu.gdxzExpert.R; + +public class PullToRefreshWebView extends PullToRefreshBase { + + private static final OnRefreshListener defaultOnRefreshListener = new OnRefreshListener() { + + @Override + public void onRefresh(PullToRefreshBase refreshView) { + refreshView.getRefreshableView().reload(); + } + + }; + + private final WebChromeClient defaultWebChromeClient = new WebChromeClient() { + + @Override + public void onProgressChanged(WebView view, int newProgress) { + if (newProgress == 100) { + onRefreshComplete(); + } + } + + }; + + public PullToRefreshWebView(Context context) { + super(context); + + /** + * Added so that by default, Pull-to-Refresh refreshes the page + */ + setOnRefreshListener(defaultOnRefreshListener); + mRefreshableView.setWebChromeClient(defaultWebChromeClient); + } + + public PullToRefreshWebView(Context context, AttributeSet attrs) { + super(context, attrs); + + /** + * Added so that by default, Pull-to-Refresh refreshes the page + */ + setOnRefreshListener(defaultOnRefreshListener); + mRefreshableView.setWebChromeClient(defaultWebChromeClient); + } + + public PullToRefreshWebView(Context context, Mode mode) { + super(context, mode); + + /** + * Added so that by default, Pull-to-Refresh refreshes the page + */ + setOnRefreshListener(defaultOnRefreshListener); + mRefreshableView.setWebChromeClient(defaultWebChromeClient); + } + + public PullToRefreshWebView(Context context, Mode mode, AnimationStyle style) { + super(context, mode, style); + + /** + * Added so that by default, Pull-to-Refresh refreshes the page + */ + setOnRefreshListener(defaultOnRefreshListener); + mRefreshableView.setWebChromeClient(defaultWebChromeClient); + } + + @Override + public final Orientation getPullToRefreshScrollDirection() { + return Orientation.VERTICAL; + } + + @Override + protected WebView createRefreshableView(Context context, AttributeSet attrs) { + WebView webView; + if (VERSION.SDK_INT >= VERSION_CODES.GINGERBREAD) { + webView = new InternalWebViewSDK9(context, attrs); + } else { + webView = new WebView(context, attrs); + } + + webView.setId(R.id.webview); + return webView; + } + + @Override + protected boolean isReadyForPullStart() { + return mRefreshableView.getScrollY() == 0; + } + + @Override + protected boolean isReadyForPullEnd() { + float exactContentHeight = (float) Math.floor(mRefreshableView.getContentHeight() * mRefreshableView.getScale()); + return mRefreshableView.getScrollY() >= (exactContentHeight - mRefreshableView.getHeight()); + } + + @Override + protected void onPtrRestoreInstanceState(Bundle savedInstanceState) { + super.onPtrRestoreInstanceState(savedInstanceState); + mRefreshableView.restoreState(savedInstanceState); + } + + @Override + protected void onPtrSaveInstanceState(Bundle saveState) { + super.onPtrSaveInstanceState(saveState); + mRefreshableView.saveState(saveState); + } + + @TargetApi(9) + final class InternalWebViewSDK9 extends WebView { + + // WebView doesn't always scroll back to it's edge so we add some + // fuzziness + static final int OVERSCROLL_FUZZY_THRESHOLD = 2; + + // WebView seems quite reluctant to overscroll so we use the scale + // factor to scale it's value + static final float OVERSCROLL_SCALE_FACTOR = 1.5f; + + public InternalWebViewSDK9(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, + int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { + + final boolean returnValue = super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, + scrollRangeY, maxOverScrollX, maxOverScrollY, isTouchEvent); + + // Does all of the hard work... + OverscrollHelper.overScrollBy(PullToRefreshWebView.this, deltaX, scrollX, deltaY, scrollY, + getScrollRange(), OVERSCROLL_FUZZY_THRESHOLD, OVERSCROLL_SCALE_FACTOR, isTouchEvent); + + return returnValue; + } + + private int getScrollRange() { + return (int) Math.max(0, Math.floor(mRefreshableView.getContentHeight() * mRefreshableView.getScale()) + - (getHeight() - getPaddingBottom() - getPaddingTop())); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/PullToRefreshWebView2.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/PullToRefreshWebView2.java new file mode 100644 index 0000000..768fed5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/PullToRefreshWebView2.java @@ -0,0 +1,131 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.extras; + +import java.util.concurrent.atomic.AtomicBoolean; + +import android.content.Context; +import android.util.AttributeSet; +import android.webkit.WebView; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshWebView; + +/** + * An advanced version of {@link PullToRefreshWebView} which delegates the + * triggering of the PullToRefresh gesture to the Javascript running within the + * WebView. This means that you should only use this class if: + *

+ *

    + *
  • {@link PullToRefreshWebView} doesn't work correctly because you're using + * overflow:scroll or something else which means + * {@link WebView#getScrollY()} doesn't return correct values.
  • + *
  • You control the web content being displayed, as you need to write some + * Javascript callbacks.
  • + *
+ *

+ *

+ * The way this call works is that when a PullToRefresh gesture is in action, + * the following Javascript methods will be called: + * isReadyForPullDown() and isReadyForPullUp(), it is + * your job to calculate whether the view is in a state where a PullToRefresh + * can happen, and return the result via the callback mechanism. An example can + * be seen below: + *

+ * + *

+ * function isReadyForPullDown() {
+ *   var result = ...  // Probably using the .scrollTop DOM attribute
+ *   ptr.isReadyForPullDownResponse(result);
+ * }
+ * 
+ * function isReadyForPullUp() {
+ *   var result = ...  // Probably using the .scrollBottom DOM attribute
+ *   ptr.isReadyForPullUpResponse(result);
+ * }
+ * 
+ * + * @author Chris Banes + */ +public class PullToRefreshWebView2 extends PullToRefreshWebView { + + static final String JS_INTERFACE_PKG = "ptr"; + static final String DEF_JS_READY_PULL_DOWN_CALL = "javascript:isReadyForPullDown();"; + static final String DEF_JS_READY_PULL_UP_CALL = "javascript:isReadyForPullUp();"; + + public PullToRefreshWebView2(Context context) { + super(context); + } + + public PullToRefreshWebView2(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public PullToRefreshWebView2(Context context, Mode mode) { + super(context, mode); + } + + private JsValueCallback mJsCallback; + private final AtomicBoolean mIsReadyForPullDown = new AtomicBoolean(false); + private final AtomicBoolean mIsReadyForPullUp = new AtomicBoolean(false); + + @Override + protected WebView createRefreshableView(Context context, AttributeSet attrs) { + WebView webView = super.createRefreshableView(context, attrs); + + // Need to add JS Interface so we can get the response back + mJsCallback = new JsValueCallback(); + webView.addJavascriptInterface(mJsCallback, JS_INTERFACE_PKG); + + return webView; + } + + @Override + protected boolean isReadyForPullStart() { + // Call Javascript... + getRefreshableView().loadUrl(DEF_JS_READY_PULL_DOWN_CALL); + + // Response will be given to JsValueCallback, which will update + // mIsReadyForPullDown + + return mIsReadyForPullDown.get(); + } + + @Override + protected boolean isReadyForPullEnd() { + // Call Javascript... + getRefreshableView().loadUrl(DEF_JS_READY_PULL_UP_CALL); + + // Response will be given to JsValueCallback, which will update + // mIsReadyForPullUp + + return mIsReadyForPullUp.get(); + } + + /** + * Used for response from Javascript + * + * @author Chris Banes + */ + final class JsValueCallback { + + public void isReadyForPullUpResponse(boolean response) { + mIsReadyForPullUp.set(response); + } + + public void isReadyForPullDownResponse(boolean response) { + mIsReadyForPullDown.set(response); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/SoundPullEventListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/SoundPullEventListener.java new file mode 100644 index 0000000..de09caf --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/extras/SoundPullEventListener.java @@ -0,0 +1,95 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.extras; + +import java.util.HashMap; + +import android.content.Context; +import android.media.MediaPlayer; +import android.view.View; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.State; + +public class SoundPullEventListener implements PullToRefreshBase.OnPullEventListener { + + private final Context mContext; + private final HashMap mSoundMap; + + private MediaPlayer mCurrentMediaPlayer; + + /** + * Constructor + * + * @param context - Context + */ + public SoundPullEventListener(Context context) { + mContext = context; + mSoundMap = new HashMap(); + } + + @Override + public final void onPullEvent(PullToRefreshBase refreshView, State event, Mode direction) { + Integer soundResIdObj = mSoundMap.get(event); + if (null != soundResIdObj) { + playSound(soundResIdObj.intValue()); + } + } + + /** + * Set the Sounds to be played when a Pull Event happens. You specify which + * sound plays for which events by calling this method multiple times for + * each event. + *

+ * If you've already set a sound for a certain event, and add another sound + * for that event, only the new sound will be played. + * + * @param event - The event for which the sound will be played. + * @param resId - Resource Id of the sound file to be played (e.g. + * R.raw.pull_sound) + */ + public void addSoundEvent(State event, int resId) { + mSoundMap.put(event, resId); + } + + /** + * Clears all of the previously set sounds and events. + */ + public void clearSounds() { + mSoundMap.clear(); + } + + /** + * Gets the current (or last) MediaPlayer instance. + */ + public MediaPlayer getCurrentMediaPlayer() { + return mCurrentMediaPlayer; + } + + private void playSound(int resId) { + // Stop current player, if there's one playing + if (null != mCurrentMediaPlayer) { + mCurrentMediaPlayer.stop(); + mCurrentMediaPlayer.release(); + } + + mCurrentMediaPlayer = MediaPlayer.create(mContext, resId); + if (null != mCurrentMediaPlayer) { + mCurrentMediaPlayer.start(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/EmptyViewMethodAccessor.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/EmptyViewMethodAccessor.java new file mode 100644 index 0000000..d6f2d6d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/EmptyViewMethodAccessor.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.view.View; + +/** + * Interface that allows PullToRefreshBase to hijack the call to + * AdapterView.setEmptyView() + * + * @author chris + */ +public interface EmptyViewMethodAccessor { + + /** + * Calls upto AdapterView.setEmptyView() + * + * @param emptyView - to set as Empty View + */ + public void setEmptyViewInternal(View emptyView); + + /** + * Should call PullToRefreshBase.setEmptyView() which will then + * automatically call through to setEmptyViewInternal() + * + * @param emptyView - to set as Empty View + */ + public void setEmptyView(View emptyView); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/FlipLoadingLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/FlipLoadingLayout.java new file mode 100644 index 0000000..cb63809 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/FlipLoadingLayout.java @@ -0,0 +1,145 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Matrix; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageView.ScaleType; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Orientation; + +@SuppressLint("ViewConstructor") +public class FlipLoadingLayout extends LoadingLayout { + + static final int FLIP_ANIMATION_DURATION = 150; + + private final Animation mRotateAnimation, mResetRotateAnimation; + + public FlipLoadingLayout(Context context, final Mode mode, final Orientation scrollDirection, TypedArray attrs) { + super(context, mode, scrollDirection, attrs); + + final int rotateAngle = mode == Mode.PULL_FROM_START ? -180 : 180; + + mRotateAnimation = new RotateAnimation(0, rotateAngle, Animation.RELATIVE_TO_SELF, 0.5f, + Animation.RELATIVE_TO_SELF, 0.5f); + mRotateAnimation.setInterpolator(ANIMATION_INTERPOLATOR); + mRotateAnimation.setDuration(FLIP_ANIMATION_DURATION); + mRotateAnimation.setFillAfter(true); + + mResetRotateAnimation = new RotateAnimation(rotateAngle, 0, Animation.RELATIVE_TO_SELF, 0.5f, + Animation.RELATIVE_TO_SELF, 0.5f); + mResetRotateAnimation.setInterpolator(ANIMATION_INTERPOLATOR); + mResetRotateAnimation.setDuration(FLIP_ANIMATION_DURATION); + mResetRotateAnimation.setFillAfter(true); + } + + @Override + protected void onLoadingDrawableSet(Drawable imageDrawable) { + if (null != imageDrawable) { + final int dHeight = imageDrawable.getIntrinsicHeight(); + final int dWidth = imageDrawable.getIntrinsicWidth(); + + /** + * We need to set the width/height of the ImageView so that it is + * square with each side the size of the largest drawable dimension. + * This is so that it doesn't clip when rotated. + */ + ViewGroup.LayoutParams lp = mHeaderImage.getLayoutParams(); + lp.width = lp.height = Math.max(dHeight, dWidth); + mHeaderImage.requestLayout(); + + /** + * We now rotate the Drawable so that is at the correct rotation, + * and is centered. + */ + mHeaderImage.setScaleType(ScaleType.MATRIX); + Matrix matrix = new Matrix(); + matrix.postTranslate((lp.width - dWidth) / 2f, (lp.height - dHeight) / 2f); + matrix.postRotate(getDrawableRotationAngle(), lp.width / 2f, lp.height / 2f); + mHeaderImage.setImageMatrix(matrix); + } + } + + @Override + protected void onPullImpl(float scaleOfLayout) { + // NO-OP + } + + @Override + protected void pullToRefreshImpl() { + // Only start reset Animation, we've previously show the rotate anim + if (mRotateAnimation == mHeaderImage.getAnimation()) { + mHeaderImage.startAnimation(mResetRotateAnimation); + } + } + + @Override + protected void refreshingImpl() { + mHeaderImage.clearAnimation(); + mHeaderImage.setVisibility(View.INVISIBLE); + mHeaderProgress.setVisibility(View.VISIBLE); + } + + @Override + protected void releaseToRefreshImpl() { + mHeaderImage.startAnimation(mRotateAnimation); + } + + @Override + protected void resetImpl() { + mHeaderImage.clearAnimation(); + mHeaderProgress.setVisibility(View.GONE); + mHeaderImage.setVisibility(View.VISIBLE); + } + + @Override + protected int getDefaultDrawableResId() { + return R.drawable.default_ptr_flip; + } + + private float getDrawableRotationAngle() { + float angle = 0f; + switch (mMode) { + case PULL_FROM_END: + if (mScrollDirection == Orientation.HORIZONTAL) { + angle = 90f; + } else { + angle = 180f; + } + break; + + case PULL_FROM_START: + if (mScrollDirection == Orientation.HORIZONTAL) { + angle = 270f; + } + break; + + default: + break; + } + + return angle; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/IndicatorLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/IndicatorLayout.java new file mode 100644 index 0000000..d91e252 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/IndicatorLayout.java @@ -0,0 +1,146 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.graphics.Matrix; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.Animation.AnimationListener; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; +import android.view.animation.RotateAnimation; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ImageView.ScaleType; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; + +@SuppressLint("ViewConstructor") +public class IndicatorLayout extends FrameLayout implements AnimationListener { + + static final int DEFAULT_ROTATION_ANIMATION_DURATION = 150; + + private Animation mInAnim, mOutAnim; + private ImageView mArrowImageView; + + private final Animation mRotateAnimation, mResetRotateAnimation; + + public IndicatorLayout(Context context, PullToRefreshBase.Mode mode) { + super(context); + mArrowImageView = new ImageView(context); + + Drawable arrowD = getResources().getDrawable(R.drawable.indicator_arrow); + mArrowImageView.setImageDrawable(arrowD); + + final int padding = getResources().getDimensionPixelSize(R.dimen.indicator_internal_padding); + mArrowImageView.setPadding(padding, padding, padding, padding); + addView(mArrowImageView); + + int inAnimResId, outAnimResId; + switch (mode) { + case PULL_FROM_END: + inAnimResId = R.anim.slide_in_from_bottom; + outAnimResId = R.anim.slide_out_to_bottom; + setBackgroundResource(R.drawable.indicator_bg_bottom); + + // Rotate Arrow so it's pointing the correct way + mArrowImageView.setScaleType(ScaleType.MATRIX); + Matrix matrix = new Matrix(); + matrix.setRotate(180f, arrowD.getIntrinsicWidth() / 2f, arrowD.getIntrinsicHeight() / 2f); + mArrowImageView.setImageMatrix(matrix); + break; + default: + case PULL_FROM_START: + inAnimResId = R.anim.slide_in_from_top; + outAnimResId = R.anim.slide_out_to_top; + setBackgroundResource(R.drawable.indicator_bg_top); + break; + } + + mInAnim = AnimationUtils.loadAnimation(context, inAnimResId); + mInAnim.setAnimationListener(this); + + mOutAnim = AnimationUtils.loadAnimation(context, outAnimResId); + mOutAnim.setAnimationListener(this); + + final Interpolator interpolator = new LinearInterpolator(); + mRotateAnimation = new RotateAnimation(0, -180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + mRotateAnimation.setInterpolator(interpolator); + mRotateAnimation.setDuration(DEFAULT_ROTATION_ANIMATION_DURATION); + mRotateAnimation.setFillAfter(true); + + mResetRotateAnimation = new RotateAnimation(-180, 0, Animation.RELATIVE_TO_SELF, 0.5f, + Animation.RELATIVE_TO_SELF, 0.5f); + mResetRotateAnimation.setInterpolator(interpolator); + mResetRotateAnimation.setDuration(DEFAULT_ROTATION_ANIMATION_DURATION); + mResetRotateAnimation.setFillAfter(true); + + } + + public final boolean isVisible() { + Animation currentAnim = getAnimation(); + if (null != currentAnim) { + return mInAnim == currentAnim; + } + + return getVisibility() == View.VISIBLE; + } + + public void hide() { + startAnimation(mOutAnim); + } + + public void show() { + mArrowImageView.clearAnimation(); + startAnimation(mInAnim); + } + + @Override + public void onAnimationEnd(Animation animation) { + if (animation == mOutAnim) { + mArrowImageView.clearAnimation(); + setVisibility(View.GONE); + } else if (animation == mInAnim) { + setVisibility(View.VISIBLE); + } + + clearAnimation(); + } + + @Override + public void onAnimationRepeat(Animation animation) { + // NO-OP + } + + @Override + public void onAnimationStart(Animation animation) { + setVisibility(View.VISIBLE); + } + + public void releaseToRefresh() { + mArrowImageView.startAnimation(mRotateAnimation); + } + + public void pullToRefresh() { + mArrowImageView.startAnimation(mResetRotateAnimation); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayout.java new file mode 100644 index 0000000..ae51bad --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayout.java @@ -0,0 +1,394 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.Typeface; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.Interpolator; +import android.view.animation.LinearInterpolator; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.ILoadingLayout; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Orientation; + +@SuppressLint("ViewConstructor") +public abstract class LoadingLayout extends FrameLayout implements ILoadingLayout { + + static final String LOG_TAG = "PullToRefresh-LoadingLayout"; + + static final Interpolator ANIMATION_INTERPOLATOR = new LinearInterpolator(); + + private FrameLayout mInnerLayout; + + protected final ImageView mHeaderImage; + protected final ProgressBar mHeaderProgress; + + private boolean mUseIntrinsicAnimation; + + private final TextView mHeaderText; + private final TextView mSubHeaderText; + + protected final Mode mMode; + protected final Orientation mScrollDirection; + + private CharSequence mPullLabel; + private CharSequence mRefreshingLabel; + private CharSequence mReleaseLabel; + + @SuppressWarnings("deprecation") + public LoadingLayout(Context context, final Mode mode, final Orientation scrollDirection, TypedArray attrs) { + super(context); + mMode = mode; + mScrollDirection = scrollDirection; + + switch (scrollDirection) { + case HORIZONTAL: + LayoutInflater.from(context).inflate(R.layout.pull_to_refresh_header_horizontal, this); + break; + case VERTICAL: + default: + LayoutInflater.from(context).inflate(R.layout.pull_to_refresh_header_vertical, this); + break; + } + + mInnerLayout = (FrameLayout) findViewById(R.id.fl_inner); + mHeaderText = (TextView) mInnerLayout.findViewById(R.id.pull_to_refresh_text); + mHeaderProgress = (ProgressBar) mInnerLayout.findViewById(R.id.pull_to_refresh_progress); + mSubHeaderText = (TextView) mInnerLayout.findViewById(R.id.pull_to_refresh_sub_text); + mHeaderImage = (ImageView) mInnerLayout.findViewById(R.id.pull_to_refresh_image); + + LayoutParams lp = (LayoutParams) mInnerLayout.getLayoutParams(); + + switch (mode) { + case PULL_FROM_END: + lp.gravity = scrollDirection == Orientation.VERTICAL ? Gravity.TOP : Gravity.LEFT; + + // Load in labels + mPullLabel = context.getString(R.string.pull_to_refresh_from_bottom_pull_labels); + mRefreshingLabel = context.getString(R.string.pull_to_refresh_from_bottom_refreshing_labels); + mReleaseLabel = context.getString(R.string.pull_to_refresh_from_bottom_release_labels); + break; + + case PULL_FROM_START: + default: + lp.gravity = scrollDirection == Orientation.VERTICAL ? Gravity.BOTTOM : Gravity.RIGHT; + + // Load in labels + mPullLabel = context.getString(R.string.pull_to_refresh_pull_labels); + mRefreshingLabel = context.getString(R.string.pull_to_refresh_refreshing_labels); + mReleaseLabel = context.getString(R.string.pull_to_refresh_release_labels); + break; + } + + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderBackground)) { + Drawable background = attrs.getDrawable(R.styleable.PullToRefresh_ptrHeaderBackground); + if (null != background) { + ViewCompat.setBackground(this, background); + } + } + + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderTextAppearance)) { + TypedValue styleID = new TypedValue(); + attrs.getValue(R.styleable.PullToRefresh_ptrHeaderTextAppearance, styleID); + setTextAppearance(styleID.data); + } + if (attrs.hasValue(R.styleable.PullToRefresh_ptrSubHeaderTextAppearance)) { + TypedValue styleID = new TypedValue(); + attrs.getValue(R.styleable.PullToRefresh_ptrSubHeaderTextAppearance, styleID); + setSubTextAppearance(styleID.data); + } + + // Text Color attrs need to be set after TextAppearance attrs + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderTextColor)) { + ColorStateList colors = attrs.getColorStateList(R.styleable.PullToRefresh_ptrHeaderTextColor); + if (null != colors) { + setTextColor(colors); + } + } + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderSubTextColor)) { + ColorStateList colors = attrs.getColorStateList(R.styleable.PullToRefresh_ptrHeaderSubTextColor); + if (null != colors) { + setSubTextColor(colors); + } + } + + // Try and get defined drawable from Attrs + Drawable imageDrawable = null; + if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawable)) { + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawable); + } + + // Check Specific Drawable from Attrs, these overrite the generic + // drawable attr above + switch (mode) { + case PULL_FROM_START: + default: + if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableStart)) { + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableStart); + } else if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableTop)) { + Utils.warnDeprecation("ptrDrawableTop", "ptrDrawableStart"); + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableTop); + } + break; + + case PULL_FROM_END: + if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableEnd)) { + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableEnd); + } else if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableBottom)) { + Utils.warnDeprecation("ptrDrawableBottom", "ptrDrawableEnd"); + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableBottom); + } + break; + } + + // If we don't have a user defined drawable, load the default + if (null == imageDrawable) { + imageDrawable = context.getResources().getDrawable(getDefaultDrawableResId()); + } + + // Set Drawable, and save width/height + setLoadingDrawable(imageDrawable); + + reset(); + } + + public final void setHeight(int height) { + ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) getLayoutParams(); + lp.height = height; + requestLayout(); + } + + public final void setWidth(int width) { + ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) getLayoutParams(); + lp.width = width; + requestLayout(); + } + + public final int getContentSize() { + switch (mScrollDirection) { + case HORIZONTAL: + return mInnerLayout.getWidth(); + case VERTICAL: + default: + return mInnerLayout.getHeight(); + } + } + + public final void hideAllViews() { + if (View.VISIBLE == mHeaderText.getVisibility()) { + mHeaderText.setVisibility(View.INVISIBLE); + } + if (View.VISIBLE == mHeaderProgress.getVisibility()) { + mHeaderProgress.setVisibility(View.INVISIBLE); + } + if (View.VISIBLE == mHeaderImage.getVisibility()) { + mHeaderImage.setVisibility(View.INVISIBLE); + } + if (View.VISIBLE == mSubHeaderText.getVisibility()) { + mSubHeaderText.setVisibility(View.INVISIBLE); + } + } + + public final void onPull(float scaleOfLayout) { + if (!mUseIntrinsicAnimation) { + onPullImpl(scaleOfLayout); + } + } + + public final void pullToRefresh() { + if (null != mHeaderText) { + mHeaderText.setText(mPullLabel); + } + + // Now call the callback + pullToRefreshImpl(); + } + + public final void refreshing() { + if (null != mHeaderText) { + mHeaderText.setText(mRefreshingLabel); + } + + if (mUseIntrinsicAnimation) { + ((AnimationDrawable) mHeaderImage.getDrawable()).start(); + } else { + // Now call the callback + refreshingImpl(); + } + + if (null != mSubHeaderText) { + mSubHeaderText.setVisibility(View.GONE); + } + } + + public final void releaseToRefresh() { + if (null != mHeaderText) { + mHeaderText.setText(mReleaseLabel); + } + + // Now call the callback + releaseToRefreshImpl(); + } + + public final void reset() { + if (null != mHeaderText) { + mHeaderText.setText(mPullLabel); + } + mHeaderImage.setVisibility(View.VISIBLE); + + if (mUseIntrinsicAnimation) { + ((AnimationDrawable) mHeaderImage.getDrawable()).stop(); + } else { + // Now call the callback + resetImpl(); + } + + if (null != mSubHeaderText) { + if (TextUtils.isEmpty(mSubHeaderText.getText())) { + mSubHeaderText.setVisibility(View.GONE); + } else { + mSubHeaderText.setVisibility(View.VISIBLE); + } + } + } + + @Override + public void setLastUpdatedLabel(CharSequence label) { + setSubHeaderText(label); + } + + public final void setLoadingDrawable(Drawable imageDrawable) { + // Set Drawable + mHeaderImage.setImageDrawable(imageDrawable); + mUseIntrinsicAnimation = (imageDrawable instanceof AnimationDrawable); + + // Now call the callback + onLoadingDrawableSet(imageDrawable); + } + + public void setPullLabel(CharSequence pullLabel) { + mPullLabel = pullLabel; + } + + public void setRefreshingLabel(CharSequence refreshingLabel) { + mRefreshingLabel = refreshingLabel; + } + + public void setReleaseLabel(CharSequence releaseLabel) { + mReleaseLabel = releaseLabel; + } + + @Override + public void setTextTypeface(Typeface tf) { + mHeaderText.setTypeface(tf); + } + + public final void showInvisibleViews() { + if (View.INVISIBLE == mHeaderText.getVisibility()) { + mHeaderText.setVisibility(View.VISIBLE); + } + if (View.INVISIBLE == mHeaderProgress.getVisibility()) { + mHeaderProgress.setVisibility(View.VISIBLE); + } + if (View.INVISIBLE == mHeaderImage.getVisibility()) { + mHeaderImage.setVisibility(View.VISIBLE); + } + if (View.INVISIBLE == mSubHeaderText.getVisibility()) { + mSubHeaderText.setVisibility(View.VISIBLE); + } + } + + /** + * Callbacks for derivative Layouts + */ + + protected abstract int getDefaultDrawableResId(); + + protected abstract void onLoadingDrawableSet(Drawable imageDrawable); + + protected abstract void onPullImpl(float scaleOfLayout); + + protected abstract void pullToRefreshImpl(); + + protected abstract void refreshingImpl(); + + protected abstract void releaseToRefreshImpl(); + + protected abstract void resetImpl(); + + private void setSubHeaderText(CharSequence label) { + if (null != mSubHeaderText) { + if (TextUtils.isEmpty(label)) { + mSubHeaderText.setVisibility(View.GONE); + } else { + mSubHeaderText.setText(label); + + // Only set it to Visible if we're GONE, otherwise VISIBLE will + // be set soon + if (View.GONE == mSubHeaderText.getVisibility()) { + mSubHeaderText.setVisibility(View.VISIBLE); + } + } + } + } + + private void setSubTextAppearance(int value) { + if (null != mSubHeaderText) { + mSubHeaderText.setTextAppearance(getContext(), value); + } + } + + private void setSubTextColor(ColorStateList color) { + if (null != mSubHeaderText) { + mSubHeaderText.setTextColor(color); + } + } + + private void setTextAppearance(int value) { + if (null != mHeaderText) { + mHeaderText.setTextAppearance(getContext(), value); + } + if (null != mSubHeaderText) { + mSubHeaderText.setTextAppearance(getContext(), value); + } + } + + private void setTextColor(ColorStateList color) { + if (null != mHeaderText) { + mHeaderText.setTextColor(color); + } + if (null != mSubHeaderText) { + mSubHeaderText.setTextColor(color); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayoutNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayoutNew.java new file mode 100644 index 0000000..0c36a9b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/LoadingLayoutNew.java @@ -0,0 +1,383 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.res.ColorStateList; +import android.content.res.TypedArray; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.TypedValue; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +@SuppressLint("ViewConstructor") +public abstract class LoadingLayoutNew extends FrameLayout { + + static final String LOG_TAG = "PullToRefresh-LoadingLayout"; + + + private LinearLayout mInnerLayout; + + protected final ImageView mHeaderImage; + protected final ProgressBar mHeaderProgress; + + private boolean mUseIntrinsicAnimation; + + private final TextView mHeaderText; + private final TextView mSubHeaderText; + + + private CharSequence mPullLabel; + private CharSequence mRefreshingLabel; + private CharSequence mReleaseLabel; + + @SuppressWarnings("deprecation") + public LoadingLayoutNew(Context context, TypedArray attrs1,Boolean header) { + super(context); + TypedArray attrs = context.obtainStyledAttributes(R.styleable.PullToRefresh); + LayoutInflater.from(context).inflate(R.layout.pull_to_refresh_header_vertical_new, this); + mInnerLayout = findViewById(R.id.fl_inner); + mHeaderText = (TextView) mInnerLayout.findViewById(R.id.pull_to_refresh_text); + mHeaderProgress = (ProgressBar) mInnerLayout.findViewById(R.id.pull_to_refresh_progress); + mSubHeaderText = (TextView) mInnerLayout.findViewById(R.id.pull_to_refresh_sub_text); + mHeaderImage = (ImageView) mInnerLayout.findViewById(R.id.pull_to_refresh_image); + +// LayoutParams lp = (LayoutParams) mInnerLayout.getLayoutParams(); + String text = CommonUtil.getStringDate(); + mSubHeaderText.setText(text); +// switch (mode) { +// case PULL_FROM_END: +// lp.gravity = Gravity.CENTER ; + // Load in labels + if(!header) + { + mPullLabel = context.getString(R.string.pull_to_refresh_from_bottom_pull_labels); + mRefreshingLabel = context.getString(R.string.pull_to_refresh_from_bottom_refreshing_labels); + mReleaseLabel = context.getString(R.string.pull_to_refresh_from_bottom_release_labels); + } + else + { + mPullLabel = context.getString(R.string.pull_to_refresh_pull_labels); + mRefreshingLabel = context.getString(R.string.pull_to_refresh_refreshing_labels); + mReleaseLabel = context.getString(R.string.pull_to_refresh_release_labels); + } + +// break; +// +// case PULL_FROM_START: +// default: +// lp.gravity = scrollDirection == Orientation.VERTICAL ? Gravity.BOTTOM : Gravity.RIGHT; +// +// // Load in labels +// +// break; +// } + + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderBackground)) { + Drawable background = attrs.getDrawable(R.styleable.PullToRefresh_ptrHeaderBackground); + if (null != background) { + ViewCompat.setBackground(this, background); + } + } + + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderTextAppearance)) { + TypedValue styleID = new TypedValue(); + attrs.getValue(R.styleable.PullToRefresh_ptrHeaderTextAppearance, styleID); + setTextAppearance(styleID.data); + } + if (attrs.hasValue(R.styleable.PullToRefresh_ptrSubHeaderTextAppearance)) { + TypedValue styleID = new TypedValue(); + attrs.getValue(R.styleable.PullToRefresh_ptrSubHeaderTextAppearance, styleID); + setSubTextAppearance(styleID.data); + } + + // Text Color attrs need to be set after TextAppearance attrs + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderTextColor)) { + ColorStateList colors = attrs.getColorStateList(R.styleable.PullToRefresh_ptrHeaderTextColor); + if (null != colors) { + setTextColor(colors); + } + } + if (attrs.hasValue(R.styleable.PullToRefresh_ptrHeaderSubTextColor)) { + ColorStateList colors = attrs.getColorStateList(R.styleable.PullToRefresh_ptrHeaderSubTextColor); + if (null != colors) { + setSubTextColor(colors); + } + } + + // Try and get defined drawable from Attrs + Drawable imageDrawable = null; + if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawable)) { + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawable); + } + + // Check Specific Drawable from Attrs, these overrite the generic + // drawable attr above +// switch (mode) { +// case PULL_FROM_START: +// default: + if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableStart)) { + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableStart); + } else if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableTop)) { + Utils.warnDeprecation("ptrDrawableTop", "ptrDrawableStart"); + imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableTop); + } +// break; +// +// case PULL_FROM_END: +// if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableEnd)) { +// imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableEnd); +// } else if (attrs.hasValue(R.styleable.PullToRefresh_ptrDrawableBottom)) { +// Utils.warnDeprecation("ptrDrawableBottom", "ptrDrawableEnd"); +// imageDrawable = attrs.getDrawable(R.styleable.PullToRefresh_ptrDrawableBottom); +// } +// break; +// } + + // If we don't have a user defined drawable, load the default + if (null == imageDrawable) { + imageDrawable = context.getResources().getDrawable(getDefaultDrawableResId()); + } + + // Set Drawable, and save width/height + setLoadingDrawable(imageDrawable); + + reset(); + } + + public final void setHeight(int height) { + ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) getLayoutParams(); + lp.height = height; + requestLayout(); + } + + public final void setWidth(int width) { + ViewGroup.LayoutParams lp = (ViewGroup.LayoutParams) getLayoutParams(); + lp.width = width; + requestLayout(); + } + +// public final int getContentSize() { +// switch (mScrollDirection) { +// case HORIZONTAL: +// return mInnerLayout.getWidth(); +// case VERTICAL: +// default: +// return mInnerLayout.getHeight(); +// } +// } + + public final void hideAllViews() { + if (View.VISIBLE == mHeaderText.getVisibility()) { + mHeaderText.setVisibility(View.INVISIBLE); + } + if (View.VISIBLE == mHeaderProgress.getVisibility()) { + mHeaderProgress.setVisibility(View.INVISIBLE); + } + if (View.VISIBLE == mHeaderImage.getVisibility()) { + mHeaderImage.setVisibility(View.INVISIBLE); + } + if (View.VISIBLE == mSubHeaderText.getVisibility()) { + mSubHeaderText.setVisibility(View.INVISIBLE); + } + } + + public final void onPull(float scaleOfLayout) { + if (!mUseIntrinsicAnimation) { + onPullImpl(scaleOfLayout); + } + } + + public final void pullToRefresh() { + if (null != mHeaderText) { + mHeaderText.setText(mPullLabel); + } + + // Now call the callback + pullToRefreshImpl(); + } + + public final void refreshing() { + if (null != mHeaderText) { + mHeaderText.setText(mRefreshingLabel); + } + + if (mUseIntrinsicAnimation) { + ((AnimationDrawable) mHeaderImage.getDrawable()).start(); + } else { + // Now call the callback + refreshingImpl(); + } + + if (null != mSubHeaderText) { + mSubHeaderText.setVisibility(View.GONE); + } + } + + public final void releaseToRefresh() { + if (null != mHeaderText) { + mHeaderText.setText(mReleaseLabel); + } + + // Now call the callback + releaseToRefreshImpl(); + } + + public final void reset() { + if (null != mHeaderText) { + mHeaderText.setText(mPullLabel); + } + mHeaderImage.setVisibility(View.VISIBLE); + + if (mUseIntrinsicAnimation) { + ((AnimationDrawable) mHeaderImage.getDrawable()).stop(); + } else { + // Now call the callback + resetImpl(); + } + + if (null != mSubHeaderText) { + if (TextUtils.isEmpty(mSubHeaderText.getText())) { + mSubHeaderText.setVisibility(View.GONE); + } else { + mSubHeaderText.setVisibility(View.VISIBLE); + } + } + } +// +// @Override +// public void setLastUpdatedLabel(CharSequence label) { +// setSubHeaderText(label); +// } + + public final void setLoadingDrawable(Drawable imageDrawable) { + // Set Drawable + mHeaderImage.setImageDrawable(imageDrawable); + mUseIntrinsicAnimation = (imageDrawable instanceof AnimationDrawable); + + // Now call the callback + onLoadingDrawableSet(imageDrawable); + } + + public void setPullLabel(CharSequence pullLabel) { + mPullLabel = pullLabel; + } + + public void setRefreshingLabel(CharSequence refreshingLabel) { + mRefreshingLabel = refreshingLabel; + } + + public void setReleaseLabel(CharSequence releaseLabel) { + mReleaseLabel = releaseLabel; + } + +// @Override +// public void setTextTypeface(Typeface tf) { +// mHeaderText.setTypeface(tf); +// } + + public final void showInvisibleViews() { + if (View.INVISIBLE == mHeaderText.getVisibility()) { + mHeaderText.setVisibility(View.VISIBLE); + } + if (View.INVISIBLE == mHeaderProgress.getVisibility()) { + mHeaderProgress.setVisibility(View.VISIBLE); + } + if (View.INVISIBLE == mHeaderImage.getVisibility()) { + mHeaderImage.setVisibility(View.VISIBLE); + } + if (View.INVISIBLE == mSubHeaderText.getVisibility()) { + mSubHeaderText.setVisibility(View.VISIBLE); + } + } + + /** + * Callbacks for derivative Layouts + */ + + protected abstract int getDefaultDrawableResId(); + + protected abstract void onLoadingDrawableSet(Drawable imageDrawable); + + protected abstract void onPullImpl(float scaleOfLayout); + + protected abstract void pullToRefreshImpl(); + + protected abstract void refreshingImpl(); + + protected abstract void releaseToRefreshImpl(); + + protected abstract void resetImpl(); + + private void setSubHeaderText(CharSequence label) { + if (null != mSubHeaderText) { + if (TextUtils.isEmpty(label)) { + mSubHeaderText.setVisibility(View.GONE); + } else { + mSubHeaderText.setText(label); + + // Only set it to Visible if we're GONE, otherwise VISIBLE will + // be set soon + if (View.GONE == mSubHeaderText.getVisibility()) { + mSubHeaderText.setVisibility(View.VISIBLE); + } + } + } + } + + private void setSubTextAppearance(int value) { + if (null != mSubHeaderText) { + mSubHeaderText.setTextAppearance(getContext(), value); + } + } + + private void setSubTextColor(ColorStateList color) { + if (null != mSubHeaderText) { + mSubHeaderText.setTextColor(color); + } + } + + private void setTextAppearance(int value) { + if (null != mHeaderText) { + mHeaderText.setTextAppearance(getContext(), value); + } + if (null != mSubHeaderText) { + mSubHeaderText.setTextAppearance(getContext(), value); + } + } + + private void setTextColor(ColorStateList color) { + if (null != mHeaderText) { + mHeaderText.setTextColor(color); + } + if (null != mSubHeaderText) { + mSubHeaderText.setTextColor(color); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/RotateLoadingLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/RotateLoadingLayout.java new file mode 100644 index 0000000..b1e77f0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/RotateLoadingLayout.java @@ -0,0 +1,109 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Matrix; +import android.graphics.drawable.Drawable; +import android.view.animation.Animation; +import android.view.animation.RotateAnimation; +import android.widget.ImageView.ScaleType; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Orientation; + +public class RotateLoadingLayout extends LoadingLayout { + + static final int ROTATION_ANIMATION_DURATION = 1200; + + private final Animation mRotateAnimation; + private final Matrix mHeaderImageMatrix; + + private float mRotationPivotX, mRotationPivotY; + + private final boolean mRotateDrawableWhilePulling; + + public RotateLoadingLayout(Context context, Mode mode, Orientation scrollDirection, TypedArray attrs) { + super(context, mode, scrollDirection, attrs); + + mRotateDrawableWhilePulling = attrs.getBoolean(R.styleable.PullToRefresh_ptrRotateDrawableWhilePulling, true); + + mHeaderImage.setScaleType(ScaleType.MATRIX); + mHeaderImageMatrix = new Matrix(); + mHeaderImage.setImageMatrix(mHeaderImageMatrix); + + mRotateAnimation = new RotateAnimation(0, 720, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, + 0.5f); + mRotateAnimation.setInterpolator(ANIMATION_INTERPOLATOR); + mRotateAnimation.setDuration(ROTATION_ANIMATION_DURATION); + mRotateAnimation.setRepeatCount(Animation.INFINITE); + mRotateAnimation.setRepeatMode(Animation.RESTART); + } + + public void onLoadingDrawableSet(Drawable imageDrawable) { + if (null != imageDrawable) { + mRotationPivotX = Math.round(imageDrawable.getIntrinsicWidth() / 2f); + mRotationPivotY = Math.round(imageDrawable.getIntrinsicHeight() / 2f); + } + } + + protected void onPullImpl(float scaleOfLayout) { + float angle; + if (mRotateDrawableWhilePulling) { + angle = scaleOfLayout * 90f; + } else { + angle = Math.max(0f, Math.min(180f, scaleOfLayout * 360f - 180f)); + } + + mHeaderImageMatrix.setRotate(angle, mRotationPivotX, mRotationPivotY); + mHeaderImage.setImageMatrix(mHeaderImageMatrix); + } + + @Override + protected void refreshingImpl() { + mHeaderImage.startAnimation(mRotateAnimation); + } + + @Override + protected void resetImpl() { + mHeaderImage.clearAnimation(); + resetImageRotation(); + } + + private void resetImageRotation() { + if (null != mHeaderImageMatrix) { + mHeaderImageMatrix.reset(); + mHeaderImage.setImageMatrix(mHeaderImageMatrix); + } + } + + @Override + protected void pullToRefreshImpl() { + // NO-OP + } + + @Override + protected void releaseToRefreshImpl() { + // NO-OP + } + + @Override + protected int getDefaultDrawableResId() { + return R.drawable.default_ptr_rotate; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayout.java new file mode 100644 index 0000000..40cb953 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayout.java @@ -0,0 +1,62 @@ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.view.View; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Orientation; + +/** + * Created by gaopeng on 2016/7/18. + */ +public class TweenAnimLoadingLayout extends LoadingLayout { + private AnimationDrawable animationDrawable; + + public TweenAnimLoadingLayout(Context context, Mode mode, + Orientation scrollDirection, TypedArray attrs) { + super(context, mode, scrollDirection, attrs); + // 初始化 + mHeaderImage.setImageResource(R.drawable.refresh_anim); + animationDrawable = (AnimationDrawable) mHeaderImage.getDrawable(); + } + // 默认图片 + @Override + protected int getDefaultDrawableResId() { + return R.drawable.loading_01; + } + + @Override + protected void onLoadingDrawableSet(Drawable imageDrawable) { + // NO-OP + } + + @Override + protected void onPullImpl(float scaleOfLayout) { + // NO-OP + } + // 下拉以刷新 + @Override + protected void pullToRefreshImpl() { + // NO-OP + } + // 正在刷新时回调 + @Override + protected void refreshingImpl() { + // 播放帧动画 + animationDrawable.start(); + } + // 释放以刷新 + @Override + protected void releaseToRefreshImpl() { + // NO-OP + } + // 重新设置 + @Override + protected void resetImpl() { + mHeaderImage.setVisibility(View.VISIBLE); + mHeaderImage.clearAnimation(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayoutNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayoutNew.java new file mode 100644 index 0000000..e77e815 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/TweenAnimLoadingLayoutNew.java @@ -0,0 +1,60 @@ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.view.View; + +import cn.shangyu.gdxzExpert.R; + +/** + * Created by gaopeng on 2016/7/18. + */ +public class TweenAnimLoadingLayoutNew extends LoadingLayoutNew { + private AnimationDrawable animationDrawable; + + public TweenAnimLoadingLayoutNew(Context context, TypedArray attrs,Boolean header) { + super(context, attrs,header); + // 初始化 + mHeaderImage.setImageResource(R.drawable.refresh_anim); + animationDrawable = (AnimationDrawable) mHeaderImage.getDrawable(); + } + // 默认图片 + @Override + protected int getDefaultDrawableResId() { + return R.drawable.refresh_anim; + } + + @Override + protected void onLoadingDrawableSet(Drawable imageDrawable) { + // NO-OP + } + + @Override + protected void onPullImpl(float scaleOfLayout) { + // NO-OP + } + // 下拉以刷新 + @Override + protected void pullToRefreshImpl() { + // NO-OP + } + // 正在刷新时回调 + @Override + protected void refreshingImpl() { + // 播放帧动画 + animationDrawable.start(); + } + // 释放以刷新 + @Override + protected void releaseToRefreshImpl() { + // NO-OP + } + // 重新设置 + @Override + protected void resetImpl() { + mHeaderImage.setVisibility(View.VISIBLE); + mHeaderImage.clearAnimation(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/Utils.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/Utils.java new file mode 100644 index 0000000..da60e4f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/Utils.java @@ -0,0 +1,13 @@ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.util.Log; + +public class Utils { + + static final String LOG_TAG = "PullToRefresh"; + + public static void warnDeprecation(String depreacted, String replacement) { + Log.w(LOG_TAG, "You're using the deprecated " + depreacted + " attr, please switch over to " + replacement); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/ViewCompat.java b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/ViewCompat.java new file mode 100644 index 0000000..fe3f6c0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/pulltorefreshview/internal/ViewCompat.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright 2011, 2012 Chris Banes. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package cn.shangyu.gdxzExpert.pulltorefreshview.internal; + +import android.annotation.TargetApi; +import android.graphics.drawable.Drawable; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.view.View; + +@SuppressWarnings("deprecation") +public class ViewCompat { + + public static void postOnAnimation(View view, Runnable runnable) { + if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { + SDK16.postOnAnimation(view, runnable); + } else { + view.postDelayed(runnable, 16); + } + } + + public static void setBackground(View view, Drawable background) { + if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { + SDK16.setBackground(view, background); + } else { + view.setBackgroundDrawable(background); + } + } + + public static void setLayerType(View view, int layerType) { + if (VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB) { + SDK11.setLayerType(view, layerType); + } + } + + @TargetApi(11) + static class SDK11 { + + public static void setLayerType(View view, int layerType) { + view.setLayerType(layerType, null); + } + } + + @TargetApi(16) + static class SDK16 { + + public static void postOnAnimation(View view, Runnable runnable) { + view.postOnAnimation(runnable); + } + + public static void setBackground(View view, Drawable background) { + view.setBackground(background); + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/report/BaseReportBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/report/BaseReportBean.java new file mode 100644 index 0000000..d758aeb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/report/BaseReportBean.java @@ -0,0 +1,42 @@ +package cn.shangyu.gdxzExpert.report; + +import java.io.Serializable; + +public class BaseReportBean implements Serializable { + private String app_key;// 必填,应用标识,获取token时候会返 + private String user_id;// 必填,用户id,获取token时候会返 + private String event_nickname;// 必填,事件编码 + private String create_date;// 必填,行为产生时间 + + public String getApp_key() { + return app_key; + } + + public void setApp_key(String app_key) { + this.app_key = app_key; + } + + public String getUser_id() { + return user_id; + } + + public void setUser_id(String user_id) { + this.user_id = user_id; + } + + public String getEvent_nickname() { + return event_nickname; + } + + public void setEvent_nickname(String event_nickname) { + this.event_nickname = event_nickname; + } + + public String getCreate_date() { + return create_date; + } + + public void setCreate_date(String create_date) { + this.create_date = create_date; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/report/CommUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/report/CommUtil.java new file mode 100644 index 0000000..60eaee8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/report/CommUtil.java @@ -0,0 +1,246 @@ +package cn.shangyu.gdxzExpert.report; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.telephony.TelephonyManager; +import android.util.Log; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +import cn.shangyu.gdxzExpert.BuildConfig; + +public class CommUtil { +// public static String userId=""; +// public static String token=""; +// public static void initReoprt(String uid,String tk) { +// userId=uid; +// token=tk; +// } + + public static String getCarrierName=""; + public static int totalreport=0; + public static String isReoprtingNow="false"; + public static String isFirstRun="true"; + public static String Repotr_os ="Android"; + public static String getDeviceName() { + String mobileName = ""; + try { + mobileName = android.os.Build.MANUFACTURER; + + } catch (Exception e) { + e.printStackTrace(); + } + return mobileName; + + + } + public static String getDeviceType() { + String mobileName = ""; + String mobileType = ""; + try { + mobileName = android.os.Build.MANUFACTURER; + mobileType = android.os.Build.MODEL; + } catch (Exception e) { + e.printStackTrace(); + } + + return (mobileName + " " + mobileType).replaceAll("\\s*", ""); + + } + public static String getVersionName() { + + return BuildConfig.VERSION_NAME; + + } + public static void saveListToFile(List list, String filePath, String filePathname,String zipPath) { + Log.d("okhttp","saveListToFile "); + Gson gson = new Gson(); + + File appDir = new File(filePath); + if (!appDir.exists()) { + appDir.mkdirs(); + } + String dataName =filePathname+".txt" ; + File file = new File(appDir, dataName); + Log.d("saveListToFile",file.getAbsolutePath()); + try { + FileOutputStream fos=new FileOutputStream(file,true);//设置为true,继续原文件写入 + try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fos))) { + for (reportBean item : list) { + writer.write(gson.toJson(item)); + writer.newLine(); // 每个布尔值后写入一个新行 + } + writer.close(); + fos.close(); +// File folderToZip = new File(filePath); +// File zipFile = new File(zipPath,"output.zip"); +// zipFolderCorrected(folderToZip, zipFile, folderToZip.getPath()); + } catch (IOException e) { + e.printStackTrace(); + } + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + } + + public static void zipFolderCorrected(File folderToZip, File zipFile, String basePath) throws IOException { + basePath = basePath.replace("\\", "/"); + if (!basePath.endsWith("/")) { + basePath += "/"; + } + + try (FileOutputStream fos = new FileOutputStream(zipFile); + ZipOutputStream zos = new ZipOutputStream(fos)) { + + File[] files = folderToZip.listFiles(); + if (files != null) { + for (File file : files) { + String filePath = file.getPath().replace("\\", "/"); + String entryName = filePath.substring(basePath.length()); + if (file.isDirectory()) { + // 添加文件夹条目 + zos.putNextEntry(new ZipEntry(entryName + "/")); + zos.closeEntry(); + // 递归地压缩子文件夹 + zipFolderCorrected(file, zipFile, basePath); + } else { + // 添加文件条目并写入文件内容 + zos.putNextEntry(new ZipEntry(entryName)); + try (FileInputStream fis = new FileInputStream(file)) { + byte[] buffer = new byte[1024]; + int length; + while ((length = fis.read(buffer)) >= 0) { + zos.write(buffer, 0, length); + } + } + zos.closeEntry(); + } + } + } + } + } + public static void deleteFile( String ReportFileZip,String name,String folderPath) + { + + File zipFile = new File(ReportFileZip,name); + // 删除文件 + zipFile.delete(); + deleteFolder(folderPath); + + + } + + public static void deleteFolder(String folderPath) { + File folder = new File(folderPath); + if (!folder.exists()) { + // 路径不存在,输出错误信息 +// System.out.println("文件夹不存在"); + return; + } + + File[] files = folder.listFiles(); + if (files != null) { + for (File file : files) { + if (file.isDirectory()) { + // 如果是子文件夹,递归调用删除方法 + deleteFolder(file.getAbsolutePath()); + } else { + // 如果是文件,直接删除 + file.delete(); + } + } + } + + // 删除空文件夹 + folder.delete(); + } + public static String getCurrentNetworkType(@NonNull Context context) { + ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivityManager != null) { + NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); + if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) { + return getActiveNetworkType(connectivityManager); + } + } + return "No network connection"; + } + + public static String getActiveNetworkType(ConnectivityManager connectivityManager) { + NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); + if (networkInfo != null) { + int type = networkInfo.getType(); + if (type == ConnectivityManager.TYPE_WIFI) { + return "wifi"; + } else if (type == ConnectivityManager.TYPE_MOBILE) { + int subType = networkInfo.getSubtype(); + switch (subType) { + case TelephonyManager.NETWORK_TYPE_GPRS: + case TelephonyManager.NETWORK_TYPE_EDGE: + case TelephonyManager.NETWORK_TYPE_CDMA: + case TelephonyManager.NETWORK_TYPE_1xRTT: + return "2G"; + case TelephonyManager.NETWORK_TYPE_EVDO_0: + case TelephonyManager.NETWORK_TYPE_EVDO_A: + case TelephonyManager.NETWORK_TYPE_EVDO_B: + case TelephonyManager.NETWORK_TYPE_HSPA: + case TelephonyManager.NETWORK_TYPE_HSUPA: + case TelephonyManager.NETWORK_TYPE_HSDPA: + case TelephonyManager.NETWORK_TYPE_UMTS: + return "3G"; + case TelephonyManager.NETWORK_TYPE_EHRPD: + case TelephonyManager.NETWORK_TYPE_HSPAP: + case TelephonyManager.NETWORK_TYPE_IDEN: + case TelephonyManager.NETWORK_TYPE_LTE: + return "4G"; + case TelephonyManager.NETWORK_TYPE_NR: + return "5G"; + default: + String typeName = networkInfo.getTypeName(); + if ("MOBILE_DUN".equals(typeName)) { + return "Mobile DUN"; + } else if ("MOBILE_HIPRI".equals(typeName)) { + return "Mobile HIPRI"; + } else if ("MOBILE_MMS".equals(typeName)) { + return "Mobile MMS"; + } else if ("MOBILE_SUPL".equals(typeName)) { + return "Mobile SUPL"; + } else if ("MOBILE".equals(typeName)) { + return "Mobile"; + } else if ("WIFI".equals(typeName)) { + return "WIFI"; + } else if ("WIMAX".equals(typeName)) { + return "WiMAX"; + } else if ("BLUETOOTH".equals(typeName)) { + return "Bluetooth"; + } else if ("ETHERNET".equals(typeName)) { + return "Ethernet"; + } else { + return typeName; + } + } + } else if (type == ConnectivityManager.TYPE_BLUETOOTH) { + return "Bluetooth"; + } else if (type == ConnectivityManager.TYPE_ETHERNET) { + return "Ethernet"; + } else { + return networkInfo.getTypeName(); + } + } + return "Unknown"; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/report/ReportService.java b/app/src/main/java/cn/shangyu/gdxzExpert/report/ReportService.java new file mode 100644 index 0000000..90d2937 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/report/ReportService.java @@ -0,0 +1,320 @@ +package cn.shangyu.gdxzExpert.report; + +import android.app.Service; +import android.content.Intent; +import android.os.IBinder; +import android.util.Log; + +import com.google.gson.Gson; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.umeng.umverify.UMVerifyHelper; +import com.umeng.umverify.listener.UMTokenResultListener; +import com.zhy.http.okhttp.OkHttpUtils; +import com.zhy.http.okhttp.callback.StringCallback; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import okhttp3.Call; + +public class ReportService extends Service { + + public ReportService() { + } + public String ReportFile; + public String ReportFileZip; + public String report_token=""; + List list; +// public String FileUrl="https://dev-event.igandan.com/v1/eventLog/upload";//测试环境 +// public String FileUrl="https://event.igandan.com/v1/eventLog/upload";//正式环境 + @Override + public void onCreate() { + super.onCreate(); + ReportFile=getBaseContext().getExternalFilesDir("").getAbsolutePath()+"/gdxz/report/zip"; + ReportFileZip=getBaseContext().getExternalFilesDir("").getAbsolutePath()+"/gdxz/report/"; +// if("true".equals(CommUtil.isFirstRun)) +// { +// CommUtil.isFirstRun="false"; +// } + UMVerifyHelper mPhoneNumberAuthHelper= UMVerifyHelper.getInstance(getBaseContext(), new UMTokenResultListener() { + @Override + public void onTokenSuccess(String s) { + + } + + @Override + public void onTokenFailed(String s) { + + } + }); + if("CUCC".equals(mPhoneNumberAuthHelper.getCurrentCarrierName())) + { + CommUtil.getCarrierName="中国联通"; + } + else if("CMCC".equals(mPhoneNumberAuthHelper.getCurrentCarrierName())) + { + CommUtil.getCarrierName="中国移动"; + } + else if("CTCC".equals(mPhoneNumberAuthHelper.getCurrentCarrierName())) + { + CommUtil.getCarrierName="中国电信"; + } + else + { + CommUtil.getCarrierName="未知"; + } + + + Log.d("okhttp","mPhoneNumberAuthHelper "+ CommUtil.getCarrierName); + } + + @Override + public IBinder onBind(Intent intent) { + // TODO: Return the communication channel to the service. + throw new UnsupportedOperationException("Not yet implemented"); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + report_token=intent.getStringExtra("report_token"); + if(report_token==""||report_token==null) + { + return START_NOT_STICKY; + } + else if(intent.getSerializableExtra("report_list")==null) + { + if(checkReport()) + { + new Thread(new Runnable() { + @Override + public void run() { + zipFile(); + } + }).start(); + } + return START_NOT_STICKY; + } + list = (List) intent.getSerializableExtra("report_list"); + CommUtil.totalreport+= list.size(); + + // 在新线程或异步任务中执行文件上传 + new Thread(new Runnable() { + @Override + public void run() { + writeReport(); +// uploadFile(filePath); +// // 上传完成后,可以停止服务或发送广播通知其他组件 +// stopSelf(); // 或者使用广播通知 + } + }).start(); + return START_NOT_STICKY; + } + public void writeReport() + { +// if(2>1) +// { +// CommUtil.deleteFile(ReportFileZip,"output.zip",ReportFile); +// return; +// } + if( "true".equals(CommUtil.isReoprtingNow)) + { + return; + } + Log.d("okhttp","CommUtil.totalreport "+ CommUtil.totalreport); + if(CommUtil.totalreport>99&&checkReport()) + { + + zipFile(); + } + else{ + CommUtil.saveListToFile(list,ReportFile,"upload",ReportFileZip); + } + + } + public void zipFile() + { + CommUtil.isReoprtingNow="true"; + File folderToZip = new File(ReportFile); + File zipFile = new File(ReportFileZip,"outputandroid.zip"); + try { + CommUtil.zipFolderCorrected(folderToZip, zipFile, folderToZip.getPath()); + uploadFile(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void uploadFile() { + + Map headers=new HashMap<>(); + headers.put("Content-Type","multipart/form-data"); + headers.put("Tag-Access",report_token); +// Log.d("okhttp","report_token"+report_token); + File zipFile = new File(ReportFileZip,"outputandroid.zip"); + OkHttpUtils + .post() + .url(Url.FileUrl) + .headers(headers) + .addFile("file", "outputandroid.zip", zipFile)// + +// .file(zipFile) + + .build() + .execute(new StringCallback() { + + @Override + public void onError(Call call, Exception e, int id) { + Log.d("okhttp",e+"e"); + CommUtil.isReoprtingNow="false"; + CommUtil.totalreport=0; + } + + @Override + public void onResponse(String response, int id) { + Log.d("okhttp",response+"responseoutput"); + CommUtil.isReoprtingNow="false"; + + JSONObject jsonObject= null; + try { + jsonObject = new JSONObject(response); + if("30007".equals(jsonObject.optString("code"))) + { + initReport(); + } + else if("200".equals(jsonObject.optString("code"))) + { + CommUtil.deleteFile(ReportFileZip,"outputandroid.zip",ReportFile); +// CommUtil.isReoprtingNow="false"; + CommUtil.totalreport=0; + } + else + { +// CommUtil.isReoprtingNow="false"; + CommUtil.totalreport=0; + } + } catch (JSONException e) { + e.printStackTrace(); + } + + + + } + }); + } + public Boolean checkReport() + { + File folderToZip = new File(ReportFile); + if(folderToZip.exists()) + { + return true; + } + return false; + } + public void initReport() + { + + Map map = new HashMap<>(); + sendJsonPostParamtoNetSignMD5(Url.getTagToken,map); + + + } + public void sendJsonPostParamtoNetSignMD5(final String postUrl, final Map param) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + if(StringUtil.isEmpty(uuid)) + { + uuid= LogoutHelper.addUMTokenuuid; + } + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = " + result); + JSONObject jsonObject111 = new JSONObject(string); + if ("200".equals(jsonObject111.optString("code"))&&!jsonObject111.isNull("data")) { + Constant.Report_userId= jsonObject111.optJSONObject("data").optString("userId"); + Constant.Repotr_token=jsonObject111.optJSONObject("data").optString("token"); + Constant.Repotr_app_key=jsonObject111.optJSONObject("data").optString("appKey"); + report_token=Constant.Repotr_token; +// Log.d("okhttp","report_token666"+report_token); + uploadFile(); + } + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + + } + }); + + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/report/reportBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/report/reportBean.java new file mode 100644 index 0000000..d174238 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/report/reportBean.java @@ -0,0 +1,191 @@ +package cn.shangyu.gdxzExpert.report; + +import java.io.Serializable; + +public class reportBean extends BaseReportBean implements Serializable { + + + private String province;// 省份 + private String city;// 城市 + private String district;// 区 + private String os;// 非必填,客户端系统类型 (IOS Android Web Miniprogram Platform) + private String os_version;// 客户端系统类型 版本号 (Android 11.1.2;IOS 9.0.0) + private String device;// 客户端机型品牌 (苹果 小米 vivo 华为) + private String device_type;// 客户端机型型号 (Iphone12 xioami8) + private String app_version;// 客户端 版本号 (1.0.0;3.9.7) + private String network_type;// 网络类型 如 wifi 5G 4G 3G 2G + private String network_carrier;// 网络运营商 (中国电信 中国移动) + private String user_agent;// 浏览器标识 + private String event_val;// 计算类型事件值 (订单金额、观看时长) + private String event_unit;// 计算类型事件 单位 (元,分钟;供显示) + private String page_type;// 页面类型 + private String number;// 数量 + private String resource_name;// 资源名称 + private String resource_option;// 资源属性 + private String deal_result;// 处理结果 + private String deal_object;// 处理对象 + private String belong;// 所属类型 + + + public String getProvince() { + return province; + } + + public void setProvince(String province) { + this.province = province; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + public String getDistrict() { + return district; + } + + public void setDistrict(String district) { + this.district = district; + } + + public String getOs() { + return os; + } + + public void setOs(String os) { + this.os = os; + } + + public String getOs_version() { + return os_version; + } + + public void setOs_version(String os_version) { + this.os_version = os_version; + } + + public String getDevice() { + return device; + } + + public void setDevice(String device) { + this.device = device; + } + + public String getDevice_type() { + return device_type; + } + + public void setDevice_type(String device_type) { + this.device_type = device_type; + } + + public String getApp_version() { + return app_version; + } + + public void setApp_version(String app_version) { + this.app_version = app_version; + } + + public String getNetwork_type() { + return network_type; + } + + public void setNetwork_type(String network_type) { + this.network_type = network_type; + } + + public String getNetwork_carrier() { + return network_carrier; + } + + public void setNetwork_carrier(String network_carrier) { + this.network_carrier = network_carrier; + } + + public String getUser_agent() { + return user_agent; + } + + public void setUser_agent(String user_agent) { + this.user_agent = user_agent; + } + + + + public String getEvent_unit() { + return event_unit; + } + + public void setEvent_unit(String event_unit) { + this.event_unit = event_unit; + } + + public String getPage_type() { + return page_type; + } + + public void setPage_type(String page_type) { + this.page_type = page_type; + } + + public String getEvent_val() { + return event_val; + } + + public void setEvent_val(String event_val) { + this.event_val = event_val; + } + + public String getNumber() { + return number; + } + + public void setNumber(String number) { + this.number = number; + } + + public String getResource_name() { + return resource_name; + } + + public void setResource_name(String resource_name) { + this.resource_name = resource_name; + } + + public String getResource_option() { + return resource_option; + } + + public void setResource_option(String resource_option) { + this.resource_option = resource_option; + } + + public String getDeal_result() { + return deal_result; + } + + public void setDeal_result(String deal_result) { + this.deal_result = deal_result; + } + + public String getDeal_object() { + return deal_object; + } + + public void setDeal_object(String deal_object) { + this.deal_object = deal_object; + } + + public String getBelong() { + return belong; + } + + public void setBelong(String belong) { + this.belong = belong; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/service/NotifyUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/service/NotifyUtil.java new file mode 100644 index 0000000..9f48533 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/service/NotifyUtil.java @@ -0,0 +1,424 @@ +package cn.shangyu.gdxzExpert.service; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; +import android.os.SystemClock; +import android.widget.RemoteViews; +import android.widget.Toast; + +import net.tsz.afinal.FinalHttp; +import net.tsz.afinal.http.AjaxCallBack; +import net.tsz.afinal.http.HttpHandler; + +import java.io.File; +import java.util.ArrayList; + +import androidx.core.app.NotificationCompat; + + +//提醒的util的封装 +@SuppressLint("NewApi") +public class NotifyUtil { + + private static final int FLAG = Notification.FLAG_INSISTENT; + int requestCode = (int) SystemClock.uptimeMillis(); + private int NOTIFICATION_ID; + private NotificationManager nm; + private Notification notification; + private NotificationCompat.Builder cBuilder; + private Notification.Builder nBuilder; + private Context mContext; + + public NotifyUtil(Context context, int ID) { + this.NOTIFICATION_ID = ID; + mContext = context; + // 获取系统服务来初始化对象 + nm = (NotificationManager) mContext + .getSystemService(Activity.NOTIFICATION_SERVICE); + cBuilder = new NotificationCompat.Builder(mContext); + } + + /** + * 设置在顶部通知栏中的各种信息 + * + * @param pendingIntent + * @param smallIcon + * @param ticker + */ + private void setCompatBuilder(PendingIntent pendingIntent, int smallIcon, + String ticker, String title, String content, boolean sound, + boolean vibrate, boolean lights) { + // // 如果当前Activity启动在前台,则不开启新的Activity。 + // intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + // // + // 当设置下面PendingIntent.FLAG_UPDATE_CURRENT这个参数的时候,常常使得点击通知栏没效果,你需要给notification设置一个独一无二的requestCode + // // 将Intent封装进PendingIntent中,点击通知的消息后,就会启动对应的程序 + // PendingIntent pIntent = PendingIntent.getActivity(mContext, + // requestCode, intent, FLAG); + + cBuilder.setContentIntent(pendingIntent);// 该通知要启动的Intent + cBuilder.setSmallIcon(smallIcon);// 设置顶部状态栏的小图标 + cBuilder.setTicker(ticker);// 在顶部状态栏中的提示信息 + + cBuilder.setContentTitle(title);// 设置通知中心的标题 + cBuilder.setContentText(content);// 设置通知中心中的内容 + cBuilder.setWhen(System.currentTimeMillis()); + + /* + * 将AutoCancel设为true后,当你点击通知栏的notification后,它会自动被取消消失, + * 不设置的话点击消息后也不清除,但可以滑动删除 + */ + cBuilder.setAutoCancel(true); + // 将Ongoing设为true 那么notification将不能滑动删除 + // notifyBuilder.setOngoing(true); + /* + * 从Android4.1开始,可以通过以下方法,设置notification的优先级, + * 优先级越高的,通知排的越靠前,优先级低的,不会在手机最顶部的状态栏显示图标 + */ + cBuilder.setPriority(NotificationCompat.PRIORITY_MAX); + /* + * Notification.DEFAULT_ALL:铃声、闪光、震动均系统默认。 + * Notification.DEFAULT_SOUND:系统默认铃声。 + * Notification.DEFAULT_VIBRATE:系统默认震动。 + * Notification.DEFAULT_LIGHTS:系统默认闪光。 + * notifyBuilder.setDefaults(Notification.DEFAULT_ALL); + */ + int defaults = 0; + + if (sound) { + defaults |= Notification.DEFAULT_SOUND; + } + if (vibrate) { + defaults |= Notification.DEFAULT_VIBRATE; + } + if (lights) { + defaults |= Notification.DEFAULT_LIGHTS; + } + + cBuilder.setDefaults(defaults); + } + + /** + * 设置builder的信息,在用大文本时会用到这个 + * + * @param pendingIntent + * @param smallIcon + * @param ticker + */ + private void setBuilder(PendingIntent pendingIntent, int smallIcon, + String ticker, boolean sound, boolean vibrate, boolean lights) { + nBuilder = new Notification.Builder(mContext); + // 如果当前Activity启动在前台,则不开启新的Activity。 + // intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); + // PendingIntent pIntent = PendingIntent.getActivity(mContext, + // requestCode, intent, FLAG); + nBuilder.setContentIntent(pendingIntent); + + nBuilder.setSmallIcon(smallIcon); + + nBuilder.setTicker(ticker); + nBuilder.setWhen(System.currentTimeMillis()); + nBuilder.setPriority(Notification.PRIORITY_MAX); + + int defaults = 0; + + if (sound) { + defaults |= Notification.DEFAULT_SOUND; + } + if (vibrate) { + defaults |= Notification.DEFAULT_VIBRATE; + } + if (lights) { + defaults |= Notification.DEFAULT_LIGHTS; + } + + nBuilder.setDefaults(defaults); + } + + /** + * 普通的通知 + *

+ * 1. 侧滑即消失,下拉通知菜单则在通知菜单显示 + * + * @param pendingIntent + * @param smallIcon + * @param ticker + * @param title + * @param content + */ + public void notify_normal_singline(PendingIntent pendingIntent, + int smallIcon, String ticker, String title, String content, + boolean sound, boolean vibrate, boolean lights) { + + setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, + sound, vibrate, lights); + sent(); + } + + /** + * 进行多项设置的通知(在小米上似乎不能设置大图标,系统默认大图标为应用图标) + * + * @param pendingIntent + * @param smallIcon + * @param ticker + * @param title + * @param content + */ + public void notify_mailbox(PendingIntent pendingIntent, int smallIcon, + int largeIcon, ArrayList messageList, String ticker, + String title, String content, boolean sound, boolean vibrate, + boolean lights) { + + setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, + sound, vibrate, lights); + + // 将Ongoing设为true 那么notification将不能滑动删除 + // cBuilder.setOngoing(true); + + /** + * // 删除时 Intent deleteIntent = new Intent(mContext, + * DeleteService.class); int deleteCode = (int) + * SystemClock.uptimeMillis(); // 删除时开启一个服务 PendingIntent + * deletePendingIntent = PendingIntent.getService(mContext, deleteCode, + * deleteIntent, PendingIntent.FLAG_UPDATE_CURRENT); + * cBuilder.setDeleteIntent(deletePendingIntent); + **/ + + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), + largeIcon); + cBuilder.setLargeIcon(bitmap); + + cBuilder.setDefaults(Notification.DEFAULT_ALL);// 设置使用默认的声音 + // cBuilder.setVibrate(new long[]{0, 100, 200, 300});// 设置自定义的振动 + cBuilder.setAutoCancel(true); + // builder.setSound(Uri.parse("file:///sdcard/click.mp3")); + + // 设置通知样式为收件箱样式,在通知中心中两指往外拉动,就能出线更多内容,但是很少见 + // cBuilder.setNumber(messageList.size()); + NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); + for (String msg : messageList) { + inboxStyle.addLine(msg); + } + inboxStyle.setSummaryText("[" + messageList.size() + "条]" + title); + cBuilder.setStyle(inboxStyle); + sent(); + } + + /** + * 自定义视图的通知 + * + * @param remoteViews + * @param pendingIntent + * @param smallIcon + * @param ticker + */ + public void notify_customview(RemoteViews remoteViews, + PendingIntent pendingIntent, int smallIcon, String ticker, + boolean sound, boolean vibrate, boolean lights) { + + setCompatBuilder(pendingIntent, smallIcon, ticker, null, null, sound, + vibrate, lights); + + notification = cBuilder.build(); + notification.contentView = remoteViews; + // 发送该通知 + nm.notify(NOTIFICATION_ID, notification); + } + + /** + * 可以容纳多行提示文本的通知信息 (因为在高版本的系统中才支持,所以要进行判断) + * + * @param pendingIntent + * @param smallIcon + * @param ticker + * @param title + * @param content + */ + public void notify_normail_moreline(PendingIntent pendingIntent, + int smallIcon, String ticker, String title, String content, + boolean sound, boolean vibrate, boolean lights) { + + final int sdk = Build.VERSION.SDK_INT; + if (sdk < Build.VERSION_CODES.JELLY_BEAN) { + notify_normal_singline(pendingIntent, smallIcon, ticker, title, + content, sound, vibrate, lights); + Toast.makeText(mContext, "您的手机低于Android 4.1.2,不支持多行通知显示!!", + Toast.LENGTH_SHORT).show(); + } else { + setBuilder(pendingIntent, smallIcon, ticker, true, true, false); + nBuilder.setContentTitle(title); + nBuilder.setContentText(content); + nBuilder.setPriority(Notification.PRIORITY_HIGH); + notification = new Notification.BigTextStyle(nBuilder).bigText( + content).build(); + // 发送该通知 + nm.notify(NOTIFICATION_ID, notification); + } + } + + /** + * 有进度条的通知,可以设置为模糊进度或者精确进度 + * + * @param pendingIntent + * @param smallIcon + * @param ticker + * @param title + * @param content + */ + public void notify_progress(PendingIntent pendingIntent, int smallIcon, + String ticker, String title, String content, boolean sound, + boolean vibrate, boolean lights, String download_url, + String savePath, final DownLoadListener listener) { + + setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, + sound, vibrate, lights); + /* + * 因为进度条要实时更新通知栏也就说要不断的发送新的提示,所以这里不建议开启通知声音。 + * 这里是作为范例,给大家讲解下原理。所以发送通知后会听到多次的通知声音。 + */ + FinalHttp fh = new FinalHttp(); + HttpHandler httpHandler = fh.download(download_url, savePath, + new AjaxCallBack() { + @Override + public void onLoading(long count, long current) { + super.onLoading(count, current); + double a = count; + double b = current; + double currentPro = (double) ((b / a) * 100); + cBuilder.setProgress(100, (int) currentPro, false); + sent(); + } + + @Override + public void onSuccess(File file) { + super.onSuccess(file); + cBuilder.setContentText("下载完成") + .setProgress(0, 0, false); + sent(); + listener.OnSuccess(file); + } + + @Override + public void onFailure(Throwable t, int errorNo, + String strMsg) { + super.onFailure(t, errorNo, strMsg); + listener.onFailure(t, errorNo, strMsg); + } + + }); + + } + + /** + * 容纳大图片的通知 + * + * @param pendingIntent + * @param smallIcon + * @param ticker + * @param title + * @param bigPic + */ + public void notify_bigPic(PendingIntent pendingIntent, int smallIcon, + String ticker, String title, String content, int bigPic, + boolean sound, boolean vibrate, boolean lights) { + + setCompatBuilder(pendingIntent, smallIcon, ticker, title, null, sound, + vibrate, lights); + NotificationCompat.BigPictureStyle picStyle = new NotificationCompat.BigPictureStyle(); + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inScaled = true; + options.inSampleSize = 2; + Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), + bigPic, options); + picStyle.bigPicture(bitmap); + picStyle.bigLargeIcon(bitmap); + cBuilder.setContentText(content); + cBuilder.setStyle(picStyle); + sent(); + } + + /** + * 里面有两个按钮的通知 + * + * @param smallIcon + * @param leftbtnicon + * @param lefttext + * @param leftPendIntent + * @param rightbtnicon + * @param righttext + * @param rightPendIntent + * @param ticker + * @param title + * @param content + */ + public void notify_button(int smallIcon, int leftbtnicon, String lefttext, + PendingIntent leftPendIntent, int rightbtnicon, String righttext, + PendingIntent rightPendIntent, String ticker, String title, + String content, boolean sound, boolean vibrate, boolean lights) { + + requestCode = (int) SystemClock.uptimeMillis(); + setCompatBuilder(rightPendIntent, smallIcon, ticker, title, content, + sound, vibrate, lights); + cBuilder.addAction(leftbtnicon, lefttext, leftPendIntent); + cBuilder.addAction(rightbtnicon, righttext, rightPendIntent); + sent(); + } + + public void notify_HeadUp(PendingIntent pendingIntent, int smallIcon, + int largeIcon, String ticker, String title, String content, + int leftbtnicon, String lefttext, PendingIntent leftPendingIntent, + int rightbtnicon, String righttext, + PendingIntent rightPendingIntent, boolean sound, boolean vibrate, + boolean lights) { + + setCompatBuilder(pendingIntent, smallIcon, ticker, title, content, + sound, vibrate, lights); + cBuilder.setLargeIcon(BitmapFactory.decodeResource( + mContext.getResources(), largeIcon)); + + // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + // cBuilder.addAction(leftbtnicon, lefttext, leftPendingIntent); + // cBuilder.addAction(rightbtnicon, righttext, rightPendingIntent); + // } else { + // Toast.makeText(mContext, "版本低于Andriod5.0,无法体验HeadUp样式通知", + // Toast.LENGTH_SHORT).show(); + // } + sent(); + } + + /** + * 发送通知 + */ + private void sent() { + notification = cBuilder.build(); + // 发送该通知 + nm.notify(NOTIFICATION_ID, notification); + } + + /** + * 根据id清除通知 + */ + public void clear() { + // 取消通知 + nm.cancelAll(); + } + + DownLoadListener listener; + + public void setOnDownLoadListener(DownLoadListener l) { + listener = l; + } + + public interface DownLoadListener { + void OnSuccess(File file); + + void onFailure(Throwable t, int errorNo, String strMsg); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/service/UpdateService.java b/app/src/main/java/cn/shangyu/gdxzExpert/service/UpdateService.java new file mode 100644 index 0000000..92ed240 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/service/UpdateService.java @@ -0,0 +1,271 @@ +package cn.shangyu.gdxzExpert.service; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Intent; +import android.net.Uri; +import android.os.Environment; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; + +import androidx.core.content.FileProvider; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +import cn.shangyu.gdxzExpert.activity.SettingVersionActivity; +import cn.shangyu.gdxzExpert.utils.NotificationUtils; +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class UpdateService extends Service { + // 标题 + private int titleId = 0; + private final static int DOWNLOAD_COMPLETE = 0; + private final static int DOWNLOAD_FAIL = 1; + + // 下載的连接 + private String url; + // 版本号 + // private String appVersion; + // 文件存储 + private File updateDir = null; + private File updateFile = null; + private File updateFile2 = null; + // 通知栏 + private NotificationManager updateNotificationManager = null; +// private Notification updateNotification = null; + // 通知栏跳转Intent + private Intent updateIntent = null; + private PendingIntent updatePendingIntent = null; + private String firstUrl = null; + private Intent Intentsss = null; + private Notification.Builder builder; + private Notification notification; + private NotificationUtils notificationUtils; + @Override + public IBinder onBind(Intent intent) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void onCreate() { + + super.onCreate(); + } + + @SuppressLint("WrongConstant") + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + if (intent == null) { + return START_NOT_STICKY; + } + Intentsss = intent; + // 获取名称 + titleId = intent.getIntExtra("titleId", 0); + url = intent.getStringExtra("url"); + String newVersion = intent.getStringExtra("newVersion"); + String oldVersion = intent.getStringExtra("oldVersion"); + firstUrl = url; + // appVersion = intent.getStringExtra("appVersion"); + // 创建文件 + if (Environment.MEDIA_MOUNTED.equals(Environment + .getExternalStorageState())) { + updateDir = new File(UIUtils.getContext().getExternalFilesDir(""), + "/app/download/"); + updateFile = new File(updateDir.getPath(), (titleId + newVersion) + + ".apk"); + updateFile2 = new File(updateDir.getPath(), (titleId + oldVersion) + + ".apk"); + if (updateFile2.exists()) { + updateFile2.delete(); + } + } + + this.updateNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + updateIntent = new Intent(this, SettingVersionActivity.class); + updatePendingIntent = PendingIntent.getActivity(this, 0, updateIntent, 0); + updateIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//关键的一步,设置启动模式 + notificationUtils = new NotificationUtils(this,0,updatePendingIntent); + notificationUtils.sendUpVersonNotification("开始下载", "当前下载进度:0%"); + + // 开启一个新的线程下载,如果使用Service同步下载,会导致ANR问题,Service本身也会阻塞 + new Thread(new updateRunnable()).start();// 这个是下载的重点,是下载的过程 + + return super.onStartCommand(intent, flags, startId); + } + + private Handler updateHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case DOWNLOAD_COMPLETE: +// notification.flags |= notification.FLAG_AUTO_CANCEL; + // 点击安装PendingIntent +// Uri uri = Uri.fromFile(updateFile); +// Intent installIntent = new Intent(Intent.ACTION_VIEW); +// installIntent.setDataAndType(uri, +// "application/vnd.android.package-archive"); +// updatePendingIntent = PendingIntent.getActivity( +// UpdateService.this, 0, installIntent, 0); + +// installAPK(updateFile);//下载完成直接安装 + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// Intent intent = new Intent(); +// intent.setAction("android.intent.action.VIEW"); +// intent.addCategory("android.intent.category.DEFAULT"); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//关键的一步,设置启动模式 + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setDataAndType(FileProvider.getUriForFile(UpdateService.this, "cn.shangyu.gdxzExpert.fileprovider", updateFile),"application/vnd.android.package-archive"); + getApplicationContext().startActivity(intent); +// startActivity(intent); + updatePendingIntent = PendingIntent.getActivity(UpdateService.this, 0, intent, 0); + + NotificationUtils notificationUtils1 = new NotificationUtils(UpdateService.this,0,updatePendingIntent); + notificationUtils1.sendUpVersonNotification("肝胆相照专家版", "下载完成,点击安装"); + + stopService(Intentsss); + break; + case DOWNLOAD_FAIL: + notificationUtils.sendUpVersonNotification("肝胆相照专家版", "下载出错,请重新检查更新"); +// builder.setContentInfo(""); +// builder.setContentText("下载完成"); +// builder.setContentTitle("肝胆相照"); +// builder.setSmallIcon(R.drawable.ic_launcher); +// builder.setTicker("肝胆相照"); +// builder.setAutoCancel(true); +// builder.setWhen(System.currentTimeMillis()); +//// builder.setContentIntent(updatePendingIntent); +// Notification notification1 = builder.build(); +// updateNotificationManager.notify(0, notification1); + + // 下载失败 +// updateNotification.setLatestEventInfo(UpdateService.this, +// "肝胆相照", "下载完成,点击安装。", updatePendingIntent); +// updateNotificationManager.notify(0, updateNotification); + stopService(Intentsss); + break; + default: + stopService(Intentsss); + } + } + }; + private void installAPK(File t) { + Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK ); + intent.setDataAndType(Uri.fromFile(t),"application/vnd.android.package-archive"); + startActivity(intent); + } + class updateRunnable implements Runnable { + Message message = updateHandler.obtainMessage(); + + public void run() { + message.what = DOWNLOAD_COMPLETE; + try { + // 增加权限; + if (!updateDir.exists()) { + updateDir.mkdirs(); + } + if (!updateFile.exists()) { + updateFile.createNewFile(); + } + // 下载肝胆相照app + + long downloadSize = downloadUpdateFile(url, updateFile); + if (downloadSize > 0) { + // 下载成功 + updateHandler.sendMessage(message); + } + } catch (Exception ex) { + ex.printStackTrace(); + message.what = DOWNLOAD_FAIL; + // 下载失败 + updateHandler.sendMessage(message); + } + } + } + + public long downloadUpdateFile(String downloadUrl, File saveFile) + throws Exception { + // 下载代码 + int downloadCount = 0; + int currentSize = 0; + long totalSize = 0; + int updateTotalSize = 0; + + HttpURLConnection httpConnection = null; + InputStream is = null; + FileOutputStream fos = null; + + try { + URL url = new URL(downloadUrl); + httpConnection = (HttpURLConnection) url.openConnection(); + httpConnection + .setRequestProperty("User-Agent", "PacificHttpClient"); + if (currentSize > 0) { + httpConnection.setRequestProperty("RANGE", "bytes=" + + currentSize + "-"); + } + httpConnection.setConnectTimeout(10000); + httpConnection.setReadTimeout(20000); + updateTotalSize = httpConnection.getContentLength(); + if (httpConnection.getResponseCode() == 404) { + throw new Exception("fail!"); + } + is = httpConnection.getInputStream(); + fos = new FileOutputStream(saveFile, false); + byte buffer[] = new byte[4096]; + int readsize = 0; + while ((readsize = is.read(buffer)) > 0) { + fos.write(buffer, 0, readsize); + totalSize += readsize; + // 为了防止频繁的通知导致应用吃紧,百分比增加10才通知一次 + if ((downloadCount == 0) || (int) (totalSize * 100 / updateTotalSize) - 10 > downloadCount) { + downloadCount += 10; + /* builder.setContentInfo(""); +// builder.setContentText("当前下载进度:" + (int) totalSize * 100 / updateTotalSize + "%"); + builder.setContentText("当前下载进度:" + downloadCount+ "%"); + builder.setContentTitle("肝胆相照"); + builder.setSmallIcon(R.drawable.ic_launcher); + builder.setTicker("肝胆相照"); + builder.setAutoCancel(true); + builder.setWhen(System.currentTimeMillis()); +// builder.setContentIntent(updatePendingIntent); + Notification notification1 = builder.build(); + updateNotificationManager.notify(0, notification1);*/ + notificationUtils.sendUpVersonNotification("正在下载", "当前下载进度:"+downloadCount+"%"); + } + + } + } finally { + if (httpConnection != null) { + httpConnection.disconnect(); + } + if (is != null) { + is.close(); + } + if (fos != null) { + fos.close(); + } + } + return totalSize; + } + + @Override + public void onDestroy() { + // TODO Auto-generated method stub + super.onDestroy(); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/splash/GuideUI.java b/app/src/main/java/cn/shangyu/gdxzExpert/splash/GuideUI.java new file mode 100644 index 0000000..55d544a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/splash/GuideUI.java @@ -0,0 +1,239 @@ +package cn.shangyu.gdxzExpert.splash; + +import android.content.Intent; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; + +public class GuideUI extends AppCompatActivity implements ViewPager.OnPageChangeListener, OnClickListener { + + private List imageViewList; // viewpager的数据 +// private LinearLayout llPointGroup; // 点的组 +// private View mSelectPointView; // 选中的点view对象 +// private int basicWidth; // 点之间的宽度 + private Button btnStartExperience; // 开始体验按钮 + private GestureDetector gestureDetector;// 用户滑动 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); +// requestWindowFeature(Window.FEATURE_NO_TITLE); // 去标题, 需要在setContentView方法之前调用 + setContentView(R.layout.guide); + gestureDetector = new GestureDetector(this,new GuideViewTouch()); + // 获取分辨率 + DisplayMetrics dm = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(dm); + flaggingWidth = dm.widthPixels / 3; + + initView(); + } + + /** + * 初始化控件 + */ + private void initView() { + ViewPager mViewPager = (ViewPager) findViewById(R.id.vp_guide); + btnStartExperience = (Button) findViewById(R.id.btn_guide_start_experience); +// llPointGroup = (LinearLayout) findViewById(R.id.ll_guide_point_group); +// mSelectPointView = findViewById(R.id.select_point); + + initData(); + + GuideAdapter mAdapter = new GuideAdapter(); + mViewPager.setAdapter(mAdapter); + mViewPager.setOnPageChangeListener(this); + btnStartExperience.setOnClickListener(this); + + // view绘制流程: measure -> layout -> draw + // 监听mSelectPointView控件layout + + // 获得视图树的观察者, 监听全部布局的回调 + /*mSelectPointView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { + + @Override + public void onGlobalLayout() { + // 只执行一次, 把当前的事件从视图树的观察者中移除掉 + mSelectPointView.getViewTreeObserver().removeGlobalOnLayoutListener(this); + + // 取出两个点之间的宽度 + basicWidth = llPointGroup.getChildAt(1).getLeft() - llPointGroup.getChildAt(0).getLeft(); + } + });*/ + } + + /** + * 初始化数据 + */ + private void initData() { + int[] imageResIDs = { + R.drawable.guide_1, + R.drawable.guide_2, + R.drawable.guide_3 + }; + + imageViewList = new ArrayList(); + + ImageView iv; +// View view; +// LayoutParams params; + for (int i = 0; i < imageResIDs.length; i++) { + iv = new ImageView(this); +// iv.setBackgroundResource(imageResIDs[i]); + iv.setImageDrawable(getResources().getDrawable(imageResIDs[i])); + iv.setScaleType(ImageView.ScaleType.CENTER_CROP); + imageViewList.add(iv); + + // 根据图片的个数, 每循环一次向LinearLayout中添加一个点 + /*view = new View(this); + view.setBackgroundResource(R.drawable.point_normal); + params = new LayoutParams(10, 10); + if(i != 0) { + params.leftMargin = 10; + } + view.setLayoutParams(params); + llPointGroup.addView(view);*/ + } + } + + class GuideAdapter extends PagerAdapter { + + @Override + public int getCount() { + return imageViewList.size(); + } + + @Override + public boolean isViewFromObject(View arg0, Object arg1) { + return arg0 == arg1; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + container.removeView((View) object); + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + ImageView iv = imageViewList.get(position); + // 1. 向ViewPager中添加一个view对象 + container.addView(iv); + + // 2. 返回当前添加的view对象 + return iv; + } + } + + /** + * 当页面正在滚动时 + * position 当前选中的是哪个页面 + * positionOffset 比例 + * positionOffsetPixels 偏移像素 + */ + @Override + public void onPageScrolled(int position, float positionOffset, + int positionOffsetPixels) { + + // 20 * (1 + 0.99) = 38 +// int leftMargin = (int) (basicWidth * (position + positionOffset)); + +// RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) +// mSelectPointView.getLayoutParams(); +// params.leftMargin = leftMargin; +// mSelectPointView.setLayoutParams(params); + } + + /** + * 当页面被选中 + */ + @Override + public void onPageSelected(int position) { + if(position == imageViewList.size() - 1) { + btnStartExperience.setVisibility(View.VISIBLE); + } else { + btnStartExperience.setVisibility(View.GONE); + } + currentItem = position; + } + + /** + * 当页面滚动状态改变 + */ + @Override + public void onPageScrollStateChanged(int state) { + + } + + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (gestureDetector.onTouchEvent(event)) { + event.setAction(MotionEvent.ACTION_CANCEL); + } + return super.dispatchTouchEvent(event); + } + + private int currentItem = 0; // 当前图片的索引号 + /** 记录当前分页ID */ + private int flaggingWidth;// 互动翻页所需滚动的长度是当前屏幕宽度的1/3 + private class GuideViewTouch extends SimpleOnGestureListener { + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + if (currentItem == 2) { + if (Math.abs(e1.getX() - e2.getX()) > Math.abs(e1.getY() - e2.getY()) + && (e1.getX() - e2.getX() <= (-flaggingWidth) || e1.getX() - e2.getX() >= flaggingWidth)) { + if (e1.getX() - e2.getX() >= flaggingWidth) { + GoToMainActivity(); + return true; + } + } + } + return false; + } + } + + @Override + public void onClick(View v) { + GoToMainActivity(); + } + + public void GoToMainActivity() { + // TODO Auto-generated method stub + // 把IS_OPEN_MAIN_PAGER键, 在缓存中存储一个true. + SharePrefUtil.saveIsFirstBoolean(this, Constant.SP_IS_FIRST_NAME, true); +// if (UIUtils.isLogined()) { +// // 打开主页面 +// startActivity(new Intent(this, MainActivity.class)); +// }else{ +// // 打开登录 +// startActivity(new Intent(this, LoginActivity.class)); +// } + // 打开登录 + startActivity(new Intent(this, LoginNewActivity.class)); + + finish(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/splash/UniappSplashView.java b/app/src/main/java/cn/shangyu/gdxzExpert/splash/UniappSplashView.java new file mode 100644 index 0000000..12a45c0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/splash/UniappSplashView.java @@ -0,0 +1,86 @@ +package cn.shangyu.gdxzExpert.splash; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.graphics.Color; +import android.graphics.drawable.AnimationDrawable; +import android.graphics.drawable.Drawable; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.ImageView; + +import io.dcloud.feature.sdk.Interface.IDCUniMPAppSplashView; + +public class UniappSplashView implements IDCUniMPAppSplashView { + FrameLayout splashView; + + @Override + public View getSplashView(Context context, String appid, String s1, String s2) { + // 设置强制竖屏 + if (context instanceof Activity) { + Activity activity = (Activity) context; + activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + splashView = new FrameLayout(context); + splashView.setBackgroundColor(Color.WHITE); + ImageView imageView = new ImageView(context); + imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); + + // 创建帧动画 + AnimationDrawable animationDrawable = new AnimationDrawable(); + String packageName = context.getPackageName(); + + // 添加4张图片作为动画帧 + int resId1 = context.getResources().getIdentifier("loading_01", "drawable", packageName); + int resId2 = context.getResources().getIdentifier("loading_02", "drawable", packageName); + int resId3 = context.getResources().getIdentifier("loading_03", "drawable", packageName); + int resId4 = context.getResources().getIdentifier("loading_04", "drawable", packageName); + + if (resId1 != 0) { + Drawable drawable1 = context.getResources().getDrawable(resId1); + animationDrawable.addFrame(drawable1, 200); // 每帧200毫秒 + } + if (resId2 != 0) { + Drawable drawable2 = context.getResources().getDrawable(resId2); + animationDrawable.addFrame(drawable2, 200); + } + if (resId3 != 0) { + Drawable drawable3 = context.getResources().getDrawable(resId3); + animationDrawable.addFrame(drawable3, 200); + } + if (resId4 != 0) { + Drawable drawable4 = context.getResources().getDrawable(resId4); + animationDrawable.addFrame(drawable4, 200); + } + + // 设置动画循环播放 + animationDrawable.setOneShot(false); + + // 将动画设置为ImageView的背景 + imageView.setBackground(animationDrawable); + + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER; + splashView.addView(imageView, lp); + + // 启动动画 + imageView.post(new Runnable() { + @Override + public void run() { + animationDrawable.start(); + } + }); + + return splashView; + } + + @Override + public void onCloseSplash(ViewGroup rootView) { + if(rootView != null) + rootView.removeView(splashView); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/splash/WelcomeUI.java b/app/src/main/java/cn/shangyu/gdxzExpert/splash/WelcomeUI.java new file mode 100644 index 0000000..23c02bd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/splash/WelcomeUI.java @@ -0,0 +1,638 @@ +package cn.shangyu.gdxzExpert.splash; + +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.res.Configuration; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.os.Message; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.ForegroundColorSpan; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.Window; +import android.view.WindowManager; +import android.view.animation.Animation; +import android.view.animation.Animation.AnimationListener; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.gyf.immersionbar.ImmersionBar; +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.GuanggaoDetailActivity; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.application.BaseApplication; +import cn.shangyu.gdxzExpert.bean.StartBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.HttpHelper.HttpResult; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.PermissionUtils; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class WelcomeUI extends Activity implements AnimationListener { + + public static final String IS_OPEN_MAIN_PAGER = Constant.SP_IS_FIRST_NAME; + private ImageView mIv_start; + String pathName; + private LinearLayout ll_time; + private TextView mTv_time; + private File currentFile; + SharedPreferences sharedPreferences; + private String url; + TextView t_click; + private String paths; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); +// initFontScale(); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).init(); + //按home键或后退键返回到桌面,再次进入程序会重新启动的解决办法 + if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { + finish(); + return; + } + setContentView(R.layout.welcome); + mIv_start = (ImageView) this.findViewById(R.id.iv_start); + ll_time = (LinearLayout) this.findViewById(R.id.ll_wel_time); + mTv_time = (TextView) this.findViewById(R.id.tv_wel_time); + t_click=findViewById(R.id.t_click); + pathName = getApplicationContext().getExternalFilesDir("").getAbsolutePath()+ "/欢迎页/huanyingye.jpg"; + ll_time.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + + Intent intent = new Intent(); + intent.setClass(WelcomeUI.this, MainActivity.class); + startActivity(intent); + timer.cancel(); + finish(); + + + } + }); + + sharedPreferences = this.getSharedPreferences("share",MODE_PRIVATE); + boolean isFirstRun=sharedPreferences.getBoolean("isFirstRun", true); + if(isFirstRun){ + t_click.setVisibility(View.GONE); + showFWDailog(); + }else{ + + initQuanxian(); + } + + } + private void initFontScale() { + + Configuration configuration = getResources().getConfiguration(); + configuration.fontScale = 1.0f; + //0.85 小, 1 标准大小, 1.15 大,1.3 超大 ,1.45 特大 + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + metrics.scaledDensity = configuration.fontScale * metrics.density; + getBaseContext().getResources().updateConfiguration(configuration, metrics); + } + private void initQuanxian() { + init(); + + } + + private void showFWDailog() { + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dailog_serviceandprivacy, null); + Button btn_cancel = layout.findViewById(R.id.btn_cancel); + Button btn_sure = layout.findViewById(R.id.btn_sure); + TextView tv_tishi = layout.findViewById(R.id.tv_tishi); + String str = new String("欢迎使用肝胆相照,在使用本软件前,请认真阅读《隐私政策》,您同意并接受全部条款后方可使用肝胆相照App。"); + SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(str); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#ff0000")); + spannableBuilder.setSpan(colorSpan, 22, 28, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + + ClickableSpan clickableSpanOne = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(WelcomeUI.this, + NewsDetailActivity.class); + intent.putExtra("url", Url.getyyzc); + intent.putExtra("title", "隐私政策"); + intent.putExtra("from", "WelcomeUI"); + startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + spannableBuilder.setSpan(clickableSpanOne, 22, 28, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tv_tishi.setMovementMethod(LinkMovementMethod.getInstance()); + tv_tishi.setText(spannableBuilder); + final Dialog dialog = new AlertDialog.Builder( + WelcomeUI.this).create(); + dialog.setCancelable(false); + dialog.show(); + Window window =dialog.getWindow(); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog.getWindow().setContentView(layout); + + btn_cancel.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog.dismiss(); + finish(); + } + }); + btn_sure.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + SharedPreferences.Editor editor=sharedPreferences.edit(); + editor.putBoolean("isFirstRun", false); + editor.commit(); + BaseApplication.getInstance().initYinsi(); + dialog.dismiss(); + initQuanxian(); + } + }); + + } + private PermissionUtils.PermissionGrant mPermissionGrant = new PermissionUtils.PermissionGrant() { + @Override + public void onPermissionGranted(int requestCode) { + + switch (requestCode) { + case PermissionUtils.CODE_MULTI_PERMISSION: + + break; + default: + + break; + } + } + }; + + + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + PermissionUtils.requestPermissionsResult(this, requestCode, permissions, grantResults, mPermissionGrant); + + init(); + } + private void init() { + + StartActivity(); + } + + + @Override + public void onAnimationEnd(Animation animation) { + + } + + @Override + public void onAnimationRepeat(Animation animation) { + // TODO Auto-generated method stub + + } + + @Override + public void onAnimationStart(Animation animation) { + // TODO Auto-generated method stub + + } + + private static final int sleepTime = 2000; + + private void StartActivity() { + + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub +// long start = System.currentTimeMillis(); + + try { + +// saveFirstPic(); + GetFirstPic(); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + +// long costTime = System.currentTimeMillis() - start; + // 等待sleeptime时长 +// if (sleepTime - costTime > 0) { +// try { +// Thread.sleep(sleepTime - costTime); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } + +// startGuanggao(); + } + + }).start(); + + } + private void startGuanggao() + + { + + try { + Thread.sleep(500); + // 去文件中取是否打开过程序的值 + final boolean isOpenMainPager = SharePrefUtil.getIsFirstBoolean( + WelcomeUI.this, IS_OPEN_MAIN_PAGER, false); +// long costTime = System.currentTimeMillis() - start; +// // 等待sleeptime时长 +// if (sleepTime - costTime > 0) { +// try { +// Thread.sleep(sleepTime - costTime); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// } + + if (isOpenMainPager) { + if (UIUtils.isLogined()) { + // 已经打开过一次主界面, 直接进入主界面. + // ( 1.待审核 2.审核中 3.需要补充修改资料 4.再次提交审核 5.拒绝 6.已通过) + // int state = SharePrefUtil.getInt(WelcomeUI.this, + // "state", 0); + // if (state == 6) { + // 注册成功跳转 + // intent.setClass(WelcomeUI.this, MainActivity.class); + currentFile = new File(pathName); + if (currentFile.exists()) { + WordLight(); + } else { +// try { +// Thread.sleep(500); + Intent intent = new Intent(); + intent.setClass(WelcomeUI.this, MainActivity.class); + startActivity(intent); + + finish(); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } + + + } + } else { + // 打开登录 + Intent intent = new Intent(); + intent.setClass(WelcomeUI.this, LoginNewActivity.class); + startActivity(intent); + finish(); + } + } else { + // 没有打开过主界面, 进入引导页面. + Intent intent = new Intent(); + intent.setClass(WelcomeUI.this, GuideUI.class); + startActivity(intent); + finish(); + } + + } catch (InterruptedException e) { + e.printStackTrace(); + } + + // 关闭掉欢迎界面 + } + + + private Timer timer; + int time = 3; + + public void WordLight() { + final TimerTask tast = new TimerTask() { + @Override + public void run() { + Message message = Message.obtain(); + handler.sendMessage(message); + } + }; + timer = new Timer(); + timer.schedule(tast, 0, 1000); + } + + private boolean isAdClicked; + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + + if (time == 3) { + if(!StringUtil.isEmpty(paths)) + { + if(WelcomeUI.this!=null&&!WelcomeUI.this.isDestroyed()) + { + RequestOptions requestOptions = new RequestOptions().error(R.drawable.splash_bg).placeholder(R.drawable.splash_bg); + Glide.with(WelcomeUI.this).asBitmap().load(Url.urlHtml + paths).apply(requestOptions).into(mIv_start); + } + + } + ll_time.setVisibility(View.VISIBLE); + if (isMainThread()) { +// ImageLoader.getInstance().displayImage("file://" + pathName,mIv_start); + if (!StringUtil.isEmpty(url)){ + t_click.setVisibility(View.VISIBLE); + t_click.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + isAdClicked = true; + Intent intent23 = new Intent(WelcomeUI.this, GuanggaoDetailActivity.class); + intent23.putExtra("moocurl", url); + startActivity(intent23); + } + }); + } + + } + } + if (time == 0&&!isAdClicked) { + + Intent intent = new Intent(); + intent.setClass(WelcomeUI.this, MainActivity.class); + startActivity(intent); + timer.cancel(); + WelcomeUI.this.finish(); + + + } + if (time >= 0) { + mTv_time.setText("" + time); + } + + time--; + } + }; + + public boolean isMainThread() { + return Looper.getMainLooper().getThread() == Thread.currentThread(); + } + + + + /** + * 功能说明: 更新首页轮播图, method + */ + public void saveFirstPic() { + Map paraMap = new HashMap<>(); +// sendJsonPostParamtoNetSignMD5(Url.getnewsRollIndexNew, paraMap, 1, this); + +// try { +// HttpResult httpResult = HttpHelper.post(Url.getnewsRollIndexNew, null); +// if (httpResult != null) { +// String result = httpResult.getString(); +// +// LogUtil.i("WelcomeUI", "更新轮播图==" + result); +// +// if (result != null) { +// // 把返回的结果保存到sp +// SharePrefUtil.saveString(WelcomeUI.this, +// Url.getnewsRollIndex, result); +// } +// } +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } + } + + /** + * 功能说明: 欢迎页, method + */ + public void GetFirstPic() { + try { + HttpResult httpResult = HttpHelper.post(Url.getStartpage, null); + if (httpResult != null) { + String result = httpResult.getString(); + + StartBean bean = GsonTools.fromGsonToBean(result,StartBean.class); +// String sssss = bean.code; + + if (!bean.code.equals("1")) { + startGuanggao(); + return; + } + if (bean.data == null) { + File currentFile = new File(pathName); +// boolean bbbbb = currentFile.exists(); + if (currentFile.exists()) { + currentFile.delete(); + } + SharePrefUtil.saveString(WelcomeUI.this, Url.getStartpage+"new", + ""); + startGuanggao(); + return; + } + url = bean.data.getUrl(); + paths = bean.data.getPath(); + + if (SharePrefUtil.getString(WelcomeUI.this, Url.getStartpage+"new", "").equals(Url.urlHtml + paths)) { + startGuanggao(); + return; + } + new Thread(new Runnable() { + + @Override + public void run() { + // TODO + Bitmap file = null; + try { + file = ImageLoader.getInstance().loadImageSync(Url.urlHtml+ paths); +// + + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (file != null) { + // File files=WelcomeUI.this.getCacheDir(); + saveImageToGallery(WelcomeUI.this, file); + } + } + } + } + + ).start(); + + + } + else + { + startGuanggao(); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + startGuanggao(); + } + } + + public void saveImageToGallery(Context context, Bitmap bmp) { + // 首先保存图片 + File file = getApplicationContext().getExternalFilesDir(""); + + String fileName = "欢迎页"; + File appDir = new File(file, fileName); + if (!appDir.exists()) { + appDir.mkdirs(); + } + String dataName = "huanyingye.jpg"; + File currentFile = new File(appDir, dataName); + + FileOutputStream fos = null; + try { + fos = new FileOutputStream(currentFile); + bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); + fos.flush(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (fos != null) { + fos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + if (!StringUtil.isEmpty(paths)) { + SharePrefUtil.saveString(WelcomeUI.this, Url.getStartpage+"new", + Url.urlHtml + paths); + startGuanggao(); + } + } + + + + + @Override + protected void onResume() { + super.onResume(); + + } + + + + @Override + protected void onPause() { + + super.onPause(); + } + + @Override + protected void onStop() { + + super.onStop(); + } + + @Override + protected void onDestroy() { + + super.onDestroy(); + } +// private String path; + /** + * 上传log日志 + */ +// private void upLoad() { +// // TODO Auto-generated method stub +// if (Environment.getExternalStorageState().equals( +// Environment.MEDIA_MOUNTED)) { +// path = Environment.getExternalStorageDirectory() +// + "/CrashLogs/CrashLog.log"; +// File mDirectory = new File(path); +// if (mDirectory.exists()) { +// +// try { +// URL url = new URL(Url.CrashUpload); +// HttpURLConnection connection = (HttpURLConnection) url +// .openConnection(); +// connection.setDoInput(true); +// connection.setDoOutput(true); +// connection.setRequestMethod("POST"); +// connection.setRequestProperty("content-type", "text/html"); +// BufferedOutputStream out = new BufferedOutputStream( +// connection.getOutputStream()); +// +// // 读取文件上传到服务器 +// FileInputStream fileInputStream = new FileInputStream( +// mDirectory); +// byte[] bytes = new byte[1024]; +// int numReadByte = 0; +// while ((numReadByte = fileInputStream.read(bytes, 0, 1024)) > 0) { +// out.write(bytes, 0, numReadByte); +// } +// out.flush(); +// fileInputStream.close(); +// // 读取URLConnection的响应 +// DataInputStream in = new DataInputStream( +// connection.getInputStream()); +// mDirectory.delete(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// +// } else { +// +// } +// } +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ui/CircleImageDrawable.java b/app/src/main/java/cn/shangyu/gdxzExpert/ui/CircleImageDrawable.java new file mode 100644 index 0000000..a489b72 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ui/CircleImageDrawable.java @@ -0,0 +1,73 @@ +package cn.shangyu.gdxzExpert.ui; + +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Shader.TileMode; +import android.graphics.drawable.Drawable; + +/** + * + * 类名称:CircleImageDrawable + * 类描述:图片裁圆 + * 创建人:苏三元 + * 时间:2015-9-7 上午10:38:32 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class CircleImageDrawable extends Drawable { + + private Paint mPaint; + private int mWidth; + private Bitmap mBitmap ; + + public CircleImageDrawable(Bitmap bitmap) + { + mBitmap = bitmap ; + BitmapShader bitmapShader = new BitmapShader(bitmap, TileMode.CLAMP, + TileMode.CLAMP); + mPaint = new Paint(); + mPaint.setAntiAlias(true); + mPaint.setShader(bitmapShader); + mWidth = Math.min(mBitmap.getWidth(), mBitmap.getHeight()); + } + + @Override + public void draw(Canvas canvas) { + canvas.drawCircle(mWidth / 2, mWidth / 2, mWidth / 2, mPaint); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void setAlpha(int alpha) { + mPaint.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter cf) { + mPaint.setColorFilter(cf); + } + + @Override + public int getIntrinsicHeight() { + return mWidth; + } + + @Override + public int getIntrinsicWidth() { + return mWidth; + } + +// 调用方法 +// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), +// R.drawable.mv); +// ImageView iv = (ImageView) findViewById(R.id.id_one); +// iv.setImageDrawable(new RoundImageDrawable(bitmap)); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ui/CustomProgressDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/ui/CustomProgressDialog.java new file mode 100644 index 0000000..6e478a4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ui/CustomProgressDialog.java @@ -0,0 +1,78 @@ +package cn.shangyu.gdxzExpert.ui; + +import android.app.ProgressDialog; +import android.content.Context; +import android.graphics.drawable.AnimationDrawable; +import android.os.Bundle; +import android.text.TextUtils; +import android.widget.ImageView; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + +/** + * 自定义圆形进度条对话框 + */ +public class CustomProgressDialog extends ProgressDialog { + + private String content; + private TextView progress_dialog_content; + private ImageView iv_loading; + private AnimationDrawable anim; + + /* + * public CustomProgressDialog(Context context,String content) { + * super(context, style.loading_dialog); this.content = content; + * setCanceledOnTouchOutside(false); } + */ + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + initView(); + initData(); + } + + public CustomProgressDialog(Context context, String content) { + super(context,ProgressDialog.THEME_HOLO_LIGHT); + this.content = content; + setCanceledOnTouchOutside(false); + } + + public CustomProgressDialog(Context context,String content, int theme) { + super(context, theme); + this.content = content; + setCanceledOnTouchOutside(false); + } + + public CustomProgressDialog(Context context) { + super(context,ProgressDialog.THEME_HOLO_LIGHT); + setCanceledOnTouchOutside(false); + } + + private void initData() { + if (!TextUtils.isEmpty(content)) { + setContent(content); + } + } + + public void setContent(String str) { + if(progress_dialog_content!=null) + progress_dialog_content.setText(str); + } + + private void initView() { + // setContentView(R.layout.custom_progress_dialog); + setContentView(R.layout.layout_loading); + progress_dialog_content = (TextView) findViewById(R.id.progress_dialog_content_mess); + iv_loading = (ImageView) findViewById(R.id.iv_loading_mess); + anim = (AnimationDrawable) iv_loading.getBackground(); + iv_loading.post(new Runnable() { + @Override + public void run() { + anim.start(); + } + }); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ui/RoundCornerImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/ui/RoundCornerImageView.java new file mode 100644 index 0000000..2f6b0d9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ui/RoundCornerImageView.java @@ -0,0 +1,90 @@ +package cn.shangyu.gdxzExpert.ui; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.ImageView; +import android.graphics.PorterDuff; + +/** + * + * RoundCornerImageView.java + * @author ssy + * @date 2015-9-6 下午6:59:26 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:自定义显示圆角矩形图片的ImageView对象类 + */ +public class RoundCornerImageView extends ImageView { + private Paint paint; + + public RoundCornerImageView(Context context) { + this(context,null); + } + + public RoundCornerImageView(Context context, AttributeSet attrs) { + this(context, attrs,0); + } + + public RoundCornerImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + paint = new Paint(); + } + + /** + * 绘制圆角矩形图片 + * @author caizhiming + */ + @Override + protected void onDraw(Canvas canvas) { + + Drawable drawable = getDrawable(); + if (null != drawable) { + Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); + //15:圆角矩形的圆角度数 + Bitmap b = getRoundBitmap(bitmap, 15); + final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight()); + final Rect rectDest = new Rect(0,0,getWidth(),getHeight()); + paint.reset(); + canvas.drawBitmap(b, rectSrc, rectDest, paint); + + } else { + super.onDraw(canvas); + } + } + + /** + * 获取圆角矩形图片方法 + * @param bitmap + * @param roundPx,一般设置成14 + * @return Bitmap + * @author caizhiming + */ + private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) { + Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), + bitmap.getHeight(), Config.ARGB_8888); + Canvas canvas = new Canvas(output); + + final int color = 0xff424242; + + final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); + final RectF rectF = new RectF(rect); + paint.setAntiAlias(true); + canvas.drawARGB(0, 0, 0, 0); + paint.setColor(color); + int x = bitmap.getWidth(); + + canvas.drawRoundRect(rectF, roundPx, roundPx, paint); + paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); + canvas.drawBitmap(bitmap, rect, rect, paint); + return output; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/ui/SuperFileView2.java b/app/src/main/java/cn/shangyu/gdxzExpert/ui/SuperFileView2.java new file mode 100644 index 0000000..ff0dcda --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/ui/SuperFileView2.java @@ -0,0 +1,129 @@ +package cn.shangyu.gdxzExpert.ui;//package cn.shangyu.gdxzExpert.ui; +// +//import android.content.Context; +//import android.os.Bundle; +//import android.os.Environment; +//import android.text.TextUtils; +//import android.util.AttributeSet; +//import android.widget.FrameLayout; +//import android.widget.LinearLayout; +// +//import com.tencent.smtt.sdk.TbsReaderView; +// +//import java.io.File; +// +///** +// * Created by 12457 on 2017/8/29. +// */ +// +//public class SuperFileView2 extends FrameLayout implements TbsReaderView.ReaderCallback { +// +// private static String TAG = "SuperFileView"; +// private TbsReaderView mTbsReaderView; +// private int saveTime = -1; +// private Context context; +// +// public SuperFileView2(Context context) { +// this(context, null, 0); +// } +// +// public SuperFileView2(Context context, AttributeSet attrs) { +// this(context, attrs, 0); +// } +// +// public SuperFileView2(Context context, AttributeSet attrs, int defStyleAttr) { +// super(context, attrs, defStyleAttr); +// mTbsReaderView = new TbsReaderView(context, this); +// this.addView(mTbsReaderView, new LinearLayout.LayoutParams(-1, -1)); +// this.context = context; +// } +// +// +// private OnGetFilePathListener mOnGetFilePathListener; +// +// +// public void setOnGetFilePathListener(OnGetFilePathListener mOnGetFilePathListener) { +// this.mOnGetFilePathListener = mOnGetFilePathListener; +// } +// +// +// private TbsReaderView getTbsReaderView(Context context) { +// return new TbsReaderView(context, this); +// } +// +// public void displayFile(File mFile) { +// +// if (mFile != null && !TextUtils.isEmpty(mFile.toString())) { +// //增加下面一句解决没有TbsReaderTemp文件夹存在导致加载文件失败 +// String bsReaderTemp = "/storage/emulated/0/TbsReaderTemp"; +// File bsReaderTempFile =new File(bsReaderTemp); +// +// if (!bsReaderTempFile.exists()) { +// boolean mkdir = bsReaderTempFile.mkdir(); +// if(!mkdir){ +// } +// } +// +// //加载文件 +// Bundle localBundle = new Bundle(); +// localBundle.putString("filePath", mFile.toString()); +// +// localBundle.putString("tempPath", Environment.getExternalStorageDirectory() + "/" + "TbsReaderTemp"); +// +// if (this.mTbsReaderView == null) +// this.mTbsReaderView = getTbsReaderView(context); +// boolean bool = this.mTbsReaderView.preOpen(getFileType(mFile.toString()), false); +// if (bool) { +// this.mTbsReaderView.openFile(localBundle); +// } +// } else { +// } +// +// } +// +// /*** +// * 获取文件类型 +// * +// * @param paramString +// * @return +// */ +// private String getFileType(String paramString) { +// String str = ""; +// +// if (TextUtils.isEmpty(paramString)) { +// return str; +// } +// int i = paramString.lastIndexOf('.'); +// if (i <= -1) { +// return str; +// } +// +// +// str = paramString.substring(i + 1); +// return str; +// } +// +// public void show() { +// if(mOnGetFilePathListener!=null){ +// mOnGetFilePathListener.onGetFilePath(this); +// } +// } +// +// /*** +// * 将获取File路径的工作,“外包”出去 +// */ +// public interface OnGetFilePathListener { +// void onGetFilePath(SuperFileView2 mSuperFileView2); +// } +// +// +// @Override +// public void onCallBackAction(Integer integer, Object o, Object o1) { +// } +// +// public void onStopDisplay() { +// if (mTbsReaderView != null) { +// mTbsReaderView.onStop(); +// } +// } +//} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/AppUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/AppUtils.java new file mode 100644 index 0000000..84b05e0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/AppUtils.java @@ -0,0 +1,45 @@ +package cn.shangyu.gdxzExpert.umeng; + +import android.content.Context; +import android.util.DisplayMetrics; +import android.view.WindowManager; + +public class AppUtils { + public static int dp2px(Context context, float dipValue) { + try { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dipValue * scale + 0.5f); + } catch (Exception e) { + return (int) dipValue; + } + } + + public static int px2dp(Context context, float px) { + try { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (px / scale + 0.5f); + } catch (Exception e) { + return (int) px; + } + } + + public static int getPhoneWidthPixels(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics var2 = new DisplayMetrics(); + if (wm != null) { + wm.getDefaultDisplay().getMetrics(var2); + } + + return var2.widthPixels; + } + + public static int getPhoneHeightPixels(Context context) { + WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics var2 = new DisplayMetrics(); + if (wm != null) { + wm.getDefaultDisplay().getMetrics(var2); + } + + return var2.heightPixels; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/AuthPageConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/AuthPageConfig.java new file mode 100644 index 0000000..fa5ec0c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/AuthPageConfig.java @@ -0,0 +1,18 @@ +package cn.shangyu.gdxzExpert.umeng; + +public interface AuthPageConfig { + /** + * 配置授权页样式 + */ + void configAuthPage(); + + /** + * android8.0兼容 + */ + void onResume(); + + /** + * 释放sdk内部引用,防止内存泄漏 + */ + void release(); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/BaseUIConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/BaseUIConfig.java new file mode 100644 index 0000000..f4e4c59 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/BaseUIConfig.java @@ -0,0 +1,131 @@ +package cn.shangyu.gdxzExpert.umeng; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.graphics.Color; +import android.util.TypedValue; +import android.view.Surface; +import android.view.View; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.umeng.umverify.UMVerifyHelper; + +import static cn.shangyu.gdxzExpert.umeng.AppUtils.dp2px; + +public abstract class BaseUIConfig implements AuthPageConfig { + public Activity mActivity; + public Context mContext; + public UMVerifyHelper mAuthHelper; + public int mScreenWidthDp; + public int mScreenHeightDp; + + public static AuthPageConfig init( int type,Activity activity, UMVerifyHelper authHelper) { + switch (type) { + case 0://login + return new FullPortConfig(activity, authHelper); + case 1://bind + return new FullPortBindConfig(activity, authHelper); +// case DIALOG_PORT: +// return new DialogPortConfig(activity, authHelper); +// case DIALOG_LAND: +// return new DialogLandConfig(activity, authHelper); +// case DIALOG_BOTTOM: +// return new DialogBottomConfig(activity, authHelper); +// case CUSTOM_VIEW: +// return new CustomViewConfig(activity, authHelper); +// case CUSTOM_XML: +// return new CustomXmlConfig(activity, authHelper); + default: + return null; + } + } + + public BaseUIConfig(Activity activity, UMVerifyHelper authHelper) { + mActivity = activity; + mContext = activity.getApplicationContext(); + mAuthHelper = authHelper; + } + + protected View initSwitchView(int marginTop,String text,Boolean center) { + TextView switchTV = new TextView(mContext); +// RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, dp2px(mContext, 50)); + RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + //一键登录按钮默认marginTop 270dp + mLayoutParams.setMargins(dp2px(mContext,20), dp2px(mContext, marginTop), 0, 0); + if(center) + { + mLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); + } + switchTV.setText(text); + switchTV.setTextColor(Color.parseColor("#8D2316")); + switchTV.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14.0F); + switchTV.setLayoutParams(mLayoutParams); + return switchTV; + } + protected View initCustomhView(int marginTop,String text,Boolean center) { + TextView switchTV = new TextView(mContext); +// RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, dp2px(mContext, 50)); + RelativeLayout.LayoutParams mLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); + //一键登录按钮默认marginTop 270dp + mLayoutParams.setMargins(dp2px(mContext,20), dp2px(mContext, marginTop), 0, 0); + if(center) + { + mLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); + } + switchTV.setText(text); + switchTV.setTextColor(Color.parseColor("#ff999999")); + switchTV.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13.0F); + switchTV.setLayoutParams(mLayoutParams); + return switchTV; + } + + protected void updateScreenSize(int authPageScreenOrientation) { + int screenHeightDp = AppUtils.px2dp(mContext, AppUtils.getPhoneHeightPixels(mContext)); + int screenWidthDp = AppUtils.px2dp(mContext, AppUtils.getPhoneWidthPixels(mContext)); + int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); + if (authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_BEHIND) { + authPageScreenOrientation = mActivity.getRequestedOrientation(); + } + if (authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE + || authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE + || authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE) { + rotation = Surface.ROTATION_90; + } else if (authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT + || authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT + || authPageScreenOrientation == ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT) { + rotation = Surface.ROTATION_180; + } + switch (rotation) { + case Surface.ROTATION_0: + case Surface.ROTATION_180: + mScreenWidthDp = screenWidthDp; + mScreenHeightDp = screenHeightDp; + break; + case Surface.ROTATION_90: + case Surface.ROTATION_270: + mScreenWidthDp = screenHeightDp; + mScreenHeightDp = screenWidthDp; + break; + default: + break; + } + } + + + /** + * 在横屏APP弹竖屏一键登录页面或者竖屏APP弹横屏授权页时处理特殊逻辑 + * Android8.0只能启动SCREEN_ORIENTATION_BEHIND模式的Activity + */ + public void onResume() { + + } + + public void release() { + mAuthHelper.setAuthListener(null); + mAuthHelper.setUIClickListener(null); + mAuthHelper.removeAuthRegisterViewConfig(); + mAuthHelper.removeAuthRegisterXmlConfig(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortBindConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortBindConfig.java new file mode 100644 index 0000000..3f568ca --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortBindConfig.java @@ -0,0 +1,196 @@ +package cn.shangyu.gdxzExpert.umeng; + +import android.app.Activity; +import android.content.Context; +import android.content.pm.ActivityInfo; +import android.graphics.Color; +import android.os.Build; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +import com.umeng.umverify.UMResultCode; +import com.umeng.umverify.UMVerifyHelper; +import com.umeng.umverify.listener.UMAuthUIControlClickListener; +import com.umeng.umverify.listener.UMCustomInterface; +import com.umeng.umverify.view.UMAuthRegisterViewConfig; +import com.umeng.umverify.view.UMAuthUIConfig; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; + +public class FullPortBindConfig extends BaseUIConfig { + private final String TAG = "LoginTAG"; + + + public FullPortBindConfig(Activity activity, UMVerifyHelper authHelper) { + super(activity, authHelper); + } + + @Override + public void configAuthPage() { + mAuthHelper.setUIClickListener(new UMAuthUIControlClickListener() { + @Override + public void onClick(String code, Context context, String jsonString) { + try { + JSONObject jsonObj = new JSONObject(jsonString); + switch (code) { + //点击授权页默认样式的返回按钮 + case UMResultCode.CODE_ERROR_USER_CANCEL: + Log.e(TAG, "点击了授权页默认返回按钮"); + mAuthHelper.quitLoginPage(); + mActivity.finish(); + break; + //点击授权页默认样式的切换其他登录方式 会关闭授权页 + //如果不希望关闭授权页那就setSwitchAccHidden(true)隐藏默认的 通过自定义view添加自己的 + case UMResultCode.CODE_ERROR_USER_SWITCH: + Log.e(TAG, "点击了授权页默认切换其他登录方式"); + break; + //点击一键登录按钮会发出此回调 + //当协议栏没有勾选时 点击按钮会有默认toast 如果不需要或者希望自定义内容 setLogBtnToastHidden(true)隐藏默认Toast + //通过此回调自己设置toast + case UMResultCode.CODE_ERROR_USER_LOGIN_BTN: + if (!jsonObj.getBoolean("isChecked")) { + Toast.makeText(mContext, R.string.custom_toast1, Toast.LENGTH_SHORT).show(); + } + break; + //checkbox状态改变触发此回调 + case UMResultCode.CODE_ERROR_USER_CHECKBOX: + + break; + //点击协议栏触发此回调 + case UMResultCode.CODE_ERROR_USER_PROTOCOL_CONTROL: + Log.e(TAG, "点击协议," + "name: " + jsonObj.getString("name") + ", url: " + jsonObj.getString("url")); + break; + default: + break; + + } + } catch (JSONException e) { + + } + } + }); + mAuthHelper.removeAuthRegisterXmlConfig(); + mAuthHelper.removeAuthRegisterViewConfig(); + //添加自定义切换其他登录方式 + mAuthHelper.addAuthRegistViewConfig("switch_msg", new UMAuthRegisterViewConfig.Builder() + .setView(initSwitchView(301,"绑定其他手机号",false)) + .setRootViewId(UMAuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY) + .setCustomInterface(new UMCustomInterface() { + @Override + public void onClick(Context context) { +// Toast.makeText(mContext, "切换到短信登录方式", Toast.LENGTH_SHORT).show(); +// Intent pIntent = new Intent(mActivity, LoginNewActivity.class); +// mActivity.startActivityForResult(pIntent, 1002); + + mAuthHelper.quitLoginPage(); + + + } + }).build()); + mAuthHelper.addAuthRegistViewConfig("text", new UMAuthRegisterViewConfig.Builder() + .setView(initCustomhView(220,"根据工信部网络平台实名制要求,需要您绑定手机号",false)) + .setRootViewId(UMAuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY) + .build()); +// mAuthHelper.addAuthRegisterXmlConfig(new UMAuthRegisterXmlConfig.Builder() +// .setLayout(R.layout.custom_bind, new UMAbstractPnsViewDelegate() { +// @Override +// public void onViewCreated(View view) { +// +// } +// }) +// .build()); + int authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; + if (Build.VERSION.SDK_INT == 26) { + authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND; + } +// Resources resources =mContext.getResources(); + mAuthHelper.setAuthUIConfig(new UMAuthUIConfig.Builder() + //loding + .setLoadingImgDrawable(mContext.getResources().getDrawable(R.drawable.refresh_anim)) +// .setLoadingBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.icon_custom_toast_bg)) + //隐私政策 +// .setAppPrivacyOne("《肝胆相照隐私政策》", "http://doc.igandan.com/app/integral/permission.html") +// .setAppPrivacyTwo("《肝胆相照用户协议》", "http://doc.igandan.com/app/integral/permission.html") + .setPrivacyTextSize(12) + .setAppPrivacyColor(Color.parseColor("#666666"),Color.parseColor("#8D2316")) + .setUncheckedImgPath("login_new_unselect") + .setCheckedImgPath("login_new_select") + .setPrivacyBefore("绑定即同意") + .setPrivacyMargin(15) + .setPrivacyOffsetY_B(15) + .setProtocolGravity(Gravity.LEFT) + .setProtocolLayoutGravity(Gravity.LEFT) + //协议网页 + .setWebViewStatusBarColor(Color.parseColor("#FFEFEFEF")) + .setWebNavColor(Color.parseColor("#FFEFEFEF")) + .setWebNavTextColor(Color.parseColor("#8D2316")) + .setWebNavTextSize(20) + .setWebSupportedJavascript(true) + //隐藏默认切换其他登录方式 + .setSwitchAccHidden(true) + //隐藏默认Toast + .setLogBtnToastHidden(true) + //沉浸式状态栏 + .setStatusBarColor(Color.parseColor("#FFEFEFEF")) + .setStatusBarHidden(false) + .setStatusBarUIFlag(View.SYSTEM_UI_FLAG_LOW_PROFILE) + .setLightColor(true) + //导航栏 + .setNavColor(Color.parseColor("#FFEFEFEF")) + .setNavText("绑定手机") + .setNavTextColor(Color.parseColor("#8D2316")) + .setNavTextSize(20) + .setNavReturnImgPath("top_back") + .setNavReturnHidden(true) + .setNavReturnImgWidth(40) + .setNavReturnImgHeight(40) + .setNavReturnScaleType(ImageView.ScaleType.CENTER) + //logo + .setLogoImgDrawable(mContext.getResources().getDrawable(R.drawable.icon_login_logo)) + .setLogoHidden(false) + .setLogoHeight(73) + .setLogoWidth(73) + .setLogoOffsetY(53) + .setSloganText("专家端") + .setSloganTextSize(16) + .setSloganTextColor(Color.parseColor("#8D2316")) + .setSloganOffsetY(138) + //号码 + .setNumberColor(Color.parseColor("#000000")) + .setNumberSize(17) + .setNumFieldOffsetY(172) + //登录 + .setLogBtnText("一键绑定") + .setLogBtnTextColor(Color.parseColor("#FFFFFF")) + .setLogBtnTextSize(17) + .setLogBtnMarginLeftAndRight(20) + .setLogBtnBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.selector_btn)) + .setLogBtnHeight(39) + .setLogBtnOffsetY(252) +// //短信验证码登录 +// .setSwitchAccHidden(false) +// .setSwitchAccText("短信验证码登录") +// .setSwitchAccTextColor(Color.parseColor("#8D2316")) +// .setSwitchAccTextSize(14) + + //图片或者xml的传参方式为不包含后缀名的全称 需要文件需要放在drawable或drawable-xxx目录下 in_activity.xml, mytel_app_launcher.png + .setAuthPageActIn("in_activity", "out_activity") + .setAuthPageActOut("in_activity", "out_activity") + .setVendorPrivacyPrefix("《") + .setVendorPrivacySuffix("》") +// .setPageBackgroundPath("page_background_color") +// .setLogoImgPath("mytel_app_launcher") + //一键登录按钮三种状态背景示例login_btn_bg.xml +// .setLogBtnBackgroundPath("login_btn_bg") + .setScreenOrientation(authPageOrientation) + .create()); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortConfig.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortConfig.java new file mode 100644 index 0000000..b8b4d44 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/FullPortConfig.java @@ -0,0 +1,413 @@ +package cn.shangyu.gdxzExpert.umeng; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Color; +import android.os.Build; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; +import android.text.style.ForegroundColorSpan; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import com.umeng.umverify.UMResultCode; +import com.umeng.umverify.UMVerifyHelper; +import com.umeng.umverify.listener.UMAuthUIControlClickListener; +import com.umeng.umverify.listener.UMCustomInterface; +import com.umeng.umverify.view.UMAbstractPnsViewDelegate; +import com.umeng.umverify.view.UMAuthRegisterViewConfig; +import com.umeng.umverify.view.UMAuthRegisterXmlConfig; +import com.umeng.umverify.view.UMAuthUIConfig; + +import org.json.JSONException; +import org.json.JSONObject; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.utils.Url; + +public class FullPortConfig extends BaseUIConfig { + private final String TAG = "LoginTAG"; + private Boolean check= false; + private String yinsi1="登录即代表同意《肝胆相照隐私政策》和《肝胆相照用户服务协议》"; + public FullPortConfig(Activity activity, UMVerifyHelper authHelper) { + super(activity, authHelper); + } + + @Override + public void configAuthPage() { + mAuthHelper.setUIClickListener(new UMAuthUIControlClickListener() { + @Override + public void onClick(String code, Context context, String jsonString) { + Log.e(TAG, "jsonString "+jsonString); + try { + JSONObject jsonObj = new JSONObject(jsonString); + switch (code) { + //点击授权页默认样式的返回按钮 + case UMResultCode.CODE_ERROR_USER_CANCEL: + Log.e(TAG, "点击了授权页默认返回按钮"); + mAuthHelper.quitLoginPage(); + mActivity.finish(); + break; + //点击授权页默认样式的切换其他登录方式 会关闭授权页 + //如果不希望关闭授权页那就setSwitchAccHidden(true)隐藏默认的 通过自定义view添加自己的 + case UMResultCode.CODE_ERROR_USER_SWITCH: + Log.e(TAG, "点击了授权页默认切换其他登录方式"); + break; + //点击一键登录按钮会发出此回调 + //当协议栏没有勾选时 点击按钮会有默认toast 如果不需要或者希望自定义内容 setLogBtnToastHidden(true)隐藏默认Toast + //通过此回调自己设置toast + case UMResultCode.CODE_ERROR_USER_LOGIN_BTN: + if (!jsonObj.getBoolean("isChecked")) { +// LayoutInflater inflater = LayoutInflater.from(mActivity); +//// View layout = inflater.inflate(R.layout.dialog_new_notitle,(ViewGroup) mActivity.findViewById(android.R.id.content)); +// View layout = inflater.inflate(R.layout.dialog_new_notitle,(ViewGroup) ((ViewGroup) mActivity +// .findViewById(android.R.id.content)).getChildAt(0)); +// RelativeLayout re=layout.findViewById(R.id.re); +// re.setBackgroundColor(Color.parseColor("#80000000")); +// Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); +// Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); +// TextView tv_tishi=layout.findViewById(R.id.tv_tishi); +// SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(yinsi1); +// ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#8B2316")); +// ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.parseColor("#8B2316")); +// spannableBuilder.setSpan(colorSpan1, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); +// spannableBuilder.setSpan(colorSpan, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); +// ClickableSpan clickableSpanOne = new ClickableSpan() { +// @Override +// public void onClick(View view) { +// Intent intent = new Intent(mActivity, +// NewsDetailActivity.class); +// intent.putExtra("url", Url.getyyzc); +// intent.putExtra("title", "《肝胆相照隐私政策》"); +// mActivity.startActivity(intent); +// } +// @Override +// public void updateDrawState(TextPaint ds) { +// //点击事件去掉下划线 +// ds.setUnderlineText(false); +// } +// +// }; +// ClickableSpan clickableSpanOne1 = new ClickableSpan() { +// @Override +// public void onClick(View view) { +// Intent intent = new Intent(mActivity, +// NewsDetailActivity.class); +// intent.putExtra("url", Url.getzcxy); +// intent.putExtra("title", "《肝胆相照用户服务协议》"); +// mActivity.startActivity(intent); +// } +// @Override +// public void updateDrawState(TextPaint ds) { +// //点击事件去掉下划线 +// ds.setUnderlineText(false); +// } +// +// }; +// spannableBuilder.setSpan(clickableSpanOne, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); +// spannableBuilder.setSpan(clickableSpanOne1, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); +// tv_tishi.setMovementMethod(LinkMovementMethod.getInstance()); +// tv_tishi.setText(spannableBuilder); +// tv_tishi.setGravity(Gravity.LEFT); +// +// btn_cancel.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// // TODO Auto-generated method stub +// ((ViewGroup)v.getRootView()).removeView(re); +// +// } +// }); +// btn_sure.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// +// ((LoginNewActivity) mActivity).wechatLogin(); +// } +// }); +// Toast.makeText(mContext, R.string.custom_toast, Toast.LENGTH_SHORT).show(); + + } + break; + //checkbox状态改变触发此回调 + case UMResultCode.CODE_ERROR_USER_CHECKBOX: + check=jsonObj.getBoolean("isChecked"); +// Log.e(TAG, "checkbox状态变为" + jsonObj.getBoolean("isChecked")); + break; + //点击协议栏触发此回调 + case UMResultCode.CODE_ERROR_USER_PROTOCOL_CONTROL: +// Log.e(TAG, "点击协议," + "name: " + jsonObj.getString("name") + ", url: " + jsonObj.getString("url")); + break; + default: + break; + + } + } catch (JSONException e) { + + } + } + }); + mAuthHelper.removeAuthRegisterXmlConfig(); + mAuthHelper.removeAuthRegisterViewConfig(); + //添加自定义切换其他登录方式 + mAuthHelper.addAuthRegistViewConfig("switch_msg", new UMAuthRegisterViewConfig.Builder() + .setView(initSwitchView(287,"短信验证码登录",false)) + .setRootViewId(UMAuthRegisterViewConfig.RootViewId.ROOT_VIEW_ID_BODY) + .setCustomInterface(new UMCustomInterface() { + @Override + public void onClick(Context context) { +// Toast.makeText(mContext, "切换到短信登录方式", Toast.LENGTH_SHORT).show(); +// Intent pIntent = new Intent(mActivity, LoginNewActivity.class); +// mActivity.startActivityForResult(pIntent, 1002); + + mAuthHelper.quitLoginPage(); + } + }).build()); + + mAuthHelper.addAuthRegisterXmlConfig(new UMAuthRegisterXmlConfig.Builder() + .setLayout(R.layout.custom_login, new UMAbstractPnsViewDelegate() { + @Override + public void onViewCreated(View view) { + +// inflater.inflate(R.layout.dialog_new_notitle, (ViewGroup) view.getRootView()); + + findViewById(R.id.im_wechat).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { +// Log.e(TAG, "点击了we"); + if(!check) + { + if(mActivity instanceof LoginNewActivity) + { + LayoutInflater inflater = LayoutInflater.from(mActivity); + View layout = inflater.inflate(R.layout.dialog_new_notitle,(ViewGroup) v.getRootView()); + RelativeLayout re=layout.findViewById(R.id.re); + re.setBackgroundColor(Color.parseColor("#80000000")); + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(yinsi1); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#8B2316")); + ForegroundColorSpan colorSpan1 = new ForegroundColorSpan(Color.parseColor("#8B2316")); + spannableBuilder.setSpan(colorSpan1, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE ); + spannableBuilder.setSpan(colorSpan, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ClickableSpan clickableSpanOne = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + intent.putExtra("url", Url.getyyzc); + intent.putExtra("title", "《肝胆相照隐私政策》"); + mActivity.startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + ClickableSpan clickableSpanOne1 = new ClickableSpan() { + @Override + public void onClick(View view) { + Intent intent = new Intent(mActivity, + NewsDetailActivity.class); + intent.putExtra("url", Url.getzcxy); + intent.putExtra("title", "《肝胆相照用户服务协议》"); + mActivity.startActivity(intent); + } + @Override + public void updateDrawState(TextPaint ds) { + //点击事件去掉下划线 + ds.setUnderlineText(false); + } + + }; + spannableBuilder.setSpan(clickableSpanOne, 7, 17, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + spannableBuilder.setSpan(clickableSpanOne1, 18, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + tv_tishi.setMovementMethod(LinkMovementMethod.getInstance()); + tv_tishi.setText(spannableBuilder); + tv_tishi.setGravity(Gravity.LEFT); + + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + ((ViewGroup)v.getRootView()).removeView(re); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + ((LoginNewActivity) mActivity).wechatLogin(); + } + }); + +// ((LoginNewActivity) mActivity).show_yinsi(true); + + } +// Toast.makeText(mContext, R.string.custom_toast, Toast.LENGTH_SHORT).show(); + } + else + { +// mAuthHelper.quitLoginPage(); + + if(mActivity instanceof LoginNewActivity) + { + + ((LoginNewActivity) mActivity).wechatLogin(); + } + } + + } + }); + + +// ImageView pImageView = (ImageView) findViewById(R.id.iv_background); +// Glide.with(mContext).load(R.drawable.test).diskCacheStrategy(DiskCacheStrategy.RESOURCE).into(pImageView); +// +// findViewById(R.id.tv_switch).setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// Toast.makeText(mContext, "切换到短信登录方式", Toast.LENGTH_SHORT).show(); +// Intent pIntent = new Intent(mActivity, MessageActivity.class); +// mActivity.startActivityForResult(pIntent, 1002); +// mAuthHelper.quitLoginPage(); +// } +// }); + } + }) + .build()); + + int authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT; + if (Build.VERSION.SDK_INT == 26) { + authPageOrientation = ActivityInfo.SCREEN_ORIENTATION_BEHIND; + } + +// Resources resources =mContext.getResources(); + mAuthHelper.setAuthUIConfig(new UMAuthUIConfig.Builder() + //loding + .setPrivacyAlertIsNeedShow(true) + .setPrivacyAlertIsNeedAutoLogin(true) + .setTapPrivacyAlertMaskCloseAlert(false) + .setPrivacyAlertAlignment(Gravity.CENTER) + .setPrivacyAlertBackgroundColor(Color.WHITE) + .setPrivacyAlertMaskAlpha(0.3f) + .setPrivacyAlertWidth(300) + .setPrivacyAlertHeight(250) + .setPrivacyAlertCornerRadiusArray(new int[]{10, 10, 10, 10}) + .setPrivacyAlertTitleTextSize(17) + .setPrivacyAlertTitleColor(Color.BLACK) + .setPrivacyAlertContentTextSize(15) + .setPrivacyAlertContentColor(Color.parseColor("#8D2316")) + .setPrivacyAlertContentBaseColor(Color.parseColor("#666666")) + .setPrivacyAlertContentHorizontalMargin(40) + .setPrivacyAlertContentVerticalMargin(20) + .setPrivacyAlertBtnTextColor(Color.WHITE) + .setPrivacyAlertBtnWidth(90) + .setPrivacyAlertBtnHeight(44) + .setPrivacyAlertBtnTextSize(15) + .setPrivacyAlertBtnBackgroundImgDrawable(mContext.getResources().getDrawable(R.drawable.selector_btn)) + .setPrivacyAlertEntryAnimation("in_activity") + .setPrivacyAlertExitAnimation("out_activity") + + .setLoadingImgDrawable(mContext.getResources().getDrawable(R.drawable.refresh_anim)) + .setLoadingBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.icon_custom_toast_bg)) + //隐私政策 + .setAppPrivacyOne("《肝胆相照隐私政策》", Url.getyyzc) + .setAppPrivacyTwo("《肝胆相照用户服务协议》", Url.getzcxy) + .setPrivacyTextSize(12) + .setPrivacyOffsetY_B(15) + .setPrivacyEnd("并使用本机号码登录并注册") + .setAppPrivacyColor(Color.parseColor("#666666"),Color.parseColor("#8D2316")) + .setUncheckedImgPath("login_new_unselect") + .setCheckedImgPath("login_new_select") + .setPrivacyMargin(15) + .setProtocolGravity(Gravity.LEFT) + .setProtocolLayoutGravity(Gravity.LEFT) + //协议网页 + .setWebViewStatusBarColor(Color.parseColor("#FFEFEFEF")) + .setWebNavColor(Color.parseColor("#FFEFEFEF")) + .setWebNavTextColor(Color.parseColor("#8D2316")) + .setWebNavTextSize(20) + .setWebSupportedJavascript(true) + //隐藏默认切换其他登录方式 + .setSwitchAccHidden(true) + //隐藏默认Toast + .setLogBtnToastHidden(true) + //沉浸式状态栏 + .setStatusBarColor(Color.parseColor("#FFEFEFEF")) + .setStatusBarHidden(false) + .setStatusBarUIFlag(View.SYSTEM_UI_FLAG_LOW_PROFILE) + .setLightColor(true) + //导航栏 + .setNavColor(Color.parseColor("#FFEFEFEF")) + .setNavText("登录") + .setNavTextColor(Color.parseColor("#8D2316")) + .setNavTextSize(20) + .setNavReturnImgPath("top_back") + .setNavReturnHidden(true) + .setNavReturnImgWidth(40) + .setNavReturnImgHeight(40) + .setNavReturnScaleType(ImageView.ScaleType.CENTER) + //logo + .setLogoImgDrawable(mContext.getResources().getDrawable(R.drawable.icon_login_logo)) + .setLogoHidden(false) + .setLogoHeight(68) + .setLogoWidth(68) + .setLogoOffsetY(48) + .setSloganText("专家端") + .setSloganTextSize(16) + .setSloganTextColor(Color.parseColor("#8D2316")) + .setSloganOffsetY(126) + //号码 + .setNumberColor(Color.parseColor("#000000")) + .setNumberSize(17) + .setNumFieldOffsetY(160) + //登录 + .setLogBtnText("本机号码一键登录") + .setLogBtnTextColor(Color.parseColor("#FFFFFF")) + .setLogBtnTextSize(17) + .setLogBtnMarginLeftAndRight(20) + .setLogBtnBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.selector_btn)) + .setLogBtnHeight(39) + .setLogBtnOffsetY(238) +// //短信验证码登录 +// .setSwitchAccHidden(false) +// .setSwitchAccText("短信验证码登录") +// .setSwitchAccTextColor(Color.parseColor("#8D2316")) +// .setSwitchAccTextSize(14) + + //图片或者xml的传参方式为不包含后缀名的全称 需要文件需要放在drawable或drawable-xxx目录下 in_activity.xml, mytel_app_launcher.png + .setAuthPageActIn("in_activity", "out_activity") + .setAuthPageActOut("in_activity", "out_activity") + .setVendorPrivacyPrefix("《") + .setVendorPrivacySuffix("》") + +// .setPageBackgroundPath("page_background_color") +// .setLogoImgPath("mytel_app_launcher") + //一键登录按钮三种状态背景示例login_btn_bg.xml +// .setLogBtnBackgroundPath("login_btn_bg") + .setScreenOrientation(authPageOrientation) + .create()); + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/MfrMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/MfrMessageActivity.java new file mode 100644 index 0000000..9f3f66d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/MfrMessageActivity.java @@ -0,0 +1,316 @@ +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.application.BaseApplication.getContext; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_PUSH_CLASS_QUALITY_DETAILS; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_PUSH_COURSEWARE_DETAILS; + +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; + +import com.alibaba.fastjson.JSON; +import com.netease.nim.uikit.common.util.log.LogUtil; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.NimIntent; +import com.netease.nimlib.sdk.mixpush.MixPushService; +import com.netease.nimlib.sdk.msg.MessageBuilder; +import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.umeng.analytics.MobclickAgent; +import com.umeng.message.UmengNotifyClickActivity; + +import org.android.agoo.common.AgooConstants; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity; +import cn.shangyu.gdxzExpert.activity.BillDetailsActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity2; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.GanDanHouseDetialActivity; +import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyFuliCardActivity; +import cn.shangyu.gdxzExpert.activity.WebActivity; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.netease.mixpush.DemoMixPushMessageHandler; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.splash.WelcomeUI; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; + +/** + * 厂商通道配置托管启动的Activity + * 如点击小米、华为、OPPO、vivo等系统通道的通知消息,启动的Activity类 + */ +public class MfrMessageActivity extends UmengNotifyClickActivity { + + private static final String TAG = "MfrMessageActivity"; + + @Override + protected void onCreate(Bundle bundle) { + super.onCreate(bundle); + setContentView(R.layout.mfr_message_layout); +// onIntent(); + } + // 处理收到的Intent + private void onIntent() { + LogUtil.i(TAG, "onIntent..."); + LogUtil.i("G2", "onIntent..."); + + + // 已经登录过了,处理过来的请求 + Intent intent = getIntent(); + if (intent != null) { + if(intent.getExtras()!=null) + { + Log.d(TAG, "intent.getExtras(): " + intent.getExtras().toString()); + } + if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT)) { + parseNotifyIntent(intent); + return; + } else if (NIMClient.getService(MixPushService.class).isFCMIntent(intent)) { + parseFCMNotifyIntent(NIMClient.getService(MixPushService.class).parseFCMPayload(intent)); + } + } + } + private void parseFCMNotifyIntent(String payloadString) { + Map payload = JSON.parseObject(payloadString, Map.class); + String sessionId = payload.get(DemoMixPushMessageHandler.PAYLOAD_SESSION_ID); + String type = payload.get(DemoMixPushMessageHandler.PAYLOAD_SESSION_TYPE); + if (sessionId != null && type != null) { + int typeValue = Integer.valueOf(type); + IMMessage message = MessageBuilder.createEmptyMessage(sessionId, SessionTypeEnum.typeOfValue(typeValue), 0); +// showMainActivity(new Intent().putExtra(NimIntent.EXTRA_NOTIFY_CONTENT, message)); + } else { +// showMainActivity(null); + } + } + private void parseNotifyIntent(Intent intent) { + ArrayList messages = (ArrayList) intent.getSerializableExtra(NimIntent.EXTRA_NOTIFY_CONTENT); + if (messages == null || messages.size() > 1) { +// showMainActivity(null); + } else { +// showMainActivity(new Intent().putExtra(NimIntent.EXTRA_NOTIFY_CONTENT, messages.get(0))); + } + } + @Override + public void onMessage(Intent intent) { + + if(intent==null) + return; + Bundle bundle = intent.getExtras(); + if (bundle != null) { + Log.d(TAG, "bundle: " + bundle); + } + else + { + return; + } + super.onMessage(intent); + final String body = intent.getStringExtra(AgooConstants.MESSAGE_BODY); + try { + + JSONObject jsonObject = new JSONObject(body); + PushBean pushBean= GsonTools.fromGsonToBean(body,PushBean.class); + if(pushBean!=null&&pushBean.getExtra()!=null&& !StringUtil.isEmpty(pushBean.getExtra().getMessage_id())) + { + readMessage(pushBean.getExtra().getMessage_id()); + } + if(pushBean!=null&&pushBean.getExtra()!=null&&pushBean.getExtra().getType()!=null) + { + Intent intent3=new Intent(); + + switch (pushBean.getExtra().getType()) + { + case "1": + intent3.setClass(getContext(),PushNewsDetailActivity.class); + intent3.putExtra("title", "新闻详情"); + intent3.putExtra("newsuuid", pushBean.getExtra().getUuid()); + intent3.putExtra("flag", 3); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"3"://肝胆视频 + Intent intent4 = VideoDetailPolyvPlayerActivity.newIntent(getContext(), VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent4.putExtra("startNow", false); + intent4.putExtra("isVlmsOnline", false); + intent4.putExtra("uuid", pushBean.getExtra().getUuid()); + intent4.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent4); + finish(); + break; + case"4"://直播 + intent3.setType("zhibo"); + intent3.setClass(getContext(),PushZhiBoActivity.class); + intent3.putExtra("id", pushBean.getExtra().getId()); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"5"://肝胆课件 + MobclickAgent.onEvent(getContext(),EXPERT_PUSH_COURSEWARE_DETAILS); + intent3.setClass(getContext(),PushCourseUrlDetailActivity.class); + intent3.putExtra("uuid", pushBean.getExtra().getUuid()); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"6"://精品课 + case"7": + MobclickAgent.onEvent(getContext(),EXPERT_PUSH_CLASS_QUALITY_DETAILS); + intent3.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); + intent3.putExtra("excellentcourse_id", pushBean.getExtra().getId()); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"9"://积分商城 + if(BigModule()) + { + intent3.setClass(getContext(), BigPointsMallActivity.class); + } + else + { + intent3.setClass(getContext(), PointsMallActivity.class); + } + + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"10"://指南 + intent3.setClass(getContext(), BookshelfListActivity2.class); + intent3.putExtra("typeUuid", pushBean.getExtra().getUuid()); + intent3.putExtra("title", pushBean.getExtra().getName()); + intent3.putExtra("loadUrl", Url.getGuideList); + intent3.putExtra("type", "0"); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"11"://普通url + intent3.setClass(getContext(), WebActivity.class); + intent3.putExtra("url",pushBean.getExtra().getUrl()); + intent3.putExtra("title","推送消息"); + intent3.putExtra("need_share","0"); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"15"://精品课评论 +// intent3.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); +// intent3.putExtra("excellentcourse_id", pushBean.getExtra().getId()); +// intent3.putExtra("pinglun","yes"); +// intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// getContext().startActivity(intent3); +// finish(); +// break; + case"16"://一问多答 + case"17"://病例讨论 + intent3.setClass(getContext(), NewSystemMessageActivity.class); + intent3.putExtra("module",3); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"18"://送花 + intent3.setClass(getContext(), MyFlowerActivity.class); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"19"://课件收益 + intent.setClass(getContext(), MyCoursewareActivity.class); + intent.putExtra("changeMyCoolect",1); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"21"://提现 + intent3.setClass(getContext(), BillDetailsActivity.class); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"20"://发票 + intent3.setClass(getContext(), FaPiaoActivity.class); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"28"://课件分享 + case"30"://精品课优质评价 + case"31"://学完返现 + case"32"://福利课堂 + case"33"://阅读福利 + case"34"://观看福利 + case"36"://特别奖励 + intent3.setClass(getContext(), AccumulatePointsActivity.class); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case"35"://福利卡 + intent3.setClass(getContext(), MyFuliCardActivity.class); + intent3.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent3); + finish(); + break; + case "40"://互动圈 + intent.setClass(getContext(), GanDanHouseDetialActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("uuid",pushBean.getExtra().getUuid()); + getContext().startActivity(intent); + break; + default: + intent3.setClass(MfrMessageActivity.this, WelcomeUI.class); + startActivity(intent3); + finish(); + break; + } + + } + else if(jsonObject.optJSONObject("extra")!=null&&!(jsonObject.getJSONObject("extra").isNull("url"))) + { + Intent intent2=new Intent(getContext(), WebActivity.class); + intent2.putExtra("url",jsonObject.getJSONObject("extra").getString("url")); + intent2.putExtra("title","推送消息"); + intent2.putExtra("need_share","0"); + intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent2); + finish(); + } + else + { + Intent intent1 = new Intent(); + intent1.setClass(MfrMessageActivity.this, WelcomeUI.class); + startActivity(intent1); + finish(); + } + + + } catch (JSONException e) { + e.printStackTrace(); + } +// Log.d(TAG, "body: " + body); +// if (!TextUtils.isEmpty(body)) { +// runOnUiThread(new Runnable() { +// @Override +// public void run() { +// ((TextView) findViewById(R.id.tv)).setText(body); +// } +// }); +// } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/NewSystemMessageActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/NewSystemMessageActivity.java new file mode 100644 index 0000000..a3d8217 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/NewSystemMessageActivity.java @@ -0,0 +1,624 @@ +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.application.BaseApplication.getContext; +import static cn.shangyu.gdxzExpert.umeng.PushHelper.readMessage; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; +import static cn.shangyu.gdxzExpert.utils.Url.appMesageRead; +import static cn.shangyu.gdxzExpert.utils.Url.unReadList; + +import android.app.AlertDialog; +import android.content.Intent; +import android.graphics.Color; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity; +import cn.shangyu.gdxzExpert.activity.BillDetailsActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity2; +import cn.shangyu.gdxzExpert.activity.CaseCussionDetailActivity; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.GanDanHouseDetialActivity; +import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyFuliCardActivity; +import cn.shangyu.gdxzExpert.activity.WebActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.MessageBean; +import cn.shangyu.gdxzExpert.bean.MessageNumBean; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity; +import cn.shangyu.gdxzExpert.fragment.FuMessageFragment; +import cn.shangyu.gdxzExpert.fragment.HuiMessageFragment; +import cn.shangyu.gdxzExpert.fragment.OrderMessageFragment; +import cn.shangyu.gdxzExpert.fragment.SuiMessageFragment; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.widget.LoadingPage; +import me.majiajie.pagerbottomtabstrip.NavigationController; +import me.majiajie.pagerbottomtabstrip.OldPageNavigationView; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; +import me.majiajie.pagerbottomtabstrip.item.NormalItemView; +import me.majiajie.pagerbottomtabstrip.listener.SimpleTabItemSelectedListener; + +public class NewSystemMessageActivity extends BaseActivity implements OnCallBackFromNet { + + private OldPageNavigationView tab; + +// @Override +// protected void onCreate(Bundle savedInstanceState) { +// super.onCreate(savedInstanceState); +// setContentView(R.layout.activity_new_system_message); +// } + public static final String fragmentTag1 = "fragment1"; + public static final String fragmentTag2 = "fragment2"; + public static final String fragmentTag3 = "fragment3"; + public static final String fragmentTag4 = "fragment4"; + private Fragment currentFragment; + private FragmentManager manager; + private FuMessageFragment fuMessageFragment; + private OrderMessageFragment orderMessageFragment; + private SuiMessageFragment suiMessageFragment; + private HuiMessageFragment huiMessageFragment; + NavigationController navigationController; + private int num0=0,num1=0,num2=0,num3=0; + public Boolean needrequest=false;//是否需要重新请求 + + public int unreadnum=0; + @Override + public void setTitle() { + top_title.setText("消息"); + top_right.setImageResource(R.drawable.clear_message); + top_right.setVisibility(View.VISIBLE); + top_right.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + clearMessage(); + } + }); + } + + private void clearMessage() + { + + LayoutInflater inflater = LayoutInflater.from(this); + RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.dialog_new, null); + AlertDialog dialog3 = new AlertDialog.Builder( + NewSystemMessageActivity.this,AlertDialog.THEME_HOLO_LIGHT).create(); + + Button btn_sure = (Button) layout.findViewById(R.id.btn_sure); + Button btn_cancel = (Button) layout.findViewById(R.id.btn_cancel); + RelativeLayout r_b =layout.findViewById(R.id.r_b); + TextView tv_tishi=layout.findViewById(R.id.tv_tishi); + + if(unreadnum>0) + { + + } + else + { + r_b.setVisibility(View.GONE); + btn_sure.setText("确定"); + tv_tishi.setText("您没有可清除的未读消息"); +// btn_cancel.setVisibility(View.GONE); +// btn_sure.setWidth(dip2px(105)); + } + dialog3.show(); + Window window =dialog3.getWindow(); +// window.setGravity(Gravity.CENTER); + WindowManager.LayoutParams layoutParams = window.getAttributes(); + layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT; + layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; + window.setAttributes(layoutParams); + dialog3.getWindow().setContentView(layout); + dialog3.setCanceledOnTouchOutside(false); + btn_cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + dialog3.dismiss(); + + } + }); + btn_sure.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if(unreadnum>0){ + needrequest=true; + + showLoadingProgress(); + clearMsg(""); + needreportSimple("clear_message"); + } + + dialog3.dismiss(); + } + }); + + } + + @Override + public View onCreateSuccessedView() { + View view = View.inflate(ct, R.layout.activity_new_system_message, null); + tab= view.findViewById(R.id.tab); + + //注意这里调用了custom()方法 + navigationController = tab.custom() + .addItem(newItem(R.drawable.fu_message,R.drawable.fu_message,"福利")) + .addItem(newItem(R.drawable.ding_message,R.drawable.ding_message,"订单")) + .addItem(newItem(R.drawable.sui_message,R.drawable.sui_message,"随访")) + .addItem(newItem(R.drawable.hui_message,R.drawable.hui_message,"回复我的")) + .build(); + + navigationController.addSimpleTabItemSelectedListener(new SimpleTabItemSelectedListener() { + @Override + public void onSelected(int index, int old) { + // 选中时触发 + switch (index) + { + case 0: + showFragment(fuMessageFragment); + break; + case 1: + showFragment(orderMessageFragment); + + break; + case 2: + showFragment(suiMessageFragment); + + break; + case 3: + showFragment(huiMessageFragment); + break; + } + + + + + + } + }); + if(!StringUtil.isEmpty(getIntent().getStringExtra("message_id"))) + { + readMessage(getIntent().getStringExtra("message_id")); + } +// showLoadingProgress(); + initMessage(); + initFragment(); + if(getIntent().getIntExtra("module",0)==0) + { + showFragment(fuMessageFragment); + } + else + { + navigationController.setSelect(getIntent().getIntExtra("module",0)); + } + +// showFragment(fuMessageFragment); + return view; + } + public void initMessage() + { + Map map=new HashMap<>(); + sendJsonPostParamtoNetSignMD5(unReadList,map,101,this); + } + private void clearMsg(String id) + { + + Map map=new HashMap<>(); + map.put("id",id); + sendJsonPostParamtoNetSignMD5(appMesageRead,map,102,this); + } + /** + 71 * 展示Fragment + 72 */ + private void showFragment(Fragment fragment) { + if (currentFragment != fragment) { + FragmentTransaction transaction = manager.beginTransaction(); + if(currentFragment!=null) + { + transaction.hide(currentFragment); + } + + currentFragment = fragment; + if (!fragment.isAdded()) { + transaction.add(R.id.frame_container, fragment).show(fragment).commit(); + } else { + transaction.show(fragment).commit(); + } + } + } + private void initFragment() + { + manager = getSupportFragmentManager(); + //实例化碎片对象 + fuMessageFragment = new FuMessageFragment(); + orderMessageFragment = new OrderMessageFragment(); + suiMessageFragment = new SuiMessageFragment(); + huiMessageFragment=new HuiMessageFragment(); + + + } + //创建一个Item + private BaseTabItem newItem(int drawable, int checkedDrawable, String text){ + NormalItemView normalItemView = new NormalItemView(this); + normalItemView.initialize(drawable,checkedDrawable,text); + normalItemView.setTextDefaultColor(Color.parseColor("#ff666666")); + normalItemView.setTextCheckedColor(Color.parseColor("#ff8B2316")); +// normalItemView.setMessageNumber(1); +// normalItemView.setHasMessage(true); + return normalItemView; + } + + + @Override + public LoadingPage.ResultState onLoad() { + return LoadingPage.ResultState.STATE_SUCCESSED; + } + + @Override + protected void processClick(View v) { + + } + + @Override + public void onCallbackFromThread(String resultJson) { + + } + public void reInitMessage() + { + initMessage(); +// if(fuMessageFragment.isAdded()) +// { +// fuMessageFragment. initMessage("1",fuMessageFragment .page+""); +// } +// if(orderMessageFragment.isAdded()) +// { +// orderMessageFragment. initMessage("2",orderMessageFragment.page+""); +// } +// if(suiMessageFragment.isAdded()) +// { +// suiMessageFragment. initMessage("3",suiMessageFragment.page+""); +// } +// if(huiMessageFragment.isAdded()) +// { +// huiMessageFragment. initMessage("4",huiMessageFragment.page+""); +// } + + if(currentFragment instanceof FuMessageFragment) + { + ((FuMessageFragment) currentFragment). initMessage("1",((FuMessageFragment) currentFragment).page+""); + } + else if(currentFragment instanceof OrderMessageFragment) + { + ((OrderMessageFragment) currentFragment). initMessage("2",((OrderMessageFragment) currentFragment).page+""); + } + else if(currentFragment instanceof SuiMessageFragment) + { + ((SuiMessageFragment) currentFragment). initMessage("3",((SuiMessageFragment) currentFragment).page+""); + } + else if(currentFragment instanceof HuiMessageFragment) + { + ((HuiMessageFragment) currentFragment). initMessage("4",((HuiMessageFragment) currentFragment).page+""); + } + } + MessageNumBean messageNumBean; + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + + switch (resultCode) + { + case 102: + dismissLoadingProgress(); + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.optString("code"))) + { + + if(needrequest) + { + needrequest=false; + reInitMessage(); + + } + } + else + { + ToastUtil.showMessage(jsonObject.optString("message")); + } + + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + case 101: +// dismissLoadingProgress(); + + messageNumBean= GsonTools.fromGsonToBean(resultJson,MessageNumBean.class); + if("200".equals(messageNumBean.getCode())) + { + + if(messageNumBean.getData()!=null) + { +// setUnread(0,111+""); + setUnread(0,messageNumBean.getData().getModule_Welfare()); + setUnread(1,messageNumBean.getData().getModule_Order()); + setUnread(2,messageNumBean.getData().getModule_Relation()); + setUnread(3,messageNumBean.getData().getModule_Comment()); + + } + } + break; + } + + } + public void setUnread(int index,String num) + { + unreadnum=0; + if(!StringUtil.isEmpty(num)&&Integer.valueOf(num)>0) + { + navigationController.setMessageNumber(index,Integer.valueOf(num)); + navigationController.setHasMessage(index,true); + switch (index) + { + case 0: + num0=Integer.valueOf(num); + break; + case 1: + num1=Integer.valueOf(num); + break; + case 2: + num2=Integer.valueOf(num); + break; + case 3: + num3=Integer.valueOf(num); + break; + + + } + + } + else + { + navigationController.setMessageNumber(index,0); + navigationController.setHasMessage(index,false); + switch (index) + { + case 0: + num0=0; + break; + case 1: + num1=0; + break; + case 2: + num2=0; + break; + case 3: + num3=0; + break; + + + } + } + + unreadnum=num0+num1+num2+num3; + } + + public void goActivity(String type, MessageBean.BeanData.DetailBean pushBean,int index) + { + switch (index) + { + case 0: + if(num0>0) + { + clearMsg(pushBean.getId()); + num0--; + setUnread(index,num0+""); + } + break; + case 1: + if(num1>0) + { + clearMsg(pushBean.getId()); + num1--; + setUnread(index,num1+""); + } + break; + case 2: + if(num2>0) + { + clearMsg(pushBean.getId()); + num2--; + setUnread(index,num2+""); + } + break; + case 3: + if(num3>0) + { + clearMsg(pushBean.getId()); + num3--; + setUnread(index,num3+""); + } + break; + + + } + + + Intent intent=new Intent(); + Log.d("WXEntryActivity",type+" "); + switch (type) + { + case "1"://新闻 + intent.setClass(getContext(),PushNewsDetailActivity.class); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", pushBean.getExtra().getUuid()); + intent.putExtra("flag", 3); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"3"://肝胆视频 + Intent intent4 = VideoDetailPolyvPlayerActivity.newIntent(getContext(), VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent4.putExtra("startNow", false); + intent4.putExtra("isVlmsOnline", false); + intent4.putExtra("uuid", pushBean.getExtra().getUuid()); + intent4.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent4); + break; + case"4"://直播 + intent.setType("zhibo"); + intent.setClass(getContext(),PushZhiBoActivity.class); + intent.putExtra("id", pushBean.getExtra().getId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"5"://肝胆课件 + intent.setClass(getContext(),PushCourseUrlDetailActivity.class); + intent.putExtra("uuid", pushBean.getExtra().getUuid()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"6"://精品课 + case"7": + intent.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id", pushBean.getExtra().getId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"9"://积分商城 + if(BigModule()) + { + intent.setClass(getContext(), BigPointsMallActivity.class); + } + else + { + intent.setClass(getContext(), PointsMallActivity.class); + } + + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"10"://指南 + intent.setClass(getContext(), BookshelfListActivity2.class); + intent.putExtra("typeUuid", pushBean.getExtra().getUuid()); + intent.putExtra("title", pushBean.getExtra().getName()); + intent.putExtra("loadUrl", Url.getGuideList); + intent.putExtra("type", "0"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"11"://普通url + intent.setClass(getContext(), WebActivity.class); + intent.putExtra("url",pushBean.getExtra().getUrl()); + intent.putExtra("title","推送消息"); + intent.putExtra("need_share","0"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "12"://申请随访 + case "14": + intent.setClass(getContext(), NormNewPatientActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "13"://解除随访 +// intent.setClass(getContext(), NewSystemMessageActivity.class); +// intent.putExtra("module",2); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// getContext().startActivity(intent); + break; + case"15"://精品课评论 + intent.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id", pushBean.getExtra().getId()); + intent.putExtra("pinglun","yes"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"16"://一问多答 + intent.setClass(getContext(), NewSystemMessageActivity.class); + intent.putExtra("step1_uuid",pushBean.getExtra().getStep1_uuid()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"17"://病例讨论 + intent.setClass(getContext(), CaseCussionDetailActivity.class); + intent.putExtra("uuid", pushBean.getExtra().getUuid());//传值病例的uuid + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"18"://送花 + intent.setClass(getContext(), MyFlowerActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"19"://课件收益 + intent.setClass(getContext(), MyCoursewareActivity.class); + intent.putExtra("changeMyCoolect",1); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"21"://提现 + intent.setClass(getContext(), BillDetailsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"20"://发票 + intent.setClass(getContext(), FaPiaoActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"28"://课件分享 + case"30"://精品课优质评价 + case"31"://学完返现 + case"32"://福利课堂 + case"33"://阅读福利 + case"34"://观看福利 + case"36"://特别奖励 + intent.setClass(getContext(), AccumulatePointsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"35"://福利卡 + intent.setClass(getContext(), MyFuliCardActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "40"://互动圈 + intent.setClass(getContext(), GanDanHouseDetialActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("uuid",pushBean.getExtra().getUuid()); + getContext().startActivity(intent); + + break; + default: + break; + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushBean.java new file mode 100644 index 0000000..ac4efa6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushBean.java @@ -0,0 +1,130 @@ +package cn.shangyu.gdxzExpert.umeng; + +public class PushBean { + private String display_type; + private ExtraBean extra; + private BodyBean body; + private String msg_id; + + public String getDisplay_type() { + return display_type; + } + + public void setDisplay_type(String display_type) { + this.display_type = display_type; + } + + public ExtraBean getExtra() { + return extra; + } + + public void setExtra(ExtraBean extra) { + this.extra = extra; + } + + public BodyBean getBody() { + return body; + } + + public void setBody(BodyBean body) { + this.body = body; + } + + public String getMsg_id() { + return msg_id; + } + + public void setMsg_id(String msg_id) { + this.msg_id = msg_id; + } + + public class ExtraBean + { + private String type; + private String id; + private String uuid; + private String name; + private String url; + private String step1_uuid; + private String message_id; + + public String getMessage_id() { + return message_id; + } + + public void setMessage_id(String message_id) { + this.message_id = message_id; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getStep1_uuid() { + return step1_uuid; + } + + public void setStep1_uuid(String step1_uuid) { + this.step1_uuid = step1_uuid; + } + } + public class BodyBean + { + private String title; + private String text; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushConstants.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushConstants.java new file mode 100644 index 0000000..e602ab9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushConstants.java @@ -0,0 +1,65 @@ +package cn.shangyu.gdxzExpert.umeng; + +/** + * 常量类 + */ +public class PushConstants { + /** + * 应用申请的Appkey + */ +// public static final String APP_KEY = "应用申请的Appkey"; +// public static final String APP_KEY = "6216df0fbe56207ef152880d"; + public static final String APP_KEY = "56caa908e0f55aeff4001cd0"; + /** + * 应用申请的UmengMessageSecret + */ +// public static final String MESSAGE_SECRET = "应用申请的UmengMessageSecret"; + public static final String MESSAGE_SECRET = "38088a7ef3b841e2db034b2f212a4a68"; +// public static final String MESSAGE_SECRET = "2545ed6cd6d0d786680440272c1281bb"; + + /** + * 后台加密消息的密码(仅Demo用,请勿将此密码泄漏) + */ +// public static final String APP_MASTER_SECRET = "0res89pxjfisldc6byibmi7ctd3uxomu"; + public static final String APP_MASTER_SECRET = "8yn9plhdj82c6ubljpieqzr2dlrp7eg6"; + /** + * 渠道名称,修改为您App的发布渠道名称 + */ + public static final String CHANNEL = "Umeng"; + + /** + * 小米后台APP对应的xiaomi id + */ +// public static final String MI_ID = "填写您在小米后台APP对应的xiaomi id"; + public static final String MI_ID = "2882303761517470793"; + + /** + * 小米后台APP对应的xiaomi key + */ +// public static final String MI_KEY = "填写您在小米后台APP对应的xiaomi key"; + public static final String MI_KEY = "5431747048793"; + + /** + * 魅族后台APP对应的xiaomi id + */ +// public static final String MEI_ZU_ID = "填写您在魅族后台APP对应的app id"; + public static final String MEI_ZU_ID = "116090"; + + /** + * 魅族后台APP对应的xiaomi key + */ +// public static final String MEI_ZU_KEY = "填写您在魅族后台APP对应的app key"; + public static final String MEI_ZU_KEY = "9413f9968d654df092afecf4d3782391"; + + /** + * OPPO后台APP对应的app key + */ +// public static final String OPPO_KEY = "填写您在OPPO后台APP对应的app key"; + public static final String OPPO_KEY = "75D5Vqsg63wok0S0w4SKog0w8"; + + /** + * OPPO后台APP对应的app secret + */ +// public static final String OPPO_SECRET = "填写您在OPPO后台APP对应的app secret"; + public static final String OPPO_SECRET = "416a4f5eF822ddcB73B627Cc310636D7"; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushCourseUrlDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushCourseUrlDetailActivity.java new file mode 100644 index 0000000..49af20c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushCourseUrlDetailActivity.java @@ -0,0 +1,1088 @@ +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.util.Log; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.View; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.nostra13.universalimageloader.core.ImageLoader; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.PayCourseActivity; +import cn.shangyu.gdxzExpert.activity.PdfViewActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.CourseDetailBeanNew; +import cn.shangyu.gdxzExpert.ecdemo.storage.CoursewareBookDownloadSqlManager; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.model.DownloadModel; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.TikaUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + +public class PushCourseUrlDetailActivity extends BaseActivity implements + OnCallBackFromNet { + private View view; + private String url; + private X5WebView mWebView; + private WebSettings settings; + PushCourseUrlDetailActivity ct; + private String uuid; + private String title; + CoursewareBookDownloadSqlManager sq; + SQLiteDatabase db; + + private LinearLayout mLl_yuan_download, mLl_look_download, mLl_no_download, + mLl_again_download, mLl_free_download, mLl_ctn_download; + private TextView mTv_course_yuan; + private String providername; + private String expert_uuid; + private String order_id; + private String system_time; + private String type; + private String mPath; + private boolean IsColloction = false; + boolean isCollect = false; + private int freeRecord = 0; + private int state; + private String fileSize; + private String fileMD5_=""; + private TextView tv_downing; + private ECAlertDialog dilaog2; + private RequestCallBack requestCallBack; + public static final int USEWELFARENUM = 202; + private int welfareNum;//剩余福利次数 + + @Override + public void setTitle() { + // TODO Auto-generated method stub +// url = getIntent().getStringExtra("url"); +// LogUtil.i("url = "+url); +// title = getIntent().getStringExtra("title"); + uuid = getIntent().getStringExtra("uuid"); +// if(StringUtil.isEmpty(uuid)) +// { +// uuid=getIntent().getData().getQueryParameter("uuid"); +// } + String collect = getIntent().getStringExtra("collect"); + if (collect != null && collect.equals("collect")) { + isCollect = true; + } + top_title.setText("课件详情"); + top_back.setOnClickListener(this); + } + + @Override + public View onCreateSuccessedView() { + // TODO Auto-generated method stub + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_course_datail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.course_detail_url); + loadingView = view.findViewById(R.id.loading_view); + mLl_yuan_download = (LinearLayout) view + .findViewById(R.id.ll_yuan_download); + mLl_look_download = (LinearLayout) view + .findViewById(R.id.ll_look_download); + mLl_ctn_download = (LinearLayout) view + .findViewById(R.id.ll_ctn_download); + mLl_no_download = (LinearLayout) view.findViewById(R.id.ll_no_download); + mLl_again_download = (LinearLayout) view + .findViewById(R.id.ll_again_download); + mLl_free_download = (LinearLayout) view + .findViewById(R.id.ll_free_download); + mTv_course_yuan = (TextView) view.findViewById(R.id.tv_course_yuan); + tv_downing = view.findViewById(R.id.tv_downing); + ct = this; + db = openOrCreateDatabase("courseware.db", MODE_PRIVATE, null); + sq = new CoursewareBookDownloadSqlManager(db); + gandanFileDetail(); + initLinsener(); + + + + + return view; + } + //使用福利操作 + private void gandanFileDetail() { + Map map = new HashMap<>(); + map.put("uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.gandanFileDetail,map,103,this); + } + + private void initLinsener() { + // TODO Auto-generated method stub + expert_uuid = SharePrefUtil.getString(ct, "uuid", ""); + top_right.setVisibility(View.VISIBLE); + top_right_search.setVisibility(View.VISIBLE); + top_right_search.setImageResource(R.drawable.share_icon); + top_right.setImageResource(R.drawable.nor_nes_no); + top_right_search.setOnClickListener(this); + top_right.setOnClickListener(this); + mLl_yuan_download.setOnClickListener(this); + mLl_look_download.setOnClickListener(this); + mLl_no_download.setOnClickListener(this); + mLl_again_download.setOnClickListener(this); + mLl_free_download.setOnClickListener(this); + mLl_ctn_download.setOnClickListener(this); + } + + public void getCourseType() { + state = getDownloadState(uuid); + if (state == 2) { + mLl_look_download.setVisibility(View.VISIBLE); + // } else { + + } else if (state == 1) { + mLl_ctn_download.setVisibility(View.VISIBLE); +// boolean ishavedown = SharePrefUtil.getBoolean(this, "ishavedown", false); +// if (ishavedown&&"".equals(Constant.isdown)){ +// String ishavedownname = SharePrefUtil.getString(CourseUrlDetailActivity.this, " ", ""); +// if (title.equals(ishavedownname)){ +// tv_downing.setText("下载失败,点击退出重新下载"); +// } +// } + } + getDataResult(); + + } + + /** + * + * @param + * @return 数据库查询下载状态 0未下载,1下载中,2已下载 + */ + + private int getDownloadState(String uuid) { + // TODO Auto-generated method stub + int downloadState = CoursewareBookDownloadSqlManager.getDownloadState(uuid); + Log.d("aaaaaa","downloadState1"+downloadState +uuid); + return downloadState; + } + + public void getDataResult() { + + Map param = new HashMap(); + param.put("file_uuid", uuid); +// param.put("expert_uuid", expert_uuid); + sendJsonPostParamtoNetSignMD5(Url.getGanDanFileDetials, param, 101, ct); + + } + + public void getOrderResult() { + showProgressDialog("创建订单中"); + String expert_uuid = SharePrefUtil.getString(ct, "uuid", ""); + Map param = new HashMap(); + param.put("file_uuid", uuid); + param.put("expert_uuid", expert_uuid); + sendParamtoNet(Url.getCreateGanDanFileOrder, param, 102, ct, true); + } + + public void getSystemTime() { + /** + * 单一下载判断 + * */ +// boolean ishavedown = SharePrefUtil.getBoolean(this, "ishavedown", false); +// if (!ishavedown){ +// Map param = new HashMap(); +// sendParamtoNet(Url.getSystemTime, param, 104, ct, true); +// }else { +// String ishavedownname = SharePrefUtil.getString(CourseUrlDetailActivity.this, "ishavedownname", ""); +// ToastUtil.showMessage("正在下载:"+ishavedownname+",请稍等"); +// } + /******************************************/ + Map param = new HashMap(); + sendParamtoNet(Url.getSystemTime, param, 104, ct, true); + + } + + public String getGdf(int a) { + String mc = null; + try { + System.out.println(uuid + "|" + order_id + "|" + expert_uuid + "|" + + system_time); + + mc = StringUtil.getRandomString(a) + + AESUtil.Encrypt(uuid + "|" + order_id + "|" + expert_uuid + + "|" + system_time, "deoep09_klodLdAo"); + + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return mc; + } + + private void dealNewsDetail() { + // mWebView.setInitialScale(25); +// CookieSyncManager.createInstance(this); +// CookieManager.getInstance().removeAllCookie(); +// settings = mWebView.getSettings(); +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// +// settings.setUseWideViewPort(true);// 设置此属性,可任意比例缩放 +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + loadurl(view, url); + return true; + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + setCookie(); + loadurl(mWebView, url); + } + + public void loadurl(final WebView view, final String url) { + view.loadUrl(url); + } + + @Override + public ResultState onLoad() { + // TODO Auto-generated method stub + return ResultState.STATE_SUCCESSED; + } + + private ECAlertDialog buildAlert; + + public void showDialoag(int time) { + buildAlert = ECAlertDialog.buildAlert(ct, "您还有" + time + + "次免费下载机会,希望本次下载免费吗?", "取消", "确定", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + getOrderResult(); + buildAlert.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (welfareNum>0){ + order_id = "USEWELFARENUM"; + useWelfareNum(); + }else { + order_id = "FREERECORD"; + getSystemTime(); + } + + buildAlert.dismiss(); + + } + }); + buildAlert.setTitle("提示"); + buildAlert.setTitleColor(ct.getResources().getColor(R.color.top_title)); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + @Override + protected void processClick(View v) { + // TODO Auto-generated method stub + switch (v.getId()) { + case R.id.ll_yuan_download: + if (freeRecord > 0 || welfareNum>0) { + showDialoag(freeRecord+welfareNum); + } else { + getOrderResult(); + } + + break; + case R.id.ll_look_download: + if (type != null && type.trim().contains("pdf")) { + openPDFFile(mPath); + } else if (type != null && type.trim().contains("ppt")) { + openPPTFile(mPath); + } else if (type != null && type.trim().contains("doc")) { + openWordFile(mPath); + } + + break; + case R.id.ll_again_download: + getSystemTime(); + break; + case R.id.ll_free_download: + order_id = "FREE"; + int visibility = mLl_ctn_download.getVisibility(); + if (visibility!=0) { +// mLl_ctn_download.setVisibility(View.VISIBLE); +// mLl_look_download.setVisibility(View.GONE); +// mLl_again_download.setVisibility(View.GONE); +// mLl_free_download.setVisibility(View.GONE); +// mLl_yuan_download.setVisibility(View.GONE); + getSystemTime(); + } + break; + case R.id.top_right: + if (IsColloction) { + CollectListDis(); + } else { + CollectSure(); + } + + break; + case R.id.top_right_search: + share(); + break; + case R.id.ll_ctn_download: + /** + * 单一下载判断 + * */ +// boolean ishavedown = SharePrefUtil.getBoolean(this, "ishavedown", false); +// if (ishavedown&&"".equals(Constant.isdown)){//说明之前有下载任务,但意外中断,此时下载状态是下载中 +// DownloadModel downloadModel = new DownloadModel(uuid); +// mLl_look_download.setVisibility(View.GONE); +// mLl_again_download.setVisibility(View.VISIBLE); +// mLl_free_download.setVisibility(View.GONE); +// mLl_yuan_download.setVisibility(View.GONE); +// mLl_ctn_download.setVisibility(View.GONE); +// downloadModel.setState(0);// 0未下载,1下载中,2已下载 +// CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; +// ToastUtil.showMessage("下载失败,请重新下载"); +// finish(); +// }else{ +// ToastUtil.showMessage("下载中..."); +// } + ToastUtil.showMessage("下载中..."); + break; + case R.id.top_back: + if (state==1){ + + dilaog2 = ECAlertDialog.buildAlert(this, + "正在下载课件,退出界面将取消下载。是否退出?", "取消", "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (state==1){ + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + dilaog2.dismiss(); + if (hand!=null){ + hand.cancel(); + } + finish(); + }else { + ToastUtil.showMessage("已下载完成"); + } + + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + }else { + finish(); + } + + break; + } + } + //使用福利操作 + private void useWelfareNum() { + Map map = new HashMap<>(); + map.put("type","2"); + map.put("other_uuid",uuid); + sendJsonPostParamtoNetSignMD5(Url.useWelfareNum,map,USEWELFARENUM,this); + } + /** + * 取消收藏或 收藏 + */ + public void CollectSure() { + showProgressDialog("收藏中"); + StringBuffer Keyword = new StringBuffer(); + Map param = new HashMap(); + param.put("user_uuid", expert_uuid); + param.put("type", "6"); + param.put("other_uuid", uuid); + param.put("title", title); + param.put("path", url); + sendParamtoNet(Url.getcollection, param, 105, ct, true); + } + + public void CollectListDis() { + showProgressDialog("取消收藏中"); + StringBuffer Keyword = new StringBuffer(); + Map param = new HashMap(); + param.put("user_uuid", expert_uuid); + param.put("type", "6"); + param.put("other_uuid", uuid); + sendParamtoNet(Url.getdiscollection, param, 106, ct, true); + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = title; + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的课件:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync( + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + ShareUtils.shareUmeng(ct, shareTitle, "肝胆相照-国内专业优质肝胆课件共享平台", msgSinaContent, + Url.urlHtml, shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + // android获取一个用于打开Word文件的intent + public void openWordFile(String Path) { + File file = new File(Path); + String fileMD5 = TikaUtil.getFileMD5(file); + + if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/msword"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } else { + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(PushCourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + } + + + } + + public void openPPTFile(String Path) { + File file = new File(Path); + String fileMD5 = TikaUtil.getFileMD5(file); + if (file.exists()&&fileMD5_.contains(fileMD5)) { + Intent intent = new Intent("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/vnd.ms-powerpoint"); + try { + ct.startActivity(intent); + } catch (ActivityNotFoundException e) { + ToastUtil.showToast("打开失败, 请安装相应应用!"); + } + } else { + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(PushCourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + } + + } + + public void openPDFFile(final String path) { + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + LogUtil.e("fileMD5 = "+fileMD5); + LogUtil.e("fileMD5_" +fileMD5_); + if (file.exists()&&fileMD5_.contains(fileMD5)) { + + Intent intent1 = new Intent(PushCourseUrlDetailActivity.this,PdfViewActivity.class); + intent1.putExtra("path",path); + intent1.putExtra("title","课件详情"); + startActivity(intent1); + + } else { + CoursewareBookDownloadSqlManager.delDownladInfo(uuid); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + ToastUtil.showToast("打开失败,已经删除,请重新下载!"); + SharePrefUtil.clear(PushCourseUrlDetailActivity.this,uuid+"fileMD5"); + finish(); + } + + + } + + @Override + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + LogUtil.i("resultJson = "+resultJson); + switch (resultCode) { + case 103: + try { + JSONObject jsonObject=new JSONObject(resultJson); + if("200".equals(jsonObject.optString("code"))) + { + url =Url.urlHtml+jsonObject.optJSONObject("data").optString("preview_path"); + title = jsonObject.optJSONObject("data").optString("title"); + dealNewsDetail(); + getCourseType(); + } + else + { + ToastUtil.showMessage(jsonObject.optString("message")); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + + + break; + case 101: + preaseDate(resultJson); + break; + case 102: + preaseOrder(resultJson); + break; + case 104: + JSONObject objs2; + try { + objs2 = new JSONObject(resultJson); + system_time = objs2.getString("system_time"); + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(PushCourseUrlDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + getDownLoadResult(); + } else { + EasyWindow.with(PushCourseUrlDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(PushCourseUrlDetailActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + getDownLoadResult(); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + getDownLoadResult(); + } +// getDownLoadResult(); + break; + case 105: + JSONObject objs; + try { + objs = new JSONObject(resultJson); + String code = objs.getString("code"); + closeProgressDialog(); + if (code != null && code.equals("1")) { + IsColloction = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + ToastUtil.showMessage("收藏失败"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + break; + case 106: + JSONObject objs1; + try { + objs1 = new JSONObject(resultJson); + String code = objs1.getString("code"); + closeProgressDialog(); + if (code != null && code.equals("1")) { + IsColloction = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } else { + ToastUtil.showMessage("取消收藏失败"); + } + } catch (JSONException e) { + // TODO Auto-generated catch block + + } + + break; + + case USEWELFARENUM: + LogUtil.i("USEWELFARENUM = "+resultJson); + try { + JSONObject jsonObject = new JSONObject(resultJson); + String code = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("1".equals(code)){ + getSystemTime(); + }else { + ToastUtil.showMessage(message); + } + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + default: + break; + } + } + + private HttpHandler hand; +// private String filePath = Environment.getExternalStorageDirectory() +// .getAbsolutePath() + "/gdxzExpert/download/肝胆课件/"; + private String filePath =getContext().getExternalFilesDir("").getAbsolutePath()+"/gdxzExpert/download/肝胆课件/"; + private DownloadModel downloadModel; + public void getDownLoadResult() { + int a = StringUtil.getnum(); + // 下载pdf + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {// sdcard存在 + HttpUtils http = new HttpUtils(); + RequestParams params = new RequestParams(); + params.addHeader("Cookie", "token=" + Constant.YKToken); + params.addHeader("Doc-Client", "medicool-android"); + + final String path = filePath + uuid + "." + type.trim(); + // 下载的路径,及app安装包的命名 + // *************************************************** + hand = http.download(Url.getDownloadGanDanFile + "?gdf="+ getGdf(a) + "&a=" + a, path, params, false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + + /** 下载开始 **/ + @Override + public void onStart() { + ToastUtil.showToast("开始下载"); + state = 1; + // 插入下载数据库 + downloadModel = new DownloadModel(uuid); + downloadModel.setTitle(title);// 设置标题 + downloadModel.setCurrentProgress(providername); + downloadModel.setPath(url); + downloadModel.setFilePath(path);// 设置文件下载路径 + downloadModel.setFileFormat(type.trim());// 设置文件格式 + downloadModel.setState(1);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.insertDownload(downloadModel); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",true); +// SharePrefUtil.saveString(CourseUrlDetailActivity.this,"ishavedownname",title); +// Constant.isdown = "1"; + // 异步显示 + ToastUtil.showMessage("下载中"); + mLl_ctn_download.setVisibility(View.VISIBLE); + mLl_look_download.setVisibility(View.GONE); + mLl_again_download.setVisibility(View.GONE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + + + } + + /** 下载中与进度 **/ + @Override + public void onLoading(long total, long current,boolean isUploading) { + + + + } + + /** 下载完成 **/ + @SuppressLint("CommitPrefEdits") + @Override + public void onSuccess(ResponseInfo responseInfo) { + // 更新下载状态为完成 + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + // 异步显示 + File file = new File(path); + String fileMD5 = TikaUtil.getFileMD5(file); + String md5Three = TikaUtil.getMD5Three(path); + + LogUtil.e("fileMD5 = "+fileMD5); + LogUtil.e("fileMD5_" +fileMD5_); + LogUtil.e("md5Three = " +md5Three); + + if (TextUtils.isEmpty(fileMD5_)){ + state = 2; + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN,Context.MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putString(uuid+"fileMD5",fileMD5_); + edit.commit(); + ToastUtil.showToast("下载完成!"); + mLl_look_download.setVisibility(View.VISIBLE); + mLl_again_download.setVisibility(View.GONE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; + }else if (fileMD5_.contains(fileMD5)){ + state = 2; + downloadModel.setState(2);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + SharedPreferences sp = getSharedPreferences(SharePrefUtil.SP_DOWN,Context.MODE_PRIVATE); + SharedPreferences.Editor edit = sp.edit(); + edit.putString(uuid+"fileMD5",fileMD5_); + edit.commit(); + ToastUtil.showToast("下载完成!"); + mLl_look_download.setVisibility(View.VISIBLE); + mLl_again_download.setVisibility(View.GONE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; + }else{ + ToastUtil.showToast("下载失败!请到网络环境良好下载"); + state = 0; + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + mLl_look_download.setVisibility(View.GONE); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + /** + * 单一下载判断 + * */ +// + } + } + + /** 下载失败 **/ + @Override + public void onFailure(HttpException error, String msg) { + LogUtil.i("msg = "+msg+",error = "+error.getMessage()); + ToastUtil.showToast("下载失败!请到网络环境良好下载"); + state = 0; + // 更新下载状态为未下载 + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + mLl_look_download.setVisibility(View.GONE); + mLl_again_download.setVisibility(View.VISIBLE); + mLl_free_download.setVisibility(View.GONE); + mLl_yuan_download.setVisibility(View.GONE); + mLl_ctn_download.setVisibility(View.GONE); + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + /** + * 单一下载判断 + * */ +// SharePrefUtil.saveBoolean(CourseUrlDetailActivity.this,"ishavedown",false); +// Constant.isdown = "0"; + } + }); + + } else { + ToastUtil.showToast("SD卡不存在,无法下载"); + return; + } + } + + public void preaseDate(String result) { + CourseDetailBeanNew bean = GsonTools.fromGsonToBean(result, + CourseDetailBeanNew.class); + freeRecord = bean.data.freeRecord; + welfareNum = bean.data.welfareNum; + if (bean.code.equals("1")) { + type = bean.data.type; + fileSize = bean.data.fileSize; + fileMD5_ = bean.data.fileMD5; + mPath = filePath + uuid + "." + type.trim(); + } + if (mLl_look_download.getVisibility() == View.GONE&& mLl_ctn_download.getVisibility() == View.GONE) { + if (bean.data.price > 0) { + if (bean.data.order == null) { + mTv_course_yuan.setText(bean.data.price / 100.00 + ""); + mLl_yuan_download.setVisibility(View.VISIBLE); +// getWelfareNum(); + + } else { + order_id = bean.data.order.order_id + "&R"; + mLl_again_download.setVisibility(View.VISIBLE); + } + + } else if (bean.data.price == 0) { + mLl_free_download.setVisibility(View.VISIBLE); + } else { + mLl_no_download.setVisibility(View.VISIBLE); + } + } + + if (bean.data.iscollection != null && bean.data.iscollection.equals("1")) { + IsColloction = true; + top_right.setImageResource(R.drawable.nor_news_yes); + } else { + IsColloction = false; + top_right.setImageResource(R.drawable.nor_nes_no); + } + + // FREE_RECORD + } + + public void preaseOrder(String result) { + try { + JSONObject objs = new JSONObject(result); + String retcode = objs.getString("code"); + String message = objs.getString("message"); + int price = objs.getInt("price"); + String date = objs.getString("data"); + providername = objs.getString("providername"); + closeProgressDialog(); + if (retcode != null && retcode.equals("1")) { + JSONObject objdata = new JSONObject(date); + order_id = objdata.getString("id"); + if (StringUtil.isEmpty(order_id)) { + ToastUtil.showToast("创建订单失败"); + return; + } + Intent intent = new Intent(ct, PayCourseActivity.class); + intent.putExtra("providername", providername); + intent.putExtra("money", price + ""); + intent.putExtra("order_id", order_id); + startActivityForResult(intent, 201); + } else { + ToastUtil.showToast("创建订单失败"); + } + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast("创建订单失败"); + } + } + + @Override + public void finish() { + // TODO Auto-generated method stub + if (isCollect && !IsColloction) { + Intent intent = new Intent(); + intent.putExtra("uuid", uuid); + this.setResult(201, intent); + } + super.finish(); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == 201) { + getSystemTime(); + } + } + + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (state==1){ + dilaog2 = ECAlertDialog.buildAlert(this, + "正在下载课件,退出界面将取消下载。是否退出?", "取消", "确定", new DialogInterface.OnClickListener() {// 确定 + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + dilaog2.dismiss(); + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (state==1){ + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + dilaog2.dismiss(); + if (hand!=null){ + hand.cancel(); + } + + finish(); + }else { + ToastUtil.showMessage("已下载完成"); + } + + } + }); + dilaog2.setTitle("温馨提示"); + dilaog2.setCanceledOnTouchOutside(false); + dilaog2.show(); + }else { + finish(); + } + + } + return false; + } + + @Override + protected void onDestroy() { + if (state==1){ + if (downloadModel == null) { + downloadModel = new DownloadModel(uuid); + } + downloadModel.setState(0);// 0未下载,1下载中,2已下载 + CoursewareBookDownloadSqlManager.updateDownloadState(downloadModel); + dilaog2.dismiss(); + if (hand!=null){ + hand.cancel(); + } + } + //释放资源 + if (mWebView != null) + mWebView.destroy(); + + super.onDestroy(); + } + private void setCookie() { + + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeSessionCookies(null); + cookieManager.flush(); + } else { + cookieManager.removeSessionCookie(); + CookieSyncManager.getInstance().sync(); + } + cookieManager.setAcceptCookie(true); + cookieManager.setCookie(url, "hcp_from=expert_app"); + cookieManager.setCookie(url, "hcp_token="+SharePrefUtil.getString(PushCourseUrlDetailActivity.this,"hcp_token","")); +// cookieManager.setCookie(url, "domain="+"https://dev-wx.igandan.com"); +// cookieManager.setCookie(url, "path=/"); +// +// Log.d("gdxzfile","qqqq "+SharePrefUtil.getString(CourseUrlDetailActivity.this,"hcp_token","")); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + + cookieManager.flush(); + } else { + + CookieSyncManager.getInstance().sync(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushHelper.java new file mode 100644 index 0000000..f19fbe8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushHelper.java @@ -0,0 +1,378 @@ + +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.application.BaseApplication.getContext; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.BigModule; +import static cn.shangyu.gdxzExpert.utils.HttpMD5SendInfoUtil.sendJsonPostParamNoResultMD5; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_PUSH_CLASS_QUALITY_DETAILS; +import static cn.shangyu.gdxzExpert.utils.StaUtil.EXPERT_PUSH_COURSEWARE_DETAILS; +import static cn.shangyu.gdxzExpert.utils.Url.appMesageRead; + +import android.app.Application; +import android.app.Notification; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import androidx.annotation.Nullable; + +import com.umeng.analytics.MobclickAgent; +import com.umeng.commonsdk.UMConfigure; +import com.umeng.message.PushAgent; +import com.umeng.message.UmengMessageHandler; +import com.umeng.message.UmengNotificationClickHandler; +import com.umeng.message.api.UPushRegisterCallback; +import com.umeng.message.entity.UMessage; + +import org.android.agoo.huawei.HuaWeiRegister; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity; +import cn.shangyu.gdxzExpert.activity.BillDetailsActivity; +import cn.shangyu.gdxzExpert.activity.BookshelfListActivity2; +import cn.shangyu.gdxzExpert.activity.FaPiaoActivity; +import cn.shangyu.gdxzExpert.activity.GanDanHouseDetialActivity; +import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyFuliCardActivity; +import cn.shangyu.gdxzExpert.activity.WebActivity; +import cn.shangyu.gdxzExpert.big.activity.BigPointsMallActivity; +import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.CourseDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.Url; + + +/** + * PushSDK集成帮助类 + */ +public class PushHelper { + + private static final String TAG = "PushHelper"; + private static PushBean pushBean; + private static Intent intent; + /** + * 预初始化 + */ + public static void preInit(Context context) { + //解决厂商通知点击时乱码等问题 + PushAgent.setup(context, PushConstants.APP_KEY, PushConstants.MESSAGE_SECRET); + UMConfigure.preInit(context, PushConstants.APP_KEY, PushConstants.CHANNEL); + } + + /** + * 初始化 + */ + public static void init(final Context context) { + // 基础组件包提供的初始化函数,应用配置信息:http://message.umeng.com/list/apps + // 参数一:上下文context; + // 参数二:应用申请的Appkey; + // 参数三:发布渠道名称; + // 参数四:设备类型,UMConfigure.DEVICE_TYPE_PHONE:手机;UMConfigure.DEVICE_TYPE_BOX:盒子;默认为手机 + // 参数五:Push推送业务的secret,填写Umeng Message Secret对应信息 +// UMConfigure.init(context, PushConstants.APP_KEY, PushConstants.CHANNEL, +// UMConfigure.DEVICE_TYPE_PHONE, PushConstants.MESSAGE_SECRET); + + //获取推送实例 + PushAgent pushAgent = PushAgent.getInstance(context); + + pushAgent.setNotificationChannelName("系统通知"); + //TODO:需修改为您app/src/main/AndroidManifest.xml中package值 + pushAgent.setResourcePackageName("cn.shangyu.gdxzExpert"); + + //推送设置 + pushSetting(context); + + //注册推送服务,每次调用register方法都会回调该接口 + pushAgent.register(new UPushRegisterCallback() { + + @Override + public void onSuccess(String deviceToken) { + //注册成功会返回deviceToken deviceToken是推送消息的唯一标志 + Log.d(TAG, "deviceToken --> " + deviceToken); + addUMToken(deviceToken); +// //获取deviceToken可通过接口: +// PushAgent.getInstance(context).getRegistrationId(); +// //可设置别名,推送时使用别名推送 +// String alias = "123456"; +// String type = "aa"; +// PushAgent.getInstance(context).setAlias(alias, type, new UPushAliasCallback() { +// @Override +// public void onMessage(boolean success, String message) { +// Log.i(TAG, "setAlias " + success + " msg:" + message); +// } +// }); + } + + @Override + public void onFailure(String errCode, String errDesc) { + Log.d(TAG, "register failure:--> " + "code:" + errCode + ",desc:" + errDesc); + } + }); + registerDeviceChannel(context); + } + public static void addUMToken(String device_token) { + + Map map = new HashMap<>(); + map.put("device_token",device_token); + sendJsonPostParamNoResultMD5(Url.addUMToken,map); + } + public static void readMessage(String id) { + + Map map = new HashMap<>(); + map.put("id",id); + sendJsonPostParamNoResultMD5(appMesageRead,map); + } + /** + * 注册设备推送通道(小米、华为等设备的推送) + */ + private static void registerDeviceChannel(Context context) { + //小米通道,填写您在小米后台APP对应的xiaomi id和key +// MiPushRegistar.register(context, PushConstants.MI_ID, PushConstants.MI_KEY,false); +// //华为,注意华为通道的初始化参数在minifest中配置 + HuaWeiRegister.register((Application) context.getApplicationContext()); +// //魅族,填写您在魅族后台APP对应的app id和key +//// MeizuRegister.register(context, PushConstants.MEI_ZU_ID, PushConstants.MEI_ZU_KEY); +// //OPPO,填写您在OPPO后台APP对应的app key和secret +// OppoRegister.register(context, PushConstants.OPPO_KEY, PushConstants.OPPO_SECRET); + //vivo,注意vivo通道的初始化参数在minifest中配置 +// VivoRegister.register(context); + } + + + //推送设置 + private static void pushSetting(Context context) { + PushAgent pushAgent = PushAgent.getInstance(context); + + //设置通知栏显示通知的最大个数(0~10),0:不限制个数 + pushAgent.setDisplayNotificationNumber(0); + + //推送消息处理 + UmengMessageHandler msgHandler = new UmengMessageHandler() { + //处理通知栏消息 + @Override + public void dealWithNotificationMessage(Context context, UMessage msg) { + super.dealWithNotificationMessage(context, msg); + Log.d(TAG, "notification receiver:" + msg.getRaw().toString()); + } + + //自定义通知样式,此方法可以修改通知样式等 + @Override + public @Nullable Notification getNotification(Context context, UMessage msg) { + return super.getNotification(context, msg); + } + + //处理透传消息 + @Override + public void dealWithCustomMessage(Context context, UMessage msg) { + super.dealWithCustomMessage(context, msg); + Log.d(TAG, "custom receiver:" + msg.getRaw().toString()); + } + }; + pushAgent.setMessageHandler(msgHandler); + + //推送消息点击处理 + UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() { + @Override + public void openActivity(Context context, UMessage msg) { + super.openActivity(context, msg); + Log.d(TAG, "click openActivity: " + msg.getRaw().toString()); + } + + @Override + public void launchApp(Context context, UMessage msg) { + super.launchApp(context, msg); + + try { + JSONObject jsonObject = new JSONObject( msg.getRaw().toString()); + + Log.d(TAG, "click launchApp: " + msg.getRaw().toString()); + pushBean= GsonTools.fromGsonToBean(msg.getRaw().toString(),PushBean.class); + if(pushBean!=null&&pushBean.getExtra()!=null&& !StringUtil.isEmpty(pushBean.getExtra().getMessage_id())) + { + readMessage(pushBean.getExtra().getMessage_id()); + } + if(pushBean!=null&&pushBean.getExtra()!=null&&pushBean.getExtra().getType()!=null) + { + intent=new Intent(); + + switch (pushBean.getExtra().getType()) + { + case "1"://新闻 + intent.setClass(getContext(),PushNewsDetailActivity.class); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid", pushBean.getExtra().getUuid()); + intent.putExtra("flag", 3); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"3"://肝胆视频 + Intent intent4 = VideoDetailPolyvPlayerActivity.newIntent(getContext(), VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent4.putExtra("startNow", false); + intent4.putExtra("isVlmsOnline", false); + intent4.putExtra("uuid", pushBean.getExtra().getUuid()); + intent4.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent4); + break; + case"4"://直播 + intent.setType("zhibo"); + intent.setClass(getContext(),PushZhiBoActivity.class); + intent.putExtra("id", pushBean.getExtra().getId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"5"://肝胆课件 + MobclickAgent.onEvent(getContext(),EXPERT_PUSH_COURSEWARE_DETAILS); + intent.setClass(getContext(),PushCourseUrlDetailActivity.class); + intent.putExtra("uuid", pushBean.getExtra().getUuid()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"6"://精品课 + case"7": + MobclickAgent.onEvent(getContext(),EXPERT_PUSH_CLASS_QUALITY_DETAILS); + intent.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); + intent.putExtra("excellentcourse_id", pushBean.getExtra().getId()); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"9"://积分商城 + if(BigModule()) + { + intent.setClass(getContext(), BigPointsMallActivity.class); + } + else + { + intent.setClass(getContext(), PointsMallActivity.class); + } + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"10"://指南 + intent.setClass(getContext(), BookshelfListActivity2.class); + intent.putExtra("typeUuid", pushBean.getExtra().getUuid()); + intent.putExtra("title", pushBean.getExtra().getName()); + intent.putExtra("loadUrl", Url.getGuideList); + intent.putExtra("type", "0"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"11"://普通url + intent.setClass(getContext(), WebActivity.class); + intent.putExtra("url",pushBean.getExtra().getUrl()); + intent.putExtra("title","推送消息"); + intent.putExtra("need_share","0"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "14": + intent.setClass(context, NormNewPatientActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"15"://精品课评论 +// intent.setClass(getContext(), CourseDetailPolyvPlayerActivity.class); +// intent.putExtra("excellentcourse_id", pushBean.getExtra().getId()); +// intent.putExtra("pinglun","yes"); +// intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); +// getContext().startActivity(intent); +// break; + case"16"://一问多答 + case"17"://病例讨论 + intent.setClass(getContext(), NewSystemMessageActivity.class); + intent.putExtra("module",3); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"18"://送花 + intent.setClass(getContext(), MyFlowerActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"19"://课件收益 + intent.setClass(getContext(), MyCoursewareActivity.class); + intent.putExtra("changeMyCoolect",1); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"21"://提现 + intent.setClass(getContext(), BillDetailsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"20"://发票 + intent.setClass(getContext(), FaPiaoActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"28"://课件分享 + case"30"://精品课优质评价 + case"31"://学完返现 + case"32"://福利课堂 + case"33"://阅读福利 + case"34"://观看福利 + case"36"://特别奖励 + intent.setClass(getContext(), AccumulatePointsActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case"35"://福利卡 + intent.setClass(getContext(), MyFuliCardActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent); + break; + case "40"://互动圈 + intent.setClass(getContext(), GanDanHouseDetialActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra("uuid",pushBean.getExtra().getUuid()); + getContext().startActivity(intent); + break; + default: + break; + } + + } + else if(jsonObject.optJSONObject("extra")!=null&&!(jsonObject.getJSONObject("extra").isNull("url"))) + { + Log.d(TAG, "click launchApp: " +jsonObject.getJSONObject("extra").getString("url")); + Intent intent2=new Intent(getContext(), WebActivity.class); + intent2.putExtra("url",jsonObject.getJSONObject("extra").getString("url")); + intent2.putExtra("title","推送消息"); + intent2.putExtra("need_share","0"); + intent2.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + getContext().startActivity(intent2); + } + pushBean=null; + intent=null; + + } catch (JSONException e) { + e.printStackTrace(); + Log.d(TAG, "click launchApp: " + e.toString()); + } + + + } + + @Override + public void dismissNotification(Context context, UMessage msg) { + super.dismissNotification(context, msg); + Log.d(TAG, "click dismissNotification: " + msg.getRaw().toString()); + } + }; + pushAgent.setNotificationClickHandler(notificationClickHandler); + + //自定义接收并处理消息 +// pushAgent.setPushIntentServiceClass(MyCustomMessageService.class); + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushNewsDetailActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushNewsDetailActivity.java new file mode 100644 index 0000000..dc6228e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushNewsDetailActivity.java @@ -0,0 +1,1686 @@ +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.utils.Url.newsDetail; + +import android.Manifest; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; +import android.view.GestureDetector; +import android.view.Gravity; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.View.OnLongClickListener; +import android.view.View.OnTouchListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.webkit.JsResult; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; +import com.lidroid.xutils.util.LogUtils; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.nostra13.universalimageloader.core.assist.FailReason; +import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; +import com.umeng.socialize.UMShareAPI; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.locks.ReentrantLock; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.activity.AddProclamationActivity; +import cn.shangyu.gdxzExpert.activity.GroupChatSelectPatientActivity; +import cn.shangyu.gdxzExpert.activity.GroupSelectParentActivity; +import cn.shangyu.gdxzExpert.activity.KeyWordActivity; +import cn.shangyu.gdxzExpert.base.BaseActivity; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.ecdemo.ECAsyncTask; +import cn.shangyu.gdxzExpert.ecdemo.RichTextBean; +import cn.shangyu.gdxzExpert.ecdemo.common.CCPAppManager; +import cn.shangyu.gdxzExpert.ecdemo.common.utils.BitmapUtil; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.IMChattingHelper; +import cn.shangyu.gdxzExpert.ecdemo.ui.chatting.ViewImageInfo; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.splash.WelcomeUI; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.utils.Base64Util; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.DownLoadUrlImage; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.ItemLongClickedPopWindow; +import cn.shangyu.gdxzExpert.view.X5WebView; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; +import cn.shangyu.gdxzExpert.widget.ECListDialog; +import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; + + +/** + * 功能说明: + * + * @author 详细新闻页面 NewsDetailActivity + */ + +public class PushNewsDetailActivity extends BaseActivity implements + OnTouchListener, OnClickListener, OnCallBackFromNet { + // private static final long serialVersionUID = 5952689219411916553L; + private String url; + private String title; + private X5WebView mWebView; + private TextView mTv_agree; + private TextView mTv_readNum; + private LinearLayout ll_agree; + private LinearLayout ll_share; + private WebSettings settings; + private String newsTitle = ""; + private String summary = ""; + private String imageUrl = ""; + private ImageView mIv_agree; + private String isAgree;// 0未点赞1点赞 + private int type = 0;// 新闻传值1,科普文章传值2 + private String expertUuid; + private String bookUuid = ""; + private String agreenum = ""; + private String readnum = ""; + private String booktitle = ""; + private PushNewsDetailActivity ctx; + private View view; + private LinearLayout mLl_bottom; + private int noagree = 0; + private int agree = 0; + private Intent intent; + private LinearLayout ll_collect; + private String isCollection; // 是否收藏1收藏过 0为收藏 + private String collpath = ""; + private ImageView iv_collect; + private TextView tv_collect; + private GestureDetector gestureDetector; + private int downX, downY; + int flag =0; + private String hospital_uuid; + private String shareurl; + private String sharetitl; + private boolean isCollt = false; + private String isCollectiontitle; + private String isCollectionPath; + private int detailisAgree; + private String from; + private boolean need_back=false; + + public void setitle1() { + // TODO Auto-generated method stub + intent = getIntent(); + top_back_layout.setVisibility(View.VISIBLE); + top_right_text.setVisibility(View.GONE); + top_back_layout.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + + if("专题e站".equals(title)||need_back) + { + if(mWebView!=null&&mWebView.canGoBack()) + { + + mWebView.goBack(); + } + else + { + finish(); + } + + } + else + { + if ("WelcomeUI".equals(from)){ + startActivity(new Intent(PushNewsDetailActivity.this, WelcomeUI.class)); + } + finish(); + } + + } + }); + /** + * flag == 3 bookUuid,agreenum,readnum,collpath等到请求了接口后调用 + * + */ +// String flags =getIntent().getData().getQueryParameter("flag"); +// if(StringUtil.isEmpty(flags)) +// { + flag = getIntent().getIntExtra("flag", 3); +// } +// else +// { +// flag = Integer.valueOf(flags); +// } + if (flag == 1) {//含分享 + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.share_icon); + top_right.setOnClickListener(this); + } else if (flag == 2) {// 科普 + Constant.isShareGetPoint = true; + type = 2; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("kepuuuid"); +// agreenum = intent.getStringExtra("kepuagreenum"); +// readnum = intent.getStringExtra("kepureadnum"); + + } else if (flag == 3) {// 新闻 + Constant.isShareGetPoint = true; + type = 1; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("newsuuid"); +// if(StringUtil.isEmpty(bookUuid)) +// { +// bookUuid=getIntent().getData().getQueryParameter("uuid"); +// } +// agreenum = intent.getStringExtra("newsagreenum"); +// readnum = intent.getStringExtra("newsreadnum"); +// collpath = intent.getStringExtra("imageUrl"); + } else if (flag == 4) {// 新闻轮播图 + type = 1; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("newssuuuid"); +// agreenum = intent.getStringExtra("newssagreenum"); +// readnum = intent.getStringExtra("newssreadnum"); +// collpath = intent.getStringExtra("imageUrl"); + } else if (flag == 5) {// 首页轮播图 + type = 1; + mLl_bottom.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("newsfsuuuid"); +// agreenum = intent.getStringExtra("newsfagreenum"); +// readnum = intent.getStringExtra("newsfreadnum"); + } else if (flag == 6) {// 经典病例列表 + type = 3; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("nfsuuuid"); +// agreenum = intent.getStringExtra("nfagreenum"); +// readnum = intent.getStringExtra("nfreadnum"); +// collpath = intent.getStringExtra("npath"); +// booktitle = intent.getStringExtra("collect"); + } else if (flag == 7) {// 病历收藏跳过来的 + type = 3; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("other_uuid"); +// agreenum = intent.getStringExtra("agreenum"); +// readnum = intent.getStringExtra("readnum"); +// collpath = intent.getStringExtra("path"); +// booktitle = intent.getStringExtra("collection"); + } else if (flag == 8) { + int isExpert = intent.getIntExtra("isExpert", 0); + if (isExpert == 1) { + top_right.setVisibility(View.VISIBLE); + top_right.setImageResource(R.drawable.icon_contributing); + top_right.setOnClickListener(this); +// hospital_uuid = intent.getStringExtra("hospital_uuid"); + } + }else if (flag == 9) {//更多动态 + mLl_bottom.setVisibility(View.GONE); + + + + }else if (flag == 10){//病例荟萃ShareCaseFragment + type = 7; + mLl_bottom.setVisibility(View.VISIBLE); + ll_collect.setVisibility(View.VISIBLE); + tv_collect.setVisibility(View.VISIBLE); + bookUuid = intent.getStringExtra("nfsuuuid"); +// agreenum = intent.getStringExtra("nfagreenum"); +// readnum = intent.getStringExtra("nfreadnum"); +// collpath = intent.getStringExtra("npath"); +// booktitle = intent.getStringExtra("collect"); + } + /** + * mTv_agree,mTv_readNum等到请求了接口后调用 + * + */ +// if (!"".equals(agreenum)) { +// mTv_agree.setText(agreenum); +// } else { +// mTv_agree.setText("0"); +// } +// if (!"".equals(readnum)) { +// mTv_readNum.setText(readnum); +// } else { +// mTv_readNum.setText("1"); +// } + } + + @Override + public View onCreateSuccessedView() { + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + view = UIUtils.inflate(R.layout.activity_news_detail); + X5WebView.initHardwareAccelerate(this); + mWebView = view.findViewById(R.id.news_detail_wv); + ctx = this; + expertUuid = SharePrefUtil.getString(ct, "uuid", ""); + + mLl_bottom = (LinearLayout) view.findViewById(R.id.ll_bottom); + ll_collect = (LinearLayout) view.findViewById(R.id.ll_collect); + ll_collect.setOnClickListener(this); + ll_agree = (LinearLayout) view.findViewById(R.id.ll_agree);// 点赞 + ll_share = (LinearLayout) view.findViewById(R.id.ll_share);// 分享 + ll_agree.setOnClickListener(this); + ll_share.setOnClickListener(this); + loadingView = view.findViewById(R.id.loading_view); + loadfailView = (LinearLayout) view.findViewById(R.id.ll_load_fail); + mTv_agree = (TextView) view.findViewById(R.id.tv_agree);// 点赞 + mTv_readNum = (TextView) view.findViewById(R.id.tv_readNum);// 显示 阅读量 + mIv_agree = (ImageView) view.findViewById(R.id.iv_agree);// 显示 阅读量 + iv_collect = (ImageView) view.findViewById(R.id.iv_collect);// + tv_collect = (TextView) view.findViewById(R.id.tv_collect);// + + + ll_agree.setOnClickListener(this); + setitle1(); + requestIsAgree(); + showLoadingView(); + /** + * 这三个方法等到请求了接口后调用 + * + */ + +// initData(); + pushDetail(); + AddNewsDetail(); + return view; + } + + //能否解决部分手机WebView崩溃 +// @Override +// public AssetManager getAssets() { +// return getResources().getAssets(); +// } + private void pushDetail() + { + Map map = new HashMap<>(); + map.put("uuid",bookUuid); + sendJsonPostParamtoNetSignMD5(newsDetail,map,105,this); + } + + private void AddNewsDetail() { + + +// // 提取专家uuid + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("uuid", bookUuid); +// params.addBodyParameter("type", String.valueOf(1)); + LogUtil.i("user_uuid = "+expertUuid); + LogUtil.i("uuid = "+bookUuid); + String url = null; + if (flag == 2){ + url = Url.getKePuCollection; + }else if (flag == 10){ + url = Url.caseDetial; + }else { + url = Url.newsDetial; + } + + HttpHelper.loadData(HttpMethod.POST,url, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + processData(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); +// Map param = new HashMap(); +// param.put("user_uuid", expertUuid); +// param.put("uuid", bookUuid); +// sendParamtoNet(Url.newsDetial, param, NEWS_DETAIL, ctx, false); + } + + public void processData(String result) { + LogUtil.i("新闻详情msg = "+result); + String code = null; + String message = null; + // "isAgree": 0, + // "code": "1", + // "isCollection": 0, + // String isAgree=null; + int isCollection = 0; + JSONObject jsonObject = null; + JSONArray jsonArray = null; + try { + + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + isCollection = jsonObject.optInt("isCollection"); + isCollectionPath = jsonObject.optString("path"); + isCollectiontitle = jsonObject.optString("title"); + detailisAgree = jsonObject.optInt("isAgree",2); + int agreenum = jsonObject.optInt("agreenum"); + mTv_agree.setText(agreenum+""); + if (StringUtil.isEmpty(isCollectionPath)){ + isCollectionPath = url.replace(Url.urlHtml,""); + isCollectiontitle = newsTitle; + collpath = imageUrl; + } + if (detailisAgree==0){ + isAgree = "0"; + mIv_agree.setImageResource(R.drawable.argee_no); + noagree = agreenum; + agree = noagree + 1; + + }else if (detailisAgree==1){ + isAgree = "1"; + agree = agreenum; + noagree = agree - 1; + mIv_agree.setImageResource(R.drawable.argee_sure); + + } + if (isCollection==1) { + LogUtil.i("新闻详情isCollection = "+isCollection); + isCollt = true; + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + } else { + isCollt = false; + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + // public void getimageUrl(){ + // Resources r = + // NewsDetailActivity.this.getApplicationContext().getResources(); + // Uri uri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + // + r.getResourcePackageName(R.drawable.default_news_iv) + "/" + // + r.getResourceTypeName(R.drawable.default_news_iv) + "/" + // + r.getResourceEntryName(R.drawable.default_news_iv)); + // String headLineString = + // getAbsoluteImagePath(NewsDetailActivity.this.getApplicationContext() + // ,uri); + // } + @Override + public ResultState onLoad() { + return ResultState.STATE_SUCCESSED; + } + + private void initData() { + url =Url.urlHtml+isCollectionPath; + title = getIntent().getStringExtra("title"); +// from = getIntent().getStringExtra("from"); + need_back=getIntent().getBooleanExtra("need_back",false); + if(StringUtil.isEmpty(title)) + title=""; + LogUtil.e("url = "+url); + // url = "http://www.hep-druginteractions.org/checker"; + if(title.equals("患教详情")){ + String need_inside_share=getIntent().getStringExtra("need_inside_share"); + if(StringUtil.isEmpty(need_inside_share)) + { + top_right_text.setVisibility(View.VISIBLE); + top_right_text.setText("推荐"); + top_right_text.setOnClickListener(this); + } + +// inside_share.setVisibility(View.VISIBLE); +// inside_share.setOnClickListener(this); + } +// newsTitle = getIntent().getStringExtra("newsTitle");// 新闻的标题 +// summary = getIntent().getStringExtra("summary");// 新闻的摘要 + if (type == 1 && StringUtil.isEmpty(summary)) { + summary = "新鲜资讯,一触即达"; + } +// imageUrl = getIntent().getStringExtra("imageUrl");// 新闻的图的地址 + if (!TextUtils.isEmpty(title)) { + if (title.length() > 13) { + String concat = title.substring(0, 13).concat("..."); + top_title.setText(concat); + } else { + top_title.setText(title); + } + } else { + top_title.setText("新闻详情"); + } + // mWebView.setOnTouchListener(this); + gestureDetector = new GestureDetector(this, + new GestureDetector.SimpleOnGestureListener() { + @Override + public void onLongPress(MotionEvent e) { + downX = (int) e.getX(); + downY = (int) e.getY(); + } + }); + dealNewsDetail(); + } + + public void loadurl(final WebView view, final String url) { + LogUtil.i("真实url = "+url); + view.loadUrl(url); + } + + + private void dealNewsDetail() { + + + + // mWebView.setInitialScale(25); + if(title.equals("专题e站")){ + + settings = mWebView.getSettings(); + settings.setBuiltInZoomControls(true); + settings.setDisplayZoomControls(false); + + } + +// // 设置 缓存模式 +// settings.setCacheMode(WebSettings.LOAD_DEFAULT); +// // settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); +// // 开启 DOM storage API 功能 +// settings.setDomStorageEnabled(true); +// // 开启 database storage API 功能 +// settings.setDatabaseEnabled(true); +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { +// settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); +// } + +// settings.setJavaScriptEnabled(true);// 启用javascript脚本 +// settings.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// String ua = settings.getUserAgentString(); +// settings.setUserAgentString(ua + ";GdxzAndroidPatientApp"); +// settings.setLoadWithOverviewMode(true); +// settings.setUseWideViewPort(true); +// settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); +// settings.setSupportZoom(true); +// settings.setBuiltInZoomControls(true); + + if (!StringUtil.isEmpty(getIntent().getStringExtra("homemodal"))) + { + mWebView.getSettings().setBlockNetworkImage(false); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + + mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); + + } + + } + else + { + mWebView.getSettings().setBlockNetworkImage(true); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mWebView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + + mWebView.setWebViewClient(new WebViewClient() { + + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + if("专题e站".equals(title)||need_back) + { + return false; + } + else + { + loadurl(view, url); + return true; + } + + + } + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + LogUtil.i("onPageStarted", "onPageStarted" + url); + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public void onPageFinished(final WebView view, String url) { + // TODO Auto-generated method stub + dismissLoadingView(); + + +// mWebView.loadUrl("javascript:accessSource('" + "app" + "')"); +// mWebView.post(new Runnable() { +// @Override +// public void run() { + + if (!StringUtil.isEmpty(getIntent().getStringExtra("homemodal"))) + { +// + mWebView.evaluateJavascript("accessSource('" + "app" + "')", new ValueCallback() { + @Override + public void onReceiveValue(String value) { + + } + }); +// view.loadUrl("javascript:(function() { " + +// "var videos = document.getElementsByTagName('audio');" + +// " for(var i=0;i= Build.VERSION_CODES.JELLY_BEAN_MR1) { +// +// mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false); +// +// } + } + else + { + mWebView.getSettings().setBlockNetworkImage(false); + } +// } +// }); + + + + if (url.contains("#") && type != 3 && url.contains(Url.urlHtml)) { + String keyWord = url.substring(url.indexOf("#") + 1); + try { + String output = URLDecoder.decode(keyWord, "UTF-8"); + Intent intent = new Intent(ctx, KeyWordActivity.class); + intent.putExtra("keyword", output); + intent.setType(type + ""); + startActivity(intent); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + String urlEnd = url; + if (url.contains(Url.urlHtml)) { + urlEnd = url.split(Url.urlHtml)[1]; + } + if (url.isEmpty() || url.length() <= Url.urlHtml.length() + || StringUtil.isEmpty(urlEnd)) { + if(!url.equals("http://www.igandan.com/")&&!url.equals("http://www.igandan.com")) + loadurl(view, "file:///android_asset/error/error.html"); + } +// if ("乙路前行".equals(top_title.getText())||"谈丙话肝".equals(top_title.getText())||"常见问题".equals(top_title.getText())) { +// shareurl = url; +// sharetitl = view.getTitle(); +// } + if ("乙路前行".equals(top_title.getText())) { + shareurl = url; + sharetitl = "乙路前行—一路有你 一起前行"; + }else if ("谈丙话肝".equals(top_title.getText())) { + shareurl = url; + sharetitl = "谈丙话肝"; + }else if ("常见问题".equals(top_title.getText())) { + shareurl = url; + sharetitl = "肝病常见问题权威答"; + }else if("病例大赛".equals(top_title.getText())){ + shareurl = url; + sharetitl = "第三届利肝中国行病例大赛"; + }else if ("知识大赛".equals(top_title.getText())) { + shareurl = url; + sharetitl = "全国青年医师肝病知识大赛"; + }else if ("肝胆医院".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + }else if ("动态详情".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + }else if ("肝愿为你".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + }else if ("080中国研究".equals(top_title.getText())) { + shareurl = url; + sharetitl = view.getTitle(); + } + else if("专题e站".equals(top_title.getText())) + { + shareurl = url; + sharetitl = view.getTitle(); + } + super.onPageFinished(view, url); + } + + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + dismissLoadingView(); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + loadurl(view, "file:///android_asset/error/error.html"); + super.onReceivedError(view, errorCode, description, failingUrl); + } + }); + mWebView.setWebChromeClient(new WebChromeClient(){ + @Override + public void onReceivedTitle(WebView view, String title1) { + super.onReceivedTitle(view, title1); + if (!StringUtil.isEmpty(getIntent().getStringExtra("homemodal"))) + title =title1; + top_title.setText(title); + + } + + @Override + public boolean onJsConfirm(WebView view, String url, String message, JsResult result) { + ECAlertDialog buildAlert = ECAlertDialog.buildAlert(PushNewsDetailActivity.this, message, "取消", + "确定", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + // TODO Auto-generated method stub + result.cancel(); + + } + }, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + result.confirm(); + } + }); + buildAlert.setTitle("温馨提示"); + buildAlert.setTitleColor(getResources().getColor( + R.color.top_title)); + buildAlert.show(); + + return true; + } + }); + // intent = getIntent(); + // content = intent.getStringExtra("content"); + // mWebView.loadUrl(Url.urlHtml+content); + // mWebView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); + + mWebView.setOnLongClickListener(new OnLongClickListener() { + + @Override + public boolean onLongClick(View v) { + // TODO Auto-generated method stub + WebView.HitTestResult result = ((WebView) v).getHitTestResult(); + + if (null == result) + return false; + int type = result.getType(); + final String imgurl = result.getExtra(); + final ItemLongClickedPopWindow itemLongClickedPopWindow = new ItemLongClickedPopWindow( + PushNewsDetailActivity.this, + ItemLongClickedPopWindow.IMAGE_VIEW_POPUPWINDOW, + LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); + if (type == 0) { + return false; + } + switch (type) { + case WebView.HitTestResult.PHONE_TYPE: // 处理拨号 + break; + case WebView.HitTestResult.EMAIL_TYPE: // 处理Email + break; + case WebView.HitTestResult.GEO_TYPE: // TODO + break; + case WebView.HitTestResult.SRC_ANCHOR_TYPE: // 超链接 + // Log.d(DEG_TAG, "超链接"); + break; + case WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE: + break; + case WebView.HitTestResult.IMAGE_TYPE: // 处理长按图片的菜单项 + // 通过GestureDetector获取按下的位置,来定位PopWindow显示的位置 + itemLongClickedPopWindow.showAtLocation( + findViewById(R.id.ll_bottom), Gravity.BOTTOM + | Gravity.CENTER_HORIZONTAL, 0, 0); + break; + default: + break; + } + itemLongClickedPopWindow.getView( + R.id.item_longclicked_lookImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + ArrayList urls = new ArrayList(); + urls.add(new ViewImageInfo(0, imgurl, imgurl)); + CCPAppManager.startChattingImageViewAction(ct, + 0, urls, true); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_viewImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 取消 + itemLongClickedPopWindow.dismiss(); + } + }); + itemLongClickedPopWindow.getView( + R.id.item_longclicked_saveImage).setOnClickListener( + new OnClickListener() { + @Override + public void onClick(View v) { + // 下载 + itemLongClickedPopWindow.dismiss(); + // 点击图片后将图片保存到SD卡跟目录下的Test文件夹内 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (PermissionsUtil.hasPermission(PushNewsDetailActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + else + { + EasyWindow.with(PushNewsDetailActivity.this).setGravity(Gravity.TOP).setYOffset(200).setWidth(1000) + + .setContentView(R.layout.float_top_dialog_download).show(); + PermissionsUtil.requestPermission(PushNewsDetailActivity.this, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + @Override + public void permissionDenied(@NonNull String[] permissions) { + EasyWindow.cancelAll(); + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + + } + } + else + { + new DownLoadUrlImage(imgurl, ctx); + Toast.makeText(getBaseContext(), "图片保存", + Toast.LENGTH_SHORT).show(); + } + + } + }); + return true; + } + }); + loadurl(mWebView, url); + } + + + + + + + @Override + protected void onResume() { + super.onResume(); + + // webView.resumeTimers(); + try { + if (mWebView != null) { + mWebView.getClass().getMethod("onResume") + .invoke(mWebView, (Object[]) null); + mWebView.onResume(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + protected void onPause() { + super.onPause(); + + // webView.pauseTimers(); + try { + if (mWebView != null) { + mWebView.onPause(); + mWebView.getClass().getMethod("onPause") + .invoke(mWebView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + + + + } + + @Override + protected void processClick(View v) { + switch (v.getId()) { + case R.id.top_right_text: + //分享功能换成分享到容联 + delVisit(); + break; +// case R.id.inside_share: +// //分享功能换成分享到容联 +// delVisit(); +// break; + case R.id.top_back_layout: +// Intent intentCollection = new Intent(); +// intentCollection.putExtra("uuid", bookUuid); +// intentCollection.putExtra("isCollection", isCollt); +// setResult(112, intentCollection); + + + if ("WelcomeUI".equals(from)){ + startActivity(new Intent(PushNewsDetailActivity.this, WelcomeUI.class)); + } + finish(); + + + break; + + case R.id.top_right: + if (flag == 8) { + Intent intent = new Intent(ctx, AddProclamationActivity.class); + intent.putExtra("hospital_uuid", hospital_uuid); + ctx.startActivity(intent); + } else { + share();// 调用分享 + } + + break; + case R.id.ll_collect: + // 调用收藏 + if (isCollection != null) { + if (flag==3||flag==4){//新闻 + if (!isCollt){ + //收藏 + AddCollection(1); + }else { + DisCollection(1); + //取消收藏 + } + }else if (flag==2){ + if (!isCollt){ + //收藏 + AddCollection(2); + }else { + DisCollection(2); + //取消收藏 + } + }else if (flag==10){//病例荟萃 + if (!isCollt){ + //收藏 + AddCollection(7); + }else { + DisCollection(7); + //取消收藏 + } + }else if (!isCollection.equals("1")) { + CollectListSure(3); + // 收藏 + } else { + // 取消收藏 + CollectListDis(3); + } + } + break; + case R.id.ll_agree: + if (isAgree != null) { + LogUtil.i("isAgree = "+isAgree); + if (!isAgree.equals("1")) { + // 点赞 + requestToAgree(); + } else { + // 取消点赞 + requestDissAgree(); + } + } + break; + case R.id.ll_share: + share(); + +// list = PatientSqlManager.getPatientInfoList(Constant.typePatient); +// new ParseHtmlTask(UIUtils.getContext()).execute(); + break; + } + } + + public void delVisit() { + final ECListDialog dialog = new ECListDialog(ct, new String[] { "单独选择", + "分组选择" }); + dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { + @Override + public void onDialogItemClick(Dialog d, int position) { + // canclePatient(CanclePatientUrl, patientUuid, uuid, p); + if (position == 0) { + + Intent intent = new Intent(ct,GroupChatSelectPatientActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + } else { + + Intent intent = new Intent(ct,GroupSelectParentActivity.class); + intent.putExtra("sendgroup",50); + startActivityForResult(intent, 69); + dialog.dismiss(); + + } + } + }); + dialog.setTitle("温馨提示"); + dialog.setTitleColor(ct.getResources().getColor(R.color.top_title)); + dialog.show(); + } + private void AddCollection(int i) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", isCollectiontitle); + params.addBodyParameter("path", isCollectionPath); + params.addBodyParameter("readnum", readnum); + params.addBodyParameter("imgpath", collpath); + params.addBodyParameter("public_name", isCollectiontitle); + params.addBodyParameter("type", String.valueOf(i)); + LogUtil.i("user_uuid = "+expertUuid); + LogUtil.i("other_uuid = "+bookUuid); + LogUtil.i("title = "+isCollectiontitle); + LogUtil.i("path = "+isCollectionPath); + LogUtil.i("readnum = "+readnum); + LogUtil.i("imgpath = "+collpath); + LogUtil.i("public_name = "+isCollectiontitle); + LogUtil.i("type = "+i); + HttpHelper.loadData(HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + + private void DisCollection(int i) { + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("type", String.valueOf(i)); + HttpHelper.loadData(HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + closeProgressDialog(); + processDataColl(info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + closeProgressDialog(); + // onLoaded(); + // ptrLv.setEmptyView(load_empty); + } + }); + } + public void processDataColl(String result) { + LogUtil.i("收藏结果 = "+result); + String code = null; + String message = null; + JSONArray jsonArray = null; + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(result); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + if (code.equals("1")) { + if (isCollt) { + isCollt = false; + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + ToastUtil.showMessage("取消收藏成功"); + } else { + isCollt = true; + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + ToastUtil.showMessage("收藏成功"); + } + + } else { + ToastUtil.showMessage(message); + } + + } catch (JSONException e) { + e.printStackTrace(); + } + } + private void CollectListSure(int i) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid); + params.addBodyParameter("type", String.valueOf(i)); + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", booktitle); + params.addBodyParameter("path", collpath); + + HttpHelper.loadData(HttpMethod.POST, Url.getcollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, Url.getcollection,info.result); + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + ToastUtil.showMessage("收藏成功"); + isCollection = "1"; + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + private void CollectListDis(int type) { + // TODO Auto-generated method stub + RequestParams params = new RequestParams();// 封装参数 + params.addBodyParameter("user_uuid", expertUuid);// 传专家uuid + params.addBodyParameter("type", String.valueOf(type)); + params.addBodyParameter("other_uuid", bookUuid); + params.addBodyParameter("title", booktitle); + params.addBodyParameter("path", collpath); + HttpHelper.loadData(HttpMethod.POST, Url.getdiscollection, params, + new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo info) { + SharePrefUtil.saveString(ct, Url.getdiscollection, + info.result); + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + ToastUtil.showMessage("取消收藏成功"); + isCollection = "0"; + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + LogUtil.i("数据请求失败了: " + arg1); + } + }); + } + + public static final int GET_ISAGREE_FROM_NET = 101; // 是否点赞 + public static final int GET_TOAGREE_FROM_NET = 102; // 点赞 + public static final int GET_DISSAGREE_FROM_NET = 103; // 取消点赞 + public static final int NEWS_DETAIL = 104; // 取消点赞 + + private void requestIsAgree() { + Map param = new HashMap(); + param.put("user_uuid", expertUuid); + param.put("news_article_uuid", bookUuid); + param.put("type", type + ""); + sendParamtoNet(Url.getRead, param, GET_ISAGREE_FROM_NET, ctx, false); + } + + private void requestToAgree() { + Map param = new HashMap(); + param.put("user_uuid", expertUuid); + param.put("news_article_uuid", bookUuid); + param.put("type", type + ""); + sendParamtoNet(Url.getAgree, param, GET_TOAGREE_FROM_NET, ctx, false); + } + + private void requestDissAgree() { + Map param = new HashMap(); + param.put("user_uuid", expertUuid); + param.put("news_article_uuid", bookUuid); + param.put("type", type + ""); + sendParamtoNet(Url.getDisAgree, param, GET_DISSAGREE_FROM_NET, ctx, + false); + } + + public void onCallbackFromThread(String resultJson) { + // TODO Auto-generated method stub + + } + + @Override + public void onCallBackFromThread(String resultJson, int resultCode) { + // TODO Auto-generated method stub + if(resultJson==null) + return; + String code = null; + JSONObject jsonObject = null; + String message = null; + try { + jsonObject = new JSONObject(resultJson); + code = jsonObject.getString("code"); + message = jsonObject.getString("message"); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + if(jsonObject==null||code==null||message==null) + { + return; + } + if (code.equals("1")) { + switch (resultCode) { + case GET_ISAGREE_FROM_NET: + try { + isCollection = jsonObject.getString("isCollection"); + int intagree = 0; + if (!TextUtils.isEmpty(agreenum)) { + intagree = Integer.parseInt(agreenum); + } + if (flag!=10){ + isAgree = jsonObject.getString("isAgree"); + if (isAgree.equals("1")) { + agree = intagree; + noagree = agree - 1; + mIv_agree.setImageResource(R.drawable.argee_sure); + } else { + noagree = intagree; + agree = noagree + 1; + mIv_agree.setImageResource(R.drawable.argee_no); + } + } + + if (flag!=3&&flag!=4&&flag!=2&&flag!=10){ + LogUtil.i("ISAGREE+isCollection = "+isCollection); + if (isCollection!=null&&isCollection.equals("1")) { + iv_collect.setImageResource(R.drawable.icon_book_collect_sel); + } else { + iv_collect.setImageResource(R.drawable.icon_book_collect_nor); + } + } + + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + break; + case GET_TOAGREE_FROM_NET: + isAgree = "1"; + mIv_agree.setImageResource(R.drawable.argee_sure); + ToastUtil.showMessage("点赞成功"); + + mTv_agree.setText(agree + ""); + + break; + case GET_DISSAGREE_FROM_NET: + isAgree = "0"; + mIv_agree.setImageResource(R.drawable.argee_no); + mTv_agree.setText(noagree + ""); + ToastUtil.showMessage("取消点赞成功"); + break; + case NEWS_DETAIL://新闻详情 + processData(resultJson); + break; + } + } else if(code.equals("200")) + { + switch (resultCode) + { + case 105: + try { + summary = jsonObject.getJSONObject("data").optString("summary"); + imageUrl = Url.urlHtml +jsonObject.getJSONObject("data").optString("headImg"); + isCollectionPath = jsonObject.getJSONObject("data").optString("path"); + agreenum=jsonObject.getJSONObject("data").optString("agreenum"); + readnum=jsonObject.getJSONObject("data").optString("readnum"); + newsTitle=jsonObject.getJSONObject("data").optString("title"); + if (!"".equals(agreenum)) { + mTv_agree.setText(agreenum); + } else { + mTv_agree.setText("0"); + } + if (!"".equals(readnum)) { + mTv_readNum.setText(readnum); + } else { + mTv_readNum.setText("1"); + } + initData(); + + } catch (JSONException e) { + e.printStackTrace(); + } + + break; + + } + + } + else { + ToastUtil.showMessage(message); + } + + } + + @Override + public void finish() { + ViewGroup view = (ViewGroup) getWindow().getDecorView(); + view.removeAllViews(); + int flag = getIntent().getIntExtra("flag", 0); + if (flag == 2) {// 科普 + SharePrefUtil.saveString(PushNewsDetailActivity.this, "callnewsUuid", + bookUuid); + SharePrefUtil.saveString(PushNewsDetailActivity.this, "callnewsagree", + mTv_agree.getText().toString()); + SharePrefUtil.saveString(PushNewsDetailActivity.this, "callnewsread", + (Integer.parseInt(mTv_readNum.getText().toString()) + 1) + + ""); + Intent intent = new Intent(); + intent.putExtra("uuid", bookUuid); + intent.putExtra("agreenum", mTv_agree.getText().toString()); + intent.putExtra("readnum",(Integer.parseInt(mTv_readNum.getText().toString()) + 1)+ ""); + intent.putExtra("isCollection", isCollt); + setResult(112, intent); + } else if (flag == 3 || flag == 4 || flag == 5) {// 新闻 + SharePrefUtil.saveString(PushNewsDetailActivity.this, "callnewsUuid", + bookUuid); + SharePrefUtil.saveString(PushNewsDetailActivity.this, "callnewsagree", + mTv_agree.getText().toString()); + SharePrefUtil.saveString(PushNewsDetailActivity.this, "callnewsread", + (Integer.parseInt(mTv_readNum.getText().toString()) + 1)+ ""); + Intent intent = new Intent(); + intent.putExtra("isCollection", isCollt); + intent.putExtra("uuid", bookUuid); + setResult(114, intent); + } else if (flag == 6 || flag == 7|| flag == 10) {// 经典病例,病理荟萃 列表 和收藏 + Intent intent = new Intent(); + intent.putExtra("uuid", bookUuid); + intent.putExtra("agreenum", mTv_agree.getText().toString()); + intent.putExtra("readnum", + (Integer.parseInt(mTv_readNum.getText().toString()) + 1) + + ""); + setResult(113, intent); + } + + super.finish(); + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = newsTitle; + String shareUrl = url; + String msgSinaContent = "分享一篇来自\"肝胆相照\"的文章:" + shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + if (TextUtils.isEmpty(shareTitle)) { + shareTitle = getIntent().getStringExtra("title"); + } + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = newsTitle; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + if ("专题e站".equals(top_title.getText())||"动态详情".equals(top_title.getText())||"肝胆医院".equals(top_title.getText())||"乙路前行".equals(top_title.getText())||"谈丙话肝".equals(top_title.getText())||"常见问题".equals(top_title.getText())||"病例大赛".equals(top_title.getText())||"知识大赛".equals(top_title.getText())||"肝愿为你".equals(top_title.getText())||"080中国研究".equals(top_title.getText())){ + if (!StringUtil.isEmpty(sharetitl)) { + shareTitle = sharetitl; + shareUrl = shareurl; + } + } +// if ("分享肝胆相照APP".equals(title)) { +// shareTitle = "肝胆相照专家端APP"; +// } + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + ShareUtils.shareUmeng(ct, shareTitle, summary, msgSinaContent, + imageUrl, shareUrl, bitmap); + // ShareUtils.mController.openShare(NewsDetailActivity.this, false); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + if (requestCode == 69 + && resultCode == GroupChatSelectPatientActivity.RESULTCODE_OK) { + if (data == null) { + return; + } + mRecipients = data.getStringExtra("uuid"); + if (pd==null){ + pd = new CustomProgressDialog(PushNewsDetailActivity.this, "请稍候"); + } + pd.show(); + new ParseHtmlTask(UIUtils.getContext()).execute(); + + } + } + + @Override + public void setTitle() { + // TODO Auto-generated method stub + + } + + @Override + protected void onDestroy() { + // TODO Auto-generated method stub + + super.onDestroy(); + UMShareAPI.get(this).release(); + Constant.isShareGetPoint = false; + //释放资源 + if (mWebView != null) + mWebView.destroy(); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + // TODO Auto-generated method stub + return gestureDetector.onTouchEvent(event); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK&& event.getRepeatCount() == 0) { + if ("WelcomeUI".equals(from)){ + LogUtil.i("开始启动"); + startActivity(new Intent(PushNewsDetailActivity.this, WelcomeUI.class)); + + } + finish(); + return true; + } + return super.onKeyDown(keyCode, event); + } + + + RichTextBean richTextBean; + public String imagUrl; + //public String urlShare; + public String content; +// private ArrayList list; + private String mRecipients = ""; + CustomProgressDialog pd; + public class ParseHtmlTask extends ECAsyncTask { + + public ParseHtmlTask(Context context) { + super(context); + } + + @Override + protected Object doInBackground(Object[] params) { + +// url = "http://wx.igandan.com/expert/outpatient_details?expert_uuid=" + SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); +// urlShare = Url.urlOutpatient+ SharePrefUtil.getString(UIUtils.getContext(), "uuid", "") + "&expert_name=" + SharePrefUtil.getString(UIUtils.getContext(), "realName", ""); + content = "肝胆相照®肝胆病在线公共服务平台"; + imagUrl = "http://tdoc.igandan.org/app/book/pdf/2019/20190613152617.png"; + // 从患者数据库里取出患者列表 + +// for (int i = 0;i list = new ArrayList<>(); +// String[] split = mRecipients.split(","); +// for (int j = 0; j < split.length; j++) { +// if (!StringUtil.isEmpty(split[j])&&!list.contains(split[j])) { +// list.add(split[j]); +// IMChattingHelper.getInstance().handleSendRichTextMessage(bean, Constant.Patient_AppKey+split[j], "2,1,2,0",NewsDetailActivity.this); +// } +// } + //添加群发记录富文本 + addGroupSendMsg("3",bookUuid,""); + + }else { + IMChattingHelper.getInstance().handleSendRichTextMessage(bean, mRecipients, "2,1,2,0", PushNewsDetailActivity.this); + if(pd!=null) + pd.dismiss(); + } + } + }); + + } + private final ReentrantLock lock = new ReentrantLock(); + private void addGroupSendMsg(String msg_type, String msg_content, final String mFilePath1) { + +// if (pd==null){ +// pd = new CustomProgressDialog(NewsDetailActivity.this, "请稍候"); +// } +// pd.show(); + final Map map = new HashMap<>(); + map.put("msg_type",msg_type); + if (StringUtil.isEmpty(mFilePath1)){ + map.put("msg_content",msg_content); + } + map.put("patient_user_uuid",mRecipients); + map.put("user_uuid", SharePrefUtil.getString(PushNewsDetailActivity.this, "uuid", "")); + map.put("client_type", "A"); + map.put("version", UpdateVersionUtils.getVersionName() ); + LogUtils.e("user_uuid+version = "+SharePrefUtil.getString(PushNewsDetailActivity.this, "uuid", "")+","+UpdateVersionUtils.getVersionName()); + new Thread(new Runnable() { + private HttpHelper.HttpResult httpResult; + private String result1; + + @Override + public void run() { + // TODO Auto-generated method stub + lock.lock(); + + try { + if(!StringUtil.isEmpty(mFilePath1)){ + FileInputStream fileInputStream = new FileInputStream(mFilePath1); + BitmapFactory.Options opts = new BitmapFactory.Options(); + // opts.inJustDecodeBounds = true; + opts.inTempStorage = new byte[100 * 1024]; + opts.inPreferredConfig = Bitmap.Config.RGB_565; + opts.inPurgeable = true; + BitmapFactory.decodeFile(mFilePath1,opts); + opts.inSampleSize = calculateInSampleSize(opts, + 720, 1280); + opts.inInputShareable = true; + Bitmap bitmap = BitmapFactory.decodeStream(fileInputStream, + null, opts); + String s = Base64Util.BitmaptoBase64(bitmap); + map.put("msg_content",s); + } + + + + httpResult = HttpHelper.post(Url.getTimestamp, null); + if (httpResult != null) { + result1 = httpResult.getString(); + // LogUtils.e(result); + TimestampBean bean = GsonTools.fromGsonToBean(result1, TimestampBean.class); + map.put("timestamp", bean.getTimestamp()); + LogUtils.e("timestamp = "+ bean.getTimestamp()); + + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(map); + Log.d("gdxzinside","params = "+params.toString()); + byte[] data; + String sign = SignUtil.getSign(map); + data = params.getBytes(encoding); + URL url = new URL(Url.addGroupSendMsg); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(result); + String code = jsonObject.optString("code"); + + if ("200".equals(code)){ + if(pd!=null) + pd.dismiss(); + ToastUtil.showMessage("推荐成功"); + } + else + { + if(pd!=null) + pd.dismiss(); + ToastUtil.showMessage("提交失败,请重试"); + } + } else { + + } + } + } catch (Exception e) { +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + lock.unlock(); + } + + } + }).start(); + + } + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + + final int height = options.outHeight; + + final int width = options.outWidth; + + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int heightRatio = Math.round((float) height + / (float) reqHeight); + + final int widthRatio = Math.round((float) width / (float) reqWidth); + + inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; + + } + + return inSampleSize; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushZhiBoActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushZhiBoActivity.java new file mode 100644 index 0000000..6ecc32b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/PushZhiBoActivity.java @@ -0,0 +1,685 @@ +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.utils.Url.zhibourl; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Base64; +import android.util.Log; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.WindowManager; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.FrameLayout; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; + +import com.google.gson.Gson; +import com.gyf.immersionbar.ImmersionBar; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; +import com.nostra13.universalimageloader.core.ImageLoader; +import com.umeng.socialize.UMShareAPI; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.utils.AESUtil; +import cn.shangyu.gdxzExpert.utils.CommonUtil; +import cn.shangyu.gdxzExpert.utils.Constant; +import cn.shangyu.gdxzExpert.utils.GsonTools; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.utils.SharePrefUtil; +import cn.shangyu.gdxzExpert.utils.ShareUtils; +import cn.shangyu.gdxzExpert.utils.SignUtil; +import cn.shangyu.gdxzExpert.utils.StreamTool; +import cn.shangyu.gdxzExpert.utils.ToastUtil; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.UpdateVersionUtils; +import cn.shangyu.gdxzExpert.utils.Url; +import cn.shangyu.gdxzExpert.view.X5WebView; + +public class PushZhiBoActivity extends AppCompatActivity implements OnClickListener { + private X5WebView webView; + private PushZhiBoActivity mActivity; + public View loadingView; + private String url; + private ImageView top_back; + private TextView mTitle; + + private FrameLayout video_fullView;// 全屏时视频加载view + private View xCustomView; + private WebChromeClient.CustomViewCallback xCustomViewCallback; + private myWebChromeClient xwebchromeclient; + private View layout_top; + private ImageButton mIb_share; + private String summary; + private String imageUrl = ""; + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + this.setContentView(R.layout.activity_zhi_bo); + Toolbar mToolbar=findViewById(R.id.toolbar); + ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); + X5WebView.initHardwareAccelerate(this); + webView = this.findViewById(R.id.aaaaaa); + webView.setKeepScreenOn(true); //确保屏幕长亮 + layout_top = this.findViewById(R.id.layout_top); + loadingView = this.findViewById(R.id.loading_view); + top_back = (ImageView) this.findViewById(R.id.top_back); + mTitle = (TextView) this.findViewById(R.id.top_title); + mIb_share = (ImageButton) this.findViewById(R.id.top_right); + video_fullView = (FrameLayout) this.findViewById(R.id.f_move); + video_fullView.setKeepScreenOn(true); //确保屏幕长亮 + mIb_share.setVisibility(View.VISIBLE); + mIb_share.setImageResource(R.drawable.share_icon); + top_back.setOnClickListener(this); + mIb_share.setOnClickListener(this); + mActivity = this; +// url = getIntent().getStringExtra("url"); + zhiboDetail(getIntent().getStringExtra("id")); +// if (!getIntent().getType().equals("zhibo")) +// { +// createhideWebVeiw();//解决WebView写入localstorage但首次加载取不到值的问题 +// } +// else +// { +// /** +// * 这个方法等到请求了接口后调用 +// * +// */ +//// InitIntent(); +// } + + } + private void createhideWebVeiw() { + + final WebView webView = new WebView(this); + webView.getSettings().setJavaScriptEnabled(true); + webView.getSettings().setDomStorageEnabled(true);// 打开本地缓存提供JS调用,至关重要 +// webView.getSettings().setAppCacheEnabled(false); + + webView.getSettings().setDatabaseEnabled(true); // 如果需要 WebSQL(也部分废弃) + webView.getSettings().setAllowFileAccess(true); // 如需访问文件 + webView.getSettings().setAllowContentAccess(true); + + webView.loadUrl(url); + webView.setWebViewClient(new WebViewClient() { + + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + String id = SharePrefUtil.getString(PushZhiBoActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(PushZhiBoActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(PushZhiBoActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String params = "{\"name\":\""+name+"\",\"id\":\""+id+"\",\"avatar\":\""+avatar+"\"}"; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + params = params.toString().replaceAll("\\+", "=").replaceAll("\n", ""); + LogUtil.i("params = "+params); + view.evaluateJavascript("window.localStorage.setItem('watchlive_current_user','" +params + "');", null); + } else { + view.loadUrl("javascript:(function({window.localStorage.setItem('watchlive_current_user','" + params.toString() + "')})()"); + view.reload(); + } + webView.destroy(); + + //正常加载网页 +// InitIntent(); + } + }); + } + public class MyWebViewClient extends WebViewClient { + + private ProgressDialog loadingBar; + + @Override + public void onPageStarted(WebView view, String url, Bitmap favicon) { + loadingView.setVisibility(View.VISIBLE); + super.onPageStarted(view, url, favicon); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); // webview里面的链接还在同一个页面中加载 + return true; + } + + @Override + public void onPageFinished(WebView view, String url) { + String id = SharePrefUtil.getString(PushZhiBoActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(PushZhiBoActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(PushZhiBoActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String params = "{\"name\":\""+name+"\",\"id\":\""+id+"\",\"avatar\":\""+avatar+"\"}"; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + view.evaluateJavascript("window.localStorage.setItem('watchlive_current_user','" +params + "');", null); + } else { + view.loadUrl("javascript:(function({window.localStorage.setItem('watchlive_current_user','" + params.toString() + "')})()"); + view.reload(); + } + + loadingView.setVisibility(View.GONE); + super.onPageFinished(view, url); + } + + @Override + public void onReceivedError(WebView view, int errorCode, + String description, String failingUrl) { + // ToastUtil.showToast("加载失败,请检查网络"); + loadingView.setVisibility(View.GONE); + LogUtil.i("onReceivedError", "onReceivedError" + failingUrl + + errorCode + description); + view.loadUrl("file:///android_asset/error/error.html"); + } + } + + @SuppressLint("NewApi") + public void InitIntent() { +// summary = getIntent().getStringExtra("newsTitle"); +// imageUrl = Url.urlHtml + getIntent().getStringExtra("summary");// 图的地址 + if (getIntent().getType().equals("zhibo")) { + mTitle.setText("肝胆直播"); + } else { + mTitle.setText("现代肝病学院"); + } + if(CommonUtil.BigModule()) + { + mTitle.setTextSize(23); + } + // url="http://www.baidu.com/"; +// DataCleanManager.cleanWebCache(this); +// WebSettings setting = webView.getSettings(); +// setting.setPluginState(PluginState.ON); +// setting.setUseWideViewPort(true); +// setting.setJavaScriptEnabled(true); // Support JavaScript +// setting.setJavaScriptCanOpenWindowsAutomatically(true);// 支持通过JS打开新窗口 +// // setting.setPluginsEnabled(true); //Support Plugins, for example just +// // like flash plugin. +// setting.setLoadWithOverviewMode(true); +// setting.setUseWideViewPort(true); +// setting.setDomStorageEnabled(true); +// setting.setSupportZoom(true); // Zoom Control on web (You don't need + // setting.setBuiltInZoomControls(true); // Enable Multitouch if + // supported + // by ROM + + //新添加使用了localStorage存储 +// webView.getSettings().setAppCacheMaxSize(1024*1024*8); +// String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath(); +// webView.getSettings().setAppCachePath(appCachePath); +// webView.getSettings().setAllowFileAccess(true); +// webView.getSettings().setAppCacheEnabled(true); + + WebSettings webSettings = webView.getSettings(); + webSettings.setJavaScriptEnabled(true); // 如果需要 JS + webSettings.setDomStorageEnabled(true); // 启用 DOM 存储(LocalStorage 等) + webSettings.setDatabaseEnabled(true); // 如果需要 WebSQL(也部分废弃) + webSettings.setAllowFileAccess(true); // 如需访问文件 + webSettings.setAllowContentAccess(true); + + String userAgent = webView.getSettings().getUserAgentString(); + String userAgents = userAgent + "gdxz-expert"; + webView.getSettings().setUserAgentString(userAgents); + webView.setInitialScale(50); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webView.getSettings().setMixedContentMode( + WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + if (getIntent().getType().equals("zhibo")) + { + String id = SharePrefUtil.getString(PushZhiBoActivity.this, Constant.uuid, "123"); + String avatar = Url.urlHtml+SharePrefUtil.getString(PushZhiBoActivity.this, Constant.photo,"https://doc.igandan.com/app/html/img/2016/20160714132557.png"); + String name = null; + try { + String str = SharePrefUtil.getString(PushZhiBoActivity.this, Constant.realName, "肝胆相照专家端"); + name = Base64.encodeToString(str.getBytes("UTF-8"), Base64.DEFAULT); + name=name.replaceAll("\r|\n", ""); + //name = str; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String temurl= null; + try { + temurl = zhibourl+"?id="+id+"&name="+name+"&avatar="+avatar+"&url="+url+"&sign="+ AESUtil.Encrypt(id+name+avatar+url,"deoep09_klodLdAo"); + + Log.d("gdxzzhibo","temurl ="+temurl); + } catch (Exception e) { + e.printStackTrace(); + } + webView.loadUrl(temurl); + xwebchromeclient = new myWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + webView.setWebViewClient(new WebViewClient(){ + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }); + //webView.loadUrl("https://www.baidu.com"); + + + } + else + { + webView.loadUrl(url); + xwebchromeclient = new myWebChromeClient(); + webView.setWebChromeClient(xwebchromeclient); + webView.setWebViewClient(new MyWebViewClient()); + } + + + + } + + @Override + public void onClick(View v) { + // TODO Auto-generated method stubdes + switch (v.getId()) { + case R.id.top_back: + this.finish(); + + break; + case R.id.top_right: + share(); + break; + default: + break; + } + + } + + /** + * 调用分享功能 + */ + private void share() { + String shareTitle = summary; + String shareUrl = url; + String msgSinaContent = shareTitle + shareUrl; + // ShareUtils.shareMsg(ct, shareTitle, "分享给你一个好看的文章," + shareTitle + + // " 详情:" + shareUrl, null); + Bitmap bitmap = ImageLoader.getInstance().loadImageSync(imageUrl); + if (TextUtils.isEmpty(shareUrl)) { + shareUrl = ""; + } + if (TextUtils.isEmpty(summary)) { + summary = ""; + } + if (TextUtils.isEmpty(imageUrl)) { + imageUrl = ""; + } + ShareUtils.shareUmeng(PushZhiBoActivity.this, "肝胆相照直播:" + shareTitle, + summary, msgSinaContent, imageUrl, shareUrl, bitmap); + // final UMImage shareImg;// 友盟分享的缩略图 + // Bitmap file = null; + // try { + // file = Glide.with(BaseApplication.getInstance()) + // .load(imageUrl).asBitmap() + // .into(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL).get(); + // } catch (InterruptedException | ExecutionException e) { + // // TODO Auto-generated catch block + // e.printStackTrace(); + // } + // if (StringUtil.isEmpty(imageUrl.replace(Url.urlHtml, ""))) { + // shareImg = new UMImage(ZhiBoActivity.this, + // "http://doc.igandan.com/app/img/expert_logo.png"); + // } else { + // + // shareImg = new UMImage(ZhiBoActivity.this, file); + // } + // UMWeb web = new UMWeb(shareUrl); + // shareTitle = "肝胆想照直播:" + shareTitle; + // web.setTitle(shareTitle);// 标题 + // web.setThumb(shareImg); // 缩略图 + // + // web.setDescription(msgSinaContent);// 描述 + // new ShareAction(ZhiBoActivity.this) + // .withMedia(web) + // .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, + // SHARE_MEDIA.SINA) + // .setCallback( + // new UMengShareHelper(ZhiBoActivity.this).shareListener) + // .open(); + + } + + public class myWebChromeClient extends WebChromeClient { + private View xprogressvideo; + + // 播放网络视频时全屏会被调用的方法 + @Override + public void onShowCustomView(View view, CustomViewCallback callback) { + // Log.i("fangfa","已经进入了。。。。。。。。"); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + webView.setVisibility(View.GONE); + layout_top.setVisibility(View.GONE); + + // 如果一个视图已经存在,那么立刻终止并新建一个 + if (xCustomView != null) { + callback.onCustomViewHidden(); + return; + } + xCustomView = view; + xCustomViewCallback = callback; + video_fullView.addView(view); + + video_fullView.setVisibility(View.VISIBLE); + + setFullScreen(); + } + + // 视频播放退出全屏会被调用的 + @Override + public void onHideCustomView() { + layout_top.setVisibility(View.VISIBLE); + if (xCustomView == null)// 不是全屏播放状态 + return; + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + xCustomView.setVisibility(View.GONE); + video_fullView.removeView(xCustomView); + xCustomView = null; + video_fullView.setVisibility(View.GONE); + xCustomViewCallback.onCustomViewHidden(); + webView.setVisibility(View.VISIBLE); + quitFullScreen(); + } + + // 视频加载时进程loading + @Override + public View getVideoLoadingProgressView() { + if (xprogressvideo == null) { + LayoutInflater inflater = LayoutInflater + .from(PushZhiBoActivity.this); + xprogressvideo = inflater.inflate(R.layout.loading_view, null); + } + return xprogressvideo; + } + } + + /** + * 设置全屏 + */ + private void setFullScreen() { + // 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏 + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + // 全屏下的状态码:1098974464 + // 窗口下的状态吗:1098973440 + + } + + /** + * 退出全屏 + */ + private void quitFullScreen() { + // 声明当前屏幕状态的参数并获取 + final WindowManager.LayoutParams attrs = getWindow().getAttributes(); + attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); + getWindow().setAttributes(attrs); + getWindow() + .clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); + } + + /** + * 判断是否是全屏 + * + * @return + */ + public boolean inCustomView() { + return (xCustomView != null); + } + + /** + * 全屏时按返加键执行退出全屏方法 + */ + public void hideCustomView() { + xwebchromeclient.onHideCustomView(); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + + @Override + protected void onResume() { + super.onResume(); + webView.onResume(); + // webView.resumeTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onResume") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + /** + * 设置为横屏 + */ + if (getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) { + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + } + } + + @Override + protected void onPause() { + super.onPause(); + webView.onPause(); + // webView.pauseTimers(); + try { + if (webView != null) { + webView.getClass().getMethod("onPause") + .invoke(webView, (Object[]) null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 主要是把webview所持用的资源销毁, + */ + @Override + protected void onDestroy() { + webView.setVisibility(View.GONE); + super.onDestroy(); + video_fullView.removeAllViews(); + webView.loadUrl("about:blank"); + webView.stopLoading(); + webView.setWebChromeClient(null); + webView.setWebViewClient(null); + webView.destroy(); + UMShareAPI.get(this).release(); + //释放资源 + if (webView != null) + webView.destroy(); + } + + /** + * 判断是否是全屏,如果是就隐藏,否则就退出当前的页面 + * + * @param keyCode + * @param event + * @return + */ + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (inCustomView()) { + // webViewDetails.loadUrl("about:blank"); + hideCustomView(); + return false; + } else { + webView.loadUrl("about:blank"); + this.finish(); + } + } + return false; + } + private void zhiboDetail(String id) { +// if(StringUtil.isEmpty(id)) +// { +// id=getIntent().getData().getQueryParameter("id"); +// } + Map map = new HashMap<>(); + map.put("id",id); + sendJsonPostParamNoResultMD5(Url.liveDetail,map,101); + } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + /** 使用SSO授权必须添加如下代码 */ + + UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data); + } + Handler mHandler = new Handler() { + public void handleMessage(Message msg) { + if (msg != null) { +// closeProgressDialog(); + switch (msg.what){ + case 101: + + try { + JSONObject jsonObject=new JSONObject((String)msg.obj); + if("200".equals(jsonObject.getString("code"))) + { + summary=jsonObject.getJSONObject("data").getString("title"); + imageUrl = Url.urlHtml +jsonObject.getJSONObject("data").getString("liveimg"); + url=jsonObject.getJSONObject("data").getString("liveurl"); + InitIntent(); + } + else + { + ToastUtil.showToast((String)msg.obj); + } + + } catch (JSONException e) { + e.printStackTrace(); + ToastUtil.showToast((String)msg.obj); + } + + break; + case 0: + ToastUtil.showToast((String)msg.obj); + break; + + + } + + } + }; + }; + public void sendJsonPostParamNoResultMD5(final String postUrl, final Map param, final int callType) { + + HttpHelper.loadData(HttpRequest.HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + String uuid = SharePrefUtil.getString(UIUtils.getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)||"106".equals(optString)||"1".equals(optString)) { + Message msg = Message.obtain(); + msg.what = callType; + msg.obj = result; + mHandler.sendMessage(msg); + }else { + mHandler.sendEmptyMessage(0); + } + }else { + mHandler.sendEmptyMessage(0); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + mHandler.sendEmptyMessage(404); + // TODO Auto-generated catch block + e.printStackTrace(); + } finally { + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + } + }); + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/UverifyHelp.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/UverifyHelp.java new file mode 100644 index 0000000..e1dcb27 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/UverifyHelp.java @@ -0,0 +1,64 @@ +package cn.shangyu.gdxzExpert.umeng; + +import android.util.Log; +import android.widget.Toast; + +import com.umeng.umverify.UMResultCode; +import com.umeng.umverify.UMVerifyHelper; +import com.umeng.umverify.listener.UMTokenResultListener; +import com.umeng.umverify.model.UMTokenRet; + +import cn.shangyu.gdxzExpert.utils.UIUtils; + +public class UverifyHelp { + private static final String TAG = "UverifyHelp"; + private static UMTokenResultListener mTokenResultListener; + private static UMVerifyHelper mPhoneNumberAuthHelper; + public static void sdkInit() { + mTokenResultListener = new UMTokenResultListener() { + @Override + public void onTokenSuccess(String s) { + + UMTokenRet tokenRet = null; + try { + tokenRet = UMTokenRet.fromJson(s); + if (UMResultCode.CODE_START_AUTHPAGE_SUCCESS.equals(tokenRet.getCode())) { + Log.i("TAG", "唤起授权页成功:" + s); + } + + if (UMResultCode.CODE_GET_TOKEN_SUCCESS.equals(tokenRet.getCode())) { + Log.i("TAG", "获取token成功:" + s); +// getResultWithToken(tokenRet.getToken()); +// mUIConfig.release(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void onTokenFailed(String s) { + Log.e(TAG, "获取token失败:" + s); + + UMTokenRet tokenRet = null; + mPhoneNumberAuthHelper.quitLoginPage(); + try { + tokenRet = UMTokenRet.fromJson(s); + if (UMResultCode.CODE_ERROR_USER_CANCEL.equals(tokenRet.getCode())) { + //模拟的是必须登录 否则直接退出app的场景 +// finish(); + } else { + Toast.makeText(UIUtils.getContext(), "一键登录失败切换到其他登录方式", Toast.LENGTH_SHORT).show(); +// Intent pIntent = new Intent(OneKeyLoginActivity.this, MessageActivity.class); +// startActivityForResult(pIntent, 1002); + } + } catch (Exception e) { + e.printStackTrace(); + } +// mUIConfig.release(); + } + }; + mPhoneNumberAuthHelper = UMVerifyHelper.getInstance(UIUtils.getContext(), mTokenResultListener); + mPhoneNumberAuthHelper.setAuthSDKInfo("请开发者自行添加"); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/umeng/WebH5Activity.java b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/WebH5Activity.java new file mode 100644 index 0000000..0e6bada --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/umeng/WebH5Activity.java @@ -0,0 +1,199 @@ +package cn.shangyu.gdxzExpert.umeng; + +import static cn.shangyu.gdxzExpert.application.BaseApplication.getContext; +import static cn.shangyu.gdxzExpert.utils.Url.weurl; +import static cn.shangyu.gdxzExpert.wxapi.WXEntryActivity.isExsitMianActivity; + +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; + +import cn.shangyu.gdxzExpert.activity.CourseUrlDetailActivity; +import cn.shangyu.gdxzExpert.activity.GDEventDetailActivity; +import cn.shangyu.gdxzExpert.activity.GDEventDetailTopActivity; +import cn.shangyu.gdxzExpert.activity.LoginNewActivity; +import cn.shangyu.gdxzExpert.activity.MainActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.polyvplayer.VideoDetailPolyvPlayerActivity; +import cn.shangyu.gdxzExpert.utils.UIUtils; +import cn.shangyu.gdxzExpert.utils.Url; + +public class WebH5Activity extends Activity { + + private Intent intent; + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if(getIntent()!=null&&getIntent().getData()!=null&&getIntent().getData().getQueryParameter("types")!=null) + { +// ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); +// activityManager.moveTaskToFront(getTaskId(), ActivityManager.MOVE_TASK_WITH_HOME); + if (UIUtils.isLogined()) { + if(!isExsitMianActivity(getContext(), MainActivity.class)) + { + // 打开登录 + Intent intent = new Intent(); + intent.setClass(this, MainActivity.class); + startActivity(intent); + } + + intent=new Intent(); + switch (getIntent().getData().getQueryParameter("types")) + { + case "1"://肝胆视频 + Intent intent4 = VideoDetailPolyvPlayerActivity.newIntent(getContext(), VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent4.putExtra("startNow", false); + intent4.putExtra("isVlmsOnline", false); + intent4.putExtra("uuid", getIntent().getData().getQueryParameter("uuid")); + startActivity(intent4); + + break; + case "2"://肝胆课件 + intent.setClass(this, CourseUrlDetailActivity.class); + intent.putExtra("url", Url.weurl.substring(0, Url.weurl.length() - 1) + + getIntent().getData().getQueryParameter("path")); + intent.putExtra("title", getIntent().getData().getQueryParameter("title")); + intent.putExtra("uuid",getIntent().getData().getQueryParameter("uuid")); +// intent.putExtra("type", weBean.getType()); + startActivity(intent); + break; + case "3"://肝胆新闻 + intent.setClass(this, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + getIntent().getData().getQueryParameter("path")); + intent.putExtra("title", "新闻详情"); + intent.putExtra("newsuuid",getIntent().getData().getQueryParameter("uuid")); + intent.putExtra("newsagreenum", getIntent().getData().getQueryParameter("agreenum")); + intent.putExtra("newsreadnum", getIntent().getData().getQueryParameter("readnum")); + intent.putExtra("newsTitle", getIntent().getData().getQueryParameter("title")); + intent.putExtra("summary",getIntent().getData().getQueryParameter("summary")); + intent.putExtra("imageUrl", Url.urlHtml +getIntent().getData().getQueryParameter("headImg")); + intent.putExtra("flag", 3); + startActivity(intent); + break; + case "4"://科研项目 + intent.setClass(this, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + getIntent().getData().getQueryParameter("path")); + intent.putExtra("title", "科研详情"); + intent.putExtra("newsTitle", getIntent().getData().getQueryParameter("projectName")); + intent.putExtra("summary", getIntent().getData().getQueryParameter("content")); + intent.putExtra("imageUrl", Url.urlHtml +getIntent().getData().getQueryParameter("imgs")); + intent.putExtra("flag", 1); + startActivity(intent); + break; + case "5"://肝胆活动 + intent.setClass(this, GDEventDetailTopActivity.class); + intent.putExtra("uuid",getIntent().getData().getQueryParameter("uuid")); + intent.putExtra("url",Url.urlHtml +getIntent().getData().getQueryParameter("path")); + intent.putExtra("newsTitle", getIntent().getData().getQueryParameter("title")); + intent.putExtra("summary",getIntent().getData().getQueryParameter("content")); + intent.putExtra("imageUrl", Url.urlHtml + + getIntent().getData().getQueryParameter("imgpath")); + intent.setType("event"); + startActivity(intent); + break; + case "6"://病例荟萃 + intent.setClass(this, NewsDetailActivity.class); + intent.putExtra("url",Url.urlHtml+getIntent().getData().getQueryParameter("path")); + intent.putExtra("title","病例详情"); + intent.putExtra("collect",getIntent().getData().getQueryParameter("title")); + intent.putExtra("newsTitle",getIntent().getData().getQueryParameter("title")); + intent.putExtra("type", 7); + intent.putExtra("nfagreenum", getIntent().getData().getQueryParameter("agreeNum")+""); + intent.putExtra("nfreadnum", getIntent().getData().getQueryParameter("readNum")+""); + intent.putExtra("nfsuuuid",getIntent().getData().getQueryParameter("uuid")); + intent.putExtra("npath", getIntent().getData().getQueryParameter("path")); + intent.putExtra("flag", 10); + startActivity(intent); +// startActivityForResult(intent, 113); + break; + case "11"://查房实录 + intent.setClass(this, NewsDetailActivity.class); + intent.putExtra("url",Url.urlHtml+getIntent().getData().getQueryParameter("path")); + intent.putExtra("title","病例详情"); + intent.putExtra("collect",getIntent().getData().getQueryParameter("title")); + intent.putExtra("newsTitle",getIntent().getData().getQueryParameter("title")); + intent.putExtra("nfagreenum", getIntent().getData().getQueryParameter("agreeNum")+""); + intent.putExtra("nfreadnum", getIntent().getData().getQueryParameter("readNum")+""); + intent.putExtra("nfsuuuid",getIntent().getData().getQueryParameter("uuid")); + intent.putExtra("npath", getIntent().getData().getQueryParameter("path")); + intent.putExtra("flag", 6); + startActivity(intent); + break; + case "7"://肝胆会议 +// intent.setClass(this, ZhiBoActivity.class);直播页面 +// intent.putExtra("newsTitle",getIntent().getData().getQueryParameter("title")); +// intent.putExtra("url",getIntent().getData().getQueryParameter("liveurl")); +// intent.putExtra("summary",getIntent().getData().getQueryParameter("liveimg")); +// intent.setType("zhibo"); +// startActivity(intent); + intent.setClass(this, GDEventDetailActivity.class); + intent.putExtra("newsTitle", getIntent().getData().getQueryParameter("title")); + intent.putExtra("url", weurl+getIntent().getData().getQueryParameter("path")); + intent.putExtra("summary", getIntent().getData().getQueryParameter("content")); + intent.setType("meeting"); + startActivity(intent); + break; + case "8"://患教文库 + intent.setClass(this, NewsDetailActivity.class); + intent.putExtra("url", Url.urlHtml + getIntent().getData().getQueryParameter("path")); + intent.putExtra("title", "患教详情"); + intent.putExtra("kepuuuid", getIntent().getData().getQueryParameter("uuid")); + intent.putExtra("kepuagreenum", getIntent().getData().getQueryParameter("agreenum")); + intent.putExtra("kepureadnum", getIntent().getData().getQueryParameter("readnum")); + intent.putExtra("newsTitle", getIntent().getData().getQueryParameter("topic")); + intent.putExtra("summary", getIntent().getData().getQueryParameter("summary")); + intent.putExtra("imageUrl", Url.urlHtml +getIntent().getData().getQueryParameter("imgPath")); + intent.putExtra("flag", 2); + startActivity(intent); + break; + case "9"://患教视频 + Intent intent1 = VideoDetailPolyvPlayerActivity.newIntent(getContext(), VideoDetailPolyvPlayerActivity.PlayMode.portrait,""); + // 在线视频和下载的视频播放的时候只显示播放器窗口,用该参数来控制 + intent1.putExtra("startNow", false); + intent1.putExtra("isVlmsOnline", false); + intent1.putExtra("url",getIntent().getData().getQueryParameter("path")); + intent1.putExtra("uuid",getIntent().getData().getQueryParameter("uuid")); + intent1.putExtra("note", getIntent().getData().getQueryParameter("content")); + intent1.putExtra("title", getIntent().getData().getQueryParameter("title")); + intent1.putExtra("readnum", getIntent().getData().getQueryParameter("readnum")); + intent1.putExtra("imgpath", getIntent().getData().getQueryParameter("imgpath")); + intent1.putExtra("need_inside_share", "yes"); + intent1.putExtra("public_name", getIntent().getData().getQueryParameter("public_name")); + startActivity(intent1); + + break; + case "10"://临床招募 + intent.setClass(this, GDEventDetailTopActivity.class); + intent.putExtra("uuid", getIntent().getData().getQueryParameter("uuid")); + intent.putExtra("url", Url.urlHtml +getIntent().getData().getQueryParameter("path")); + intent.putExtra("newsTitle", getIntent().getData().getQueryParameter("title")); + intent.putExtra("mobile", getIntent().getData().getQueryParameter("mobile")); + intent.putExtra("summary", getIntent().getData().getQueryParameter("content")); + intent.putExtra("imageUrl", Url.urlHtml + + getIntent().getData().getQueryParameter("imgpath")); + intent.setType("linchaung"); + startActivity(intent); + break; + + } + } else { + // 打开登录 + Intent intent = new Intent(); + intent.setClass(this, LoginNewActivity.class); + startActivity(intent); + + } + + } + intent=null; + finish(); +// Intent intent = new Intent(this, WebActivity.class); +// intent.putExtra("url",extInfo); +// intent.putExtras(getIntent()); +// startActivity(intent); +// finish(); + //Handle... + } + } + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/AESUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/AESUtil.java new file mode 100644 index 0000000..6e91ed5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/AESUtil.java @@ -0,0 +1,70 @@ +package cn.shangyu.gdxzExpert.utils; + +import org.apache.commons.codec.binary.Base64; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; + +/** + * + * @author ZHAODeWei 万方医学加密 解密 + * + */ +public class AESUtil { + + + + // 加密 + public static String Encrypt(String sSrc, String sKey) throws Exception { + if (sKey == null) { + return null; + } + byte[] raw = sKey.getBytes("utf-8"); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// "算法/模式/补码方式" + cipher.init(Cipher.ENCRYPT_MODE, skeySpec); + byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); + + return new String(Base64.encodeBase64(encrypted));// 此处使用BASE64做转码功能,同时能起到2次加密的作用。 + } + + // 解密 + public static String Decrypt(String sSrc, String sKey) throws Exception { + try { + // 判断Key是否正确 + if (sKey == null) { + return null; + } + byte[] raw = sKey.getBytes("utf-8"); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + cipher.init(Cipher.DECRYPT_MODE, skeySpec); + byte[] encrypted1 = Base64.decodeBase64(sSrc.getBytes());// ����base64���� + try { + byte[] original = cipher.doFinal(encrypted1); + String originalString = new String(original, "utf-8"); + return originalString; + } catch (Exception e) { + return null; + } + } catch (Exception ex) { + return null; + } + } + +/* public static void main(String[] args) throws Exception { + + * 此处使用AES-128-ECB加密模式,key需要为16位。 + + + String cKey = "iGandan201607110"; + // 需要加密的字串 + String cSrc = "iGandan"; + // 加密 + String enString = AESUtil.Encrypt(cSrc, cKey); + System.out.println(enString); + // 解密 + String DeString = AESUtil.Decrypt(enString, cKey); + System.out.println(DeString); + }*/ +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/AppFrontBackHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/AppFrontBackHelper.java new file mode 100644 index 0000000..307de7c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/AppFrontBackHelper.java @@ -0,0 +1,94 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.Activity; +import android.app.Application; +import android.os.Bundle; + +/** + * 应用前后台状态监听帮助类,仅在Application中使用 + * Created by dway on 2018/1/30. + */ + +public class AppFrontBackHelper { + + private OnAppStatusListener mOnAppStatusListener; + + + public AppFrontBackHelper() { + + } + + /** + * 注册状态监听,仅在Application中使用 + * @param application + * @param listener + */ + public void register(Application application, OnAppStatusListener listener){ + mOnAppStatusListener = listener; + application.registerActivityLifecycleCallbacks(activityLifecycleCallbacks); + } + + public void unRegister(Application application){ + application.unregisterActivityLifecycleCallbacks(activityLifecycleCallbacks); + } + + private Application.ActivityLifecycleCallbacks activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { + //打开的Activity数量统计 + private int activityStartCount = 0; + + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + + } + + @Override + public void onActivityStarted(Activity activity) { + activityStartCount++; + //数值从0变到1说明是从后台切到前台 + if (activityStartCount == 1){ + //从后台切到前台 + if(mOnAppStatusListener != null){ + mOnAppStatusListener.onFront(); + } + } + } + + @Override + public void onActivityResumed(Activity activity) { + + } + + @Override + public void onActivityPaused(Activity activity) { + + } + + @Override + public void onActivityStopped(Activity activity) { + activityStartCount--; + //数值从1到0说明是从前台切到后台 + if (activityStartCount == 0){ + //从前台切到后台 + if(mOnAppStatusListener != null){ + mOnAppStatusListener.onBack(); + } + } + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) { + + } + + @Override + public void onActivityDestroyed(Activity activity) { + + } + }; + + public interface OnAppStatusListener{ + void onFront(); + void onBack(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/AutoGetCode.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/AutoGetCode.java new file mode 100644 index 0000000..6aea46e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/AutoGetCode.java @@ -0,0 +1,51 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.app.Activity; +import android.database.ContentObserver; +import android.database.Cursor; +import android.net.Uri; +import android.os.Handler; +import android.widget.EditText; + +public class AutoGetCode extends ContentObserver { + + private Cursor cursor = null; + private Activity activity; + + private String smsContent = ""; + private EditText editText = null; + + public AutoGetCode(Activity activity, Handler handler, EditText edittext) { + super(handler); + this.activity = activity; + this.editText = edittext; + } + + @Override + public void onChange(boolean selfChange) { + super.onChange(selfChange); + // 读取收件箱中指定号码的短信 + cursor = activity.managedQuery(Uri.parse("content://sms/inbox"), + new String[] { "_id", "address", "read", "body" }, "address=? and read=?", + null, "_id desc"); + // 按短信id排序,如果按date排序的话,修改手机时间后,读取的短信就不准了 + if (cursor != null && cursor.getCount() > 0) { + cursor.moveToFirst(); + if (cursor.moveToFirst()) { + String smsbody = cursor + .getString(cursor.getColumnIndex("body")); + String regEx = "(?true + * @see #handleBackPress(Fragment) + * @see #handleBackPress(FragmentActivity) + */ + public static boolean handleBackPress(FragmentManager fragmentManager) { + List fragments = fragmentManager.getFragments(); + + if (fragments == null) return false; + + for (int i = fragments.size() - 1; i >= 0; i--) { + Fragment child = fragments.get(i); + + if (isFragmentBackHandled(child)) { + return true; + } + } + if (fragmentManager.getBackStackEntryCount() > 0) { + fragmentManager.popBackStack(); + return true; + } + return false; + } + + public static boolean handleBackPress(Fragment fragment) { + return handleBackPress(fragment.getChildFragmentManager()); + } + + public static boolean handleBackPress(FragmentActivity fragmentActivity) { + return handleBackPress(fragmentActivity.getSupportFragmentManager()); + } + + /** + * 判断Fragment是否处理了Back键 + * + * @return 如果处理了back键则返回 true + */ + public static boolean isFragmentBackHandled(Fragment fragment) { + return fragment != null + && fragment.isVisible() +// && fragment.getUserVisibleHint() //for ViewPager + && fragment instanceof FragmentBackHandler + && ((FragmentBackHandler) fragment).onBackPressed(); + } + public interface FragmentBackHandler { + boolean onBackPressed(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeCountUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeCountUtils.java new file mode 100644 index 0000000..9e2f7b1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeCountUtils.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; + +import me.leolin.shortcutbadger.ShortcutBadger; + + +/** + * Created by 周旭 on 2017/4/12. + * 第三方库设置APP logo角标数量的工具类(机型适配比较好) + */ + +public class BadgeCountUtils { + + //设置APP logo的角标 + public static void setBadgeCount(Context context, int badgeCount) { + ShortcutBadger.applyCount(context, badgeCount); //for 1.1.4+ + } + + //移除角标 + public static void removeBadge(Context context) { + ShortcutBadger.removeCount(context); //for 1.1.4+ + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtil.java new file mode 100644 index 0000000..03a7d63 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtil.java @@ -0,0 +1,87 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; + +//BadgeUtil provides static utility methods to set "badge count" on Launcher (by Samsung, LG). +//Currently, it's working from Android 4.0. 目前只支持samsung和LG +//But some devices, which are released from the manufacturers, are not working. + +/** + * android实现桌面icon未读信息图标 目前只支持samsung和LG,未测, + * 类名称:BadgeUtil + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-10-17 上午11:04:02 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class BadgeUtil { + + + private static final String ACTION_BADGE_COUNT_UPDATE = "android.intent.action.BADGE_COUNT_UPDATE"; + + private static final String EXTRA_BADGE_COUNT = "badge_count"; + + private static final String EXTRA_BADGE_COUNT_PACKAGE_NAME = "badge_count_package_name"; + + private static final String EXTRA_BADGE_COUNT_CLASS_NAME = "badge_count_class_name"; + + public static int badgeCount = 0; + + /** + * Set badge count + * + * @param context The context of the application package. + * @param count Badge count to be set + */ + public static void setBadgeCount(Context context, int count) { + Intent badgeIntent = new Intent(ACTION_BADGE_COUNT_UPDATE); + badgeIntent.putExtra(EXTRA_BADGE_COUNT, badgeCount); + badgeIntent.putExtra(EXTRA_BADGE_COUNT_PACKAGE_NAME, context.getPackageName()); + badgeIntent.putExtra(EXTRA_BADGE_COUNT_CLASS_NAME, getLauncherClassName(context)); + context.sendBroadcast(badgeIntent); + } + + /** + * Reset badge count. The badge count is set to "0" + * + * @param context The context of the application package. + */ + public static void resetBadgeCount(Context context) { + badgeCount = 0; + setBadgeCount(context, 0); + } + + /** + * Retrieve launcher activity name of the application from the context + * + * @param context The context of the application package. + * @return launcher activity name of this application. From the + * "android:name" attribute. + */ + private static String getLauncherClassName(Context context) { + PackageManager packageManager = context.getPackageManager(); + + Intent intent = new Intent(Intent.ACTION_MAIN); + // To limit the components this Intent will resolve to, by setting an + // explicit package name. + intent.setPackage(context.getPackageName()); + intent.addCategory(Intent.CATEGORY_LAUNCHER); + + // All Application must have 1 Activity at least. + // Launcher activity must be found! + ResolveInfo info = packageManager + .resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY); + + // get a ResolveInfo containing ACTION_MAIN, CATEGORY_LAUNCHER + // if there is no Activity which has filtered by CATEGORY_DEFAULT + if (info == null) { + info = packageManager.resolveActivity(intent, 0); + } + + return info.activityInfo.name; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtils.java new file mode 100644 index 0000000..257ccc3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/BadgeUtils.java @@ -0,0 +1,38 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; + +/** + * Created by 周旭 on 2017/4/12. + * Android原生方式设置角标 + */ + +public class BadgeUtils { + private static final String INTENT_ACTION = "android.intent.action.BADGE_COUNT_UPDATE"; + private static final String INTENT_EXTRA_BADGE_COUNT = "badge_count"; + private static final String INTENT_EXTRA_PACKAGENAME = "badge_count_package_name"; + private static final String INTENT_EXTRA_ACTIVITY_NAME = "badge_count_class_name"; + + //设置角标 + public static void setBadgeCount(Context context, int badgeCount) { + Intent intent = new Intent(INTENT_ACTION); + intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); + intent.putExtra(INTENT_EXTRA_PACKAGENAME, getComponentName(context).getPackageName()); + intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, getComponentName(context).getClassName()); + context.sendBroadcast(intent); + } + + //清除角标 + public static void removeBadge(Context context){ + setBadgeCount(context,0); + } + + //获取ComponentName + private static ComponentName getComponentName(Context context) { + return context.getApplicationContext().getPackageManager() + .getLaunchIntentForPackage(context.getApplicationContext().getPackageName()) + .getComponent(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Util.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Util.java new file mode 100644 index 0000000..60c4772 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Util.java @@ -0,0 +1,202 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.text.TextUtils; + +import org.apache.commons.codec.binary.Base64; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.UnsupportedEncodingException; + +import cn.shangyu.gdxzExpert.application.BaseApplication; + +public class Base64Util { + + /** + * 将对象进行base64编码 + * + * @param object + * @return + */ + public static String ObjtoBase64(Object object) { + if (object == null) { + return null; + } + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = null; + String objBase64 = null; + try { + oos = new ObjectOutputStream(baos); + oos.writeObject(object); + objBase64 = new String(Base64.encodeBase64(baos.toByteArray())); + oos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return objBase64; + } + + /** + * 将文件进行base64编码 + * + * @param object + * @return + */ + public static String FiletoBase64(String path) throws Exception { + File file = new File(path); + FileInputStream inputFile = new FileInputStream(file); + byte[] buffer = new byte[(int) file.length()]; + inputFile.read(buffer); + inputFile.close(); + return new String(Base64.encodeBase64(buffer)); + } + + /** + * base64编码的对象解码出来 + * + * @param key + * @return + */ + public static Object Base64toObj(String objBase64) { + if (TextUtils.isEmpty(objBase64)) { + return null; + } + // 对Base64格式的字符串进行解码 + byte[] base64Bytes = Base64.decodeBase64(objBase64.getBytes()); + ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes); + ObjectInputStream ois; + Object obj = null; + try { + ois = new ObjectInputStream(bais); + obj = (Object) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return obj; + } + + /** + * 将图片进行base64编码 + * + * @param + * @return + */ + public static String BitmaptoBase64(Bitmap bm) { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); + try { + int options = 100; + while (stream.toByteArray().length / 1024 > 200) {// 判断如果图片大于100kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 + if (options > 0) { + options -= 10; + } + stream.reset();// 重置baos即清空baos + bm.compress(Bitmap.CompressFormat.JPEG, options, stream);// 这里压缩50%,把压缩后的数据存放到baos中 + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + byte[] b = stream.toByteArray(); + // 将图片流以字符串形式存储下来 + String userimg = new String((Base64.encodeBase64(b))); // 在这里我们把图片转换成base64并存进userimg里面 + return userimg; + } + + /** + * + * 执业医师证图片或胸牌 + * */ + public static String BitmaptoBase64Xiongpai(Bitmap bm) { + + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + bm.compress(Bitmap.CompressFormat.JPEG, 100, stream); +// try { +// int options = 100; +// while (stream.toByteArray().length / 1024 > 200) {// 判断如果图片大于100kb,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 +// if (options > 0) { +// options -= 10; +// } +// stream.reset();// 重置baos即清空baos +// bm.compress(Bitmap.CompressFormat.JPEG, options, stream);// 这里压缩50%,把压缩后的数据存放到baos中 +// } +// } catch (Exception e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } + byte[] b = stream.toByteArray(); + // 将图片流以字符串形式存储下来 + String userimg = new String((Base64.encodeBase64(b))); // 在这里我们把图片转换成base64并存进userimg里面 + return userimg; + } + + /** + * + * BasetoBitmap 将图片进行base64解码 + * + * @param string + * @return Bitmap + */ + public static Bitmap Base64toBitmap(String string) { + // 将字符串转换成Bitmap类型 + Bitmap bitmap = null; + try { + byte[] bitmapArray = Base64.decodeBase64(string.getBytes()); + bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, + bitmapArray.length); + } catch (Exception e) { + e.printStackTrace(); + } + return bitmap; + } + + + public static String encodeBase64URLSafeString(String keyValueStr) throws UnsupportedEncodingException{ + byte[] textByte = keyValueStr.getBytes("UTF-8"); + //编码 + String objBase64 = new String(Base64.encodeBase64(textByte)); +// String base64Str=encoder.encodeToString(textByte); + String safeBase64Str = objBase64.replace('+', '-'); + safeBase64Str = objBase64.replace('/', '_'); + safeBase64Str = objBase64.replaceAll("=", ""); + return safeBase64Str; + } + + + public static void saveBitmapAsJpg(Bitmap bitmap, String filename) { + if(bitmap==null) + { + return ; + } + // 获取外部存储的目录(确保已请求WRITE_EXTERNAL_STORAGE权限) + File file1 = BaseApplication.getInstance() + .getApplicationContext().getExternalFilesDir(""); + // 创建文件对象 + File file = new File(file1, filename + ".jpg"); + + try { + // 创建一个用于写入的FileOutputStream + FileOutputStream out = new FileOutputStream(file); + // 使用compress方法将Bitmap压缩为JPEG格式并写入文件 + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); + // 关闭输出流 + out.flush(); + out.close(); + + // 文件已成功保存 + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils.java new file mode 100644 index 0000000..d892974 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils.java @@ -0,0 +1,137 @@ +package cn.shangyu.gdxzExpert.utils; + + + +import java.io.UnsupportedEncodingException; + +/** + * @author Mr.Zheng + * @date 2014年8月22日 下午9:50:28 + */ +public class Base64Utils +{ + private static char[] base64EncodeChars = new char[] + { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', + 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '+', '/' }; + private static byte[] base64DecodeChars = new byte[] + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, + -1, -1, -1 }; + + /** + * 加密 + * + * @param data + * @return + */ + + public static String encode(byte[] data) + { + StringBuffer sb = new StringBuffer(); + int len = data.length; + int i = 0; + int b1, b2, b3; + while (i < len) + { + b1 = data[i++] & 0xff; + if (i == len) + { + sb.append(base64EncodeChars[b1 >>> 2]); + sb.append(base64EncodeChars[(b1 & 0x3) << 4]); + sb.append("=="); + break; + } + b2 = data[i++] & 0xff; + if (i == len) + { + sb.append(base64EncodeChars[b1 >>> 2]); + sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); + sb.append(base64EncodeChars[(b2 & 0x0f) << 2]); + sb.append("="); + break; + } + b3 = data[i++] & 0xff; + sb.append(base64EncodeChars[b1 >>> 2]); + sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); + sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]); + sb.append(base64EncodeChars[b3 & 0x3f]); + } + return sb.toString(); + } + + /** + * 解密 + * + * @param str + * @return + */ + public static byte[] decode(String str) + { + try + { + return decodePrivate(str); + } catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + } + return new byte[] + {}; + } + + private static byte[] decodePrivate(String str) throws UnsupportedEncodingException + { + StringBuffer sb = new StringBuffer(); + byte[] data = null; + data = str.getBytes("US-ASCII"); + int len = data.length; + int i = 0; + int b1, b2, b3, b4; + while (i < len) + { + + do + { + b1 = base64DecodeChars[data[i++]]; + } while (i < len && b1 == -1); + if (b1 == -1) + break; + + do + { + b2 = base64DecodeChars[data[i++]]; + } while (i < len && b2 == -1); + if (b2 == -1) + break; + sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4))); + + do + { + b3 = data[i++]; + if (b3 == 61) + return sb.toString().getBytes("iso8859-1"); + b3 = base64DecodeChars[b3]; + } while (i < len && b3 == -1); + if (b3 == -1) + break; + sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2))); + + do + { + b4 = data[i++]; + if (b4 == 61) + return sb.toString().getBytes("iso8859-1"); + b4 = base64DecodeChars[b4]; + } while (i < len && b4 == -1); + if (b4 == -1) + break; + sb.append((char) (((b3 & 0x03) << 6) | b4)); + } + return sb.toString().getBytes("iso8859-1"); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils11.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils11.java new file mode 100644 index 0000000..0c08d9a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Base64Utils11.java @@ -0,0 +1,225 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.UnsupportedEncodingException; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.ArrayList; +import java.util.List; + +import javax.crypto.Cipher; + +/** + * Created by MPC on 2017/5/24. + */ + +public class Base64Utils11 { + public static final byte[] DEFAULT_SPLIT = "#PART#".getBytes(); // 当要加密的内容超过bufferSize,则采用partSplit进行分块加密 + private static char[] base64EncodeChars = new char[] + { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', + 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', + 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', + '6', '7', '8', '9', '+', '/' }; + private static byte[] base64DecodeChars = new byte[] + { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, + -1, -1, -1 }; + + /** + * 加密 + * + * @param data + * @return + */ + public static String encode(byte[] data) + { + StringBuffer sb = new StringBuffer(); + int len = data.length; + int i = 0; + int b1, b2, b3; + while (i < len) + { + b1 = data[i++] & 0xff; + if (i == len) + { + sb.append(base64EncodeChars[b1 >>> 2]); + sb.append(base64EncodeChars[(b1 & 0x3) << 4]); + sb.append("=="); + break; + } + b2 = data[i++] & 0xff; + if (i == len) + { + sb.append(base64EncodeChars[b1 >>> 2]); + sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); + sb.append(base64EncodeChars[(b2 & 0x0f) << 2]); + sb.append("="); + break; + } + b3 = data[i++] & 0xff; + sb.append(base64EncodeChars[b1 >>> 2]); + sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); + sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]); + sb.append(base64EncodeChars[b3 & 0x3f]); + } + return sb.toString(); + } + + /** + * 解密 + * + * @param str + * @return + */ + public static byte[] decode(String str) + { + try + { + return decodePrivate(str); + } catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + } + return new byte[] + {}; + } + + private static byte[] decodePrivate(String str) throws UnsupportedEncodingException + { + StringBuffer sb = new StringBuffer(); + byte[] data = null; + data = str.getBytes("UTF-8"); + int len = data.length; + int i = 0; + int b1, b2, b3, b4; + while (i < len) + { + + do + { + b1 = base64DecodeChars[data[i++]]; + } while (i < len && b1 == -1); + if (b1 == -1) + break; + + do + { + b2 = base64DecodeChars[data[i++]]; + } while (i < len && b2 == -1); + if (b2 == -1) + break; + sb.append((char) ((b1 << 2) | ((b2 & 0x30) >>> 4))); + + do + { + b3 = data[i++]; + if (b3 == 61) + return sb.toString().getBytes("UTF-8"); + b3 = base64DecodeChars[b3]; + } while (i < len && b3 == -1); + if (b3 == -1) + break; + sb.append((char) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2))); + + do + { + b4 = data[i++]; + if (b4 == 61) + return sb.toString().getBytes("UTF-8"); + b4 = base64DecodeChars[b4]; + } while (i < len && b4 == -1); + if (b4 == -1) + break; + sb.append((char) (((b3 & 0x03) << 6) | b4)); + } + return sb.toString().getBytes("UTF-8"); + } + + + /** + * 使用私钥分段解密 + * + */ + public static byte[] decryptByPrivateKeyForSpilt(byte[] encrypted, byte[] privateKey) throws Exception { + int splitLen = DEFAULT_SPLIT.length; + if (splitLen <= 0) { + return decryptByPrivateKey(encrypted, privateKey); + } + int dataLen = encrypted.length; + List allBytes = new ArrayList(1024); + int latestStartIndex = 0; + for (int i = 0; i < dataLen; i++) { + byte bt = encrypted[i]; + boolean isMatchSplit = false; + if (i == dataLen - 1) { + // 到data的最后了 + byte[] part = new byte[dataLen - latestStartIndex]; + System.arraycopy(encrypted, latestStartIndex, part, 0, part.length); + byte[] decryptPart = decryptByPrivateKey(part, privateKey); + for (byte b : decryptPart) { + allBytes.add(b); + } + latestStartIndex = i + splitLen; + i = latestStartIndex - 1; + } else if (bt == DEFAULT_SPLIT[0]) { + // 这个是以split[0]开头 + if (splitLen > 1) { + if (i + splitLen < dataLen) { + // 没有超出data的范围 + for (int j = 1; j < splitLen; j++) { + if (DEFAULT_SPLIT[j] != encrypted[i + j]) { + break; + } + if (j == splitLen - 1) { + // 验证到split的最后一位,都没有break,则表明已经确认是split段 + isMatchSplit = true; + } + } + } + } else { + // split只有一位,则已经匹配了 + isMatchSplit = true; + } + } + if (isMatchSplit) { + byte[] part = new byte[i - latestStartIndex]; + System.arraycopy(encrypted, latestStartIndex, part, 0, part.length); + byte[] decryptPart = decryptByPrivateKey(part, privateKey); + for (byte b : decryptPart) { + allBytes.add(b); + } + latestStartIndex = i + splitLen; + i = latestStartIndex - 1; + } + } + byte[] bytes = new byte[allBytes.size()]; + { + int i = 0; + for (Byte b : allBytes) { + bytes[i++] = b.byteValue(); + } + } + return bytes; + } + /** + * 使用私钥进行解密 + */ + + public static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding";//加密填充方式 + public static final String RSA = "RSA";// 非对称加密密钥算法 + public static byte[] decryptByPrivateKey(byte[] encrypted, byte[] privateKey) throws Exception { + // 得到私钥 + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(privateKey); + KeyFactory kf = KeyFactory.getInstance(RSA,"BC"); + PrivateKey keyPrivate = kf.generatePrivate(keySpec); + + // 解密数据 + Cipher cp = Cipher.getInstance(ECB_PKCS1_PADDING); + cp.init(Cipher.DECRYPT_MODE, keyPrivate); + byte[] arr = cp.doFinal(encrypted); + return arr; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/CommonUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/CommonUtil.java new file mode 100644 index 0000000..b3abbc9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/CommonUtil.java @@ -0,0 +1,492 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.res.AssetManager; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; +import android.graphics.Paint; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Environment; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.widget.ListAdapter; +import android.widget.ListView; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.MessageDigest; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; + +public class CommonUtil { + + public static String FROMEXPERT="?fromtype=doctor"; + public static String FROMEXPERT1="&fromtype=doctor"; + public static String IS_BIG_MUDULE="is_big_module"; + public static String showGuideView="show_guide_view"; + public static String isNeedBlack="is_need_black"; + public static Boolean BigModule() + { + return SharePrefUtil.getBoolean(UIUtils.getContext(),IS_BIG_MUDULE,false); + } + public static Boolean needshowGuideView() + { +// return SharePrefUtil.getBoolean(UIUtils.getContext(),showGuideView,true); + return false; + } + public static Boolean NeedBlack() + { +// return true; + return SharePrefUtil.getBoolean(UIUtils.getContext(),isNeedBlack,false); + } + public static Boolean showHospital() + { + return SharePrefUtil.getBoolean(UIUtils.getContext(),"net_doctor",false); + } +// public static Boolean BigModule() +// { +// return true; +// } + public static void showInfoDialog(Context context, String message) { + showInfoDialog(context, message, "提示", "确定", null); + } + + public static void showInfoDialog(Context context, String message, + String titleStr, String positiveStr, + DialogInterface.OnClickListener onClickListener) { + AlertDialog.Builder localBuilder = new AlertDialog.Builder(context); + localBuilder.setTitle(titleStr); + localBuilder.setMessage(message); + if (onClickListener == null) + onClickListener = new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + + } + }; + localBuilder.setPositiveButton(positiveStr, onClickListener); + localBuilder.show(); + } + + public static String md5(String paramString) { + String returnStr; + try { + MessageDigest localMessageDigest = MessageDigest.getInstance("MD5"); + localMessageDigest.update(paramString.getBytes()); + returnStr = byteToHexString(localMessageDigest.digest()); + return returnStr; + } catch (Exception e) { + return paramString; + } + } + + /** + * 将指定byte数组转换成16进制字符串 + * + * @param b + * @return + */ + public static String byteToHexString(byte[] b) { + StringBuffer hexString = new StringBuffer(); + for (int i = 0; i < b.length; i++) { + String hex = Integer.toHexString(b[i] & 0xFF); + if (hex.length() == 1) { + hex = '0' + hex; + } + hexString.append(hex.toUpperCase()); + } + return hexString.toString(); + } + + /** + * 网络是否可用 + * isNetworkAvailable + * ture OK + * @return + * boolean + */ + public static boolean isNetworkAvailable(){ + if (0 == CommonUtil.isNetworkAvailable(UIUtils.getContext())) { + ToastUtil.showToast("无网络,请检查网络连接!"); + return false; + } + return true; + } + + + /** + * 判断当前是否有可用的网络以及网络类型 0:无网络 1:WIFI 2:CMWAP 3:CMNET + * + * @param context + * @return + */ + public static int isNetworkAvailable(Context context) { + ConnectivityManager connectivity = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + if (connectivity == null) { + return 0; + } else { + NetworkInfo[] info = connectivity.getAllNetworkInfo(); + if (info != null) { + for (int i = 0; i < info.length; i++) { + if (info[i].getState() == NetworkInfo.State.CONNECTED) { + NetworkInfo netWorkInfo = info[i]; + if (netWorkInfo.getType() == ConnectivityManager.TYPE_WIFI) { + return 1; + } else if (netWorkInfo.getType() == ConnectivityManager.TYPE_MOBILE) { + String extraInfo = netWorkInfo.getExtraInfo(); + if ("cmwap".equalsIgnoreCase(extraInfo) + || "cmwap:gsm".equalsIgnoreCase(extraInfo)) { + return 2; + } + return 3; + } + } + } + } + } + return 0; + } + + /** + * 获取现在时间 + * + * @return 返回短时间字符串格式yyyy-MM-dd HH:mm:ss + */ + + public static String getStringDate() { + Date currentTime = new Date(); + SimpleDateFormat formatter = new SimpleDateFormat("MM月dd日 HH:mm:ss");//"yyyy-MM-dd HH:mm:ss" + String dateString = formatter.format(currentTime); + return dateString; + } + + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 根据手机的分辨率从 px(像素) 的单位 转成为 dp + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + public static int getScreenPicHeight(int screenWidth, Bitmap bitmap) { + int picWidth = bitmap.getWidth(); + int picHeight = bitmap.getHeight(); + int picScreenHeight = 0; + picScreenHeight = (screenWidth * picHeight) / picWidth; + return picScreenHeight; + } + + private static Drawable createDrawable(Drawable d, Paint p) { + + BitmapDrawable bd = (BitmapDrawable) d; + Bitmap b = bd.getBitmap(); + Bitmap bitmap = Bitmap.createBitmap(bd.getIntrinsicWidth(), + bd.getIntrinsicHeight(), Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + canvas.drawBitmap(b, 0, 0, p); // 关键代码,使用新的Paint画原图, + + return new BitmapDrawable(bitmap); + } + + /** 设置Selector。 本次只增加点击变暗的效果,注释的代码为更多的效果 */ + public static StateListDrawable createSLD(Context context, Drawable drawable) { + StateListDrawable bg = new StateListDrawable(); + int brightness = 50 - 127; + ColorMatrix cMatrix = new ColorMatrix(); + cMatrix.set(new float[] { 1, 0, 0, 0, brightness, 0, 1, 0, 0, + brightness,// 改变亮度 + 0, 0, 1, 0, brightness, 0, 0, 0, 1, 0 }); + + Paint paint = new Paint(); + paint.setColorFilter(new ColorMatrixColorFilter(cMatrix)); + + Drawable normal = drawable; + Drawable pressed = createDrawable(drawable, paint); + bg.addState(new int[] { android.R.attr.state_pressed, }, pressed); + bg.addState(new int[] { android.R.attr.state_focused, }, pressed); + bg.addState(new int[] { android.R.attr.state_selected }, pressed); + bg.addState(new int[] {}, normal); + return bg; + } + + public static Bitmap getImageFromAssetsFile(Context ct, String fileName) { + Bitmap image = null; + AssetManager am = ct.getAssets(); + try { + InputStream is = am.open(fileName); + image = BitmapFactory.decodeStream(is); + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return image; + + } + + public static void executeAsyncTask( + AsyncTask task, Params... params) { + if (Build.VERSION.SDK_INT >= 11) { + task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params); + } else { + task.execute(params); + } + } + + public static String getUploadtime(long created) { + StringBuffer when = new StringBuffer(); + int difference_seconds; + int difference_minutes; + int difference_hours; + int difference_days; + int difference_months; + long curTime = System.currentTimeMillis(); + difference_months = (int) (((curTime / 2592000) % 12) - ((created / 2592000) % 12)); + if (difference_months > 0) { + when.append(difference_months + "月"); + } + + difference_days = (int) (((curTime / 86400) % 30) - ((created / 86400) % 30)); + if (difference_days > 0) { + when.append(difference_days + "天"); + } + + difference_hours = (int) (((curTime / 3600) % 24) - ((created / 3600) % 24)); + if (difference_hours > 0) { + when.append(difference_hours + "小时"); + } + + difference_minutes = (int) (((curTime / 60) % 60) - ((created / 60) % 60)); + if (difference_minutes > 0) { + when.append(difference_minutes + "分钟"); + } + + difference_seconds = (int) ((curTime % 60) - (created % 60)); + if (difference_seconds > 0) { + when.append(difference_seconds + "秒"); + } + + return when.append("前").toString(); + } + + public static boolean hasToken(Context ct) { + String token = SharePrefUtil.getString(ct, "token", ""); + if (TextUtils.isEmpty(token)) { + return false; + } else { + return true; + } + } + + public static void setListViewHeightBasedOnChildren(ListView listView) { + // 获取ListView对应的Adapter + ListAdapter listAdapter = listView.getAdapter(); + if (listAdapter == null) { + return; + } + int totalHeight = 0; + for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目 + View listItem = listAdapter.getView(i, null, listView); + listItem.measure(0, 0); // 计算子项View 的宽高 + totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度 + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); + params.height = totalHeight + + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); + // listView.getDividerHeight()获取子项间分隔符占用的高度 + // params.height最后得到整个ListView完整显示需要的高度 + listView.setLayoutParams(params); + } + + public static String formatDate() { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + return sdf.format(new Date()); + } + + /** + * + * @author gaofei + * @return + * @date 2015-9-8 下午4:22:04 + * + * 功能说明:获得设备信息,设备类型,设备型号 + * + * method + */ + public static String getDeviceInfo() { + String mobileName = ""; + String mobileType = ""; + try { + mobileName = Build.MANUFACTURER; + mobileType = Build.MODEL; + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + String deviceSpec = mobileName + " " + mobileType; + deviceSpec = deviceSpec.replaceAll("\\s*", ""); + + return deviceSpec; + } + + private static final String SAVE_PIC_PATH = Environment + .getExternalStorageState().equalsIgnoreCase( + Environment.MEDIA_MOUNTED) ? Environment + .getExternalStorageDirectory().getAbsolutePath() : "/mnt/sdcard";// 保存到SD卡 + private static final String SAVE_REAL_PATH = SAVE_PIC_PATH + + "/gdxzExpert/savePic";// 保存的确切位置 + + public static void saveFile(Bitmap bm, String fileName, String path) + throws IOException { + String subForder = SAVE_REAL_PATH + path; + File foder = new File(subForder); + if (!foder.exists()) { + foder.mkdirs(); + } + File myCaptureFile = new File(subForder, fileName); + if (!myCaptureFile.exists()) { + myCaptureFile.createNewFile(); + } + BufferedOutputStream bos = new BufferedOutputStream( + new FileOutputStream(myCaptureFile)); + bm.compress(Bitmap.CompressFormat.PNG, 100, bos); + bos.flush(); + bos.close(); + } + + public static String saveBitmapToLocal(String outPath, Bitmap bitmap) { + try { + String imagePath = FileAccessor.getAvatarPathName() + "/" + + outPath;//DemoUtils.md5(outPath) + File file = new File(imagePath); + if (!file.exists()) { + file.createNewFile(); + } + BufferedOutputStream bufferedOutputStream = new BufferedOutputStream( + new FileOutputStream(file)); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, + bufferedOutputStream); + bufferedOutputStream.close(); + LogUtil.d("photo image from data, path:" + imagePath); + return imagePath; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + // Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); + // Uri uri = Uri.fromFile(file); + // intent.setData(uri); + // context.sendBroadcast(intent);//这个广播的目的就是更新图库,发了这个广播进入相册就可以找到你保存的图片了!,记得要传你更新的file哦 + + + /** + * + * ToDBC + * 将textview中的字符全角化。即将所有的数字、字母及标点全部转为全角字符,使它们与汉字同占两个字节, + * 这样就可以避免由于占位导致的排版混乱问题了。 半角转为全角的代码如下,只需调用即可。 + * @param input + * @return + * String + */ + public static String ToDBC(String input) { + char[] c = input.toCharArray(); + for (int i = 0; i< c.length; i++) { + if (c[i] == 12288) { + c[i] = (char) 32; + continue; + }if (c[i]> 65280&& c[i]< 65375) + c[i] = (char) (c[i] - 65248); + } + return new String(c); + } + + /** + * 获取年 + * @return + */ + public static int getYear(){ + Calendar cd = Calendar.getInstance(); + return cd.get(Calendar.YEAR); + } + /** + * 获取月 + * @return + */ + public static int getMonth(){ + Calendar cd = Calendar.getInstance(); + return cd.get(Calendar.MONTH)+1; + } + /** + * + * 方法描述 隐藏手机号中间位置字符,显示前三后三个字符 + */ + public static String hidePhoneNo(String phoneNo) { + int length = phoneNo.length(); + int beforeLength = 3; + int afterLength = 4; + //替换字符串,当前使用“*” + String replaceSymbol = "*"; + StringBuffer sb = new StringBuffer(); + for(int i=0; i= (length - afterLength)) { + sb.append(phoneNo.charAt(i)); + } else { + sb.append(replaceSymbol); + } + } + + return sb.toString(); + } + public static void setCookie(String url) { + + CookieManager cookieManager = CookieManager.getInstance(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + cookieManager.removeSessionCookies(null); + cookieManager.flush(); + } else { + cookieManager.removeSessionCookie(); + CookieSyncManager.getInstance().sync(); + } + cookieManager.setAcceptCookie(true); + cookieManager.setCookie(url, "hcp_from=expert_app"); + cookieManager.setCookie(url, "hcp_token="+SharePrefUtil.getString(UIUtils.getContext(),"hcp_token","")); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + + cookieManager.flush(); + } else { + + CookieSyncManager.getInstance().sync(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ConfigCacheUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ConfigCacheUtil.java new file mode 100644 index 0000000..be5524d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ConfigCacheUtil.java @@ -0,0 +1,146 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.File; +import java.io.IOException; + +import android.content.Context; +import android.os.Environment; +import android.util.Log; + + +/** + * 缓存工具类 + * @author naibo-liao + * @时间: 2013-1-4下午02:30:52 + */ +public class ConfigCacheUtil { + + private static final String TAG=ConfigCacheUtil.class.getName(); + + /** 1秒超时时间 */ + public static final int CONFIG_CACHE_SHORT_TIMEOUT=1000 * 60 * 5; // 5 分钟 + + /** 5分钟超时时间 */ + public static final int CONFIG_CACHE_MEDIUM_TIMEOUT=1000 * 3600 * 2; // 2小时 + + /** 中长缓存时间 */ + public static final int CONFIG_CACHE_ML_TIMEOUT=1000 * 60 * 60 * 24 * 1; // 1天 + + /** 最大缓存时间 */ + public static final int CONFIG_CACHE_MAX_TIMEOUT=1000 * 60 * 60 * 24 * 7; // 7天 + + /** + * CONFIG_CACHE_MODEL_LONG : 长时间(7天)缓存模式
+ * CONFIG_CACHE_MODEL_ML : 中长时间(12小时)缓存模式
+ * CONFIG_CACHE_MODEL_MEDIUM: 中等时间(2小时)缓存模式
+ * CONFIG_CACHE_MODEL_SHORT : 短时间(5分钟)缓存模式 + */ + public enum ConfigCacheModel { + CONFIG_CACHE_MODEL_SHORT, CONFIG_CACHE_MODEL_MEDIUM, CONFIG_CACHE_MODEL_ML, CONFIG_CACHE_MODEL_LONG; + } + + /** + * 获取缓存 + * @param url 访问网络的URL + * @return 缓存数据 + */ + public static String getUrlCache(String url, ConfigCacheModel model,Context context) { + if(url == null) { + return null; + } + + String result=null; + String path=Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt"; + File file=new File(path); + if(file.exists() && file.isFile()) { + long expiredTime=System.currentTimeMillis() - file.lastModified(); + Log.d(TAG, file.getAbsolutePath() + " expiredTime:" + expiredTime / 60000 + "min"); + // 1。如果系统时间是不正确的 + // 2。当网络是无效的,你只能读缓存 + if(UIUtils.isNetWorkConnected(context)) { + if(expiredTime < 0) { + return null; + } + if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_SHORT) { + if(expiredTime > CONFIG_CACHE_SHORT_TIMEOUT) { + return null; + } + } else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_MEDIUM) { + if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) { + return null; + } + } else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_ML) { + if(expiredTime > CONFIG_CACHE_ML_TIMEOUT) { + return null; + } + } else if(model == ConfigCacheModel.CONFIG_CACHE_MODEL_LONG) { + if(expiredTime > CONFIG_CACHE_MEDIUM_TIMEOUT) { + return null; + } + } else { + if(expiredTime > CONFIG_CACHE_MAX_TIMEOUT) { + return null; + } + } + } + + try { + result=FileUtils.readTextFile(file); + } catch(IOException e) { + e.printStackTrace(); + } + } + return result; + } + + /** + * 设置缓存 + * @param data + * @param url + */ + public static void setUrlCache(String data, String url) { + if(Constant.ENVIROMENT_DIR_CACHE == null) { + return; + } + File dir=new File(Constant.ENVIROMENT_DIR_CACHE); + if(!dir.exists() && Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + dir.mkdirs(); + } + File file=new File(Constant.ENVIROMENT_DIR_CACHE + MD5Utils.md5Encrypt(url)+".txt"); + try { + // 创建缓存数据到磁盘,就是创建文件 + FileUtils.writeTextFile(file, data); + } catch(IOException e) { + Log.d(TAG, "write " + file.getAbsolutePath() + " data failed!"); + e.printStackTrace(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + /** + * 删除历史缓存文件 + * @param cacheFile + */ + public static void clearCache(File cacheFile) { + if(cacheFile == null) { + if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + try { + File cacheDir=new File(Environment.getExternalStorageDirectory().getPath() + "/gdxz/cache/"); + if(cacheDir.exists()) { + clearCache(cacheDir); + } + } catch(Exception e) { + e.printStackTrace(); + } + } + } else if(cacheFile.isFile()) { + cacheFile.delete(); + } else if(cacheFile.isDirectory()) { + File[] childFiles=cacheFile.listFiles(); + for(int i=0; i < childFiles.length; i++) { + clearCache(childFiles[i]); + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Constant.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Constant.java new file mode 100644 index 0000000..d4a3e8b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Constant.java @@ -0,0 +1,216 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.os.Environment; + +/** + * + * Constant.java + * + * @author gaofei + * @date 2015-8-31 上午9:55:00 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:存放变量的工具类 + */ +public class Constant { + + public static String SP_NAME = "gdxz_config";// sp文件名 + public static String SP_IS_FIRST_NAME = "IS_OPEN_MAIN_PAGER";// 是否第一次使用APP的sp文件名 + public static String IS_LOGIN = "isLogin";// 是否登录 + public static String Patient_AppKey = "aaf98f89516bf50b015174e9d5ea1110#";// 容联AppKey + public static String AppKey = "8a48b5514fba2f87014fca72dec021e4";// 容联AppKey + public static String AppToken = "e470a37c8561ea899cb78b712ffec2e3";// 容联AppToken + + public static String SystemID = "f81e64e19fd54525be857aa49c724582";// 系统推送账号id + public static String YanzhengID = "a46c069b8179419db8d9aac07550dafb";// 验证消息推送账号id + public static String OrderID = "3219a37e63f14ebfae586de7676ab550";// 订单消息推送账号id + public static String PayId="1281030301";//微信支付商户号 + public static String WeId ="wxbf3658f5e674667c";//微信id + public static Boolean WePayed =false;//微信是否支付成功 + public static String PatientApplyID = "8f144d2f8f8b4e9484869492a7567ce4";// 随访消息推送账号id + public static String PublicID = "c4957541a3294caebf298f235cfe106d";// 公益消息推送账号id + + public static String TYPE_ONE = "1";// 专家同意患者的随访申请 + public static String TYPE_TWO = "2";// 专家拒绝患者的随访申请 + public static String TYPE_THREE = "3";// 专家抢答成功公益咨询 + public static String TYPE_FOUR = "4";// 专家解除患者的随访关系 + public static String TYPE_FIVE = "5";// 患者解除专家的随访关系 + public static String TYPE_SIX = "6";// 订单消息 + public static String TYPE_SEVEN = "7";// 系统消息 + public static String TYPE_EIGHT = "8";// 患者申请随访患者 + public static String TYPE_LOGOUT = "33";// 删除账号 + public static boolean isShareGetPoint = false;// 分享是否得分 + + //帐号igandan.com密码igandan.org + public static String YKToken = "FcUQbuw4CccahV3fK26CvDFfXM-_72B45slMKj2lLy4";// 医库Token + public static String NOFIFICATION_TYPE = "Kickoff_pushcontent_notification";// 容联推送的类型,一般为离线登录 + /** + * 聊天类型,患者 + */ + public static String typePatient = "Patient";// 聊天类型,患者 + /** + * 聊天类型,公益咨询 + */ + public static String typeConsult = "Consult";// 聊天类型,公益咨询 + /** + * 聊天类型,即是患者也是公益咨询 + */ + public static String typePatientConsult = "PatientConsult";// 聊天类型,公益咨询 + /** + * 聊天类型,朋友圈里 + */ + public static String typeFriends = "Friends";// 聊天类型,朋友圈里 + /** + * 聊天类型,朋友圈里 + */ + public static String typeVip = "Vip";// 聊天类型,朋友圈里 + /** + * 专家uuid,即我的uuid + */ + public static String uuid = "uuid"; + + /** + * 万方用户名 + */ + public static String WFUserName = "iGandan"; + /** + * 万方密码 + */ + public static String WFPassWord = "gdxz67571131"; + /** + * 万方token + */ + public static String WFToken = "iGandan"; + /** + * 万方key + */ + public static String WFKey = "iGandan201807130"; + /** + * 万方type + */ + public static String WFtype = "WF_QK"; + /** + * 专家uuid,即我的uuid,也是聊天的id + */ + public static String USERID = "USERID"; + /** + * 专家的头像,既是我的头像,在登录,修改资料时候保存到sp + */ + public static String photo = "photo"; + /** + * 专家的的真实姓名,既是我的姓名,在登录,修改资料时候保存到sp + */ + public static String realName = "realName"; + /** + * 专家的的手机号,既是我的手机号,在登录,修改资料时候保存到sp + */ + public static String mobile = "mobile"; + /** + * 云信 + */ + + public static String yx_accid = "YX_ACCID"; + public static String yx_token = "YX_TOKEN"; + //聊天类型普通聊天与公益咨询 + public static String general = "general"; + public static String consult = "consult"; + /** + * 聊天类型,系通知 + */ + public static String typeSystem = "System"; + + // 读过的新闻id数组 + public final static String READ_NEWS_ID_ARRAY_KEY = "read_news_id_array"; + // 读过的系统消息id数组 + public final static String READ_MSG_ID_ARRAY_KEY = "read_msg_id_array"; + + /** + * 选择银行卡数值 + */ + public final static int SELECT_BANK_CARD = 500; + /** + * 去提现数值 + */ + public final static int DRAW_WITH_CODE = 501; + /** + * 科普投稿 + */ + public final static int CONTRIBUTE_CODE = 502; + + /** + * 科普投稿 + */ + public final static int CONTRIBUTE_CODE2 = 5022; + + /** + * 爱心捐助->我要捐助 + */ + public final static int DONATE_CODE = 503; + /** + * 个人资料—>修改头像 + */ + public final static int INFO_CODE = 504; + + public static String ORDER_DATA = "order_data"; + public static boolean isRefreshpoint = true; + public static int pointnum = 0; + ; + + // 百度定位中sp设置 + public static final String LON = "lon";// 百度定位经度 + public static final String LAT = "lat";// 维度 + public static final String PROVINCE = "province";// 省 + public static final String CITY = "city";// 市 + public static final String DISTRICT = "district";// 区 + public static final String CITYCODE = "citycode";// 城市id + + /** + * 公益咨询uuid + */ + public static final String PublicServiceUuid = "PublicServiceUuid";// 城市id + /** + * 表示抢答了公益咨询 + */ + public static final int openPublicService = -1; + + /** + * 友盟分享 + */ + public static final String DESCRIPTOR = "com.umeng.share"; + + public static final String ENVIROMENT_DIR_CACHE = Environment.getExternalStorageDirectory().getAbsolutePath() + "/"; + + + public static boolean isSignIn;//是否签到 + public static String isNotification = "isNotification";//是否打开通知栏 + public static String isdown = "";//是否存在下载课件任务,"":说明重新启动 0:无下载任务 1:有下载任务 + public static int fragmentHeight1; + public static int fragmentHeight2; + public static int fragmentHeight3; + public static int isMaiLanExpert;//是否是迈兰医生1:是 0:不是 + public static int HERO2019;//是否开启英雄榜 + public static String HERO2019url_path;//是否开启英雄榜 + public static String regID;//小米推送服务返回regid作为容联的 + public static String token;//华为推送服务返回作为容联的 + public static int from;//赠书活动 + public static String url_path;//赠书活动 + public static String zengshuName;//赠书活动 + public static String Img;//赠书活动 + + public static int islogout = 2; + public static int IV_5ZHE; + // public static String Changjianwenti = "http://wx.igandan.com/changjianwenti.jsp?share=1" ;//常见问题 +// public static final String Changjianwenti = "http://wx.igandan.com/QaA/toindex?share=1" ;//常见问题 + public static String Changjianwenti = "https://wx.igandan.com/wxPatient/index.htm#/problem?link=share";//常见问题 + public static final String POLVID = "PolvId";// 观众id + + public static String OldfilePath = Environment.getExternalStorageDirectory() + .getAbsolutePath() + "/gdxzExpert/download";//Android11以前期刊杂志的下载路径 + public static final String ShowMagazine = "ShowMagazine"; + + public static String Report_userId=""; + public static String Repotr_token=""; + public static String Repotr_app_key=""; + + //uniapp小程序appid + public static String uniapp_mp_appid="__UNI__89F511F"; +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/CopyButtonLibrary.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/CopyButtonLibrary.java new file mode 100644 index 0000000..dfde241 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/CopyButtonLibrary.java @@ -0,0 +1,35 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.widget.TextView; + +import static android.content.Context.CLIPBOARD_SERVICE; + +/** + * Created by WANGChengXin on 2020/1/14. + */ + +public class CopyButtonLibrary { + private ClipboardManager myClipboard; + private ClipData myClip; + private Context context; + private TextView textView; + + public CopyButtonLibrary(Context context, TextView textView) { + this.context = context; + this.textView = textView; + } + + public void init() { + myClipboard = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE); + String text; + text = textView.getText().toString(); + + myClip = ClipData.newPlainText("text", text); + myClipboard.setPrimaryClip(myClip); + ToastUtil.showMessage("复制成功"); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/CrashHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/CrashHandler.java new file mode 100644 index 0000000..1c37679 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/CrashHandler.java @@ -0,0 +1,417 @@ +package cn.shangyu.gdxzExpert.utils; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.os.Build; +import android.os.Environment; +import android.text.format.Time; +import android.util.Log; + +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest; + +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; +import java.lang.Thread.UncaughtExceptionHandler; +import java.lang.reflect.Field; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.TreeSet; + +import cn.shangyu.gdxzExpert.ecdemo.common.utils.FileAccessor; +import cn.shangyu.gdxzExpert.http.HttpHelper; + +/** + * ClassName: CrashHandler + * Function: UncaughtException处理类,当程序发生Uncaught异常的时候,由该类来接管程序,并记录发送错误报告. + * @author Norris Norris.sly@gmail.com + * @version + * @since Ver 1.0 I used to be a programmer like you, then I took an arrow in the knee + * @Date 2013 2013-3-24 下午12:27:10 + * @see + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * @Fields + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * @Methods + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * 2013-3-24下午12:27:10 Modified By Norris + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + */ +public class CrashHandler implements UncaughtExceptionHandler { + /** + * Log日志的tag + * String : TAG + * @since 2013-3-21下午8:44:28 + */ + private static final String TAG = "NorrisInfo" ; + /** + * 系统默认的UncaughtException处理类 + * Thread.UncaughtExceptionHandler : mDefaultHandler + * @since 2013-3-21下午8:44:43 + */ + private UncaughtExceptionHandler mDefaultHandler ; + /** + * CrashHandler实例 + * CrashHandler : mInstance + * @since 2013-3-21下午8:44:53 + */ + private static CrashHandler mInstance = new CrashHandler() ; + /** + * 程序的Context对象 + * Context : mContext + * @since 2013-3-21下午8:45:02 + */ + private Context mContext ; + /** + * 用来存储设备信息和异常信息 + * Map : mLogInfo + * @since 2013-3-21下午8:46:15 + */ + private Map mLogInfo = new HashMap() ; + /** + * 用于格式化日期,作为日志文件名的一部分(FIXME 注意在windows下文件名无法使用:等符号!) + * SimpleDateFormat : mSimpleDateFormat + * @since 2013-3-21下午8:46:39 + */ + private SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyyMMdd_HH-mm-ss") ; + /** 错误报告文件的扩展名 */ + private static final String CRASH_REPORTER_EXTENSION = ".log"; + /** + * Creates a new instance of CrashHandler. + */ + private CrashHandler() { + } + /** + * getInstance:{获取CrashHandler实例 ,单例模式 } + * ────────────────────────────────── + * @return CrashHandler + * @throws + * @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0 + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * 2013-3-21下午8:52:24 Modified By Norris + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + */ + public static CrashHandler getInstance() { + return mInstance ; + } + /** + * init:{初始化} + * ────────────────────────────────── + * @param paramContext + * @return void + * @throws + * @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0 + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * 2013-3-21下午8:52:45 Modified By Norris + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + */ + public void init(Context paramContext) { + mContext = paramContext ; + // 获取系统默认的UncaughtException处理器 + mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler() ; + // 设置该CrashHandler为程序的默认处理器 + Thread.setDefaultUncaughtExceptionHandler(this) ; + } + /** + * 当UncaughtException发生时会转入该重写的方法来处理 + * (non-Javadoc) + * @see UncaughtExceptionHandler#uncaughtException(Thread, Throwable) + */ + public void uncaughtException(Thread paramThread , Throwable paramThrowable) { + if( ! handleException(paramThrowable) && mDefaultHandler != null) { + // 如果自定义的没有处理则让系统默认的异常处理器来处理 + mDefaultHandler.uncaughtException(paramThread , paramThrowable) ; + } + else { + try { + // 如果处理了,让程序继续运行1秒再退出,保证文件保存并上传到服务器 + Thread.sleep(1000) ; + } + catch(InterruptedException e) { + e.printStackTrace() ; + } + // 退出程序 + android.os.Process.killProcess(android.os.Process.myPid()) ; + System.exit(1) ; + } + } + /** + * handleException:{自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.} + * ────────────────────────────────── + * @param paramThrowable + * @return true:如果处理了该异常信息;否则返回false. + * @throws + * @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0 + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * 2013-3-24下午12:28:53 Modified By Norris + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + */ + public boolean handleException(Throwable paramThrowable) { + if(paramThrowable == null) + return false ; +// new Thread() { +// public void run() { +// Looper.prepare() ; +// Toast.makeText(mContext , "很抱歉,程序出现异常,即将退出" , Toast.LENGTH_SHORT).show() ; +// Looper.loop() ; +// } +// }.start() ; + // 获取设备参数信息 +// getDeviceInfo(mContext) ; + // 保存日志文件 + saveCrashLogToFile(paramThrowable) ; + return true ; + } + /** + * getDeviceInfo:{获取设备参数信息} + * ────────────────────────────────── + * @param paramContext + * @throws + * @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0 + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * 2013-3-24下午12:30:02 Modified By Norris + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + */ + public void getDeviceInfo(Context paramContext) { + try { + // 获得包管理器 + PackageManager mPackageManager = paramContext.getPackageManager() ; + // 得到该应用的信息,即主Activity + PackageInfo mPackageInfo = mPackageManager.getPackageInfo( + paramContext.getPackageName() , PackageManager.GET_ACTIVITIES) ; + if(mPackageInfo != null) { + String versionName = mPackageInfo.versionName == null ? "null" + : mPackageInfo.versionName ; + String versionCode = mPackageInfo.versionCode + "" ; + mLogInfo.put("versionName" , versionName) ; + mLogInfo.put("versionCode" , versionCode) ; + } + } + catch(NameNotFoundException e) { + e.printStackTrace() ; + } + // 反射机制 + Field[] mFields = Build.class.getDeclaredFields() ; + // 迭代Build的字段key-value 此处的信息主要是为了在服务器端手机各种版本手机报错的原因 + for(Field field : mFields) { + try { + field.setAccessible(true) ; + mLogInfo.put(field.getName() , field.get("").toString()) ; + Log.d(TAG , field.getName() + ":" + field.get("")) ; + } + catch(IllegalArgumentException e) { + e.printStackTrace() ; + } + catch(IllegalAccessException e) { + e.printStackTrace() ; + } + } + } + /** + * saveCrashLogToFile:{将崩溃的Log保存到本地} + * TODO 可拓展,将Log上传至指定服务器路径 + * ────────────────────────────────── + * @param paramThrowable + * @return FileName + * @throws + * @since I used to be a programmer like you, then I took an arrow in the knee Ver 1.0 + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + * 2013-3-24下午12:31:01 Modified By Norris + * ────────────────────────────────────────────────────────────────────────────────────────────────────── + */ + private void saveCrashLogToFile(Throwable paramThrowable) { + StringBuffer mStringBuffer = new StringBuffer() ; + for(Map.Entry entry : mLogInfo.entrySet()) { + String key = entry.getKey() ; + String value = entry.getValue() ; + mStringBuffer.append(key + "=" + value + "\r\n") ; + } + Writer mWriter = new StringWriter() ; + PrintWriter mPrintWriter = new PrintWriter(mWriter) ; + paramThrowable.printStackTrace(mPrintWriter) ; + paramThrowable.printStackTrace(); + Throwable mThrowable = paramThrowable.getCause() ; + // 迭代栈队列把所有的异常信息写入writer中 + while(mThrowable != null) { + mThrowable.printStackTrace(mPrintWriter) ; + // 换行 每个个异常栈之间换行 + mPrintWriter.append("\r\n") ; + mThrowable = mThrowable.getCause() ; + } + //记得关闭 + mPrintWriter.close() ; + String mResult = mWriter.toString() ; + mStringBuffer.append(mResult) ; + // 保存文件,设置文件名 +// String mTime = mSimpleDateFormat.format(new Date()) ; +// final String mFileName = "CrashLog-" + mTime + ".log" ; + try { + Time t = new Time("GMT+8"); + t.setToNow(); // 取得系统时间 + int date = t.year * 10000 + t.month * 100 + t.monthDay; + int time = t.hour * 10000 + t.minute * 100 + t.second; + String mFileName = "gdxzExpert-crash-" + date + "-" + time + CRASH_REPORTER_EXTENSION; + final String path; + if (FileAccessor.isExistExternalStore()) { + path =getContext().getExternalFilesDir("") + "/gdxzExpert/CrashLogs"; + } else{ + path ="/gdxzExpert/crash"; + } + final File mDirectory = new File(path) ; + if( ! mDirectory.exists()){ + mDirectory.mkdir() ; + } + FileOutputStream mFileOutputStream = new FileOutputStream(new File(mDirectory , mFileName),true); +// FileOutputStream mFileOutputStream = new FileOutputStream(mDirectory + "/" + mFileName) ; + mFileOutputStream.write(mStringBuffer.toString().getBytes()) ; + mFileOutputStream.close() ; + } + catch(FileNotFoundException e) { + e.printStackTrace() ; + } + catch(IOException e) { + e.printStackTrace() ; + } +// return null ; + } + + + /** + * 在程序启动时候, 可以调用该函数来发送以前没有发送的报告 + */ + public void sendPreviousReportsToServer() { + sendCrashReportsToServer(mContext); + } + + + /** + * 把错误报告发送给服务器,包含新产生的和以前没发送的. + * + * @param ctx + */ + private void sendCrashReportsToServer(Context ctx) { + String[] crFiles = getCrashReportFiles(ctx); + if (crFiles != null && crFiles.length > 0) { + TreeSet sortedFiles = new TreeSet(); + sortedFiles.addAll(Arrays.asList(crFiles)); + for (String fileName : sortedFiles) { + File cr = new File(ctx.getFilesDir(), fileName); + postReport(cr); + cr.delete();// 删除已发送的报告 + } + } + } + /** + * 获取错误报告文件名 + * + * @param ctx + * @return + */ + private String[] getCrashReportFiles(Context ctx) { + File filesDir = ctx.getFilesDir(); + FilenameFilter filter = new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.endsWith(CRASH_REPORTER_EXTENSION); + } + }; + return filesDir.list(filter); + } + + private void postReport(final File file) { + // TODO 发送错误报告到服务器 + final String url=Url.CrashUpload; + //实例化RequestParams对象 +// RequestParams params=new RequestParams(); +// params.addBodyParameter(file.getPath().replace("/", ""), file); +// uploadMethod(params,url); + new Thread(new Runnable() { + + @Override + public void run() { + // TODO Auto-generated method stub + upLoad(url, file); + } + }).start(); + } + + /** + * 上传log日志 + * @param file + * @param url + */ + private void upLoad(String urlLoad, File mDirectory) { + // TODO Auto-generated method stub + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { +// String path = Environment.getExternalStorageDirectory()+ "/CrashLogs/CrashLog.log"; +// File mDirectory = new File(path) ; + if(mDirectory.exists()){ + String str = urlLoad; + try { + URL url = new URL(str); + HttpURLConnection connection=(HttpURLConnection)url.openConnection(); + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("content-type", "text/html"); + BufferedOutputStream out=new BufferedOutputStream(connection.getOutputStream()); + + //读取文件上传到服务器 + FileInputStream fileInputStream=new FileInputStream(mDirectory); + byte[]bytes=new byte[1024]; + int numReadByte=0; + while((numReadByte=fileInputStream.read(bytes,0,1024))>0){ + out.write(bytes, 0, numReadByte); + } + out.flush(); + fileInputStream.close(); + //读取URLConnection的响应 + DataInputStream in=new DataInputStream(connection.getInputStream()); + mDirectory.delete(); + } catch (Exception e) { + e.printStackTrace(); + } + + }else{ + + } + } + } + + private void uploadMethod(RequestParams params, String url) { + // TODO Auto-generated method stub + HttpHelper.loadData(HttpRequest.HttpMethod.POST, url, params,new RequestCallBack() { + @Override + public void onSuccess(ResponseInfo responseInfo) { + +// ToastUtil.showMessage("上传成功"); + Log.i("CrashHandler", "====upload_success=====" + responseInfo.result); + } + @Override + public void onFailure(HttpException error, String msg) { + +// ToastUtil.showMessage("上传失败"); + Log.i("CrashHandler", error.getExceptionCode() + "====upload_error====" + msg); + } + }); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DataCleanManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DataCleanManager.java new file mode 100644 index 0000000..377b7f2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DataCleanManager.java @@ -0,0 +1,257 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; +import android.os.Environment; +import android.util.Log; + +import com.nostra13.universalimageloader.utils.StorageUtils; + +import java.io.File; +import java.math.BigDecimal; + +import cn.shangyu.gdxzExpert.ecdemo.storage.PatientSqlManager; + +public class DataCleanManager { + + public static String getTotalCacheSize(Context context) throws Exception { + long cacheSize = getFolderSize(context.getCacheDir()); + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + cacheSize += getFolderSize(context.getExternalCacheDir()); +// File cacheDir = StorageUtils.getOwnCacheDirectory(context, "gdxzExpert/image"); +// LogUtil.i("cacheDir =="+cacheDir); + File cacheDir = new File("/data/data/" + + context.getPackageName() + "/app_webview/Cache"); + cacheSize += getFolderSize(cacheDir); + } + return getFormatSize(cacheSize); + } + + public static void clearAllCache(Context context) { + deleteDir(context.getCacheDir()); + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + deleteDir(context.getExternalCacheDir()); + cleanWebCache(context); +// cleanCustomCacheImage(context); + } + } + + private static boolean deleteDir(File dir) { + if (dir != null && dir.isDirectory()) { + String[] children = dir.list(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + }else { + Log.i("TAG","flag = "+"文件不存在"); + } + return dir.delete(); + } + + /** + * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * + * + * @param context + */ + public static void cleanInternalCache(Context context) { + boolean flag = deleteDir(context.getCacheDir()); + + } + + /** + * * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * + * + * @param context + */ + public static void cleanDatabases(Context context) { + deleteDir(new File("/data/data/" + + context.getPackageName() + "/databases")); + } + /** + * * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * + * + * @param context + */ + public static void cleanWebCache(Context context) { + deleteDir(new File("/data/data/" + context.getPackageName() + "/app_webview")); + } + + /** + * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * + * + * @param context + */ + public static void cleanSharedPreference(Context context) { + /** 删除SharedPreferences文件 **/ + SharePrefUtil.clear(context); + File file = new File("/data/data/" + + context.getPackageName() + "/shared_prefs", Constant.SP_NAME); + deleteDir(file); +// deleteDir(new File("/data/data/" +// + context.getPackageName() + "/shared_prefs")); + + } + /** + * * 清除本应用自定义的数据库文件 * + * + * @param context + */ + public static void cleanCustomDatabases(Context context) { + deleteDir(new File("/data/data/" + + context.getPackageName() + "/ECSDK_Msg")); + } + /** + * * 清除本应用自定义image * + * + * @param context + */ + public static void cleanCustomCacheImage(Context context) { + File cacheDir = StorageUtils.getOwnCacheDirectory(context, "gdxzExpert/image"); + deleteDir(cacheDir); + } + + /** + * * 按名字清除本应用数据库 * * + * + * @param context + * @param dbName + */ + public static void cleanDatabaseByName(Context context, String dbName) { + context.deleteDatabase(dbName); + } + + /** + * * 清除/data/data/com.xxx.xxx/files下的内容 * * + * + * @param context + */ + public static void cleanFiles(Context context) { + deleteDir(context.getFilesDir()); + } + + /** + * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) + * + * @param context + */ + public static void cleanExternalCache(Context context) { + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + deleteDir(context.getExternalCacheDir()); + } + } + /** + * * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * + * + * @param filePath + * */ + public static void cleanCustomCache(String filePath) { + deleteDir(new File(filePath)); + } + + /** + * * 清除本应用所有的数据 * * + * + * @param context + * @param filepath + */ + public static void cleanApplicationData(Context context, String... filepath) { + PatientSqlManager.delAllPatientInfo(Constant.typePatient); + cleanSharedPreference(context); + cleanInternalCache(context); + cleanExternalCache(context); + cleanWebCache(context); +// cleanDatabases(context);//不可打开。此会清除掉用户下载记录。需要保留。 + cleanCustomCacheImage(context); + cleanCustomDatabases(context); + cleanFiles(context); + if (filepath == null) { + return; + } + for (String filePath : filepath) { + cleanCustomCache(filePath); + } + + } + + /** + * * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * + * + * @param + */ + /*private static void deleteFilesByDirectory(File directory) { + if (directory != null && directory.exists() && directory.isDirectory()) { + for (File item : directory.listFiles()) { + item.delete(); + } + } + }*/ + + // 获取文件 + // Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ + // 目录,一般放一些长时间保存的数据 + // Context.getExternalCacheDir() --> + // SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据 + public static long getFolderSize(File file) throws Exception { + long size = 0; + try { + File[] fileList = file.listFiles(); + if (fileList != null) { + for (int i = 0; i < fileList.length; i++) { + // 如果下面还有文件 + if (fileList[i].isDirectory()) { + size = size + getFolderSize(fileList[i]); + } else { + size = size + fileList[i].length(); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return size; + } + + /** + * 格式化单位 + * + * @param size + * @return + */ + public static String getFormatSize(double size) { + double kiloByte = size / 1024; + if (kiloByte < 1) { + // return size + "Byte"; + return "0KB"; + } + + double megaByte = kiloByte / 1024; + if (megaByte < 1) { + BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); + return result1.setScale(2, BigDecimal.ROUND_HALF_UP) + .toPlainString() + "KB"; + } + + double gigaByte = megaByte / 1024; + if (gigaByte < 1) { + BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); + return result2.setScale(2, BigDecimal.ROUND_HALF_UP) + .toPlainString() + "MB"; + } + + double teraBytes = gigaByte / 1024; + if (teraBytes < 1) { + BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); + return result3.setScale(2, BigDecimal.ROUND_HALF_UP) + .toPlainString() + "GB"; + } + BigDecimal result4 = new BigDecimal(teraBytes); + return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + + "TB"; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DateGetAge.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DateGetAge.java new file mode 100644 index 0000000..0b53849 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DateGetAge.java @@ -0,0 +1,37 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.Calendar; +import java.util.Date; + +/** + * Created by wangchengxin on 2019/7/2. + */ + +public class DateGetAge { + + public static int getAge(Date birthDay)throws Exception { + Calendar cal = Calendar.getInstance(); + if(cal.before(birthDay)){ + throw new IllegalArgumentException("The birthDay is before Now.It's unbelievable!"); + } + int yearNow = cal.get(Calendar.YEAR); + int monthNow = cal.get(Calendar.MONTH); + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); + cal.setTime(birthDay); + int yearBirth = cal.get(Calendar.YEAR); + int monthBirth = cal.get(Calendar.MONTH); + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); + int age = yearNow - yearBirth; + if(monthNow <= monthBirth) { + if(monthNow == monthBirth){ + if(dayOfMonthNow < dayOfMonthBirth) + age--; +} + else{ + age--; + } + } + return age; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DateUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DateUtil.java new file mode 100644 index 0000000..aecc591 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DateUtil.java @@ -0,0 +1,562 @@ +/** + * 用一句话描述该文件做什么. + * @title DateUtil.java + * @package com.sinsoft.android.util + * @author shimiso + * @update 2012-6-26 上午9:57:56 + */ +package cn.shangyu.gdxzExpert.utils; + +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; + +/** + * 日期操作工具类. + * + * @author shimiso + */ + +public class DateUtil { + + private static final String FORMAT = "yyyy-MM-dd HH:mm:ss"; + + public static Date str2Date(String str) { + return str2Date(str, null); + } + + public static Date str2Date(String str, String format) { + if (str == null || str.length() == 0) { + return null; + } + if (format == null || format.length() == 0) { + format = FORMAT; + } + Date date = null; + try { + SimpleDateFormat sdf = new SimpleDateFormat(format); + date = sdf.parse(str); + + } catch (Exception e) { + e.printStackTrace(); + } + return date; + + } + + public static Calendar str2Calendar(String str) { + return str2Calendar(str, null); + + } + + public static Calendar str2Calendar(String str, String format) { + + Date date = str2Date(str, format); + if (date == null) { + return null; + } + Calendar c = Calendar.getInstance(); + c.setTime(date); + + return c; + + } + + public static String date2Str(Calendar c) {// yyyy-MM-dd HH:mm:ss + return date2Str(c, null); + } + + public static String date2Str(Calendar c, String format) { + if (c == null) { + return null; + } + return date2Str(c.getTime(), format); + } + + public static String date2Str(Date d) {// yyyy-MM-dd HH:mm:ss + return date2Str(d, null); + } + + public static String date2Str(Date d, String format) {// yyyy-MM-dd HH:mm:ss + if (d == null) { + return null; + } + if (format == null || format.length() == 0) { + format = FORMAT; + } + SimpleDateFormat sdf = new SimpleDateFormat(format); + String s = sdf.format(d); + return s; + } + + public static String getCurDateStr() { + Calendar c = Calendar.getInstance(); + c.setTime(new Date()); + return c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + + c.get(Calendar.DAY_OF_MONTH) + " " + + c.get(Calendar.HOUR_OF_DAY) + ":" + c.get(Calendar.MINUTE) + + ":" + c.get(Calendar.SECOND); + } + + /** + * 获得当前日期的字符串格式 + * + * @param format + * @return + */ + public static String getCurDateStr(String format) { + Calendar c = Calendar.getInstance(); + return date2Str(c, format); + } + + // 格式到秒 + public static String getMillon(long time) { + + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time); + + } + public static int[] getTimeSpan(String begintime,String endtime) + { + int[]time={0,0,0,0}; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Date d1 = null;//后的时间 + try { + d1 = format.parse(endtime); + Date d2 = format.parse(begintime); //前的时间 + Long diff = d1.getTime() - d2.getTime(); //两时间差,精确到毫秒 + + int day = (int) (diff / (1000 * 60 * 60 * 24)); //以天数为单位取整 + int hour= (int) (diff/(60*60*1000)-day*24); //以小时为单位取整 + int min= (int) ((diff/(60*1000))-day*24*60-hour*60); //以分钟为单位取整 + int second= (int) (diff/1000-day*24*60*60-hour*60*60-min*60);//秒 + time[0]=day; + time[1]=hour; + time[2]=min; + time[3]=second; + + + } catch (ParseException e) { + e.printStackTrace(); + } + return time; + }; + +/* +* 将10 or 13 位时间戳转为时间字符串 +* convert the number 1407449951 1407499055617 to date/time format timestamp +*/ +public static String timestamp2Date(String str_num,String format ) { + SimpleDateFormat sdf = new SimpleDateFormat(format); + if (str_num.length() == 13) { + String date = sdf.format(new Date(Long.parseLong(str_num))); + LogUtil.i("timestamp2Date"+ "将13位时间戳:" + str_num + "转化为字符串:", date); + return date; + } else { + String date = sdf.format(new Date(Long.parseLong(str_num) * 1000L)); + LogUtil.i("timestamp2Date" + "将10位时间戳:" + str_num + "转化为字符串:", date); + return date; + } +} +/** + * 10位int型的时间戳转换为String(yyyy-MM-dd HH:mm:ss) + * @param time + * @return + */ +public static String timestampToString(Integer time){ + //int转long时,先进行转型再进行计算,否则会是计算结束后在转型 + long temp = (long)time*1000; + Timestamp ts = new Timestamp(temp); + String tsStr = ""; + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + try { + //方法一 + tsStr = dateFormat.format(ts); + System.out.println(tsStr); + } catch (Exception e) { + e.printStackTrace(); + } + return tsStr; +} + + // 格式到天 + public static String getDay(long time) { + + return new SimpleDateFormat("yyyy-MM-dd").format(time); + + } + + // 格式到毫秒 + public static String getSMillon(long time) { + + return new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-SSS").format(time); + + } + + public static List getDataList() { + Calendar calendar = new GregorianCalendar(); + Date date = new Date(); + ArrayList dataList = new ArrayList(); + for (int i = 0; i < 7; i++) { + calendar.setTime(date); + if (i == 0) { + calendar.add(Calendar.DATE, 0); + }else{ + calendar.add(Calendar.DATE, 1); + } + // 把日期往后增加一天.整数往后推,负数往前移动 + date = calendar.getTime(); + String strDate = DateUtil.date2Str(date, "MM月dd日"); + String mWay = String.valueOf(calendar.get(Calendar.DAY_OF_WEEK)); + String mW = ""; + if("1".equals(mWay)){ + mW ="日"; + }else if("2".equals(mWay)){ + mW ="一"; + }else if("3".equals(mWay)){ + mW ="二"; + }else if("4".equals(mWay)){ + mW ="三"; + }else if("5".equals(mWay)){ + mW ="四"; + }else if("6".equals(mWay)){ + mW ="五"; + }else if("7".equals(mWay)){ + mW ="六"; + } + dataList.add(mWay+strDate + " 星期" + mW); + } + return dataList; + } + public static List getDataListTwo() { + Calendar calendar = new GregorianCalendar(); + Date date = new Date(); + ArrayList dataList = new ArrayList(); + for (int i = 0; i < 7; i++) { + calendar.setTime(date); + if (i == 0) { + calendar.add(Calendar.DATE, 0); + }else{ + calendar.add(Calendar.DATE, 1); + } + // 把日期往后增加一天.整数往后推,负数往前移动 + date = calendar.getTime(); + String strDate = DateUtil.date2Str(date, "yyyy-MM-dd"); + dataList.add(strDate); + } + return dataList; + } + + private static String mYear; + private static String mMonth; + private static String mDay; + private static String mWay; + + public static String StringData(Date date){ + final Calendar c = Calendar.getInstance(); +// c.setTimeZone(TimeZone.getTimeZone("GMT+8:00")); + c.setTime(date); + mYear = String.valueOf(c.get(Calendar.YEAR)); // 获取当前年份 + mMonth = String.valueOf(c.get(Calendar.MONTH) + 1);// 获取当前月份 + mDay = String.valueOf(c.get(Calendar.DAY_OF_MONTH));// 获取当前月份的日期号码 + mWay = String.valueOf(c.get(Calendar.DAY_OF_WEEK)); + if("1".equals(mWay)){ + mWay ="日"; + }else if("2".equals(mWay)){ + mWay ="一"; + }else if("3".equals(mWay)){ + mWay ="二"; + }else if("4".equals(mWay)){ + mWay ="三"; + }else if("5".equals(mWay)){ + mWay ="四"; + }else if("6".equals(mWay)){ + mWay ="五"; + }else if("7".equals(mWay)){ + mWay ="六"; + } + return mYear + "年" + mMonth + "月" + mDay+"日"+" 周"+mWay; + } + public static String gettimeBydate(String birthday,String basdate) { + if (basdate==null||basdate.length() <10) + { + return ""; + } + if (birthday.length() > 10) { + birthday = birthday.substring(0, 10); + } + if (basdate.length() > 10) { + basdate = basdate.substring(0, 10); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date = null; + Date basedate = null; + try { + date = sdf.parse(birthday); + basedate = sdf.parse(basdate); + } catch (ParseException e) { + e.printStackTrace(); + } + + Calendar cal = Calendar.getInstance(); + + if (cal.before(date)) { + throw new IllegalArgumentException( + "The birthDay is before Now.It's unbelievable!"); + } + + cal.setTime(date); + int year = cal.get(Calendar.YEAR); + int month = cal.get(Calendar.MONTH) + 1; + cal.setTime(basedate); + int yearbase = cal.get(Calendar.YEAR); + int monthbase = cal.get(Calendar.MONTH) + 1; + double y=0,m=0; + if(monthbase> month) + { + y=year-yearbase-1; + m=(12+month-monthbase)/12.00; + } + else + { + y=year-yearbase; + m=(month-monthbase)/12.00; + } +// if(month> DateEntity.today().getMonth()) +// { +// y=DateEntity.today().getYear()-year-1; +// m=(12-(month-DateEntity.today().getMonth()))/12.00; +// } +// else +// { +// y=DateEntity.today().getYear()-year; +// m=(DateEntity.today().getMonth()-month)/12.00; +// } +// String time=String.format("%.2f", y+m); + return String.format("%.2f", Math.abs(y+m)); + } + + /** + * 根据用户生日计算年龄 + */ + public static int getAgeByBirthday(String birthday) { + if (birthday.length() > 10) { + birthday = birthday.substring(0, 10); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date = null; + try { + date = sdf.parse(birthday); + } catch (ParseException e) { + e.printStackTrace(); + } + + Calendar cal = Calendar.getInstance(); + + if (cal.before(date)) { + throw new IllegalArgumentException( + "The birthDay is before Now.It's unbelievable!"); + } + + int yearNow = cal.get(Calendar.YEAR); + int monthNow = cal.get(Calendar.MONTH) + 1; + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); + + cal.setTime(date); + int yearBirth = cal.get(Calendar.YEAR); + int monthBirth = cal.get(Calendar.MONTH) + 1; + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); + + int age = yearNow - yearBirth; + + if (monthNow <= monthBirth) { + if (monthNow == monthBirth) { + // monthNow==monthBirth + if (dayOfMonthNow < dayOfMonthBirth) { + age--; + } + } else { + // monthNow>monthBirth + age--; + } + } + return age; + } + public static int getAgeByBirthdays(String birthday) { + if (birthday.length() > 10) { + birthday = birthday.substring(0, 10); + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date date = null; + try { + date = sdf.parse(birthday); + } catch (ParseException e) { + e.printStackTrace(); + } + + Calendar cal = Calendar.getInstance(); + + if (cal.before(date)) { + throw new IllegalArgumentException( + "The birthDay is before Now.It's unbelievable!"); + } + + int yearNow = cal.get(Calendar.YEAR); + int monthNow = cal.get(Calendar.MONTH) + 1; + int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); + + cal.setTime(date); + int yearBirth = cal.get(Calendar.YEAR); + int monthBirth = cal.get(Calendar.MONTH) + 1; + int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); + + int age = yearNow - yearBirth; + +// if (monthNow <= monthBirth) { +// if (monthNow == monthBirth) { +// +// if (dayOfMonthNow < dayOfMonthBirth) { +// age--; +// } +// } else { +// +// age--; +// } +// } + return age; + } + + /** + * 以友好的方式显示时间 + * + * @param sdate + * @return + */ + public static String friendly_time(String sdate) { + Date time = null; + + time = str2Date(sdate); + + if (time == null) { + return "Unknown"; + } + String ftime = ""; + Calendar cal = Calendar.getInstance(); + + // 判断是否是同一天 + String curDate = date2Str(cal.getTime()); + String paramDate = date2Str(time); + if (curDate.equals(paramDate)) { + int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); + if (hour == 0) + ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前"; + else + ftime = hour + "小时前"; + return ftime; + } + + long lt = time.getTime() / 86400000; + long ct = cal.getTimeInMillis() / 86400000; + int days = (int) (ct - lt); + if (days == 0) { + int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); + if (hour == 0) + ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1) + "分钟前"; + else + ftime = hour + "小时前"; + } else if (days == 1) { + ftime = "昨天"; + } else if (days == 2) { + ftime = "前天 "; + } else if (days > 2 && days < 31) { + ftime = days + "天前"; + } else if (days >= 31 && days <= 2 * 31) { + ftime = "一个月前"; + } else if (days > 2 * 31 && days <= 3 * 31) { + ftime = "2个月前"; + } else if (days > 3 * 31 && days <= 4 * 31) { + ftime = "3个月前"; + } else { + ftime = date2Str(time); + } + return ftime; + } + + /** + * 以友好的方式显示时间 + * + * @param sdate + * @return + */ + public static int compareTime(String sdate, int defaultTime) { + Date time = null; + + time = str2Date(sdate, "yyyy-MM-dd HH:mm:ss"); + + if (time == null) { + return 0; + } + int ftime = defaultTime; + Calendar cal = Calendar.getInstance(); + + // 判断是否是同一天 + String curDate = date2Str(cal.getTime(), "yyyy-MM-dd HH:mm:ss"); + String paramDate = date2Str(time, "yyyy-MM-dd HH:mm:ss"); + if (curDate.equals(paramDate)) { + int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); + if (hour == 0) + ftime = (int) Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1); + return ftime; + } + long lt = time.getTime() / 86400000; + long ct = cal.getTimeInMillis() / 86400000; + int days = (int) (ct - lt); + if (days == 0) { + int hour = (int) ((cal.getTimeInMillis() - time.getTime()) / 3600000); + if (hour == 0) + ftime = (int) Math.max((cal.getTimeInMillis() - time.getTime()) / 60000, 1); + } + return ftime; + } + + /** + * 比较两个日期的大小,日期格式为yyyy-MM-dd + * + * @param str1 the first date + * @param str2 the second date + * @return true
false + */ public static boolean isDateOneBigger(String str1, String str2) { + boolean isBigger = false; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date dt1 = null; Date dt2 = null; + try { dt1 = sdf.parse(str1); + dt2 = sdf.parse(str2); + } catch (ParseException e) { + e.printStackTrace(); + } if (dt1.getTime() >= dt2.getTime()) { + isBigger = true; + } else if (dt1.getTime() < dt2.getTime()) { + isBigger = false; + } return isBigger; + } + public static boolean isDateOneBigger1(String str1, String str2) { + boolean isBigger = false; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date dt1 = null; Date dt2 = null; + try { dt1 = sdf.parse(str1); + dt2 = sdf.parse(str2); + } catch (ParseException e) { + e.printStackTrace(); + } if (dt1.getTime() > dt2.getTime()) { + isBigger = true; + } else if (dt1.getTime() <= dt2.getTime()) { + isBigger = false; + } return isBigger; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DecimalInputFilter.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DecimalInputFilter.java new file mode 100644 index 0000000..3a7c080 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DecimalInputFilter.java @@ -0,0 +1,73 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.text.InputFilter; +import android.text.Spanned; +import android.text.TextUtils; + +public class DecimalInputFilter implements InputFilter { + private static int max_point=2;//保留小数点后两位 + + public DecimalInputFilter() { + + } + + /** + * 输入框小数的位数 示例保留两位小数 + */ + private int KEEP_SEVERAL_DECIMAL_PLACES = 2; + +// public PointLengthFilter(int index) { +// this.KEEP_SEVERAL_DECIMAL_PLACES = index; +// } + + public CharSequence filter(CharSequence source, int start, int end, + Spanned dest, int dstart, int dend) { + // 删除等特殊字符,直接返回 + if ("".equals(source.toString())) { + return null; + } + String dValue = dest.toString(); + if(TextUtils.isEmpty(dValue)){ + //如果直接copy过来的数字 之前没有输入数字 + if (source.toString().contains(".")){ + int i = source.toString().indexOf("."); + if (end > i + KEEP_SEVERAL_DECIMAL_PLACES + 1){ + return source.subSequence(start, i + KEEP_SEVERAL_DECIMAL_PLACES + 1); + } + } + return source; + } + String[] splitArray = dValue.split("\\."); + if(splitArray != null && splitArray.length > 1){ + int cursorIndex = dValue.indexOf("."); + if(dend > cursorIndex){ + String dotValue = splitArray[1]; + int diff = dotValue.length() + 1 - KEEP_SEVERAL_DECIMAL_PLACES; + if(diff > 0){ + return ""; + } + } + } + //如果是粘贴过来的一串,判断长度,只保留小数点后KEEP_SEVERAL_DECIMAL_PLACES位 + if (end >= KEEP_SEVERAL_DECIMAL_PLACES && dValue.contains(".")){ + if (splitArray != null){ + if (splitArray.length == 1){ + //小数点后边没有东西,保留KEEP_SEVERAL_DECIMAL_PLACES位 + return source.subSequence(start, KEEP_SEVERAL_DECIMAL_PLACES); + }else { + //小数点后边有东西 + int i = KEEP_SEVERAL_DECIMAL_PLACES - splitArray[1].length(); + if (i > 0){ + //保留KEEP_SEVERAL_DECIMAL_PLACES - 已经存在的长度 + return source.subSequence(start, i); + }else { + //成负数了,说明小数点后边的长度超过了KEEP_SEVERAL_DECIMAL_PLACES. + return ""; + } + } + } + } + return source; + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DensityUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DensityUtil.java new file mode 100644 index 0000000..9dc9306 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DensityUtil.java @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.os.Build; +import android.util.DisplayMetrics; +import android.view.Display; +import android.view.WindowManager; + +import java.lang.reflect.Method; + +import cn.shangyu.gdxzExpert.application.BaseApplication; + +/** + * Created by Jorstin on 2015/3/18. + */ +public class DensityUtil { + + // 根据屏幕密度转换 + private static float mPixels = 0.0F; + private static float density = -1.0F; + + /** + * + * @param context + * @param pixels + * @return + */ + public static int getDisplayMetrics(Context context, float pixels) { + if (mPixels == 0.0F) + mPixels = context.getResources().getDisplayMetrics().density; + return (int) (0.5F + pixels * mPixels); + } + + + public static int getImageWeidth(Context context , float pixels) { + LogUtil.e("screen width " + context.getResources().getDisplayMetrics().widthPixels); + return context.getResources().getDisplayMetrics().widthPixels - 66 - getDisplayMetrics(context, pixels); + } + + /** + * 像素转化dip + * @param context + * @param pxValue + * @return + */ + public static int px2dip(Context context, float pxValue){ + + final float scale = context.getResources().getDisplayMetrics().density; + + return (int)(pxValue / scale + 0.5f); + + } + + /** + * dip转化像素 + * @param dipValue + * @return + */ + public static int dip2px(float dipValue){ + final float scale = Resources.getSystem().getDisplayMetrics().density; + return (int)(dipValue * scale + 0.5f); + + } + + /** + * @param context + * @param height + * @return + */ + public static int getMetricsDensity(Context context , float height) { + DisplayMetrics localDisplayMetrics = new DisplayMetrics(); + ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)) + .getDefaultDisplay().getMetrics(localDisplayMetrics); + return Math.round(height * localDisplayMetrics.densityDpi / 160.0F); + } + + + public static int fromDPToPix(Context context, int dp) { + return Math.round(getDensity(context) * dp); + } + + /** + * @param context + * @return + */ + public static float getDensity(Context context) { + if (context == null) + context = BaseApplication.getInstance().getApplicationContext(); + if (density < 0.0F) + density = context.getResources().getDisplayMetrics().density; + return density; + } + + public static int round(Context context, int paramInt) { + return Math.round(paramInt / getDensity(context)); + } + + /** + * 保持字体大小不随系统设置变化(用在界面加载之前) + * 要重写Activity的attachBaseContext() + */ + public static Context attachBaseContext(Context context, float fontScale) { + Configuration config = context.getResources().getConfiguration(); + //正确写法 + config.fontScale = fontScale; + return context.createConfigurationContext(config); + } + + /** + * 保持字体大小不随系统设置变化(用在界面加载之前) + * 要重写Activity的getResources() + */ + public static Resources getResources(Context context, Resources resources, float fontScale) { + Configuration config = resources.getConfiguration(); + if(config.fontScale != fontScale) { + config.fontScale = fontScale; + return context.createConfigurationContext(config).getResources(); + } else { + return resources; + } + } + + /** + * 保存字体大小,后通知界面重建,它会触发attachBaseContext,来改变字号 + */ + public static void recreate(Activity activity) { + activity.recreate(); + } + + + /** + * 系统设置"显示大小"时原有UI样式保持不变: + *

+ * 1、当调节手机系统"显示大小"【调大】的时候,相应的dpi会变大【dp = (dpi/160) * px】,此时dp就会变大,所以相应的UI布局就会变大。 + * 2、当调节手机系统"分辨率"【调小】的时候,相应的dpi会变小【比如由480-->320】。如果此时使用技术手段使dpi保持不变,那么相同的dp就会占用更多的px,所以UI布局就会变大。 + * + * @param context + */ + public static void setDefaultDisplay(Context context) { + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { + Configuration origConfig = context.getResources().getConfiguration(); + //获取手机出厂时默认的densityDpi【注释1】 + origConfig.densityDpi = getDefaultDisplayDensity(); + + context.getResources().updateConfiguration(origConfig, context.getResources().getDisplayMetrics()); + } + } + + public static int getDefaultDisplayDensity() { + try { + Class clazz = Class.forName("android.view.WindowManagerGlobal"); + Method method = clazz.getMethod("getWindowManagerService"); + method.setAccessible(true); + Object iwm = method.invoke(clazz); + Method getInitialDisplayDensity = iwm.getClass().getMethod("getInitialDisplayDensity", int.class); + getInitialDisplayDensity.setAccessible(true); + Object densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY); + return (int) densityDpi; + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DestroyActivityUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DestroyActivityUtil.java new file mode 100644 index 0000000..ddc933e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DestroyActivityUtil.java @@ -0,0 +1,33 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.Activity; + +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +/** + * Created by WANGChengXin on 2019/5/23. + */ + +public class DestroyActivityUtil { + private static Map destoryMap = new HashMap<>(); + + //将Activity添加到队列中 + public static void addDestoryActivityToMap(Activity activity, String activityName) { + destoryMap.put(activityName, activity); + } + + //根据名字销毁制定Activity + public static void destoryActivity(String activityName) { + Set keySet = destoryMap.keySet(); + if (keySet.size() > 0) { + for (String key : keySet) { + if (activityName.equals(key)) { + destoryMap.get(key).finish(); + } + } + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DialogUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DialogUtil.java new file mode 100644 index 0000000..8b3244f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DialogUtil.java @@ -0,0 +1,151 @@ +package cn.shangyu.gdxzExpert.utils; + + + + +import android.app.Dialog; +import android.content.Context; +import android.view.View; +import android.view.View.OnClickListener; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.widget.CustomerDialog; +import cn.shangyu.gdxzExpert.widget.MyAlertDialog; + +/** + * 对话框创建工具类 + * + */ +public class DialogUtil { + + + private static CustomerDialog customerDialog; + private static MyAlertDialog alertDialog; + + /** + * 创建进度对话框 + * @param context + * @param content + * @return + */ + public static Dialog createProgressDialog(Context context,String content){ + return new CustomProgressDialog(context, content); + } + /** + * 创建进度对话框 + * @param context + * @param content + * @return + */ + public static Dialog createProgressDialog(Context context,String content,int theme){ + return new CustomProgressDialog(context, content,theme); + } + + /** + * + * getCusDialog + * 创建对话框,自定义的对话框与getMyAlertDialog方法差不多,但可以自定义标题 + * @param context 上下文 + * @param title 对话框标题 + * @param content 对话框内容 + * @param okListener 确定按钮监听 + * @param cancelListener 取消按钮监听 + * @return + * CustomerDialog + */ + public static CustomerDialog getCusDialog(Context context, CharSequence title, + CharSequence content, OnClickListener okListener, + OnClickListener cancelListener) { + customerDialog = new CustomerDialog(context); + customerDialog.setCancelable(false); + customerDialog.setTitle(title); + customerDialog.setContent(content); + customerDialog.setOkBtnOnclickListener(okListener); + customerDialog.setCancelBtnOnclickListener(cancelListener); + return customerDialog; + } + + // 显示弹窗 + public static void showCusDialog() { + if (customerDialog != null) { + customerDialog.show(); + } + } + + // 关闭弹窗 + public static void dismissCusDialog() { + if (customerDialog != null) { + customerDialog.dismiss(); + } + } + + /** + * + * getMyProDialog + * 自定义的带有进度条的对话框,如果需要显示的进度的对话框,比如下载对话框等等,此对话框只有取消一个按钮 + * @param context 上下文 + * @param buttontitle 取消的按钮名字 + * @param content 内容 + * @param cancelListener 取消监听 + * @return + * MyAlertDialog + */ + public static MyAlertDialog getMyProDialog(Context context, String buttontitle, + String content,OnClickListener cancelListener){ + alertDialog = new MyAlertDialog(context); + alertDialog.setCancelable(false); + alertDialog.setProgressBarVisibility(View.VISIBLE); + alertDialog.setMessage(content); + alertDialog.setSingleButton(View.VISIBLE); + alertDialog.setSingleButton(buttontitle,cancelListener); + alertDialog.show(); + return alertDialog; + } + + /** + * + * getMyAlertDialog + * 自定义的对话框与getCusDialog方法差不多,是有确定与取消的,自由选择使用 + * @param context 上下文 + * @param content 内容 + * @param okListener 确定监听 + * @param cancelListener 取消监听 + * @return + * MyAlertDialog + */ + public static MyAlertDialog getMyAlertDialog(Context context, String content, + OnClickListener okListener,OnClickListener cancelListener){ + alertDialog = new MyAlertDialog(context); + alertDialog.setSingleButton(View.GONE); + alertDialog.setMessage(content); + alertDialog.setPositiveButton("确定",okListener); + alertDialog.setNegativeButton("取消",cancelListener); + return alertDialog; + + } + + // 显示弹窗 + public static void showMyAlertDialog() { + if (alertDialog != null) { + alertDialog.show(); + } + } + + // 关闭弹窗 + public static void dismissMyAlertDialog() { + if (alertDialog != null) { + alertDialog.dismiss(); + } + } + + public static void setMessage(String mes) { + if (alertDialog != null) { + alertDialog.setMessage(mes); + } + } + public static void setProgress(int p) { + if (alertDialog != null) { + alertDialog.setProgress(p); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/DownLoadUrlImage.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DownLoadUrlImage.java new file mode 100644 index 0000000..57cdbe8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/DownLoadUrlImage.java @@ -0,0 +1,172 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.ContentResolver; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Handler; +import android.os.Message; +import android.provider.MediaStore; + +import androidx.annotation.RequiresApi; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.file.Files; + +public class DownLoadUrlImage { + Context context; + Bitmap bitmap; + + public DownLoadUrlImage(String imgurl, Context context) { + this.context = context; + new Task().execute(imgurl); + } + + public Bitmap GetImageInputStream(String imageurl) { + URL url; + HttpURLConnection connection = null; + Bitmap bitmap = null; + try { + url = new URL(imageurl); + connection = (HttpURLConnection) url.openConnection(); + connection.setConnectTimeout(6000); // 超时设置 + connection.setDoInput(true); + connection.setUseCaches(false); // 设置不使用缓存 + InputStream inputStream = connection.getInputStream(); + bitmap = BitmapFactory.decodeStream(inputStream); + inputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return bitmap; + } + + /** + * 异步线程下载图片 + * + */ + + class Task extends AsyncTask { + + protected Void doInBackground(String... params) { + bitmap = GetImageInputStream((String) params[0]); + return null; + } + + protected void onPostExecute(Void result) { + super.onPostExecute(result); + Message message = new Message(); + message.what = 0x123; + handler.sendMessage(message); + } + } + + Handler handler = new Handler() { + public void handleMessage(Message msg) { + if (msg.what == 0x123) { +// SavaImage(bitmap, Environment.getExternalStorageDirectory() +// .getPath() + "/gdxzExpert/picture"); + SavaImage(bitmap, UIUtils.getContext().getExternalFilesDir("").getAbsolutePath() + "/gdxzExpert/picture"); + } + }; + }; + + /** + * 保存位图到本地 + * + * @param bitmap + * @param path + * 本地路径 + * @return void + */ + @RequiresApi(api = Build.VERSION_CODES.P) + public void SavaImage(Bitmap bitmap, String path) { + File file = new File(path); + FileOutputStream fileOutputStream = null; + // 文件夹不存在,则创建它 + if (!file.exists()) { + file.mkdirs(); + } + String fileName = System.currentTimeMillis() + ".jpg"; + File file2 = new File(file, fileName); + try { + + fileOutputStream = new FileOutputStream(file2); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream); + fileOutputStream.flush(); + fileOutputStream.close(); + } catch (Exception e) { + e.printStackTrace(); + } + // 其次把文件插入到系统图库 + try { +// MediaStore.Images.Media.insertImage(context.getContentResolver(), +// file.getAbsolutePath(), fileName, null); + ContentResolver localContentResolver = context.getContentResolver(); + ContentValues localContentValues = getImageContentValues(file2, System.currentTimeMillis()); + Uri uri = localContentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, localContentValues); + copyFileAfterQ(context, localContentResolver, file2, uri); + // 最后通知图库更新 + context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); + } catch (Exception e) + { + e.printStackTrace(); + } +// // 其次把文件插入到系统图库 +// try { +// MediaStore.Images.Media.insertImage(context.getContentResolver(), +// file.getAbsolutePath(), fileName, null); +// } catch (FileNotFoundException e) { +// e.printStackTrace(); +// } +// catch (Exception e) +// { +// e.printStackTrace(); +// } +// // 最后通知图库更新 +// context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, +// Uri.parse("file://" + file2.getAbsolutePath()))); + } + /** + * 获取图片的ContentValue + */ + public static ContentValues getImageContentValues(File paramFile, long timestamp) { + ContentValues localContentValues = new ContentValues(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + localContentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/Camera"); + } + localContentValues.put(MediaStore.Images.Media.TITLE, paramFile.getName()); + localContentValues.put(MediaStore.Images.Media.DISPLAY_NAME, paramFile.getName()); + localContentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); + localContentValues.put(MediaStore.Images.Media.DATE_TAKEN, timestamp); + localContentValues.put(MediaStore.Images.Media.DATE_MODIFIED, timestamp); + localContentValues.put(MediaStore.Images.Media.DATE_ADDED, timestamp); + localContentValues.put(MediaStore.Images.Media.ORIENTATION, 0); + localContentValues.put(MediaStore.Images.Media.DATA, paramFile.getAbsolutePath()); + localContentValues.put(MediaStore.Images.Media.SIZE, paramFile.length()); + return localContentValues; + } + + public static void copyFileAfterQ(Context context, ContentResolver localContentResolver, File tempFile, Uri localUri) throws IOException { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && + context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.R) { + //拷贝文件到相册的uri,android11及以上得这么干,否则不会显示。可以参考ScreenMediaRecorder的save方法 + OutputStream os = localContentResolver.openOutputStream(localUri, "w"); + Files.copy(tempFile.toPath(), os); + os.close(); + tempFile.deleteOnExit(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/EncryptionKit.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/EncryptionKit.java new file mode 100644 index 0000000..aa964eb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/EncryptionKit.java @@ -0,0 +1,61 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.security.MessageDigest; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +public class EncryptionKit { + + public static String md5Encrypt(String srcStr) { + return encrypt("MD5", srcStr); + } + + public static String sha1Encrypt(String srcStr) { + return encrypt("SHA-1", srcStr); + } + + public static String sha256Encrypt(String srcStr) { + return encrypt("SHA-256", srcStr); + } + + public static String sha384Encrypt(String srcStr) { + return encrypt("SHA-384", srcStr); + } + + public static String sha512Encrypt(String srcStr) { + return encrypt("SHA-512", srcStr); + } + + public static String encrypt(String algorithm, String srcStr) { + try { + StringBuilder result = new StringBuilder(); + MessageDigest md = MessageDigest.getInstance(algorithm); + byte[] bytes = md.digest(srcStr.getBytes("utf-8")); + for (byte b : bytes) { + String hex = Integer.toHexString(b & 0xFF); + if (hex.length() == 1) + result.append("0"); + result.append(hex); + } + return result.toString(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public static String HMACSHA256(String data, String key) { + try { + Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); + SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256"); + sha256_HMAC.init(secret_key); + byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8")); + StringBuilder sb = new StringBuilder(); + for (byte item : array) { + sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); + } + return sb.toString().toLowerCase(); + } catch (Exception e) { + return ""; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ExitReceiver.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ExitReceiver.java new file mode 100644 index 0000000..a6ce194 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ExitReceiver.java @@ -0,0 +1,55 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +import cn.shangyu.gdxzExpert.activity.ExitDialog; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + + +/** + * Created by WANGChengXin on 2019/12/17. + */ + +public class ExitReceiver extends BroadcastReceiver { + private ECAlertDialog dilaog2 = null; + + @Override + public void onReceive(Context context, Intent intent) { + LogUtil.i("接受到强制退出广播"); + + + Intent it = new Intent(); + it.setClass(context, ExitDialog.class); + it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(it); + +// if(dilaog2==null){ +// dilaog2 = ECAlertDialog.buildAlert(CCPAppManager.getContext(), +// "您的账号出现异常,已经被系统删除,如有疑问请联系肝胆相照工作人员~", "点击退出账号", new DialogInterface.OnClickListener() {// 确定 +// @Override +// public void onClick(DialogInterface dialog, int which) { +// // TODO Auto-generated method stub +// SharePrefUtil.clear(CCPAppManager.getContext(), "isLogin"); +// dilaog2.dismiss(); +// Constant.islogout =1; +// Intent intent = new Intent(CCPAppManager.getContext(), LoginActivity.class); +// intent.putExtra("flag", true); +// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); +// intent.putExtra("phone", SharePrefUtil.getString(CCPAppManager.getContext(), Constant.mobile, "")); +// CCPAppManager.getContext().startActivity(intent); +// +// // 1登入系统 2退出系统 3患者客户端在手机前台运行 4.客户端在手机后台运行 +// +//// System.exit(0); +// } +// }); +// dilaog2.setTitle("温馨提示"); +// dilaog2.setCanceledOnTouchOutside(false); +// dilaog2.setCancelable(false); +// dilaog2.getWindow(); +// dilaog2.show(); +// } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/FileUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/FileUtils.java new file mode 100644 index 0000000..2c4772e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/FileUtils.java @@ -0,0 +1,265 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.util.Log; + +/** + * 文件处理工具类 + * + * @author naibo-liao + * @时间: 2013-1-4下午03:13:08 + */ +public class FileUtils { + + public static final long B = 1; + public static final long KB = B * 1024; + public static final long MB = KB * 1024; + public static final long GB = MB * 1024; + private static final int BUFFER = 8192; + /** + * 格式化文件大小 带有单位 + * + * @param size + * @return + */ + public static String formatFileSize(long size) { + StringBuilder sb = new StringBuilder(); + String u = null; + double tmpSize = 0; + if (size < KB) { + sb.append(size).append("B"); + return sb.toString(); + } else if (size < MB) { + tmpSize = getSize(size, KB); + u = "KB"; + } else if (size < GB) { + tmpSize = getSize(size, MB); + u = "M"; + } else { + tmpSize = getSize(size, GB); + u = "G"; + } + return sb.append(twodot(tmpSize)).append(u).toString(); + } + + /** + * 保留两位小数 + * + * @param d + * @return + */ + public static String twodot(double d) { + return String.format("%.2f", d); + } + + public static double getSize(long size, long u) { + return (double) size / (double) u; + } + + /** + * sd卡挂载且可用 + * + * @return + */ + public static boolean isSdCardMounted() { + return android.os.Environment.getExternalStorageState().equals( + android.os.Environment.MEDIA_MOUNTED); + } + + /** + * 递归创建文件目录 + * + * @param path + * */ + public static void CreateDir(String path) { + if (!isSdCardMounted()) + return; + File file = new File(path); + if (!file.exists()) { + try { + file.mkdirs(); + } catch (Exception e) { + Log.e("hulutan", "error on creat dirs:" + e.getStackTrace()); + } + } + } + + /** + * 读取文件 + * + * @param file + * @return + * @throws IOException + */ + public static String readTextFile(File file) throws IOException { + String text = null; + InputStream is = null; + try { + is = new FileInputStream(file); //将一个文件转换为文件流 + text = readTextInputStream(is);; + } finally { + if (is != null) { + is.close(); + } + } + return text; + } + + /** + * 从流中读取文件 + * + * @param is + * @return + * @throws IOException + */ + public static String readTextInputStream(InputStream is) throws IOException { + StringBuffer strbuffer = new StringBuffer(); + String line; + BufferedReader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(is)); + while ((line = reader.readLine()) != null) { + strbuffer.append(line).append("\r\n"); + } + } finally { + if (reader != null) { + reader.close(); + } + } + return strbuffer.toString(); + } + + /** + * 将文本内容写入文件 + * + * @param file + * @param str + * @throws IOException + */ + public static void writeTextFile(File file, String str) throws IOException { + DataOutputStream out = null; + try { + out = new DataOutputStream(new FileOutputStream(file)); + out.write(str.getBytes()); + } finally { + if (out != null) { + out.close(); + } + } + } + + /** + * 将Bitmap保存本地JPG图片 + * @param url + * @return + * @throws IOException + */ + /*public static String saveBitmap2File(String url) throws IOException { + + BufferedInputStream inBuff = null; + BufferedOutputStream outBuff = null; + + SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); + String timeStamp = sf.format(new Date()); + File targetFile = new File(Constants.ENVIROMENT_DIR_SAVE, timeStamp + + ".jpg"); + File oldfile = ImageLoader.getInstance().getDiscCache().get(url); + try { + + inBuff = new BufferedInputStream(new FileInputStream(oldfile)); + outBuff = new BufferedOutputStream(new FileOutputStream(targetFile)); + byte[] buffer = new byte[BUFFER]; + int length; + while ((length = inBuff.read(buffer)) != -1) { + outBuff.write(buffer, 0, length); + } + outBuff.flush(); + return targetFile.getPath(); + } catch (Exception e) { + + } finally { + if (inBuff != null) { + inBuff.close(); + } + if (outBuff != null) { + outBuff.close(); + } + } + return targetFile.getPath(); + } */ + + /** + * 读取表情配置文件 + * + * @param context + * @return + */ + public static List getEmojiFile(Context context) { + try { + List list = new ArrayList(); + InputStream in = context.getResources().getAssets().open("emoji");// 文件名字为rose.txt + BufferedReader br = new BufferedReader(new InputStreamReader(in, + "UTF-8")); + String str = null; + while ((str = br.readLine()) != null) { + list.add(str); + } + + return list; + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 获取一个文件夹大小 + * + * @param f + * @return + * @throws Exception + */ + public static long getFileSize(File f) { + long size = 0; + File flist[] = f.listFiles(); + for (int i = 0; i < flist.length; i++) { + if (flist[i].isDirectory()) { + size = size + getFileSize(flist[i]); + } else { + size = size + flist[i].length(); + } + } + return size; + } + + /** + * 删除文件 + * + * @param file + */ + public static void deleteFile(File file) { + + if (file.exists()) { // 判断文件是否存在 + if (file.isFile()) { // 判断是否是文件 + file.delete(); // delete()方法 你应该知道 是删除的意思; + } else if (file.isDirectory()) { // 否则如果它是一个目录 + File files[] = file.listFiles(); // 声明目录下所有的文件 files[]; + for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件 + deleteFile(files[i]); // 把每个文件 用这个方法进行迭代 + } + } + file.delete(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/GrayManager.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/GrayManager.java new file mode 100644 index 0000000..4a2ddd0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/GrayManager.java @@ -0,0 +1,41 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; +import android.graphics.Paint; +import android.view.View; + +public class GrayManager { + private static GrayManager mInstance; + private Paint mGrayPaint; + private ColorMatrix mGrayMatrix; + public static GrayManager getInstance() { + if (mInstance == null) { + synchronized (GrayManager.class) { + if (mInstance == null) { + mInstance = new GrayManager(); + } + } + } + return mInstance; + } + //初始化 + public void init() { + mGrayMatrix = new ColorMatrix(); + mGrayPaint = new Paint(); + mGrayMatrix.setSaturation(0); + mGrayPaint.setColorFilter(new ColorMatrixColorFilter(mGrayMatrix)); + } + //硬件加速置灰方法 + public void setLayerGrayType(View view) { + if(!CommonUtil.NeedBlack()) + { + return; + } + if (mGrayMatrix == null || mGrayPaint == null) { + init(); + } + + view.setLayerType(View.LAYER_TYPE_HARDWARE, mGrayPaint); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/GsonTools.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/GsonTools.java new file mode 100644 index 0000000..5ad47c3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/GsonTools.java @@ -0,0 +1,78 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; + +/** + * json的生成与解析工具 + * 类名称:GsonTools + * 类描述:TODO + * 创建人:苏三元 + * 时间:2015-7-1 下午4:52:32 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class GsonTools { + + public GsonTools() { + // TODO Auto-generated constructor stub + } + + public static String createGsonString(Object object) { + Gson gson = new Gson(); + + String gsonString = gson.toJson(object); + return gsonString; + } + + public static T fromGsonToBean(String gsonString, Class cls) { + Gson gson = new Gson(); + T t = gson.fromJson(gsonString, cls); + return t; + } + /** + * + * @param json + * @param cls + * @return牛鼻的解析 + */ + public static ArrayList fromGsonToList(String json, Class cls) { + Gson gson = new Gson(); + ArrayList mList = new ArrayList(); + JsonArray array = new JsonParser().parse(json).getAsJsonArray(); + for (final JsonElement elem : array) { + mList.add(gson.fromJson(elem, cls)); + } + return mList; + } +// public static List fromGsonToList(String gsonString, Class cls) { +// Gson gson = new Gson(); +// List list = gson.fromJson(gsonString, new TypeToken>() {}.getType()); +// return list; +// } + + public static List> fromGsonToListMaps( + String gsonString) { + List> list = null; + Gson gson = new Gson(); + list = gson.fromJson(gsonString, new TypeToken>>() { + }.getType()); + return list; + } + + public static Map fromGsonToMaps(String gsonString) { + Map map = null; + Gson gson = new Gson(); + map = gson.fromJson(gsonString, new TypeToken>() { + }.getType()); + return map; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/HashTools.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HashTools.java new file mode 100644 index 0000000..a324377 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HashTools.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.security.DigestException; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Formatter; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; + +//Hash算法(消息摘要算法)工具类 +public class HashTools { + private static MessageDigest digest; //消息摘要对象 + //私有化的构造方法 + private HashTools() { + } + //按照MD5进行消息摘要计算(哈希计算) + public static String digestByMD5(String source) throws NoSuchAlgorithmException { + digest=MessageDigest.getInstance("MD5"); + return handler(source); + } + //按照SHA-1进行消息摘要计算(哈希计算) + public static String digestBySHA1(String source) throws NoSuchAlgorithmException { + digest=MessageDigest.getInstance("SHA-1"); + return handler(source); + } + //按照SHA-256进行消息摘要计算(哈希计算) + public static String digestBySHA256(String source) throws NoSuchAlgorithmException { + digest=MessageDigest.getInstance("SHA-256"); + return handler(source); + } + //按照SHA-512进行消息摘要计算(哈希计算) + public static String digestBySHA512(String source) throws NoSuchAlgorithmException { + digest=MessageDigest.getInstance("SHA-512"); + return handler(source); + } + //通过消息再要对象,处理加密内容 + public static String handler(String souce) { + digest.update(souce.getBytes()); //调用update()输入数据 + byte[] bytes=digest.digest(); + String ret=bytesToHex(bytes); + return ret; + } + //将字节数组转换为十六进制字符串 + public static String bytesToHex(byte[] bytes) { + StringBuilder sb=new StringBuilder(); + for(byte b:bytes) { + sb.append(String.format("%02x", b)); //将字节值转换为2为十六进制字符串 + } + return sb.toString(); + } + private static final String HMAC_SHA1 = "HmacSHA1"; + + /** + * + * @param data 数据 + * @param key 秘钥 + * @return 密文 + * @throws NoSuchAlgorithmException + * @throws InvalidKeyException + */ + private static String encrypt(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException { + SecretKeySpec secret = new SecretKeySpec(key.getBytes(), HMAC_SHA1); + Mac mac = Mac.getInstance(HMAC_SHA1); + mac.init(secret); + return toHexString(mac.doFinal(data.getBytes())); + } + + private static String toHexString(byte[] bytes) { + Formatter formatter = new Formatter(); + for (byte b : bytes) { + formatter.format("%02x", b); + } + return formatter.toString(); + } + // 计算 HMAC-SHA1 签名并返回十六进制字符串 + public static String calculateHmacSha1(String data) throws NoSuchAlgorithmException, InvalidKeyException, DigestException { + // 创建 HMAC-SHA1 摘要算法实例 + Mac hmacSha1 = Mac.getInstance("HmacSHA1"); + String key = Url.appkey; // 您的密钥 + // 使用提供的密钥初始化 HMAC + SecretKeySpec secretKey = new SecretKeySpec(key.getBytes(), "HmacSHA1"); + hmacSha1.init(secretKey); + + // 计算 HMAC-SHA1 + byte[] signatureBytes = hmacSha1.doFinal(data.getBytes()); + + // 转换为十六进制字符串 + StringBuilder hexSignature = new StringBuilder(); + for (byte b : signatureBytes) { + String hex = Integer.toHexString(0xFF & b); + if (hex.length() == 1) { + hexSignature.append('0'); + } + hexSignature.append(hex); + } + + return hexSignature.toString(); + } + +// public static void main(String []args) { +// try { +// String concatenatedParamsStr = "mobile=13051427845&user_name=%E5%90%B4%E4%BB%8E%E5%85%B4"; // 这里是您的输入数据 +// String key = "26e8675f44565b1ed4eaaa0fcf3531d7"; // 您的密钥 +// +// String signature = calculateHmacSha1(concatenatedParamsStr, key); +// System.out.println("HMAC-SHA1 Signature: " + signature); +// } catch (NoSuchAlgorithmException | InvalidKeyException | DigestException e) { +// e.printStackTrace(); +// } +// } + +// public static void main(String[] args) throws Exception { +// String hmac = encrypt("This is plaintext", "123"); +// System.out.println(hmac); +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/HmacSha256ApiVerify.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HmacSha256ApiVerify.java new file mode 100644 index 0000000..673090a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HmacSha256ApiVerify.java @@ -0,0 +1,144 @@ +package cn.shangyu.gdxzExpert.utils; + +import static cn.shangyu.gdxzExpert.utils.HashTools.calculateHmacSha1; + +import android.util.Log; + +import java.net.URLEncoder; +import java.security.DigestException; +import java.security.InvalidKeyException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +/** + * + * Hmacsha256验证模式 + * @author haomingming + * + */ +public class HmacSha256ApiVerify{ + + +// private static String appkey = "26e8675f44565b1ed4eaaa0fcf3531d7"; + + + /** + * 转化 + * @param parameterMap + * @return + */ + public Map transform(Map parameterMap){ + Map data = new HashMap(); + Set> entrySet = parameterMap.entrySet(); + Iterator> iterator = entrySet.iterator(); + while(iterator.hasNext()){ + Entry next = iterator.next(); + String key = next.getKey(); + String[] value = next.getValue(); + if(value != null && value.length > 0){ + data.put(key, value[0]); + } + } + return data; + } + + public static String[] getSign(Map params) { + String[] str = new String[2]; + List keys = new ArrayList<>(params.keySet()); + List tmp = new ArrayList<>(); + Collections.sort(keys); + for (String key : keys) { + if (null != params.get(key) && params.get(key).length() > 0) { + tmp.add(key + "=" + params.get(key)); + } + } + String join = String.join("&", tmp); +// System.out.println("加密器中的join:"+ join); + str[0] = join; + + str[1] = EncryptionKit.HMACSHA256(join, Url.appkey); +// System.out.println("加密后的值:"+ str[1]); + return str; + } + public static String getSignStr(Map params) { + String[] str = new String[2]; + List keys = new ArrayList<>(params.keySet()); + List tmp = new ArrayList<>(); + Collections.sort(keys); + for (String key : keys) { + if (null != params.get(key) && params.get(key).length() > 0) { + tmp.add(key + "=" + URLEncoder.encode(params.get(key))); + } + } + String join = String.join("&", tmp); + Log.d("okhttp","join "+join); +// System.out.println("加密器中的join:"+ join); +// str[0] = join; +// try { +//// str[0]=URLEncoder.encode("吴从兴","utf-8"); +// +// } catch (UnsupportedEncodingException e) { +// e.printStackTrace(); +// } + + + + try { + str[1] =calculateHmacSha1(join); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (DigestException e) { + e.printStackTrace(); + } +// str[1] = EncryptionKit.HMACSHA256(join, appkey); +// System.out.println("加密后的值:"+ str[1]); + return str[1]; + } +// public static void main(String[] args) { +// Map data = new HashMap(); +// //解答完成 +// data.put("a", "1"); +// data.put("b", "2"); +// data.put("c", "3"); +// String[] sign = getSign(data); +// System.out.println("sign = " + sign); +// } +public static String getSha1(String str) { + + char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + 'a', 'b', 'c', 'd', 'e', 'f' }; + try { + MessageDigest mdTemp = MessageDigest.getInstance("SHA1"); + mdTemp.update(str.getBytes("UTF-8")); + byte[] md = mdTemp.digest(); + int j = md.length; + char buf[] = new char[j * 2]; + int k = 0; + for (int i = 0; i < j; i++) { + byte byte0 = md[i]; + buf[k++] = hexDigits[byte0 >>> 4 & 0xf]; + buf[k++] = hexDigits[byte0 & 0xf]; + } + return new String(buf); + } catch (Exception e) { + return null; + } +} +} + + + + + + + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java new file mode 100644 index 0000000..b2a716a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpMD5SendInfoUtil.java @@ -0,0 +1,363 @@ +package cn.shangyu.gdxzExpert.utils; + +import static cn.shangyu.gdxzExpert.utils.UIUtils.getContext; + +import android.app.Activity; +import android.content.Context; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.TextView; + +import com.google.gson.Gson; +import com.hjq.window.EasyWindow; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.TimestampBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; +import cn.shangyu.gdxzExpert.netease.config.LogoutHelper; + +/** + * @author 作者 wcx + * @version 创建时间:2018-7-11 上午11:22:00 + * 类说明 + */ +public class HttpMD5SendInfoUtil { + /** + * 签到 + * */ + + public static void sendJsonPostParamtoNetSignMD5(final String postUrl,final Map param,Context mContext) { + HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(mActivity, + // Url.getExpertroll, + // info.result); + String uuid = SharePrefUtil.getString(getContext(), Constant.uuid, ""); + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (conn.getResponseCode() == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)) { + Constant.isRefreshpoint = true;//个人中心界面刷新 + ToastUtil.showMessage(message); + } + } + } catch (Exception e) { + + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + // closeProgressDialog(); + } finally { +// if (!top_right_text.isClickable()) { +// top_right_text.setClickable(true); +// } + + } + } + }.start(); + + + +// Log.i("TAG", "result = "+info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + + } + /** + * + * 无需结果请求,1.指南下载数量 2.增加视频阅读数量 + * */ + public static void sendJsonPostParamNoResultMD5(final String postUrl,final Map param) { + + HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + // SharePrefUtil.saveString(mActivity, + // Url.getExpertroll, + // info.result); + String uuid = SharePrefUtil.getString(getContext(), Constant.uuid, ""); + if(StringUtil.isEmpty(uuid)) + { + uuid= LogoutHelper.addUMTokenuuid; + } + if(CommonUtil.BigModule()) + { + param.put("app_type", "1"); + } + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(postUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); + if ("200".equals(optString)) { + LogUtil.e("请求成功"); + } + }else { + LogUtil.e("Code = "+ssss); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); +// ToastUtil.showMessage("提交失败,请重试"); + // TODO Auto-generated catch block + e.printStackTrace(); + // mShowDialog.dismiss(); + // closeProgressDialog(); + } finally { +// if (!top_right_text.isClickable()) { +// top_right_text.setClickable(true); +// } + + } + } + }.start(); + + + +// Log.i("TAG", "result = "+info.result); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + + } + + /** + * 获取token + */ + public static void sendJsonPostParamTokenMD5s(final OnCallBackFromNet callBack) { + + HttpHelper.loadData(HttpMethod.GET, Url.getTimestamp,null, new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo info) { + Map param=new HashMap<>(); + String uuid = SharePrefUtil.getString(getContext(), Constant.uuid, ""); + if(StringUtil.isEmpty(uuid)) + { + uuid= LogoutHelper.addUMTokenuuid; + } + if(CommonUtil.BigModule()) + { + param.put("app_type", "1"); + } + param.put("user_uuid", uuid); + TimestampBean bean = GsonTools.fromGsonToBean(info.result, TimestampBean.class); + param.put("timestamp", bean.getTimestamp()); + param.put("client_type", "A"); + param.put("version", UpdateVersionUtils.getVersionName()); + new Thread() { + public void run() { + String encoding = "UTF-8"; + Gson gson = new Gson(); + String params = gson.toJson(param); + byte[] data; + try { + String sign = SignUtil.getSign(param); + LogUtil.i("params = "+params.toString()); + data = params.getBytes(encoding); + URL url = new URL(Url.getRealyWorldToken); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("POST"); + conn.setDoOutput(true); + conn.setRequestProperty("Content-Type","application/json"); + conn.setRequestProperty("sign",sign); + conn.setRequestProperty("Content-Length",String.valueOf(data.length)); + conn.setConnectTimeout(5 * 1000); + OutputStream outStream = conn.getOutputStream(); + outStream.write(data); + outStream.flush(); + outStream.close(); + int ssss=conn.getResponseCode() ; + if (ssss == 200) { + InputStream inStream = conn.getInputStream(); + String result = new String(StreamTool.readInputStream(inStream), "UTF-8"); + String string = new String(result); + LogUtil.i("result = "+result); + JSONObject jsonObject = new JSONObject(string); + String optString = jsonObject.optString("code"); + String message = jsonObject.optString("message"); +// Log.d("okhttp","result = "+result); + Log.d("okhttp","getRealyWorldToken "+result); + if ("200".equals(optString)) { + LogUtil.e("请求成功"); + callBack.onCallbackFromThread(string); + } + else + { + callBack.onCallbackFromThread(string); + } + }else { + LogUtil.e("Code = "+ssss); + } + } catch (Exception e) { + LogUtil.e("提交失败,请重试 = "+e.getMessage()); + + // TODO Auto-generated catch block + e.printStackTrace(); + + } + } + }.start(); + + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // ToastUtil.showToast("请求失败,请重试"); + } + }); + + } + + + public static void sendJsonPostParamTokenMD5(Context context,final OnCallBackFromNet callBack){ + + EasyWindow.with((Activity) context).setGravity(Gravity.CENTER) + + .setContentView(R.layout.float_cent_dialogqs).setBackgroundDimAmount(0.5f) + .setText(R.id.tv_infotitle, "温馨提示") + .setText(R.id.tv_tishi, "查询失败,请点击重试再次查询") + .setVisibility(R.id.r_b, View.VISIBLE) + .setText(android.R.id.message, "确定") + .setOutsideTouchable(false) + .setOnClickListener(android.R.id.message, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + sendJsonPostParamTokenMD5s(callBack); + + } + }) + .setOnClickListener(R.id.btn_cancel, new EasyWindow.OnClickListener() { + + @Override + public void onClick(EasyWindow window, TextView view) { + window.cancel(); + + } + }).show(); + + } + public static int hasrealtoken(String s) + { + try { + JSONObject jsonObject=new JSONObject(s); + if("200".equals(jsonObject.optString("code"))) + { + + return 1; + } + else if( + "30007".equals(jsonObject.optString("code"))||"30012".equals(jsonObject.optString("code"))) + { + SharePrefUtil.saveString(getContext(),"x_access_token",""); + return 0; + } + else if( + "30014".equals(jsonObject.optString("code"))||"30020".equals(jsonObject.optString("code"))) + { + SharePrefUtil.saveString(getContext(),"x_access_token",""); + return -1; + } + else + { + return -2; + } + } catch (JSONException e) { + e.printStackTrace(); + } + return 1; + } + +} + \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpUtils.java new file mode 100644 index 0000000..bee17bc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/HttpUtils.java @@ -0,0 +1,57 @@ +package cn.shangyu.gdxzExpert.utils; + + + +import android.util.Log; + +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.HttpClient; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.message.BasicNameValuePair; +import org.apache.http.params.CoreConnectionPNames; +import org.apache.http.util.EntityUtils; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +public class HttpUtils { + public static String getData(String url, HashMap params) { + HttpPost post = new HttpPost(url); + HttpClient httpclient = new DefaultHttpClient(); + httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 30000); + httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 30000); + + ArrayList paramPairs = new ArrayList<>(); + if (params != null && !params.isEmpty()) { + for (Map.Entry entry : params.entrySet()) { + paramPairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); + } + } + try { + post.setEntity(new UrlEncodedFormEntity(paramPairs, "UTF-8")); + Log.d("gdxzHttpUtils",paramPairs.toString()); + } catch (UnsupportedEncodingException e) { + return ""; + } + try { + HttpResponse response; + response = httpclient.execute(post); + String inf; + if (response.getStatusLine().getStatusCode() == 200) {// 判断响应状态码 + inf = EntityUtils.toString(response.getEntity()); + return inf; + } + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ImageOptions.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ImageOptions.java new file mode 100644 index 0000000..3753b37 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ImageOptions.java @@ -0,0 +1,52 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.graphics.Bitmap; + +import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.assist.ImageScaleType; + + +/** + * + * ImageOptions.java + * @author ssy + * @date 2015-9-6 下午7:34:10 + * Copyright (C) 2015 河南商宇科技有限公司 + * 4.如果经常出现OOM(别人那边看到的,觉得很有提的必要) + ①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5; + ②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888; + ③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY); + ④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象; + ⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory(); + * + * 功能说明:使用ImageLoader时加载图片的设置 + */ +public class ImageOptions { + public static DisplayImageOptions getImageOptions(int imageRes){ + // 设置图片在下载期间显示的图片 + DisplayImageOptions options = new DisplayImageOptions.Builder() +// .showImageOnLoading(imageRes) //正在加载时的图片 + .showImageOnFail(imageRes)//加载失败的图片 + .showImageForEmptyUri(imageRes) //加载失败的图片 + .cacheInMemory(true) //保存至内存 + .cacheOnDisk(true) //保存至SD + .imageScaleType(ImageScaleType.EXACTLY)//设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY) + .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// .displayer(new FadeInBitmapDisplayer(100))// 淡入 +// .resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位 +// .displayer(new RoundedBitmapDisplayer(20))//是否设置为圆角,弧度为多少 +// .displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间 + .build(); + return options; + } + + public static DisplayImageOptions getImageOptions(){ + // 设置图片在下载期间显示的图片 + DisplayImageOptions options = new DisplayImageOptions.Builder() + .cacheInMemory(true) //保存至内存 + .cacheOnDisk(true) //保存至SD + .imageScaleType(ImageScaleType.EXACTLY)//设置图片以如何的编码方式显示在DisplayImageOptions选项中设置.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者imageScaleType(ImageScaleType.EXACTLY) + .bitmapConfig(Bitmap.Config.RGB_565)//设置图片的解码类型// .displayer(new FadeInBitmapDisplayer(100))// 淡入 + .build(); + return options; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/IoUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/IoUtils.java new file mode 100644 index 0000000..0693cd4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/IoUtils.java @@ -0,0 +1,18 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.Closeable; +import java.io.IOException; + +public class IoUtils { + /** 关闭流 */ + public static boolean close(Closeable io) { + if (io != null) { + try { + io.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return true; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ItemDragHelperCallback.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ItemDragHelperCallback.java new file mode 100644 index 0000000..7129834 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ItemDragHelperCallback.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016 咖枯 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +package cn.shangyu.gdxzExpert.utils; + + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; +import androidx.recyclerview.widget.ItemTouchHelper; + +public class ItemDragHelperCallback extends ItemTouchHelper.Callback { + private OnItemMoveListener mOnItemMoveListener; + private boolean mIsLongPressEnabled; + public void setLongPressEnabled(boolean longPressEnabled) { + mIsLongPressEnabled = longPressEnabled; + } + + public interface OnItemMoveListener { + boolean onItemMove(int fromPosition, int toPosition); + } + //相当于 set 设置监听 传入ChannelAdapter中的OnItemMoveListener对象 + public ItemDragHelperCallback(OnItemMoveListener onItemMoveListener) { + mOnItemMoveListener = onItemMoveListener; + } + //返回true 允许拖拽 + @Override + public boolean isLongPressDragEnabled() { + return mIsLongPressEnabled; + } + + @Override + public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + //根据recyclerView的布局,进行设置拖拽的方向 + int dragFlags = setDragFlags(recyclerView); + //不允许进行滑动 + int swipeFlags = 0; + return makeMovementFlags(dragFlags, swipeFlags); + } + + private int setDragFlags(RecyclerView recyclerView) { + int dragFlags; + RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager || layoutManager instanceof StaggeredGridLayoutManager) { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; + } else { + dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; + } + return dragFlags; + } + + @Override + public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { + return mOnItemMoveListener.onItemMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); + + } + + + @Override + public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { + super.clearView(recyclerView, viewHolder); + + } + + @Override + public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/JsonParser.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/JsonParser.java new file mode 100644 index 0000000..eb01559 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/JsonParser.java @@ -0,0 +1,119 @@ +package cn.shangyu.gdxzExpert.utils; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.json.JSONTokener; + +import android.util.Log; + +/** + * Json结果解析类 + */ +public class JsonParser { + + public static String parseIatResult(String json) { + StringBuffer ret = new StringBuffer(); + try { + JSONTokener tokener = new JSONTokener(json); + JSONObject joResult = new JSONObject(tokener); + + JSONArray words = joResult.getJSONArray("ws"); + for (int i = 0; i < words.length(); i++) { + // 转写结果词,默认使用第一个结果 + JSONArray items = words.getJSONObject(i).getJSONArray("cw"); + JSONObject obj = items.getJSONObject(0); + ret.append(obj.getString("w")); +// 如果需要多候选结果,解析数组其他字段 +// for(int j = 0; j < items.length(); j++) +// { +// JSONObject obj = items.getJSONObject(j); +// ret.append(obj.getString("w")); +// } + } + } catch (Exception e) { + e.printStackTrace(); + } + return ret.toString(); + } + + public static String parseGrammarResult(String json) { + StringBuffer ret = new StringBuffer(); + try { + JSONTokener tokener = new JSONTokener(json); + JSONObject joResult = new JSONObject(tokener); + + JSONArray words = joResult.getJSONArray("ws"); + for (int i = 0; i < words.length(); i++) { + JSONArray items = words.getJSONObject(i).getJSONArray("cw"); + for(int j = 0; j < items.length(); j++) + { + JSONObject obj = items.getJSONObject(j); + if(obj.getString("w").contains("nomatch")) + { + ret.append("没有匹配结果."); + return ret.toString(); + } + ret.append("【结果】" + obj.getString("w")); + ret.append("【置信度】" + obj.getInt("sc")); + ret.append("\n"); + } + } + } catch (Exception e) { + e.printStackTrace(); + ret.append("没有匹配结果."); + } + return ret.toString(); + } + + public static String parseLocalGrammarResult(String json) { + StringBuffer ret = new StringBuffer(); + try { + JSONTokener tokener = new JSONTokener(json); + JSONObject joResult = new JSONObject(tokener); + + JSONArray words = joResult.getJSONArray("ws"); + for (int i = 0; i < words.length(); i++) { + JSONArray items = words.getJSONObject(i).getJSONArray("cw"); + for(int j = 0; j < items.length(); j++) + { + JSONObject obj = items.getJSONObject(j); + if(obj.getString("w").contains("nomatch")) + { + ret.append("没有匹配结果."); + return ret.toString(); + } + ret.append("【结果】" + obj.getString("w")); + ret.append("\n"); + } + } + ret.append("【置信度】" + joResult.optInt("sc")); + + } catch (Exception e) { + e.printStackTrace(); + ret.append("没有匹配结果."); + } + return ret.toString(); + } + + public static String parseTransResult(String json,String key) { + StringBuffer ret = new StringBuffer(); + try { + JSONTokener tokener = new JSONTokener(json); + JSONObject joResult = new JSONObject(tokener); + String errorCode = joResult.optString("ret"); + if(!errorCode.equals("0")) { + return joResult.optString("errmsg"); + } + JSONObject transResult = joResult.optJSONObject("trans_result"); + ret.append(transResult.optString(key)); + /*JSONArray words = joResult.getJSONArray("results"); + for (int i = 0; i < words.length(); i++) { + JSONObject obj = words.getJSONObject(i); + ret.append(obj.getString(key)); + }*/ + } catch (Exception e) { + e.printStackTrace(); + } + return ret.toString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/KeDaXunFeiUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/KeDaXunFeiUtil.java new file mode 100644 index 0000000..19c71a5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/KeDaXunFeiUtil.java @@ -0,0 +1,123 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.HashMap; +import java.util.LinkedHashMap; + +import org.json.JSONException; +import org.json.JSONObject; + +import android.content.Context; +import android.util.Log; +import android.widget.EditText; + +import com.iflytek.cloud.ErrorCode; +import com.iflytek.cloud.InitListener; +import com.iflytek.cloud.RecognizerResult; +import com.iflytek.cloud.SpeechConstant; +import com.iflytek.cloud.SpeechError; +import com.iflytek.cloud.SpeechRecognizer; +import com.iflytek.cloud.ui.RecognizerDialog; +import com.iflytek.cloud.ui.RecognizerDialogListener; + +public class KeDaXunFeiUtil { + + public String lastContent; + public Context ctx; + public EditText et; + RecognizerDialog mDialog; + // 语音听写对象 + private SpeechRecognizer mIat; + + public KeDaXunFeiUtil(Context ctx, EditText et) { + this.ctx = ctx; + this.et = et; + initVoice(); + } + + public void initVoice() { + // TODO Auto-generated method stub + lastContent = et.getText().toString().trim(); + // 使用SpeechRecognizer对象,可根据回调消息自定义界面; + mIat = SpeechRecognizer.createRecognizer(ctx, mInitListener); + // 设置语音后端点:后端点静音检测时间,即用户停止说话多长时间内即认为不再输入, 自动停止录音 + mIat.setParameter(SpeechConstant.VAD_EOS, "3000"); + mDialog = new RecognizerDialog(ctx, mInitListener); + mDialog.setListener(mRecognizerDialogListener); + mDialog.show(); + } + + /** + * 初始化监听器。 + */ + private InitListener mInitListener = new InitListener() { + + @Override + public void onInit(int code) { + Log.d("TAG", "SpeechRecognizer init() code = " + code); + if (code != ErrorCode.SUCCESS) { + // showTip("初始化失败,错误码:" + code); + } + } + }; + /** + * 听写UI监听器 + */ + private RecognizerDialogListener mRecognizerDialogListener = new RecognizerDialogListener() { + public void onResult(RecognizerResult results, boolean isLast) { + printResult(results); + + } + + /** + * 识别回调错误. + */ + public void onError(SpeechError error) { + if (error.getErrorCode() == 14002) { + // showTip(error.getPlainDescription(true) + "\n请确认是否已开通翻译功能"); + } else { + // showTip(error.getPlainDescription(true)); + } + } + + }; + + // 用HashMap存储听写结果 + private HashMap mIatResults = new LinkedHashMap(); + + private void printResult(RecognizerResult results) { + String text = JsonParser.parseIatResult(results.getResultString()); + + String sn = null; + // 读取json结果中的sn字段 + try { + JSONObject resultJson = new JSONObject(results.getResultString()); + sn = resultJson.optString("sn"); + } catch (JSONException e) { + e.printStackTrace(); + } + + mIatResults.put(sn, text); + + StringBuffer resultBuffer = new StringBuffer(); + for (String key : mIatResults.keySet()) { + resultBuffer.append(mIatResults.get(key)); + } + + et.setText(lastContent + resultBuffer.toString()); + et.setSelection(et.length()); + + } + + public void dissDialog() { + if (mDialog.isShowing()) { + mDialog.dismiss(); + } + if( null != mIat ){ + // 退出时释放连接 + mIat.cancel(); + mIat.destroy(); + } + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Keys.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Keys.java new file mode 100644 index 0000000..37a70aa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Keys.java @@ -0,0 +1,36 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.security.Key; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.util.HashMap; +import java.util.Map; + +/** + * Created by wangchengxin on 2019/1/7. + * 添加职业地点RSA + */ + +public class Keys { + + + private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB"; + + + + public static String getPublicKey(Map keyMap) throws Exception { + Key key = (Key) keyMap.get(PUBLIC_KEY); + byte[] publicKey = key.getEncoded(); + return encryptBASE64(publicKey); + + } + + public static String encryptBASE64(byte[] key) throws Exception { + String encode = Base64Utils.encode(key); + return encode; + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ListViewForScrollView.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ListViewForScrollView.java new file mode 100644 index 0000000..bd12d21 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ListViewForScrollView.java @@ -0,0 +1,36 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ListView; + +/** + * Created by Saud on 16/2/15. + */ +public class ListViewForScrollView extends ListView { + public ListViewForScrollView(Context context) { + super(context); + } + + public ListViewForScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ListViewForScrollView(Context context, AttributeSet attrs, + int defStyle) { + super(context, attrs, defStyle); + } + + @Override + /** + * 重写该方法,达到使ListView适应ScrollView的效果 + */ + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, + MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } + + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/LogUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/LogUtil.java new file mode 100644 index 0000000..edfdd3a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/LogUtil.java @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.utils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.util.Log; + +/** + * ECDemo 日志打印工具类 + * Created by Jorstin on 2015/3/17. + */ +public class LogUtil { + + private static boolean isPrint = true; + private static boolean isDebug = false; + + public static final String TAG = "gdxzExpert_Log"; + public static final String MSG = "log msg is null."; + + private static List logList; + + static { +// isPrint = BaseApplication.getInstance().getLoggingSwitch(); + } + + public static void v(String tag, String msg) { + print(Log.VERBOSE, tag, msg); + } + + public static void v(String msg) { + v(TAG, msg); + } + + public static void d(String tag, String msg) { + print(Log.DEBUG, tag, msg); + print(isDebug, msg); + } + + public static void d(String msg) { + d(TAG, msg); + } + + public static void i(String tag, String msg) { + print(Log.INFO, tag, msg); + } + + public static void i(String msg) { + i(TAG, msg); + } + + public static void w(String tag, String msg) { + print(Log.WARN, tag, msg); + } + + public static void w(String msg) { + w(TAG, msg); + } + + public static void e(String tag, String msg) { + print(Log.ERROR, tag, msg); + } + + public static void e(String msg) { + e(TAG, msg); + } + + private static void print(int mode, final String tag, String msg) { + if (!isPrint) { + return; + }else{ + if (msg == null) { + Log.e(tag, MSG); + return; + } + switch (mode) { + case Log.VERBOSE: + Log.v(tag, msg); + break; + case Log.DEBUG: + Log.d(tag, msg); + break; + case Log.INFO: + Log.i(tag, msg); + break; + case Log.WARN: + Log.w(tag, msg); + break; + case Log.ERROR: + Log.e(tag, msg); + break; + default: + Log.d(tag, msg); + break; + } + } + } + + private static void print(boolean flag, String msg) { + if (flag && logList != null) { + logList.add(msg); + } + } + + public static void setState(boolean flag) { + if (flag) { + if (logList == null) { + logList = new ArrayList(); + } else { + logList.clear(); + } + } else { + if (logList != null) { + logList.clear(); + logList = null; + } + } + + isDebug = flag; + } + + + public static void printFile(InputStream is, String path) { + FileOutputStream fos = null; + byte[] temp = null; + try { + if (isPrint) { + File file = new File(path); + if (!file.exists()) { + file.createNewFile(); + } + fos = new FileOutputStream(file); + temp = new byte[1024]; + int i = 0; + while ((i = is.read(temp)) > -1) { + if (i < temp.length) { + byte[] b = new byte[i]; + System.arraycopy(temp, 0, b, 0, b.length); + fos.write(b); + } else { + fos.write(temp); + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + is = null; + } + if (fos != null) { + try { + fos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + fos = null; + } + temp = null; + } + } + + public static void printErrorStackTrace(Exception ex) { + File f = new File("/sdcard/Hisun/error.log"); + try { + if (!f.exists()) { + f.createNewFile(); + } + ex.printStackTrace(new PrintStream(f)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String getLogUtilsTag(Class clazz) { + return LogUtil.TAG + "." + clazz.getSimpleName(); + } + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/MD5Utils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MD5Utils.java new file mode 100644 index 0000000..7abc76b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MD5Utils.java @@ -0,0 +1,44 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import org.apache.commons.codec.digest.DigestUtils; + +public class MD5Utils { + private static String YAN = "sadw44dwddwd4w4ef4r5442366edf"; + public static String md5Encrypt(String str){ + try { + MessageDigest digest = MessageDigest.getInstance("md5"); + byte[] bys = digest.digest((str+YAN).getBytes()); + StringBuilder sb = new StringBuilder(); + for(byte bb : bys){ + int num = bb & 0xff; + String hex = Integer.toHexString(num); + if(hex.length() == 1){ + sb.append("0"); + } + sb.append(hex); + } + return sb.toString(); + } catch (NoSuchAlgorithmException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } + + /** + * + * md5Hex + * 使用Apache digest做md5加密 + * @param str + * @return + * String + */ + public static String md5Hex(String str){ + return DigestUtils.md5Hex(str); + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/MathUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MathUtil.java new file mode 100644 index 0000000..a34d904 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MathUtil.java @@ -0,0 +1,155 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.math.BigDecimal; + +/** + * MathUtil.java + * + * @author liufang + * @date 2015-11-6 下午4:27:34 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:精确计算浮点数 + */ +public class MathUtil { + // 默认除法运算精度 + private static final int DEF_DIV_SCALE = 4; + + // 这个类不能实例化 + private MathUtil() { + } + + /** + * 提供精确的加法运算。 + * + * @param v1 + * 被加数 + * @param v2 + * 加数 + * @return 两个参数的和 + */ + public static double add(double v1, double v2) { +// if (v1 < 0 || v2 < 0) { +// return 0 ; +// } + return v1+v2; +// BigDecimal b1 = new BigDecimal(Double.toString(v1)); +// BigDecimal b2 = new BigDecimal(Double.toString(v2)); +// return b1.add(b2).doubleValue(); + } + + /** + * 提供精确的减法运算。 + * + * @param v1 + * 被减数 + * @param v2 + * 减数 + * @return 两个参数的差 + */ + public static double sub(double v1, double v2) { +// if (v1 < 0 || v2 < 0) { +// return 0 ; +// } +// BigDecimal b1 = new BigDecimal(Double.toString(v1)); +// BigDecimal b2 = new BigDecimal(Double.toString(v2)); +// return b1.subtract(b2).doubleValue(); + return v1-v2; + } + + /** + * 提供精确的乘法运算。 + * + * @param v1 + * 被乘数 + * @param v2 + * 乘数 + * @return 两个参数的积 + */ + public static double mul(double v1, double v2) { + return v1*v2; +// if (v1 < 0 || v2 < 0) { +// return 0 ; +// } +// BigDecimal b1 = new BigDecimal(Double.toString(v1)); +// BigDecimal b2 = new BigDecimal(Double.toString(v2)); +// return b1.multiply(b2).doubleValue(); + } + + /** + * 提供(相对)精确的除法运算,当发生除不尽的情况时,精确到 小数点以后10位,以后的数字四舍五入。 + * + * @param v1 + * 被除数 + * @param v2 + * 除数 + * @return 两个参数的商 + */ + public static double div(double v1, double v2) { +// if (v1 < 0 || v2 < 0) { +// return 0 ; +// } + return div(v1, v2, DEF_DIV_SCALE); + } + + /** + * 提供(相对)精确的除法运算。当发生除不尽的情况时,由scale参数指 定精度,以后的数字四舍五入。 + * + * @param v1 + * 被除数 + * @param v2 + * 除数 + * @param scale + * 表示表示需要精确到小数点以后几位。 + * @return 两个参数的商 + */ + public static double div(double v1, double v2, int scale) { +// if (v1 < 0 || v2 < 0 || scale < 0) { +// return 0 ; +// } + if (scale < 0) { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + + /** + * 提供精确的小数位四舍五入处理。 + * + * @param v + * 需要四舍五入的数字 + * @param scale + * 小数点后保留几位 + * @return 四舍五入后的结果 + */ + public static double round(double v, int scale) { + + if (scale < 0) { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + if (v < 0 ) { + return 0 ; + } + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = new BigDecimal("1"); + return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue(); + } + +// public static double log(double value, double base) { +// if (Math.log(base) == 0) { +// return 0; +// } +// return Math.log(value) / Math.log(base); +// } + + public static double ln(double value) { + return Math.log(value); +// if (log(value, Math.E) == 0) { +// return 0; +// } +// return log(value, Math.E); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Md5Tool.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Md5Tool.java new file mode 100644 index 0000000..26609f7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Md5Tool.java @@ -0,0 +1,37 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + + +/** + * Created by 12457 on 2017/8/2. + */ + +public class Md5Tool { + + private static String bytesToHexString(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(0xFF & bytes[i]); + if (hex.length() == 1) { + sb.append('0'); + } + sb.append(hex); + } + return sb.toString(); + } + + public static String hashKey(String key) { + String hashKey; + try { + final MessageDigest mDigest = MessageDigest.getInstance("MD5"); + mDigest.update(key.getBytes()); + hashKey = bytesToHexString(mDigest.digest()); + } catch (NoSuchAlgorithmException e) { + hashKey = String.valueOf(key.hashCode()); + } + return hashKey; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/MemoryTools.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MemoryTools.java new file mode 100644 index 0000000..58c594b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MemoryTools.java @@ -0,0 +1,115 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.ActivityManager; +import android.content.Context; +import android.os.Debug; +import android.os.Environment; +import android.os.StatFs; +import android.text.format.Formatter; +import android.util.Log; + +import java.io.BufferedReader; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + +/** + * Created by WANGChengXin on 2019/10/11. + */ + +public class MemoryTools { + private static final String TAG = MemoryTools.class.getName(); + private static final String MEM_INFO_PATH = "/proc/meminfo"; + public static final String MEMTOTAL = "MemTotal"; + public static final String MEMFREE = "MemFree"; + + /** + * 得到中内存大小 + * + * @param context + * @param + * @return + */ + public static String getTotalMemory(Context context) { + return getMemInfoIype(context, MEMTOTAL); + } + + /** + * 得到可用内存大小 + * + * @param context + * @param + * @return + */ + public static String getMemoryFree(Context context) { + return getMemInfoIype(context, MEMFREE); + } + + /** + * 得到type info + * + * @param context + * @param type + * @return + */ + public static String getMemInfoIype(Context context, String type) { + try { + FileReader fileReader = new FileReader(MEM_INFO_PATH); + BufferedReader bufferedReader = new BufferedReader(fileReader, 4 * 1024); + String str = null; + while ((str = bufferedReader.readLine()) != null) { + if (str.contains(type)) { + break; + } + } + bufferedReader.close(); + /* \\s表示 空格,回车,换行等空白符, + +号表示一个或多个的意思 */ + String[] array = str.split("\\s+"); + // 获得系统总内存,单位是KB,乘以1024转换为Byte + int length = Integer.valueOf(array[1]).intValue() * 1024; + return android.text.format.Formatter.formatFileSize(context, length); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 得到内置存储空间的总容量 + * @param context + * @return + */ + public static String getInternalToatalSpace(Context context){ + String path = Environment.getDataDirectory().getPath(); + Log.d(TAG,"root path is "+path); + StatFs statFs = new StatFs(path); + long blockSize = statFs.getBlockSize(); + long totalBlocks = statFs.getBlockCount(); + long availableBlocks = statFs.getAvailableBlocks(); + long useBlocks = totalBlocks - availableBlocks; + + long rom_length = totalBlocks*blockSize; + + return FileUtils.formatFileSize(rom_length); + } + + public static String getInternalfreeSpace(Context context){ + String path = Environment.getDataDirectory().getPath(); + Log.d(TAG,"root path is "+path); + StatFs statFs = new StatFs(path); + long blockSize = statFs.getBlockSize(); + long totalBlocks = statFs.getBlockCount(); + long availableBlocks = statFs.getAvailableBlocks(); + long useBlocks = totalBlocks - availableBlocks; + + long rom_length = totalBlocks*blockSize; + long free_length = availableBlocks*blockSize; + + return FileUtils.formatFileSize(free_length); + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/MyUserIconUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MyUserIconUtil.java new file mode 100644 index 0000000..be43c31 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/MyUserIconUtil.java @@ -0,0 +1,228 @@ +package cn.shangyu.gdxzExpert.utils; + +import static cn.shangyu.gdxzExpert.utils.Url.weurl; + +import android.content.Context; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; + +import cn.shangyu.gdxzExpert.activity.AccumulatePointsActivity; +import cn.shangyu.gdxzExpert.activity.BindWeChatActivity; +import cn.shangyu.gdxzExpert.activity.CasediscussionActivity; +import cn.shangyu.gdxzExpert.activity.CourseActivity; +import cn.shangyu.gdxzExpert.activity.CoursewareActivity; +import cn.shangyu.gdxzExpert.activity.EditPhoneActivity; +import cn.shangyu.gdxzExpert.activity.GDLiveBroadcastActivity; +import cn.shangyu.gdxzExpert.activity.GanDanHospitalActivity; +import cn.shangyu.gdxzExpert.activity.GandanConsultActivity; +import cn.shangyu.gdxzExpert.activity.GroupingActivity; +import cn.shangyu.gdxzExpert.activity.MyAccount2Activity; +import cn.shangyu.gdxzExpert.activity.MyCicleActivity; +import cn.shangyu.gdxzExpert.activity.MyCoursewareActivity; +import cn.shangyu.gdxzExpert.activity.MyDownLoadsActivity; +import cn.shangyu.gdxzExpert.activity.MyFlowerActivity; +import cn.shangyu.gdxzExpert.activity.MyLibraryActivity; +import cn.shangyu.gdxzExpert.activity.MyPatientActivity; +import cn.shangyu.gdxzExpert.activity.MyQrCodeActivity; +import cn.shangyu.gdxzExpert.activity.MyScientificResearchActivity; +import cn.shangyu.gdxzExpert.activity.MyWelfAreActivity; +import cn.shangyu.gdxzExpert.activity.NewsDetailActivity; +import cn.shangyu.gdxzExpert.activity.OrderListActivity; +import cn.shangyu.gdxzExpert.activity.OutofPatientNoticeActivity; +import cn.shangyu.gdxzExpert.activity.PublicConsultationActivity; +import cn.shangyu.gdxzExpert.activity.ResearchActivity; +import cn.shangyu.gdxzExpert.activity.SendGroupMsgListActivity; +import cn.shangyu.gdxzExpert.activity.SendMindActivity; +import cn.shangyu.gdxzExpert.activity.SettingVersionActivity; +import cn.shangyu.gdxzExpert.activity.TestingActivity; +import cn.shangyu.gdxzExpert.activity.VideoActivity; +import cn.shangyu.gdxzExpert.big.activity.BiggNewPatientActivity; +import cn.shangyu.gdxzExpert.big.activity.NormNewPatientActivity; +import cn.shangyu.gdxzExpert.pointsmall.PointsMallActivity; +import cn.shangyu.gdxzExpert.polyvplayer.MyDownLoadVideoActivity; +import cn.shangyu.gdxzExpert.polyvplayer.QualityCourseActivity; + +/** + * Created by WANGChengXin on 2020/3/10. + */ + +public class MyUserIconUtil { + public static void myIntent(Context context,String name){ + if ("肝胆新闻".equals(name)||"肝胆时讯".equals(name)){ + context.startActivity(new Intent(context, GandanConsultActivity.class)); + }else if ("名医名科".equals(name)){ + context.startActivity(new Intent(context, GanDanHospitalActivity.class)); + }else if ("药品助手".equals(name)){ + Intent intentwf = new Intent(context, + MyLibraryActivity.class); + intentwf.putExtra("search", "medicine"); + context.startActivity(intentwf); + }else if ("肝胆课件".equals(name)){ + context.startActivity(new Intent(context, CoursewareActivity.class)); + }else if ("精品课程".equals(name)){ + context.startActivity(new Intent(context, QualityCourseActivity.class)); + }else if ("肝病学院".equals(name)){ + context.startActivity(new Intent(context, GDLiveBroadcastActivity.class)); + }else if ("病例讨论".equals(name)||"病例交流".equals(name)){ + context.startActivity(new Intent(context, CasediscussionActivity.class)); + } + else if ("病例荟萃".equals(name)||"病例分享".equals(name)){ + context.startActivity(new Intent(context, MyCicleActivity.class)); + }else if ("科研项目".equals(name)){ + context.startActivity(new Intent(context, MyScientificResearchActivity.class)); + }else if ("肝病检测".equals(name)){ + context.startActivity(new Intent(context, TestingActivity.class)); + }else if ("我的下载".equals(name)){ + Intent intent1 = new Intent(context, MyDownLoadsActivity.class); + intent1.setType("download"); + context.startActivity(intent1); + }else if ("我的福利".equals(name)){ + Intent intent1 = new Intent(context, MyWelfAreActivity.class); + context.startActivity(intent1); + }else if ("精品课".equals(name)){ + Intent intent1 = new Intent(context, CourseActivity.class); + context.startActivity(intent1); + } + else if("积分商城".equals(name)) + { + context.startActivity(new Intent(context, PointsMallActivity.class)); +// context.startActivity(new Intent(context, ResearchActivity.class)); + } + else if("我的患者".equals(name)) + { + context.startActivity(new Intent(context, MyPatientActivity.class)); + } + else if("肝胆视频".equals(name)) + { + context.startActivity(new Intent(context, VideoActivity.class)); + } + else if("公益咨询".equals(name)) + { + context.startActivity(new Intent(context, PublicConsultationActivity.class)); + } + else if("指南杂志".equals(name)||"我的图书馆".equals(name)||"指南工具".equals(name)) + { + context.startActivity(new Intent(context, MyLibraryActivity.class)); + } + else if ("专题e站".equals(name)){ + Intent intent1 = new Intent(context, NewsDetailActivity.class); + intent1.putExtra("url",weurl+"Esite/index.htm#/home"); +// intent1.putExtra("url", "http://twx.igandan.org/Esite/index.htm#/"); +// intent1.putExtra("url", "http://wx.igandan.com/Esite/index.htm#/home"); + intent1.putExtra("title","专题e站"); + intent1.putExtra("summary", "肝胆相照®肝胆病在线公共服务平台"); + intent1.putExtra("flag", 1); + context.startActivity(intent1); + } + else if("患者审核".equals(name)) + { + if(CommonUtil.BigModule()) + { + context.startActivity(new Intent(context, BiggNewPatientActivity.class)); + } + else + { + context.startActivity(new Intent(context, NormNewPatientActivity.class)); + } + } + else if("患者分组".equals(name)) + { + context.startActivity(new Intent(context, GroupingActivity.class)); + } + else if("群发消息".equals(name)) + { + context.startActivity(new Intent(context, SendGroupMsgListActivity.class)); + } + else if("随访二维码".equals(name)) + { + context.startActivity(new Intent(context, MyQrCodeActivity.class)); + } + else if("出诊计划".equals(name)) + { + context.startActivity(new Intent(context, OutofPatientNoticeActivity.class)); + } + else if("我的视频".equals(name)) + { + context.startActivity(new Intent(context, MyDownLoadVideoActivity.class)); + } + else if("我的课程".equals(name)) + { + context.startActivity(new Intent(context, CourseActivity.class).putExtra("type","2")); + } + + else if("我的下载".equals(name)) + { + context.startActivity(new Intent(context, MyDownLoadsActivity.class).setType("download")); + } + else if("我的收藏".equals(name)) + { + context.startActivity(new Intent(context, MyDownLoadsActivity.class).setType("collection")); + } + else if("我的账户".equals(name)) + { + context.startActivity(new Intent(context, MyAccount2Activity.class)); + } + else if("我的积分".equals(name)) + { + context.startActivity(new Intent(context, AccumulatePointsActivity.class)); + } + else if("我的鲜花".equals(name)) + { + context.startActivity(new Intent(context, MyFlowerActivity.class)); + } + else if("课件明细".equals(name)) + { + context.startActivity(new Intent(context, MyCoursewareActivity.class)); + } + else if("课程明细".equals(name)) + { + context.startActivity(new Intent(context, OrderListActivity.class)); + } + else if("送心意".equals(name)) + { + context.startActivity(new Intent(context, SendMindActivity.class)); + } else if(name.contains("微信")) + { + context.startActivity(new Intent(context, BindWeChatActivity.class)); + } else if("更换手机号".equals(name)) + { + String phone =SharePrefUtil.getString(context, "mobile", ""); + context.startActivity(new Intent(context, EditPhoneActivity.class).putExtra("phone",phone)); + } else if("通知已开".equals(name)||"通知已关".equals(name)||"消息提醒".equals(name)) + { + + if (Build.VERSION.SDK_INT >= 26) { + context.startActivity(new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS") + .setData(Uri.fromParts("package", context.getPackageName(), null))); + + } else if (Build.VERSION.SDK_INT >= 21) { + // android 5.0-7.0 + context.startActivity(new Intent().setAction("android.settings.APP_NOTIFICATION_SETTINGS") + .putExtra("app_package",context.getPackageName()) + .putExtra("app_uid", context.getApplicationInfo().uid) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + + + } else { + // 其他 + context.startActivity(new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS") + .setData(Uri.fromParts("package", context.getPackageName(), null)) + .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); + } + + } + else if(name.contains("V")||name.contains("版本")) + { + context.startActivity(new Intent(context, SettingVersionActivity.class)); + } + else if("临床研究".equals(name)) + { +// context.startActivity(new Intent(context, PointsMallActivity.class)); + context.startActivity(new Intent(context, ResearchActivity.class)); + } + + + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/NotificationUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/NotificationUtils.java new file mode 100644 index 0000000..32e056f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/NotificationUtils.java @@ -0,0 +1,135 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.annotation.SuppressLint; +import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.content.Context; +import android.content.ContextWrapper; +import android.os.Build; +import android.util.Log; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +import androidx.annotation.RequiresApi; +import androidx.core.app.NotificationCompat; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.storage.IMessageSqlManager; + + + +/** + * . + */ + +public class NotificationUtils extends ContextWrapper { + + private NotificationManager manager; + public String id = "随访消息"; + public String name = "随访消息"; + private int defaults; + private PendingIntent pendingIntent; + public NotificationUtils(Context context){ + super(context); + } + + public NotificationUtils(Context context, int defaults,PendingIntent pendingIntent) { + super(context); + this.defaults = defaults; + this.pendingIntent = pendingIntent; + + } + + + + @RequiresApi(api = Build.VERSION_CODES.O) + public void createNotificationChannel(){ + @SuppressLint("WrongConstant") NotificationChannel channel = new NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH); + channel.setShowBadge(true);// 打开角标 + getManager().createNotificationChannel(channel); + } + private NotificationManager getManager(){ + if (manager == null){ + manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); + } + return manager; + } + @RequiresApi(api = Build.VERSION_CODES.O) + public Notification.Builder getChannelNotification(String title, String content){ + return new Notification.Builder(getApplicationContext(), id) + .setContentTitle(title) + .setContentText(content) + .setNumber( IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient)) + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent); + } + public NotificationCompat.Builder getNotification_25(String title, String content){ + return new NotificationCompat.Builder(getApplicationContext()) + .setContentTitle(title) + .setContentText(content) + .setNumber( IMessageSqlManager.getUnByTypeUnreadCount(Constant.typePatient)) + .setSmallIcon(R.drawable.ic_launcher) + .setContentIntent(pendingIntent); + } + public void sendNotification(String title, String content){ + id = title; + name = title; + if (Build.VERSION.SDK_INT>=26){ + createNotificationChannel(); + Notification notification = getChannelNotification(title, content).build(); + getManager().notify(35,notification); + }else{ + Notification notification = getNotification_25(title, content).build(); + getManager().notify(35,notification); + } + } + + public void sendUpVersonNotification(String title, String content){ + id = title; + name = title; + if (Build.VERSION.SDK_INT>=26){ + createNotificationChannel(); + Notification notification = getChannelNotification(title, content).build(); + notification.flags |= notification.FLAG_AUTO_CANCEL; + getManager().notify(35,notification); + }else{ + Notification notification = getNotification_25(title, content).build(); + notification.flags |= notification.FLAG_AUTO_CANCEL; + + getManager().notify(35,notification); + } + } + public void sendCountNotification(String title, String content,int count){ + id = title; + name = title; + Log.d("gdxzxm","title = "+title); + if (Build.VERSION.SDK_INT>=26){ + createNotificationChannel(); + Notification notification = getChannelNotification(title, content).build(); + notification.flags |= notification.FLAG_AUTO_CANCEL; + try { + Field field = notification.getClass().getDeclaredField("extraNotification"); + Object extraNotification = field.get(notification); + Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); + method.invoke(extraNotification, count); + } catch (Exception e) { + e.printStackTrace(); + } +// getManager().notify(NOTIFY_ID_PUSHCONTENT,notification); + }else{ + Notification notification = getNotification_25(title, content).build(); + notification.flags |= notification.FLAG_AUTO_CANCEL; + try { + Field field = notification.getClass().getDeclaredField("extraNotification"); + Object extraNotification = field.get(notification); + Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); + method.invoke(extraNotification, count); + } catch (Exception e) { + e.printStackTrace(); + } +// getManager().notify(NOTIFY_ID_PUSHCONTENT,notification); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/OneClickUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/OneClickUtil.java new file mode 100644 index 0000000..f73b2af --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/OneClickUtil.java @@ -0,0 +1,46 @@ +package cn.shangyu.gdxzExpert.utils; + +public class OneClickUtil { + + private static long lastClickTime = 0; + private static long DIFF = 1000; + private static int lastButtonId = -1; + + /** + * 判断两次点击的间隔,如果小于1000,则认为是多次无效点击 + * + * @return + */ + public static boolean isFastDoubleClick() { + return isFastDoubleClick(-1, DIFF); + } + + /** + * 判断两次点击的间隔,如果小于1000,则认为是多次无效点击 + * + * @return + */ + public static boolean isFastDoubleClick(int buttonId) { + return isFastDoubleClick(buttonId, DIFF); + } + + /** + * 判断两次点击的间隔,如果小于diff,则认为是多次无效点击 + * + * @param diff + * @return + */ + public static boolean isFastDoubleClick(int buttonId, long diff) { + long time = System.currentTimeMillis(); + long timeD = time - lastClickTime; + if (lastButtonId == buttonId && lastClickTime > 0 && timeD < diff) { +// Log.v("isFastDoubleClick", "短时间内按钮多次触发"); + return true; + } + lastClickTime = time; + lastButtonId = buttonId; + return false; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionActivity.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionActivity.java new file mode 100644 index 0000000..f12db57 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionActivity.java @@ -0,0 +1,146 @@ +package cn.shangyu.gdxzExpert.utils; + +/** + * Created by dfqin on 2017/1/22. + */ + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.os.Bundle; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import android.text.TextUtils; + + +import java.io.Serializable; + +public class PermissionActivity extends Activity { + + + private static final int PERMISSION_REQUEST_CODE = 64; + private boolean isRequireCheck; + + private String[] permission; + private String key; + private boolean showTip; + private PermissionsUtil.TipInfo tipInfo; + + private final String defaultTitle = "帮助"; + private final String defaultContent = "当前应用缺少必要权限。\n \n 请点击 \"设置\"-\"权限\"-打开所需权限。"; + private final String defaultCancel = "取消"; + private final String defaultEnsure = "设置"; + + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getIntent() == null || !getIntent().hasExtra("permission")) { + finish(); + return; + } + + isRequireCheck = true; + permission = getIntent().getStringArrayExtra("permission"); + key = getIntent().getStringExtra("key"); + showTip = getIntent().getBooleanExtra("showTip", true); + Serializable ser = getIntent().getSerializableExtra("tip"); + + if (ser == null) { + tipInfo = new PermissionsUtil.TipInfo(defaultTitle, defaultContent, defaultCancel, defaultEnsure); + } else { + tipInfo = (PermissionsUtil.TipInfo)ser; + } + + } + + @Override protected void onResume() { + super.onResume(); + if (isRequireCheck) { + if (PermissionsUtil.hasPermission(this, permission)) { + permissionsGranted(); + } else { + requestPermissions(permission); // 请求权限,回调时会触发onResume + isRequireCheck = false; + } + } else { + isRequireCheck = true; + } + } + + // 请求权限兼容低版本 + private void requestPermissions(String[] permission) { + ActivityCompat.requestPermissions(this, permission, PERMISSION_REQUEST_CODE); + } + + + /** + * 用户权限处理, + * 如果全部获取, 则直接过. + * 如果权限缺失, 则提示Dialog. + * + * @param requestCode 请求码 + * @param permissions 权限 + * @param grantResults 结果 + */ + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + + //部分厂商手机系统返回授权成功时,厂商可以拒绝权限,所以要用PermissionChecker二次判断 + if (requestCode == PERMISSION_REQUEST_CODE && PermissionsUtil.isGranted(grantResults) + && PermissionsUtil.hasPermission(this, permissions)) { + permissionsGranted(); + } else if (showTip){ + showMissingPermissionDialog(); + } else { //不需要提示用户 + permissionsDenied(); + } + } + + // 显示缺失权限提示 + private void showMissingPermissionDialog() { + + AlertDialog.Builder builder = new AlertDialog.Builder(PermissionActivity.this); + + builder.setTitle(TextUtils.isEmpty(tipInfo.title) ? defaultTitle : tipInfo.title); + builder.setMessage(TextUtils.isEmpty(tipInfo.content) ? defaultContent : tipInfo.content); + + builder.setNegativeButton(TextUtils.isEmpty(tipInfo.cancel) ? defaultCancel : tipInfo.cancel, new DialogInterface.OnClickListener(){ + @Override public void onClick(DialogInterface dialog, int which) { + permissionsDenied(); + } + }); + + builder.setPositiveButton(TextUtils.isEmpty(tipInfo.ensure) ? defaultEnsure : tipInfo.ensure, new DialogInterface.OnClickListener() { + @Override public void onClick(DialogInterface dialog, int which) { + PermissionsUtil.gotoSetting(PermissionActivity.this); + } + }); + + builder.setCancelable(false); + builder.show(); + } + + private void permissionsDenied() { + PermissionListener listener = PermissionsUtil.fetchListener(key); + if (listener != null) { + listener.permissionDenied(permission); + } + finish(); + } + + // 全部权限均已获取 + private void permissionsGranted() { + PermissionListener listener = PermissionsUtil.fetchListener(key); + if (listener != null) { + listener.permissionGranted(permission); + } + finish(); + } + + protected void onDestroy() { + PermissionsUtil.fetchListener(key); + super.onDestroy(); + } + +} + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionListener.java new file mode 100644 index 0000000..7eddcf1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionListener.java @@ -0,0 +1,23 @@ +package cn.shangyu.gdxzExpert.utils; + + +import androidx.annotation.NonNull; + +/** + * Created by dfqin on 2017/1/20. + */ + +public interface PermissionListener { + + /** + * 通过授权 + * @param permission + */ + void permissionGranted(@NonNull String[] permission); + + /** + * 拒绝授权 + * @param permission + */ + void permissionDenied(@NonNull String[] permission); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionUtils.java new file mode 100644 index 0000000..6435f22 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionUtils.java @@ -0,0 +1,326 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.Manifest; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.provider.Settings; +import androidx.annotation.NonNull; +import androidx.core.app.ActivityCompat; +import android.util.Log; +import android.widget.Toast; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import cn.shangyu.gdxzExpert.R; + +/** + * Created by qianxiaoai on 2016/7/7. + */ +public class PermissionUtils { + + private static final String TAG = "PermissionUtils"; + public static final int CODE_RECORD_AUDIO = 0; + public static final int CODE_GET_ACCOUNTS = 1; + public static final int CODE_READ_PHONE_STATE = 2; + public static final int CODE_CALL_PHONE = 3; + public static final int CODE_CAMERA = 4; + public static final int CODE_ACCESS_FINE_LOCATION = 5; + public static final int CODE_ACCESS_COARSE_LOCATION = 6; + public static final int CODE_READ_EXTERNAL_STORAGE = 7; + public static final int CODE_WRITE_EXTERNAL_STORAGE = 8; + public static final int CODE_MULTI_PERMISSION = 100; + + public static final String PERMISSION_RECORD_AUDIO = Manifest.permission.RECORD_AUDIO; + public static final String PERMISSION_GET_ACCOUNTS = Manifest.permission.GET_ACCOUNTS; + public static final String PERMISSION_READ_PHONE_STATE = Manifest.permission.READ_PHONE_STATE; + public static final String PERMISSION_CALL_PHONE = Manifest.permission.CALL_PHONE; + public static final String PERMISSION_CAMERA = Manifest.permission.CAMERA; + public static final String PERMISSION_ACCESS_FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION; + public static final String PERMISSION_ACCESS_COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION; + public static final String PERMISSION_READ_EXTERNAL_STORAGE = Manifest.permission.READ_EXTERNAL_STORAGE; + public static final String PERMISSION_WRITE_EXTERNAL_STORAGE = Manifest.permission.WRITE_EXTERNAL_STORAGE; + public static final String PERMISSION_MANAGE_DOCUMENTS = Manifest.permission.MANAGE_DOCUMENTS; + public static final String EXPAND_STATUS_BAR = Manifest.permission.EXPAND_STATUS_BAR; + + + +// public static final String PERMISSION_READ_SMS = Manifest.permission.READ_SMS; + + private static String[] requestPermissions; +// private static final String[] requestPermissions = { +//// PERMISSION_RECORD_AUDIO, +//// PERMISSION_READ_CONTONTS, +//// PERMISSION_CAMERA, +//// PERMISSION_ACCESS_COARSE_LOCATION, +//// PERMISSION_READ_SMS, +// PERMISSION_READ_EXTERNAL_STORAGE, +// PERMISSION_WRITE_EXTERNAL_STORAGE, +// PERMISSION_MANAGE_DOCUMENTS +// }; + + public interface PermissionGrant { + void onPermissionGranted(int requestCode); + } + + /** + * Requests permission. + * + * @param activity + * @param requestCode request code, e.g. if you need request CAMERA permission,parameters is PermissionUtils.CODE_CAMERA + */ + public static void requestPermission(final Activity activity, final int requestCode, PermissionGrant permissionGrant) { + if (activity == null) { + return; + } + + Log.i(TAG, "requestPermission requestCode:" + requestCode); + if (requestCode < 0 || requestCode >= requestPermissions.length) { + Log.w(TAG, "requestPermission illegal requestCode:" + requestCode); + return; + } + + final String requestPermission = requestPermissions[requestCode]; + + //如果是6.0以下的手机,ActivityCompat.checkSelfPermission()会始终等于PERMISSION_GRANTED, + // 但是,如果用户关闭了你申请的权限,ActivityCompat.checkSelfPermission(),会导致程序崩溃(java.lang.RuntimeException: Unknown exception code: 1 msg null), + // 你可以使用try{}catch(){},处理异常,也可以判断系统版本,低于23就不申请权限,直接做你想做的。permissionGrant.onPermissionGranted(requestCode); +// if (Build.VERSION.SDK_INT < 23) { +// permissionGrant.onPermissionGranted(requestCode); +// return; +// } + + int checkSelfPermission; + try { + checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission); + } catch (RuntimeException e) { + Toast.makeText(activity, "please open this permission", Toast.LENGTH_SHORT) + .show(); + Log.e(TAG, "RuntimeException:" + e.getMessage()); + return; + } + + if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) { + Log.i(TAG, "ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED"); + + + if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) { + Log.i(TAG, "requestPermission shouldShowRequestPermissionRationale"); + shouldShowRationale(activity, requestCode, requestPermission); + + } else { + Log.d(TAG, "requestCameraPermission else"); + ActivityCompat.requestPermissions(activity, new String[]{requestPermission}, requestCode); + } + + } else { + Log.d(TAG, "ActivityCompat.checkSelfPermission ==== PackageManager.PERMISSION_GRANTED"); + Toast.makeText(activity, "opened:" + requestPermissions[requestCode], Toast.LENGTH_SHORT).show(); + permissionGrant.onPermissionGranted(requestCode); + } + } + + + /** + * + */ + private static void requestMultiResult(Activity activity, String[] permissions, int[] grantResults, PermissionGrant permissionGrant) { + + if (activity == null) { + return; + } + //TODO + Log.d(TAG, "onRequestPermissionsResult permissions length:" + permissions.length); + Map perms = new HashMap(); + + ArrayList notGranted = new ArrayList(); + for (int i = 0; i < permissions.length; i++) { + Log.d(TAG, "permissions: [i]:" + i + ", permissions[i]" + permissions[i] + ",grantResults[i]:" + grantResults[i]); + perms.put(permissions[i], grantResults[i]); + if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { + notGranted.add(permissions[i]); + } + } + + if (notGranted.size() == 0) { + Toast.makeText(activity, "all permission success" + notGranted, Toast.LENGTH_SHORT) + .show(); + permissionGrant.onPermissionGranted(CODE_MULTI_PERMISSION); + } else { + openSettingActivity(activity, "those permission need granted!"); + } + + } + + + /** + * 一次申请多个权限 + */ + public static void requestMultiPermissionsCommon(final Activity activity, final @NonNull String[] permissions, PermissionGrant grant) { + + ActivityCompat.requestPermissions(activity, permissions, + CODE_MULTI_PERMISSION); + } + + + /** + * 一次申请多个权限 + */ + public static void requestMultiPermissions(final Activity activity, PermissionGrant grant,final @NonNull String[] permissions) { + requestPermissions = permissions; + final List permissionsList = getNoGrantedPermission(activity, false); + final List shouldRationalePermissionsList = getNoGrantedPermission(activity, true); + + //TODO checkSelfPermission + if (permissionsList == null || shouldRationalePermissionsList == null) { + return; + } + Log.d(TAG, "requestMultiPermissions permissionsList:" + permissionsList.size() + ",shouldRationalePermissionsList:" + shouldRationalePermissionsList.size()); + + if (permissionsList.size() > 0) { + ActivityCompat.requestPermissions(activity, permissionsList.toArray(new String[permissionsList.size()]), + CODE_MULTI_PERMISSION); + Log.d(TAG, "showMessageOKCancel requestPermissions"); + + } else if (shouldRationalePermissionsList.size() > 0) { + showMessageOKCancel(activity, "should open those permission", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ActivityCompat.requestPermissions(activity, shouldRationalePermissionsList.toArray(new String[shouldRationalePermissionsList.size()]), + CODE_MULTI_PERMISSION); + Log.d(TAG, "showMessageOKCancel requestPermissions"); + } + }); + } else { + grant.onPermissionGranted(CODE_MULTI_PERMISSION); + } + + } + + + private static void shouldShowRationale(final Activity activity, final int requestCode, final String requestPermission) { + //TODO + String[] permissionsHint = activity.getResources().getStringArray(R.array.permissions); + showMessageOKCancel(activity, "Rationale: " + permissionsHint[requestCode], new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + ActivityCompat.requestPermissions(activity, + new String[]{requestPermission}, + requestCode); + Log.d(TAG, "showMessageOKCancel requestPermissions:" + requestPermission); + } + }); + } + + private static void showMessageOKCancel(final Activity context, String message, DialogInterface.OnClickListener okListener) { + new AlertDialog.Builder(context) + .setMessage(message) + .setPositiveButton("OK", okListener) + .setNegativeButton("Cancel", null) + .create() + .show(); + + } + + /** + * @param activity + * @param requestCode Need consistent with requestPermission + * @param permissions + * @param grantResults + */ + public static void requestPermissionsResult(final Activity activity, final int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults, PermissionGrant permissionGrant) { + + if (activity == null) { + return; + } + Log.d(TAG, "requestPermissionsResult requestCode:" + requestCode); + + if (requestCode == CODE_MULTI_PERMISSION) { + return; + } + + if (requestCode < 0 || requestCode >= requestPermissions.length) { + return; + } + + + if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + permissionGrant.onPermissionGranted(requestCode); + + } else { + String[] permissionsHint = activity.getResources().getStringArray(R.array.permissions); + openSettingActivity(activity, "Result" + permissionsHint[requestCode]); + } + + } + + private static void openSettingActivity(final Activity activity, String message) { + + showMessageOKCancel(activity, message, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = new Intent(); + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + Log.d(TAG, "getPackageName(): " + activity.getPackageName()); + Uri uri = Uri.fromParts("package", activity.getPackageName(), null); + intent.setData(uri); + activity.startActivity(intent); + } + }); + } + + + /** + * @param activity + * @param isShouldRationale true: return no granted and shouldShowRequestPermissionRationale permissions, false:return no granted and !shouldShowRequestPermissionRationale + * @return + */ + public static ArrayList getNoGrantedPermission(Activity activity, boolean isShouldRationale) { + + ArrayList permissions = new ArrayList(); + + for (int i = 0; i < requestPermissions.length; i++) { + String requestPermission = requestPermissions[i]; + + + //TODO checkSelfPermission + int checkSelfPermission = -1; + try { + checkSelfPermission = ActivityCompat.checkSelfPermission(activity, requestPermission); + } catch (RuntimeException e) { + Toast.makeText(activity, "please open those permission", Toast.LENGTH_SHORT) + .show(); + Log.e(TAG, "RuntimeException:" + e.getMessage()); + return null; + } + + if (checkSelfPermission != PackageManager.PERMISSION_GRANTED) { + Log.i(TAG, "getNoGrantedPermission ActivityCompat.checkSelfPermission != PackageManager.PERMISSION_GRANTED:" + requestPermission); + + if (ActivityCompat.shouldShowRequestPermissionRationale(activity, requestPermission)) { + Log.d(TAG, "shouldShowRequestPermissionRationale if"); + if (isShouldRationale) { + permissions.add(requestPermission); + } + } else { + if (!isShouldRationale) { + permissions.add(requestPermission); + } + Log.d(TAG, "shouldShowRequestPermissionRationale else"); + } + + } + } + + return permissions; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionsUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionsUtil.java new file mode 100644 index 0000000..2bed707 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PermissionsUtil.java @@ -0,0 +1,142 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.provider.Settings; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.core.content.PermissionChecker; +import android.util.Log; + +import java.io.Serializable; +import java.util.HashMap; + +/** + * Created by dfqin on 2017/1/20. + */ + +public class PermissionsUtil { + + public static final String TAG = "PermissionGrantor"; + private static HashMap listenerMap = new HashMap(); + + /** + * 申请授权,当用户拒绝时,会显示默认一个默认的Dialog提示用户 + * @param activity + * @param listener + * @param permission 要申请的权限 + */ + public static void requestPermission(Activity activity, PermissionListener listener, String... permission) { + requestPermission(activity, listener, permission, true, null); + } + + /** + * 申请授权,当用户拒绝时,可以设置是否显示Dialog提示用户,也可以设置提示用户的文本内容 + * @param activity + * @param listener + * @param permission 需要申请授权的权限 + * @param showTip 当用户拒绝授权时,是否显示提示 + * @param tip 当用户拒绝时要显示Dialog设置 + */ + public static void requestPermission(@NonNull Activity activity, @NonNull PermissionListener listener + , @NonNull String[] permission, boolean showTip, @Nullable TipInfo tip) { + + + if (listener == null) { + Log.e(TAG, "listener is null"); + return; + } + + if (Build.VERSION.SDK_INT < 23) { + if (PermissionsUtil.hasPermission(activity, permission)) { + listener.permissionGranted(permission); + } else { + listener.permissionDenied(permission); + } + Log.e(TAG, "API level : " + Build.VERSION.SDK_INT + "不需要申请动态权限!"); + return; + } + + String key = String.valueOf(System.currentTimeMillis()); + listenerMap.put(key, listener); + Intent intent = new Intent(activity, PermissionActivity.class); + intent.putExtra("permission", permission); + intent.putExtra("key", key); + intent.putExtra("showTip", showTip); + intent.putExtra("tip", tip); + + activity.startActivity(intent); + } + + + /** + * 判断权限是否授权 + * @param context + * @param permissions + * @return + */ + public static boolean hasPermission(@NonNull Context context, @NonNull String... permissions) { + for (String per : permissions ) { + int result = PermissionChecker.checkSelfPermission(context, per); + if ( result != PermissionChecker.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + + /** + * 判断一组授权结果是否为授权通过 + * @param grantResult + * @return + */ + public static boolean isGranted(@NonNull int... grantResult) { + for (int result : grantResult) { + if (result != PackageManager.PERMISSION_GRANTED) { + return false; + } + } + return true; + } + + /** + * 跳转到当前应用对应的设置页面 + * @param context + */ + public static void gotoSetting(@NonNull Context context) { + Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + intent.setData(Uri.parse("package:" + context.getPackageName())); + context.startActivity(intent); + } + + /** + * + * @param key + * @return + */ + static PermissionListener fetchListener(String key) { + return listenerMap.remove(key); + } + + + public static class TipInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + String title; + String content; + String cancel; //取消按钮文本 + String ensure; //确定按钮文本 + + public TipInfo ( @Nullable String title, @Nullable String content, @Nullable String cancel, @Nullable String ensure) { + this.title = title; + this.content = content; + this.cancel = cancel; + this.ensure = ensure; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/PlistHandler.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PlistHandler.java new file mode 100644 index 0000000..5bb377e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/PlistHandler.java @@ -0,0 +1,132 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.xml.sax.SAXException; +import org.xml.sax.helpers.DefaultHandler; + +public class PlistHandler extends DefaultHandler { + + private LinkedList list = new LinkedList(); + + private boolean isRootElement = false; + + private boolean keyElementBegin = false; + + private String key; + + private StringBuffer value = new StringBuffer(); + + private boolean valueElementBegin = false; + + private Object root; + + @SuppressWarnings("unchecked") + public Map getMapResult() { + return (Map)root; + } + + @SuppressWarnings("unchecked") + public List getArrayResult() { + return (List)root; + } + + @Override + public void startElement(String uri, String localName, String qName, + org.xml.sax.Attributes attributes) throws SAXException { + value = new StringBuffer(); + if ("plist".equals(localName)) { + isRootElement = true; + } + if ("dict".equals(localName)) { + if (isRootElement) { + list.addFirst(new HashMap()); + isRootElement = !isRootElement; + } else { + ArrayList parent = (ArrayList)list.get(0); + list.addFirst(new HashMap()); + parent.add(list.get(0)); + } + } + + if ("key".equals(localName)) { + keyElementBegin = true; + } + if ("true".equals(localName)) { + HashMap parent = (HashMap)list.get(0); + parent.put(key, true); + } + if ("false".equals(localName)) { + HashMap parent = (HashMap)list.get(0); + parent.put(key, false); + } + if ("array".equals(localName)) { + if (isRootElement) { + ArrayList obj = new ArrayList(); + list.addFirst(obj); + isRootElement = !isRootElement; + } else { + HashMap parent = (HashMap)list.get(0); + ArrayList obj = new ArrayList(); + list.addFirst(obj); + parent.put(key, obj); + } + } + if ("string".equals(localName)) { + valueElementBegin = true; + } + } + + + //@SuppressWarnings("unchecked") + @Override + public void characters(char[] ch, int start, int length) + throws SAXException { + if (length > 0) { + value.append(ch, start, length); + } + } + + @Override + public void endElement(String uri, String localName, String qName) + throws SAXException { + if (keyElementBegin) { + key = value.toString(); + //Log.d("AR native", "key:" + key); + } + if (valueElementBegin) { + + if (HashMap.class.equals(list.get(0).getClass())) { + HashMap parent = (HashMap)list.get(0); + parent.put(key, value.toString()); + } else if (ArrayList.class.equals(list.get(0).getClass())) { + ArrayList parent = (ArrayList)list.get(0); + parent.add(value.toString()); + } + //Log.d("AR native", "value:" + value); + } + + + + + if ("plist".equals(localName)) { + ; + } + if ("key".equals(localName)) { + keyElementBegin = false; + } + if ("string".equals(localName)) { + valueElementBegin = false; + } + if ("array".equals(localName)) { + root = list.removeFirst(); + } + if ("dict".equals(localName)) { + root = list.removeFirst(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSA1Utils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSA1Utils.java new file mode 100644 index 0000000..9a1e4f6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSA1Utils.java @@ -0,0 +1,379 @@ +package cn.shangyu.gdxzExpert.utils; + +/** + * Created by wangchengxin on 2019/1/11. + */ +import java.io.ByteArrayOutputStream; +import java.security.Key; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.Signature; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; + +import javax.crypto.Cipher; + +/** */ +/** + *

+ * RSA公钥/私钥/签名工具包 + *

+ *

+ * 罗纳德·李维斯特(Ron [R]ivest)、阿迪·萨莫尔(Adi [S]hamir)和伦纳德·阿德曼(Leonard [A]dleman) + *

+ *

+ * 字符串格式的密钥在未在特殊说明情况下都为BASE64编码格式
+ * 由于非对称加密速度极其缓慢,一般文件不使用它来加密而是使用对称加密,
+ * 非对称加密算法可以用来对对称加密的密钥加密,这样保证密钥的安全也就保证了数据的安全 + *

+ * + * @author IceWee + * @date 2012-4-26 + * @version 1.0 + */ +public class RSA1Utils { + + /** */ + /** + * 加密算法RSA + */ + public static final String KEY_ALGORITHM = "RSA"; + + /** */ + /** + * 签名算法 + */ + public static final String SIGNATURE_ALGORITHM = "MD5withRSA"; + + /** */ + /** + * 获取公钥的key + */ + private static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB"; + + /** */ + /** + * 获取私钥的key + */ + private static final String PRIVATE_KEY = "RSAPrivateKey"; + + /** */ + /** + * RSA最大加密明文大小 + */ + private static final int MAX_ENCRYPT_BLOCK = 117; + + /** */ + /** + * RSA最大解密密文大小 + */ + private static final int MAX_DECRYPT_BLOCK = 128; + + /** */ + /** + *

+ * 生成密钥对(公钥和私钥) + *

+ * + * @return + * @throws Exception + */ + public static Map genKeyPair() throws Exception { + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM); + keyPairGen.initialize(1024); + KeyPair keyPair = keyPairGen.generateKeyPair(); + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + Map keyMap = new HashMap(2); + keyMap.put(PUBLIC_KEY, publicKey); + keyMap.put(PRIVATE_KEY, privateKey); + return keyMap; + } + + /** */ + /** + *

+ * 用私钥对信息生成数字签名 + *

+ * + * @param data + * 已加密数据 + * @param privateKey + * 私钥(BASE64编码) + * + * @return + * @throws Exception + */ + public static String sign(byte[] data, String privateKey) throws Exception { + byte[] keyBytes = Base64Utils.decode(privateKey); + PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + PrivateKey privateK = keyFactory.generatePrivate(pkcs8KeySpec); + Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); + signature.initSign(privateK); + signature.update(data); + return Base64Utils.encode(signature.sign()); + } + + /** */ + /** + *

+ * 校验数字签名 + *

+ * + * @param data + * 已加密数据 + * @param publicKey + * 公钥(BASE64编码) + * @param sign + * 数字签名 + * + * @return + * @throws Exception + * + */ + public static boolean verify(byte[] data, String publicKey, String sign) throws Exception { + byte[] keyBytes = Base64Utils.decode(publicKey); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + PublicKey publicK = keyFactory.generatePublic(keySpec); + Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM); + signature.initVerify(publicK); + signature.update(data); + return signature.verify(Base64Utils.decode(sign)); + } + + /** */ + /** + *

+ * 私钥解密 + *

+ * + * @param encryptedData + * 已加密数据 + * @param privateKey + * 私钥(BASE64编码) + * @return + * @throws Exception + */ + public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey) throws Exception { + byte[] keyBytes = Base64Utils.decode(privateKey); + PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.DECRYPT_MODE, privateK); + int inputLen = encryptedData.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] cache; + int i = 0; + // 对数据分段解密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_DECRYPT_BLOCK) { + cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); + } else { + cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_DECRYPT_BLOCK; + } + byte[] decryptedData = out.toByteArray(); + out.close(); + return decryptedData; + } + + /** */ + /** + *

+ * 公钥解密 + *

+ * + * @param encryptedData + * 已加密数据 + * @param publicKey + * 公钥(BASE64编码) + * @return + * @throws Exception + */ + public static byte[] decryptByPublicKey(byte[] encryptedData, String publicKey) throws Exception { + byte[] keyBytes = Base64Utils.decode(publicKey); + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + Key publicK = keyFactory.generatePublic(x509KeySpec); + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.DECRYPT_MODE, publicK); + int inputLen = encryptedData.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] cache; + int i = 0; + // 对数据分段解密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_DECRYPT_BLOCK) { + cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK); + } else { + cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_DECRYPT_BLOCK; + } + byte[] decryptedData = out.toByteArray(); + out.close(); + return decryptedData; + } + + /** */ + /** + *

+ * 公钥加密 + *

+ * + * @param data + * 源数据 + * @param publicKey + * 公钥(BASE64编码) + * @return + * @throws Exception + */ + public static byte[] encryptByPublicKey(byte[] data, String publicKey) throws Exception { + byte[] keyBytes = Base64Utils.decode(publicKey); + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + Key publicK = keyFactory.generatePublic(x509KeySpec); + // 对数据加密 + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.ENCRYPT_MODE, publicK); + int inputLen = data.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] cache; + int i = 0; + // 对数据分段加密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { + cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); + } else { + cache = cipher.doFinal(data, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_ENCRYPT_BLOCK; + } + byte[] encryptedData = out.toByteArray(); + out.close(); + return encryptedData; + } + + /** */ + /** + *

+ * 私钥加密 + *

+ * + * @param data + * 源数据 + * @param privateKey + * 私钥(BASE64编码) + * @return + * @throws Exception + */ + public static byte[] encryptByPrivateKey(byte[] data, String privateKey) throws Exception { + byte[] keyBytes = Base64Utils.decode(privateKey); + PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); + Key privateK = keyFactory.generatePrivate(pkcs8KeySpec); + Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm()); + cipher.init(Cipher.ENCRYPT_MODE, privateK); + int inputLen = data.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] cache; + int i = 0; + // 对数据分段加密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > MAX_ENCRYPT_BLOCK) { + cache = cipher.doFinal(data, offSet, MAX_ENCRYPT_BLOCK); + } else { + cache = cipher.doFinal(data, offSet, inputLen - offSet); + } + out.write(cache, 0, cache.length); + i++; + offSet = i * MAX_ENCRYPT_BLOCK; + } + byte[] encryptedData = out.toByteArray(); + out.close(); + return encryptedData; + } + + /** */ + /** + *

+ * 获取私钥 + *

+ * + * @param keyMap + * 密钥对 + * @return + * @throws Exception + */ + public static String getPrivateKey(Map keyMap) throws Exception { + Key key = (Key) keyMap.get(PRIVATE_KEY); + return Base64Utils.encode(key.getEncoded()); + } + + /** */ + /** + *

+ * 获取公钥 + *

+ * + * @param keyMap + * 密钥对 + * @return + * @throws Exception + */ + public static String getPublicKey(Map keyMap) throws Exception { + Key key = (Key) keyMap.get(PUBLIC_KEY); + return Base64Utils.encode(key.getEncoded()); + } + + /** + * java端公钥加密 + */ + public static String encryptedDataOnJava(String data) { + + try { + data = Base64Utils.encode(encryptByPublicKey(data.getBytes(), PUBLIC_KEY)); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return data; + } + + /** + * java端私钥解密 + */ + public static String decryptDataOnJava(String data, String PRIVATEKEY) { + String temp = ""; + try { + byte[] rs = Base64Utils.decode(data); + temp = new String(RSA1Utils.decryptByPrivateKey(rs, PRIVATEKEY),"UTF-8"); //以utf-8的方式生成字符串 + + } catch (Exception e) { + e.printStackTrace(); + } + return temp; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils11.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils11.java new file mode 100644 index 0000000..e96d9fa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils11.java @@ -0,0 +1,358 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.security.KeyFactory; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.RSAPublicKeySpec; +import java.security.spec.X509EncodedKeySpec; + +import javax.crypto.Cipher; + +/** + * + */ +public final class RSAUtils11 { + private static String RSA = "RSA"; + + /** + * 随机生成RSA密钥对(默认密钥长度为1024) + * + * @return + */ + public static KeyPair generateRSAKeyPair() + { + return generateRSAKeyPair(1024); + } + + /** + * 随机生成RSA密钥对 + * + * @param keyLength + * 密钥长度,范围:512~2048
+ * 一般1024 + * @return + */ + public static KeyPair generateRSAKeyPair(int keyLength) + { + try + { + KeyPairGenerator kpg = KeyPairGenerator.getInstance(RSA); + kpg.initialize(keyLength); + return kpg.genKeyPair(); + } catch (NoSuchAlgorithmException e) + { + e.printStackTrace(); + return null; + } + } + + /** + * 用公钥加密
+ * 每次加密的字节数,不能超过密钥的长度值除以 8 再减去 11,所以采取分段加密的方式规避 + * + * @param data 需加密数据的byte数据 + * @param publicKey 公钥 + * @return 加密后的byte型数据 + */ + public static byte[] encryptData(byte[] data, PublicKey publicKey) + { + try + { + Cipher cipher = Cipher.getInstance(RSA); + // 编码前设定编码方式及密钥 + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + + RSAPublicKey rsaPublicKey = (RSAPublicKey) publicKey; + // 模长 + int keyLen = rsaPublicKey.getModulus().bitLength() / 8; + int maxEncryptBlock = keyLen - 11; + + //如果明文长度大于模长-11则要分组加密 + int inputLen = data.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] temp; + int i = 0; + // 对数据分段加密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > maxEncryptBlock) { + temp = cipher.doFinal(data, offSet, maxEncryptBlock); + } else { + temp = cipher.doFinal(data, offSet, inputLen - offSet); + } + out.write(temp, 0, temp.length); + i++; + offSet = i * maxEncryptBlock; + } + byte[] encryptedData = out.toByteArray(); + out.close(); + // 传入编码数据并返回编码结果 + return encryptedData; + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } + + /** + * 用私钥解密 + * + * @param encryptedData 经过encryptedData()加密返回的byte数据 + * @param privateKey 私钥 + * @return + */ + public static byte[] decryptData(byte[] encryptedData, PrivateKey privateKey) + { + try + { + Cipher cipher = Cipher.getInstance(RSA); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + + RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) privateKey; + // 模长 + int keyLen = rsaPrivateKey.getModulus().bitLength() / 8; + int maxDecryptBlock = keyLen;//不用减11 + + //如果密文长度大于模长则要分组解密 + int inputLen = encryptedData.length; + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] temp; + int i = 0; + // 对数据分段解密 + while (inputLen - offSet > 0) { + if (inputLen - offSet > maxDecryptBlock) { + temp = cipher.doFinal(encryptedData, offSet, maxDecryptBlock); + } else { + temp = cipher.doFinal(encryptedData, offSet, inputLen - offSet); + } + out.write(temp, 0, temp.length); + i++; + offSet = i * maxDecryptBlock; + } + byte[] decryptedData = out.toByteArray(); + out.close(); + + return decryptedData; + } catch (Exception e) + { + e.printStackTrace(); + return null; + } + } + + /** + * 通过公钥byte[](publicKey.getEncoded())将公钥还原,适用于RSA算法 + * + * @param keyBytes + * @return + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + */ + public static PublicKey getPublicKey(byte[] keyBytes) throws NoSuchAlgorithmException, + InvalidKeySpecException + { + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + return publicKey; + } + + /** + * 通过私钥byte[]将公钥还原,适用于RSA算法 + * + * @param keyBytes + * @return + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + */ + public static PrivateKey getPrivateKey(byte[] keyBytes) throws NoSuchAlgorithmException, + InvalidKeySpecException + { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + return privateKey; + } + + /** + * 使用N、e值还原公钥 + * + * @param modulus + * @param publicExponent + * @return + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + */ + public static PublicKey getPublicKey(String modulus, String publicExponent) + throws NoSuchAlgorithmException, InvalidKeySpecException + { + BigInteger bigIntModulus = new BigInteger(modulus); + BigInteger bigIntPrivateExponent = new BigInteger(publicExponent); + RSAPublicKeySpec keySpec = new RSAPublicKeySpec(bigIntModulus, bigIntPrivateExponent); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + PublicKey publicKey = keyFactory.generatePublic(keySpec); + return publicKey; + } + + /** + * 使用N、d值还原私钥 + * + * @param modulus + * @param privateExponent + * @return + * @throws NoSuchAlgorithmException + * @throws InvalidKeySpecException + */ + public static PrivateKey getPrivateKey(String modulus, String privateExponent) + throws NoSuchAlgorithmException, InvalidKeySpecException + { + BigInteger bigIntModulus = new BigInteger(modulus); + BigInteger bigIntPrivateExponent = new BigInteger(privateExponent); + RSAPublicKeySpec keySpec = new RSAPublicKeySpec(bigIntModulus, bigIntPrivateExponent); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + PrivateKey privateKey = keyFactory.generatePrivate(keySpec); + return privateKey; + } + + /** + * 从字符串中加载公钥 + * + * @param publicKeyStr + * 公钥数据字符串 + * @throws Exception + * 加载公钥时产生的异常 + */ + public static PublicKey loadPublicKey(String publicKeyStr) throws Exception + { + try + { + byte[] buffer = Base64Utils11.decode(publicKeyStr); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer); + return (RSAPublicKey) keyFactory.generatePublic(keySpec); + } catch (NoSuchAlgorithmException e) + { + throw new Exception("无此算法"); + } catch (InvalidKeySpecException e) + { + throw new Exception("公钥非法"); + } catch (NullPointerException e) + { + throw new Exception("公钥数据为空"); + } + } + + /** + * 从字符串中加载私钥
+ * 加载时使用的是PKCS8EncodedKeySpec(PKCS#8编码的Key指令)。 + * + * @param privateKeyStr + * @return + * @throws Exception + */ + public static PrivateKey loadPrivateKey(String privateKeyStr) throws Exception + { + try + { + byte[] buffer = Base64Utils11.decode(privateKeyStr); + //X509EncodedKeySpec keySpec = new X509EncodedKeySpec(buffer); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + return (RSAPrivateKey) keyFactory.generatePrivate(keySpec); + } catch (NoSuchAlgorithmException e) + { + throw new Exception("无此算法"); + } catch (InvalidKeySpecException e) + { + throw new Exception("私钥非法"); + } catch (NullPointerException e) + { + throw new Exception("私钥数据为空"); + } + } + + /** + * 从文件中输入流中加载公钥 + * + * @param in + * 公钥输入流 + * @throws Exception + * 加载公钥时产生的异常 + */ + public static PublicKey loadPublicKey(InputStream in) throws Exception + { + try + { + return loadPublicKey(readKey(in)); + } catch (IOException e) + { + throw new Exception("公钥数据流读取错误"); + } catch (NullPointerException e) + { + throw new Exception("公钥输入流为空"); + } + } + + /** + * 从文件中加载私钥 + * @param in + * @return 私钥 + * @throws Exception + */ + public static PrivateKey loadPrivateKey(InputStream in) throws Exception + { + try + { + return loadPrivateKey(readKey(in)); + } catch (IOException e) + { + throw new Exception("私钥数据读取错误"); + } catch (NullPointerException e) + { + throw new Exception("私钥输入流为空"); + } + } + + /** + * 读取密钥信息 + * + * @param in + * @return + * @throws IOException + */ + private static String readKey(InputStream in) throws IOException + { + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + String readLine = null; + StringBuilder sb = new StringBuilder(); + while ((readLine = br.readLine()) != null) + { + if (readLine.charAt(0) == '-') + { + continue; + } else + { + sb.append(readLine); + sb.append('\r'); + } + } + + return sb.toString(); + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils2.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils2.java new file mode 100644 index 0000000..982b407 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RSAUtils2.java @@ -0,0 +1,224 @@ +package cn.shangyu.gdxzExpert.utils; + + +import org.apache.commons.codec.binary.Base64; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; + +import javax.crypto.Cipher; + + + +public class RSAUtils2 { + + public static final String CHARSET = "UTF-8"; + public static final String RSA_ALGORITHM = "RSA"; + public static String publicKey1 = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB"; + public static String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAO/m4+5v8euGOYcLcWsfvlxzzuaWVd6+GfhnZM/9O2msSDWsfZ6yykzQg+T8iJT63CeoQU1AHCV361zdqwj1QZ+ofeS4q7WTUYBDGyzM2Gz7YSWVSrssL0Iux8gkNRVgZdGBC/Zsqjqozv8ppxmRcR5N8ntZk5rwfa3Ezd5WlL2bAgMBAAECgYA3CVZDLkVmzg1GkPZ9J/QpC5xsxBKBHkWg+j9jg+nsbUzHm4HaNZQ5mSCZGOJQo1h8dJo+mbWbVu6VCHmjfXiHMYsQntC/BKo6m/R8RBld8Kne1xkB7rhc6ZMRtSBIGzEt+2pN1ODiCZ5wKgN5ANbWYg7g0D/g69e4syHywrSp2QJBAPyFeYc/RCRTxZa5c8x9E0ducAxCacmCiFUCVR6bOBiRmU9KPy77p8HpuIgRvX9JBfyvYASYvtaJx+Jm1g++YG0CQQDzNOmjGzGB52KbXsXy7cgJdej9wTaBKjiD3uZXjUcLOam8o/uIawMrRIc9n91vsDRc0aiRdwARJ+fydwFi/iEnAkEAyHdBqf+sndYvJt+ksTKd6nge1WynxIQurKXEYx7AIqj7dzmu/SJk5AkiKEtFD1YuPZIP/LYx0ejhWLdgunDc5QJBAL+imdZjvwbVA+XZL7DTnCOYPRZ2ADSWyCFgqa+jKq+1qAF0VOaRK9YUEVyFcz5mYVwh9+lnEy5xe1qaWwVdqVECQQCYGA4mYa6agEJFLwJXtwAFHNdf3n5OYVCKjTXlB/b3oA9FZZEq1uqVXyquW6KWK4GnJlJzP8NSxyRSBrwiElLr"; + + + /*public static Map createKeys(int keySize){ + //为RSA算法创建一个KeyPairGenerator对象 + KeyPairGenerator kpg; + try{ + kpg = KeyPairGenerator.getInstance(RSA_ALGORITHM); + }catch(NoSuchAlgorithmException e){ + throw new IllegalArgumentException("No such algorithm-->[" + RSA_ALGORITHM + "]"); + } + //初始化KeyPairGenerator对象,密钥长度 + kpg.initialize(keySize); + //生成密匙对 + KeyPair keyPair = kpg.generateKeyPair(); + //得到公钥 + Key publicKey = keyPair.getPublic(); + String publicKeyStr = Base64.encodeBase64URLSafeString(publicKey.getEncoded()); + //得到私钥 + Key privateKey = keyPair.getPrivate(); + String privateKeyStr = Base64.encodeBase64URLSafeString(privateKey.getEncoded()); + Map keyPairMap = new HashMap(); + keyPairMap.put("publicKey", publicKeyStr); + keyPairMap.put("privateKey", privateKeyStr); + return keyPairMap; + } +*/ + /** + * 得到公钥对象 + * @param publicKey 密钥字符串(经过base64编码) + * @throws Exception + */ + public static RSAPublicKey getPublicKey(String publicKey) { + try { + //通过X509编码的Key指令获得公钥对象 + KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM); + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(android.util.Base64.decode(publicKey.getBytes(), android.util.Base64.DEFAULT)); + RSAPublicKey key = (RSAPublicKey) keyFactory.generatePublic(x509KeySpec); + return key; + + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + }catch(Exception e){ + e.printStackTrace(); + return null; + } + } + /** + * 得到私钥对象 + * @param privateKey 密钥字符串(经过base64编码) + * @throws Exception + */ + public static RSAPrivateKey getPrivateKey(String privateKey) { + try { + //通过PKCS#8编码的Key指令获得私钥对象 + KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM); + PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey.getBytes(CHARSET)));// + RSAPrivateKey key = (RSAPrivateKey) keyFactory.generatePrivate(pkcs8KeySpec); + return key; + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + }catch(InvalidKeySpecException e){ + e.printStackTrace(); + return null; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + /** + * 公钥加密 + * @param data + * @param + * @return + */ + public static String publicEncrypt(String data){ + RSAPublicKey publicKey = RSAUtils2.getPublicKey(publicKey1); + + try{ + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] bytes = rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), publicKey.getModulus().bitLength()); + return new String(Base64.encodeBase64(bytes), "UTF-8"); + }catch(Exception e){ +// throw new RuntimeException("加密字符串[" + data + "]时遇到异常", e); + System.out.println("加密字符串[" + data + "]时遇到异常"); + e.printStackTrace(); + return null; + } + } + + /** + * 私钥解密 + * @param data + * @param privateKey + * @return + */ + public static String privateDecrypt(String data, RSAPrivateKey privateKey){ + try{ + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + byte[] bytes = rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data.getBytes(CHARSET)), privateKey.getModulus().bitLength()); + return new String(bytes, CHARSET); + }catch(Exception e){ + System.out.println("解密字符串[" + data + "]时遇到异常"); + return null; + } + } + + /** + * 私钥加密 + * @param data + * @param privateKey + * @return + */ + /* public static String privateEncrypt(String data, RSAPrivateKey privateKey){ + try{ + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + return Base64.encodeBase64URLSafeString(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), privateKey.getModulus().bitLength())); + }catch(Exception e){ +// throw new RuntimeException("加密字符串[" + data + "]时遇到异常", e); + System.out.println("加密字符串[" + data + "]时遇到异常"); + e.printStackTrace(); + return null; + } + } +*/ + /** + * 公钥解密 + * @param + * @param + * @return + */ + public static String publicDecrypt(String data, RSAPublicKey publicKey){ + try{ + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, publicKey); +// new String(rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data), publicKey.getModulus().bitLength()), CHARSET) + return null; + }catch(Exception e){ +// throw new RuntimeException("解密字符串[" + data + "]时遇到异常", e); + System.out.println("解密字符串[" + data + "]时遇到异常"); + e.printStackTrace(); + return null; + } + } + + private static byte[] rsaSplitCodec(Cipher cipher, int opmode, byte[] datas, int keySize){ + int maxBlock = 0; + if(opmode == Cipher.DECRYPT_MODE){ + maxBlock = keySize / 8; + }else{ + maxBlock = keySize / 8 - 11; + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] buff; + int i = 0; + try{ + while(datas.length > offSet){ + if(datas.length-offSet > maxBlock){ + buff = cipher.doFinal(datas, offSet, maxBlock); + }else{ + buff = cipher.doFinal(datas, offSet, datas.length-offSet); + } + out.write(buff, 0, buff.length); + i++; + offSet = i * maxBlock; + } + }catch(Exception e){ + throw new RuntimeException("加解密阀值为["+maxBlock+"]的数据时发生异常", e); + } + byte[] resultDatas = out.toByteArray(); + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return resultDatas; + } + +// public static void main (String[] args) throws Exception { +////// Map keyMap = RSAUtils.createKeys(1024); +////// String publicKey = keyMap.get("publicKey"); +////// String privateKey = keyMap.get("privateKey"); +//// String privateKey = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAO/m4+5v8euGOYcLcWsfvlxzzuaWVd6+GfhnZM/9O2msSDWsfZ6yykzQg+T8iJT63CeoQU1AHCV361zdqwj1QZ+ofeS4q7WTUYBDGyzM2Gz7YSWVSrssL0Iux8gkNRVgZdGBC/Zsqjqozv8ppxmRcR5N8ntZk5rwfa3Ezd5WlL2bAgMBAAECgYA3CVZDLkVmzg1GkPZ9J/QpC5xsxBKBHkWg+j9jg+nsbUzHm4HaNZQ5mSCZGOJQo1h8dJo+mbWbVu6VCHmjfXiHMYsQntC/BKo6m/R8RBld8Kne1xkB7rhc6ZMRtSBIGzEt+2pN1ODiCZ5wKgN5ANbWYg7g0D/g69e4syHywrSp2QJBAPyFeYc/RCRTxZa5c8x9E0ducAxCacmCiFUCVR6bOBiRmU9KPy77p8HpuIgRvX9JBfyvYASYvtaJx+Jm1g++YG0CQQDzNOmjGzGB52KbXsXy7cgJdej9wTaBKjiD3uZXjUcLOam8o/uIawMrRIc9n91vsDRc0aiRdwARJ+fydwFi/iEnAkEAyHdBqf+sndYvJt+ksTKd6nge1WynxIQurKXEYx7AIqj7dzmu/SJk5AkiKEtFD1YuPZIP/LYx0ejhWLdgunDc5QJBAL+imdZjvwbVA+XZL7DTnCOYPRZ2ADSWyCFgqa+jKq+1qAF0VOaRK9YUEVyFcz5mYVwh9+lnEy5xe1qaWwVdqVECQQCYGA4mYa6agEJFLwJXtwAFHNdf3n5OYVCKjTXlB/b3oA9FZZEq1uqVXyquW6KWK4GnJlJzP8NSxyRSBrwiElLr"; +//// String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDv5uPub/HrhjmHC3FrH75cc87mllXevhn4Z2TP/TtprEg1rH2esspM0IPk/IiU+twnqEFNQBwld+tc3asI9UGfqH3kuKu1k1GAQxsszNhs+2EllUq7LC9CLsfIJDUVYGXRgQv2bKo6qM7/KacZkXEeTfJ7WZOa8H2txM3eVpS9mwIDAQAB"; +//// +////// System.out.println("公钥: \n\r" + publicKey); +//// System.out.println("私钥: \n\r" + privateKey); +//// +//// System.out.println("公钥加密——私钥解密"); +//// +// } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/RsaUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RsaUtils.java new file mode 100644 index 0000000..17d7ab7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/RsaUtils.java @@ -0,0 +1,60 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; +import android.util.Base64; + +import java.io.InputStream; +import java.security.KeyFactory; +import java.security.PublicKey; +import java.security.spec.X509EncodedKeySpec; + +import javax.crypto.Cipher; + +public class RsaUtils { + private static String RSA = "RSA"; + private static final String ECB_PKCS1_PADDING = "RSA/ECB/PKCS1Padding"; + + public static byte[] encryptData(byte[] data, Context context) { + byte[] resultBytes = null; + try { + PublicKey publicKey = loadPublicKey(context); + Cipher cipher = Cipher.getInstance(ECB_PKCS1_PADDING); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + resultBytes = cipher.doFinal(data); + } catch (Exception e) { + e.printStackTrace(); + } + + return resultBytes; + } + + private static PublicKey loadPublicKey(Context context) throws Exception { + try { + PublicKey publicKey; + byte[] keyBytes = Base64.decode(readFile(context, "rsa_public_key.pem"), Base64.DEFAULT); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); + KeyFactory keyFactory = KeyFactory.getInstance(RSA); + publicKey = keyFactory.generatePublic(keySpec); + return publicKey; + } catch (Exception e) { + throw new Exception("密钥数据读取错误"); + } + } + + private static String readFile(Context context, String file) { + int len; + byte[] buf; + String grammar = ""; + try { + InputStream in = context.getAssets().open(file); + len = in.available(); + buf = new byte[len]; + in.read(buf, 0, len); + grammar = new String(buf, "utf-8"); + } catch (Exception e) { + e.printStackTrace(); + } + return grammar; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/SQLdm.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SQLdm.java new file mode 100644 index 0000000..0718625 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SQLdm.java @@ -0,0 +1,81 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import android.content.Context; +import android.content.res.AssetManager; +import android.database.sqlite.SQLiteDatabase; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; + +/** + * SQLdm.java + * @author 高财顺 + * @date 2015-10-8 下午4:39:11 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:将数据库读到文件中取 + */ +public class SQLdm { + //数据库存储路径 +// String filePath = "data/data/com.datab.cn/KJLibrary.db"; + String filePath ; + + //数据库存放的文件夹 data/data/com.main.jh 下面 +// String pathStr = "data/data/com.datab.cn"; + String pathStr; + + + SQLiteDatabase database; + public SQLiteDatabase openDatabase(Context context){ + filePath=context.getFilesDir().getAbsolutePath()+"/KJLibrary.db"; + File jhPath=new File(filePath); + //查看数据库文件是否存在 + if(jhPath.exists()){ + LogUtil.i("KJLibrary", "存在数据库"); + //存在则直接返回打开的数据库 + return SQLiteDatabase.openOrCreateDatabase(jhPath, null); + } else { + // 不存在先创建文件夹 + pathStr=context.getFilesDir().getAbsolutePath(); +// File path = new File(pathStr); +// if (path.mkdir()) { +// LogUtil.i("KJLibrary", "创建成功"); +// } else { +// LogUtil.i("KJLibrary", "创建失败"); +// } + try { + // 得到资源 + AssetManager am = context.getAssets(); + // 得到数据库的输入流 + InputStream is = am.open("KJLibrary.db"); +// LogUtil.i("KJLibrary", is + ""); + // 用输出流写到SDcard上面 + FileOutputStream fos = new FileOutputStream(jhPath); +// LogUtil.i("KJLibrary", "fos=" + fos); + LogUtil.i("KJLibrary", "jhPath=" + jhPath); + // 创建byte数组 用于1KB写一次 + byte[] buffer = new byte[1024]; + int count = 0; + while ((count = is.read(buffer)) > 0) { + fos.write(buffer, 0, count); + } + // 最后关闭就可以了 + fos.flush(); + fos.close(); + is.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + // 如果没有这个数据库 我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了 + return openDatabase(context); + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/SendCardUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SendCardUtils.java new file mode 100644 index 0000000..16ec740 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SendCardUtils.java @@ -0,0 +1,84 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.os.Environment; +import android.text.TextUtils; + +import java.io.File; +import java.io.FileOutputStream; + + + +public class SendCardUtils { + /** + * + * sendCardMessage + * + * @param to 发送给谁 + * @param tittleName标题名字 + * @param ext拓展字段 + * @param imageUrl 图片url + * void + */ + public static void sendCardMessage(String to,String tittleName,String ext) { + final String mFileName = "Atest-" + "test" + ".card" ; + + + String path; + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + path =Environment.getExternalStorageDirectory()+ "/Atest/"; + } else{ + path ="/udisk/crash/"; + } + final File mDirectory = new File(path) ; + if( ! mDirectory.exists()) + mDirectory.mkdir() ; + + FileOutputStream mFileOutputStream; + try { + mFileOutputStream = new FileOutputStream(mDirectory + "/" + mFileName); + mFileOutputStream.write("test".getBytes()); + mFileOutputStream.close() ; + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + File files = new File(path + "/" + mFileName); + String pathName = files.getAbsolutePath(); + LogUtil.v("pathName=="+pathName); + + if(TextUtils.isEmpty(to)) { + return ; + } + if(TextUtils.isEmpty(tittleName)) { + return ; + } + // 组建一个待发送的附件ECMessage +// ECMessage msg = ECMessage.createECMessage(ECMessage.Type.FILE); +// // 设置接收者 +// msg.setTo(to); +// // 创建附件消息体 +// ECFileMessageBody msgBody = new ECFileMessageBody(); +// // 设置附件 +// msgBody.setFileName(tittleName);//可以随便命名 +// // 设置附件扩展名 +// msgBody.setFileExt("card");//储存太短,怒能做拓展属性 +// // 设置附件本地路径 +// msgBody.setLocalUrl(pathName);//必须得是一个文件的路径 +// // 设置附件长度 +// msgBody.setLength(31);//可以随便写,但是不要太大 +// msgBody.setRemoteUrl(ext);//拓展字段 +// +// msg.setBody(msgBody); + + try { + // 调用发送API + // 发送消息,该函数见上 + long rowId = -1; +// rowId = IMChattingHelper.sendECMessage(msg); +// // 通知列表刷新 +// msg.setId(rowId); + } catch (Exception e) { + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ServiceUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ServiceUtils.java new file mode 100644 index 0000000..d6b35f6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ServiceUtils.java @@ -0,0 +1,36 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.ActivityManager; +import android.content.Context; +import android.util.Log; + +import java.util.ArrayList; + +/** + * Created by WANGChengXin on 2019/9/4. + */ + +public class ServiceUtils { + /** + * 判断服务是否开启 + * + * @return + */ + public static boolean isServiceRunning(Context context, String ServiceName) { + if (("").equals(ServiceName) || ServiceName == null) + return false; + ActivityManager myManager = (ActivityManager) context + .getSystemService(Context.ACTIVITY_SERVICE); + ArrayList runningService = (ArrayList) myManager + .getRunningServices(30); + for (int i = 0; i < runningService.size(); i++) { +// Log.i("TAG","服务 = "+runningService.get(i).service.getClassName().toString()); + if (runningService.get(i).service.getClassName().toString().equals(ServiceName)) { + return true; + } + } + return false; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/SetListViewHeightBasedOnChildrenUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SetListViewHeightBasedOnChildrenUtil.java new file mode 100644 index 0000000..5d058ef --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SetListViewHeightBasedOnChildrenUtil.java @@ -0,0 +1,71 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.GridView; +import android.widget.ListAdapter; +import android.widget.ListView; + +import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshGridView; + +public class SetListViewHeightBasedOnChildrenUtil { + public static void SetListViewHeightBasedOnChildren(ListView listView,BaseAdapter mAdapter) { + //获取listview的适配器 + ListAdapter listAdapter = listView.getAdapter(); //item的高度 + if (listAdapter == null) { + return; + } + int totalHeight = 0; + for (int i = 0; i < listAdapter.getCount(); i++) { + View listItem = mAdapter.getView(i, null, listView); + listItem.measure(0, 0); //计算子项View 的宽高 //统计所有子项的总高度 + totalHeight += listItem.getMeasuredHeight()+listView.getDividerHeight(); + + + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); + params.height = totalHeight; + listView.setLayoutParams(params); + } + + public static int SetListViewHeightBasedOnChildren1(ListView listView,BaseAdapter mAdapter) { + //获取listview的适配器 + ListAdapter listAdapter = listView.getAdapter(); //item的高度 + if (listAdapter == null) { + return 0 ; + } + int totalHeight = 0; + for (int i = 0; i < listAdapter.getCount(); i++) { + View listItem = mAdapter.getView(i, null, listView); + listItem.measure(0, 0); //计算子项View 的宽高 //统计所有子项的总高度 + totalHeight += listItem.getMeasuredHeight()+listView.getDividerHeight(); + } + ViewGroup.LayoutParams params = listView.getLayoutParams(); + params.height = totalHeight; + listView.setLayoutParams(params); + return totalHeight; + } + public static void setGridViewHeight(PullToRefreshGridView gridview) { + // 获取gridview的adapter + ListAdapter listAdapter = gridview.getRefreshableView().getAdapter(); + if (listAdapter == null) { + return; + } + // 固定列宽,有多少列 + int numColumns= gridview.getRefreshableView().getNumColumns(); //5 + int totalHeight = 0; + // 计算每一列的高度之和 + for (int i = 0; i < listAdapter.getCount(); i += numColumns) { + // 获取gridview的每一个item + View listItem = listAdapter.getView(i, null, gridview); + listItem.measure(0, 0); + // 获取item的高度和 + totalHeight += listItem.getMeasuredHeight(); + } + // 获取gridview的布局参数 + ViewGroup.LayoutParams params = gridview.getLayoutParams(); + params.height = totalHeight; + gridview.setLayoutParams(params); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/SharePrefUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SharePrefUtil.java new file mode 100644 index 0000000..4de0cdb --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SharePrefUtil.java @@ -0,0 +1,311 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import android.content.Context; +import android.content.SharedPreferences; +import android.text.TextUtils; +import org.apache.commons.codec.binary.Base64; + +/** + * + * 类名称:SharePrefUtil 类描述:简单方便SharePref工具类呀,常用的保存于读取,对象也可哦~ 创建人:苏三元 时间:2015-9-2 + * 上午11:39:34 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class SharePrefUtil { + private final static String SP_NAME = Constant.SP_NAME; + public final static String SP_DOWN = "MYDOWN"; + private final static String SP_IS_FIRST_NAME = Constant.SP_IS_FIRST_NAME; + private final static int mode = Context.MODE_PRIVATE; + private static SharedPreferences sp; + + /** + * + * 类名称:KEY 类描述:自定义常量的key,方便使用 创建人:苏三元 时间:2015-9-2 上午11:41:14 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ + public interface KEY { + String FUNCTION_ALL_JSON = "all_function_json";// 所有的Funcation Json + String CATE_ALL_JSON = "all_cate_json";// 所有的目录 Json + } + + /** + * 保存布尔值 + * + * @param context + * @param key + * @param value + */ + public static void saveBoolean(Context context, String key, boolean value) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + sp.edit().putBoolean(key, value).commit(); + } + + /** + * 保存是否第一次使用APP saveIsFirstBoolean + * + * @param context + * @param key + * @param value + * void + */ + public static void saveIsFirstBoolean(Context context, String key, + boolean value) { + SharedPreferences sp1 = context.getSharedPreferences(SP_IS_FIRST_NAME, + mode); + sp1.edit().putBoolean(key, value).commit(); + } + + /** + * 取出是否第一次使用APP getIsFirstBoolean + * + * @param context + * @param key + * @param defValue + * @return boolean + */ + public static boolean getIsFirstBoolean(Context context, String key, + boolean defValue) { + SharedPreferences sp1 = context.getSharedPreferences(SP_IS_FIRST_NAME, + mode); + return sp1.getBoolean(key, defValue); + } + + /** + * 保存字符串 + * + * @param context + * @param key + * @param value + */ + public static void saveString(Context context, String key, String value) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + sp.edit().putString(key, value).commit(); + } + + public static void saveString(Context context, String spname, String key, + String value) { + SharedPreferences sp1 = context.getSharedPreferences(spname, mode); + sp1.edit().putString(key, value).commit(); + } + + public static void clear(Context context) { + sp = context.getSharedPreferences(SP_NAME, mode); + sp.edit().clear().commit(); + } + + /** + * 清除某一个sp + * + * @param context + * @param key + */ + public static void clear(Context context, String key) { + if (sp == null) + sp = context.getSharedPreferences(SP_NAME, 0); + sp.edit().remove(key).commit(); + } + + /** + * 保存long型 + * + * @param context + * @param key + * @param value + */ + public static void saveLong(Context context, String key, long value) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + sp.edit().putLong(key, value).commit(); + } + + /** + * 保存int型 + * + * @param context + * @param key + * @param value + */ + public static void saveInt(Context context, String key, int value) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + sp.edit().putInt(key, value).commit(); + } + + /** + * 保存float型 + * + * @param context + * @param key + * @param value + */ + public static void saveFloat(Context context, String key, float value) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + sp.edit().putFloat(key, value).commit(); + } + + /** + * 获取字符值 + * + * @param context + * @param key + * @param defValue + * @return + */ + public static String getString(Context context, String key, String defValue) { + if (context == null) { + return ""; + } + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + + } + return sp.getString(key, defValue); + } + + public static String getString(Context context, String spname, String key, + String defValue) { + SharedPreferences sp1 = context.getSharedPreferences(spname, mode); + return sp1.getString(key, defValue); + } + + /** + * 获取int值 + * + * @param context + * @param key + * @param defValue + * @return + */ + public static int getInt(Context context, String key, int defValue) { + + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + return sp.getInt(key, defValue); + } + + /** + * 获取long值 + * + * @param context + * @param key + * @param defValue + * @return + */ + public static long getLong(Context context, String key, long defValue) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + return sp.getLong(key, defValue); + } + + /** + * 获取float值 + * + * @param context + * @param key + * @param defValue + * @return + */ + public static float getFloat(Context context, String key, float defValue) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + return sp.getFloat(key, defValue); + } + + /** + * 获取布尔值 + * + * @param context + * @param key + * @param defValue + * @return + */ + public static boolean getBoolean(Context context, String key, + boolean defValue) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + return sp.getBoolean(key, defValue); + } + + /** + * 将对象进行base64编码后保存到SharePref中 + * + * @param context + * @param key + * @param object + */ + public static void saveObj(Context context, String key, Object object) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = null; + try { + oos = new ObjectOutputStream(baos); + oos.writeObject(object); + // 将对象的转为base64码 + + // Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,比如Base64, Hex, + // MD5,Phonetic and URLs等等。 + String objBase64 = new String(Base64.encodeBase64(baos + .toByteArray())); + + sp.edit().putString(key, objBase64).commit(); + oos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * 将SharePref中经过base64编码的对象读取出来 + * + * @param context + * @param key + * @param defValue + * @return + */ + public static Object getObj(Context context, String key) { + if (sp == null) { + sp = context.getSharedPreferences(SP_NAME, mode); + } + String objBase64 = sp.getString(key, null); + if (TextUtils.isEmpty(objBase64)) + return null; + + // 对Base64格式的字符串进行解码 + byte[] base64Bytes = Base64.decodeBase64(objBase64.getBytes()); + ByteArrayInputStream bais = new ByteArrayInputStream(base64Bytes); + + ObjectInputStream ois; + Object obj = null; + try { + ois = new ObjectInputStream(bais); + obj = (Object) ois.readObject(); + ois.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return obj; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ShareUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ShareUtils.java new file mode 100644 index 0000000..4455cc8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ShareUtils.java @@ -0,0 +1,241 @@ +package cn.shangyu.gdxzExpert.utils; + +import static cn.shangyu.gdxzExpert.utils.CommonUtil.FROMEXPERT; +import static cn.shangyu.gdxzExpert.utils.CommonUtil.FROMEXPERT1; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.text.TextUtils; + +import com.umeng.socialize.ShareAction; +import com.umeng.socialize.bean.SHARE_MEDIA; +import com.umeng.socialize.media.UMImage; +import com.umeng.socialize.media.UMWeb; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLConnection; + + +public class ShareUtils { + + // public final static UMSocialService mController = UMServiceFactory + // .getUMSocialService(Constant.DESCRIPTOR); + + /** + * 系统分享功能 + * + * @param context + * 上下文 + * @param activityTitle + * Activity的名字 + * @param msgTitle + * 消息标题 + * @param msgText + * 消息内容 + * @param imgPath + * 图片路径,不分享图片则传null + */ + public static void shareMsg(Context context, String msgTitle, + String msgText, String imgPath) { + Intent intent = new Intent(Intent.ACTION_SEND); + if (TextUtils.isEmpty(imgPath)) { + intent.setType("text/plain"); // 纯文本 + } else { + File f = new File(imgPath); + if (f != null && f.exists() && f.isFile()) { + intent.setType("image/jpg");// 图片 + Uri u = Uri.fromFile(f); + intent.putExtra(Intent.EXTRA_STREAM, u); + } + } + intent.putExtra(Intent.EXTRA_SUBJECT, msgTitle); + intent.putExtra(Intent.EXTRA_TEXT, msgText); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(Intent.createChooser(intent, "分享到")); + } + + /** + * 友盟分享 shareUmeng + * "?fromtype=doctor"用于分享区分是患者端还是专家端 + * @param context + * @param msgTitle + * @param msgText + * @param imgPath + * void + */ + public static void shareUmeng(Activity context, String msgTitle, + String msgContent, String msgSinaContent, String imgPath, + String msgUrl, Bitmap bitmap) { + // 配置需要分享的相关平台 + // configPlatforms(context); + // 设置分享的内容 + if(msgUrl!=null&&msgUrl.contains("?")) + { + msgUrl=msgUrl+FROMEXPERT1; + } + else + { + msgUrl=msgUrl+FROMEXPERT; + } + setShareContent(context, msgTitle, msgContent, msgSinaContent, imgPath, + msgUrl, bitmap); + + } + public static void shareUmeng(Activity context, String msgTitle, + String msgContent, String msgSinaContent, String imgPath, + String msgUrl, Bitmap bitmap,SHARE_MEDIA share_media) { + // 配置需要分享的相关平台 + // configPlatforms(context); + // 设置分享的内容 + if(msgUrl!=null&&msgUrl.contains("?")) + { + msgUrl=msgUrl+FROMEXPERT1; + } + else + { + msgUrl=msgUrl+FROMEXPERT; + } + setShareContentcustom(context, msgTitle, msgContent, msgSinaContent, imgPath, + msgUrl, bitmap,share_media); + + } + /** + * 根据不同的平台设置不同的分享内容
+ * + * @param context + * @param imgPath + * @param msgText + * @param msgTitle + * @param msgUrl + */ + + private static void setShareContent(Activity context, String msgTitle, + String msgContent, String msgSinaContent, String imgPath, + String msgUrl, Bitmap bitmap) { + UMImage shareImg;// 友盟分享的缩略图 + if (TextUtils.isEmpty(msgTitle)) { + msgTitle = ""; + } + if (TextUtils.isEmpty(msgContent)) { + msgContent = ""; + } + if (StringUtil.isEmpty(imgPath.replace(Url.urlHtml, ""))) { + shareImg = new UMImage(context, + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + if (bitmap != null) { + shareImg = new UMImage(context, bitmap); + } else { + shareImg = new UMImage(context, imgPath); + } + + } + shareImg.compressStyle = UMImage.CompressStyle.SCALE; + UMWeb web = new UMWeb(msgUrl); + web.setTitle(msgTitle);// 标题 + web.setThumb(shareImg); // 缩略图 + web.setDescription(msgContent);// 描述 + new ShareAction(context) + .withMedia(web) + .setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, + SHARE_MEDIA.SINA) + .setCallback(new UMengShareHelper(context).shareListener) + .open(); + + } + private static void setShareContentcustom(Activity context, String msgTitle, + String msgContent, String msgSinaContent, String imgPath, + String msgUrl, Bitmap bitmap,SHARE_MEDIA share_media) { + UMImage shareImg;// 友盟分享的缩略图 + if (TextUtils.isEmpty(msgTitle)) { + msgTitle = ""; + } + if (TextUtils.isEmpty(msgContent)) { + msgContent = ""; + } + if (StringUtil.isEmpty(imgPath.replace(Url.urlHtml, ""))) { + shareImg = new UMImage(context, + "http://doc.igandan.com/app/html/img/2016/20160714132557.png"); + } else { + if (bitmap != null) { + shareImg = new UMImage(context, bitmap); + } else { + shareImg = new UMImage(context, imgPath); + } + + } + shareImg.compressStyle = UMImage.CompressStyle.SCALE; + UMWeb web = new UMWeb(msgUrl); + web.setTitle(msgTitle);// 标题 + web.setThumb(shareImg); // 缩略图 + web.setDescription(msgContent);// 描述 + new ShareAction(context) + .withMedia(web) + .setPlatform(share_media) + .setCallback(new UMengShareHelper(context).shareListener) + .share(); + + } + public static Bitmap getBitmap(String url) { + Bitmap bm = null; + try { + URL iconUrl = new URL(url); + URLConnection conn = iconUrl.openConnection(); + HttpURLConnection http = (HttpURLConnection) conn; + + int length = http.getContentLength(); + + conn.connect(); + // 获得图像的字符流 + InputStream is = conn.getInputStream(); + BufferedInputStream bis = new BufferedInputStream(is, length); + bm = BitmapFactory.decodeStream(bis); + bis.close(); + is.close();// 关闭流 + } catch (Exception e) { + e.printStackTrace(); + } + return bm; + } + // /** + // * 配置分享平台参数
+ // * + // * @param context + // */ + // private static void configPlatforms(Context context) { + // // 添加新浪SSO授权 + // mController.getConfig().setSsoHandler(new SinaSsoHandler()); + // // 添加微信、微信朋友圈平台 + // addWXPlatform(context); + // mController.getConfig().setPlatforms(SHARE_MEDIA.WEIXIN, + // SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.SINA); + // } + + // /** + // * @param context + // * @功能描述 : 添加微信平台分享 + // * @return + // */ + // private static void addWXPlatform(Context context) { + // // 注意:在微信授权的时候,必须传递appSecret + // // wx967daebe835fbeac是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID + // String appId = "wxbf3658f5e674667c";// 这个填写通过的审核的APPID + // String appSecret = "c4505a04a9910c65efea8e11ffc93f92"; + // // 添加微信平台 + // UMWXHandler wxHandler = new UMWXHandler(context, appId, appSecret); + // wxHandler.addToSocialSDK(); + // // 支持微信朋友圈 + // UMWXHandler wxCircleHandler = new UMWXHandler(context, appId, appSecret); + // wxCircleHandler.setToCircle(true); + // wxCircleHandler.addToSocialSDK(); + // } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Sign.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Sign.java new file mode 100644 index 0000000..db5f217 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Sign.java @@ -0,0 +1,60 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; +import android.net.Uri; +import android.util.Base64; + +import org.json.JSONException; +import org.json.JSONObject; + +import com.google.gson.Gson; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +public class Sign { + // 固定 + public static final String PARTNERID = "medicoolgandan2017"; + + public static String getSign(Context context, String method, + String nonce_str, LinkedHashMap parameters) + throws Exception { + String sign; + // JSONObject jsonObject = new JSONObject(); + // String j_parameters = ""; + // //对parameters进行json_encode处理 + // try { + // if (parameters != null && !parameters.isEmpty()) { + // for (Map.Entry entry : parameters.entrySet()) { + // jsonObject.put(entry.getKey(), entry.getValue()); + // } + // j_parameters = jsonObject.toString(); + // } + // } catch (JSONException e) { + // e.printStackTrace(); + // } + Gson gson = new Gson(); + String j_parameters = gson.toJson(parameters); + // 拼接参数method=$method&nonce_str=$nonce_str¶meters=$parameters&partnerid=$partnerid + + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append("method=").append(method + "&") + .append("nonce_str=").append(nonce_str + "&") + .append("parameters=").append(j_parameters + "&") + .append("partnerid=" + PARTNERID); + System.out.println("stringBuffer=== " + stringBuffer); + // RSA加密 + byte[] bytes = RsaUtils.encryptData(stringBuffer.toString().getBytes(), + context); + + // base64_encodec + sign = Base64.encodeToString(bytes, Base64.DEFAULT); + + // urlencode + sign = Uri.encode(sign); + + return sign; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/SignUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SignUtil.java new file mode 100644 index 0000000..3e55e8d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SignUtil.java @@ -0,0 +1,127 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.UnsupportedEncodingException; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +public class SignUtil { + + public static String getSign(Map map) throws UnsupportedEncodingException{ + String secret=(String) map.get("timestamp"); + if(secret!=null){ + Set keySet=map.keySet(); + TreeSet sortSet=new TreeSet(); + sortSet.addAll(keySet); + String keyValueStr=""; + Iterator it=sortSet.iterator(); + while(it.hasNext()){ + String key=it.next(); + String value= map.get(key); + keyValueStr+=key+value; + } + keyValueStr = keyValueStr.replace(" ", ""); + keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret); + String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr); + String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr); + return base64Str; + }else{ + return ""; + } + } + + public static String getSign1(Map map) throws UnsupportedEncodingException{ + String secret=(String) map.get("timestamp"); + if(secret!=null){ + Set keySet=map.keySet(); + TreeSet sortSet=new TreeSet(); + sortSet.addAll(keySet); + String keyValueStr=""; + Iterator it=sortSet.iterator(); + while(it.hasNext()){ + String key=it.next(); + String value= map.get(key); + if("comment".equals(key)) + { + value= map.get(key).replace(" ", ""); + } + + keyValueStr+=key+value; + } + keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret); + String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr); + String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr); + return base64Str; + }else{ + return ""; + } + } + + public static String getSignObject(Map map) throws UnsupportedEncodingException{ + String secret=(String) map.get("timestamp"); + if(secret!=null){ + Set keySet=map.keySet(); + TreeSet sortSet=new TreeSet(); + sortSet.addAll(keySet); + String keyValueStr=""; + Iterator it=sortSet.iterator(); + while(it.hasNext()){ + String key=it.next(); + Object value=map.get(key); + keyValueStr+=key+value; + } + keyValueStr = keyValueStr.replace(" ", ""); + keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret); + String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr); + String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr); + return base64Str; + }else{ + return ""; + } + } + + public static String getSignObject1(Map map) throws UnsupportedEncodingException{ + String secret=(String) map.get("timestamp"); + if(secret!=null){ + Set keySet=map.keySet(); + TreeSet sortSet=new TreeSet(); + sortSet.addAll(keySet); + String keyValueStr=""; + Iterator it=sortSet.iterator(); + while(it.hasNext()){ + String key=it.next(); + Object value=map.get(key); + keyValueStr+=key+"="+value+"&"; + } + + return keyValueStr; + }else{ + return ""; + } + } + public static String getSignObject2(Map map) throws UnsupportedEncodingException{ + String secret=(String) map.get("timestamp"); + if(secret!=null){ + Set keySet=map.keySet(); + TreeSet sortSet=new TreeSet(); + sortSet.addAll(keySet); + String keyValueStr=""; + Iterator it=sortSet.iterator(); + while(it.hasNext()){ + String key=it.next(); + Object value= map.get(key); + keyValueStr+=key+value; + } + keyValueStr=keyValueStr+EncryptionKit.md5Encrypt(secret); + keyValueStr = keyValueStr.replaceAll("\"", ""); + keyValueStr = keyValueStr.replaceAll(":","="); + keyValueStr = keyValueStr.replaceAll(" ",""); + String Md5keyValueStr=EncryptionKit.md5Encrypt(keyValueStr); + String base64Str=Base64Util.encodeBase64URLSafeString(Md5keyValueStr); + return base64Str; + }else{ + return ""; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/SmsObserver.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SmsObserver.java new file mode 100644 index 0000000..80557a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/SmsObserver.java @@ -0,0 +1,69 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.database.ContentObserver; +import android.database.Cursor; +import android.net.Uri; +import android.os.Handler; +import android.util.Log; +import cn.shangyu.gdxzExpert.activity.LoginActivity; + +@SuppressLint("NewApi") +public class SmsObserver extends ContentObserver { + + private Context mContext; + private Handler mHandler; + + public SmsObserver(Context context, Handler handler) { + super(handler); + mContext = context; + mHandler = handler; + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + super.onChange(selfChange, uri); + // 短信内容变化时,第一次调用该方法时短信内容并没有写入到数据库中,return + System.out.println("bbbbbbbbbbbbbbbbbbbbbbb"+" "+uri.toString()); + if (uri.toString().equals("content://sms/raw")) { + return; + } + getValidateCode();//获取短信验证码 + + } + + /** + * 获取短信验证码 + */ + private void getValidateCode() { + String code = ""; + Uri inboxUri = Uri.parse("content://sms/inbox"); + Cursor c = mContext.getContentResolver().query(inboxUri, new String[]{"_id", "address", "read", "body"}, null, null, "_id desc");// + + if (c != null) { + if (c.moveToFirst()) { + String address = c.getString(c.getColumnIndex("address")); + String body = c.getString(c.getColumnIndex("body")); + + //13162364720为发件人的手机号码 +// if (!address.equals("13162364720")) { +// return; +// } + Pattern pattern = Pattern.compile("(\\d{6})"); + Matcher matcher = pattern.matcher(body); + if (matcher.find()) { + code = matcher.group(0); + mHandler.obtainMessage(LoginActivity.MSG_RECEIVED_CODE, code).sendToTarget(); + } + + } + c.close(); + } + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/StaUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/StaUtil.java new file mode 100644 index 0000000..cb2f062 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/StaUtil.java @@ -0,0 +1,56 @@ +package cn.shangyu.gdxzExpert.utils; + +public class StaUtil { + //埋点统计 + public static String EXPERT_TAB_HOME="EXPERT_TAB_HOME"; + public static String EXPERT_TAB_HOME_STAY="EXPERT_TAB_HOME_STAY"; + public static String EXPERT_TAB_TEACH="EXPERT_TAB_TEACH"; + public static String EXPERT_TAB_MEETING="EXPERT_TAB_MEETING"; + public static String EXPERT_TAB_EDUCATION="EXPERT_TAB_EDUCATION"; + public static String EXPERT_TAB_MY="EXPERT_TAB_MY"; + public static String EXPERT_HOME_SIGN_IN="EXPERT_HOME_SIGN_IN"; + public static String EXPERT_HOME_SIGN_IN_ALERT_NEWS="EXPERT_HOME_SIGN_IN_ALERT_NEWS"; + public static String EXPERT_HOME_SIGN_IN_AGAIN="EXPERT_HOME_SIGN_IN_AGAIN"; + public static String EXPERT_HOME_MESSGAE="EXPERT_HOME_MESSGAE"; + public static String EXPERT_HOME_SHUFFLING="EXPERT_HOME_SHUFFLING"; + public static String EXPERT_HOME_MEETING="EXPERT_HOME_MEETING"; + public static String EXPERT_HOME_MEETING_DETAILS="EXPERT_HOME_MEETING_DETAILS"; + public static String EXPERT_HOME_PROJECT="EXPERT_HOME_PROJECT"; + public static String EXPERT_HOME_PROJECT_CHANGE="EXPERT_HOME_PROJECT_CHANGE"; + public static String EXPERT_HOME_CLASS_QUALITY="EXPERT_HOME_CLASS_QUALITY"; + public static String EXPERT_HOME_CLASS_QUALITY_MORE="EXPERT_HOME_CLASS_QUALITY_MORE"; + public static String EXPERT_HOME_ICON_CLASS_QUALITY="EXPERT_HOME_ICON_CLASS_QUALITY"; + public static String EXPERT_TAB_EDUCATION_CLASS_QUALITY="EXPERT_TAB_EDUCATION_CLASS_QUALITY"; + public static String EXPERT_CLASS_QUALITY="EXPERT_CLASS_QUALITY"; + public static String EXPERT_CLASS_QUALITY_DETAILS="EXPERT_CLASS_QUALITY_DETAILS"; + public static String EXPERT_MY_CLASS_QUALITY="EXPERT_MY_CLASS_QUALITY"; + public static String EXPERT_MY_CLASS_QUALITY_DETAIL="EXPERT_MY_CLASS_QUALITY_DETAILS"; + public static String EXPERT_PUSH_CLASS_QUALITY_DETAILS="EXPERT_PUSH_CLASS_QUALITY_DETAILS"; + public static String EXPERT_CLASS_QUALITY_PAY="EXPERT_CLASS_QUALITY_PAY"; + public static String EXPERT_CLASS_QUALITY_PAYING="EXPERT_CLASS_QUALITY_PAYING"; + public static String EXPERT_CLASS_QUALITY_PAYING_TYPE="EXPERT_CLASS_QUALITY_PAYING_TYPE"; + public static String EXPERT_CLASS_QUALITY_PAYING_STATUS="EXPERT_CLASS_QUALITY_PAYING_STATUS"; + public static String EXPERT_HOME_PLAYBACK="EXPERT_HOME_PLAYBACK"; + public static String EXPERT_HOME_PLAYBACK_MORE="EXPERT_HOME_PLAYBACK_MORE"; + public static String EXPERT_HOME_GUIDE_CHECK="EXPERT_HOME_GUIDE_CHECK"; + public static String EXPERT_HOME_GUIDE_DOWNLOAD="EXPERT_HOME_GUIDE_DOWNLOAD"; + public static String EXPERT_HOME_GUIDE_MORE="EXPERT_HOME_GUIDE_MORE"; + public static String EXPERT_HOME_COURSEWARE_CHECK="EXPERT_HOME_COURSEWARE_CHECK"; + public static String EXPERT_HOME_COURSEWARE_MORE="EXPERT_HOME_COURSEWARE_MORE"; + public static String EXPERT_HOME_ICON_COURSEWARE="EXPERT_HOME_ICON_COURSEWARE"; + public static String EXPERT_TAB_EDUCATION_COURSEWARE="EXPERT_TAB_EDUCATION_COURSEWARE"; + public static String EXPERT_COURSEWARE_DETAILS="EXPERT_COURSEWARE_DETAILS"; + public static String EXPERT_PUSH_COURSEWARE_DETAILS="EXPERT_PUSH_COURSEWARE_DETAILS"; + public static String EXPERT_COURSEWARE_LIST="EXPERT_COURSEWARE_LIST"; + public static String EXPERT_OPEN_BIGVERSION="EXPERT_OPEN_BIGVERSION"; + public static String EXPERT_EXIT_BIGVERSION="EXPERT_EXIT_BIGVERSION"; + + + + + + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/StreamTool.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/StreamTool.java new file mode 100644 index 0000000..cc490b0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/StreamTool.java @@ -0,0 +1,17 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.io.ByteArrayOutputStream; +import java.io.InputStream; + +public class StreamTool { + public static byte[] readInputStream(InputStream instream) throws Exception { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[1204]; + int len = 0; + while ((len = instream.read(buffer)) != -1) { + outStream.write(buffer, 0, len); + } + instream.close(); + return outStream.toByteArray(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/StringUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/StringUtil.java new file mode 100644 index 0000000..de98ad6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/StringUtil.java @@ -0,0 +1,505 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.text.Html; +import android.text.TextUtils; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class StringUtil { + public static String TOPIC; + public static boolean IS_PUBLISH_TOPIC = false; + public static String ReplaceLike(String Cent, String Like) + { +// Regex objRegex = new Regex(Cent); +// Cent=objRegex.replace(Cent, "" + Like + ""); + Cent=Cent.replace(Like,"" + Like + ""); + return Cent; + } + //只需要将半角字符转换为全角字符 + public static String ToSBC(String input) { + char c[] = input.toCharArray(); + for (int i = 0; i < c.length; i++) { + if (c[i] == ' ') { + c[i] = '\u3000'; + } else if (c[i] < '\177') { + c[i] = (char) (c[i] + 65248); + } + } + return new String(c); + } + //¥ 获取人民币符号 + public static String getYen(){ + return String.valueOf(Html.fromHtml("¥")); + } + public static String fenGetYuanFormat1(String fen) + { + if(StringUtil.isEmpty(fen)||Integer.valueOf(fen)<0.0001) + { +// return getYen()+"0.00"; + return "免费"; + } + + else + { + return getYen()+String.format("%.2f",Integer.valueOf(fen)/100.0); + } + + + } + public static String fenGetYuanFormat(String fen) + { + if(StringUtil.isEmpty(fen)||Integer.valueOf(fen)<0.0001) + { + return getYen()+"0.00"; +// return "免费"; + } + + else + { + return getYen()+String.format("%.2f",Integer.valueOf(fen)/100.0); + } + + + } + /** 判断字符串是否有值,如果为null或者是空字符串或者只有空格或者为"null"字符串,则返回true,否则则返回false */ + public static boolean isEmpty(String value) { + if (!TextUtils.isEmpty(value) && !"".equalsIgnoreCase(value.trim()) + && !"null".equalsIgnoreCase(value.trim())) { + return false; + } else { + return true; + } + } + + /** 判断code不为空,不为"null",并且code不等于"1" */ + public static boolean isOneToCode(String code) { + if (!TextUtils.isEmpty(code) && !"null".equalsIgnoreCase(code) + && !"1".equals(code)) { + return true; + } else { + return false; + } + } + + /** + * 判断给定字符串是否空白串 空白串是指由空格、制表符、回车符、换行符组成的字符串 若输入字符串为null或空字符串,返回true + */ + public static boolean isBland(CharSequence input) { + if (input == null || "".equals(input) || "null".equals(input)) + return true; + + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + if (c != ' ' && c != '\t' && c != '\r' && c != '\n') { + return false; + } + } + return true; + } + + /** + * 处理空字符串 + * + * @param str + * @return String + */ + public static String doEmpty(String str) { + return doEmpty(str, ""); + } + + /** + * 处理空字符串 + * + * @param str + * @param defaultValue + * @return String + */ + public static String doEmpty(String str, String defaultValue) { + if (str == null || str.equalsIgnoreCase("null") + || str.trim().equals("") || str.trim().equals("-请选择-")) { + str = defaultValue; + } else if (str.startsWith("null")) { + str = str.substring(4, str.length()); + } + return str.trim(); + } + + /** + * 请选择 + */ + final static String PLEASE_SELECT = "请选择..."; + + public static boolean notEmpty(Object o) { + return o != null && !"".equals(o.toString().trim()) + && !"null".equalsIgnoreCase(o.toString().trim()) + && !"undefined".equalsIgnoreCase(o.toString().trim()) + && !PLEASE_SELECT.equals(o.toString().trim()); + } + + public static boolean empty(Object o) { + return o == null || "".equals(o.toString().trim()) + || "null".equalsIgnoreCase(o.toString().trim()) + || "undefined".equalsIgnoreCase(o.toString().trim()) + || PLEASE_SELECT.equals(o.toString().trim()); + } + + public static boolean num(Object o) { + int n = 0; + try { + n = Integer.parseInt(o.toString().trim()); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + if (n > 0) { + return true; + } else { + return false; + } + } + + public static boolean decimal(Object o) { + double n = 0; + try { + n = Double.parseDouble(o.toString().trim()); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + if (n > 0.0) { + return true; + } else { + return false; + } + } + + /** + * 给JID返回用户名 + * + * @param Jid + * @return + */ + public static String getUserNameByJid(String Jid) { + if (empty(Jid)) { + return null; + } + if (!Jid.contains("@")) { + return Jid; + } + return Jid.split("@")[0]; + } + + /** + * 给用户名返回JID + * + * @param jidFor + * 域名//如ahic.com.cn + * @param userName + * @return + */ + public static String getJidByName(String userName, String jidFor) { + if (empty(jidFor) || empty(jidFor)) { + return null; + } + return userName + "@" + jidFor; + } + + /** + * 给用户名返回JID,使用默认域名ahic.com.cn + * + * @param userName + * @return + */ + public static String getJidByName(String userName) { + String jidFor = "swinner.com"; + return getJidByName(userName, jidFor); + } + + /** + * 根据给定的时间字符串,返回月 日 时 分 秒 + * + * @param allDate + * like "yyyy-MM-dd hh:mm:ss SSS" + * @return + */ + public static String getMonthTomTime(String allDate) { + return allDate.substring(5, 19); + } + + /** + * 根据给定的时间字符串,返回月 日 时 分 月到分钟 + * + * @param allDate + * like "yyyy-MM-dd hh:mm:ss SSS" + * @return + */ + public static String getMonthTime(String allDate) { + return allDate.substring(5, 16); + } + + /** + * + * 将一个字符串转化为输入流 + */ + + public static InputStream getStringStream(String sInputString) { + + if (sInputString != null && !sInputString.trim().equals("")) { + + try { + + ByteArrayInputStream tInputStringStream = new ByteArrayInputStream( + sInputString.getBytes()); + + return tInputStringStream; + + } catch (Exception ex) { + + ex.printStackTrace(); + + } + + } + + return null; + + } + + /** + * + * 将一个输入流转化为字符串 + */ + + public static String getStreamString(InputStream tInputStream) { + + if (tInputStream != null) { + + try { + + BufferedReader tBufferedReader = new BufferedReader( + new InputStreamReader(tInputStream)); + + StringBuffer tStringBuffer = new StringBuffer(); + + String sTempOneLine = new String(""); + + while ((sTempOneLine = tBufferedReader.readLine()) != null) { + + tStringBuffer.append(sTempOneLine); + + } + + return tStringBuffer.toString(); + + } catch (Exception ex) { + + ex.printStackTrace(); + + } + + } + + return null; + + } + + /** + * unicode转码 + * + * @param theString + * @return + */ + + public static String decodeUnicode(String theString) { + char aChar; + int len = theString.length(); + StringBuffer outBuffer = new StringBuffer(len); + for (int x = 0; x < len;) { + aChar = theString.charAt(x++); + if (aChar == '\\') { + aChar = theString.charAt(x++); + if (aChar == 'u') { + // Read the xxxx + int value = 0; + for (int i = 0; i < 4; i++) { + aChar = theString.charAt(x++); + switch (aChar) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + value = (value << 4) + aChar - '0'; + break; + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + value = (value << 4) + 10 + aChar - 'a'; + break; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + value = (value << 4) + 10 + aChar - 'A'; + break; + default: + throw new IllegalArgumentException( + "Malformed \\uxxxx encoding."); + } + + } + outBuffer.append((char) value); + } else { + if (aChar == 't') + aChar = '\t'; + else if (aChar == 'r') + aChar = '\r'; + else if (aChar == 'n') + aChar = '\n'; + else if (aChar == 'f') + aChar = '\f'; + outBuffer.append(aChar); + } + } else + outBuffer.append(aChar); + } + return outBuffer.toString(); + } + + /*** + * + * @param input + * : 银行卡号,例如"6225880137706868" + * @return + */ + public static String formBankCard(String input) { + // String result = input.replaceAll("([\\d]{4})(?=\\d)", "$1 "); + String temp = ""; + int len = input.length(); + switch (len) { + case 16: + temp = input.substring(0, 4).concat("********") + .concat(input.substring(12)); + break; + case 17: + case 18: + case 19: + temp = input.substring(0, 4).concat("************") + .concat(input.substring(16)); + break; + default: + String moddle = ""; + for (int i = 0, j = len - 8; i < j; i++) { + moddle += "*"; + } + temp = input.substring(0, 4).concat(moddle) + .concat(input.substring(len - 4)); + break; + } + String result = temp.replaceAll("([\\d]|[*]){4}(?!$)", "$0 "); + return result; + } + + /*** + * + * @param input + * : 银行卡号,例如"6225880137706868" : 银行卡号,例如"***********06868" + * @return + */ + public static String formBankCardBefore(String input) { + // String result = input.replaceAll("([\\d]{4})(?=\\d)", "$1 "); + String temp = ""; + int len = input.length(); + switch (len) { + case 16: + temp = input.substring(0, 0).concat("************") + .concat(input.substring(12)); + break; + case 17: + case 18: + case 19: + temp = input.substring(0, 0).concat("****************") + .concat(input.substring(15)); + break; + default: + String moddle = ""; + for (int i = 0, j = len - 8; i < j; i++) { + moddle += "*"; + } + temp = input.substring(0, 4).concat(moddle) + .concat(input.substring(len - 4)); + break; + } + String result = temp.replaceAll("([\\d]|[*]){4}(?!$)", "$0 "); + return result; + } + + public static int getnum() { + Random random = new Random();// 定义随机类 + int result = random.nextInt(9);// 返回[0,9)集合中的整数,注意不包括9 + return result + 1; // +1后,[0,9)集合变为[1,10)集合,满足要求 + } + + public static String getRandomString(int length) { + String str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + Random random = new Random(); + StringBuffer sb = new StringBuffer(); + for (int i = 0; i < length; i++) { + int number = random.nextInt(62); + sb.append(str.charAt(number)); + } + return sb.toString(); + } + + /** + * string 分隔 + * @param content + * @param len + * @param k 最大分隔k组 + * @return + */ + public static ArrayList stringArray(String content, int len,int k){ //字符串对象,分割长度 + int length = content.length(); + List list = new ArrayList(); + + //进行判断,切割的字符串长度是否能够整除切割长度 + if(length%len != 0){ + int i=0; + for(;i) list; + + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/TikaUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/TikaUtil.java new file mode 100644 index 0000000..e2cf819 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/TikaUtil.java @@ -0,0 +1,107 @@ +package cn.shangyu.gdxzExpert.utils; + + + +import org.apache.commons.codec.digest.DigestUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.math.BigInteger; +import java.nio.ByteBuffer; +import java.nio.MappedByteBuffer; +import java.nio.channels.FileChannel; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * Created by wangchengxin on 2018/12/13. + * 判断文件完整性 + */ + +public class TikaUtil { +// public static boolean isFileintact(File file){ +// try { +// Tika tika = new Tika(); +// tika.parseToString(file); +// //System.out.println(sb); +// return true; +// } catch (TikaException e) { +// e.printStackTrace(); +// return false; +// } catch (Exception e) { +// e.printStackTrace(); +// +// return false; +// } +// } + + /** + * get file md5 + * @param file + * @return + * @throws NoSuchAlgorithmException + * @throws IOException + */ + public static String getFileMD5(File file) { + if (!file.isFile()) { + return null; + } + MessageDigest digest; + FileInputStream in; + byte buffer[] = new byte[1024]; + int len; + try { + digest = MessageDigest.getInstance("MD5"); + in = new FileInputStream(file); + while ((len = in.read(buffer, 0, 1024)) != -1) { + digest.update(buffer, 0, len); + } + in.close(); + BigInteger bigInt = new BigInteger(1, digest.digest()); + return bigInt.toString(16); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + public static String getMD5Three(String path) { + File file = new File(path); + String value = null; + FileInputStream in = null; + try { + in = new FileInputStream(file); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + try { + MappedByteBuffer byteBuffer = in.getChannel().map(FileChannel.MapMode.READ_ONLY, 0, file.length()); + MessageDigest md5 = MessageDigest.getInstance("MD5"); + md5.update(byteBuffer); + BigInteger bi = new BigInteger(1, md5.digest()); + value = bi.toString(16); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (null != in) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + System.out.println(value); + return value; + } + + + + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ToastUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ToastUtil.java new file mode 100644 index 0000000..71b7499 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ToastUtil.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * 苏三元 + * 河南商宇 + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.utils; + +import android.os.Handler; +import android.os.Looper; +import android.widget.Toast; + + + +public class ToastUtil { + + private static Handler handler = new Handler(Looper.getMainLooper()); + + private static Toast toast = null; + + private static Object synObj = new Object(); + + public static void showMessage(final String msg) { + showMessage(msg, Toast.LENGTH_SHORT); + } + + /** + * 根据设置的文本显示 + * @param msg + */ + public static void showMessage(final int msg) { + showMessage(msg, Toast.LENGTH_SHORT); + } + + /** + * 显示一个文本并且设置时长 + * @param msg + * @param len + */ + public static void showMessage(final CharSequence msg, final int len) { + if (msg == null || msg.equals("")) { + LogUtil.w("[ToastUtil] response message is null."); + return; + } + handler.post(new Runnable() { + @Override + public void run() { + synchronized (synObj) { //加上同步是为了每个toast只要有机会显示出来 + if (toast != null) { + //toast.cancel(); + toast.setText(msg); + toast.setDuration(len); + } else { + toast = Toast.makeText(UIUtils.getContext(), msg, len); + } + toast.show(); + } + } + }); + } + + /** + * 资源文件方式显示文本 + * @param msg + * @param len + */ + public static void showMessage(final int msg, final int len) { + handler.post(new Runnable() { + @Override + public void run() { + synchronized (synObj) { + if (toast != null) { + //toast.cancel(); + toast.setText(msg); + toast.setDuration(len); + } else { + toast = Toast.makeText(UIUtils.getContext(), msg, len); + } + toast.show(); + } + } + }); + } + + /** + * + * 创建一个新的实例 CustomToast. + * @param context 上下文 + * @param text 吐司内容 + * @param time 显示时间LENGTH_LONG=1或者LENGTH_SHORT=0 + */ + public static void showToast(String msg){ +// new CustomToast(UIUtils.getContext(),msg,0); + showMessage(msg, Toast.LENGTH_SHORT); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java new file mode 100644 index 0000000..3444e0a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UIUtils.java @@ -0,0 +1,217 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.app.ActivityManager; +import android.app.ActivityManager.RunningAppProcessInfo; +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.drawable.Drawable; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.os.Handler; +import android.view.View; +import android.widget.Toast; + +import java.util.List; + +import cn.shangyu.gdxzExpert.application.BaseApplication; +/** + * + * UIUtils.java + * @author gaofei + * @date 2015-8-31 上午9:54:49 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:一些基本的工具类,1、获取上下文 2、得到主线程id以及主线程 3、得到handler 4、获取资源文件 + * 6、把资源id转化为string,7、把资源id转化为drawable 8、把资源id转化为stringArray 9、dip--->px 10、px---->dp + * 11、java代码区设置颜色选择器的方法 12、资源id获得颜色 14、检测网络是否可用 15 、检测Sdcard是否存在 + * + * 等等。 + */ +public class UIUtils { + + private static Toast mToast; + //得到上下文 + public static Context getContext(){ + return BaseApplication.getContext(); + } + //得到主线程id + public static int getMainThreadId(){ + return BaseApplication.getMainThreadId(); + } + //得到主线程 + public static Thread getMainThread(){ + return BaseApplication.getMainThread(); + } + //得到handler + public static Handler getHandler(){ + return BaseApplication.getHandler(); + } + + //把资源id转化为string + public static String getString(int id){ + return getContext().getString(id); + } + //把资源id转化为drawable + public static Drawable getDrawable(int id){ + return getContext().getResources().getDrawable(id); + } + //把资源id转化为stringArray + public static String[] getStringArray(int id){ + return getContext().getResources().getStringArray(id); + } + + //dip--->px 1dp = 1px 1dp = 2px + public static int dip2px(int dip){ + //dp和px的转换关系比例值 + float density = getContext().getResources().getDisplayMetrics().density; + return (int)(dip*density+0.5); + } + //px---->dp + public static int px2dip(int px){ + //dp和px的转换关系比例值 + float density = getContext().getResources().getDisplayMetrics().density; + return (int)(px/density+0.5); + } + + //判断是否是主线的方法 + public static boolean isRunInMainThread(){ + return getMainThreadId() == android.os.Process.myTid(); + } + + /** + * 在主线程执行runnable + */ + public static boolean post(Runnable runnable) { + return getHandler().post(runnable); + } + + //保证当前的UI操作在主线程里面运行 + public static void runInMainThread(Runnable runnable){ + if(isRunInMainThread()){ + //如果现在就是在珠现场中,就直接运行run方法 + runnable.run(); + }else{ + //否则将其传递到主线程中运行 + post(runnable); + } + } + + //java代码区设置颜色选择器的方法 + public static ColorStateList getColorStateList(int mTabTextColorResId) { + return getContext().getResources().getColorStateList(mTabTextColorResId); + } + /** + * 把xml文件转化为view + * + */ + public static View inflate(int id){ + return View.inflate(getContext(), id, null); + } + + public static int getDimens(int id) { + //根据dimens中提供的id,将其对应的dp值转换成相应的像素值大小 + return UIUtils.getContext().getResources().getDimensionPixelSize(id); + } + + public static void postDelayed(Runnable runnable,long delayTime) { + getHandler().postDelayed(runnable, delayTime); + } + + public static void removeCallback(Runnable runnable) { + //移除在当前handler中维护的任务(传递进来的任务) + getHandler().removeCallbacks(runnable); + + } + /** + * 资源id获得颜色 + * + */ + public static int getColor(int id) { + return getContext().getResources().getColor(id); + } + + + /** + * + * @author gaofei + * @date 2015-9-6 下午7:41:31 + * + * 功能说明:检测网络是否可用 + */ + public static boolean isNetWorkConnected(Context context) { + if (context != null) { + ConnectivityManager mConnectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo(); + if (mNetworkInfo != null) { + return mNetworkInfo.isAvailable(); + } + } + return false; + } + + /** + * + * @author gaofei + * @date 2015-9-6 下午7:41:31 + * + * 功能说明:检测Sdcard是否存在 + */ + public static boolean isExitsSdcard() { + if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) + return true; + else + return false; + } + + /** + * + * isLogined + * 判断是否登录,以后要加上容联的,以及自动登录需要考虑,现在只是简单读取sp文件 + * true表示已登录 + * @return + * boolean + */ + public static boolean isLogined() { + // TODO Auto-generated method stub + return SharePrefUtil.getBoolean(getContext(), Constant.IS_LOGIN, false); + } + + public static boolean isBackground() { + ActivityManager activityManager = (ActivityManager) getContext() + .getSystemService(Context.ACTIVITY_SERVICE); + List appProcesses = activityManager + .getRunningAppProcesses(); + for (RunningAppProcessInfo appProcess : appProcesses) { + if (appProcess.processName.equals( getContext() .getPackageName())) { + /* + BACKGROUND=400 EMPTY=500 FOREGROUND=100 + GONE=1000 PERCEPTIBLE=130 SERVICE=300 ISIBLE=200 + */ +// LogUtil.i( getContext() .getPackageName(), "appimportace =" +// + appProcess.importance +// + ",context.getClass().getName()=" +// + getContext() .getClass().getName()); + if (appProcess.importance != RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { +// LogUtil.i( getContext() .getPackageName(), "处于后台" +// + appProcess.processName); + return true; + } else { +// LogUtil.i( getContext() .getPackageName(), "处于前台" +// + appProcess.processName); + return false; + } + } + } + return false; + } +// public static Boolean isActivityBackground() +// { +// ActivityManager manager = (ActivityManager)getContext().getSystemService(Context.ACTIVITY_SERVICE); +// ActivityManager.RunningTaskInfo info = manager.getRunningTasks(1).get(0); +// String shortClassName = info.topActivity.getShortClassName(); // 类名 +// String className = info.topActivity.getClassName(); // 完整类名 +// String packageName = info.topActivity.getPackageName(); // 包 +// return true; +// } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/UMengShareHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UMengShareHelper.java new file mode 100644 index 0000000..1cc58d1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UMengShareHelper.java @@ -0,0 +1,73 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.content.Context; +import android.widget.Toast; + +import com.umeng.socialize.UMShareListener; +import com.umeng.socialize.bean.SHARE_MEDIA; + +import java.util.HashMap; +import java.util.Map; + +public class UMengShareHelper { + // 友盟6.4.5分享的帮助类 + private Context mContext; + + public UMengShareHelper(Context context) { + this.mContext = context; + } + + public UMShareListener shareListener = new UMShareListener() { + /** + * @descrption 分享开始的回调 + * @param platform + * 平台类型 + */ + @Override + public void onStart(SHARE_MEDIA platform) { + + } + + /** + * @descrption 分享成功的回调 + * @param platform + * 平台类型 + */ + @Override + public void onResult(SHARE_MEDIA platform) { + if (Constant.isShareGetPoint) { + Map param = new HashMap<>(); + param.put("score_type","5"); + HttpMD5SendInfoUtil.sendJsonPostParamtoNetSignMD5(Url.addBonusPoints, param, mContext); + } + Toast.makeText(mContext, "分享成功", Toast.LENGTH_LONG).show(); + Constant.isShareGetPoint = false; + } + + /** + * @descrption 分享失败的回调 + * @param platform + * 平台类型 + * @param t + * 错误原因 + */ + @Override + public void onError(SHARE_MEDIA platform, Throwable t) { + Toast.makeText(mContext, "分享失败" + t.getMessage(), Toast.LENGTH_LONG) + .show(); + Constant.isShareGetPoint = false; + } + + /** + * @descrption 分享取消的回调 + * @param platform + * 平台类型 + */ + @Override + public void onCancel(SHARE_MEDIA platform) { + Toast.makeText(mContext, "分享取消", Toast.LENGTH_LONG).show(); + Constant.isShareGetPoint = false; + } + }; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/UpdateVersionUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UpdateVersionUtils.java new file mode 100644 index 0000000..49d930b --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/UpdateVersionUtils.java @@ -0,0 +1,337 @@ +package cn.shangyu.gdxzExpert.utils; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.view.View; +import android.view.View.OnClickListener; + +import com.github.dfqin.grantor.PermissionListener; +import com.github.dfqin.grantor.PermissionsUtil; +import com.lidroid.xutils.HttpUtils; +import com.lidroid.xutils.exception.HttpException; +import com.lidroid.xutils.http.HttpHandler; +import com.lidroid.xutils.http.RequestParams; +import com.lidroid.xutils.http.ResponseInfo; +import com.lidroid.xutils.http.callback.RequestCallBack; +import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; + +import java.io.File; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import androidx.annotation.NonNull; +import cn.shangyu.gdxzExpert.BuildConfig; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.VersionBean; +import cn.shangyu.gdxzExpert.http.HttpHelper; +import cn.shangyu.gdxzExpert.ui.CustomProgressDialog; +import cn.shangyu.gdxzExpert.widget.ECAlertDialog; + +public class UpdateVersionUtils { + private static String des = null;// 版本描述 + private static String apkurl = null;// 新版本url + private static String version;// 版本 + public static CustomProgressDialog dialog; + private static ECAlertDialog buildAlert; + private static Context ct; + + /** + * 检查更新 + * + * @param + */ + public static void checkUpdate(Context context, final String url, final boolean isShowProgressDialog) { + ct = context; + if (0 == CommonUtil.isNetworkAvailable(context)) { + ToastUtil.showToast("无网络,请检查网络连接!"); + return; + } + if (isShowProgressDialog) { + dialog = (CustomProgressDialog) DialogUtil.createProgressDialog(context, "检查更新中..."); + dialog.show(); + } + + RequestParams params = new RequestParams(); + params.addBodyParameter("appType", String.valueOf(1));// 1专家端 2患者端 必填 + params.addBodyParameter("sysType", String.valueOf(1));// 1.android 2.ios + // 必填 + HttpHelper.loadData(HttpMethod.POST, url, params, + new RequestCallBack() { + + @Override + public void onSuccess(ResponseInfo arg0) { + // TODO Auto-generated method stub + LogUtil.i("数据请求成功: " + arg0.result); + checkIsUpdate(arg0.result,isShowProgressDialog); + } + + @Override + public void onFailure(HttpException arg0, String arg1) { + // TODO Auto-generated method stub + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + LogUtil.i("检查更新失败了: " + arg1); + if (isShowProgressDialog) { + ToastUtil.showToast("检查更新失败,请稍候再试"); + } + } + }); + } + + private static void checkIsUpdate(String result, boolean isShowProgressDialog) { + // TODO Auto-generated method stub + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + VersionBean versionBean = GsonTools.fromGsonToBean(result, VersionBean.class); + String code = versionBean.code; + String message = versionBean.message; + if ("1".equals(code)) { + if (versionBean.data == null) { + if (isShowProgressDialog) { + ToastUtil.showToast("当前为最新版本无需更新"); + } + return; + } + version = versionBean.data.version; + des = versionBean.data.intro; + apkurl = versionBean.data.path; + if (!StringUtil.isEmpty(version)) { + Pattern pattern = Pattern.compile("[0-9]*"); + Matcher isNum = pattern.matcher(version); + if(!isNum.matches()){ + if (isShowProgressDialog) { + ToastUtil.showToast("当前为最新版本无需更新"); + } + return; + } + } + if (StringUtil.isEmpty(version) || StringUtil.isEmpty(apkurl) || getVerCode() == -1 || getVerCode() >= Long.parseLong(version)) { + // 版本一致,没有新版本, + if (isShowProgressDialog) { + ToastUtil.showToast("当前为最新版本无需更新"); + } + } else { + // 有新版本,弹出一升级对话框 + if (getVerCode() < Long.parseLong(version)) { + showUpdateDialog(); + } +// showUpdateDialog(); + } + } else { + ToastUtil.showToast(message); + } + } + + private static void showUpdateDialog() { + if (StringUtil.isEmpty(des)) { + des = "有新的版本,是否更新?"; + } + buildAlert = ECAlertDialog.buildAlert(ct, des, + "下次再说", "后台升级", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) {// 取消 + // TODO Auto-generated method stub + buildAlert.dismiss(); + } + + }, new DialogInterface.OnClickListener() {// 下载升级 + + @Override + public void onClick(DialogInterface dialog, int which) { + // TODO Auto-generated method stub + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (com.github.dfqin.grantor.PermissionsUtil.hasPermission(ct, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 下载 + downloadApp(); + } else { + PermissionsUtil.requestPermission((Activity)ct, new PermissionListener() { + @Override + public void permissionGranted(@NonNull String[] permissions) { + // 下载 + downloadApp(); + + } + + @Override + public void permissionDenied(@NonNull String[] permissions) { + //用户拒绝了访问读写的申请 +// + } + + }, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}); + } + + } else { + // 下载 + downloadApp(); + } + + } + }); + buildAlert.setTitle(R.string.app_tip); + buildAlert.setCanceledOnTouchOutside(false); + buildAlert.show(); + } + + private static HttpHandler hand; + private static int progress = 0; + + private static void downloadApp() { + // 下载apk,并且安装 + if (Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED)) { + // sdcard存在 + HttpUtils http = new HttpUtils(); + //下载的路径,及app安装包的命名 + //*************************************************** + hand = http.download(apkurl, Environment + .getExternalStorageDirectory().getAbsolutePath() + + "/gdxzExpert/app" + "/gdxzExpert_" + version + ".apk", + false, // 如果目标文件存在,接着未完成的部分继续下载。服务器不支持RANGE时将从新下载。 + false, // 如果从请求返回信息中获取到文件名,下载完成后自动重命名。 + new RequestCallBack() { + + @Override + public void onStart() { + ToastUtil.showToast("后台下载中,下载完成自动安装。"); + // 显示更新进度对话框 + // updateDialog(); + } + + @Override + public void onLoading(long total, long current, + boolean isUploading) { + progress = (int) (current * 100 / total); + LogUtil.i("下载进度:"+progress); + // 设置进度值 + // setDialogProgress(progress); + } + + @Override + public void onSuccess(ResponseInfo responseInfo) { + ToastUtil.showToast("下载成功!"); + installAPK(responseInfo.result); + } + + @Override + public void onFailure(HttpException error, String msg) { +// ToastUtil.showToast("下载失败!"); + //maybe the file has downloaded completely +// if (msg.contains("maybe the file has downloaded completely")) { +// +// } + LogUtil.i("下载失败:"+error+msg); + } + }); + } else { + ToastUtil.showToast("SD卡已拔出,无法下载"); + return; + } + } + + /** + * 设置进度 setProgress + * + * @param progress + * void + */ + private void setDialogProgress(int progress) { + // TODO Auto-generated method stub + DialogUtil.setMessage("正在下载,已完成" + progress + "%"); + DialogUtil.setProgress(progress); + } + + /** + * 显示下载升级进度的对话框 updateDialog + * + * void + */ + private void updateDialog() { + // TODO Auto-generated method stub + DialogUtil.getMyProDialog(ct, "取消下载", "正在下载,已完成" + + progress + "%", new OnClickListener() { + + @Override + public void onClick(View v) { + // TODO Auto-generated method stub + // 调用cancel()方法停止下载 + hand.cancel(); + } + }); + } + + // 安装APK + private static void installAPK(File t) { + Intent intent = new Intent(); + intent.setAction("android.intent.action.VIEW"); + intent.addCategory("android.intent.category.DEFAULT"); + intent.setDataAndType(Uri.fromFile(t), + "application/vnd.android.package-archive"); + ct.startActivity(intent); + } + + /** + * 得到应用程序的版本 + */ + public static String getVersionName() { +// try { + // 管理手机的APP +// PackageManager packageManager = UIUtils.getContext().getPackageManager(); + // 得到APP功能清单文件 +// PackageInfo info = packageManager.getPackageInfo(UIUtils.getContext().getPackageName(), 0); + + return BuildConfig.VERSION_NAME; +// } catch (NameNotFoundException e) { +// e.printStackTrace(); +// } +// return null; + } + /** + * 得到应用程序的版本 + */ + public static int getVerCode() { +// int verCode = -1; +// try { +// // 管理手机的APP +// PackageManager packageManager = UIUtils.getContext().getPackageManager(); +// // 得到APP功能清单文件 +// PackageInfo info = packageManager.getPackageInfo(UIUtils.getContext().getPackageName(), 0); + return BuildConfig.VERSION_CODE; +// } catch (NameNotFoundException e) { +// e.printStackTrace(); +// } +// return verCode; + } + + /** + * 判断新的版本是否大于当前版本 + * */ + public static boolean isUpdataInfo(String versionName,String newVersion){ + String[] split = versionName.split("\\."); + String[] split1 = newVersion.split("\\."); + + int i = Integer.parseInt(split[0]); + int i1 = Integer.parseInt(split1[0]); + int j = Integer.parseInt(split[1]); + int j1 = Integer.parseInt(split1[1]); + int k = Integer.parseInt(split[2]); + int k1 = Integer.parseInt(split1[2]); + if (i1>i){ + return true; + }else if (j1>j&&i1>=i){ + return true; + }else if (k1>k&&j1>=j&&i1>=i){ + return true; + }else + return false; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/Url.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Url.java new file mode 100644 index 0000000..3baedae --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/Url.java @@ -0,0 +1,726 @@ +package cn.shangyu.gdxzExpert.utils; + +/** + * Url.java + * + * 功能说明:存放url + */ +public class Url { + // 肝胆服务器正式地址 + //记得把上报地址切到正式 + public static String urlimage = "http://app.igandan.com/app/";// ceshi2短信验证码 + public static String urlapp = "http://app.igandan.com/app/expertApp/";// 正式外网地址 + public static String url = "http://app.igandan.com/app/expert/";// 正式外网地址 v + public static String weurl = "https://wx.igandan.com/";// 微信服务器地址 + public static String urlping = "http://app.igandan.com//app/pingExpert/";// + public static String urlping2 = "http://app.igandan.com//app/pingExpertV2/";//ping2 + public static String getzcxy = "http://app.igandan.com/expert_zcxy.jsp";// 注册协议正式地址 + public static String getyyzc="https://doc.igandan.com/app/integral/permission_expert.html";//隐私政策 + public static String urlHtml = "http://doc.igandan.com/app/";// 静态资源访问地址( 图片、html等)正式地址 + public static String CrashUpload = "http://app.igandan.com/app/upload/uploadExpert";// 崩溃日志上传正式 地址 + public static String YKMedicionURl = "http://extraapi.meditool.cn/";// 医库用药网址 + public static String getpushChat = "http://wx.igandan.com/api/pushChat";// 微信推送 + public static String urlmyLan = "https://app.igandan.com/app/expertAPI/";//迈兰 + public static String qrCode = "http://wx.igandan.com/expert/expertcodeimg?expert_uuid=";//专家二维码页面分享链接: + public static String urlOutpatient = "http://wx.igandan.com/expert/outpatient_details?expert_uuid=";//门诊详情连接:http://wx.igandan.com/expert/outpatient_details?expert_uuid= + public static String url_path = "https://app.igandan.com/app"; + public static String videodetailURL = "http://wx.igandan.com/video/hcp_detial?share=1&uuid="; + public static String polvId = "21";//保利威视学员id + public static String scanurl = "https://wx.igandan.com/watchlive/sendWebsocketMsg"; + public static String zhibourl = weurl+"hcp/setInfo"; + public static String homeModalurl = urlmyLan+"homemodal"; + public static String PHP ="https://prod.hospital.open.igandanyiyuan.com";// php接口 互联网医院相关 + public static String modernHepatology="https://oss.igandan.com";//常用医学工具 + public static String appkey ="a1e5d9ca1d3fbae69532f134bf6cdee9"; + public static String appId ="1000001"; + public static String FileUrl="https://event.igandan.com/v1/eventLog/upload";//正式环境 + public static String youanapi ="https://yaylt.igandan.com/api"; + + + // 肝胆测试服务器地址 +// public static String urlimage = "https://dev-app.igandan.com/app/";// ceshi2短信验证码 +// public static String urlapp = "https://dev-app.igandan.com//app/expertApp/";// ceshi2地址 +// public static String urlping = "https://dev-app.igandan.com//app/pingExpert/";//ping +// public static String urlping2 = "https://dev-app.igandan.com//app/pingExpertV2/";//ping2 +// public static String url = "https://dev-app.igandan.com//app/expert/";// ceshi2地址 +// public static String weurl = "https://dev-wx.igandan.com/";// 微信服务器地址 +// public static String getzcxy = "http://app.igandan.com/expert_zcxy.jsp";// 注册协议正式地址 +// public static String getyyzc="https://doc.igandan.com/app/integral/permission_expert.html";//隐私政策 +// public static String urlHtml = "http://dev-doc.igandan.com/app/";// 静态资源访问地址(图片、html等)ceshi2 +// public static String CrashUpload = "https://dev-app.igandan.com/app/upload/uploadExpert";// 崩溃日志上传ceshi2 +// public static String YKMedicionURl = "http://extratest.meditool.cn/";// 医库用药网址 +// public static String getpushChat = "http://dev-wx.igandan.com/api/pushChat";// 微信推送 +// public static String urlmyLan = "https://dev-app.igandan.com/app/expertAPI/";//迈兰 +// public static String qrCode = "http://dev-wx.igandan.com/expert/expert" + +// "codeimg?expert_uuid=";//专家二维码页面分享链接: +// public static String urlOutpatient = "http://dev-wx.igandan.com/expert/outpatient_details?expert_uuid=";//门诊详情连接: +// +// public static String url_path = "https://dev-app.igandan.com/app"; +// public static String videodetailURL = "http://dev-wx.igandan.com/video/hcp_detial?share=1&uuid="; +// public static String polvId = "11";//保利威视学员id +// public static String scanurl = "https://dev-wx.igandan.com/watchlive/sendWebsocketMsg"; +// public static String zhibourl = weurl+"hcp/setInfo"; +// public static String homeModalurl = urlmyLan+"homemodal"; +// public static String PHP ="http://dev.hospital.open.igandanyiyuan.com";// php接口 互联网医院相关 +// public static String modernHepatology="https://dev-wx.igandan.com";//常用医学工具 +// public static String appkey = "26e8675f44565b1ed4eaaa0fcf3531d7"; +// public static String appId ="123456"; +// public static String youanapi ="https://dev-realyworld.igandan.com/api"; +// public static String FileUrl="https://dev-event.igandan.com/v1/eventLog/upload"; + + + /** + * 通用地址 + * */ + public static String getHospital=PHP+"/v1/user/doctor/multi";//互联网医院 + public static String getGray= urlmyLan+"getGray";//互联网医院回合数 + public static String getExpertPayInfo= urlmyLan+"getExpertPayInfo";//获取 收费随访信息 + public static String urlOutpatientnew =weurl+"wxPatient/index.htm#/outPatient?link=share&expertUuid=";//出诊 + public static final String expertDetail = urlapp + "expertDetail";// 专家详情 +// public static final String expertDetail = "http://ceshi2.dsz360.com/app/expertApp/expertDetail";// 专家详情 + public static String getDongTaiResList = urlapp+"getDongTaiResList";//肝胆医院详情-更多动态 + public static String WFurl = "http://api.med.wanfangdata.com.cn/Paper/";// 万方网址 + public static String WFSearch = WFurl + "Search";// 检索接口 + public static String WFDetail = WFurl + "Detail";// 论文详 情接口 + public static String WFDownload = WFurl + "Download";// 下载全文接口 + public static String WFTransfer = WFurl + "Transfer";// 外文原文传递接口 + //医库: + public static String YKURl = "http://api.doc.i-md.com/";// 医库网址 + public static String YKSearch = YKURl + "literature/search";// 检索接口 + public static String YKCheck_status = YKURl + "literature/check_status";// 检查状态 + public static String YKDownload = YKURl + "literature/download";// 下载 + public static String YKDetail = YKURl + "docs/info/";// 详情 + public static String YKSearchMdeicion = YKMedicionURl + "Apidrug/medisearch";// + public static String YKmdeicionList = YKMedicionURl + "Apidrug/druglist";// + public static String YKmdeicioninteractionList = YKMedicionURl + "Apidrug/interact";// + public static String YKmdeiciondruginfoList = YKMedicionURl + "Apidrug/druginfo";// + + // 商宇测试地址 + // public static String + // url="http://192.168.1.11:8080/mgdxz/app/expert/";//局域网测试(内测专用) + // public static String + // url="http://182.92.67.209:8080/mgdxz/app/expert/";//测试地址 + // public static String + // getzcxy="http://182.92.67.209:8080/mgdxz/zcxy.jsp";//注册协议测试地址 + // public static String + // urlHtml="http://182.92.67.209:8081/gdxz/";//静态资源访问地址(图片、html等)测试地址 + // public static String CrashUpload= + // "http://182.92.67.209:8080/mgdxz/app/upload/uploadExpert";//崩溃日志上传测试 地址. + + + // 帮助 + // http://182.92.67.209:8080/gdxz/question_expert.html + public static String gethelp = urlHtml + + "html/appHelp/698d65eade214a198210c5b78b0f877c.html"; + // 下面是相应的方法 +// public static String getregist = url + "regist";// 注册 + public static String getregist = urlmyLan + "regist";// 注册 +// public static String getlogin = url + "login";// 登录 + public static String getlogin = urlmyLan + "login";// 登录 + public static String getAccessToken = urlmyLan + "getAccessToken";// 获取token + public static String yxregist = urlmyLan + "createYXaccid";// 云信注册 + public static String yxrefresh = urlmyLan + "refreshYXToken";// 刷新token + public static String ishasysytem=urlmyLan+"hasUnreadMessage";//获取是否有系统未读消息 + public static String getShowMagazine=urlmyLan+"getShowMagazine";//是否打开期刊杂志 + public static String unReadList=urlmyLan+"unReadList";//新的获取未读消息 + public static String appMesageList=urlmyLan+"appMesageList";//新的消息列表 + public static String appMesageRead=urlmyLan+"appMesageRead";//新的阅读全部消息 + public static String readAll=urlmyLan+"readMessageAll";//一键已读全部消息 + public static String getmodify = url + "modify";// 修改个人资料 + public static String getnewsTagList = url + "newsTagList";// 新闻标签 +// public static String getconsultListHis = url + "consultListHis";// 公益咨询历史列表 + public static String getconsultListHis = urlmyLan + "consultListHis";// 公益咨询历史列表 +// public static String getnewConsultList = url + "newConsultList";// 新的公益咨询列表 + public static String getnewConsultList = urlmyLan + "newConsultList";// 新的公益咨询列表 + public static String getNewsListNew = url + "newsListNew";// 新闻 + public static final String medicine = url + "medicineByName";// 用药宝典 +// public static String getsendSms = url + "sendSmsNew";// 短信发送 + public static String getsendSms = urlmyLan + "smsSend";// 短信发送 + public static String getImagecode = urlimage + "VerifyImage/getcode";// 短信发送 + public static String getvalide = urlimage + "VerifyResult/valide";// + + public static String getvalidSmsCode = url + "validSmsCode";// 找回密码(1)验证短信验证码 +// public static String getupdatePwd = url + "updatePwd";// 找回密码(2)重置密码 + public static String getupdatePwd = urlmyLan + "updatePwd";// 找回密码(2)重置密码 + public static String getapplyList = url + "applyList";// 随访患者申请列表 + public static String relationRecordLately=urlmyLan+"relationRecordLately";//最近30天的随访记录 + public static String getapplyListOperate = url + "applyListOperate";// 随访患者申请处理 +// public static String getpatientList = url + "patientList";// 我的患者列表 + public static String getpatientList = url + "patientListByGBK";// 我的患者列表 + + public static String getQuickReplyList = url + "QuickReplyList";// 快捷回复list + public static String getaddQuickReply = url + "addQuickReply";// 添加快捷回复 + public static String getdeleteQuickReply = url + "deleteQuickReply";// 删除快捷回复 + + public static String getareaList = url + "areaList";// 行政区划列表 + public static String getpositionList = url + "positionList";// 获取职称列表 + public static String gethospitalList = url + "hospitalList";// 获取医院列表 + public static String getofficeList = url + "officeList";// 获取科室列表 + public static String getdisease = url + "disease";// 获取专长 + public static String getpushIM = url + "pushIM";// 发送消息(IM单聊) + public static String getresConsult = url + "resConsult";// 抢答公益咨询 + public static String getconsultImgList = urlmyLan + "consultDetail";// 公益咨询详情 +// public static String getconsultImgList = url + "consultImgList";// 公益咨询图片查询 + public static String getpatientDetail = url + "patientDetail";// 患者详情 + public static String gettoAddNickname = url + "toAddNickname";// 备注数据 + public static String getupdateNickname = url + "updateNickname";// 提交备注数据 + public static String getcaseDetail = url + "caseDetail";// 病历详情 + public static String getfeedBack = url + "feedBack";// 意见反馈 + public static String getnewsRollIndexNew = url + "newsRollIndexNew";// 首页轮播新闻 + public static String getnewsRollNew = url + "newsRollNew";// 新闻顶部轮播 + public static String getnewsListNew = url + "newsListNew";// 新闻列表 + + public static String getdefaultNewsListNew = url + "defaultNewsListNew";// 新闻列表全部数据 + + public static String getinvitePatient = url + "invitePatient";// 邀请患者 + public static String getgroupPushSystem = url + "groupPushSystem";// 群发消息 + public static String getgroupPush = url + "groupPushSystem";// 群发消息 + public static String getorderList = url + "orderList";// 订单列表 + public static String getorderDetailt = url + "orderDetail";// 订单详情 + public static String getcheckOrder = url + "checkOrder";// 专家审核订单 + public static String getcancelOrder = url + "cancelOrder";// 取消服务 + public static String getmonthDetail = url + "monthDetail";// 包月服务查看 + public static String getaddMonth = url + "addMonth";// 包月服务设置 + public static String getclinicDetail = url + "clinicDetail";// 门诊服务查看 + public static String getaddClinic = url + "addClinic";// 预约门诊服务设置1(价格、人次等设置) + public static String getaddClinicTime = url + "addClinicTime";// 预约门诊服务设置2(时间设置) + public static String getcallServiceDetail = url + "callServiceDetail";// 电话咨询服务查看 + public static String getcallServiceFee = url + "callServiceFee";// 电话咨询服务设置1(价格、时长等设置) + public static String getcallServiceTime = url + "callServiceTime";// 电话咨询服务设置2(时间设置) + + public static final String getRead = url + "read";// 获取阅读量加1和点赞接口 + public static final String getAgree = url + "agree";// 点赞 + public static final String getDisAgree = url + "disagree";// 取消点赞 + + public static final String getFollowUpList = url + "followUpList";// 获取随访计划 + public static final String getAddFollowUp = url + "addFollowUp";// 添加随访日程 + public static final String getAddFollowUps = url + "addFollowUps";// 添加随访计划 + public static final String getDeleteFollowUp = url + "deleteFollowUp";// 获取随访计划 + public static final String getAddConditionRecord = url + + "addConditionRecord";// 添加病情记录 + public static final String getConditionRecordList = url + + "conditionRecordList";// 获取病情记录 + public static final String getUpdateFollowUp = url + "upConditionRecord";// 修改 + public static final String getDelConditionRecord = url + + "delConditionRecord";// 删除病情记录 + + public static final String getmedicalRecordShareList = url+ "medicalRecordShareList";// 圈内交流经典病例 + public static final String CaseAssembleList = url+ "CaseAssembleList";// 圈内交流经典病例 + //精品课程 + public static final String getCourseIndex = urlmyLan + "excellencourseIndex";//精品课首页 + public static final String getCourseIndexIcon = urlmyLan + "listExcellencourseSpecialType"; + public static final String getCourseIndexSearch = urlmyLan + "excellencourseSearch";//搜索精品课 + public static final String getMoreByFirstType = urlmyLan + "excellencourseMoreByFirstType";//肝胆精品课列表 + public static final String getMoreBySpeciaType = urlmyLan + "excellencourseMoreBySpecialType";//精品小课等列表 + public static final String listExcellencourseSecondType = urlmyLan + "listExcellencourseSecondType";//二级列表 + public static final String listExcellencourseFirstType= urlmyLan + "listExcellencourseFirstType";//yi级列表 + public static final String getexcellencourseDetail = urlmyLan + "excellencourseDetail";//精品小课等详情页 + public static final String listExcellencourseComment = urlmyLan + "listExcellencourseComment";//evaluate + public static final String listExcellencourseCommentByUser = urlmyLan +"listExcellencourseCommentByUser"; + public static final String getExcellencourseCommentNote = urlmyLan +"getExcellencourseCommentNote"; + public static final String addExcellencourseComment = urlmyLan +"addExcellencourseComment";//add comment + public static final String listExcellencourseQA = urlmyLan +"listExcellencourseQA"; + public static final String listMyExcellencourse = urlmyLan +"listMyExcellencourse"; +// public static final String excellencoursePayPage = urlping2 +"excellencoursePayPage"; + public static final String excellencoursePayPage = urlimage +"expertPay/excellencoursePayPage"; +// public static final String createExcellencourseMixedOrder = urlping2 +"createExcellencourseMixedOrder"; + public static final String createExcellencourseMixedOrder =urlimage+"expertPay/createExcellencourseOrder"; +// public static final String payExcellencourseOrderSucceed = urlping2 +"payExcellencourseOrderSucceed"; + public static final String payExcellencourseOrderSucceed = urlimage +"expertPay/payExcellencourseOrderSuccess"; +// public static final String cancelExcellencourseOrder = urlping2 +"cancelExcellencourseOrder"; + public static final String cancelExcellencourseOrder = urlimage +"expertPay/cancelExcellencourseOrder"; +// public static final String payExcellencourseOrder = urlping2 +"payExcellencourseOrder"; + public static final String payExcellencourseOrder=urlimage+"expertPay/payExcellencourseOrderContinue"; + public static final String listExcellencourseOrder = urlmyLan +"listExcellencourseOrder"; + public static final String listExcellencourseOrderNoInvoice = urlmyLan +"listExcellencourseOrderNoInvoice"; + public static final String addExcellencourseOrderInvoice = urlmyLan +"addExcellencourseOrderInvoice"; + public static final String listExcellencourseOrderInvoice = urlmyLan +"listExcellencourseOrderInvoice"; + public static final String getExcellencourseOrderInvoice = urlmyLan +"getExcellencourseOrderInvoice"; + public static final String updateExcellencourseOrderInvoice = urlmyLan +"updateExcellencourseOrderInvoice"; + public static final String myWelfareCard=urlmyLan+"myWelfareCard"; + public static final String exchangeWelfareCard=urlmyLan+"exchangeWelfareCard"; + /** + * 肝系一生 + */ + public static final String mailanPage = urlmyLan +"mailanPage"; + /** + * 病例讨论 新接口 + */ + public static final String getAddCaseDiscuss = urlapp + "addCaseDiscuss";// 1.9.添加病例讨论 + public static final String getDelCaseDiscuss = urlapp + "delCaseDiscuss";// 1.10.删除病例讨论 + public static final String getUpCaseDiscuss = urlapp + "upCaseDiscuss";// 1.11.修改病例讨论 +// public static final String getCaseDiscussDetail = urlapp+ "caseDiscussDetail";// 1.12.病例讨论详情 + public static final String getCaseDiscussDetail = urlmyLan+ "caseDiscussDetail";// 1.12.病例讨论详情 +// public static final String getCaseDiscussList = urlapp + "caseDiscussList";// 1.13.病例讨论列表 + public static final String getCaseDiscussList = urlmyLan + "caseDiscussList";// 1.13.病例讨论列表 +// public static final String getCaseDiscussListByExpertUuid = urlapp +// + "caseDiscussListByExpertUuid";// 1.14.某个医生病例讨论列表 我发布的病例 + public static final String getCaseDiscussListByExpertUuid = urlmyLan + + "caseDiscussListByExpertUuid";// 1.14.某个医生病例讨论列表 我发布的病例 + // public static final String getAddComment = urlapp + "addComment";// + // 1.15.添加评论 + // public static final String getDeleteComment = urlapp + "deleteComment";// + // 1.16.删除评论 + // public static final String ge tCommentList = urlapp + "commentList";// + // 1.17.获取评论列表 + public static final String getTeachDataNew = url + "noviceListNew";// 新手教程 + public static final String getcollection = url + "collection";// 经典病例收藏 + public static final String getdiscollection = url + "discollection";// 经典病例取消收藏 + public static final String getcollectionList = url + "collectionList";// 圈内分型经典病例收藏列表 + public static String getsearchhelp = url + "searchhelp"; // 代查 +// public static final String getQkcollect = url + "qkcollect";// 期刊杂志收藏 + public static final String getQkcollect = url + "YiKuQKcollect";// 期刊杂志收藏 + public static final String getCollectList = url + "collectList";// 期刊杂志收藏列表 + public static final String getiscollectqk = url + "iscollectqk";// 期刊杂志是否收藏 + public static final String getWanFangCountByExpertUuid = url + + "WanFangCountByExpertUuid";// 万方期刊专家下载统计 + public static final String addLiteratureFind=urlmyLan+"addLiteratureFind";//文献代查 + public static final String getDaiChaWelfareCount=urlmyLan+"getDaiChaWelfareCount";//获取文献查找次数 + public static final String getaddWanFangCount = url + "addWanFangCount";// 万方期刊专家专家下载记录 + public static final String expertrollNew = urlapp+"expertrollNew";//新首页横幅 + //public static final String meetingListBySearchNew = urlapp+"meetingListBySearchNew";//肝胆会议列表-筛选 wcx + public static final String meetingListBySearchNew = urlmyLan+"meetingListBySearch";//新版会议筛选 +// public static final String meetingVideo = urlapp+"meetingVideo";//肝胆会议回放列表 + public static final String meetingVideo = urlmyLan+"meetingV2Video";//肝胆会议回放列表 + public static String getaddExpertCalendar = url + "addExpertCalendar";// 添加门诊日历接口: + public static String getdeleteExpertCalendar = url + "deleteExpertCalendar";// 删除门诊日历接口:备用 + public static String getupdataExpertCalendarForever = url + + "updataExpertCalendarForever";// 7、修改门诊日历(永久)接口: + public static String getupdataExpertCalendarTemporary = url + + "updataExpertCalendarTemporary";// 修改门诊日历(当前一周)接口 + public static String getgetExpertCalendar = url + "getExpertCalendar";// 获取专家出诊计划数据做回显 + public static String getflowerOrderRecord = url + "flowerOrderReco rd";// 收花统计 + public static String getcash = url + "cash"; // 提现 + public static String getmyAccount = url + "myAccount";// 我的账户 + public static String getmyBankList = url + "myBankList";// 我的银行卡列表 + public static String getpreCash = url + "preCash"; // 提现、 可提现订单列表 + public static String getmodifyPwd = url + "modifyPwd";// 修改密码 + public static String getmessageList = url + "messageList";// 系统消息列表 + public static String getcloseConsult = url + "closeConsult";// 关闭公益咨询 + public static String gettransactionRecords = url + "transactionRecords";// 交易记录 + public static String getGuideType = url + "guideType";// 治疗指南分类 + public static String getGuideList = url + "guideList";// 治疗指南列表 + public static String getMagazineType = url + "magazineType";// 期刊杂志分类 + + public static String getWfmagazineType = url + "wfmagazineType";// 万方期刊杂志分类 + public static String getCnmagazineType = url + "cnmagazineType";// 英语期刊杂志分类 + + public static String getGetMagazineByUuid = url + "getMagazineByUuid";// 根据UUID查询专期刊杂志 + public static String getCollect = url + "collect"; // 点击收藏 +// public static String getSearchLibrary = url + "searchLibrary"; // 3.83.图书搜索 + // public static String getCollectList = url + "collectList"; // 图书馆我的收藏 + public static String getMagazineList = url + "magazineList"; // 期刊杂志列表magazineList + public static String getmyPublishMessage = url + "myPublishMessage"; // 我发布的消息// + public static String getUpdateArticle = url + + "updateArticle";// 科普文章修改 + public static String getMoveScienceListNew = url + + "deletePolularScienceArticleNew";// 科普文章撤稿 + public static String getScienceListNew = url + + "expertPolularScienceArticleListNew";// 科普文章已发布 + public static String getpolularScienceArticleListIsNotisThroughNew = url + + "polularScienceArticleListIsNotisThroughNew";// 科普文章待发布 + public static String getSubmitScience = url + + "polularScienceArticleSubmission";// 我要投稿 + public static String getaddBankCard = url + "addBankCard";// 添加银行卡 + public static String getdelBankCard = url + "delBankCard";// 删除银行卡 + public static String getLoveList = url + "loveDonateList";// 爱心捐助列表 + public static String getSubmitLove = url + "iWantDonate";// 我要捐助 + public static String getExpertByUuid = url + "getExpertByUuid";// 根据用户查询专家信息【专家的个人资料查询】 + public static String getcancleRes = url + "cancelRes";// 解除随访关系 + public static String getforeBack = url + "foreBack";// 每次登陆退出手机软件在前后台切换 + // 例如Home键软件进入后台 + public static String getMyWork = url + "myWork"; // 我的工作表 + public static String getMessageDetail = url + "messageDetail"; // 查看系统消息详情 + public static String getDeleteMessage = url + "deleteMessage"; // 删除系统消息 +// public static String getUpdateMobile1 = url + "updateMobile1"; // 修改手机号 + public static String getUpdateMobile1 = urlmyLan + "updateMobile"; // 修改手机号 + public static String getHospitalByCountyID = url + "getHospitalList"; // 根据定位获取医院列表 + public static String hospitalListnew=urlmyLan+"hospitalList"; + public static String areaList=urlmyLan+"areaList"; + + public static String operaterVIP = url + "operaterVIP"; // 操作VIP服务(关闭开启) + public static String getVersion = url + "getVersion"; // 获取版本号 + public static String getExpertQrcode = url + "getExpertQrcode"; // 获取二维码 + public static String getmyProject = url + "expertScientificResearchProject"; // 我的科研项目 + public static String getscientificProject = url + + "scientificResearchProject"; // 科研项目列表 + + public static String getGroupList = urlapp + "groupList";// 获取分组信息 + public static String GroupList = urlapp + "GroupList";// 分组管理 + public static String getAddGroup = urlapp + "addGroup";// 添加分组 + public static String getDeleteGroup = urlapp + "deleteGroup";// 删除分组 + public static String getPatientListByGroup = urlapp + "patientListByGroup";// 获取单个分组的信息 + public static String getUpdateGroup = urlapp + "updateGroup";// 修改分组 + public static String getActivityList = urlapp + "activityList";// 肝胆活动 + public static String getClinicalList = urlapp + "clinicalList";// 临床招募 +// public static String getCommentList = urlapp + "commentList";// 获取评论列表wcx +// public static String getCommentList = urlmyLan + "videoCommentList";// 获取评论列表wcx + public static String getCommentList = urlmyLan + "videoCommentListV2";// 获取评论列表wcx +// public static String getNewCommentList = urlmyLan + "listTransformComment";// 新获取评论列表 + public static String getNewCommentList = urlmyLan + "commentList";// 新获取评论列表 +// public static String getClinicalCommentList = urlapp +// + "clinicalCommentList";// 临床招募评论列表 + public static String getClinicalCommentList = urlmyLan + + "clinicalCommentList";// 临床招募评论列表 +// public static String getAddComment = urlapp + "addComment";// 添加评论 + public static String getAddComment = urlmyLan + "addComment";// 添加评论 + public static String addCommentV2 = urlmyLan + "addCommentV2";// 添加评论 + public static String addCommentReplyV2 = urlmyLan + "addCommentReplyV2";// 回复 +// public static String getAddCommentReply = urlapp + "addCommentReply";// 回复评论 +public static String getAddCommentReply = urlmyLan + "addCommentReply";// 回复评论 + public static String getDeleteComment = urlapp + "deleteComment";// 删除评论 + public static String getMeetingList = urlapp + "meetingList";// 肝胆会议 + + public static String getNewMeetingList = urlmyLan + "meetingList";// 新版会议地址 + public static String getHistoryMeetingList = urlmyLan + "meetingHistoryList";// 新历史会议地址 + public static String getMeetingHistory = urlapp + "meetingHistory";// 肝胆回放老接口,已弃用 + public static String getExpertroll = urlapp + "expertroll";// 首页条目 + public static String getTimestamp = urlimage + "manager/getSystemTimeStamp";//获取时间戳 + + public static String getQuickLoginSms = urlapp + "quickLoginSms";//快捷登录发短信 + public static String umSmsLogin = urlmyLan+"umSmsLogin";//快捷登录 +// public static String getQuickLogin = urlapp + "quickLogin";//快捷登录 + public static String getQuickLogin = urlmyLan + "quickLogin";//快捷登录 + public static String umGetMobile=urlmyLan+"umGetMobile";//获取手机号 + public static String umVerifyLogin=urlmyLan+"umVerifyLogin";//友盟认证登录 + public static String wechatBindMobile=urlmyLan+"wechatBindMobile";//微信登录绑定手机号 + public static String wechatLogin=urlmyLan+"wechatLogin";//微信登录 + +// public static String getVideoNew = urlapp + "videoNew";// 肝胆视频 + public static String getVideoNew = urlmyLan + "videoIndex";// 肝胆视频 + public static String getVideoTagNew = urlmyLan + "expertVideoTypeList";// + public static String getTypeUuidByName = urlapp + "getTypeUuidByName";// 肝胆视频 + + + + public static String getJHVideoNew = urlapp + "videoByJingHuaNew";// 精华肝胆视频 + + public static String getVideoByTypeNew = urlapp + "videoByTypeNew";// 肝胆视频更多 + public static String getVideoBySearchNew = urlapp + "videoBySearchNew";// 搜索肝胆视频 + public static String getStartpage = urlapp + "startpage";// 欢迎页 +// public static String getInteractionList = urlapp + "interactionList";// 互动交流列表 + public static String getInteractionList = urlmyLan + "interactionList";// 互动交流列表 +// public static String getInteractionListByExpertUuid = urlapp +// + "interactionListByExpertUuid";// 我的互动交流列表 + public static String getInteractionListByExpertUuid = urlmyLan + + "interactionListByExpertUuid";// 我的互动交流列表 +// public static String getInteractionDetail = urlapp + "interactionDetail";// 互动交流详情 + public static String getInteractionDetail = urlmyLan + "interactionDetail";// 互动交流详情 +// public static String getInteractionListByTag = urlapp +// + "interactionListByTag";// 互动交流详情 +public static String getInteractionListByTag = urlmyLan + + "interactionListByTag";// 互动交流详情 + public static String getAddInteraction = urlapp + "addInteraction";// 互动交流详情 + public static String getPolularScienceArticleListInexpertNew = urlapp + + "polularScienceArticleListInexpertNew";// 患教学堂 + public static String getPolularScienceArticleListInexpert4JingHuaNew = urlapp + + "polularScienceArticleListInexpert4JingHuaNew";// 患教学堂精选 + public static String getUpdateApk = urlimage + "appVer/ckCurrVer";// 版本更新 + public static String checkVersion=urlmyLan+"checkVersion";//版本管理 + +// public static String getCreateXinyiOrder = urlping + "expertPay/createXinyiOrder";// 创建订单 + public static String getCreateXinyiOrder =urlimage+"expertPay/createXinYiOrder";//创建心意 + public static String getpayXinyiOrderSucceed = urlping + + "payXiYiOrderSucceed";// 完成订单 + public static String xinyiPrice=urlimage+"/expertPay/xinyiPrice";//心意单价 +// public static String getPayXinYiOrder = urlping + "payXinYiOrder";// 支付 + public static String getPayXinYiOrder = urlimage+"expertPay/payXinYiOrder";// 支付 + public static String getXinYiOrder="expertPay/getXinYiOrder"; + public static String getIdentificationIdCard = urlping + + "identificationIdCard";// 身份证 +// public static String getIdentificationBankCard = urlping +// + "identificationBankCard";// 验证银行卡信息 + public static String getIdentificationBankCard = urlping2+ "identificationBankCardNew";// 验证银行卡信息 + + public static String getBankCardList = urlping + "BankCardList";// 银行卡列表 + public static String getExpertXinYiList = urlping + "expertXinYiList";// 心意列表 +// public static String getExpertFlowerList = urlping + "expertFlowerList";// 鲜花列表 + public static String getExpertFlowerList = urlimage + "expertPay/getFlowerList";// 鲜花列表 +// public static String getRetrieveUser = urlping + "retrieveUser";// 我的账户 + public static String getRetrieveUser = urlimage + "/expertPay/getBalance";// 我的余额 + public static String getBankCardCount = urlping + "BankCardCount" ;// 银行卡数量 + public static String getOrderStatus=urlimage+"expertPay/getOrderStatus";//支付订单状态查询 + public static String getDeleteBankCard = urlping + "deleteBankCard";// 删除银行卡 +// public static String getCreateWithdrawal4Unionpay = urlping +// + "createWithdrawal4Unionpay";// 提现 + public static String getCreateWithdrawal4Unionpay = urlimage + + "expertPay/createWithdrawal";// 提现 + public static String getIncomeTax=urlimage +"/expertPay/getIncomeTax"; +// public static String getOrderList = urlping + "orderList";// 心意账单列表 + public static String getOrderList = urlimage + "expertPay/orderList";// 账单列表 + public static String getExpertXinYi = urlping + "expertXinYi";// 心意订单详情 + public static String getCancelOrder = urlping + "cancelOrder";// 取消心意订单 +// public static String getAllPingXinYiOrder = urlping + "allPingXinYiOrder";// 心意墙 + public static String getAllPingXinYiOrder =urlimage+"/expertPay/allXinyiList"; +// public static String getAllPingXinYiOrder = urlimage + "/expertPay/xinyiList";// 心意墙 + public static String getWithdrawalBalanceDetial = urlping + "WithdrawalBalanceDetial";// 提现详情 + //1.8.0 接口 + + public static String getSearchLibrary = url + "searchLibrary";// 治疗指南和期刊杂志搜索 + public static String getPolularScienceArticleListByKeywordsNew = urlapp + "polularScienceArticleListByKeywordsNew";// 患教学堂搜索 + public static String getTagList = urlapp + "tagList";// 筛选标签 + public static String getVideoByKeyWordsNew = urlapp + "videoByKeyWordsNew";// 视频筛选 + public static String getNewsListbykeywordsNew = urlapp + "newsListbykeywordsNew";// 新闻筛选 + public static String getCountConsult = url + "countConsult";// 回答患者次数 + + //2.0.0 + public static String getEducationOnlineList = urlapp + "educationOnlineList";//肝胆学院列表 +// public static String getExpertroll = urlapp + "educationOnlineList";//肝胆学院列表 + public static String getSystemTime= urlimage + "manager/getSystemTime";//获取系统时间 验证码 + //2.1.0 + public static String getMedicineTagListNoPage = urlapp + "MedicineTagListNoPage";//药品助手标签 + public static String getNoviceTagListNoPage = urlapp +"NoviceTagListNoPage";//新手教程标签 + //2.3.0 + + public static String getPlayBack = urlapp +"educationOnlinePlayBack";//往期回顾更多页面 + public static String getDetectionIndex = urlapp +"detectionIndex";//肝病监测 + public static String getDetectionContent = urlapp +"detectionContent";//肝病监测二级页面 + + //2.6.0 患教视频 + public static String getPtientVideoNew = urlapp +"patientVideoNew";// + public static String getPatientVideoByTypeNew = urlapp +"patientVideoByTypeNew";// + public static String getPatientVideoByJingHuaNew = urlapp +"patientVideoByJingHuaNew";// + public static String getPatientVideoBySearchNew = urlapp +"patientVideoBySearchNew";// + public static String getPatientVideoByKeyWordsNew = urlapp +"patientVideoByKeyWordsNew";// + public static String patientVideoByName = urlapp +"patientVideoByName";//患教视频科普分享 + //肝胆课件 + public static String getGanDanFileList = urlapp +"ganDanFileList";//肝胆课件列表 + public static String getGanDanFileByKeyWords = urlmyLan +"ganDanFileByKeyWords";//肝胆课件列表 + public static String getGanDanFileDetials = urlmyLan +"ganDanFileDetials";//肝胆课件详情 + public static String gandanFileDetail = urlmyLan +"gandanFileDetail";//推送肝胆课件详情 +// public static String getCreateGanDanFileOrder = urlping +"createGanDanFileOrder";//创建肝胆课件订单 + public static String getCreateGanDanFileOrder = urlimage +"expertPay/createGanDanFileOrder";//创建肝胆课件订单 +// public static String getPayGanDanFileOrder = urlping +"payGanDanFileOrder";//支付肝胆课件 + public static String getPayGanDanFileOrder = urlimage +"expertPay/payGanDanFileOrder";//支付肝胆课件 + public static String getPayGanDanFileOrderSucceed = urlping +"payGanDanFileOrderSucceed";//支付成功后回调 +// public static String getGanDanFileOrderDetial = urlping +"ganDanFileOrderDetial";//订单详情 + public static String getGanDanFileOrderDetial = urlimage+"expertPay/getGanDanFileOrder";//订单详情 + public static String getCancelGanDanFileOrder = urlping +"cancelGanDanFileOrder";//取消订单 + + public static String getDownloadGanDanFile= urlapp +"downloadGanDanFile";//支付成功后回调 + public static String getMyDownload= urlapp +"gandanfile/myDownload";//我的下载(课件) + public static String getMyShare= urlapp +"gandanfile/myShare";//我的下载(课件) + + //肝胆医院 + + public static String getHospitalIndexRoll= urlapp +"hospitalIndexRoll";//肝胆医院首页滚动 + public static String getKeShiIndexRoll= urlapp +"hospitalIndexRoll";//肝胆科室首页滚动 + + public static String getGanDanHospital= urlapp +"ganDanHospital";//肝胆医院列表+搜索 + public static String getaddFocusganDanHospital= urlapp +"addFocusganDanHospital";//添加医院关注 + public static String getcancleFocusganDanHospital= urlapp +"cancleFocusganDanHospital";//添加医院关注 + public static String getganDanHospitalDetial= urlapp +"ganDanHospitalDetial";//添加医院关注 + public static String getGanDanKeShi= urlapp +"ganDanKeShi";//肝胆科室列表+搜索 + public static String getProclamationAll= urlapp +"getProclamationAll";//更多公告 + public static String getExpertAll= urlapp +"getExpertAll";//更多医生 + public static String getMessageAll= urlapp +"getMessageAll";//更多留言 + public static String getMessageDetial= urlapp +"getMessageDetial";//留言详情 + public static String getmessageCommentList= urlapp +"messageCommentList";//留言评论列表 + public static String getaddProclamation= urlapp +"addProclamation";//添加公告 + public static String getVideoResList= urlapp +"getVideoResList";//添加公告 + public static String ganDanExpertList = urlapp +"GanDanExpertList";//肝胆名医列表+搜索 + //积分接口 + public static String addBonusPoints = urlapp +"addBonusPoints";//添加积分 + public static String myBonusPoints = urlapp +"myBonusPoints";//查询个人积分 + public static String bonusPointsList = urlapp+"bonusPointsList";//积分列表 + public static String bonusPointsPayList = urlapp+"bonusPointsPayList";//积分支出列表 + public static String goodsList = urlmyLan+"goodsList";//商品分页查询 + public static String goodsListV2=urlmyLan+"goodsListV2"; + public static String goodsTagList=urlmyLan+"goodsTagList"; + public static String goodsNewsList = urlapp+"goodsNewsList";//轮播图 + public static String getGoods = urlapp+"getGoods";//查询商品详情 + public static String getUpanWelfareCount = urlmyLan+"getUpanWelfareCount";//u盘个数 + public static String createGoodsOrder = urlapp+"createGoodsOrder";//创建积分商城订单 + public static String payGoodsOrder = urlapp+"payGoodsOrder";//支付订单 + public static String getOrderTrack = urlmyLan+"getOrderTrack";//积分商城-查询快递100 + public static String goodsOrderList = urlapp+"goodsOrderList";//订单分页查询 + public static String getGoodsOrder = urlapp+"getGoodsOrder";//查询订单详情 + public static String cancleGoodsOrder = urlapp+"cancleGoodsOrder";//取消订单 + //职业地点接口 + public static String listWorkPlace = urlapp+"listWorkPlace";//执业地点-列表 + public static String hospitalList = urlapp+"hospitalList";//添加职业地点-医院列表 + public static String addWorkPlace = urlapp+"addWorkPlace";//执业地点-增加 + public static String editWorkPlace = urlapp+"editWorkPlace";//执业地点-修改 + public static String deleteWorkPlace = urlapp+"deleteWorkPlace";//执业地点-删除 + //停诊安排 + public static String stopOutPatientList = urlapp+"stopOutPatientList";//停诊安排-列表 + public static String addStopOutPatient = urlapp+"addStopOutPatient";//添加停诊安排 + public static String deleteStopOutPatient = urlapp+"deleteStopOutPatient";//停诊安排-删除 + public static String updateStopOutPatient = urlapp+"updateStopOutPatient";//修改停诊安排 + //门诊安排 + public static String listOutPatient = urlapp+"listOutPatient";//门诊安排列表 + public static String addOutPatientA = urlapp+"addOutPatientA";//添加门诊安排 + public static String addOutPatient = urlmyLan+"addOutPatient";//添加门诊安排 + public static String deleteOutPatient = urlapp+"deleteOutPatient";//删除门诊安排 + public static String updateOutPatient = urlapp+"updateOutPatient";//修改门诊安排 + public static String updateOutPatientA = urlapp+"updateOutPatientA";//修改门诊安排A + public static String newsDetial = url+"newsDetial";//新闻详情 + public static String newsDetail = urlmyLan+"newsDetail";//推送新闻详情 + public static String liveDetail = urlmyLan+"liveDetail";//推送直播详情 + public static String caseDetial = url+"caseDetial";//病例荟萃详情 + public static String medicalRecordShareDetail = urlmyLan+"medicalRecordShareDetail";//查房实录 + //治疗指南 + public static String top10ByType = urlapp+"top10ByType";//每个类型,本年度Top10 + public static String addGuideDownload = urlapp+"addGuideDownload";//添加指南下载记录 + //精品课程 + public static String listSeriesType = urlapp+"listSeriesType";//兑换专区 + public static String listFree = urlapp+"listFree";//免费专区 + public static String getSeriesVideoDetial = urlapp+"getSeriesVideoDetial";//视频详情 + public static String createSeriesVideoOrder = urlapp+"createSeriesVideoOrder";//创建系列视频订单 + public static String paySeriesVideoOrder = urlapp+"paySeriesVideoOrder";//支付系列视频订单 + public static String cancleSeriesVideoOrder = urlapp+"cancleSeriesVideoOrder";//取消系列视频订单 + public static String SeriesVideoNewsList = urlapp+"SeriesVideoNewsList";//轮播图 + public static String listSeriesVideoByType = urlapp+"listSeriesVideoByType";//系列更多视频 + public static String listMySeriesType = urlapp+"listMySeriesType";//已兑换 + public static String readSeriesVideo = urlapp+"readSeriesVideo";//阅读量+1 + //迈兰患教 + + public static String mailanAdd = urlmyLan+"mailanAdd";//在线申请 + public static String mailanUpdate = urlmyLan+"mailanUpdate";//在线申请修改 + public static String mailanRemind = urlmyLan+"mailanRemind";//患教提醒 + public static String mailanList = urlmyLan+"mailanList";//申请列表 + public static String mailanNoticeAdd = urlmyLan+"mailanNoticeAdd";//添加患教公告 + public static String mailanNoticeUpate = urlmyLan+"mailanNoticeUpate";//修改患教公告 + public static String mailanNoticeGet = urlmyLan+"mailanNoticeGet";//获取患教公告 + public static String isMaiLanExpert = urlmyLan+"isMaiLanExpert";// 判断是否为迈兰医生 + + // 积分券 + public static String pointTicketlist = urlmyLan+"pointTicketlist";// 积分券列表 + public static String updateStatus = urlmyLan+"updateStatus";// 积分券兑换 + + //购买积分 + public static String getPointUnitPrice = urlapp+"getPointUnitPrice";// 积分单价 +// public static String createPointOrder = urlping+"createPointOrder";// 创建积分 订单 + public static String createPointOrder = urlimage+"expertPay/createBointsOrder";// 创建积分 订单 +// public static String payPointOrder = urlping+"payPointOrder";//支付积分订单 + public static String payPointOrder = urlimage+"expertPay/payBointsOrder";//支付积分订单 + public static String payPointOrderSucceed = urlping+"payPointOrderSucceed";//支付积分订单成功后调用 + + //一问多答 新的一问多答列表 + public static String listNewInterrogation = urlmyLan+"listNewInterrogation";// 一问多答 新的一问多答列表 + public static String listMyAnsweredInterrogation = urlmyLan+"listMyAnsweredInterrogation";// 一问多答 我回答的一问多答列表 + public static String getInterrogation = urlmyLan+"getInterrogation";// 一问多答 详情页 + public static String InterrogationPatientInfo = urlmyLan+"InterrogationPatientInfo";// 一问多答 患者详情页 + public static String addInterrogationAnswer = urlmyLan+"addInterrogationAnswer";// 一问多答 回答 + public static String updateInterrogationAnswer = urlmyLan+"updateInterrogationAnswer";// 一问多答 编辑回答 + public static String patientCard = urlmyLan+"patientCard";// 患者详情 + public static String updateNicknameNote=urlmyLan+"updateNicknameNote"; + public static String getFollowUp = url+"getFollowUp";// 随访详情 + public static String patientVideoType = urlapp+"patientVideoType";// 患者视频类型列表 + public static String getKePuCollection = url+"getKePuCollection";// 患教学堂详情 + public static String addVideoWatchRecord = urlmyLan+"addVideoWatchRecord";// 添加视频浏览记录 + public static String VideoWatchRecord = urlmyLan+"VideoWatchRecord";// 视频浏览记录列表 + public static String deleteRecord = urlmyLan+"deleteRecord";// 删除视频浏览记录 + public static String videoDetail = urlmyLan+"videoDetail";// 视频详情 + public static String isVideoDownloadRecord = urlmyLan+"isVideoDownloadRecord";// 查询是否缓存过该视频 + public static String payVideoDownload = urlmyLan+"payVideoDownload";// 支付视频缓存积分 + public static String hero2019 = urlmyLan+"hero2019";// 支付视频缓存积分 + + public static String listGroupSendMsg = urlmyLan+"listGroupSendMsg";// 查询群发记录 +// public static String addGroupSendMsg = urlmyLan+"addGroupSendMsg";// 添加群发记录老接口 +// public static String addGroupSendMsg = urlmyLan+"addGroupSendMsgNew";// 添加群发记录 + public static String addGroupSendMsg = urlmyLan+"addGroupSendMsg4YunXin";// 添加群发记录 + public static String delGroupSendMsg = urlmyLan+"delGroupSendMsg";// 删除群发记录 + public static String updateGroup = urlmyLan+"patientCardUpdateGroup";// 添加多个分组 + public static String getTotalPoints = urlmyLan+"getTotalPoints";// 获得总积分 + public static String videoRoll = urlmyLan+"videoRoll";// 专家端视频轮播 + public static String getAppActivity = urlmyLan+"getAppActivity";//专家端福利赠书活动 + public static String getUserIcon = urlmyLan+"getUserIcon";//专家获得动态图标getUserIcon + public static String addUserIcon = urlmyLan+"addUserIcon";//添加动态图标getUserIcon + + + public static String expertHonor = urlmyLan+"expertHonor";//荣誉列表 + public static String gethonorDetail = urlmyLan+"gethonorDetail";// 点击查看荣誉详情 + + //我的首页新 + public static String myHomeNew = urlmyLan+"indexV2"; + //我的新 + public static String myNew = urlmyLan+"my"; + + //友盟关联Device Token + public static String addUMToken = urlmyLan+"addUMToken"; + + + //我的福利 +// 我的福利-领取福利页面 +// 地址:expertAPI/getWelfarePage +// 我的福利-使用福利页面 +// 地址:expertAPI/getWelfarePage +// 我的福利-领取福利操作 +// 地址:expertAPI/receiveWelfare +// 参数type (1视频2课件3精品4万方5U盘) +// 更正 : 我的福利-使用福利页面 +// 地址:expertAPI/useWelfarePage +// 无参 +// 我的福利-查询福利剩余次数 +// 地址:expertAPI/getWelfareNum +// 参数type (1视频2课件3精品4万方5U盘) +// 我的福利-使用福利操作 +// 地址:expertAPI/useWelfareNum +// 参数type (1视频2课件3精品4万方5U盘) + public static String getWelfarePage = urlmyLan + "getWelfarePage";//领取福利页面 + public static String receiveWelfare = urlmyLan + "receiveWelfare";//领取福利操作 + public static String useWelfarePage = urlmyLan + "useWelfarePage";//使用福利页面 + public static String getWelfareNum = urlmyLan + "getWelfareNum";//查询福利剩余次数 type (1视频2课件3精品4万方5U盘) + public static String useWelfareNum = urlmyLan + "useWelfareNum";//使用福利操作 type (1视频2课件3精品4万方5U盘) + public static String welfareList = urlmyLan + "welfareList";//福利详情列表 1视频 2课件 3精品课程 4万方 5U盘 + public static String getIsAccount = urlmyLan + "getIsAccount";//专家端返回专家账户状态返回字段is_account (0已隐藏 1正常) + public static String hasDownloadWanFang = urlmyLan + "hasDownloadWanFang";//查看是否下载过本篇文章 + public static String addWanFangRecord = urlmyLan + "addWanFangRecord";//查看是否下载过本篇文章 + public static String getUGoods = urlapp + "getUGoods";//U盘信息 + public static String getWelfareNotice = urlmyLan + "getWelfareNotice";//专家端我的福利模块,消息弹框提醒 + public static String isBoundWechatByUuid = urlmyLan + "isBoundWechatByUuid";//判断用户是否绑定过微信 + public static String addWechatExpert = urlmyLan + "addWechatExpert";//绑定微信 + public static String delWechatExpert = urlmyLan + "delWechatExpert";//解除绑定 + public static String getMagazineByUuid = urlmyLan + "getMagazineByUuid";//根据UUID查询期刊杂志 + public static String getNewWa="https://wx.igandan.com/shop_notify/";//肝胆商城妞娃购买链接 + public static String isConsultIng = urlmyLan + "isConsultIng";//是否存在正在进行中的公益咨询 + + + + //佑安项目 + public static String getRealyWorldToken=urlmyLan+"getRealyWorldToken"; + public static String youanlist =youanapi+"/app/project/list"; + public static String youangetDetail =youanapi+"/app/project/getDetail/"; + public static String youanmyList =youanapi+"/app/project/myList"; + public static String youangetRoleList =youanapi+"/app/employee/getRoleList/"; + public static String youanselectRole =youanapi+"/app/selectRole/"; + public static String youanadd =youanapi+"/app/patientcase/add"; + public static String youanupdate =youanapi+"/app/patientcase/update"; + public static String youanupdate1 =youanapi+"/app/patientcase/updateBaseInfo"; + public static String youanpatientcase =youanapi+"/app/patientcase/list"; + public static String getPatientcaseTree =youanapi+"/app/patientcase/getPatientcaseTree/"; + public static String freezeData =youanapi+"/app/patientcase/freezeData/"; + public static String getBaseInfo =youanapi+"/app/patientcase/getBaseInfo/"; + public static String getDayEcharsData=youanapi+"/app/statistics/getDayEcharsData"; + public static String getAnalysisEcharsData=youanapi+"/app/statistics/getAnalysisEcharsData"; + public static String rankingListByHospital=youanapi+"/app/patientcase/rankingListByHospital"; + public static String rankingListByUser=youanapi+"/app/patientcase/rankingListByUser"; + public static String generatePresignedUrl=youanapi+"/app/file/generatePresignedUrl"; + public static String endpoingetDetail=youanapi+"/app/endpoin/getDetail/"; + public static String endpoingetdelete=youanapi+"/app/endpoin/delete/"; + public static String endpoingetadd=youanapi+"/app/endpoin/add"; + public static String yongyaogetDetail=youanapi+"/app/yongyao/getDetail/"; + public static String yongyaoupdate=youanapi+"/app/yongyao/update"; + public static String suifanggetDetail=youanapi+"/app/suifang/getDetail/"; + public static String suifangupdate=youanapi+"/app/suifang/update"; + public static String suifangHbvSymbol=youanapi+"/app/suifangHbvSymbol/getDetail/"; + public static String suifangHbvSymbolupdate=youanapi+"/app/suifangHbvSymbol/update"; + public static String suifangLiverFunction=youanapi+"/app/suifangLiverFunction/getDetail/"; + public static String suifangLiverFunctionupdate=youanapi+"/app/suifangLiverFunction/update"; + public static String suifangCT=youanapi+"/app/suifangCT/getDetail/"; + public static String suifangCTupdate=youanapi+"/app/suifangCT/update"; + public static String suifangLiverElasticity=youanapi+"/app/suifangLiverElasticity/getDetail/"; + public static String suifangLiverElasticityupdate=youanapi+"/app/suifangLiverElasticity/update"; + public static String suifangadd=youanapi+"/app/suifang/add"; + + public static String endpointImgupdate=youanapi+"/app/endpointImg/update"; + public static String refreshDataStatus=youanapi+"/app/suifang/refreshDataStatus/"; + + public static String getTagToken=urlmyLan+"getTagToken";//画像系统 + + public static String checkUser=urlmyLan+"checkUser";//检查账户 + + + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/ValidateUtils.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ValidateUtils.java new file mode 100644 index 0000000..f9e14e2 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/ValidateUtils.java @@ -0,0 +1,159 @@ +package cn.shangyu.gdxzExpert.utils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static cn.shangyu.gdxzExpert.utils.StringUtil.isEmpty; + +/** + * + * ValidateUtils.java + * + * @author gaofei + * @date 2015-9-6 下午7:32:18 Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:判断手机号码是否合法 + */ +public class ValidateUtils { + /** + * 验证手机号码 + * + * @param mobiles + */ + public static boolean isMobileNum(String mobiles) { + Pattern p = Pattern.compile("^(1[3-9])[0-9]{9}$"); + Matcher m = p.matcher(mobiles); + return m.matches(); + } + + /** + * 验证固定号码 + * + * @param mobiles + */ + public static boolean isPhoneNum(String mobiles) { + Pattern p = Pattern.compile("^(0(\\d{2,3}))(\\d{7,8})$"); + Matcher m = p.matcher(mobiles); + return m.matches(); + } + + /** + * 验证手机号码和固定号码 + * + * @param mobiles + */ + public static boolean isPhoneAndMobile(String mobiles) { +// ^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$ +// ^(0(\\d{2,3}))(\\d{7,8})|(1[3-9][0-9]{9})$ +// ^(13[0-9]|14[5-9]|15[012356789]|166|17[0-8]|18[0-9]|19[8-9])[0-9]{8}$ + Pattern p = Pattern + .compile("^(1[3-9])[0-9]{9}$"); + Matcher m = p.matcher(mobiles); + return m.matches(); + } + + /** + * 验证密码为数字与字母组合 + * + * @param mobiles + */ + public static boolean isPassword(String password) { + String str = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,16}$"; + Pattern p = Pattern.compile(str); + Matcher m = p.matcher(password); + return m.matches(); + } + /** + * 验证密码为数字与字母组合 + * + * @param mobiles + */ + public static boolean isCardPassword(String password) { + String str = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{16}$"; + Pattern p = Pattern.compile(str); + Matcher m = p.matcher(password); + return m.matches(); + } + /** + * 是否是税号 + * @param num + * @return + */ + public static Boolean isTaxNumber(String num) + { + + if(isEmpty(num)) + { + return false; + } + else + { + String str = "^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$"; + Pattern p = Pattern.compile(str); + Matcher m = p.matcher(num); + return m.matches(); + + } + + } + + /** + * 验证邮箱 isValidEmail + * + * @param mail + * @return boolean + */ + public static boolean isValidEmail(String email) { + String str = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}"; + Pattern p = Pattern.compile(str); + Matcher m = p.matcher(email); + return m.matches(); + } + + public static void main(String[] args) { + String mobile = "fjlkadjlkfjlakjflkdjaojfoijapo"; + } + + /** + * + * @param 是否包含汉字 + * @return + */ + public static boolean isContainChinese(String str) { + + Pattern p = Pattern.compile("[\u4e00-\u9fa5]"); + Matcher m = p.matcher(str); + if (m.find()) { + return true; + } + return false; + } + + /** + * 正则表达式:验证身份证 + */ + public static final String REGEX_ID_CARD = "(^\\d{15}$)|(^ {17}([0-9]|X)$)"; + // 15位数身份证验证正则表达式: + public static String isIDCard1 = "^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$"; + // 18位数身份证验证正则表达式 : + public static String isIDCard2 = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$"; + + public static boolean isCardId(String str) { + if (str.length() == 15) { + Pattern p = Pattern.compile(isIDCard1); + Matcher m = p.matcher(str); + if (m.find()) { + return true; + } + } else if (str.length() == 18) { + Pattern p = Pattern.compile(isIDCard2); + Matcher m = p.matcher(str); + if (m.find()) { + return true; + } + } + + return false; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/utils/WebClientDevWrapper.java b/app/src/main/java/cn/shangyu/gdxzExpert/utils/WebClientDevWrapper.java new file mode 100644 index 0000000..ce431af --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/utils/WebClientDevWrapper.java @@ -0,0 +1,122 @@ +package cn.shangyu.gdxzExpert.utils; + +/** + * Created by WANGChengXin on 2019/11/15. + */ + + + +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.net.wifi.WifiManager; + + + +import org.apache.http.HttpHost; +import org.apache.http.HttpVersion; +import org.apache.http.client.HttpClient; +import org.apache.http.conn.ClientConnectionManager; +import org.apache.http.conn.params.ConnRouteParams; +import org.apache.http.conn.scheme.PlainSocketFactory; +import org.apache.http.conn.scheme.Scheme; +import org.apache.http.conn.scheme.SchemeRegistry; + + +import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.params.HttpProtocolParams; +import org.apache.http.protocol.HTTP; + + +import java.security.KeyStore; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; +import javax.security.cert.CertificateException; +import javax.security.cert.X509Certificate; + +/** + * 避免HttpClient的”SSLPeerUnverifiedException: peer not authenticated”异常 + * 不用导入SSL证书 + * @author shipengzhi(shipengzhi@sogou-inc.com) + * + */ +public class WebClientDevWrapper { + public static org.apache.http.client.HttpClient wrapClient(org.apache.http.client.HttpClient base) { + try { + SSLContext ctx = SSLContext.getInstance("TLS"); + X509TrustManager tm = new X509TrustManager() { + public java.security.cert.X509Certificate[] getAcceptedIssuers() { + return null; + } + public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} + public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {} + @Override + public void checkClientTrusted( + java.security.cert.X509Certificate[] chain, + String authType) + throws java.security.cert.CertificateException { + // TODO Auto-generated method stub + + } + @Override + public void checkServerTrusted( + java.security.cert.X509Certificate[] chain, + String authType) + throws java.security.cert.CertificateException { + // TODO Auto-generated method stub + + } + }; + ctx.init(null, new TrustManager[] { tm }, null); + KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); + trustStore.load(null, null); + SSLSocketFactory ssf = new SSLSocketFactory(trustStore); + ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + ClientConnectionManager ccm = base.getConnectionManager(); + SchemeRegistry sr = ccm.getSchemeRegistry(); + //设置要使用的端口,默认是443 + sr.register(new Scheme("https", ssf, 443)); + sr.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); + HttpParams params = new BasicHttpParams(); + + HttpConnectionParams.setConnectionTimeout(params, 10000); + HttpConnectionParams.setSoTimeout(params, 10000); + + HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); + HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); + +// ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, sr); + HttpConnectionParams.setConnectionTimeout(params, 5000); + HttpConnectionParams.setSoTimeout(params,5000); + HttpClient client = new DefaultHttpClient(ccm, params); + WifiManager wifiManager = (WifiManager) UIUtils.getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE); + if (!wifiManager.isWifiEnabled()) { + // 获取当前正在使用的APN接入点 + Uri uri = Uri.parse("content://telephony/carriers/preferapn"); + Cursor mCursor = UIUtils.getContext().getContentResolver().query(uri, null, null, null, null); + if (mCursor != null && mCursor.moveToFirst()) { + // 游标移至第一条记录,当然也只有一条 + String proxyStr = mCursor.getString(mCursor.getColumnIndex("proxy")); + if (proxyStr != null && proxyStr.trim().length() > 0) { + HttpHost proxy = new HttpHost(proxyStr, 80); + client.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY, proxy); + } + mCursor.close(); + } + } + + return client; +// return new DefaultHttpClient(ccm, base.getParams()); + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/AutoHideIMEFrameLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/AutoHideIMEFrameLayout.java new file mode 100644 index 0000000..1b6bac0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/AutoHideIMEFrameLayout.java @@ -0,0 +1,65 @@ +package cn.shangyu.gdxzExpert.view; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.inputmethod.InputMethodManager; +import android.widget.FrameLayout; + +/** + * Date:2019/8/21 + * Time:9:27 + * author:xiayile + * + * //隐藏键盘 + */ +public class AutoHideIMEFrameLayout extends FrameLayout { + + public AutoHideIMEFrameLayout(Context context) { + super(context); + } + + public AutoHideIMEFrameLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public AutoHideIMEFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + Context context = getContext(); + if (context == null || !(context instanceof Activity)) { + return super.dispatchTouchEvent(ev); + } + + Activity activity = (Activity) context; + View focusView = activity.getCurrentFocus(); + + if (focusView != null && shouldHideInputMethod(focusView, ev)) { + hideInputMethod(focusView); + } + } + + return super.dispatchTouchEvent(ev); + } + + private boolean shouldHideInputMethod(View focusView, MotionEvent event) { + Rect rect = new Rect(); + focusView.getHitRect(rect); + return !rect.contains((int) event.getX(), (int) event.getY()); + } + + private void hideInputMethod(View currentFocus) { + if (currentFocus == null) { + return; + } + InputMethodManager imm = (InputMethodManager) currentFocus.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/AutoScaleTextView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/AutoScaleTextView.java new file mode 100644 index 0000000..f046076 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/AutoScaleTextView.java @@ -0,0 +1,98 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.util.TypedValue; + +import androidx.appcompat.widget.AppCompatTextView; +import cn.shangyu.gdxzExpert.R; + +public class AutoScaleTextView extends AppCompatTextView { + + private float preferredTextSize; + private float minTextSize; + private Paint textPaint; + + public AutoScaleTextView(Context context) { + super(context, null); + } + + public AutoScaleTextView(Context context, AttributeSet attrs) { + this(context, attrs, R.attr.autoScaleTextViewStyle); + } + + public AutoScaleTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + this.textPaint = new Paint(); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AutoScaleTextView, defStyleAttr, 0); + this.minTextSize = a.getDimension(R.styleable.AutoScaleTextView_minTextSize, 5f); + a.recycle(); + this.preferredTextSize = this.getTextSize(); + + + } + + /** + * 设置最小的size + * + * @param minTextSize + */ + public void setMinTextSize(float minTextSize) { + this.minTextSize = minTextSize; + } + + /** + * 根据填充内容调整textview + * + * @param text + * @param textWidth + */ + private void refitText(String text, int textWidth) { + if (textWidth <= 0 || text == null || text.length() == 0) { + return; + } + + int targetWidth = textWidth - this.getPaddingLeft() - this.getPaddingRight(); + + + final float threshold = 0.5f; + + this.textPaint.set(this.getPaint()); + + this.textPaint.setTextSize(this.preferredTextSize); + if (this.textPaint.measureText(text) <= targetWidth) { + this.setTextSize(TypedValue.COMPLEX_UNIT_PX, this.preferredTextSize); + return; + } + + float tempMinTextSize = this.minTextSize; + float tempPreferredTextSize = this.preferredTextSize; + + while ((tempPreferredTextSize - tempMinTextSize) > threshold) { + float size = (tempPreferredTextSize + tempMinTextSize) / 2; + this.textPaint.setTextSize(size); + if (this.textPaint.measureText(text) >= targetWidth) { + tempPreferredTextSize = size; + } else { + tempMinTextSize = size; + } + } + + this.setTextSize(TypedValue.COMPLEX_UNIT_PX, tempMinTextSize); + + } + + @Override + protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { + this.refitText(text.toString(), this.getWidth()); + } + + @Override + protected void onSizeChanged(int width, int h, int oldw, int oldh) { + if (width != oldw) { + this.refitText(this.getText().toString(), width); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/CommonProgressDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/CommonProgressDialog.java new file mode 100644 index 0000000..71bd921 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/CommonProgressDialog.java @@ -0,0 +1,176 @@ +package cn.shangyu.gdxzExpert.view; + +import java.text.NumberFormat; + +import android.app.AlertDialog; +import android.content.Context; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.StyleSpan; +import android.widget.ProgressBar; +import android.widget.TextView; + +import cn.shangyu.gdxzExpert.R; + + +/** + * 自定义进度条 + * + * @author 黄淑媛 + * + */ + +public class CommonProgressDialog extends AlertDialog { + private ProgressBar mProgress; + private TextView mProgressNumber; + private TextView mProgressPercent; + private TextView mProgressMessage; + private Handler mViewUpdateHandler; + private int mMax; + private CharSequence mMessage; + private boolean mHasStarted; + private int mProgressVal; + private String TAG = "CommonProgressDialog"; + private String mProgressNumberFormat; + private NumberFormat mProgressPercentFormat; + + public CommonProgressDialog(Context context) { + super(context); + // TODO Auto-generated constructor stub + initFormats(); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + // TODO Auto-generated method stub + super.onCreate(savedInstanceState); + setContentView(R.layout.common_progress_dialog); + mProgress = (ProgressBar) findViewById(R.id.progress); + mProgressNumber = (TextView) findViewById(R.id.progress_number); + mProgressPercent = (TextView) findViewById(R.id.progress_percent); + mProgressMessage = (TextView) findViewById(R.id.progress_message); + // LayoutInflater inflater = LayoutInflater.from(getContext()); + mViewUpdateHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + // TODO Auto-generated method stub + super.handleMessage(msg); + int progress = mProgress.getProgress(); + int max = mProgress.getMax(); + double dProgress = (double) progress / (double) (1024 * 1024); + double dMax = (double) max / (double) (1024 * 1024); + if (mProgressNumberFormat != null) { + String format = mProgressNumberFormat; + mProgressNumber.setText(String.format(format, dProgress, + dMax)); + } else { + mProgressNumber.setText(""); + } + if (mProgressPercentFormat != null) { + double percent = (double) progress / (double) max; + SpannableString tmp = new SpannableString( + mProgressPercentFormat.format(percent)); + tmp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), + 0, tmp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + mProgressPercent.setText(tmp); + } else { + mProgressPercent.setText(""); + } + } + }; + // View view = inflater.inflate(R.layout.common_progress_dialog, null); + // mProgress = (ProgressBar) view.findViewById(R.id.progress); + // mProgressNumber = (TextView) view.findViewById(R.id.progress_number); + // mProgressPercent = (TextView) + // view.findViewById(R.id.progress_percent); + // setView(view); + // mProgress.setMax(100); + onProgressChanged(); + if (mMessage != null) { + setMessage(mMessage); + } + if (mMax > 0) { + setMax(mMax); + } + if (mProgressVal > 0) { + setProgress(mProgressVal); + } + } + + private void initFormats() { + mProgressNumberFormat = "%1.2fM/%2.2fM"; + mProgressPercentFormat = NumberFormat.getPercentInstance(); + mProgressPercentFormat.setMaximumFractionDigits(0); + } + + private void onProgressChanged() { + mViewUpdateHandler.sendEmptyMessage(0); + } + + public void setProgressStyle(int style) { + // mProgressStyle = style; + } + + public int getMax() { + if (mProgress != null) { + return mProgress.getMax(); + } + return mMax; + } + + public void setMax(int max) { + if (mProgress != null) { + mProgress.setMax(max); + onProgressChanged(); + } else { + mMax = max; + } + } + + public void setIndeterminate(boolean indeterminate) { + if (mProgress != null) { + mProgress.setIndeterminate(indeterminate); + } + // else { + // mIndeterminate = indeterminate; + // } + } + + public void setProgress(int value) { + if (mHasStarted) { + mProgress.setProgress(value); + onProgressChanged(); + } else { + mProgressVal = value; + } + } + + @Override + public void setMessage(CharSequence message) { + // TODO Auto-generated method stub + // super.setMessage(message); + if (mProgressMessage != null) { + mProgressMessage.setText(message); + } else { + mMessage = message; + } + } + + @Override + protected void onStart() { + // TODO Auto-generated method stub + super.onStart(); + mHasStarted = true; + } + + @Override + protected void onStop() { + // TODO Auto-generated method stub + super.onStop(); + mHasStarted = false; + } + +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButton.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButton.java new file mode 100644 index 0000000..d8fc9e8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButton.java @@ -0,0 +1,44 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.Button; +import android.widget.TextView; + +public class DrawableCenterButton extends TextView { + + public DrawableCenterButton(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + } + + public DrawableCenterButton(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public DrawableCenterButton(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + protected void onDraw(Canvas canvas) { + Drawable[] drawables = getCompoundDrawables(); + if (drawables != null) { + Drawable drawableLeft = drawables[0]; + if (drawableLeft != null) { + float textWidth = getPaint().measureText(getText().toString()); + int drawablePadding = getCompoundDrawablePadding(); + int drawableWidth = 0; + drawableWidth = drawableLeft.getIntrinsicWidth(); + float bodyWidth = textWidth + drawableWidth + drawablePadding; + canvas.translate((getWidth() - bodyWidth) / 2, 0); + } + } + super.onDraw(canvas); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButtonR.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButtonR.java new file mode 100644 index 0000000..2f1e247 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterButtonR.java @@ -0,0 +1,47 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.TextView; + +public class DrawableCenterButtonR extends TextView { + + public DrawableCenterButtonR(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + } + + public DrawableCenterButtonR(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public DrawableCenterButtonR(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + protected void onDraw(Canvas canvas) { + Drawable[] drawables = getCompoundDrawables(); + if (drawables != null) { + Drawable drawableRight = drawables[2]; + if (drawableRight != null) { + + float textWidth = getPaint().measureText(getText().toString()); + int drawablePadding = getCompoundDrawablePadding(); + int drawableWidth = 0; + drawableWidth = drawableRight.getIntrinsicWidth(); + float bodyWidth = textWidth + drawableWidth + drawablePadding; + setPadding(0, 0, (int) (getWidth() - bodyWidth), 0); + canvas.translate((getWidth() - bodyWidth) / 2, 0); + } + } + super.onDraw(canvas); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterCheckBox.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterCheckBox.java new file mode 100644 index 0000000..88fc639 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrawableCenterCheckBox.java @@ -0,0 +1,47 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.TextView; + +public class DrawableCenterCheckBox extends CheckBox { + + public DrawableCenterCheckBox(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + } + + public DrawableCenterCheckBox(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public DrawableCenterCheckBox(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + protected void onDraw(Canvas canvas) { + Drawable[] drawables = getCompoundDrawables(); + if (drawables != null) { + Drawable drawableRight = drawables[2]; + if (drawableRight != null) { + + float textWidth = getPaint().measureText(getText().toString()); + int drawablePadding = getCompoundDrawablePadding(); + int drawableWidth = 0; + drawableWidth = drawableRight.getIntrinsicWidth(); + float bodyWidth = textWidth + drawableWidth + drawablePadding; + setPadding(0, 0, (int) (getWidth() - bodyWidth), 0); + canvas.translate((getWidth() - bodyWidth) / 2, 0); + } + } + super.onDraw(canvas); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/DrugView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrugView.java new file mode 100644 index 0000000..5e8b984 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/DrugView.java @@ -0,0 +1,322 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Color; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; + +/** + * Created by WANGChengXin on 2019/7/30. + */ + +public class DrugView extends ViewGroup { + public static final String BTN_MODE = "BTNMODE"; //按钮模式 + public static final String TEV_MODE = "TEVMODE"; //文本模式 + + private static final String TAG = "IViewGroup"; + private final int HorInterval = 45; //水平间隔 + private final int VerInterval = 45; //垂直间隔 + + private int viewWidth; //控件的宽度 + private int viewHeight; //控件的高度 + + private ArrayList mTexts = new ArrayList<>(); + private Context mContext; + private int textModePaddingx = 20; + private int textModePaddingy = 15; + + //正常样式 + private float itemTextSize = 12; + private int itemBGResNor = R.drawable.rect_false_drug; + private int itemTextColorNor = Color.parseColor("#8D2316"); + + //选中的样式 + private int itemBGResPre = R.drawable.rect_false_drug; + private int itemTextColorPre = Color.parseColor("#8D2316"); + + public DrugView(Context context) { + this(context, null); + } + + public DrugView(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + } + + /** + * 计算控件的大小 + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + viewWidth = measureWidth(widthMeasureSpec); + viewHeight = measureHeight(heightMeasureSpec); + Log.e(TAG, "onMeasure:" + viewWidth + ":" + viewHeight); + // 计算自定义的ViewGroup中所有子控件的大小 + measureChildren(widthMeasureSpec, heightMeasureSpec); + // 设置自定义的控件MyViewGroup的大小 + setMeasuredDimension(viewWidth, getViewHeight()); + } + + + private int measureWidth(int pWidthMeasureSpec) { + int result = 0; + int widthMode = MeasureSpec.getMode(pWidthMeasureSpec); + int widthSize = MeasureSpec.getSize(pWidthMeasureSpec); + switch (widthMode) { + /** + * mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, + * MeasureSpec.AT_MOST。 + * + * + * MeasureSpec.EXACTLY是精确尺寸, + * 当我们将控件的layout_width或layout_height指定为具体数值时如andorid + * :layout_width="50dip",或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。 + * + * + * MeasureSpec.AT_MOST是最大尺寸, + * 当控件的layout_width或layout_height指定为WRAP_CONTENT时 + * ,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可 + * 。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。 + * + * + * MeasureSpec.UNSPECIFIED是未指定尺寸,这种情况不多,一般都是父控件是AdapterView, + * 通过measure方法传入的模式。 + */ + case MeasureSpec.AT_MOST: + case MeasureSpec.EXACTLY: + result = widthSize; + break; + } + return result; + } + + private int measureHeight(int pHeightMeasureSpec) { + int result = 0; + int heightMode = MeasureSpec.getMode(pHeightMeasureSpec); + int heightSize = MeasureSpec.getSize(pHeightMeasureSpec); + switch (heightMode) { + case MeasureSpec.UNSPECIFIED: + result = getSuggestedMinimumHeight(); + break; + case MeasureSpec.AT_MOST: + case MeasureSpec.EXACTLY: + result = heightSize; + break; + } + return result; + } + + /** + * 覆写onLayout,其目的是为了指定视图的显示位置,方法执行的前后顺序是在onMeasure之后,因为视图肯定是只有知道大小的情况下, + * 才能确定怎么摆放 + */ + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + // 遍历所有子视图 + int posLeft = HorInterval; + int posTop = VerInterval; + int posRight; + int posBottom; + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + // 获取在onMeasure中计算的视图尺寸 + int measureHeight = childView.getMeasuredHeight(); + int measuredWidth = childView.getMeasuredWidth(); + if (posLeft + getNextHorLastPos(i) > viewWidth) { + posLeft = HorInterval; + posTop += (measureHeight + VerInterval); + } + posRight = posLeft + measuredWidth; + posBottom = posTop + measureHeight; + childView.layout(posLeft, posTop, posRight, posBottom); + posLeft += (measuredWidth + HorInterval); + } + } + + //获取控件的自适应高度 + private int getViewHeight() { + int viewwidth = HorInterval; + int viewheight = VerInterval; + if (getChildCount() > 0) { + viewheight = getChildAt(0).getMeasuredHeight() + VerInterval; + } + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + // 获取在onMeasure中计算的视图尺寸 + int measureHeight = childView.getMeasuredHeight(); + int measuredWidth = childView.getMeasuredWidth(); + if (viewwidth + getNextHorLastPos(i) > viewWidth) { + viewwidth = HorInterval+measureHeight; + viewheight += (measureHeight + VerInterval); + } else { + viewwidth += (measuredWidth + HorInterval); + } + } + viewheight= viewheight+300; + return viewheight; + } + + private int getNextHorLastPos(int i) { + return getChildAt(i).getMeasuredWidth() + HorInterval; + } + + private OnGroupItemClickListener onGroupItemClickListener; + + public void setGroupClickListener(OnGroupItemClickListener listener) { + onGroupItemClickListener = listener; + for (int i = 0; i < getChildCount(); i++) { + final X childView = (X) getChildAt(i); + final int itemPos = i; + childView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + onGroupItemClickListener.onGroupItemClick(itemPos); + chooseItemStyle(itemPos); + } + }); + } + } + + //选中那个的样式 + public void chooseItemStyle(int pos) { + clearItemsStyle(); + if (pos < getChildCount()) { + X childView = (X) getChildAt(pos); + childView.setBackgroundResource(itemBGResPre); + childView.setTextColor(itemTextColorPre); + setItemPadding(childView); + } + } + + private void setItemPadding(X view) { + if (view instanceof Button) { + view.setPadding(textModePaddingx, textModePaddingy, textModePaddingx, textModePaddingy); + } else { + view.setPadding(textModePaddingx, textModePaddingy, textModePaddingx, textModePaddingy); + } + } + + //清除Group所有的样式 + private void clearItemsStyle() { + for (int i = 0; i < getChildCount(); i++) { + X childView = (X) getChildAt(i); + childView.setBackgroundResource(itemBGResNor); + childView.setTextColor(itemTextColorNor); + setItemPadding(childView); + } + } + + public void addItemViews(ArrayList texts, String mode) { + mTexts = texts; + removeAllViews(); + for (int i = 0;i texts, String mode,int textsize) { + mTexts = texts; + removeAllViews(); + for (int i = 0;i= 0) { + return mTexts.get(itemID); + } + return null; + } + + public void setItemTextSize(float itemTextSize) { + this.itemTextSize = itemTextSize; + } + + public void setItemBGResNor(int itemBGResNor) { + this.itemBGResNor = itemBGResNor; + } + + public void setItemTextColorNor(int itemTextColorNor) { + this.itemTextColorNor = itemTextColorNor; + } + + public void setItemBGResPre(int itemBGResPre) { + this.itemBGResPre = itemBGResPre; + } + + public void setItemTextColorPre(int itemTextColorPre) { + this.itemTextColorPre = itemTextColorPre; + } + + public interface OnGroupItemClickListener { + void onGroupItemClick(int item); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/GSpaceItemDecoration.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/GSpaceItemDecoration.java new file mode 100644 index 0000000..23740af --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/GSpaceItemDecoration.java @@ -0,0 +1,262 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Rect; +import android.view.View; + +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + +import static cn.shangyu.gdxzExpert.utils.DensityUtil.dip2px; + +public class GSpaceItemDecoration extends RecyclerView.ItemDecoration { + + private static final String TAG = "GridDividerItemDeco"; + + private Context mContext; + + private int mFirstAndLastColumnW; //您所需指定的间隔宽度,主要为第一列和最后一列与父控件的间隔;行间距,列间距将动态分配 + private int mFirstRowTopMargin = 0; //第一行顶部是否需要间隔 + + private int mLastRowBottomMargin = 0; + + private int mSpanCount = 0; + private int mScreenW = 0; + private int mItemDistance; + + + /** + * @param firstAndLastColumnW 间隔宽度 + * @param firstRowTopMargin 第一行顶部是否需要间隔 + */ + public GSpaceItemDecoration(Context context, int firstAndLastColumnW, int firstRowTopMargin, int lastRowBottomMargin) { + mContext = context; + mFirstAndLastColumnW = dip2px(firstAndLastColumnW); + mFirstRowTopMargin = dip2px(firstRowTopMargin); + mLastRowBottomMargin = dip2px(lastRowBottomMargin); + } + + + public void setFirstRowTopMargin(int firstRowTopMargin) { + mFirstRowTopMargin = firstRowTopMargin; + } + + public void setLastRowBottomMargin(int lastRowBottomMargin) { + mLastRowBottomMargin = lastRowBottomMargin; + } + + public void setItemDistance(int itemDistance) { + mItemDistance = itemDistance; + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + + int top = 0; + int left; + int right; + int bottom; + + int itemPosition = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewLayoutPosition(); + mSpanCount = getSpanCount(parent); + int childCount = parent.getAdapter().getItemCount(); + + // 屏幕宽度-View的宽度*spanCount 得到屏幕剩余空间 + int maxDividerWidth = getMaxDividerWidth(view); + int spaceWidth = mFirstAndLastColumnW;//首尾两列与父布局之间的间隔 + // 除去首尾两列,item与item之间的距离 + int eachItemWidth = maxDividerWidth / mSpanCount; + int dividerItemWidth = (maxDividerWidth - 2 * spaceWidth) / (mSpanCount - 1);//item与item之间的距离 + + left = itemPosition % mSpanCount * (dividerItemWidth - eachItemWidth) + spaceWidth; + + right = eachItemWidth - left; + bottom = dividerItemWidth; + + // 首行 + if (mFirstRowTopMargin > 0 && isFirstRow(parent, itemPosition, mSpanCount, childCount)) { + top = mFirstRowTopMargin; + } + + //最后一行 + if (isLastRow(parent, itemPosition, mSpanCount, childCount)) { + if (mLastRowBottomMargin < 0) { + bottom = 0; + } else { + bottom = mLastRowBottomMargin; + } + } + + + outRect.set(left, top, right, bottom); + } + + /** + * 获取Item View的大小,若无则自动分配空间 + * 并根据 屏ge幕宽度-View的宽度*spanCount 得到屏幕剩余空间 + * + * @param view + * @return + */ + private int getMaxDividerWidth(View view) { + int itemWidth = view.getLayoutParams().width; + int itemHeight = view.getLayoutParams().height; + + int screenWidth = getScreenWidth(); + + int maxDividerWidth = screenWidth - itemWidth * mSpanCount; + + if (itemHeight < 0 || itemWidth < 0 || maxDividerWidth <= (mSpanCount - 1) * mFirstAndLastColumnW) { + view.getLayoutParams().width = getAttachCloumnWidth(); + view.getLayoutParams().height = getAttachCloumnWidth(); + maxDividerWidth = screenWidth - view.getLayoutParams().width * mSpanCount; + } + + return maxDividerWidth; + } + + private int getScreenWidth() { + + if (mScreenW > 0) { + return mScreenW; + } + + mScreenW = mContext.getResources().getDisplayMetrics().widthPixels > mContext.getResources().getDisplayMetrics().heightPixels + ? mContext.getResources().getDisplayMetrics().heightPixels : mContext.getResources().getDisplayMetrics().widthPixels; + return mScreenW; + } + + /** + * 根据屏幕宽度和item数量分配 item View的width和height + * + * @return + */ + private int getAttachCloumnWidth() { + int itemWidth = 0; + int spaceWidth = 0; + try { + int width = getScreenWidth(); + spaceWidth = 2 * mFirstAndLastColumnW; + itemWidth = (width - spaceWidth) / mSpanCount - 40; + } catch (Exception e) { + e.printStackTrace(); + } + + return itemWidth; + } + + /** + * 判读是否是第一列 + * + * @param parent + * @param pos + * @param spanCount + * @return + */ + private boolean isFirstColumn(RecyclerView parent, int pos, int spanCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + if (pos % spanCount == 0) { + return true; + } + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + int orientation = ((StaggeredGridLayoutManager) layoutManager) + .getOrientation(); + if (orientation == StaggeredGridLayoutManager.VERTICAL) { + if (pos % spanCount == 0) {// 第一列 + return true; + } + } else { + + } + } + return false; + } + + /** + * 判断是否是最后一列 + * + * @param parent + * @param pos + * @param spanCount + * @param childCount + * @return + */ + private boolean isLastColumn(RecyclerView parent, int pos, int spanCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + if ((pos + 1) % spanCount == 0) {// 如果是最后一列,则不需要绘制右边 + return true; + } + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + int orientation = ((StaggeredGridLayoutManager) layoutManager) + .getOrientation(); + if (orientation == StaggeredGridLayoutManager.VERTICAL) { + if ((pos + 1) % spanCount == 0) {// 最后一列 + return true; + } + } else { + + } + } + return false; + } + + /** + * 判读是否是最后一行 + * + * @param parent + * @param pos + * @param spanCount + * @param childCount + * @return + */ + private boolean isLastRow(RecyclerView parent, int pos, int spanCount, int childCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + int lines = childCount % spanCount == 0 ? childCount / spanCount : childCount / spanCount + 1; + return lines == pos / spanCount + 1; + } + return false; + } + + /** + * 判断是否是第一行 + * + * @param parent + * @param pos + * @param spanCount + * @param childCount + * @return + */ + private boolean isFirstRow(RecyclerView parent, int pos, int spanCount, int childCount) { + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + if ((pos / spanCount + 1) == 1) { + return true; + } else { + return false; + } + } + return false; + } + + /** + * 获取列数 + * + * @param parent + * @return + */ + private int getSpanCount(RecyclerView parent) { + int spanCount = -1; + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof GridLayoutManager) { + spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); + } else if (layoutManager instanceof StaggeredGridLayoutManager) { + spanCount = ((StaggeredGridLayoutManager) layoutManager).getSpanCount(); + } + return spanCount; + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/GroupManageSingleView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/GroupManageSingleView.java new file mode 100644 index 0000000..a11ba18 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/GroupManageSingleView.java @@ -0,0 +1,287 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Color; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; + +/** + * Created by WANGChengXin on 2019/10/21.单选 + */ + +public class GroupManageSingleView extends ViewGroup { + public static final String BTN_MODE = "BTNMODE"; //按钮模式 + public static final String TEV_MODE = "TEVMODE"; //文本模式 + + private static final String TAG = "IViewGroup"; + private final int HorInterval = 45; //水平间隔 + private final int VerInterval = 45; //垂直间隔 + + private int viewWidth; //控件的宽度 + private int viewHeight; //控件的高度 + + private ArrayList mTexts = new ArrayList<>(); + private Context mContext; + private int textModePaddingx = 30; + private int textModePaddingy = 15; + + //正常样式 + private float itemTextSize = 12; + private int itemBGResNor = R.drawable.rect_normal_group; + private int itemTextColorNor = Color.parseColor("#ff999999"); + + //选中的样式 + private int itemBGResPre = R.drawable.rect_false_drug; + private int itemTextColorPre = Color.parseColor("#8D2316"); + + public GroupManageSingleView(Context context) { + this(context, null); + } + + public GroupManageSingleView(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + } + + /** + * 计算控件的大小 + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + viewWidth = measureWidth(widthMeasureSpec); + viewHeight = measureHeight(heightMeasureSpec); + Log.e(TAG, "onMeasure:" + viewWidth + ":" + viewHeight); + // 计算自定义的ViewGroup中所有子控件的大小 + measureChildren(widthMeasureSpec, heightMeasureSpec); + // 设置自定义的控件MyViewGroup的大小 + setMeasuredDimension(viewWidth, getViewHeight()); + } + + + private int measureWidth(int pWidthMeasureSpec) { + int result = 0; + int widthMode = MeasureSpec.getMode(pWidthMeasureSpec); + int widthSize = MeasureSpec.getSize(pWidthMeasureSpec); + switch (widthMode) { + /** + * mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, + * MeasureSpec.AT_MOST。 + * + * + * MeasureSpec.EXACTLY是精确尺寸, + * 当我们将控件的layout_width或layout_height指定为具体数值时如andorid + * :layout_width="50dip",或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。 + * + * + * MeasureSpec.AT_MOST是最大尺寸, + * 当控件的layout_width或layout_height指定为WRAP_CONTENT时 + * ,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可 + * 。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。 + * + * + * MeasureSpec.UNSPECIFIED是未指定尺寸,这种情况不多,一般都是父控件是AdapterView, + * 通过measure方法传入的模式。 + */ + case MeasureSpec.AT_MOST: + case MeasureSpec.EXACTLY: + result = widthSize; + break; + } + return result; + } + + private int measureHeight(int pHeightMeasureSpec) { + int result = 0; + int heightMode = MeasureSpec.getMode(pHeightMeasureSpec); + int heightSize = MeasureSpec.getSize(pHeightMeasureSpec); + switch (heightMode) { + case MeasureSpec.UNSPECIFIED: + result = getSuggestedMinimumHeight(); + break; + case MeasureSpec.AT_MOST: + case MeasureSpec.EXACTLY: + result = heightSize; + break; + } + return result; + } + + /** + * 覆写onLayout,其目的是为了指定视图的显示位置,方法执行的前后顺序是在onMeasure之后,因为视图肯定是只有知道大小的情况下, + * 才能确定怎么摆放 + */ + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + // 遍历所有子视图 + int posLeft = HorInterval; + int posTop = VerInterval; + int posRight; + int posBottom; + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + // 获取在onMeasure中计算的视图尺寸 + int measureHeight = childView.getMeasuredHeight(); + int measuredWidth = childView.getMeasuredWidth(); + if (posLeft + getNextHorLastPos(i) > viewWidth) { + posLeft = HorInterval+measuredWidth; + posTop += (measureHeight + VerInterval); + } + posRight = posLeft + measuredWidth; + posBottom = posTop + measureHeight; + childView.layout(posLeft, posTop, posRight, posBottom); + posLeft += (measuredWidth + HorInterval); + } + } + + //获取控件的自适应高度 + private int getViewHeight() { + int viewwidth = HorInterval; + int viewheight = VerInterval; + if (getChildCount() > 0) { + viewheight = getChildAt(0).getMeasuredHeight() + VerInterval; + } + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + // 获取在onMeasure中计算的视图尺寸 + int measureHeight = childView.getMeasuredHeight(); + int measuredWidth = childView.getMeasuredWidth(); + if (viewwidth + getNextHorLastPos(i) > viewWidth) { + viewwidth = HorInterval; + viewheight += (measureHeight + VerInterval); + } else { + viewwidth += (measuredWidth + HorInterval); + } + } + return viewheight; + } + + private int getNextHorLastPos(int i) { + return getChildAt(i).getMeasuredWidth() + HorInterval; + } + + private OnGroupItemClickListener onGroupItemClickListener; + + public void setGroupClickListener(OnGroupItemClickListener listener) { + onGroupItemClickListener = listener; + for (int i = 0; i < getChildCount(); i++) { + final X childView = (X) getChildAt(i); + final int itemPos = i; + childView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + onGroupItemClickListener.onGroupItemClick(itemPos); + chooseItemStyle(itemPos); + } + }); + } + } + + //选中那个的样式 + public void chooseItemStyle(int pos) { + clearItemsStyle(); + if (pos < getChildCount()) { + X childView = (X) getChildAt(pos); + childView.setBackgroundResource(itemBGResPre); + childView.setTextColor(itemTextColorPre); + setItemPadding(childView); + } + } + + private void setItemPadding(X view) { + if (view instanceof Button) { + view.setPadding(textModePaddingx, textModePaddingy, textModePaddingx, textModePaddingy); + } else { + view.setPadding(textModePaddingx, textModePaddingy, textModePaddingx, textModePaddingy); + } + } + + //清除Group所有的样式 + private void clearItemsStyle() { + for (int i = 0; i < getChildCount(); i++) { + X childView = (X) getChildAt(i); + childView.setBackgroundResource(itemBGResNor); + childView.setTextColor(itemTextColorNor); + setItemPadding(childView); + } + } + + public void addItemViews(ArrayList texts, String mode,int position) { + mTexts = texts; + removeAllViews(); + for (int i = 0;i= 0) { + return mTexts.get(itemID); + } + return null; + } + + public void setItemTextSize(float itemTextSize) { + this.itemTextSize = itemTextSize; + } + + public void setItemBGResNor(int itemBGResNor) { + this.itemBGResNor = itemBGResNor; + } + + public void setItemTextColorNor(int itemTextColorNor) { + this.itemTextColorNor = itemTextColorNor; + } + + public void setItemBGResPre(int itemBGResPre) { + this.itemBGResPre = itemBGResPre; + } + + public void setItemTextColorPre(int itemTextColorPre) { + this.itemTextColorPre = itemTextColorPre; + } + + public interface OnGroupItemClickListener { + void onGroupItemClick(int item); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/GroupmanageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/GroupmanageView.java new file mode 100644 index 0000000..801bffc --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/GroupmanageView.java @@ -0,0 +1,333 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Color; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.bean.GroupManageBean; + +/** + * Created by WANGChengXin on 2019/7/30.//多选 + */ + +public class GroupmanageView extends ViewGroup { + public static final String BTN_MODE = "BTNMODE"; //按钮模式 + public static final String TEV_MODE = "TEVMODE"; //文本模式 + + private static final String TAG = "IViewGroup"; + private final int HorInterval = 45; //水平间隔 + private final int VerInterval = 45; //垂直间隔 + + private int viewWidth; //控件的宽度 + private int viewHeight; //控件的高度 + + private ArrayList mTexts = new ArrayList<>(); + private Context mContext; + private int textModePaddingx = 20; + private int textModePaddingy = 15; + + //正常样式 + private float itemTextSize = 12; + private int itemBGResNor = R.drawable.rect_normal_group; + private int itemTextColorNor = Color.parseColor("#ff999999"); + + //选中的样式 + private int itemBGResPre = R.drawable.rect_false_drug; + private int itemTextColorPre = Color.parseColor("#8D2316"); + + public GroupmanageView(Context context) { + this(context, null); + } + + public GroupmanageView(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + } + + /** + * 计算控件的大小 + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + viewWidth = measureWidth(widthMeasureSpec); + viewHeight = measureHeight(heightMeasureSpec); + Log.e(TAG, "onMeasure:" + viewWidth + ":" + viewHeight); + // 计算自定义的ViewGroup中所有子控件的大小 + measureChildren(widthMeasureSpec, heightMeasureSpec); + // 设置自定义的控件MyViewGroup的大小 + setMeasuredDimension(viewWidth, getViewHeight()); + } + + + private int measureWidth(int pWidthMeasureSpec) { + int result = 0; + int widthMode = MeasureSpec.getMode(pWidthMeasureSpec); + int widthSize = MeasureSpec.getSize(pWidthMeasureSpec); + switch (widthMode) { + /** + * mode共有三种情况,取值分别为MeasureSpec.UNSPECIFIED, MeasureSpec.EXACTLY, + * MeasureSpec.AT_MOST。 + * + * + * MeasureSpec.EXACTLY是精确尺寸, + * 当我们将控件的layout_width或layout_height指定为具体数值时如andorid + * :layout_width="50dip",或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。 + * + * + * MeasureSpec.AT_MOST是最大尺寸, + * 当控件的layout_width或layout_height指定为WRAP_CONTENT时 + * ,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可 + * 。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。 + * + * + * MeasureSpec.UNSPECIFIED是未指定尺寸,这种情况不多,一般都是父控件是AdapterView, + * 通过measure方法传入的模式。 + */ + case MeasureSpec.AT_MOST: + case MeasureSpec.EXACTLY: + result = widthSize; + break; + } + return result; + } + + private int measureHeight(int pHeightMeasureSpec) { + int result = 0; + int heightMode = MeasureSpec.getMode(pHeightMeasureSpec); + int heightSize = MeasureSpec.getSize(pHeightMeasureSpec); + switch (heightMode) { + case MeasureSpec.UNSPECIFIED: + result = getSuggestedMinimumHeight(); + break; + case MeasureSpec.AT_MOST: + case MeasureSpec.EXACTLY: + result = heightSize; + break; + } + return result; + } + + /** + * 覆写onLayout,其目的是为了指定视图的显示位置,方法执行的前后顺序是在onMeasure之后,因为视图肯定是只有知道大小的情况下, + * 才能确定怎么摆放 + */ + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + // 遍历所有子视图 + int posLeft = HorInterval; + int posTop = VerInterval; + int posRight; + int posBottom; + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + // 获取在onMeasure中计算的视图尺寸 + int measureHeight = childView.getMeasuredHeight(); + int measuredWidth = childView.getMeasuredWidth(); + if (posLeft + getNextHorLastPos(i) > viewWidth) { + posLeft = HorInterval; + posTop += (measureHeight + VerInterval); + } + posRight = posLeft + measuredWidth; + posBottom = posTop + measureHeight; + childView.layout(posLeft, posTop, posRight, posBottom); + posLeft += (measuredWidth + HorInterval); + } + } + + //获取控件的自适应高度 + private int getViewHeight() { + int viewwidth = HorInterval; + int viewheight = VerInterval; + if (getChildCount() > 0) { + viewheight = getChildAt(0).getMeasuredHeight() + VerInterval; + } + for (int i = 0; i < getChildCount(); i++) { + View childView = getChildAt(i); + // 获取在onMeasure中计算的视图尺寸 + int measureHeight = childView.getMeasuredHeight(); + int measuredWidth = childView.getMeasuredWidth(); + if (viewwidth + getNextHorLastPos(i) > viewWidth) { + viewwidth = HorInterval+measureHeight; + viewheight += (measureHeight + VerInterval); + } else { + viewwidth += (measuredWidth + HorInterval); + } + } + viewheight= viewheight+200; + return viewheight; + } + + private int getNextHorLastPos(int i) { + return getChildAt(i).getMeasuredWidth() + HorInterval; + } + + private OnGroupItemClickListener onGroupItemClickListener; + + public void setGroupClickListener(OnGroupItemClickListener listener) { + onGroupItemClickListener = listener; + for (int i = 0; i < getChildCount(); i++) { + final X childView = (X) getChildAt(i); + final int itemPos = i; + childView.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { +// chooseItemStyle(itemPos); + onGroupItemClickListener.onGroupItemClick(itemPos); + } + }); + } + } + + //选中那个的样式,如果ischoose,false,true判断 + public void chooseItemStyle(int pos) { +// clearItemsStyle(); + if (pos < getChildCount()) { + if (!mTexts.get(pos).isIschoose()){ + X childView = (X) getChildAt(pos); + childView.setBackgroundResource(itemBGResPre); + childView.setTextColor(itemTextColorPre); + setItemPadding(childView); + mTexts.get(pos).setIschoose(true); + }else { + X childView = (X) getChildAt(pos); + childView.setBackgroundResource(itemBGResNor); + childView.setTextColor(itemTextColorNor); + setItemPadding(childView); + mTexts.get(pos).setIschoose(false); + } + + } + } + + private void setItemPadding(X view) { + if (view instanceof Button) { + view.setPadding(textModePaddingx, textModePaddingy, textModePaddingx, textModePaddingy); + } else { + view.setPadding(textModePaddingx, textModePaddingy, textModePaddingx, textModePaddingy); + } + } + + //清除Group所有的样式 + private void clearItemsStyle() { + for (int i = 0; i < getChildCount(); i++) { + X childView = (X) getChildAt(i); + childView.setBackgroundResource(itemBGResNor); + childView.setTextColor(itemTextColorNor); + setItemPadding(childView); + } + } + public void addBigItemViews(ArrayList texts, String mode,int textsize) { + mTexts = texts; + removeAllViews(); + for (int i = 0;i texts, String mode) { + mTexts = texts; + removeAllViews(); + for (int i = 0;i= 0) { +// return mTexts.get(itemID); +// } +// return null; +// } + + public void setItemTextSize(float itemTextSize) { + this.itemTextSize = itemTextSize; + } + + public void setItemBGResNor(int itemBGResNor) { + this.itemBGResNor = itemBGResNor; + } + + public void setItemTextColorNor(int itemTextColorNor) { + this.itemTextColorNor = itemTextColorNor; + } + + public void setItemBGResPre(int itemBGResPre) { + this.itemBGResPre = itemBGResPre; + } + + public void setItemTextColorPre(int itemTextColorPre) { + this.itemTextColorPre = itemTextColorPre; + } + + public interface OnGroupItemClickListener { + void onGroupItemClick(int item); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/HideIMEUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/HideIMEUtil.java new file mode 100644 index 0000000..c1d925e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/HideIMEUtil.java @@ -0,0 +1,37 @@ +package cn.shangyu.gdxzExpert.view; + + +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; + +/** + * Date:2019/8/21 + * Time:9:28 + * author:xiayile + */ +public class HideIMEUtil { + + public static void wrap(Activity activity) { + ViewGroup contentParent = (ViewGroup) activity.findViewById(android.R.id.content); + wrap(contentParent); + } + + public static void wrap(Fragment fragment) { + ViewGroup contentParent = (ViewGroup) fragment.getView().getParent(); + wrap(contentParent); + } + + public static void wrap(ViewGroup contentParent) { + View content = contentParent.getChildAt(0); + contentParent.removeView(content); + + ViewGroup.LayoutParams p = content.getLayoutParams(); + AutoHideIMEFrameLayout layout = new AutoHideIMEFrameLayout(content.getContext()); + layout.addView(content); + + contentParent.addView(layout, new ViewGroup.LayoutParams(p.width, p.height)); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/IndexViewPager.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/IndexViewPager.java new file mode 100644 index 0000000..8598fd8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/IndexViewPager.java @@ -0,0 +1,68 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; + +import androidx.viewpager.widget.ViewPager; + +/** + * 自定义的不可左右滑动的viewpager + * @author gaopeng + * + */ +public class IndexViewPager extends ViewPager { + + private boolean isCanScroll = false; + + public IndexViewPager(Context context) { + super(context); + } + + public IndexViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setScanScroll(boolean isCanScroll) { + this.isCanScroll = isCanScroll; + } + + @Override + public void scrollTo(int x, int y) { + super.scrollTo(x, y); + } + + @Override + public boolean onTouchEvent(MotionEvent arg0) { + // TODO Auto-generated method stub + if (isCanScroll) { + return super.onTouchEvent(arg0); + } else { + return false; + } + + } + + @Override + public void setCurrentItem(int item, boolean smoothScroll) { + // TODO Auto-generated method stub + super.setCurrentItem(item, smoothScroll); + } + + @Override + public void setCurrentItem(int item) { + // TODO Auto-generated method stub + super.setCurrentItem(item); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent arg0) { + // TODO Auto-generated method stub + if (isCanScroll) { + return super.onInterceptTouchEvent(arg0); + } else { + return false; + } + + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/Info.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/Info.java new file mode 100644 index 0000000..e6a5e9d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/Info.java @@ -0,0 +1,40 @@ +package cn.shangyu.gdxzExpert.view; + +import android.graphics.PointF; +import android.graphics.RectF; +import android.widget.ImageView; + +/** + * Created by liuheng on 2015/8/19. + */ +public class Info { + + // 内部图片在整个手机界面的位置 + RectF mRect = new RectF(); + + // 控件在窗口的位置 + RectF mImgRect = new RectF(); + + RectF mWidgetRect = new RectF(); + + RectF mBaseRect = new RectF(); + + PointF mScreenCenter = new PointF(); + + float mScale; + + float mDegrees; + + ImageView.ScaleType mScaleType; + + public Info(RectF rect, RectF img, RectF widget, RectF base, PointF screenCenter, float scale, float degrees, ImageView.ScaleType scaleType) { + mRect.set(rect); + mImgRect.set(img); + mWidgetRect.set(widget); + mScale = scale; + mScaleType = scaleType; + mDegrees = degrees; + mBaseRect.set(base); + mScreenCenter.set(screenCenter); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/ItemLongClickedPopWindow.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/ItemLongClickedPopWindow.java new file mode 100644 index 0000000..cb82a5f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/ItemLongClickedPopWindow.java @@ -0,0 +1,81 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.PopupWindow; +import cn.shangyu.gdxzExpert.R; + +public class ItemLongClickedPopWindow extends PopupWindow { + /** + * 书签条目弹出菜单 * @value * {@value} * + */ + public static final int FAVORITES_ITEM_POPUPWINDOW = 0; + /** + * 书签页面弹出菜单 * @value * {@value} * + */ + public static final int FAVORITES_VIEW_POPUPWINDOW = 1; + /** + * 历史条目弹出菜单 * @value * {@value} * + */ + public static final int HISTORY_ITEM_POPUPWINDOW = 3; + /** + * 历史页面弹出菜单 * @value * {@value} * + */ + public static final int HISTORY_VIEW_POPUPWINDOW = 4; + /** + * 图片项目弹出菜单 * @value * {@value} * + */ + public static final int IMAGE_VIEW_POPUPWINDOW = 5; + /** + * 超链接项目弹出菜单 * @value * {@value} * + */ + public static final int ACHOR_VIEW_POPUPWINDOW = 6; + private LayoutInflater itemLongClickedPopWindowInflater; + private View itemLongClickedPopWindowView; + private Context context; + private int type; + + /** + * 构造函数 * @param context 上下文 * @param width 宽度 * @param height 高度 * + */ + public ItemLongClickedPopWindow(Context context, int type, int width, int height) { + super(context); + this.context = context; + this.type = type; + //创建 + this.initTab(); + //设置默认选项 + setWidth(width); + setHeight(height); + setContentView(this.itemLongClickedPopWindowView); + setOutsideTouchable(true); + setFocusable(true); + } + + //实例化 + private void initTab() { + this.itemLongClickedPopWindowInflater = LayoutInflater.from(this.context); + switch (type) { +// case FAVORITES_ITEM_POPUPWINDOW: +// this.itemLongClickedPopWindowView = this.itemLongClickedPopWindowInflater.inflate(R.layout.list_item_longclicked_favorites, null); +// break; +// case FAVORITES_VIEW_POPUPWINDOW: //对于书签内容弹出菜单,未作处理 +// break; +// case HISTORY_ITEM_POPUPWINDOW: +// this.itemLongClickedPopWindowView = this.itemLongClickedPopWindowInflater.inflate(R.layout.list_item_longclicked_history, null); +// break; +// case HISTORY_VIEW_POPUPWINDOW: //对于历史内容弹出菜单,未作处理 +// break; +// case ACHOR_VIEW_POPUPWINDOW: //超链接 +// break; + case IMAGE_VIEW_POPUPWINDOW: //图片 + this.itemLongClickedPopWindowView = this.itemLongClickedPopWindowInflater.inflate(R.layout.list_item_longclicked_img, null); + break; + } + } + + public View getView(int id) { + return this.itemLongClickedPopWindowView.findViewById(id); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/KeyboardLayout.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/KeyboardLayout.java new file mode 100644 index 0000000..9a901af --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/KeyboardLayout.java @@ -0,0 +1,67 @@ +package cn.shangyu.gdxzExpert.view; + + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.RelativeLayout; + +public class KeyboardLayout extends RelativeLayout { + + private static final String TAG = KeyboardLayout.class.getSimpleName(); + public static final byte KEYBOARD_STATE_SHOW = -3; + public static final byte KEYBOARD_STATE_HIDE = -2; + public static final byte KEYBOARD_STATE_INIT = -1; + private boolean mHasInit; + private boolean mHasKeybord; + private int mHeight; + private onKeyboaddsChangeListener mListener; + + public KeyboardLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public KeyboardLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public KeyboardLayout(Context context) { + super(context); + } + /** + * set keyboard state listener + */ + public void setOnkbdStateListener(onKeyboaddsChangeListener listener){ + mListener = listener; + } + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + super.onLayout(changed, l, t, r, b); + if (!mHasInit) { + mHasInit = true; + mHeight = b; + if (mListener != null) { + mListener.onKeyBoardStateChange(KEYBOARD_STATE_INIT); + } + } else { + mHeight = mHeight < b ? b : mHeight; + } + if (mHasInit && mHeight > b) { + mHasKeybord = true; + if (mListener != null) { + mListener.onKeyBoardStateChange(KEYBOARD_STATE_SHOW); + } + + } + if (mHasInit && mHasKeybord && mHeight == b) { + mHasKeybord = false; + if (mListener != null) { + mListener.onKeyBoardStateChange(KEYBOARD_STATE_HIDE); + } +// Log.w(TAG, "hide keyboard......."); + } + } + + public interface onKeyboaddsChangeListener{ + public void onKeyBoardStateChange(int state); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyDatePickerDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyDatePickerDialog.java new file mode 100644 index 0000000..2f4a90a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyDatePickerDialog.java @@ -0,0 +1,131 @@ +package cn.shangyu.gdxzExpert.view; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; + +import android.app.DatePickerDialog; +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.widget.DatePicker; +import android.widget.FrameLayout; +import android.widget.LinearLayout; +import android.widget.NumberPicker; + +public class MyDatePickerDialog extends DatePicker { + Context context; + + public MyDatePickerDialog(Context context, AttributeSet attrs, + int defStyleAttr) { + + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + this.context = context; + } + + public MyDatePickerDialog(Context context, AttributeSet attrs) { + + super(context, attrs); + // TODO Auto-generated constructor stub + this.context = context; + } + + public MyDatePickerDialog(Context context) { + + super(context); + // TODO Auto-generated constructor stub + this.context = context; + } + + /** + * + * 设置时间选择器的分割线颜色 + * + * @param datePicker + */ + private void setDatePickerDividerColor(DatePicker datePicker) { + // Divider changing: + + // 获取 mSpinners + LinearLayout llFirst = (LinearLayout) datePicker.getChildAt(0); + + // 获取 NumberPicker + LinearLayout mSpinners = (LinearLayout) llFirst.getChildAt(0); + for (int i = 0; i < mSpinners.getChildCount(); i++) { + NumberPicker picker = (NumberPicker) mSpinners.getChildAt(i); + + Field[] pickerFields = NumberPicker.class.getDeclaredFields(); + for (Field pf : pickerFields) { + if (pf.getName().equals("mSelectionDivider")) { + pf.setAccessible(true); + try { + pf.set(picker, new ColorDrawable(context.getResources() + .getColor(R.color.top_title))); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + break; + } + } + } + } + + /** + * 调整FrameLayout大小 + * + * @param tp + */ + private void resizePikcer() { + List npList = findNumberPicker(this); + for (NumberPicker np : npList) { + resizeNumberPicker(np); + } + } + + /** + * 得到viewGroup里面的numberpicker组件 + * + * @param viewGroup + * @return + */ + private List findNumberPicker(ViewGroup viewGroup) { + List npList = new ArrayList(); + View child = null; + if (null != viewGroup) { + for (int i = 0; i < viewGroup.getChildCount(); i++) { + child = viewGroup.getChildAt(i); + if (child instanceof NumberPicker) { + npList.add((NumberPicker) child); + } else if (child instanceof LinearLayout) { + List result = findNumberPicker((ViewGroup) child); + if (result.size() > 0) { + return result; + } + } + } + } + return npList; + } + + /* + * 调整numberpicker大小 + */ + private void resizeNumberPicker(NumberPicker np) { + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( + dip2px(context, 47), LayoutParams.WRAP_CONTENT); + params.setMargins(dip2px(context, 5), 0, dip2px(context, 5), 0); + np.setLayoutParams(params); + } + + public static int dip2px(Context context, double d) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (d * scale + 0.5f); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyEditext.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyEditext.java new file mode 100644 index 0000000..0d29b22 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyEditext.java @@ -0,0 +1,31 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.widget.EditText; + +public class MyEditext extends EditText { + + public MyEditext(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + public MyEditext(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public MyEditext(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + getParent().requestDisallowInterceptTouchEvent(true); + return super.dispatchTouchEvent(ev); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyGridView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyGridView.java new file mode 100644 index 0000000..1afa9ee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyGridView.java @@ -0,0 +1,33 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.GridView; + +/** + * 自定义gridview,解决ListView中嵌套gridview显示不正常的问题(1行半) + * + * @author wangyx + * @version 1.0.0 2012-9-14 + */ +public class MyGridView extends GridView { + public MyGridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public MyGridView(Context context) { + super(context); + } + + public MyGridView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, + MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyLine.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyLine.java new file mode 100644 index 0000000..8eb4c0a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyLine.java @@ -0,0 +1,39 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.widget.ImageView; + +public class MyLine extends ImageView { + + public MyLine(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated constructor stub + } + + public MyLine(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public MyLine(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + protected void onDraw(Canvas canvas) { + // TODO Auto-generated method stub + Path clipPath = new Path(); + int w = this.getWidth(); + int h = this.getHeight(); + clipPath.addRoundRect(new RectF(0, 0, w, h), 5.0f, 5.0f, + Path.Direction.CW); + canvas.clipPath(clipPath); + super.onDraw(canvas); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyListView.java new file mode 100644 index 0000000..5b60fba --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyListView.java @@ -0,0 +1,35 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.widget.ListView; + +public class MyListView extends ListView { + + public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + } + + public MyListView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public MyListView(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec,heightMeasureSpec); + // TODO Auto-generated method stub +// int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, +// MeasureSpec.AT_MOST); + Log.d("gdxzbig",""+heightMeasureSpec+" "); +// super.onMeasure(widthMeasureSpec, expandSpec); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyScrollView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyScrollView.java new file mode 100644 index 0000000..9afd1c7 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyScrollView.java @@ -0,0 +1,24 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ScrollView; + +public class MyScrollView extends ScrollView { + + public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + // TODO Auto-generated constructor stub + } + + public MyScrollView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public MyScrollView(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/MyTextView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyTextView.java new file mode 100644 index 0000000..ce4737f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/MyTextView.java @@ -0,0 +1,45 @@ +package cn.shangyu.gdxzExpert.view; + +import java.util.ArrayList; +import java.util.List; + +import android.content.Context; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.style.ForegroundColorSpan; +import android.util.AttributeSet; +import android.widget.TextView; + +public class MyTextView extends TextView { + public MyTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setSpecifiedTextsColor(String text, String specifiedTexts, + int color,SpannableStringBuilder styledText) { + List sTextsStartList = new ArrayList<>(); + + int sTextLength = specifiedTexts.length(); + String temp = text; + int lengthFront = 0;// 记录被找出后前面的字段的长度 + int start = -1; + do { + start = temp.indexOf(specifiedTexts); + + if (start != -1) { + start = start + lengthFront; + sTextsStartList.add(start); + lengthFront = start + sTextLength; + temp = text.substring(lengthFront); + } + + } while (start != -1); + + for (Integer i : sTextsStartList) { + styledText.setSpan(new ForegroundColorSpan(color), i, i + + sTextLength, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + + setText(styledText); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/NormalItemView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/NormalItemView.java new file mode 100644 index 0000000..52961ee --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/NormalItemView.java @@ -0,0 +1,83 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import cn.shangyu.gdxzExpert.R; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; + +public class NormalItemView extends BaseTabItem { + TextView tv_title; + ImageView im_selector; + + public NormalItemView(@NonNull Context context) { + super(context); + LayoutInflater.from(context).inflate(R.layout.item_kejianna, this, true); + tv_title=findViewById(R.id.tv_title); + im_selector=findViewById(R.id.im_selector); + + } + /** + * 方便初始化的方法 + * + * @param title 标题 + */ + public void initialize( String title) { + + tv_title.setText(title); + } + @Override + public void setChecked(boolean checked) { + if (checked) { + + tv_title.setTextColor(Color.parseColor("#ff000000")); + tv_title.setTextSize(17); + tv_title.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); + im_selector.setVisibility(VISIBLE); + } else { + + tv_title.setTextColor(Color.parseColor("#ff666666")); + tv_title.setTextSize(14); + tv_title.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); + im_selector.setVisibility(GONE); + } + + } + + @Override + public void setMessageNumber(int number) { + + } + + @Override + public void setHasMessage(boolean hasMessage) { + + } + + @Override + public void setTitle(String title) { + tv_title.setText(title); + + } + + @Override + public void setDefaultDrawable(Drawable drawable) { + + } + + @Override + public void setSelectedDrawable(Drawable drawable) { + + } + + @Override + public String getTitle() { + return tv_title.getText().toString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/NotNormalItemView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/NotNormalItemView.java new file mode 100644 index 0000000..aaf720e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/NotNormalItemView.java @@ -0,0 +1,84 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.Typeface; +import android.graphics.drawable.Drawable; +import android.view.LayoutInflater; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; + +import cn.shangyu.gdxzExpert.R; +import me.majiajie.pagerbottomtabstrip.item.BaseTabItem; + +public class NotNormalItemView extends BaseTabItem { + TextView tv_title; + ImageView im_selector; + + public NotNormalItemView(@NonNull Context context) { + super(context); + LayoutInflater.from(context).inflate(R.layout.item_zhazhi, this, true); + tv_title=findViewById(R.id.tv_title); + im_selector=findViewById(R.id.im_selector); + + } + /** + * 方便初始化的方法 + * + * @param title 标题 + */ + public void initialize( String title) { + + tv_title.setText(title); + } + @Override + public void setChecked(boolean checked) { + if (checked) { + + tv_title.setTextColor(Color.parseColor("#ff000000")); + tv_title.setTextSize(20); + tv_title.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); + im_selector.setVisibility(VISIBLE); + } else { + + tv_title.setTextColor(Color.parseColor("#ff666666")); + tv_title.setTextSize(16); + tv_title.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL)); + im_selector.setVisibility(GONE); + } + + } + + @Override + public void setMessageNumber(int number) { + + } + + @Override + public void setHasMessage(boolean hasMessage) { + + } + + @Override + public void setTitle(String title) { + tv_title.setText(title); + + } + + @Override + public void setDefaultDrawable(Drawable drawable) { + + } + + @Override + public void setSelectedDrawable(Drawable drawable) { + + } + + @Override + public String getTitle() { + return tv_title.getText().toString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoGridItem.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoGridItem.java new file mode 100644 index 0000000..179951a --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoGridItem.java @@ -0,0 +1,64 @@ +package cn.shangyu.gdxzExpert.view; + +import cn.shangyu.gdxzExpert.R; +import android.content.Context; +import android.graphics.Bitmap; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.widget.Checkable; +import android.widget.ImageView; +import android.widget.RelativeLayout; + +public class PhotoGridItem extends RelativeLayout implements Checkable { + private Context mContext; + private boolean mCheck; + private ImageView mImageView; + private ImageView mSelect; + + public PhotoGridItem(Context context) { + this(context, null, 0); + } + + public PhotoGridItem(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public PhotoGridItem(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + mContext = context; + LayoutInflater.from(mContext).inflate(R.layout.photoalbum_gridview_item, this); + mImageView = (ImageView)findViewById(R.id.photo_img_view); + mSelect = (ImageView)findViewById(R.id.photo_select); + } + @Override + public void setChecked(boolean checked) { + mCheck = checked; +// mSelect.setImageDrawable(getResources().getDrawable(R.drawable.cb_on)); + mSelect.setImageDrawable(checked ? getResources().getDrawable(R.drawable.cb_on) : getResources().getDrawable(R.drawable.cb_normal)); + //mSelect.setVisibility(checked?View.VISIBLE:View.GONE); + } + + @Override + public boolean isChecked() { + return mCheck; + } + + @Override + public void toggle() { + setChecked(!mCheck); + } + + public void setImgResID(int id){ + if(mImageView != null){ + mImageView.setBackgroundResource(id); + } + } + + public void SetBitmap(Bitmap bit){ + if(mImageView != null){ + mImageView.setImageBitmap(bit); + } + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoView.java new file mode 100644 index 0000000..4c4b04c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/PhotoView.java @@ -0,0 +1,1484 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.graphics.PointF; +import android.graphics.Rect; +import android.graphics.RectF; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.ScaleGestureDetector; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.widget.ImageView; +import android.widget.OverScroller; +import android.widget.Scroller; + +import java.lang.annotation.Target; +import java.sql.Ref; + +/** + * Created by zhaodewei + * + */ +public class PhotoView extends ImageView { + + private final static int MIN_ROTATE = 35; + private final static int ANIMA_DURING = 340; + private final static float MAX_SCALE = 2.5f; + + private int mMinRotate; + private int mAnimaDuring; + private float mMaxScale; + + private int MAX_OVER_SCROLL = 0; + private int MAX_FLING_OVER_SCROLL = 0; + private int MAX_OVER_RESISTANCE = 0; + private int MAX_ANIM_FROM_WAITE = 500; + + private Matrix mBaseMatrix = new Matrix(); + private Matrix mAnimaMatrix = new Matrix(); + private Matrix mSynthesisMatrix = new Matrix(); + private Matrix mTmpMatrix = new Matrix(); + + private RotateGestureDetector mRotateDetector; + private GestureDetector mDetector; + private ScaleGestureDetector mScaleDetector; + private OnClickListener mClickListener; + + private ScaleType mScaleType; + + private boolean hasMultiTouch; + private boolean hasDrawable; + private boolean isKnowSize; + private boolean hasOverTranslate; + private boolean isEnable = false; + private boolean isInit; + private boolean mAdjustViewBounds; + // 褰撳墠鏄惁澶勪簬鏀惧ぇ鐘舵� + private boolean isZoonUp; + private boolean canRotate; + + private boolean imgLargeWidth; + private boolean imgLargeHeight; + + private float mRotateFlag; + private float mDegrees; + private float mScale = 1.0f; + private int mTranslateX; + private int mTranslateY; + + private float mHalfBaseRectWidth; + private float mHalfBaseRectHeight; + + private RectF mWidgetRect = new RectF(); + private RectF mBaseRect = new RectF(); + private RectF mImgRect = new RectF(); + private RectF mTmpRect = new RectF(); + private RectF mCommonRect = new RectF(); + + private PointF mScreenCenter = new PointF(); + private PointF mScaleCenter = new PointF(); + private PointF mRotateCenter = new PointF(); + + private Transform mTranslate = new Transform(); + + private RectF mClip; + private Info mFromInfo; + private long mInfoTime; + private Runnable mCompleteCallBack; + + private OnLongClickListener mLongClick; + + public PhotoView(Context context) { + super(context); + init(); + } + + public PhotoView(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public PhotoView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + super.setScaleType(ScaleType.MATRIX); + if (mScaleType == null) + mScaleType = ScaleType.CENTER_INSIDE; + mRotateDetector = new RotateGestureDetector(mRotateListener); + mDetector = new GestureDetector(getContext(), mGestureListener); + mScaleDetector = new ScaleGestureDetector(getContext(), mScaleListener); + float density = getResources().getDisplayMetrics().density; + MAX_OVER_SCROLL = (int) (density * 30); + MAX_FLING_OVER_SCROLL = (int) (density * 30); + MAX_OVER_RESISTANCE = (int) (density * 140); + + mMinRotate = MIN_ROTATE; + mAnimaDuring = ANIMA_DURING; + mMaxScale = MAX_SCALE; + } + + /** + * 鑾峰彇榛樿鐨勫姩鐢绘寔缁椂闂� + */ + public int getDefaultAnimaDuring() { + return ANIMA_DURING; + } + + @Override + public void setOnClickListener(OnClickListener l) { + super.setOnClickListener(l); + mClickListener = l; + } + + @Override + public void setScaleType(ScaleType scaleType) { + ScaleType old = mScaleType; + mScaleType = scaleType; + + if (old != scaleType) + initBase(); + } + + @Override + public void setOnLongClickListener(OnLongClickListener l) { + mLongClick = l; + } + + /** + * 璁剧疆鍔ㄧ敾鐨勬彃鍏ュ櫒 + */ + public void setInterpolator(Interpolator interpolator) { + mTranslate.setInterpolator(interpolator); + } + + /** + * 鑾峰彇鍔ㄧ敾鎸佺画鏃堕棿 + */ + public int getAnimaDuring() { + return mAnimaDuring; + } + + /** + * 璁剧疆鍔ㄧ敾鐨勬寔缁椂闂� + */ + public void setAnimaDuring(int during) { + mAnimaDuring = during; + } + + /** + * 璁剧疆鏈�ぇ鍙互缂╂斁鐨勫�鏁� + */ + public void setMaxScale(float maxScale) { + mMaxScale = maxScale; + } + + /** + * 鑾峰彇鏈�ぇ鍙互缂╂斁鐨勫�鏁� + */ + public float getMaxScale() { + return mMaxScale; + } + + /** + * 鍚敤缂╂斁鍔熻兘 + */ + public void enable() { + isEnable = true; + } + + /** + * 绂佺敤缂╂斁鍔熻兘 + */ + public void disenable() { + isEnable = false; + } + + /** + */ + public void setMaxAnimFromWaiteTime(int wait) { + MAX_ANIM_FROM_WAITE = wait; + } + + @Override + public void setImageResource(int resId) { + Drawable drawable = null; + try { + drawable = getResources().getDrawable(resId); + } catch (Exception e) { + } + + setImageDrawable(drawable); + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + + if (drawable == null) { + hasDrawable = false; + return; + } + + if (!hasSize(drawable)) + return; + + if (!hasDrawable) { + hasDrawable = true; + } + + initBase(); + } + + private boolean hasSize(Drawable d) { + if ((d.getIntrinsicHeight() <= 0 || d.getIntrinsicWidth() <= 0) + && (d.getMinimumWidth() <= 0 || d.getMinimumHeight() <= 0) + && (d.getBounds().width() <= 0 || d.getBounds().height() <= 0)) { + return false; + } + return true; + } + + private static int getDrawableWidth(Drawable d) { + int width = d.getIntrinsicWidth(); + if (width <= 0) + width = d.getMinimumWidth(); + if (width <= 0) + width = d.getBounds().width(); + return width; + } + + private static int getDrawableHeight(Drawable d) { + int height = d.getIntrinsicHeight(); + if (height <= 0) + height = d.getMinimumHeight(); + if (height <= 0) + height = d.getBounds().height(); + return height; + } + + private void initBase() { + if (!hasDrawable) + return; + if (!isKnowSize) + return; + + mBaseMatrix.reset(); + mAnimaMatrix.reset(); + + isZoonUp = false; + + Drawable img = getDrawable(); + + int w = getWidth(); + int h = getHeight(); + int imgw = getDrawableWidth(img); + int imgh = getDrawableHeight(img); + + mBaseRect.set(0, 0, imgw, imgh); + + // 浠ュ浘鐗囦腑蹇冪偣灞呬腑浣嶇Щ + int tx = (w - imgw) / 2; + int ty = (h - imgh) / 2; + + float sx = 1; + float sy = 1; + + // 缂╂斁锛岄粯璁や笉瓒呰繃灞忓箷澶у皬 + if (imgw > w) { + sx = (float) w / imgw; + } + + if (imgh > h) { + sy = (float) h / imgh; + } + + float scale = sx < sy ? sx : sy; + + mBaseMatrix.reset(); + mBaseMatrix.postTranslate(tx, ty); + mBaseMatrix.postScale(scale, scale, mScreenCenter.x, mScreenCenter.y); + mBaseMatrix.mapRect(mBaseRect); + + mHalfBaseRectWidth = mBaseRect.width() / 2; + mHalfBaseRectHeight = mBaseRect.height() / 2; + + mScaleCenter.set(mScreenCenter); + mRotateCenter.set(mScaleCenter); + + executeTranslate(); + + switch (mScaleType) { + case CENTER: + initCenter(); + break; + case CENTER_CROP: + initCenterCrop(); + break; + case CENTER_INSIDE: + initCenterInside(); + break; + case FIT_CENTER: + initFitCenter(); + break; + case FIT_START: + initFitStart(); + break; + case FIT_END: + initFitEnd(); + break; + case FIT_XY: + initFitXY(); + break; + } + + isInit = true; + + if (mFromInfo != null + && System.currentTimeMillis() - mInfoTime < MAX_ANIM_FROM_WAITE) { + animaFrom(mFromInfo); + } + + mFromInfo = null; + } + + private void initCenter() { + if (!hasDrawable) + return; + if (!isKnowSize) + return; + + Drawable img = getDrawable(); + + int imgw = getDrawableWidth(img); + int imgh = getDrawableHeight(img); + + if (imgw > mWidgetRect.width() || imgh > mWidgetRect.height()) { + float scaleX = imgw / mImgRect.width(); + float scaleY = imgh / mImgRect.height(); + + mScale = scaleX > scaleY ? scaleX : scaleY; + + mAnimaMatrix.postScale(mScale, mScale, mScreenCenter.x, + mScreenCenter.y); + + executeTranslate(); + + resetBase(); + } + } + + private void initCenterCrop() { + if (mImgRect.width() < mWidgetRect.width() + || mImgRect.height() < mWidgetRect.height()) { + float scaleX = mWidgetRect.width() / mImgRect.width(); + float scaleY = mWidgetRect.height() / mImgRect.height(); + + mScale = scaleX > scaleY ? scaleX : scaleY; + + mAnimaMatrix.postScale(mScale, mScale, mScreenCenter.x, + mScreenCenter.y); + + executeTranslate(); + resetBase(); + } + } + + private void initCenterInside() { + if (mImgRect.width() > mWidgetRect.width() + || mImgRect.height() > mWidgetRect.height()) { + float scaleX = mWidgetRect.width() / mImgRect.width(); + float scaleY = mWidgetRect.height() / mImgRect.height(); + + mScale = scaleX < scaleY ? scaleX : scaleY; + + mAnimaMatrix.postScale(mScale, mScale, mScreenCenter.x, + mScreenCenter.y); + + executeTranslate(); + resetBase(); + } + } + + private void initFitCenter() { + if (mImgRect.width() < mWidgetRect.width()) { + mScale = mWidgetRect.width() / mImgRect.width(); + + mAnimaMatrix.postScale(mScale, mScale, mScreenCenter.x, + mScreenCenter.y); + + executeTranslate(); + resetBase(); + } + } + + private void initFitStart() { + initFitCenter(); + + float ty = -mImgRect.top; + mTranslateY += ty; + mAnimaMatrix.postTranslate(0, ty); + executeTranslate(); + resetBase(); + } + + private void initFitEnd() { + initFitCenter(); + + float ty = (mWidgetRect.bottom - mImgRect.bottom); + mTranslateY += ty; + mAnimaMatrix.postTranslate(0, ty); + executeTranslate(); + resetBase(); + } + + private void initFitXY() { + float scaleX = mWidgetRect.width() / mImgRect.width(); + float scaleY = mWidgetRect.height() / mImgRect.height(); + + mAnimaMatrix + .postScale(scaleX, scaleY, mScreenCenter.x, mScreenCenter.y); + + executeTranslate(); + resetBase(); + } + + private void resetBase() { + Drawable img = getDrawable(); + int imgw = getDrawableWidth(img); + int imgh = getDrawableHeight(img); + mBaseRect.set(0, 0, imgw, imgh); + mBaseMatrix.set(mSynthesisMatrix); + mBaseMatrix.mapRect(mBaseRect); + mHalfBaseRectWidth = mBaseRect.width() / 2; + mHalfBaseRectHeight = mBaseRect.height() / 2; + mScale = 1; + mTranslateX = 0; + mTranslateY = 0; + mAnimaMatrix.reset(); + } + + private void executeTranslate() { + mSynthesisMatrix.set(mBaseMatrix); + mSynthesisMatrix.postConcat(mAnimaMatrix); + setImageMatrix(mSynthesisMatrix); + + mAnimaMatrix.mapRect(mImgRect, mBaseRect); + + imgLargeWidth = mImgRect.width() > mWidgetRect.width(); + imgLargeHeight = mImgRect.height() > mWidgetRect.height(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + if (!hasDrawable) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + return; + } + + Drawable d = getDrawable(); + int drawableW = getDrawableWidth(d); + int drawableH = getDrawableHeight(d); + + int pWidth = MeasureSpec.getSize(widthMeasureSpec); + int pHeight = MeasureSpec.getSize(heightMeasureSpec); + + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + + int width = 0; + int height = 0; + + ViewGroup.LayoutParams p = getLayoutParams(); + + if (p == null) { + p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT); + } + + if (p.width == ViewGroup.LayoutParams.MATCH_PARENT) { + if (widthMode == MeasureSpec.UNSPECIFIED) { + width = drawableW; + } else { + width = pWidth; + } + } else { + if (widthMode == MeasureSpec.EXACTLY) { + width = pWidth; + } else if (widthMode == MeasureSpec.AT_MOST) { + width = drawableW > pWidth ? pWidth : drawableW; + } else { + width = drawableW; + } + } + + if (p.height == ViewGroup.LayoutParams.MATCH_PARENT) { + if (heightMode == MeasureSpec.UNSPECIFIED) { + height = drawableH; + } else { + height = pHeight; + } + } else { + if (heightMode == MeasureSpec.EXACTLY) { + height = pHeight; + } else if (heightMode == MeasureSpec.AT_MOST) { + height = drawableH > pHeight ? pHeight : drawableH; + } else { + height = drawableH; + } + } + + if (mAdjustViewBounds + && (float) drawableW / drawableH != (float) width / height) { + + float hScale = (float) height / drawableH; + float wScale = (float) width / drawableW; + + float scale = hScale < wScale ? hScale : wScale; + width = p.width == ViewGroup.LayoutParams.MATCH_PARENT ? width + : (int) (drawableW * scale); + height = p.height == ViewGroup.LayoutParams.MATCH_PARENT ? height + : (int) (drawableH * scale); + } + + setMeasuredDimension(width, height); + } + + @Override + public void setAdjustViewBounds(boolean adjustViewBounds) { + super.setAdjustViewBounds(adjustViewBounds); + mAdjustViewBounds = adjustViewBounds; + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + + mWidgetRect.set(0, 0, w, h); + mScreenCenter.set(w / 2, h / 2); + + if (!isKnowSize) { + isKnowSize = true; + initBase(); + } + } + + @Override + public void draw(Canvas canvas) { + if (mClip != null) { + canvas.clipRect(mClip); + mClip = null; + } + super.draw(canvas); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (isEnable) { + final int Action = event.getActionMasked(); + if (event.getPointerCount() >= 2) + hasMultiTouch = true; + + mDetector.onTouchEvent(event); + mRotateDetector.onTouchEvent(event); + mScaleDetector.onTouchEvent(event); + + if (Action == MotionEvent.ACTION_UP + || Action == MotionEvent.ACTION_CANCEL) + onUp(); + + return true; + } else { + return super.dispatchTouchEvent(event); + } + } + + private void onUp() { + if (mTranslate.isRuning) + return; + + if (canRotate || mDegrees % 90 != 0) { + float toDegrees = (int) (mDegrees / 90) * 90; + float remainder = mDegrees % 90; + + if (remainder > 45) + toDegrees += 90; + else if (remainder < -45) + toDegrees -= 90; + + mTranslate.withRotate((int) mDegrees, (int) toDegrees); + + mDegrees = toDegrees; + } + + float scale = mScale; + + if (mScale < 1) { + scale = 1; + mTranslate.withScale(mScale, 1); + } else if (mScale > mMaxScale) { + scale = mMaxScale; + mTranslate.withScale(mScale, mMaxScale); + } + + float cx = mImgRect.left + mImgRect.width() / 2; + float cy = mImgRect.top + mImgRect.height() / 2; + + mScaleCenter.set(cx, cy); + mRotateCenter.set(cx, cy); + + mTranslateX = 0; + mTranslateY = 0; + + mTmpMatrix.reset(); + mTmpMatrix.postTranslate(-mBaseRect.left, -mBaseRect.top); + mTmpMatrix.postTranslate(cx - mHalfBaseRectWidth, cy + - mHalfBaseRectHeight); + mTmpMatrix.postScale(scale, scale, cx, cy); + mTmpMatrix.postRotate(mDegrees, cx, cy); + mTmpMatrix.mapRect(mTmpRect, mBaseRect); + + doTranslateReset(mTmpRect); + mTranslate.start(); + } + + private void doTranslateReset(RectF imgRect) { + int tx = 0; + int ty = 0; + + if (imgRect.width() <= mWidgetRect.width()) { + if (!isImageCenterWidth(imgRect)) + tx = -(int) ((mWidgetRect.width() - imgRect.width()) / 2 - imgRect.left); + } else { + if (imgRect.left > mWidgetRect.left) { + tx = (int) (imgRect.left - mWidgetRect.left); + } else if (imgRect.right < mWidgetRect.right) { + tx = (int) (imgRect.right - mWidgetRect.right); + } + } + + if (imgRect.height() <= mWidgetRect.height()) { + if (!isImageCenterHeight(imgRect)) + ty = -(int) ((mWidgetRect.height() - imgRect.height()) / 2 - imgRect.top); + } else { + if (imgRect.top > mWidgetRect.top) { + ty = (int) (imgRect.top - mWidgetRect.top); + } else if (imgRect.bottom < mWidgetRect.bottom) { + ty = (int) (imgRect.bottom - mWidgetRect.bottom); + } + } + + if (tx != 0 || ty != 0) { + if (!mTranslate.mFlingScroller.isFinished()) + mTranslate.mFlingScroller.abortAnimation(); + mTranslate.withTranslate(mTranslateX, mTranslateY, -tx, -ty); + } + } + + private boolean isImageCenterHeight(RectF rect) { + return Math.abs(Math.round(rect.top) + - (mWidgetRect.height() - rect.height()) / 2) < 1; + } + + private boolean isImageCenterWidth(RectF rect) { + return Math.abs(Math.round(rect.left) + - (mWidgetRect.width() - rect.width()) / 2) < 1; + } + + private OnRotateListener mRotateListener = new OnRotateListener() { + + @Override + public void onRotate(float degrees, float focusX, float focusY) { + mRotateFlag += degrees; + if (canRotate) { + mDegrees += degrees; + mAnimaMatrix.postRotate(degrees, focusX, focusY); + } else { + if (Math.abs(mRotateFlag) >= mMinRotate) { + canRotate = true; + mRotateFlag = 0; + } + } + } + }; + + private ScaleGestureDetector.OnScaleGestureListener mScaleListener = new ScaleGestureDetector.OnScaleGestureListener() { + @Override + public boolean onScale(ScaleGestureDetector detector) { + float scaleFactor = detector.getScaleFactor(); + + if (Float.isNaN(scaleFactor) || Float.isInfinite(scaleFactor)) + return false; + + mScale *= scaleFactor; + // mScaleCenter.set(detector.getFocusX(), detector.getFocusY()); + mAnimaMatrix.postScale(scaleFactor, scaleFactor, + detector.getFocusX(), detector.getFocusY()); + executeTranslate(); + return true; + } + + public boolean onScaleBegin(ScaleGestureDetector detector) { + return true; + } + + public void onScaleEnd(ScaleGestureDetector detector) { + + } + }; + + private float resistanceScrollByX(float overScroll, float detalX) { + float s = detalX + * (Math.abs(Math.abs(overScroll) - MAX_OVER_RESISTANCE) / (float) MAX_OVER_RESISTANCE); + return s; + } + + private float resistanceScrollByY(float overScroll, float detalY) { + float s = detalY + * (Math.abs(Math.abs(overScroll) - MAX_OVER_RESISTANCE) / (float) MAX_OVER_RESISTANCE); + return s; + } + + /** + * 鍖归厤涓や釜Rect鐨勫叡鍚岄儴鍒嗚緭鍑哄埌out锛岃嫢鏃犲叡鍚岄儴鍒嗗垯杈撳嚭0锛�锛�锛� + */ + private void mapRect(RectF r1, RectF r2, RectF out) { + + float l, r, t, b; + + l = r1.left > r2.left ? r1.left : r2.left; + r = r1.right < r2.right ? r1.right : r2.right; + + if (l > r) { + out.set(0, 0, 0, 0); + return; + } + + t = r1.top > r2.top ? r1.top : r2.top; + b = r1.bottom < r2.bottom ? r1.bottom : r2.bottom; + + if (t > b) { + out.set(0, 0, 0, 0); + return; + } + + out.set(l, t, r, b); + } + + private void checkRect() { + if (!hasOverTranslate) { + mapRect(mWidgetRect, mImgRect, mCommonRect); + } + } + + private Runnable mClickRunnable = new Runnable() { + @Override + public void run() { + if (mClickListener != null) { + mClickListener.onClick(PhotoView.this); + } + } + }; + + private GestureDetector.OnGestureListener mGestureListener = new GestureDetector.SimpleOnGestureListener() { + + @Override + public void onLongPress(MotionEvent e) { + if (mLongClick != null) { + mLongClick.onLongClick(PhotoView.this); + } + } + + @Override + public boolean onDown(MotionEvent e) { + hasOverTranslate = false; + hasMultiTouch = false; + canRotate = false; + removeCallbacks(mClickRunnable); + return false; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + if (hasMultiTouch) + return false; + if (!imgLargeWidth && !imgLargeHeight) + return false; + if (mTranslate.isRuning) + return false; + + float vx = velocityX; + float vy = velocityY; + + if (Math.round(mImgRect.left) >= mWidgetRect.left + || Math.round(mImgRect.right) <= mWidgetRect.right) { + vx = 0; + } + + if (Math.round(mImgRect.top) >= mWidgetRect.top + || Math.round(mImgRect.bottom) <= mWidgetRect.bottom) { + vy = 0; + } + + if (canRotate || mDegrees % 90 != 0) { + float toDegrees = (int) (mDegrees / 90) * 90; + float remainder = mDegrees % 90; + + if (remainder > 45) + toDegrees += 90; + else if (remainder < -45) + toDegrees -= 90; + + mTranslate.withRotate((int) mDegrees, (int) toDegrees); + + mDegrees = toDegrees; + } + + doTranslateReset(mImgRect); + mTranslate.withFling(vx, vy); + + mTranslate.start(); + // onUp(e2); + return super.onFling(e1, e2, velocityX, velocityY); + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, + float distanceX, float distanceY) { + if (mTranslate.isRuning) { + mTranslate.stop(); + } + + if (canScrollHorizontallySelf(distanceX)) { + if (distanceX < 0 + && mImgRect.left - distanceX > mWidgetRect.left) + distanceX = mImgRect.left; + if (distanceX > 0 + && mImgRect.right - distanceX < mWidgetRect.right) + distanceX = mImgRect.right - mWidgetRect.right; + + mAnimaMatrix.postTranslate(-distanceX, 0); + mTranslateX -= distanceX; + } else if (imgLargeWidth || hasMultiTouch || hasOverTranslate) { + checkRect(); + if (!hasMultiTouch) { + if (distanceX < 0 + && mImgRect.left - distanceX > mCommonRect.left) + distanceX = resistanceScrollByX(mImgRect.left + - mCommonRect.left, distanceX); + if (distanceX > 0 + && mImgRect.right - distanceX < mCommonRect.right) + distanceX = resistanceScrollByX(mImgRect.right + - mCommonRect.right, distanceX); + } + + mTranslateX -= distanceX; + mAnimaMatrix.postTranslate(-distanceX, 0); + hasOverTranslate = true; + } + + if (canScrollVerticallySelf(distanceY)) { + if (distanceY < 0 && mImgRect.top - distanceY > mWidgetRect.top) + distanceY = mImgRect.top; + if (distanceY > 0 + && mImgRect.bottom - distanceY < mWidgetRect.bottom) + distanceY = mImgRect.bottom - mWidgetRect.bottom; + + mAnimaMatrix.postTranslate(0, -distanceY); + mTranslateY -= distanceY; + } else if (imgLargeHeight || hasOverTranslate || hasMultiTouch) { + checkRect(); + if (!hasMultiTouch) { + if (distanceY < 0 + && mImgRect.top - distanceY > mCommonRect.top) + distanceY = resistanceScrollByY(mImgRect.top + - mCommonRect.top, distanceY); + if (distanceY > 0 + && mImgRect.bottom - distanceY < mCommonRect.bottom) + distanceY = resistanceScrollByY(mImgRect.bottom + - mCommonRect.bottom, distanceY); + } + + mAnimaMatrix.postTranslate(0, -distanceY); + mTranslateY -= distanceY; + hasOverTranslate = true; + } + + executeTranslate(); + return true; + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + postDelayed(mClickRunnable, 250); + return false; + } + + @Override + public boolean onDoubleTap(MotionEvent e) { + + mTranslate.stop(); + + float from = 1; + float to = 1; + + float imgcx = mImgRect.left + mImgRect.width() / 2; + float imgcy = mImgRect.top + mImgRect.height() / 2; + + mScaleCenter.set(imgcx, imgcy); + mRotateCenter.set(imgcx, imgcy); + mTranslateX = 0; + mTranslateY = 0; + + if (isZoonUp) { + from = mScale; + to = 1; + } else { + from = mScale; + to = mMaxScale; + + mScaleCenter.set(e.getX(), e.getY()); + } + + mTmpMatrix.reset(); + mTmpMatrix.postTranslate(-mBaseRect.left, -mBaseRect.top); + mTmpMatrix.postTranslate(mRotateCenter.x, mRotateCenter.y); + mTmpMatrix.postTranslate(-mHalfBaseRectWidth, -mHalfBaseRectHeight); + mTmpMatrix.postRotate(mDegrees, mRotateCenter.x, mRotateCenter.y); + mTmpMatrix.postScale(to, to, mScaleCenter.x, mScaleCenter.y); + mTmpMatrix.postTranslate(mTranslateX, mTranslateY); + mTmpMatrix.mapRect(mTmpRect, mBaseRect); + doTranslateReset(mTmpRect); + + isZoonUp = !isZoonUp; + mTranslate.withScale(from, to); + mTranslate.start(); + + return false; + } + }; + + public boolean canScrollHorizontallySelf(float direction) { + if (mImgRect.width() <= mWidgetRect.width()) + return false; + if (direction < 0 + && Math.round(mImgRect.left) - direction >= mWidgetRect.left) + return false; + if (direction > 0 + && Math.round(mImgRect.right) - direction <= mWidgetRect.right) + return false; + return true; + } + + public boolean canScrollVerticallySelf(float direction) { + if (mImgRect.height() <= mWidgetRect.height()) + return false; + if (direction < 0 + && Math.round(mImgRect.top) - direction >= mWidgetRect.top) + return false; + if (direction > 0 + && Math.round(mImgRect.bottom) - direction <= mWidgetRect.bottom) + return false; + return true; + } + + @Override + public boolean canScrollHorizontally(int direction) { + if (hasMultiTouch) + return true; + return canScrollHorizontallySelf(direction); + } + + @Override + public boolean canScrollVertically(int direction) { + if (hasMultiTouch) + return true; + return canScrollVerticallySelf(direction); + } + + private class InterpolatorProxy implements Interpolator { + + private Interpolator mTarget; + + private InterpolatorProxy() { + mTarget = new DecelerateInterpolator(); + } + + public void setTargetInterpolator(Interpolator interpolator) { + mTarget = interpolator; + } + + @Override + public float getInterpolation(float input) { + if (mTarget != null) { + return mTarget.getInterpolation(input); + } + return input; + } + } + + private class Transform implements Runnable { + + boolean isRuning; + + OverScroller mTranslateScroller; + OverScroller mFlingScroller; + Scroller mScaleScroller; + Scroller mClipScroller; + Scroller mRotateScroller; + + ClipCalculate C; + + int mLastFlingX; + int mLastFlingY; + + int mLastTranslateX; + int mLastTranslateY; + + RectF mClipRect = new RectF(); + + InterpolatorProxy mInterpolatorProxy = new InterpolatorProxy(); + + Transform() { + Context ctx = getContext(); + mTranslateScroller = new OverScroller(ctx, mInterpolatorProxy); + mScaleScroller = new Scroller(ctx, mInterpolatorProxy); + mFlingScroller = new OverScroller(ctx, mInterpolatorProxy); + mClipScroller = new Scroller(ctx, mInterpolatorProxy); + mRotateScroller = new Scroller(ctx, mInterpolatorProxy); + } + + public void setInterpolator(Interpolator interpolator) { + mInterpolatorProxy.setTargetInterpolator(interpolator); + } + + void withTranslate(int startX, int startY, int deltaX, int deltaY) { + mLastTranslateX = 0; + mLastTranslateY = 0; + mTranslateScroller.startScroll(0, 0, deltaX, deltaY, mAnimaDuring); + } + + void withScale(float form, float to) { + mScaleScroller.startScroll((int) (form * 10000), 0, + (int) ((to - form) * 10000), 0, mAnimaDuring); + } + + void withClip(float fromX, float fromY, float deltaX, float deltaY, + int d, ClipCalculate c) { + mClipScroller.startScroll((int) (fromX * 10000), + (int) (fromY * 10000), (int) (deltaX * 10000), + (int) (deltaY * 10000), d); + C = c; + } + + void withRotate(int fromDegrees, int toDegrees) { + mRotateScroller.startScroll(fromDegrees, 0, + toDegrees - fromDegrees, 0, mAnimaDuring); + } + + void withRotate(int fromDegrees, int toDegrees, int during) { + mRotateScroller.startScroll(fromDegrees, 0, + toDegrees - fromDegrees, 0, during); + } + + void withFling(float velocityX, float velocityY) { + mLastFlingX = velocityX < 0 ? Integer.MAX_VALUE : 0; + int distanceX = (int) (velocityX > 0 ? Math.abs(mImgRect.left) + : mImgRect.right - mWidgetRect.right); + distanceX = velocityX < 0 ? Integer.MAX_VALUE - distanceX + : distanceX; + int minX = velocityX < 0 ? distanceX : 0; + int maxX = velocityX < 0 ? Integer.MAX_VALUE : distanceX; + int overX = velocityX < 0 ? Integer.MAX_VALUE - minX : distanceX; + + mLastFlingY = velocityY < 0 ? Integer.MAX_VALUE : 0; + int distanceY = (int) (velocityY > 0 ? Math.abs(mImgRect.top) + : mImgRect.bottom - mWidgetRect.bottom); + distanceY = velocityY < 0 ? Integer.MAX_VALUE - distanceY + : distanceY; + int minY = velocityY < 0 ? distanceY : 0; + int maxY = velocityY < 0 ? Integer.MAX_VALUE : distanceY; + int overY = velocityY < 0 ? Integer.MAX_VALUE - minY : distanceY; + + if (velocityX == 0) { + maxX = 0; + minX = 0; + } + + if (velocityY == 0) { + maxY = 0; + minY = 0; + } + + mFlingScroller.fling(mLastFlingX, mLastFlingY, (int) velocityX, + (int) velocityY, minX, maxX, minY, maxY, + Math.abs(overX) < MAX_FLING_OVER_SCROLL * 2 ? 0 + : MAX_FLING_OVER_SCROLL, + Math.abs(overY) < MAX_FLING_OVER_SCROLL * 2 ? 0 + : MAX_FLING_OVER_SCROLL); + } + + void start() { + isRuning = true; + postExecute(); + } + + void stop() { + removeCallbacks(this); + mTranslateScroller.abortAnimation(); + mScaleScroller.abortAnimation(); + mFlingScroller.abortAnimation(); + mRotateScroller.abortAnimation(); + isRuning = false; + } + + @Override + public void run() { + + // if (!isRuning) return; + + boolean endAnima = true; + + if (mScaleScroller.computeScrollOffset()) { + mScale = mScaleScroller.getCurrX() / 10000f; + endAnima = false; + } + + if (mTranslateScroller.computeScrollOffset()) { + int tx = mTranslateScroller.getCurrX() - mLastTranslateX; + int ty = mTranslateScroller.getCurrY() - mLastTranslateY; + mTranslateX += tx; + mTranslateY += ty; + mLastTranslateX = mTranslateScroller.getCurrX(); + mLastTranslateY = mTranslateScroller.getCurrY(); + endAnima = false; + } + + if (mFlingScroller.computeScrollOffset()) { + int x = mFlingScroller.getCurrX() - mLastFlingX; + int y = mFlingScroller.getCurrY() - mLastFlingY; + + mLastFlingX = mFlingScroller.getCurrX(); + mLastFlingY = mFlingScroller.getCurrY(); + + mTranslateX += x; + mTranslateY += y; + endAnima = false; + } + + if (mRotateScroller.computeScrollOffset()) { + mDegrees = mRotateScroller.getCurrX(); + endAnima = false; + } + + if (mClipScroller.computeScrollOffset() || mClip != null) { + float sx = mClipScroller.getCurrX() / 10000f; + float sy = mClipScroller.getCurrY() / 10000f; + mTmpMatrix.setScale(sx, sy, + (mImgRect.left + mImgRect.right) / 2, C.calculateTop()); + mTmpMatrix.mapRect(mClipRect, mImgRect); + + if (sx == 1) { + mClipRect.left = mWidgetRect.left; + mClipRect.right = mWidgetRect.right; + } + + if (sy == 1) { + mClipRect.top = mWidgetRect.top; + mClipRect.bottom = mWidgetRect.bottom; + } + + mClip = mClipRect; + } + + if (!endAnima) { + applyAnima(); + postExecute(); + } else { + isRuning = false; + + // 淇鍔ㄧ敾缁撴潫鍚庤竟璺濇湁浜涚┖闅欙紝 + boolean needFix = false; + + if (imgLargeWidth) { + if (mImgRect.left > 0) { + mTranslateX -= mImgRect.left; + } else if (mImgRect.right < mWidgetRect.width()) { + mTranslateX -= (int) (mWidgetRect.width() - mImgRect.right); + } + needFix = true; + } + + if (imgLargeHeight) { + if (mImgRect.top > 0) { + mTranslateY -= mImgRect.top; + } else if (mImgRect.bottom < mWidgetRect.height()) { + mTranslateY -= (int) (mWidgetRect.height() - mImgRect.bottom); + } + needFix = true; + } + + if (needFix) { + applyAnima(); + } + + invalidate(); + + if (mCompleteCallBack != null) { + mCompleteCallBack.run(); + mCompleteCallBack = null; + } + } + } + + private void applyAnima() { + mAnimaMatrix.reset(); + mAnimaMatrix.postTranslate(-mBaseRect.left, -mBaseRect.top); + mAnimaMatrix.postTranslate(mRotateCenter.x, mRotateCenter.y); + mAnimaMatrix.postTranslate(-mHalfBaseRectWidth, + -mHalfBaseRectHeight); + mAnimaMatrix.postRotate(mDegrees, mRotateCenter.x, mRotateCenter.y); + mAnimaMatrix.postScale(mScale, mScale, mScaleCenter.x, + mScaleCenter.y); + mAnimaMatrix.postTranslate(mTranslateX, mTranslateY); + executeTranslate(); + } + + private void postExecute() { + if (isRuning) + post(this); + } + } + + public Info getInfo() { + RectF rect = new RectF(); + int[] p = new int[2]; + getLocation(this, p); + rect.set(p[0] + mImgRect.left, p[1] + mImgRect.top, p[0] + + mImgRect.right, p[1] + mImgRect.bottom); + return new Info(rect, mImgRect, mWidgetRect, mBaseRect, mScreenCenter, + mScale, mDegrees, mScaleType); + } + + public static Info getImageViewInfo(ImageView imgView) { + int[] p = new int[2]; + getLocation(imgView, p); + + Drawable drawable = imgView.getDrawable(); + + Matrix matrix = imgView.getImageMatrix(); + + int width = getDrawableWidth(drawable); + int height = getDrawableHeight(drawable); + + RectF imgRect = new RectF(0, 0, width, height); + matrix.mapRect(imgRect); + + RectF rect = new RectF(p[0] + imgRect.left, p[1] + imgRect.top, p[0] + + imgRect.right, p[1] + imgRect.bottom); + RectF widgetRect = new RectF(0, 0, imgView.getWidth(), + imgView.getHeight()); + RectF baseRect = new RectF(widgetRect); + PointF screenCenter = new PointF(widgetRect.width() / 2, + widgetRect.height() / 2); + + return new Info(rect, imgRect, widgetRect, baseRect, screenCenter, 1, + 0, imgView.getScaleType()); + } + + private static void getLocation(View target, int[] position) { + + position[0] += target.getLeft(); + position[1] += target.getTop(); + + ViewParent viewParent = target.getParent(); + while (viewParent instanceof View) { + final View view = (View) viewParent; + + if (view.getId() == android.R.id.content) + return; + + position[0] -= view.getScrollX(); + position[1] -= view.getScrollY(); + + position[0] += view.getLeft(); + position[1] += view.getTop(); + + viewParent = view.getParent(); + } + + position[0] = (int) (position[0] + 0.5f); + position[1] = (int) (position[1] + 0.5f); + } + + private void reset() { + mAnimaMatrix.reset(); + executeTranslate(); + mScale = 1; + mTranslateX = 0; + mTranslateY = 0; + } + + public interface ClipCalculate { + float calculateTop(); + } + + public class START implements ClipCalculate { + public float calculateTop() { + return mImgRect.top; + } + } + + public class END implements ClipCalculate { + public float calculateTop() { + return mImgRect.bottom; + } + } + + public class OTHER implements ClipCalculate { + public float calculateTop() { + return (mImgRect.top + mImgRect.bottom) / 2; + } + } + + /** + * 鍦≒hotoView鍐呴儴杩樻病鏈夊浘鐗囩殑鏃跺�鍚屾牱鍙互璋冪敤璇ユ柟娉� * + *

+ *

+ * 姝ゆ椂骞朵笉浼氭挱鏀惧姩鐢伙紝褰撶粰PhotoView璁剧疆鍥剧墖鍚庝細鑷姩鎾斁鍔ㄧ敾銆� * + *

+ *

+ * 鑻ョ瓑寰呮椂闂磋繃闀夸篃娌℃湁缁欐帶浠惰缃浘鐗囷紝鍒欎細蹇界暐璇ュ姩鐢伙紝鑻ヨ鍐嶆鎾斁鍔ㄧ敾鍒欓渶瑕侀噸鏂拌皟鐢ㄨ鏂规硶 + * (绛夊緟鐨勬椂闂撮粯璁�00姣锛屽彲浠ラ�杩噑etMaxAnimFromWaiteTime(int)璁剧疆鏈�ぇ绛夊緟鏃堕棿) + */ + public void animaFrom(Info info) { + if (isInit) { + reset(); + + Info mine = getInfo(); + + float scaleX = info.mImgRect.width() / mine.mImgRect.width(); + float scaleY = info.mImgRect.height() / mine.mImgRect.height(); + float scale = scaleX < scaleY ? scaleX : scaleY; + + float ocx = info.mRect.left + info.mRect.width() / 2; + float ocy = info.mRect.top + info.mRect.height() / 2; + + mAnimaMatrix.reset(); + mAnimaMatrix.postTranslate(-mBaseRect.left, -mBaseRect.top); + mAnimaMatrix.postTranslate(ocx - mBaseRect.width() / 2, ocy + - mBaseRect.height() / 2); + mAnimaMatrix.postScale(scale, scale, ocx, ocy); + mAnimaMatrix.postRotate(info.mDegrees, ocx, ocy); + executeTranslate(); + + mScaleCenter.set(ocx, ocy); + mRotateCenter.set(ocx, ocy); + + mTranslate.withTranslate(0, 0, (int) (mScreenCenter.x - ocx), + (int) (mScreenCenter.y - ocy)); + mTranslate.withScale(scale, 1); + mTranslate.withRotate((int) info.mDegrees, 0); + + if (info.mWidgetRect.width() < info.mImgRect.width() + || info.mWidgetRect.height() < info.mImgRect.height()) { + float clipX = info.mWidgetRect.width() / info.mImgRect.width(); + float clipY = info.mWidgetRect.height() + / info.mImgRect.height(); + clipX = clipX > 1 ? 1 : clipX; + clipY = clipY > 1 ? 1 : clipY; + + ClipCalculate c = info.mScaleType == ScaleType.FIT_START ? new START() + : info.mScaleType == ScaleType.FIT_END ? new END() + : new OTHER(); + + mTranslate.withClip(clipX, clipY, 1 - clipX, 1 - clipY, + mAnimaDuring / 3, c); + + mTmpMatrix.setScale(clipX, clipY, + (mImgRect.left + mImgRect.right) / 2, c.calculateTop()); + mTmpMatrix.mapRect(mTranslate.mClipRect, mImgRect); + mClip = mTranslate.mClipRect; + } + + mTranslate.start(); + } else { + mFromInfo = info; + mInfoTime = System.currentTimeMillis(); + } + } + + public void animaTo(Info info, Runnable completeCallBack) { + if (isInit) { + mTranslate.stop(); + + mTranslateX = 0; + mTranslateY = 0; + + float tcx = info.mRect.left + info.mRect.width() / 2; + float tcy = info.mRect.top + info.mRect.height() / 2; + + mScaleCenter.set(mImgRect.left + mImgRect.width() / 2, mImgRect.top + + mImgRect.height() / 2); + mRotateCenter.set(mScaleCenter); + + // 灏嗗浘鐗囨棆杞洖姝e父浣嶇疆锛岀敤浠ヨ绠� mAnimaMatrix.postRotate(-mDegrees, + // mScaleCenter.x, mScaleCenter.y); + mAnimaMatrix.mapRect(mImgRect, mBaseRect); + + // 缂╂斁 + float scaleX = info.mImgRect.width() / mBaseRect.width(); + float scaleY = info.mImgRect.height() / mBaseRect.height(); + float scale = scaleX > scaleY ? scaleX : scaleY; + + mAnimaMatrix.postRotate(mDegrees, mScaleCenter.x, mScaleCenter.y); + mAnimaMatrix.mapRect(mImgRect, mBaseRect); + + mDegrees = mDegrees % 360; + + mTranslate.withTranslate(0, 0, (int) (tcx - mScaleCenter.x), + (int) (tcy - mScaleCenter.y)); + mTranslate.withScale(mScale, scale); + mTranslate.withRotate((int) mDegrees, (int) info.mDegrees, + mAnimaDuring * 2 / 3); + + if (info.mWidgetRect.width() < info.mRect.width() + || info.mWidgetRect.height() < info.mRect.height()) { + float clipX = info.mWidgetRect.width() / info.mRect.width(); + float clipY = info.mWidgetRect.height() / info.mRect.height(); + clipX = clipX > 1 ? 1 : clipX; + clipY = clipY > 1 ? 1 : clipY; + + final float cx = clipX; + final float cy = clipY; + final ClipCalculate c = info.mScaleType == ScaleType.FIT_START ? new START() + : info.mScaleType == ScaleType.FIT_END ? new END() + : new OTHER(); + + postDelayed(new Runnable() { + @Override + public void run() { + mTranslate.withClip(1, 1, -1 + cx, -1 + cy, + mAnimaDuring / 2, c); + } + }, mAnimaDuring / 2); + } + + mCompleteCallBack = completeCallBack; + mTranslate.start(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/RollViewPager.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/RollViewPager.java new file mode 100644 index 0000000..b51ae65 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/RollViewPager.java @@ -0,0 +1,372 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.PointF; +import android.os.Handler; +import android.os.Message; +import android.os.Parcelable; +import android.text.TextUtils; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewParent; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.ArrayList; + +import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.ImageOptions; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +public class RollViewPager extends ViewPager { + private Context context; + private int currentItem = Integer.MAX_VALUE / 2; + private ArrayList uriList; + private ArrayList dots; + private TextView title; + private ArrayList titles; + private int[] resImageIds; + private int dot_focus_resId; + private int dot_normal_resId; + private OnPagerClickCallback onPagerClickCallback; + private boolean isShowResImage = false; + MyOnTouchListener myOnTouchListener; + ViewPagerTask viewPagerTask; + private PagerAdapter pageradapter; + + /** 触摸时按下的点 **/ + PointF downP = new PointF(); + /** 触摸时当前的点 **/ + PointF curP = new PointF(); + private int abc = 1; + private float mLastMotionX; + private float mLastMotionY; + + private long start = 0; + + public class MyOnTouchListener implements OnTouchListener { + @Override + public boolean onTouch(View v, MotionEvent event) { + curP.x = event.getX(); + curP.y = event.getY(); + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + + start = System.currentTimeMillis(); + handler.removeCallbacksAndMessages(null); + // 记录按下时候的坐标 + // 切记不可用 downP = curP ,这样在改变curP的时候,downP也会改变 + downP.x = event.getX(); + downP.y = event.getY(); + // 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 + // getParent().requestDisallowInterceptTouchEvent(true); + break; + case MotionEvent.ACTION_MOVE: + handler.removeCallbacks(viewPagerTask); + LogUtil.i("ACTION_MOVE", (curP.x - downP.x) + "----" + + (curP.y - downP.y)); + /* + * if (Math.abs(curP.x - downP.x) > Math.abs(curP.y - downP.y) + * && (getCurrentItem() == 0 || getCurrentItem() == getAdapter() + * .getCount() - 1)) { + * getParent().requestDisallowInterceptTouchEvent(false); } else + * { getParent().requestDisallowInterceptTouchEvent(false); } + */ + // 此句代码是为了通知他的父ViewPager现在进行的是本控件的操作,不要对我的操作进行干扰 + break; + case MotionEvent.ACTION_CANCEL: + getParent().requestDisallowInterceptTouchEvent(false); + startRoll(); + break; + case MotionEvent.ACTION_UP: + downP.x = event.getX(); + downP.y = event.getY(); + long duration = System.currentTimeMillis() - start; + if (duration <= 500 && downP.x == curP.x) { + currentItem %= uriList.size(); + if (currentItem < 0) { + currentItem = uriList.size() + currentItem; + } + onPagerClickCallback.onPagerClick(currentItem); + } else { + onPagerClickCallback.onPagerClick(RollViewPager.this + .getCurrentItem()); + } + startRoll(); + break; + } + return true; + } + } + + public boolean dispatchTouchEvent(MotionEvent ev) { + final float x = ev.getX(); + final float y = ev.getY(); + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + getParent().requestDisallowInterceptTouchEvent(true); + abc = 1; + mLastMotionX = x; + mLastMotionY = y; + break; + case MotionEvent.ACTION_MOVE: + if (abc == 1) { + if (Math.abs(x - mLastMotionX) < Math.abs(y - mLastMotionY)) { + abc = 0; + getParent().requestDisallowInterceptTouchEvent(false); + } else { + getParent().requestDisallowInterceptTouchEvent(true); + } + + } + break; + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + getParent().requestDisallowInterceptTouchEvent(false); + break; + } + return super.dispatchTouchEvent(ev); + } + + public class ViewPagerTask implements Runnable { + @Override + public void run() { + // currentItem ++; + // LogUtil.i("getCurrentItem="+RollViewPager.this.getCurrentItem()); + currentItem = RollViewPager.this.getCurrentItem() + 1; + // currentItem = (currentItem + 1) + // % (isShowResImage ? resImageIds.length : uriList.size()); + handler.obtainMessage().sendToTarget(); + // startRoll(); + } + } + + public Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + RollViewPager.this.setCurrentItem(currentItem); + startRoll(); + } + }; + + public RollViewPager(Context context, ArrayList dots, + int dot_focus_resId, int dot_normal_resId, + OnPagerClickCallback onPagerClickCallback) { + super(context); + this.currentItem = 0; + this.context = context; + this.dots = dots; + this.dot_focus_resId = dot_focus_resId; + this.dot_normal_resId = dot_normal_resId; + this.onPagerClickCallback = onPagerClickCallback; + viewPagerTask = new ViewPagerTask(); + + myOnTouchListener = new MyOnTouchListener(); + + } + + public void setUriList(ArrayList uriList) { + isShowResImage = false; + this.uriList = uriList; + } + + public void notifyDataChange() { + pageradapter.notifyDataSetChanged(); + } + + public ArrayList getDots() { + return dots; + } + + public void setDots(ArrayList dots) { + this.dots = dots; + } + + public void setResImageIds(int[] resImageIds) { + isShowResImage = true; + this.resImageIds = resImageIds; + } + + public void setTitle(TextView title, ArrayList titles) { + this.title = title; + this.titles = titles; + if (title != null && titles != null && titles.size() > 0) + title.setText(titles.get(0));// + } + + private boolean hasSetAdapter = false; + + /** + * + */ + + public void startRoll() { + handler.removeCallbacksAndMessages(null); + if (!hasSetAdapter) { + hasSetAdapter = true; + pageradapter = new ViewPagerAdapter(); + this.setAdapter(pageradapter); + // RollViewPager.this.setCurrentItem(Integer.MAX_VALUE/2 - + // (Integer.MAX_VALUE/2%uriList.size())); + // LogUtil.i("vvvvvvvvv="+(Integer.MAX_VALUE/2 - + // (Integer.MAX_VALUE/2%uriList.size()))); + this.setOnPageChangeListener(new MyOnPageChangeListener()); + isRunning = true; + } + // LogUtil.i("sssss="+currentItem); + // if (isRunning) { + handler.postDelayed(viewPagerTask, 5000); + // } + } + + private boolean isRunning = false; + + public boolean isRunning() { + return isRunning; + } + + public void setRunning(boolean isRunning) { + LogUtil.i("isRunning==" + isRunning); + this.isRunning = isRunning; + } + + class MyOnPageChangeListener implements OnPageChangeListener { + int oldPosition = 0; + + @Override + public void onPageSelected(int position) { + // ********** + currentItem = position; + position %= uriList.size(); + if (position < 0) { + position = uriList.size() + position; + } + + if (title != null) + title.setText(titles.get(position)); + if (dots != null && dots.size() > 0) { + dots.get(oldPosition).setBackgroundResource(dot_normal_resId); + dots.get(position).setBackgroundResource(dot_focus_resId); + } + oldPosition = position; + } + + @Override + public void onPageScrollStateChanged(int state) { + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + } + + } + + class ViewPagerAdapter extends PagerAdapter { + @Override + public int getCount() { + // return isShowResImage ? resImageIds.length : uriList.size(); + // 设置成最大,使用户看不到边界 + return Integer.MAX_VALUE; + } + + @Override + public Object instantiateItem(View container, int position) { + + // 对ViewPager页号求模取出View列表中要显示的项 + position %= uriList.size(); + if (position < 0) { + position = uriList.size() + position; + } + + View view = View.inflate(context, R.layout.viewpager_item, null); + + // 如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。 + ViewParent vp = view.getParent(); + if (vp != null) { + ViewGroup parent = (ViewGroup) vp; + parent.removeView(view); + } + + ((ViewPager) container).addView(view); + view.setOnTouchListener(myOnTouchListener); + ImageView imageView = (ImageView) view.findViewById(R.id.image); + imageView.setScaleType(ImageView.ScaleType.FIT_XY); + if (isShowResImage) { + imageView.setImageResource(resImageIds[position]); + } else { + if (!TextUtils.isEmpty(uriList.get(position))) { + // 显示图片的配置 + // DisplayImageOptions options = new + // DisplayImageOptions.Builder() + // .showImageOnLoading(R.drawable.home_scroll_default) + // .showImageOnFail(R.drawable.home_scroll_default) + // .showImageForEmptyUri(R.drawable.home_scroll_default) + // //加载失败的图片 + // .cacheInMemory(true) + // .cacheOnDisk(true) + // .bitmapConfig(Bitmap.Config.RGB_565) + // .build(); + ImageLoader.getInstance().displayImage(uriList.get(position),imageView,ImageOptions.getImageOptions(R.drawable.home_scroll_default)); + } + } + return view; + } + + @Override + public boolean isViewFromObject(View arg0, Object arg1) { + return arg0 == arg1; + } + + @Override + public void destroyItem(View arg0, int arg1, Object arg2) { + ((ViewPager) arg0).removeView((View) arg2); + // Warning:不要在这里调用removeView + } + + @Override + public void finishUpdate(View arg0) { + } + + @Override + public void restoreState(Parcelable arg0, ClassLoader arg1) { + } + + @Override + public Parcelable saveState() { + return null; + } + + @Override + public void startUpdate(View arg0) { + } + } + + // @Override + // protected void onAttachedToWindow() { + // // TODO Auto-generated method stub + // super.onAttachedToWindow(); + // } + // @Override + // protected void onDetachedFromWindow() { + // handler.removeCallbacksAndMessages(null); + // super.onDetachedFromWindow(); + // } + + public void stopRunning() { + if (viewPagerTask != null) { + handler.removeCallbacks(viewPagerTask); + handler.removeCallbacksAndMessages(null); + } + + } + + public interface OnPagerClickCallback { + public abstract void onPagerClick(int position); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/RotateGestureDetector.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/RotateGestureDetector.java new file mode 100644 index 0000000..b69140c --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/RotateGestureDetector.java @@ -0,0 +1,67 @@ +package cn.shangyu.gdxzExpert.view; + +import android.util.Log; +import android.view.MotionEvent; + +/** + * Created by q2366 on 2015/10/12. + */ +public class RotateGestureDetector { + + private static final int MAX_DEGREES_STEP = 120; + + private OnRotateListener mListener; + + private float mPrevSlope; + private float mCurrSlope; + + private float x1; + private float y1; + private float x2; + private float y2; + + public RotateGestureDetector(OnRotateListener l) { + mListener = l; + } + + public void onTouchEvent(MotionEvent event) { + + final int Action = event.getActionMasked(); + + switch (Action) { + case MotionEvent.ACTION_POINTER_DOWN: + case MotionEvent.ACTION_POINTER_UP: + if (event.getPointerCount() == 2) mPrevSlope = caculateSlope(event); + break; + case MotionEvent.ACTION_MOVE: + if (event.getPointerCount() > 1) { + mCurrSlope = caculateSlope(event); + + double currDegrees = Math.toDegrees(Math.atan(mCurrSlope)); + double prevDegrees = Math.toDegrees(Math.atan(mPrevSlope)); + + double deltaSlope = currDegrees - prevDegrees; + + if (Math.abs(deltaSlope) <= MAX_DEGREES_STEP) { + mListener.onRotate((float) deltaSlope, (x2 + x1) / 2, (y2 + y1) / 2); + } + mPrevSlope = mCurrSlope; + } + break; + default: + break; + } + } + + private float caculateSlope(MotionEvent event) { + x1 = event.getX(0); + y1 = event.getY(0); + x2 = event.getX(1); + y2 = event.getY(1); + return (y2 - y1) / (x2 - x1); + } +} + +interface OnRotateListener { + void onRotate(float degrees, float focusX, float focusY); +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/RoundImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/RoundImageView.java new file mode 100644 index 0000000..6ee1ecd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/RoundImageView.java @@ -0,0 +1,38 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.widget.ImageView; + +public class RoundImageView extends ImageView { + public RoundImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + // TODO Auto-generated constructor stub + } + + public RoundImageView(Context context, AttributeSet attrs) { + super(context, attrs); + // TODO Auto-generated constructor stub + } + + public RoundImageView(Context context) { + super(context); + // TODO Auto-generated constructor stub + } + + @Override + protected void onDraw(Canvas canvas) { + // TODO Auto-generated method stub + Path clipPath = new Path(); + int w = this.getWidth(); + int h = this.getHeight(); + clipPath.addRoundRect(new RectF(0, 0, w, h), 10.0f, 10.0f, + Path.Direction.CW); + canvas.clipPath(clipPath); + super.onDraw(canvas); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewGridView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewGridView.java new file mode 100644 index 0000000..4f51237 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewGridView.java @@ -0,0 +1,29 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.GridView; + +/** + * Created by wangchengxin on 2019/8/8. + */ + +public class ScollViewGridView extends GridView { + public ScollViewGridView(Context context) { + super(context); + } + + public ScollViewGridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ScollViewGridView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewListView.java new file mode 100644 index 0000000..7fbb281 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/ScollViewListView.java @@ -0,0 +1,29 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ListView; + +/** + * Created by wangchengxin on 2019/8/8. + */ + +public class ScollViewListView extends ListView { + public ScollViewListView(Context context) { + super(context); + } + + public ScollViewListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ScollViewListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/SpaceItemDecoration.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/SpaceItemDecoration.java new file mode 100644 index 0000000..7d6b07e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/SpaceItemDecoration.java @@ -0,0 +1,51 @@ +package cn.shangyu.gdxzExpert.view; + +import android.graphics.Rect; +import android.view.View; + +import androidx.recyclerview.widget.RecyclerView; + +import static cn.shangyu.gdxzExpert.utils.DensityUtil.dip2px; + +public class SpaceItemDecoration extends RecyclerView.ItemDecoration { + int mSpace; + int mSpacebottom; + + /** + * Retrieve any offsets for the given item. Each field of outRect specifies + * the number of pixels that the item view should be inset by, similar to padding or margin. + * The default implementation sets the bounds of outRect to 0 and returns. + *

+ *

+ * If this ItemDecoration does not affect the positioning of item views, it should set + * all four fields of outRect (left, top, right, bottom) to zero + * before returning. + *

+ *

+ * If you need to access Adapter for additional data, you can call + * {@link RecyclerView#getChildAdapterPosition(View)} to get the adapter position of the + * View. + * + * @param outRect Rect to receive the output. + * @param view The child view to decorate + * @param parent RecyclerView this ItemDecoration is decorating + * @param state The current state of RecyclerView. + */ + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + outRect.left = mSpace; +// outRect.right = mSpace; + outRect.bottom = mSpacebottom; +// if (parent.getChildAdapterPosition(view) == 0) { +// outRect.top = mSpace; +// } + + } + + public SpaceItemDecoration(int space,int mSpacebottom) { + + this.mSpace = dip2px(space); + this.mSpacebottom=dip2px(mSpacebottom); + } +} \ No newline at end of file diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/TwoRoundImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/TwoRoundImageView.java new file mode 100644 index 0000000..f935635 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/TwoRoundImageView.java @@ -0,0 +1,46 @@ +package cn.shangyu.gdxzExpert.view; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Path; +import android.graphics.RectF; +import android.util.AttributeSet; +import android.widget.ImageView; + +//四个圆角imageview + +public class TwoRoundImageView extends ImageView { + + /* 圆角的半径,依次为左上角xy半径,右上角,右下角,左下角 */ + private float[] rids = { 12.0f, 12.0f, 12.0f, 12.0f, 0.0f, 0.0f, 0.0f, + 0.0f, }; + + public TwoRoundImageView(Context context) { + super(context); + } + + public TwoRoundImageView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public TwoRoundImageView(Context context, AttributeSet attrs, + int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + /** + * 画图 by Hankkin at:2015-08-30 21:15:53 + * + * @param canvas + */ + protected void onDraw(Canvas canvas) { + Path path = new Path(); + int w = this.getWidth(); + int h = this.getHeight(); + /* 向路径中添加圆角矩形。radii数组定义圆角矩形的四个圆角的x,y半径。radii长度必须为8 */ + path.addRoundRect(new RectF(0, 0, w, h), rids, Path.Direction.CW); + canvas.clipPath(path); + super.onDraw(canvas); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/X5WebView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/X5WebView.java new file mode 100644 index 0000000..0bd7384 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/X5WebView.java @@ -0,0 +1,90 @@ +package cn.shangyu.gdxzExpert.view; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.webkit.CookieManager; +import android.webkit.CookieSyncManager; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +/** + * + * 名字为X5实际上是原生自定义 + * 方便Webview设置管理 + */ +public class X5WebView extends WebView { + + private WebViewClient client = new WebViewClient() { + /** + * 防止加载网页时调起系统浏览器 + */ + public boolean shouldOverrideUrlLoading(WebView view, String url) { + view.loadUrl(url); + return true; + } + }; + + @SuppressLint("SetJavaScriptEnabled") + public X5WebView(Context arg0, AttributeSet arg1) { + super(arg0, arg1); + this.setWebViewClient(client); + // this.setWebChromeClient(chromeClient); + // WebStorage webStorage = WebStorage.getInstance(); + initWebViewSettings(); + + this.setClickable(true); + } + + private void initWebViewSettings() { + CookieSyncManager.createInstance(getContext()); + CookieManager.getInstance().removeAllCookie(); + WebSettings webSetting = this.getSettings(); + webSetting.setJavaScriptEnabled(true); + webSetting.setJavaScriptCanOpenWindowsAutomatically(true); + webSetting.setAllowFileAccess(true); + webSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); + webSetting.setSupportZoom(true); + webSetting.setBuiltInZoomControls(true); + webSetting.setUseWideViewPort(true); + webSetting.setSupportMultipleWindows(true); + webSetting.setLoadWithOverviewMode(true); + // webSetting.setAppCacheEnabled(true); // 已弃用,在 Android API 33+ 中移除 + // webSetting.setDatabaseEnabled(true); + webSetting.setDomStorageEnabled(true); + webSetting.setGeolocationEnabled(true); + // webSetting.setAppCacheMaxSize(Long.MAX_VALUE); // 已弃用,在 Android API 33+ 中移除 + // webSetting.setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY); + webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND); + // webSetting.setRenderPriority(WebSettings.RenderPriority.HIGH); + webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE); + webSetting.setBlockNetworkImage(false); // 解决图片不显示 + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ + webSetting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + // this.getSettingsExtension().setPageCacheCapacity(IX5WebSettings.DEFAULT_CACHE_CAPACITY);//extension + // settings 的设计 + } + + public X5WebView(Context arg0) { + super(arg0); + setBackgroundColor(85621); + } + /** + * 启用硬件加速 + */ + public static void initHardwareAccelerate(Activity context) { + try { + if (Integer.parseInt(android.os.Build.VERSION.SDK) >= 11) { + context.getWindow() + .setFlags( + android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, + android.view.WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); + } + } catch (Exception e) { + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/Pullable.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/Pullable.java new file mode 100644 index 0000000..0285284 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/Pullable.java @@ -0,0 +1,19 @@ +package cn.shangyu.gdxzExpert.view.pullable; + +public interface Pullable +{ + /** + * 判断是否可以下拉,如果不需要下拉功能可以直接return false + * + * @return true如果可以下拉否则返回false + */ + boolean canPullDown(); + + /** + * 判断是否可以上拉,如果不需要上拉功能可以直接return false + * + * @return true如果可以上拉否则返回false + */ + boolean canPullUp(); + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/PullableScrollView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/PullableScrollView.java new file mode 100644 index 0000000..13de8fa --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/pullable/PullableScrollView.java @@ -0,0 +1,85 @@ +package cn.shangyu.gdxzExpert.view.pullable; + +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.widget.ScrollView; + +public class PullableScrollView extends ScrollView implements Pullable +{ + + public PullableScrollView(Context context) + { + super(context); + } + + public PullableScrollView(Context context, AttributeSet attrs) + { + super(context, attrs); + } + + public PullableScrollView(Context context, AttributeSet attrs, int defStyle) + { + super(context, attrs, defStyle); + } + + @Override + public boolean canPullDown() + { + if (getScrollY() == 0) + return true; + else + return false; + } + + @Override + public boolean canPullUp() + { + if (getScrollY() >= (getChildAt(0).getHeight() - getMeasuredHeight())) + return true; + else + return false; + } + + // Edge-effects don't mix well with the translucent action bar in Android 2.X + private boolean mDisableEdgeEffects = true; + + /** + * @author Cyril Mottier + */ + public interface OnScrollChangedListener { + void onScrollChanged(ScrollView who, int l, int t, int oldl, int oldt); + } + + private OnScrollChangedListener mOnScrollChangedListener; + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + super.onScrollChanged(l, t, oldl, oldt); + if (mOnScrollChangedListener != null) { + mOnScrollChangedListener.onScrollChanged(this, l, t, oldl, oldt); + } + } + + public void setOnScrollChangedListener(OnScrollChangedListener listener) { + mOnScrollChangedListener = listener; + } + + @Override + protected float getTopFadingEdgeStrength() { + // http://stackoverflow.com/a/6894270/244576 + if (mDisableEdgeEffects && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + return 0.0f; + } + return super.getTopFadingEdgeStrength(); + } + + @Override + protected float getBottomFadingEdgeStrength() { + // http://stackoverflow.com/a/6894270/244576 + if (mDisableEdgeEffects && Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + return 0.0f; + } + return super.getBottomFadingEdgeStrength(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/view/viewbadger/BadgeView.java b/app/src/main/java/cn/shangyu/gdxzExpert/view/viewbadger/BadgeView.java new file mode 100644 index 0000000..a9fb9bd --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/view/viewbadger/BadgeView.java @@ -0,0 +1,472 @@ +package cn.shangyu.gdxzExpert.view.viewbadger; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Color; +import android.graphics.Typeface; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.RoundRectShape; +import android.util.AttributeSet; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewParent; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.DecelerateInterpolator; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.TabWidget; +import android.widget.TextView; + +/** + * A simple text label view that can be applied as a "badge" to any given {@link View}. + * This class is intended to be instantiated at runtime rather than included in XML layouts. + * + * @author Jeff Gilfelt + */ +public class BadgeView extends TextView { + + public static final int POSITION_TOP_LEFT = 1; + public static final int POSITION_TOP_RIGHT = 2; + public static final int POSITION_BOTTOM_LEFT = 3; + public static final int POSITION_BOTTOM_RIGHT = 4; + public static final int POSITION_CENTER = 5; + public static final int POSITION_RED_RIGHT = 9; + private static final int DEFAULT_MARGIN_DIP = 5; + private static final int DEFAULT_LR_PADDING_DIP = 5; + private static final int DEFAULT_CORNER_RADIUS_DIP = 8; + private static final int DEFAULT_POSITION = POSITION_TOP_RIGHT; + private static final int DEFAULT_BADGE_COLOR = Color.parseColor("#CCFF0000"); //Color.RED; + private static final int DEFAULT_TEXT_COLOR = Color.WHITE; + + private static Animation fadeIn; + private static Animation fadeOut; + + private Context context; + private View target; + + private int badgePosition; + private int badgeMarginH; + private int badgeMarginV; + private int badgeColor; + + private boolean isShown; + + private ShapeDrawable badgeBg; + + private int targetTabIndex; + + public BadgeView(Context context) { + this(context, (AttributeSet) null, android.R.attr.textViewStyle); + } + + public BadgeView(Context context, AttributeSet attrs) { + this(context, attrs, android.R.attr.textViewStyle); + } + + /** + * Constructor - + * + * create a new BadgeView instance attached to a target {@link View}. + * + * @param context context for this view. + * @param target the View to attach the badge to. + */ + public BadgeView(Context context, View target) { + this(context, null, android.R.attr.textViewStyle, target, 0); + } + + /** + * Constructor - + * + * create a new BadgeView instance attached to a target {@link TabWidget} + * tab at a given index. + * + * @param context context for this view. + * @param target the TabWidget to attach the badge to. + * @param index the position of the tab within the target. + */ + public BadgeView(Context context, TabWidget target, int index) { + this(context, null, android.R.attr.textViewStyle, target, index); + } + + public BadgeView(Context context, AttributeSet attrs, int defStyle) { + this(context, attrs, defStyle, null, 0); + } + + public BadgeView(Context context, AttributeSet attrs, int defStyle, View target, int tabIndex) { + super(context, attrs, defStyle); + init(context, target, tabIndex); + } + + private void init(Context context, View target, int tabIndex) { + + this.context = context; + this.target = target; + this.targetTabIndex = tabIndex; + + // apply defaults + badgePosition = DEFAULT_POSITION; + badgeMarginH = dipToPixels(DEFAULT_MARGIN_DIP); + badgeMarginV = badgeMarginH; + badgeColor = DEFAULT_BADGE_COLOR; + + setTypeface(Typeface.DEFAULT_BOLD); + int paddingPixels = dipToPixels(DEFAULT_LR_PADDING_DIP); + setPadding(paddingPixels, 0, paddingPixels, 0); + setTextColor(DEFAULT_TEXT_COLOR); + + fadeIn = new AlphaAnimation(0, 1); + fadeIn.setInterpolator(new DecelerateInterpolator()); + fadeIn.setDuration(200); + + fadeOut = new AlphaAnimation(1, 0); + fadeOut.setInterpolator(new AccelerateInterpolator()); + fadeOut.setDuration(200); + + isShown = false; + + if (this.target != null) { + applyTo(this.target); + } else { + show(); + } + + } + + private void applyTo(View target) { + + LayoutParams lp = target.getLayoutParams(); + ViewParent parent = target.getParent(); + FrameLayout container = new FrameLayout(context); + + if (target instanceof TabWidget) { + + // set target to the relevant tab child container + target = ((TabWidget) target).getChildTabViewAt(targetTabIndex); + this.target = target; + + ((ViewGroup) target).addView(container, + new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); + + this.setVisibility(View.GONE); + container.addView(this); + + } else { + + // TODO verify that parent is indeed a ViewGroup + ViewGroup group = (ViewGroup) parent; + int index = group.indexOfChild(target); + + group.removeView(target); + group.addView(container, index, lp); + + container.addView(target); + + this.setVisibility(View.GONE); + container.addView(this); + + group.invalidate(); + + } + + } + + /** + * Make the badge visible in the UI. + * + */ + public void show() { + show(false, null); + } + + /** + * Make the badge visible in the UI. + * + * @param animate flag to apply the default fade-in animation. + */ + public void show(boolean animate) { + show(animate, fadeIn); + } + + /** + * Make the badge visible in the UI. + * + * @param anim Animation to apply to the view when made visible. + */ + public void show(Animation anim) { + show(true, anim); + } + + /** + * Make the badge non-visible in the UI. + * + */ + public void hide() { + hide(false, null); + } + + /** + * Make the badge non-visible in the UI. + * + * @param animate flag to apply the default fade-out animation. + */ + public void hide(boolean animate) { + hide(animate, fadeOut); + } + + /** + * Make the badge non-visible in the UI. + * + * @param anim Animation to apply to the view when made non-visible. + */ + public void hide(Animation anim) { + hide(true, anim); + } + + /** + * Toggle the badge visibility in the UI. + * + */ + public void toggle() { + toggle(false, null, null); + } + + /** + * Toggle the badge visibility in the UI. + * + * @param animate flag to apply the default fade-in/out animation. + */ + public void toggle(boolean animate) { + toggle(animate, fadeIn, fadeOut); + } + + /** + * Toggle the badge visibility in the UI. + * + * @param animIn Animation to apply to the view when made visible. + * @param animOut Animation to apply to the view when made non-visible. + */ + public void toggle(Animation animIn, Animation animOut) { + toggle(true, animIn, animOut); + } + + private void show(boolean animate, Animation anim) { + if (getBackground() == null) { + if (badgeBg == null) { + badgeBg = getDefaultBackground(); + } + setBackgroundDrawable(badgeBg); + } + applyLayoutParams(); + + if (animate) { + this.startAnimation(anim); + } + this.setVisibility(View.VISIBLE); + isShown = true; + } + + private void hide(boolean animate, Animation anim) { + this.setVisibility(View.GONE); + if (animate) { + this.startAnimation(anim); + } + isShown = false; + } + + private void toggle(boolean animate, Animation animIn, Animation animOut) { + if (isShown) { + hide(animate && (animOut != null), animOut); + } else { + show(animate && (animIn != null), animIn); + } + } + + /** + * Increment the numeric badge label. If the current badge label cannot be converted to + * an integer value, its label will be set to "0". + * + * @param offset the increment offset. + */ + public int increment(int offset) { + CharSequence txt = getText(); + int i; + if (txt != null) { + try { + i = Integer.parseInt(txt.toString()); + } catch (NumberFormatException e) { + i = 0; + } + } else { + i = 0; + } + i = i + offset; + setText(String.valueOf(i)); + return i; + } + + /** + * Decrement the numeric badge label. If the current badge label cannot be converted to + * an integer value, its label will be set to "0". + * + * @param offset the decrement offset. + */ + public int decrement(int offset) { + return increment(-offset); + } + + private ShapeDrawable getDefaultBackground() { + + int r = dipToPixels(DEFAULT_CORNER_RADIUS_DIP); + float[] outerR = new float[] {r, r, r, r, r, r, r, r}; + + RoundRectShape rr = new RoundRectShape(outerR, null, null); + ShapeDrawable drawable = new ShapeDrawable(rr); + drawable.getPaint().setColor(badgeColor); + + return drawable; + + } + + private void applyLayoutParams() { + + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + + switch (badgePosition) { + case POSITION_TOP_LEFT: + lp.gravity = Gravity.LEFT | Gravity.TOP; + lp.setMargins(badgeMarginH, badgeMarginV, 0, 0); + break; + case POSITION_TOP_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.TOP; + lp.setMargins(0, badgeMarginV, badgeMarginH, 0); + break; + case POSITION_RED_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.TOP; + lp.setMargins(0, badgeMarginV, -badgeMarginH, 0); + break; + case POSITION_BOTTOM_LEFT: + lp.gravity = Gravity.LEFT | Gravity.BOTTOM; + lp.setMargins(badgeMarginH, 0, 0, badgeMarginV); + break; + case POSITION_BOTTOM_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; + lp.setMargins(0, 0, badgeMarginH, badgeMarginV); + break; + case POSITION_CENTER: + lp.gravity = Gravity.CENTER; + lp.setMargins(0, 0, 0, 0); + break; + default: + break; + } + + setLayoutParams(lp); + + } + + /** + * Returns the target View this badge has been attached to. + * + */ + public View getTarget() { + return target; + } + + /** + * Is this badge currently visible in the UI? + * + */ + @Override + public boolean isShown() { + return isShown; + } + + /** + * Returns the positioning of this badge. + * + * one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. + * + */ + public int getBadgePosition() { + return badgePosition; + } + + /** + * Set the positioning of this badge. + * + * @param layoutPosition one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. + * + */ + public void setBadgePosition(int layoutPosition) { + this.badgePosition = layoutPosition; + } + + /** + * Returns the horizontal margin from the target View that is applied to this badge. + * + */ + public int getHorizontalBadgeMargin() { + return badgeMarginH; + } + + /** + * Returns the vertical margin from the target View that is applied to this badge. + * + */ + public int getVerticalBadgeMargin() { + return badgeMarginV; + } + + /** + * Set the horizontal/vertical margin from the target View that is applied to this badge. + * + * @param badgeMargin the margin in pixels. + */ + public void setBadgeMargin(int badgeMargin) { + this.badgeMarginH = badgeMargin; + this.badgeMarginV = badgeMargin; + } + + /** + * Set the horizontal/vertical margin from the target View that is applied to this badge. + * + * @param horizontal margin in pixels. + * @param vertical margin in pixels. + */ + public void setBadgeMargin(int horizontal, int vertical) { + this.badgeMarginH = horizontal; + this.badgeMarginV = vertical; + } + + /** + * Returns the color value of the badge background. + * + */ + public int getBadgeBackgroundColor() { + return badgeColor; + } + + /** + * Set the color value of the badge background. + * + * @param badgeColor the badge background color. + */ + public void setBadgeBackgroundColor(int badgeColor) { + this.badgeColor = badgeColor; + badgeBg = getDefaultBackground(); + } + + private int dipToPixels(int dip) { + Resources r = getResources(); + float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics()); + return (int) px; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/web/WeBean.java b/app/src/main/java/cn/shangyu/gdxzExpert/web/WeBean.java new file mode 100644 index 0000000..8745033 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/web/WeBean.java @@ -0,0 +1,194 @@ +package cn.shangyu.gdxzExpert.web; + +public class WeBean { + private String uuid; + private String title; + private String type; + private String path; + private String headImg; + private String summary; + private String agreenum; + private String readnum; + private String content; + private String projectName; + private String imgs; + private String imgpath; + private String agreeNum; + private String readNum; + private String liveimg; + private String liveurl; + private String imgPath; + private String topic; + private String public_name; + private String mobile; + private String types; + + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getHeadImg() { + return headImg; + } + + public void setHeadImg(String headImg) { + this.headImg = headImg; + } + + public String getSummary() { + return summary; + } + + public void setSummary(String summary) { + this.summary = summary; + } + + public String getAgreenum() { + return agreenum; + } + + public void setAgreenum(String agreenum) { + this.agreenum = agreenum; + } + + public String getReadnum() { + return readnum; + } + + public void setReadnum(String readnum) { + this.readnum = readnum; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public String getProjectName() { + return projectName; + } + + public void setProjectName(String projectName) { + this.projectName = projectName; + } + + public String getImgs() { + return imgs; + } + + public void setImgs(String imgs) { + this.imgs = imgs; + } + + public String getImgpath() { + return imgpath; + } + + public void setImgpath(String imgpath) { + this.imgpath = imgpath; + } + + public String getAgreeNum() { + return agreeNum; + } + + public void setAgreeNum(String agreeNum) { + this.agreeNum = agreeNum; + } + + public String getReadNum() { + return readNum; + } + + public void setReadNum(String readNum) { + this.readNum = readNum; + } + + public String getLiveimg() { + return liveimg; + } + + public void setLiveimg(String liveimg) { + this.liveimg = liveimg; + } + + public String getLiveurl() { + return liveurl; + } + + public void setLiveurl(String liveurl) { + this.liveurl = liveurl; + } + + public String getImgPath() { + return imgPath; + } + + public void setImgPath(String imgPath) { + this.imgPath = imgPath; + } + + public String getTopic() { + return topic; + } + + public void setTopic(String topic) { + this.topic = topic; + } + + public String getPublic_name() { + return public_name; + } + + public void setPublic_name(String public_name) { + this.public_name = public_name; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getTypes() { + return types; + } + + public void setTypes(String types) { + this.types = types; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/EditPopupWindow.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/EditPopupWindow.java new file mode 100644 index 0000000..a643799 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/EditPopupWindow.java @@ -0,0 +1,167 @@ +package cn.shangyu.gdxzExpert.widge.pickerview; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.text.InputFilter; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.PopupWindow; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.StringUtil; +import cn.shangyu.gdxzExpert.utils.ToastUtil; + +/** + * 输入弹出框 + * @author Sai + * + */ +public class EditPopupWindow extends PopupWindow implements OnClickListener { + private View rootView; // 总的布局 + private TextView tvTitle; + private SubmitListener optionsSubmitListener; + private static final String TAG_SUBMIT = "submit"; + private static final String TAG_CANCEL = "cancel"; + private EditText etName; + private Context context; + + public EditPopupWindow(Context context) { + super(context); + this.context = context; + this.setWidth(LayoutParams.MATCH_PARENT); + this.setHeight(LayoutParams.WRAP_CONTENT); + // 这样设置才能点击屏幕外dismiss窗口 + this.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + this.setOutsideTouchable(false); + //进入退出动画 + this.setAnimationStyle(R.style.editpopwindow_anim_style); + // 使其聚集获取焦点 + this.setFocusable(true); + //解决PopupWindow被输入法弹上去之后无法恢复原位 + this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + this.update(); + + LayoutInflater mLayoutInflater = LayoutInflater.from(context); + rootView = mLayoutInflater.inflate(R.layout.popwindow_edit_text, null); + + TextView btnCancle = (TextView) rootView.findViewById(R.id.btn_cancle); + tvTitle = (TextView) rootView.findViewById(R.id.tv_title); + TextView btnSure = (TextView) rootView.findViewById(R.id.btn_sure); + etName = (EditText) rootView.findViewById(R.id.et_name); + tvTitle.setText(context.getResources().getString(R.string.pickerview_edit_title)); + setEtName(etName); + btnSure.setTag(TAG_SUBMIT); + btnCancle.setTag(TAG_CANCEL); + btnSure.setOnClickListener(this); + btnCancle.setOnClickListener(this); + + setContentView(rootView); + } + + + public EditText getEtName() { + return etName; + } + + + + public void setEtName(EditText etName) { + this.etName = etName; + } + + + + /** + * 启动位置.与设置默认输入框的值 + */ + public void showAtLocation(View parent, int gravity, int x, int y, String text) { + if (!StringUtil.isBland(text)) { + etName.setText(text); + etName.setSelection(text.length()); + }else{ + etName.setText(""); + } + this.update(); + super.showAtLocation(parent, gravity, x, y); + } + + /** + * 设置输入框的输入类型 + */ + public void setInputType(int type) { + etName.setInputType(type); + } + /** + * 设置标题 + * setPopupTitle + * + * @param Title + * void + */ + public void setPopupTitle(String Title) { + if (TextUtils.isEmpty(Title)) { + return ; + } + tvTitle.setText(Title); + } + + /** + * 设置输入框的输入的最大长度 + */ + public void setMaxLength(int length) { + if (length > 0) { + etName.setFilters(new InputFilter[]{new InputFilter.LengthFilter(length)}); + } + } + + @Override + public void onClick(View v) { + String tag=(String) v.getTag(); + if(tag.equals(TAG_CANCEL)){ + etName.clearFocus(); + hideSoftInputFromWindow(); + dismiss(); + return; + }else { + if(optionsSubmitListener!=null) + { + String inputText = etName.getText().toString().trim(); + if (TextUtils.isEmpty(inputText)) { + ToastUtil.showToast("输入不为空"); + return; + } + optionsSubmitListener.onSubmit(inputText); + } + etName.clearFocus(); +// hideSoftInputFromWindow(); +// dismiss(); + return; + } + } + + private void hideSoftInputFromWindow() { + + //得到InputMethodManager的实例 + InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(etName.getWindowToken(),0); + +// ((InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE)) +// .hideSoftInputFromWindow(etName.getWindowToken(), +// InputMethodManager.HIDE_NOT_ALWAYS); + } + public interface SubmitListener { + public void onSubmit(String inputText); + } + + public void setSubmitListener(SubmitListener optionsSelectListener) { + this.optionsSubmitListener = optionsSelectListener; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OptionsPopupWindow.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OptionsPopupWindow.java new file mode 100644 index 0000000..0fb64c3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OptionsPopupWindow.java @@ -0,0 +1,233 @@ +package cn.shangyu.gdxzExpert.widge.pickerview; + +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.Button; +import android.widget.PopupWindow; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.OnWheelChangedListener; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.ScreenInfo; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.WheelOptions; + +/** + * 选项选择器,可支持一二三级联动选择 + * @author Sai + * + */ +public class OptionsPopupWindow extends PopupWindow implements OnClickListener { + private View rootView; // 总的布局 + WheelOptions wheelOptions; + private Button btnSubmit, btnCancel; + private OnOptionsSelectListener optionsSelectListener; + private TextView tvTitle; + private OnWheelChangedListener onWheelChangedListener; + private static final String TAG_SUBMIT = "submit"; + private static final String TAG_CANCEL = "cancel"; + + public OptionsPopupWindow(Context context) { + super(context); + this.setWidth(LayoutParams.MATCH_PARENT); + this.setHeight(LayoutParams.WRAP_CONTENT); + this.setBackgroundDrawable(new BitmapDrawable());// 这样设置才能点击屏幕外dismiss窗口 + this.setOutsideTouchable(true); + this.setAnimationStyle(R.style.timepopwindow_anim_style); + + LayoutInflater mLayoutInflater = LayoutInflater.from(context); + rootView = mLayoutInflater.inflate(R.layout.pw_options, null); + // -----确定和取消按钮 + btnSubmit = (Button) rootView.findViewById(R.id.btnSubmit); + btnSubmit.setTag(TAG_SUBMIT); + btnCancel = (Button) rootView.findViewById(R.id.btnCancel); + tvTitle = (TextView) rootView.findViewById(R.id.tvTitle); + tvTitle.setText(context.getResources().getString(R.string.pickerview_options_title)); + btnCancel.setTag(TAG_CANCEL); + btnSubmit.setOnClickListener(this); + btnCancel.setOnClickListener(this); + // ----转轮 + final View optionspicker = rootView.findViewById(R.id.optionspicker); + ScreenInfo screenInfo = new ScreenInfo((Activity) context); + wheelOptions = new WheelOptions(optionspicker); + + wheelOptions.screenheight = screenInfo.getHeight(); + + setContentView(rootView); + } + public OptionsPopupWindow(Context context,String str) { + super(context); + this.setWidth(LayoutParams.MATCH_PARENT); + this.setHeight(LayoutParams.MATCH_PARENT); + this.setBackgroundDrawable(new ColorDrawable(0x80000000));// 这样设置才能点击屏幕外dismiss窗口 + this.setOutsideTouchable(true); + this.setAnimationStyle(R.style.timepopwindow_anim_style); + + LayoutInflater mLayoutInflater = LayoutInflater.from(context); + rootView = mLayoutInflater.inflate(R.layout.pw_options_new, null); + // -----确定和取消按钮 + btnSubmit = (Button) rootView.findViewById(R.id.btnSubmit); + btnSubmit.setTag(TAG_SUBMIT); + btnCancel = (Button) rootView.findViewById(R.id.btnCancel); + tvTitle = (TextView) rootView.findViewById(R.id.tvTitle); + tvTitle.setText(context.getResources().getString(R.string.pickerview_options_title)); + btnCancel.setTag(TAG_CANCEL); + btnSubmit.setOnClickListener(this); + btnCancel.setOnClickListener(this); + // ----转轮 + final View optionspicker = rootView.findViewById(R.id.optionspicker); + ScreenInfo screenInfo = new ScreenInfo((Activity) context); + wheelOptions = new WheelOptions(optionspicker); + + wheelOptions.screenheight = screenInfo.getHeight(); + + setContentView(rootView); + } + + public void setPicker(ArrayList optionsItems) { + wheelOptions.setPicker(optionsItems, null, null, false); + } + + public void setPicker(ArrayList options1Items, + ArrayList> options2Items, boolean linkage) { + wheelOptions.setPicker(options1Items, options2Items, null, linkage); + } + + public void setPicker(ArrayList options1Items, + ArrayList> options2Items, + ArrayList>> options3Items, + boolean linkage) { + wheelOptions.setPicker(options1Items, options2Items, options3Items, + linkage); + } + /** + * 设置标题 + * setPopupTitle + * + * @param Title + * void + */ + public void setPopupTitle(String Title) { + if (TextUtils.isEmpty(Title)) { + return ; + } + tvTitle.setText(Title); + } + /** + * 设置确定按钮的标题 + * setPopupTitle + * + * @param Title + * void + */ + public void setSubmitTitle(String Title) { + if (TextUtils.isEmpty(Title)) { + return ; + } + btnSubmit.setText(Title); + } + /** + * 设置选中的item位置 + * @param option1 + */ + public void setSelectOptions(int option1){ + wheelOptions.setCurrentItems(option1, 0, 0); + } + /** + * 设置选中的item位置 + * @param option1 + * @param option2 + */ + public void setSelectOptions(int option1, int option2){ + wheelOptions.setCurrentItems(option1, option2, 0); + } + /** + * 设置选中的item位置 + * @param option1 + * @param option2 + * @param option3 + */ + public void setSelectOptions(int option1, int option2, int option3){ + wheelOptions.setCurrentItems(option1, option2, option3); + } + /** + * 设置选项的单位 + * @param label1 + */ + public void setLabels(String label1){ + wheelOptions.setLabels(label1, null, null); + } + /** + * 设置选项的单位 + * @param label1 + * @param label2 + */ + public void setLabels(String label1,String label2){ + wheelOptions.setLabels(label1, label2, null); + } + /** + * 设置选项的单位 + * @param label1 + * @param label2 + * @param label3 + */ + public void setLabels(String label1,String label2,String label3){ + wheelOptions.setLabels(label1, label2, label3); + } + /** + * 设置是否循环滚动 + * @param cyclic + */ + public void setCyclic(boolean cyclic){ + wheelOptions.setCyclic(cyclic); + } + /** + * 设置是否监听单项滑动 + */ + public void setOption1ChangingListener(boolean isListener, OnWheelChangedListener option1){ + wheelOptions.setOption1ChangingListener(isListener, option1); + } + + @Override + public void onClick(View v) + { + String tag=(String) v.getTag(); + if(tag.equals(TAG_CANCEL)) + { + dismiss(); + return; + } + else + { + if(optionsSelectListener!=null) + { + int[] optionsCurrentItems=wheelOptions.getCurrentItems(); + optionsSelectListener.onOptionsSelect(optionsCurrentItems[0], optionsCurrentItems[1], optionsCurrentItems[2]); + } + dismiss(); + return; + } + } + + public interface OnOptionsSelectListener { + public void onOptionsSelect(int options1, int option2, int options3); + } + + public void setOnoptionsSelectListener( + OnOptionsSelectListener optionsSelectListener) { + this.optionsSelectListener = optionsSelectListener; + } + + public void setOnWheelChangedListener( + OnWheelChangedListener onWheelChangedListener) { + this.onWheelChangedListener = onWheelChangedListener; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowAdapter.java new file mode 100644 index 0000000..86d23a8 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowAdapter.java @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */package cn.shangyu.gdxzExpert.widge.pickerview; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.ecdemo.common.base.CommAdapter; + +/** + * ActionBar 下拉菜单数据适配器 + * Created by Jorstin on 2015/3/18. + */ +public class OverflowAdapter extends CommAdapter { + + private Context mContext; + /**布局加载器*/ + private LayoutInflater mLayoutInflater; + /**下拉菜单*/ + private OverflowHelper mHelper; + /**下拉菜单需要显示的数据*/ + private OverflowItem[] mItems; + + /** + * 构造方法 + * @param helper + * @param ctx + */ + public OverflowAdapter(OverflowHelper helper , Context ctx) { + mHelper = helper; + mContext = ctx; + mLayoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + } + + /** + * 创建一个新的View 并且设置隐藏 + * @return + */ + private View createView() { + View view = new View(mContext); + view.setVisibility(View.GONE); + return view; + } + + /** + * 设置下拉菜单选项图标是否可见 + * @param imageView 图标 + * @param visible + */ + private void setViewVisibility(ImageView imageView ,boolean visible) { + imageView.setVisibility(visible?View.VISIBLE:View.GONE); + } + + /** + * 设置当前Item是否可用 + * @param enabled + * @param textView + * @param parent + */ + private void setItemEnabled(boolean enabled , TextView textView , ViewGroup parent){ + if(enabled) { + textView.setTextColor(mHelper.getNormalColor()); + setViewPadding(parent, R.drawable.common_popup_menu_item); + } else { + textView.setTextColor(mHelper.getDisabledColor()); + setViewPadding(parent, R.drawable.transparent); + } + } + + /** + * 设置菜单显示的数据 + * @param items + */ + public void setOverflowItem(OverflowItem[] items) { + if(items == null || items.length <= 0) { + return ; + } + this.mItems = items; + } + + @Override + public int getCount() { + if(mItems == null) { + return 0; + } + return mItems.length; + } + + @Override + public Object getItem(int position) { + if(mItems == null || mItems.length <= position) { + return null; + } + return mItems[position]; + } + + @Override + public long getItemId(int position) { + return 0; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + + if(isNullorLinearLayout(convertView)) { + if(!isPositionNullData(position)) { + convertView = null; + } + } + if(!isPositionNullData(position)) { + return super.getView(position, convertView, parent); + } + return createView(); + + + } + + /** + * 初始化Holder + * @param convertView + */ + private void findViewId(View convertView) { + ViewHolder holder = new ViewHolder(); + holder.icon = (ImageView) convertView.findViewById(R.id.popup_menu_item_left_image); + holder.title = (TextView) convertView.findViewById(R.id.popup_menu_item_name); + holder.root = (ViewGroup) convertView.findViewById(R.id.popup_container); + holder.point = (ImageView) convertView.findViewById(R.id.popup_menu_image_red); + convertView.setTag(holder); + } + + @Override + protected View buildViewByType(int position, ViewGroup parent, + int itemViewType) { + View itemView = mLayoutInflater.inflate(R.layout.comm_popup_menu_item, parent, false); + findViewId(itemView); + return itemView; + } + + @Override + protected void bindData(View convertView, int position, int itemViewType) { + OverflowItem overflowItem = mItems[position]; + if(overflowItem == null) { + return ; + } + ViewHolder holder = (ViewHolder) convertView.getTag(); + if(holder == null) { + return ; + } + holder.title.setText(overflowItem.title); + if(overflowItem.getIcon() > 0) { + holder.icon.setImageResource(overflowItem.getIcon()); + } + setViewVisibility(holder.point, false); + setItemEnabled(overflowItem.enabled, holder.title, holder.root); + } + + /** + * 当前位置显示的数据是否为空 + * @param position + * @return + */ + private boolean isPositionNullData(int position) { + return mItems[position] == null; + } + + /** + * 布局是否为空或者为LinearLayout + * @param convertView + * @return + */ + private boolean isNullorLinearLayout(View convertView) { + return (convertView == null) || (convertView instanceof LinearLayout); + } + + /** + * 调整位置Padding + * @param parent + * @param background + */ + private void setViewPadding(ViewGroup parent, int background) { + int[] rect = new int[4]; + rect[0] = parent.getPaddingLeft(); + rect[1] = parent.getPaddingTop(); + rect[2] = parent.getPaddingRight(); + rect[3] = parent.getPaddingBottom(); + parent.setBackgroundResource(background); + parent.setPadding(rect[0], rect[1], rect[2], rect[3]); + } + + public class ViewHolder { + /**图标*/ + public ImageView icon = null; + /**标题*/ + public TextView title = null; + /**跟布局*/ + public ViewGroup root = null; + /**是否有更新*/ + public ImageView point = null; + } + + /** + * 菜单Item + */ + public static class OverflowItem { + public String title; + public int icon; + protected boolean enabled = true; + protected boolean showUpdate = false; + + public OverflowItem(String title) { + this.title = title; + enabled = true; + } + + public int getIcon() { + return icon; + } + + public void setIcon(int resid) { + icon = resid; + } + + public String getTitle() { + return title; + } + + + + + + + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowHelper.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowHelper.java new file mode 100644 index 0000000..c6f509d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/OverflowHelper.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2015 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.widge.pickerview; + +import android.content.Context; +import android.view.KeyEvent; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.widget.AdapterView; +import android.widget.LinearLayout; +import android.widget.PopupWindow; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.DensityUtil; + + +/** + * 自定义Overflow ActionBar菜单,显示下拉更多选项 + * Created by Jorstin on 2015/3/18. + */ +public class OverflowHelper { + + private Context mContext; + /**菜单承载区域View*/ + private PopupWindow mPopupWindow; + /**菜单选项*/ + private LinearLayout mPopupLayout; + /**下拉菜单显示区域*/ +// private PopupMenuListView mListView; + /**下拉菜单数据适配器*/ + private OverflowAdapter mAdapter; + /**菜单颜色状态*/ + private int mNormalColor; + private int mDisabledColor; + + public OverflowHelper(Context ctx) { + mContext = ctx; + mNormalColor = mContext.getResources().getColor(R.color.white); + mDisabledColor = mContext.getResources().getColor(R.color.text_disabled); + mPopupLayout = (LinearLayout) LayoutInflater.from(mContext).inflate(R.layout.comm_popup_menu, null, true); +// mListView = (PopupMenuListView) mPopupLayout.findViewById(R.id.comm_popup_list); + mAdapter = new OverflowAdapter(this, ctx); +// mListView.setAdapter(mAdapter); +// mListView.setOnKeyListener(mOnKeyListener); + mPopupWindow = new PopupWindow(mPopupLayout, -2, -2, true); + mPopupWindow.setContentView(mPopupLayout); + mPopupWindow.setOutsideTouchable(true); + mPopupWindow.setFocusable(true); + mPopupWindow.setWidth(414); + mPopupWindow.getContentView().setOnTouchListener(mOnTouchListener); + mPopupWindow.update(); + } + + /** + * 显示菜单 + * @param anchor + * @param xoff + * @param yoff + */ + public void showAsDropDown(View anchor , float xoff ,float yoff) { + mPopupWindow.showAsDropDown(anchor, DensityUtil.dip2px(xoff), DensityUtil.dip2px(yoff)); + } + + public void showAsDropDown(View anchor) { + mPopupWindow.showAsDropDown(anchor, DensityUtil.dip2px(0.0F), DensityUtil.dip2px(-11.0F)); + } + + /** + * 这是点击事件监听 + * @param itemClickListener + */ + public void setOnOverflowItemClickListener(AdapterView.OnItemClickListener itemClickListener) { +// mListView.setOnItemClickListener(itemClickListener); + } + + /** + * 设置菜单显示数据 + * @param items + */ + public void setOverflowItems(OverflowAdapter.OverflowItem[] items) { + mAdapter.setOverflowItem(items); + mAdapter.notifyDataSetChanged(); +// mListView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); +// int measuredWidth = mListView.getMeasuredWidth(); +// mPopupWindow.setWidth(measuredWidth); + mPopupWindow.update(); + } + + /** + * 是否菜单显示 + * @return + */ + public boolean isOverflowShowing() { + return mPopupWindow.isShowing(); + } + + /** + * 关闭菜单 + */ + public void dismiss() { + if(!mPopupWindow.isShowing()) { + return ; + } + mPopupWindow.dismiss(); + } + + /** + * @return the mNormalColor + */ + public int getNormalColor() { + return mNormalColor; + } + + /** + * @return the mDisabledColor + */ + public int getDisabledColor() { + return mDisabledColor; + } + + + private final View.OnKeyListener mOnKeyListener + = new View.OnKeyListener() { + + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if(event.getKeyCode() == KeyEvent.KEYCODE_MENU && event.getAction() != KeyEvent.ACTION_DOWN) { + return false; + } + dismiss(); + return true; + } + + }; + + private final View.OnTouchListener mOnTouchListener + = new View.OnTouchListener() { + + @Override + public boolean onTouch(View v, MotionEvent event) { + dismiss(); + return false; + } + }; + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/PopMenu.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/PopMenu.java new file mode 100644 index 0000000..b7c4a5f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/PopMenu.java @@ -0,0 +1,145 @@ +package cn.shangyu.gdxzExpert.widge.pickerview; + +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.ListView; +import android.widget.PopupWindow; +import android.widget.TextView; + +import java.util.ArrayList; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.DensityUtil; + + +public class PopMenu { + private ArrayList itemList; + private int[] itemImageList; + private Context context; + private PopupWindow popupWindow ; + private ListView listView; + //private OnItemClickListener listener; + + + public PopMenu(Context context) { + // TODO Auto-generated constructor stub + this.context = context; + + itemList = new ArrayList(5); + itemImageList = new int[5]; + + View view = LayoutInflater.from(context).inflate(R.layout.popmenu, null); + + //设置 listview + listView = (ListView)view.findViewById(R.id.listView); + listView.setAdapter(new PopAdapter()); + listView.setFocusableInTouchMode(true); + listView.setFocusable(true); + popupWindow = new PopupWindow(view, +// context.getResources().getDimensionPixelSize(R.dimen.popmenu_width), + -2, + -2); + popupWindow.setContentView(view); + popupWindow.setWidth(context.getResources().getDimensionPixelSize(R.dimen.popmenu_width)); + // 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景(很神奇的) + popupWindow.setBackgroundDrawable(new ColorDrawable(0)); + popupWindow.update(); + } + + //设置菜单项点击监听器 + public void setOnItemClickListener(OnItemClickListener listener) { + //this.listener = listener; + listView.setOnItemClickListener(listener); + } + + //批量添加菜单项 + public void addItems(String[] items, int[] itemsImage) { + for (String s : items) + itemList.add(s); + for (int i = 0; i < itemsImage.length; i++) { + itemImageList[i] = itemsImage[i]; + } + } + + //单个添加菜单项 + public void addItem(String item, int itemImage) { + itemList.add(item); + itemImageList[0] = itemImage; + } + + //下拉式 弹出 pop菜单 parent 右下角 + public void showAsDropDown(View parent) { + /*popupWindow.showAsDropDown(parent, -100, + //保证尺寸是根据屏幕像素密度来的 +// context.getResources().getDimensionPixelSize(R.dimen.popmenu_yoff) + 0);*/ +// popupWindow.showAtLocation(parent, Gravity.LEFT, 0, 0); + // 使其聚集 + popupWindow.setFocusable(true); + // 设置允许在外点击消失 + popupWindow.setOutsideTouchable(true); + popupWindow.showAsDropDown(parent, DensityUtil.dip2px(-55.0F), DensityUtil.dip2px(0.0F)); + //刷新状态 + popupWindow.update(); + } + + //隐藏菜单 + public void dismiss() { + popupWindow.dismiss(); + } + + // 适配器 + private final class PopAdapter extends BaseAdapter { + + @Override + public int getCount() { + // TODO Auto-generated method stub + return itemList.size(); + } + + @Override + public Object getItem(int position) { + // TODO Auto-generated method stub + return itemList.get(position); + } + + @Override + public long getItemId(int position) { + // TODO Auto-generated method stub + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + // TODO Auto-generated method stub + ViewHolder holder; + if (convertView == null) { + convertView = LayoutInflater.from(context).inflate(R.layout.pomenu_item, null); + holder = new ViewHolder(); + + convertView.setTag(holder); + + holder.groupItem = (TextView) convertView.findViewById(R.id.textView); + holder.iv_item = (ImageView) convertView.findViewById(R.id.iv_item); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + holder.iv_item.setImageResource(itemImageList[position]); + holder.groupItem.setText(itemList.get(position)); + + return convertView; + } + + private final class ViewHolder { + public ImageView iv_item; + public TextView groupItem; + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/SelectedPhotoPopupWindow.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/SelectedPhotoPopupWindow.java new file mode 100644 index 0000000..ea035e4 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/SelectedPhotoPopupWindow.java @@ -0,0 +1,163 @@ +package cn.shangyu.gdxzExpert.widge.pickerview; + +import java.io.File; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.graphics.Bitmap; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Environment; +import android.provider.MediaStore; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.widget.EditText; +import android.widget.PopupWindow; +import android.widget.TextView; +import android.widget.Toast; +import cn.shangyu.gdxzExpert.R; + +/** + * 选择图片 + * + * 暂时未完成,后续完成 + * @author ssy + * + */ +public class SelectedPhotoPopupWindow extends PopupWindow implements OnClickListener { + private View rootView; // 总的布局 + private TextView tvTitle; + private CameraListener optionsSubmitListener; + private static final String TAG_CAMERA = "camera"; + private static final String TAG_IMG = "img"; + private static final String TAG_CANCEL = "cancel"; + private EditText etName; + private ImgListener optionsImgListener; + private Context context; + + public SelectedPhotoPopupWindow(Context context) { + super(context); + this.context = context; + this.setWidth(LayoutParams.MATCH_PARENT); + this.setHeight(LayoutParams.WRAP_CONTENT); + // 这样设置才能点击屏幕外dismiss窗口 + this.setBackgroundDrawable(new ColorDrawable(0)); + // 设置允许在外点击消失 + this.setOutsideTouchable(true); + //进入退出动画 + this.setAnimationStyle(R.style.timepopwindow_anim_style); + // 使其聚集获取焦点 + this.setFocusable(true); + //解决PopupWindow被输入法弹上去之后无法恢复原位 + this.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + this.update(); + + LayoutInflater mLayoutInflater = LayoutInflater.from(context); + rootView = mLayoutInflater.inflate(R.layout.popwindow_select_img, null); + + TextView btn_camera = (TextView) rootView.findViewById(R.id.btn_camera); + TextView btn_img = (TextView) rootView.findViewById(R.id.btn_img); + TextView btn_cancle = (TextView) rootView.findViewById(R.id.btn_cancle); + + btn_camera.setTag(TAG_CAMERA); + btn_img.setTag(TAG_IMG); + btn_cancle.setTag(TAG_CANCEL); + btn_camera.setOnClickListener(this); + btn_img.setOnClickListener(this); + btn_cancle.setOnClickListener(this); + + setContentView(rootView); + } + + @Override + public void onClick(View v) { + String tag=(String) v.getTag(); + if(tag.equals(TAG_CANCEL)){ + dismiss(); + return; + }else if (tag.equals(TAG_CAMERA)) { + if(optionsSubmitListener!=null) + { + optionsSubmitListener.onCamera(); + } + dismiss(); + return; + + }else { + if(optionsImgListener!=null) + { + optionsImgListener.onImg(); + } + dismiss(); + return; + } + } + + public interface CameraListener { + public void onCamera(); + } + public interface ImgListener { + public void onImg(); + } + + public void setCameraListener(CameraListener optionsSelectListener) { + this.optionsSubmitListener = optionsSelectListener; + } + public void setImgListener(ImgListener optionsListener) { + this.optionsImgListener = optionsListener; + } + + + public static final int SELECT_PIC_BY_TACK_PHOTO = 1; // 使用照相机拍照获取图片 + public static final int SELECT_PIC_BY_PICK_PHOTO = 2; // 使用相册中的图片 + private static final int PHOTO_RESOULT = 3;// 照相 + public static final String KEY_PHOTO_PATH = "photo_path";// 从Intent获取图片path的KEY + public static final String KEY_PHOTO_BASE64 = "photo_base64";// 从Intent获取图片base64编码的KEY + + private Intent lastIntent; + private Uri photoUri;// 图片路径 + private Bitmap bitmap; + + private SharedPreferences sp; + private Editor editor; + private boolean isConstraint = false; + /** + * 拍照获取图片 + */ + private void takePhoto() { + + String fileName=null; + + // 执行拍照前,应该先判断SD卡是否存在 + String SDState = Environment.getExternalStorageState(); + if (SDState.equals(Environment.MEDIA_MOUNTED)) { + + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// "android.media.action.IMAGE_CAPTURE"调用系统的相机 + fileName = String.valueOf(System.currentTimeMillis()) + ".jpg"; + photoUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),fileName)); + //指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换 + intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri); + editor.putString("photoUri", photoUri+""); + editor.commit(); +// context.startActivityForResult(intent, SELECT_PIC_BY_TACK_PHOTO); + } else { + Toast.makeText(context, "内存卡不存在", Toast.LENGTH_LONG).show(); + } + } + + /*** + * 从相册中取图片 + */ + private void pickPhoto() { + Intent intent = new Intent(); + intent.setType("image/*"); + intent.setAction(Intent.ACTION_GET_CONTENT); +// startActivityForResult(intent, SELECT_PIC_BY_PICK_PHOTO); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/TimePopupWindow.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/TimePopupWindow.java new file mode 100644 index 0000000..b544ab1 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/TimePopupWindow.java @@ -0,0 +1,179 @@ +package cn.shangyu.gdxzExpert.widge.pickerview; + +import android.app.Activity; +import android.content.Context; +import android.graphics.drawable.BitmapDrawable; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup.LayoutParams; +import android.widget.PopupWindow; +import android.widget.TextView; + +import java.text.ParseException; +import java.util.Calendar; +import java.util.Date; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.ScreenInfo; +import cn.shangyu.gdxzExpert.widge.pickerview.lib.WheelTime; + + +/** + * 时间选择器 + * + * @author Sai + * + */ +public class TimePopupWindow extends PopupWindow implements OnClickListener { + public enum Type { + ALL, YEAR_MONTH_DAY, HOURS_MINS, MONTH_DAY_HOUR_MIN , YEAR_MONTH,YEAR + }// 四种选择模式,年月日时分,年月日,时分,月日时分 + + private View rootView; // 总的布局 + WheelTime wheelTime; + private View btnSubmit, btnCancel; + private static final String TAG_SUBMIT = "submit"; + private static final String TAG_CANCEL = "cancel"; + private OnTimeSelectListener timeSelectListener; + private TextView tvTitle; + + public TimePopupWindow(Context context, Type type) { + super(context); + this.setWidth(LayoutParams.MATCH_PARENT); + this.setHeight(LayoutParams.WRAP_CONTENT); + this.setBackgroundDrawable(new BitmapDrawable());// 这样设置才能点击屏幕外dismiss窗口 + this.setOutsideTouchable(true); + this.setAnimationStyle(R.style.timepopwindow_anim_style); + + LayoutInflater mLayoutInflater = LayoutInflater.from(context); + rootView = mLayoutInflater.inflate(R.layout.pw_time, null); + // -----确定和取消按钮 + btnSubmit = rootView.findViewById(R.id.btnSubmit); + btnSubmit.setTag(TAG_SUBMIT); + btnCancel = rootView.findViewById(R.id.btnCancel); + tvTitle = (TextView) rootView.findViewById(R.id.tvTitle); + tvTitle.setText(context.getResources().getString(R.string.pickerview_title)); + btnCancel.setTag(TAG_CANCEL); + btnSubmit.setOnClickListener(this); + btnCancel.setOnClickListener(this); + // ----时间转轮 + final View timepickerview = rootView.findViewById(R.id.timepicker); + ScreenInfo screenInfo = new ScreenInfo((Activity) context); + wheelTime = new WheelTime(timepickerview, type); + + wheelTime.screenheight = screenInfo.getHeight(); + + //默认选中当前时间 + Calendar calendar = Calendar.getInstance(); + calendar.setTimeInMillis(System.currentTimeMillis()); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + wheelTime.setPicker(year, month, day, hours, minute); + + setContentView(rootView); + } + + /** + * 设置可以选择的时间范围 + * + * @param START_YEAR + * @param END_YEAR + */ + public void setRange(int START_YEAR, int END_YEAR) { + WheelTime.setSTART_YEAR(START_YEAR); + WheelTime.setEND_YEAR(END_YEAR); + } + /** + * 设置标题 + * setPopupTitle + * + * @param Title + * void + */ + public void setPopupTitle(String Title) { + if (TextUtils.isEmpty(Title)) { + return ; + } + tvTitle.setText(Title); + } + + /** + * 设置选中时间 + * @param date + */ + public void setTime(Date date) { + Calendar calendar = Calendar.getInstance(); + if (date == null){ + calendar.setTimeInMillis(System.currentTimeMillis()); + }else{ + calendar.setTime(date); + } + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + int hours = calendar.get(Calendar.HOUR_OF_DAY); + int minute = calendar.get(Calendar.MINUTE); + LogUtil.i("year="+year+"month="+month+"day="+day+"hours="+hours+"minute="+minute); + wheelTime.setPicker(year, month, day, hours, minute); + } + public void setTimeold7(int year,int month,int day) { + wheelTime.setPicker(year, month, day, 0, 0); + } + /** + * 指定选中的时间,显示选择器 + * + * @param parent + * @param gravity + * @param x + * @param y + * @param date + */ + public void showAtLocation(View parent, int gravity, int x, int y) { + update(); + super.showAtLocation(parent, gravity, x, y); + } + + /** + * 设置是否循环滚动 + * + * @param cyclic + */ + public void setCyclic(boolean cyclic) { + wheelTime.setCyclic(cyclic); + } + + @Override + public void onClick(View v) { + String tag = (String) v.getTag(); + if (tag.equals(TAG_CANCEL)) { + dismiss(); + return; + } else { + if (timeSelectListener != null) { + try { + Date date = WheelTime.dateFormat.parse(wheelTime.getTime()); + timeSelectListener.onTimeSelect(date); + } catch (ParseException e) { + e.printStackTrace(); + } + } + dismiss(); + return; + } + } + + public interface OnTimeSelectListener { + public void onTimeSelect(Date date); + } + + public void setOnTimeSelectListener(OnTimeSelectListener timeSelectListener) { + this.timeSelectListener = timeSelectListener; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ArrayWheelAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ArrayWheelAdapter.java new file mode 100644 index 0000000..1ea6667 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ArrayWheelAdapter.java @@ -0,0 +1,55 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import java.util.ArrayList; + +/** + * The simple Array wheel adapter + * @param the element type + */ +public class ArrayWheelAdapter implements WheelAdapter { + + /** The default items length */ + public static final int DEFAULT_LENGTH = 4; + + // items + private ArrayList items; + // length + private int length; + + /** + * Constructor + * @param items the items + * @param length the max items length + */ + public ArrayWheelAdapter(ArrayList items, int length) { + this.items = items; + this.length = length; + } + + /** + * Contructor + * @param items the items + */ + public ArrayWheelAdapter(ArrayList items) { + this(items, DEFAULT_LENGTH); + } + + @Override + public String getItem(int index) { + if (index >= 0 && index < items.size()) { + return items.get(index).toString(); + } + return null; + } + + @Override + public int getItemsCount() { + return items.size(); + } + + @Override + public int getMaximumLength() { + return length; + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/DensityUtil.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/DensityUtil.java new file mode 100644 index 0000000..cd721f9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/DensityUtil.java @@ -0,0 +1,25 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import android.content.Context; + +public class DensityUtil { + private static float scale; + + /** + * 根据手机的分辨率从 dp 的单位 转成为 px(像素) + */ + public static int dip2px(Context context, float dpValue) { + if (scale == 0) + scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 根据手机的分辨率从 px(像素) 的单位 转成为 dp + */ + public static int px2dip(Context context, float pxValue) { + if (scale == 0) + scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/NumericWheelAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/NumericWheelAdapter.java new file mode 100644 index 0000000..c7f8490 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/NumericWheelAdapter.java @@ -0,0 +1,73 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + + +/** + * Numeric Wheel adapter. + */ +public class NumericWheelAdapter implements WheelAdapter { + + /** The default min value */ + public static final int DEFAULT_MAX_VALUE = 9; + + /** The default max value */ + private static final int DEFAULT_MIN_VALUE = 0; + + // Values + private int minValue; + private int maxValue; + + // format + private String format; + + /** + * Default constructor + */ + public NumericWheelAdapter() { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE); + } + + /** + * Constructor + * @param minValue the wheel min value + * @param maxValue the wheel max value + */ + public NumericWheelAdapter(int minValue, int maxValue) { + this(minValue, maxValue, null); + } + + /** + * Constructor + * @param minValue the wheel min value + * @param maxValue the wheel max value + * @param format the format string + */ + public NumericWheelAdapter(int minValue, int maxValue, String format) { + this.minValue = minValue; + this.maxValue = maxValue; + this.format = format; + } + + @Override + public String getItem(int index) { + if (index >= 0 && index < getItemsCount()) { + int value = minValue + index; + return format != null ? String.format(format, value) : Integer.toString(value); + } + return null; + } + + @Override + public int getItemsCount() { + return maxValue - minValue + 1; + } + + @Override + public int getMaximumLength() { + int max = Math.max(Math.abs(maxValue), Math.abs(minValue)); + int maxLen = Integer.toString(max).length(); + if (minValue < 0) { + maxLen++; + } + return maxLen; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelChangedListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelChangedListener.java new file mode 100644 index 0000000..acbdab6 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelChangedListener.java @@ -0,0 +1,20 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + + +/** + * Wheel changed listener interface. + *

The currentItemChanged() method is called whenever current wheel positions is changed: + *

  • New Wheel position is set + *
  • Wheel view is scrolled + */ +public interface OnWheelChangedListener { + /** + * Callback method to be invoked when current item changed + * @param wheel the wheel view whose state has changed + * @param oldValue the old value of current item + * @param newValue the new value of current item + */ + public void onChanged(WheelView wheel, int oldValue, int newValue); +} + + diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelScrollListener.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelScrollListener.java new file mode 100644 index 0000000..af6edd5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/OnWheelScrollListener.java @@ -0,0 +1,18 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +/** + * Wheel scrolled listener interface. + */ +public interface OnWheelScrollListener { + /** + * Callback method to be invoked when scrolling started. + * @param wheel the wheel view whose state has changed. + */ + void onScrollingStarted(WheelView wheel); + + /** + * Callback method to be invoked when scrolling ended. + * @param wheel the wheel view whose state has changed. + */ + void onScrollingFinished(WheelView wheel); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ScreenInfo.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ScreenInfo.java new file mode 100644 index 0000000..bbf1115 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/ScreenInfo.java @@ -0,0 +1,74 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import android.app.Activity; +import android.util.DisplayMetrics; + +/** + * 得到屏幕宽高密度等 + */ +public class ScreenInfo { + private Activity activity; + /** 屏幕宽度(像素)*/ + private int width; + /**屏幕高度(像素)*/ + private int height; + /**屏幕密度(0.75 / 1.0 / 1.5)*/ + private float density; + /**屏幕密度DPI(120 / 160 / 240)*/ + private int densityDpi; + public Activity getActivity() { + return activity; + } + + public void setActivity(Activity activity) { + this.activity = activity; + } + + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + + public float getDensity() { + return density; + } + + public void setDensity(float density) { + this.density = density; + } + + public int getDensityDpi() { + return densityDpi; + } + + public void setDensityDpi(int densityDpi) { + this.densityDpi = densityDpi; + } + + public ScreenInfo(Activity activity){ + this.activity = activity; + ini(); + } + + private void ini(){ + DisplayMetrics metric = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(metric); + width = metric.widthPixels; + height = metric.heightPixels; + density = metric.density; + densityDpi = metric.densityDpi; + } + + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelAdapter.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelAdapter.java new file mode 100644 index 0000000..eff7930 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelAdapter.java @@ -0,0 +1,25 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +public interface WheelAdapter { + /** + * Gets items count + * @return the count of wheel items + */ + public int getItemsCount(); + + /** + * Gets a wheel item by index. + * + * @param index the item index + * @return the wheel item text or null + */ + public String getItem(int index); + + /** + * Gets maximum item length. It is used to determine the wheel width. + * If -1 is returned there will be used the default wheel width. + * + * @return the maximum item length or -1 + */ + public int getMaximumLength(); +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelOptions.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelOptions.java new file mode 100644 index 0000000..b47930e --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelOptions.java @@ -0,0 +1,262 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import java.util.ArrayList; + +import android.text.TextUtils; +import android.view.View; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +public class WheelOptions { + private View view; + private WheelView wv_option1; + private WheelView wv_option2; + private WheelView wv_option3; + + private ArrayList mOptions1Items; + private ArrayList> mOptions2Items; + private ArrayList>> mOptions3Items; + public int screenheight; + + public View getView() { + return view; + } + + public void setView(View view) { + this.view = view; + } + + public WheelOptions(View view) { + super(); + this.view = view; + setView(view); + } + + public void setPicker(ArrayList optionsItems) { + setPicker(optionsItems, null, null, false); + } + + public void setPicker(ArrayList options1Items, + ArrayList> options2Items, boolean linkage) { + setPicker(options1Items, options2Items, null, linkage); + } + + public WheelView getWv_option1() { + return wv_option1; + } + + public void setWv_option1(WheelView wv_option1) { + this.wv_option1 = wv_option1; + } + + public void setPicker(ArrayList options1Items, + ArrayList> options2Items, + ArrayList>> options3Items, + boolean linkage) { + this.mOptions1Items = options1Items; + this.mOptions2Items = options2Items; + this.mOptions3Items = options3Items; + int len = ArrayWheelAdapter.DEFAULT_LENGTH; + if (mOptions3Items != null) { + len = 4;//三级联动选择 + } else if (mOptions2Items != null) { + len = 10;//二级联动选择 + } else { + len = 20;//单项选择 + } +// if (this.mOptions3Items == null){ +// len = 8; +// } +// if (this.mOptions2Items == null){ +// len = 12; +// } + // 选项1 + wv_option1 = (WheelView) view.findViewById(R.id.options1); + wv_option1.setAdapter(new OptionAdapter(mOptions1Items, len));// 设置显示数据 + wv_option1.setCurrentItem(0);// 初始化时显示的数据 + // 选项2 + wv_option2 = (WheelView) view.findViewById(R.id.options2); + if (mOptions2Items != null){ + wv_option2.setAdapter(new OptionAdapter(mOptions2Items.get(0), len));// 设置显示数据 + } + wv_option2.setCurrentItem(wv_option1.getCurrentItem());// 初始化时显示的数据 + // 选项3 + wv_option3 = (WheelView) view.findViewById(R.id.options3); + if (mOptions3Items != null){ + wv_option3.setAdapter(new OptionAdapter(mOptions3Items.get(0).get(0), len));// 设置显示数据 + mOptions3Items.get(0).get(0).size(); + } + wv_option3.setCurrentItem(wv_option3.getCurrentItem());// 初始化时显示的数据 + + // 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同) + int textSize = (int) ((screenheight / 100) * 3.0f); + + wv_option1.TEXT_SIZE = textSize; + wv_option2.TEXT_SIZE = textSize; + wv_option3.TEXT_SIZE = textSize; + + if (this.mOptions2Items == null){ + wv_option2.setVisibility(View.GONE); + } + if (this.mOptions3Items == null){ + wv_option3.setVisibility(View.GONE); + } + final int finalLen = len; + // 联动监听器 + OnWheelChangedListener wheelListener_option1 = new OnWheelChangedListener() { + + @Override + public void onChanged(WheelView wheel, int oldValue, int newValue) { + if (mOptions2Items != null) { + wv_option2.setAdapter(new OptionAdapter(mOptions2Items.get(wv_option1.getCurrentItem()), finalLen)); + wv_option2.setCurrentItem(0); + } + if (mOptions3Items != null) { + wv_option3.setAdapter(new OptionAdapter(mOptions3Items + .get(wv_option1.getCurrentItem()).get( + wv_option2.getCurrentItem()), finalLen)); + wv_option3.setCurrentItem(0); + } + } + }; + OnWheelChangedListener wheelListener_option2 = new OnWheelChangedListener() { + + @Override + public void onChanged(WheelView wheel, int oldValue, int newValue) { + if (mOptions3Items != null) { + wv_option3.setAdapter(new OptionAdapter(mOptions3Items + .get(wv_option1.getCurrentItem()).get( + wv_option2.getCurrentItem()), finalLen)); + wv_option3.setCurrentItem(0); + } + } + }; + // 添加联动监听 + if (options2Items != null && linkage){ + wv_option1.addChangingListener(wheelListener_option1); + } + if (options3Items != null && linkage){ + wv_option2.addChangingListener(wheelListener_option2); + } + + } + + public void setOption1ChangingListener() { + OnWheelChangedListener wheelListener_option1 = new OnWheelChangedListener() { + + @Override + public void onChanged(WheelView wheel, int oldValue, int newValue) { + LogUtil.i("ooooooooooo"+"oldValue="+oldValue+"newValue"+newValue); + } + }; + wv_option1.addChangingListener(wheelListener_option1); + } + + /** + * 设置是否设置是否监听单项滑动 + * + */ + public void setOption1ChangingListener(boolean isListener, OnWheelChangedListener option1) { + if (isListener) { + wv_option1.addChangingListener(option1); + } + } + + private class OptionAdapter extends ArrayWheelAdapter { + + public OptionAdapter(ArrayList items, int length) { + super(items, length); + } + + @Override + public String getItem(int index) { + String item = super.getItem(index); + // FIXME: 2015/10/23 如果名称较长,整个文字排版上就容易有问题,故截取显条目字数 + if (TextUtils.isEmpty(item)) { + return item; + } + if (wv_option3.isShown()) { + item = cutString(item, 4, "..."); + } else if (wv_option2.isShown()) { + item = cutString(item, 10, "..."); + } else { + item = cutString(item, 20, "..."); + } + return item; + } + + private String cutString(String text, int length, String endWith) { + //GBK每个汉字长2,UTF-8每个汉字长度为3 + final String CHINESE_ENCODE = "UTF-8"; + final int CHINESE_LENGTH = 3; + int textLength = text.length(); + int byteLength = 0; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < textLength && byteLength < length * CHINESE_LENGTH; i++) { + String str_i = text.substring(i, i + 1); + if (str_i.getBytes().length == 1) { + byteLength++;//英文 + } else { + byteLength += CHINESE_LENGTH;//中文 + } + sb.append(str_i); + } + try { + if (byteLength < text.getBytes(CHINESE_ENCODE).length) { + sb.append(endWith); + } + } catch (Exception e) { + e.printStackTrace(); + } + return sb.toString(); + } + + } + + /** + * 设置选项的单位 + * + * @param label1 + * @param label2 + * @param label3 + */ + public void setLabels(String label1, String label2, String label3) { + if (label1 != null) + wv_option1.setLabel(label1); + if (label2 != null) + wv_option2.setLabel(label2); + if (label3 != null) + wv_option3.setLabel(label3); + } + + /** + * 设置是否循环滚动 + * + * @param cyclic + */ + public void setCyclic(boolean cyclic) { + wv_option1.setCyclic(cyclic); + wv_option2.setCyclic(cyclic); + wv_option3.setCyclic(cyclic); + } + + /** + * 返回当前选中的结果对应的位置数组 因为支持三级联动效果,分三个级别索引,0,1,2 + * + * @return + */ + public int[] getCurrentItems() { + int[] currentItems = new int[3]; + currentItems[0] = wv_option1.getCurrentItem(); + currentItems[1] = wv_option2.getCurrentItem(); + currentItems[2] = wv_option3.getCurrentItem(); + LogUtil.i(String.format("selected index: %s,%s,%s", currentItems[0], currentItems[1], currentItems[2])); + return currentItems; + } + + public void setCurrentItems(int option1, int option2, int option3) { + wv_option1.setCurrentItem(option1); + wv_option2.setCurrentItem(option2); + wv_option3.setCurrentItem(option3); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelTime.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelTime.java new file mode 100644 index 0000000..14d20f5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelTime.java @@ -0,0 +1,248 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import android.content.Context; +import android.view.View; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.widge.pickerview.TimePopupWindow.Type; + + + +public class WheelTime { + public static DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + private View view; + private WheelView wv_year; + private WheelView wv_month; + private WheelView wv_day; + private WheelView wv_hours; + private WheelView wv_mins; + public int screenheight; + + private Type type; + private static int START_YEAR = 1900, END_YEAR = 2100; + + public View getView() { + return view; + } + + public void setView(View view) { + this.view = view; + } + + public static int getSTART_YEAR() { + return START_YEAR; + } + + public static void setSTART_YEAR(int sTART_YEAR) { + START_YEAR = sTART_YEAR; + } + + public static int getEND_YEAR() { + return END_YEAR; + } + + public static void setEND_YEAR(int eND_YEAR) { + END_YEAR = eND_YEAR; + } + + public WheelTime(View view) { + super(); + this.view = view; + type = Type.ALL; + setView(view); + } + public WheelTime(View view,Type type) { + super(); + this.view = view; + this.type = type; + setView(view); + } + public void setPicker(int year ,int month,int day){ + this.setPicker(year, month, day, 0, 0); + } + + /** + * @Description: TODO 弹出日期时间选择器 + */ + public void setPicker(int year ,int month ,int day,int h,int m) { + // 添加大小月月份并将其转换为list,方便之后的判断 + String[] months_big = { "1", "3", "5", "7", "8", "10", "12" }; + String[] months_little = { "4", "6", "9", "11" }; + + final List list_big = Arrays.asList(months_big); + final List list_little = Arrays.asList(months_little); + + Context context = view.getContext(); + // 年 + wv_year = (WheelView) view.findViewById(R.id.year); + wv_year.setAdapter(new NumericWheelAdapter(START_YEAR, END_YEAR));// 设置"年"的显示数据 + wv_year.setLabel(context.getString(R.string.pickerview_year));// 添加文字 + wv_year.setCurrentItem(year - START_YEAR);// 初始化时显示的数据 + + // 月 + wv_month = (WheelView) view.findViewById(R.id.month); + wv_month.setAdapter(new NumericWheelAdapter(1, 12)); + wv_month.setLabel(context.getString(R.string.pickerview_month)); + wv_month.setCurrentItem(month); + + // 日 + wv_day = (WheelView) view.findViewById(R.id.day); + // 判断大小月及是否闰年,用来确定"日"的数据 + if (list_big.contains(String.valueOf(month + 1))) { + wv_day.setAdapter(new NumericWheelAdapter(1, 31)); + } else if (list_little.contains(String.valueOf(month + 1))) { + wv_day.setAdapter(new NumericWheelAdapter(1, 30)); + } else { + // 闰年 + if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) + wv_day.setAdapter(new NumericWheelAdapter(1, 29)); + else + wv_day.setAdapter(new NumericWheelAdapter(1, 28)); + } + wv_day.setLabel(context.getString(R.string.pickerview_day)); + wv_day.setCurrentItem(day - 1); + + + wv_hours = (WheelView)view.findViewById(R.id.hour); + wv_hours.setAdapter(new NumericWheelAdapter(0, 23)); + wv_hours.setLabel(context.getString(R.string.pickerview_hours));// 添加文字 + wv_hours.setCurrentItem(h); + + wv_mins = (WheelView)view.findViewById(R.id.min); + wv_mins.setAdapter(new NumericWheelAdapter(0, 59)); + wv_mins.setLabel(context.getString(R.string.pickerview_minutes));// 添加文字 + wv_mins.setCurrentItem(m); + + // 添加"年"监听 + OnWheelChangedListener wheelListener_year = new OnWheelChangedListener() { + @Override + public void onChanged(WheelView wheel, int oldValue, int newValue) { + int year_num = newValue + START_YEAR; + // 判断大小月及是否闰年,用来确定"日"的数据 + int maxItem = 30; + if (list_big + .contains(String.valueOf(wv_month.getCurrentItem() + 1))) { + wv_day.setAdapter(new NumericWheelAdapter(1, 31)); + maxItem = 31; + } else if (list_little.contains(String.valueOf(wv_month + .getCurrentItem() + 1))) { + wv_day.setAdapter(new NumericWheelAdapter(1, 30)); + maxItem = 30; + } else { + if ((year_num % 4 == 0 && year_num % 100 != 0) + || year_num % 400 == 0){ + wv_day.setAdapter(new NumericWheelAdapter(1, 29)); + maxItem = 29; + } + else{ + wv_day.setAdapter(new NumericWheelAdapter(1, 28)); + maxItem = 28; + } + } + if (wv_day.getCurrentItem() > maxItem - 1){ + wv_day.setCurrentItem(maxItem - 1); + } + } + }; + // 添加"月"监听 + OnWheelChangedListener wheelListener_month = new OnWheelChangedListener() { + @Override + public void onChanged(WheelView wheel, int oldValue, int newValue) { + int month_num = newValue + 1; + int maxItem = 30; + // 判断大小月及是否闰年,用来确定"日"的数据 + if (list_big.contains(String.valueOf(month_num))) { + wv_day.setAdapter(new NumericWheelAdapter(1, 31)); + maxItem = 31; + } else if (list_little.contains(String.valueOf(month_num))) { + wv_day.setAdapter(new NumericWheelAdapter(1, 30)); + maxItem = 30; + } else { + if (((wv_year.getCurrentItem() + START_YEAR) % 4 == 0 && (wv_year + .getCurrentItem() + START_YEAR) % 100 != 0) + || (wv_year.getCurrentItem() + START_YEAR) % 400 == 0){ + wv_day.setAdapter(new NumericWheelAdapter(1, 29)); + maxItem = 29; + } + else{ + wv_day.setAdapter(new NumericWheelAdapter(1, 28)); + maxItem = 28; + } + } + if (wv_day.getCurrentItem() > maxItem - 1){ + wv_day.setCurrentItem(maxItem - 1); + } + + } + }; + wv_year.addChangingListener(wheelListener_year); + wv_month.addChangingListener(wheelListener_month); + + // 根据屏幕密度来指定选择器字体的大小(不同屏幕可能不同) + int textSize = 0; + switch(type){ + case ALL: + textSize = (screenheight / 100) * 3; + break; + case YEAR_MONTH_DAY: + textSize = (screenheight / 100) * 4; + wv_hours.setVisibility(View.GONE); + wv_mins.setVisibility(View.GONE); + break; + case HOURS_MINS: + textSize = (screenheight / 100) * 4; + wv_year.setVisibility(View.GONE); + wv_month.setVisibility(View.GONE); + wv_day.setVisibility(View.GONE); + break; + case MONTH_DAY_HOUR_MIN: + textSize = (screenheight / 100) * 3; + wv_year.setVisibility(View.GONE); + break; + case YEAR_MONTH: + textSize = (screenheight / 100) * 4; + wv_day.setVisibility(View.GONE); + wv_hours.setVisibility(View.GONE); + wv_mins.setVisibility(View.GONE); + case YEAR: + textSize = (screenheight / 100) * 4; + wv_month.setVisibility(View.GONE); + wv_day.setVisibility(View.GONE); + wv_hours.setVisibility(View.GONE); + wv_mins.setVisibility(View.GONE); + } + + wv_day.TEXT_SIZE = textSize; + wv_month.TEXT_SIZE = textSize; + wv_year.TEXT_SIZE = textSize; + wv_hours.TEXT_SIZE = textSize; + wv_mins.TEXT_SIZE = textSize; + + } + + /** + * 设置是否循环滚动 + * @param cyclic + */ + public void setCyclic(boolean cyclic){ + wv_year.setCyclic(cyclic); + wv_month.setCyclic(cyclic); + wv_day.setCyclic(cyclic); + wv_hours.setCyclic(cyclic); + wv_mins.setCyclic(cyclic); + } + public String getTime() { + StringBuffer sb = new StringBuffer(); + sb.append((wv_year.getCurrentItem() + START_YEAR)).append("-") + .append((wv_month.getCurrentItem() + 1)).append("-") + .append((wv_day.getCurrentItem() + 1)).append(" ") + .append(wv_hours.getCurrentItem()).append(":") + .append(wv_mins.getCurrentItem()); + return sb.toString(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelView.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelView.java new file mode 100644 index 0000000..c780014 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelView.java @@ -0,0 +1,1022 @@ +/* + * Android Wheel Control. + * https://code.google.com/p/android-wheel/ + * + * Copyright 2010 Yuri Kanivets + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.GradientDrawable.Orientation; +import android.os.Handler; +import android.os.Message; +import android.text.Layout; +import android.text.StaticLayout; +import android.text.TextPaint; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.animation.Interpolator; +import android.widget.Scroller; + +import java.util.LinkedList; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; + + +/** + * Numeric wheel view. + * + * @author Yuri Kanivets + */ +public class WheelView extends View { + /** Scrolling duration */ + private static final int SCROLLING_DURATION = 400; + + /** Minimum delta for scrolling */ + private static final int MIN_DELTA_FOR_SCROLLING = 1; + + /** Current value & label text color */ + private static final int VALUE_TEXT_COLOR = 0xFF333333; + + /** Items text color */ + public static int ITEMS_TEXT_COLOR = 0xFF666666; + + /** Top and bottom shadows colors */ + public static final int[] SHADOWS_COLORS = new int[] { 0xFF111111, + 0x00AAAAAA, 0x00AAAAAA }; + + /** Additional items height (is added to standard text item height) */ + private static final int ADDITIONAL_ITEM_HEIGHT = 15; + + /** Text size */ + public int TEXT_SIZE; + + /** Top and bottom items offset (to hide that) */ + private final int ITEM_OFFSET = TEXT_SIZE / 5; + + /** Additional width for items layout */ + private static final int ADDITIONAL_ITEMS_SPACE = 2; + + /** Label offset , dip */ + private static int LABEL_OFFSET_DIP = 20; + /** Label offset */ + public static int LABEL_OFFSET = 30; + + /** Left and right padding value */ + private static final int PADDING = 10; + + /** Default count of visible items */ + private static final int DEF_VISIBLE_ITEMS = 7; + + // Wheel Values + private WheelAdapter adapter = null; + private int currentItem = 0; + + // Widths + private int itemsWidth = 0; + private int labelWidth = 0; + + // Count of visible items + public int visibleItems = DEF_VISIBLE_ITEMS; + + // Item height + private int itemHeight = 0; + + // Text paints + public TextPaint itemsPaint; + public TextPaint valuePaint; + + // Layouts + public StaticLayout itemsLayout; + public StaticLayout labelLayout; + public StaticLayout valueLayout; + + // Label & background + private String label; + public Drawable centerDrawable; + + // Shadows drawables + public GradientDrawable topShadow; + public GradientDrawable bottomShadow; + + // Scrolling + private boolean isScrollingPerformed; + public int scrollingOffset; + + // Scrolling animation + private GestureDetector gestureDetector; + private Scroller scroller; + private int lastScrollY; + + // Cyclic + boolean isCyclic = false; + + // Listeners + private List changingListeners = new LinkedList(); + private List scrollingListeners = new LinkedList(); + + + /** + * Constructor + */ + public WheelView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initData(context); + } + + /** + * Constructor + */ + public WheelView(Context context, AttributeSet attrs) { + super(context, attrs); + initData(context); + } + + /** + * Constructor + */ + public WheelView(Context context) { + super(context); + initData(context); + } + + /** + * Initializes class data + * + * @param context + * the context + */ + private void initData(Context context) { + gestureDetector = new GestureDetector(context, gestureListener); + gestureDetector.setIsLongpressEnabled(false); + + LABEL_OFFSET = DensityUtil.dip2px(context, LABEL_OFFSET_DIP); + + scroller = new Scroller(context); + } + + /** + * Gets wheel adapter + * + * @return the adapter + */ + public WheelAdapter getAdapter() { + return adapter; + } + + /** + * Sets wheel adapter + * + * @param adapter + * the new wheel adapter + */ + public void setAdapter(WheelAdapter adapter) { + this.adapter = adapter; + invalidateLayouts(); + invalidate(); + } + + /** + * Set the the specified scrolling interpolator + * + * @param interpolator + * the interpolator + */ + public void setInterpolator(Interpolator interpolator) { + scroller.forceFinished(true); + scroller = new Scroller(getContext(), interpolator); + } + + /** + * Gets count of visible items + * + * @return the count of visible items + */ + public int getVisibleItems() { + return visibleItems; + } + + /** + * Sets count of visible items + * + * @param count + * the new count + */ + public void setVisibleItems(int count) { + visibleItems = count; + invalidate(); + } + + /** + * Gets label + * + * @return the label + */ + public String getLabel() { + return label; + } + + /** + * Sets label + * + * @param newLabel + * the label to set + */ + public void setLabel(String newLabel) { + if (label == null || !label.equals(newLabel)) { + label = newLabel; + labelLayout = null; + invalidate(); + } + } + + /** + * Adds wheel changing listener + * + * @param listener + * the listener + */ + public void addChangingListener(OnWheelChangedListener listener) { + changingListeners.add(listener); + } + + /** + * Removes wheel changing listener + * + * @param listener + * the listener + */ + public void removeChangingListener(OnWheelChangedListener listener) { + changingListeners.remove(listener); + } + + /** + * Notifies changing listeners + * + * @param oldValue + * the old wheel value + * @param newValue + * the new wheel value + */ + protected void notifyChangingListeners(int oldValue, int newValue) { + for (OnWheelChangedListener listener : changingListeners) { + listener.onChanged(this, oldValue, newValue); + } + } + + /** + * Adds wheel scrolling listener + * + * @param listener + * the listener + */ + public void addScrollingListener(OnWheelScrollListener listener) { + scrollingListeners.add(listener); + } + + /** + * Removes wheel scrolling listener + * + * @param listener + * the listener + */ + public void removeScrollingListener(OnWheelScrollListener listener) { + scrollingListeners.remove(listener); + } + + /** + * Notifies listeners about starting scrolling + */ + protected void notifyScrollingListenersAboutStart() { + for (OnWheelScrollListener listener : scrollingListeners) { + listener.onScrollingStarted(this); + } + } + + /** + * Notifies listeners about ending scrolling + */ + protected void notifyScrollingListenersAboutEnd() { + for (OnWheelScrollListener listener : scrollingListeners) { + listener.onScrollingFinished(this); + } + } + + /** + * Gets current value + * + * @return the current value + */ + public int getCurrentItem() { + return currentItem; + } + + /** + * Sets the current item. Does nothing when index is wrong. + * + * @param index + * the item index + * @param animated + * the animation flag + */ + public void setCurrentItem(int index, boolean animated) { + if (adapter == null || adapter.getItemsCount() == 0) { + return; // throw? + } + if (index < 0 || index >= adapter.getItemsCount()) { + if (isCyclic) { + while (index < 0) { + index += adapter.getItemsCount(); + } + index %= adapter.getItemsCount(); + } else { + return; // throw? + } + } + if (index != currentItem) { + if (animated) { + scroll(index - currentItem, SCROLLING_DURATION); + } else { + invalidateLayouts(); + + int old = currentItem; + currentItem = index; + + notifyChangingListeners(old, currentItem); + + invalidate(); + } + } + } + + /** + * Sets the current item w/o animation. Does nothing when index is wrong. + * + * @param index + * the item index + */ + public void setCurrentItem(int index) { + setCurrentItem(index, false); + } + + /** + * Tests if wheel is cyclic. That means before the 1st item there is shown + * the last one + * + * @return true if wheel is cyclic + */ + public boolean isCyclic() { + return isCyclic; + } + + /** + * Set wheel cyclic flag + * 设置是否循环滚动 + * @param isCyclic + * the flag to set + */ + public void setCyclic(boolean isCyclic) { + this.isCyclic = isCyclic; + + invalidate(); + invalidateLayouts(); + } + + /** + * Invalidates layouts + */ + private void invalidateLayouts() { + itemsLayout = null; + valueLayout = null; + scrollingOffset = 0; + } + + /** + * Initializes resources + */ + public void initResourcesIfNecessary() { + if (itemsPaint == null) { + itemsPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + // itemsPaint.density = getResources().getDisplayMetrics().density; + itemsPaint.setTextSize(TEXT_SIZE); + itemsPaint.setColor(0xFF666666); + } + + if (valuePaint == null) { +// valuePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG +// | Paint.FAKE_BOLD_TEXT_FLAG | Paint.DITHER_FLAG); + // valuePaint.density = getResources().getDisplayMetrics().density; + valuePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); + valuePaint.setTextSize(TEXT_SIZE); +// valuePaint.setShadowLayer(0.1f, 0, 0.1f, 0xFFC0C0C0); + } + + if (centerDrawable == null) { + centerDrawable = getContext().getResources().getDrawable( + R.drawable.wheel_val); + } + + if (topShadow == null) { + topShadow = new GradientDrawable(Orientation.TOP_BOTTOM, + SHADOWS_COLORS); + } + + if (bottomShadow == null) { + bottomShadow = new GradientDrawable(Orientation.BOTTOM_TOP, + SHADOWS_COLORS); + } + +// setBackgroundResource(R.drawable.wheel_bg); + } + + /** + * Calculates desired height for layout + * + * @param layout + * the source layout + * @return the desired layout height + */ + private int getDesiredHeight(Layout layout) { + if (layout == null) { + return 0; + } + + int desired = getItemHeight() * visibleItems - ITEM_OFFSET * 2 + - ADDITIONAL_ITEM_HEIGHT; + + // Check against our minimum height + desired = Math.max(desired, getSuggestedMinimumHeight()); + + return desired; + } + + /** + * Returns text item by index + * + * @param index + * the item index + * @return the item or null + */ + private String getTextItem(int index) { + if (adapter == null || adapter.getItemsCount() == 0) { + return null; + } + int count = adapter.getItemsCount(); + if ((index < 0 || index >= count) && !isCyclic) { + return null; + } else { + while (index < 0) { + index = count + index; + } + } + + index %= count; + return adapter.getItem(index); + } + + /** + * Builds text depending on current value + * + * @param useCurrentValue + * @return the text + */ + private String buildText(boolean useCurrentValue) { + StringBuilder itemsText = new StringBuilder(); + int addItems = visibleItems / 2 + 1; + + for (int i = currentItem - addItems; i <= currentItem + addItems; i++) { + if (useCurrentValue || i != currentItem) { + String text = getTextItem(i); + if (text != null) { + itemsText.append(text); + } + } + if (i < currentItem + addItems) { + itemsText.append("\n"); + } + } + + return itemsText.toString(); + } + + /** + * Returns the max item length that can be present + * + * @return the max length + */ + private int getMaxTextLength() { + WheelAdapter adapter = getAdapter(); + if (adapter == null) { + return 0; + } + + int adapterLength = adapter.getMaximumLength(); + if (adapterLength > 0) { + return adapterLength; + } + + String maxText = null; + int addItems = visibleItems / 2; + for (int i = Math.max(currentItem - addItems, 0); i < Math.min( + currentItem + visibleItems, adapter.getItemsCount()); i++) { + String text = adapter.getItem(i); + if (text != null + && (maxText == null || maxText.length() < text.length())) { + maxText = text; + } + } + + return maxText != null ? maxText.length() : 0; + } + + /** + * Returns height of wheel item + * + * @return the item height + */ + private int getItemHeight() { + if (itemHeight != 0) { + return itemHeight; + } else if (itemsLayout != null && itemsLayout.getLineCount() > 2) { + itemHeight = itemsLayout.getLineTop(2) - itemsLayout.getLineTop(1); + return itemHeight; + } + + return getHeight() / visibleItems; + } + + /** + * Calculates control width and creates text layouts + * + * @param widthSize + * the input layout width + * @param mode + * the layout mode + * @return the calculated control width + */ + private int calculateLayoutWidth(int widthSize, int mode) { + initResourcesIfNecessary(); + + int width = widthSize; + + int maxLength = getMaxTextLength(); + if (maxLength > 0) { + double textWidth = Math.ceil(Layout.getDesiredWidth("0", + itemsPaint)); + itemsWidth = (int) (maxLength * textWidth); + } else { + itemsWidth = 0; + } + itemsWidth += ADDITIONAL_ITEMS_SPACE; // make it some more + + labelWidth = 0; + if (label != null && label.length() > 0) { + labelWidth = (int) Math.ceil(Layout.getDesiredWidth(label, + valuePaint)); + } + + boolean recalculate = false; + if (mode == MeasureSpec.EXACTLY) { + width = widthSize; + recalculate = true; + } else { + width = itemsWidth + labelWidth + 2 * PADDING; + if (labelWidth > 0) { + width += LABEL_OFFSET; + } + + // Check against our minimum width + width = Math.max(width, getSuggestedMinimumWidth()); + + if (mode == MeasureSpec.AT_MOST && widthSize < width) { + width = widthSize; + recalculate = true; + } + } + + if (recalculate) { + // recalculate width + int pureWidth = width - LABEL_OFFSET - 2 * PADDING; + if (pureWidth <= 0) { + itemsWidth = labelWidth = 0; + } + if (labelWidth > 0) { + double newWidthItems = (double) itemsWidth * pureWidth + / (itemsWidth + labelWidth); + itemsWidth = (int) newWidthItems; + labelWidth = pureWidth - itemsWidth; + } else { + itemsWidth = pureWidth + LABEL_OFFSET; // no label + } + } + + if (itemsWidth > 0) { + createLayouts(itemsWidth, labelWidth); + } + + return width; + } + + /** + * Creates layouts + * + * @param widthItems + * width of items layout + * @param widthLabel + * width of label layout + */ + private void createLayouts(int widthItems, int widthLabel) { + if (itemsLayout == null || itemsLayout.getWidth() > widthItems) { + itemsLayout = new StaticLayout(buildText(isScrollingPerformed), itemsPaint, widthItems, + widthLabel > 0 ? Layout.Alignment.ALIGN_CENTER + : Layout.Alignment.ALIGN_CENTER, 1, ADDITIONAL_ITEM_HEIGHT, false); + } else { + itemsLayout.increaseWidthTo(widthItems); + } + + if (!isScrollingPerformed && (valueLayout == null || valueLayout.getWidth() > widthItems)) { + String text = getAdapter() != null ? getAdapter().getItem(currentItem) : null; + valueLayout = new StaticLayout(text != null ? text : "", valuePaint, widthItems, + widthLabel > 0 ? Layout.Alignment.ALIGN_CENTER + : Layout.Alignment.ALIGN_CENTER, 1, ADDITIONAL_ITEM_HEIGHT, false); + } else if (isScrollingPerformed) { + valueLayout = null; + } else { + valueLayout.increaseWidthTo(widthItems); + } + + if (widthLabel > 0) { + if (labelLayout == null || labelLayout.getWidth() > widthLabel) { + labelLayout = new StaticLayout(label, valuePaint, widthLabel, + Layout.Alignment.ALIGN_NORMAL, 1, ADDITIONAL_ITEM_HEIGHT, false); + } else { + labelLayout.increaseWidthTo(widthLabel); + } + } + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + + int width = calculateLayoutWidth(widthSize, widthMode); + + int height; + if (heightMode == MeasureSpec.EXACTLY) { + height = heightSize; + } else { + height = getDesiredHeight(itemsLayout); + + if (heightMode == MeasureSpec.AT_MOST) { + height = Math.min(height, heightSize); + } + } + + setMeasuredDimension(width, height); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + drawCenterRect(canvas); + + if (itemsLayout == null) { + if (itemsWidth == 0) { + calculateLayoutWidth(getWidth(), MeasureSpec.EXACTLY); + } else { + createLayouts(itemsWidth, labelWidth); + } + } + + if (itemsWidth > 0) { + canvas.save(); + // Skip padding space and hide a part of top and bottom items + canvas.translate(PADDING, -ITEM_OFFSET); + drawItems(canvas); + drawValue(canvas); + canvas.restore(); + } +// drawShadows(canvas); + } + + /** + * Draws shadows on top and bottom of control + * + * @param canvas + * the canvas for drawing + */ + private void drawShadows(Canvas canvas) { + topShadow.setBounds(0, 0, getWidth(), getHeight() / 2); + topShadow.draw(canvas); + + bottomShadow.setBounds(0, getHeight() / 2, + getWidth(), getHeight()); + bottomShadow.draw(canvas); + } + + /** + * Draws value and label layout + * 选中的item + * @param canvas + * the canvas for drawing + */ + public void drawValue(Canvas canvas) { +// valuePaint.setColor(VALUE_TEXT_COLOR); + valuePaint.setColor(getResources().getColor(R.color.top_title)); + valuePaint.drawableState = getDrawableState(); + + Rect bounds = new Rect(); + itemsLayout.getLineBounds(visibleItems / 2, bounds); + +// canvas.scale(1.2f, 1.2f); + // draw label + if (labelLayout != null) { + canvas.save(); + canvas.translate(itemsLayout.getWidth() + LABEL_OFFSET, bounds.top); + labelLayout.draw(canvas); + canvas.restore(); + } + + // draw current value + if (valueLayout != null) { + canvas.save(); + canvas.translate(0, bounds.top + scrollingOffset); + valueLayout.draw(canvas); + canvas.restore(); + } + } + + /** + * Draws items + * 非选中的item + * @param canvas + * the canvas for drawing + */ + private void drawItems(Canvas canvas) { + canvas.save(); + + int top = itemsLayout.getLineTop(1); + canvas.translate(0, -top + scrollingOffset); + + itemsPaint.setColor(ITEMS_TEXT_COLOR); + itemsPaint.drawableState = getDrawableState(); + itemsLayout.draw(canvas); + + canvas.restore(); + } + + /** + * Draws rect for current value + * + * @param canvas + * the canvas for drawing + */ + private void drawCenterRect(Canvas canvas) { + int center = getHeight() / 2; + int offset = getItemHeight() / 2; + centerDrawable.setBounds(0, center - offset, getWidth(), center + + offset); + centerDrawable.draw(canvas); + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + WheelAdapter adapter = getAdapter(); + if (adapter == null) { + return true; + } + + if (!gestureDetector.onTouchEvent(event) + && event.getAction() == MotionEvent.ACTION_UP) { + justify(); + } + return true; + } + + /** + * Scrolls the wheel + * + * @param delta + * the scrolling value + */ + private void doScroll(int delta) { + scrollingOffset += delta; + + int count = scrollingOffset / getItemHeight(); + int pos = currentItem - count; + if (isCyclic && adapter.getItemsCount() > 0) { + // fix position by rotating + while (pos < 0) { + pos += adapter.getItemsCount(); + } + pos %= adapter.getItemsCount(); + } else if (isScrollingPerformed) { + // + if (pos < 0) { + count = currentItem; + pos = 0; + } else if (pos >= adapter.getItemsCount()) { + count = currentItem - adapter.getItemsCount() + 1; + pos = adapter.getItemsCount() - 1; + } + } else { + // fix position + pos = Math.max(pos, 0); + pos = Math.min(pos, adapter.getItemsCount() - 1); + } + + int offset = scrollingOffset; + if (pos != currentItem) { + setCurrentItem(pos, false); + } else { + invalidate(); + } + + // update offset + scrollingOffset = offset - count * getItemHeight(); + if (scrollingOffset > getHeight()) { + scrollingOffset = scrollingOffset % getHeight() + getHeight(); + } + } + + // gesture listener + private SimpleOnGestureListener gestureListener = new SimpleOnGestureListener() { + @Override + public boolean onDown(MotionEvent e) { + if (isScrollingPerformed) { + scroller.forceFinished(true); + clearMessages(); + return true; + } + return false; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, + float distanceX, float distanceY) { + startScrolling(); + doScroll((int) -distanceY); + return true; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, + float velocityY) { + lastScrollY = currentItem * getItemHeight() + scrollingOffset; + int maxY = isCyclic ? 0x7FFFFFFF : adapter.getItemsCount() + * getItemHeight(); + int minY = isCyclic ? -maxY : 0; + scroller.fling(0, lastScrollY, 0, (int) -velocityY / 2, 0, 0, minY, + maxY); + setNextMessage(MESSAGE_SCROLL); + return true; + } + }; + + // Messages + private final int MESSAGE_SCROLL = 0; + private final int MESSAGE_JUSTIFY = 1; + + /** + * Set next message to queue. Clears queue before. + * + * @param message + * the message to set + */ + private void setNextMessage(int message) { + clearMessages(); + animationHandler.sendEmptyMessage(message); + } + + /** + * Clears messages from queue + */ + private void clearMessages() { + animationHandler.removeMessages(MESSAGE_SCROLL); + animationHandler.removeMessages(MESSAGE_JUSTIFY); + } + + // animation handler + private Handler animationHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + scroller.computeScrollOffset(); + int currY = scroller.getCurrY(); + int delta = lastScrollY - currY; + lastScrollY = currY; + if (delta != 0) { + doScroll(delta); + } + + // scrolling is not finished when it comes to final Y + // so, finish it manually + if (Math.abs(currY - scroller.getFinalY()) < MIN_DELTA_FOR_SCROLLING) { + currY = scroller.getFinalY(); + scroller.forceFinished(true); + } + if (!scroller.isFinished()) { + animationHandler.sendEmptyMessage(msg.what); + } else if (msg.what == MESSAGE_SCROLL) { + justify(); + } else { + finishScrolling(); + } + } + }; + + /** + * Justifies wheel + */ + private void justify() { + if (adapter == null) { + return; + } + + lastScrollY = 0; + int offset = scrollingOffset; + int itemHeight = getItemHeight(); + boolean needToIncrease = offset > 0 ? currentItem < adapter + .getItemsCount() : currentItem > 0; + if ((isCyclic || needToIncrease) + && Math.abs((float) offset) > (float) itemHeight / 2) { + if (offset < 0) + offset += itemHeight + MIN_DELTA_FOR_SCROLLING; + else + offset -= itemHeight + MIN_DELTA_FOR_SCROLLING; + } + if (Math.abs(offset) > MIN_DELTA_FOR_SCROLLING) { + scroller.startScroll(0, 0, 0, offset, SCROLLING_DURATION); + setNextMessage(MESSAGE_JUSTIFY); + } else { + finishScrolling(); + } + } + + /** + * Starts scrolling + */ + private void startScrolling() { + if (!isScrollingPerformed) { + isScrollingPerformed = true; + notifyScrollingListenersAboutStart(); + } + } + + /** + * Finishes scrolling + */ + void finishScrolling() { + if (isScrollingPerformed) { + notifyScrollingListenersAboutEnd(); + isScrollingPerformed = false; + } + invalidateLayouts(); + invalidate(); + } + + /** + * Scroll the wheel + * + * @param itemsToScroll + * items to scroll + * @param time + * scrolling duration + */ + public void scroll(int itemsToScroll, int time) { + scroller.forceFinished(true); + + lastScrollY = scrollingOffset; + int offset = itemsToScroll * getItemHeight(); + + scroller.startScroll(0, lastScrollY, 0, offset - lastScrollY, time); + setNextMessage(MESSAGE_SCROLL); + + startScrolling(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelViewNew.java b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelViewNew.java new file mode 100644 index 0000000..090d33d --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widge/pickerview/lib/WheelViewNew.java @@ -0,0 +1,91 @@ +package cn.shangyu.gdxzExpert.widge.pickerview.lib; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.drawable.GradientDrawable; +import android.text.TextPaint; +import android.util.AttributeSet; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.CommonUtil; + +public class WheelViewNew extends WheelView { + + public WheelViewNew(Context context) { + super(context); + ITEMS_TEXT_COLOR=0x42000000; + } + + /** + * Constructor + */ + public WheelViewNew(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + ITEMS_TEXT_COLOR=0x42000000; + } + + /** + * Constructor + */ + public WheelViewNew(Context context, AttributeSet attrs) { + super(context, attrs); + ITEMS_TEXT_COLOR=0x42000000; + } + + + @Override + public void initResourcesIfNecessary() { + if (itemsPaint == null) { + itemsPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG); + itemsPaint.setTextSize(CommonUtil.dip2px(getContext(),20)); + itemsPaint.setColor(ITEMS_TEXT_COLOR); + } + + if (valuePaint == null) { + + valuePaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG); + valuePaint.setTextSize(CommonUtil.dip2px(getContext(),20)); + + } + if (centerDrawable == null) { + centerDrawable = getContext().getResources().getDrawable( + R.drawable.wheel_val); + } + + if (topShadow == null) { + topShadow = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, + SHADOWS_COLORS); + } + + if (bottomShadow == null) { + bottomShadow = new GradientDrawable(GradientDrawable.Orientation.BOTTOM_TOP, + SHADOWS_COLORS); + } + } + @Override + public void drawValue(Canvas canvas) { + + valuePaint.setColor(Color.parseColor("#e6000000")); + valuePaint.drawableState = getDrawableState(); + + Rect bounds = new Rect(); + itemsLayout.getLineBounds(visibleItems / 2, bounds); + + if (labelLayout != null) { + canvas.save(); + canvas.translate(itemsLayout.getWidth() + LABEL_OFFSET, bounds.top); + labelLayout.draw(canvas); + canvas.restore(); + } + + if (valueLayout != null) { + canvas.save(); + canvas.translate(0, bounds.top + scrollingOffset); + valueLayout.draw(canvas); + canvas.restore(); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/BitmapCache.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/BitmapCache.java new file mode 100644 index 0000000..7dcf563 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/BitmapCache.java @@ -0,0 +1,35 @@ +package cn.shangyu.gdxzExpert.widget; + +import android.graphics.Bitmap; +import android.util.Log; +import android.util.LruCache; + +import com.android.volley.toolbox.ImageLoader.ImageCache; + +public class BitmapCache implements ImageCache { + private LruCache mCache; + + public BitmapCache() { + int maxSize = 4 * 1024 * 1024; + mCache = new LruCache(maxSize) { + @Override + protected int sizeOf(String key, Bitmap bitmap) { + return bitmap.getByteCount(); + } + }; + } + + @Override + public Bitmap getBitmap(String url) { + Log.i("leslie", "get cache " + url); + return mCache.get(url); + } + + @Override + public void putBitmap(String url, Bitmap bitmap) { + Log.i("leslie", "add cache " + url); + if (bitmap != null) { + mCache.put(url, bitmap); + } + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/CircleImageView.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CircleImageView.java new file mode 100644 index 0000000..b1fa3e3 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CircleImageView.java @@ -0,0 +1,349 @@ +/* + * Copyright 2014 - 2015 Henning Dodenhof + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package cn.shangyu.gdxzExpert.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.ColorFilter; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.RectF; +import android.graphics.Shader; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.util.AttributeSet; +import android.widget.ImageView; +import cn.shangyu.gdxzExpert.R; +/** + * 自定义圆形图片 + * @author + * + */ +public class CircleImageView extends ImageView { + + private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; + + private static final Bitmap.Config BITMAP_CONFIG = Bitmap.Config.ARGB_8888; + private static final int COLORDRAWABLE_DIMENSION = 2; + + private static final int DEFAULT_BORDER_WIDTH = 0; + private static final int DEFAULT_BORDER_COLOR = Color.BLACK; + private static final int DEFAULT_FILL_COLOR = Color.TRANSPARENT; + private static final boolean DEFAULT_BORDER_OVERLAY = false; + + private final RectF mDrawableRect = new RectF(); + private final RectF mBorderRect = new RectF(); + + private final Matrix mShaderMatrix = new Matrix(); + private final Paint mBitmapPaint = new Paint(); + private final Paint mBorderPaint = new Paint(); + private final Paint mFillPaint = new Paint(); + + private int mBorderColor = DEFAULT_BORDER_COLOR; + private int mBorderWidth = DEFAULT_BORDER_WIDTH; + private int mFillColor = DEFAULT_FILL_COLOR; + + private Bitmap mBitmap; + private BitmapShader mBitmapShader; + private int mBitmapWidth; + private int mBitmapHeight; + + private float mDrawableRadius; + private float mBorderRadius; + + private ColorFilter mColorFilter; + + private boolean mReady; + private boolean mSetupPending; + private boolean mBorderOverlay; + + public CircleImageView(Context context) { + super(context); + + init(); + } + + public CircleImageView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public CircleImageView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CircleImageView, defStyle, 0); + + mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_civ_border_width, DEFAULT_BORDER_WIDTH); + mBorderColor = a.getColor(R.styleable.CircleImageView_civ_border_color, DEFAULT_BORDER_COLOR); + mBorderOverlay = a.getBoolean(R.styleable.CircleImageView_civ_border_overlay, DEFAULT_BORDER_OVERLAY); + mFillColor = a.getColor(R.styleable.CircleImageView_civ_fill_color, DEFAULT_FILL_COLOR); + + a.recycle(); + + init(); + } + + private void init() { + super.setScaleType(SCALE_TYPE); + mReady = true; + + if (mSetupPending) { + setup(); + mSetupPending = false; + } + } + + @Override + public ScaleType getScaleType() { + return SCALE_TYPE; + } + + @Override + public void setScaleType(ScaleType scaleType) { + if (scaleType != SCALE_TYPE) { + throw new IllegalArgumentException(String.format("ScaleType %s not supported.", scaleType)); + } + } + + @Override + public void setAdjustViewBounds(boolean adjustViewBounds) { + if (adjustViewBounds) { + throw new IllegalArgumentException("adjustViewBounds not supported."); + } + } + + @Override + protected void onDraw(Canvas canvas) { + if (mBitmap == null) { + return; + } + + if (mFillColor != Color.TRANSPARENT) { + canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mFillPaint); + } + canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mDrawableRadius, mBitmapPaint); + if (mBorderWidth != 0) { + canvas.drawCircle(getWidth() / 2.0f, getHeight() / 2.0f, mBorderRadius, mBorderPaint); + } + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + setup(); + } + + public int getBorderColor() { + return mBorderColor; + } + + public void setBorderColor(int borderColor) { + if (borderColor == mBorderColor) { + return; + } + + mBorderColor = borderColor; + mBorderPaint.setColor(mBorderColor); + invalidate(); + } + + public void setBorderColorResource(int borderColorRes) { + setBorderColor(getContext().getResources().getColor(borderColorRes)); + } + + public int getFillColor() { + return mFillColor; + } + + public void setFillColor(int fillColor) { + if (fillColor == mFillColor) { + return; + } + + mFillColor = fillColor; + mFillPaint.setColor(fillColor); + invalidate(); + } + + public void setFillColorResource(int fillColorRes) { + setFillColor(getContext().getResources().getColor(fillColorRes)); + } + + public int getBorderWidth() { + return mBorderWidth; + } + + public void setBorderWidth(int borderWidth) { + if (borderWidth == mBorderWidth) { + return; + } + + mBorderWidth = borderWidth; + setup(); + } + + public boolean isBorderOverlay() { + return mBorderOverlay; + } + + public void setBorderOverlay(boolean borderOverlay) { + if (borderOverlay == mBorderOverlay) { + return; + } + + mBorderOverlay = borderOverlay; + setup(); + } + + @Override + public void setImageBitmap(Bitmap bm) { + super.setImageBitmap(bm); + mBitmap = bm; + setup(); + } + + @Override + public void setImageDrawable(Drawable drawable) { + super.setImageDrawable(drawable); + mBitmap = getBitmapFromDrawable(drawable); + setup(); + } + + @Override + public void setImageResource(int resId) { + super.setImageResource(resId); + mBitmap = getBitmapFromDrawable(getDrawable()); + setup(); + } + + @Override + public void setImageURI(Uri uri) { + super.setImageURI(uri); + mBitmap = uri != null ? getBitmapFromDrawable(getDrawable()) : null; + setup(); + } + + @Override + public void setColorFilter(ColorFilter cf) { + if (cf == mColorFilter) { + return; + } + + mColorFilter = cf; + mBitmapPaint.setColorFilter(mColorFilter); + invalidate(); + } + + private Bitmap getBitmapFromDrawable(Drawable drawable) { + if (drawable == null) { + return null; + } + + if (drawable instanceof BitmapDrawable) { + return ((BitmapDrawable) drawable).getBitmap(); + } + + try { + Bitmap bitmap; + + if (drawable instanceof ColorDrawable) { + bitmap = Bitmap.createBitmap(COLORDRAWABLE_DIMENSION, COLORDRAWABLE_DIMENSION, BITMAP_CONFIG); + } else { + bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), BITMAP_CONFIG); + } + + Canvas canvas = new Canvas(bitmap); + drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); + drawable.draw(canvas); + return bitmap; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + private void setup() { + if (!mReady) { + mSetupPending = true; + return; + } + + if (getWidth() == 0 && getHeight() == 0) { + return; + } + + if (mBitmap == null) { + invalidate(); + return; + } + + mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + + mBitmapPaint.setAntiAlias(true); + mBitmapPaint.setShader(mBitmapShader); + + mBorderPaint.setStyle(Paint.Style.STROKE); + mBorderPaint.setAntiAlias(true); + mBorderPaint.setColor(mBorderColor); + mBorderPaint.setStrokeWidth(mBorderWidth); + + mFillPaint.setStyle(Paint.Style.FILL); + mFillPaint.setAntiAlias(true); + mFillPaint.setColor(mFillColor); + + mBitmapHeight = mBitmap.getHeight(); + mBitmapWidth = mBitmap.getWidth(); + + mBorderRect.set(0, 0, getWidth(), getHeight()); + mBorderRadius = Math.min((mBorderRect.height() - mBorderWidth) / 2.0f, (mBorderRect.width() - mBorderWidth) / 2.0f); + + mDrawableRect.set(mBorderRect); + if (!mBorderOverlay) { + mDrawableRect.inset(mBorderWidth, mBorderWidth); + } + mDrawableRadius = Math.min(mDrawableRect.height() / 2.0f, mDrawableRect.width() / 2.0f); + + updateShaderMatrix(); + invalidate(); + } + + private void updateShaderMatrix() { + float scale; + float dx = 0; + float dy = 0; + + mShaderMatrix.set(null); + + if (mBitmapWidth * mDrawableRect.height() > mDrawableRect.width() * mBitmapHeight) { + scale = mDrawableRect.height() / (float) mBitmapHeight; + dx = (mDrawableRect.width() - mBitmapWidth * scale) * 0.5f; + } else { + scale = mDrawableRect.width() / (float) mBitmapWidth; + dy = (mDrawableRect.height() - mBitmapHeight * scale) * 0.5f; + } + + mShaderMatrix.setScale(scale, scale); + mShaderMatrix.postTranslate((int) (dx + 0.5f) + mDrawableRect.left, (int) (dy + 0.5f) + mDrawableRect.top); + + mBitmapShader.setLocalMatrix(mShaderMatrix); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/CircularRectangle.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CircularRectangle.java new file mode 100644 index 0000000..0ea9ce9 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CircularRectangle.java @@ -0,0 +1,161 @@ +package cn.shangyu.gdxzExpert.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.PaintFlagsDrawFilter; +import android.graphics.Path; +import android.os.Build; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.view.View; + +import com.bumptech.glide.Glide; +import com.bumptech.glide.request.RequestOptions; +import com.netease.nim.uikit.api.NimUIKit; +import com.netease.nimlib.sdk.NIMClient; +import com.netease.nimlib.sdk.RequestCallbackWrapper; +import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum; +import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.netease.nimlib.sdk.nos.NosService; +import com.netease.nimlib.sdk.nos.model.NosThumbParam; +import com.netease.nimlib.sdk.nos.util.NosThumbImageUtil; +import com.netease.nimlib.sdk.robot.model.RobotAttachment; + +import androidx.appcompat.widget.AppCompatImageView; +import cn.shangyu.gdxzExpert.R; + +import static com.netease.nim.uikit.common.ui.imageview.HeadImageView.DEFAULT_AVATAR_THUMB_SIZE; + +public class CircularRectangle extends AppCompatImageView { + float width,height; + public static final int DEFAULT_AVATAR_RES_ID_new = R.drawable.default_news_iv; + public CircularRectangle(Context context) { + super(context); + } + + public CircularRectangle(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public CircularRectangle(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + if (Build.VERSION.SDK_INT < 18) { + setLayerType(View.LAYER_TYPE_SOFTWARE, null); + } + + } + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + width = getWidth(); + height = getHeight(); + } + + @Override + protected void onDraw(Canvas canvas) { + + if (width > 12 && height > 12) { + Path path = new Path(); + path.moveTo(12, 0); + path.lineTo(width - 12, 0); + path.quadTo(width, 0, width, 12); + path.lineTo(width, height - 12); + path.quadTo(width, height, width - 12, height); + path.lineTo(12, height); + path.quadTo(0, height, 0, height - 12); + path.lineTo(0, 12); + path.quadTo(0, 0, 12, 0); + canvas.clipPath(path); + } + canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG)); + super.onDraw(canvas); + } + /** + * 加载用户头像(默认大小的缩略图) + * + * @param account 用户账号 + */ + public void loadBuddyAvatar(String account) { +// NimUIKit.getContactProvider().getAlias(account); + loadAvatar("", NimUIKit.getContactProvider().getAlias(account)); +// final UserInfo userInfo = NimUIKit.getUserInfoProvider().getUserInfo(account); +// changeUrlBeforeLoad(null, userInfo != null ? userInfo.getAvatar() : null, +// DEFAULT_AVATAR_RES_ID, DEFAULT_AVATAR_THUMB_SIZE); + } + + /** + * 加载用户头像(默认大小的缩略图) + * + * @param message 消息 + */ + public void loadBuddyAvatar(IMMessage message) { + String account = message.getFromAccount(); + if (message.getMsgType() == MsgTypeEnum.robot) { + RobotAttachment attachment = (RobotAttachment) message.getAttachment(); + if (attachment.isRobotSend()) { + account = attachment.getFromRobotAccount(); + } + } + + loadBuddyAvatar(account); + } + /** + * 加载用户头像(默认大小的缩略图) + * + * @param url 头像地址 + */ + public void loadAvatar(String roomId, final String url) { + changeUrlBeforeLoad(roomId, url, DEFAULT_AVATAR_RES_ID_new, DEFAULT_AVATAR_THUMB_SIZE); + } + /** + * 如果图片是上传到云信服务器,并且用户开启了文件安全功能,那么这里可能是短链,需要先换成源链才能下载。 + * 如果没有使用云信存储或没开启文件安全,那么不用这样做 + */ + private void changeUrlBeforeLoad(String roomId, final String url, final int defaultResId, + final int thumbSize) { + if (TextUtils.isEmpty(url)) { + // avoid useless call + loadImage(url, defaultResId, thumbSize); + } else { + /* + * 若使用网易云信云存储,这里可以设置下载图片的压缩尺寸,生成下载URL + * 如果图片来源是非网易云信云存储,请不要使用NosThumbImageUtil + */ + NIMClient.getService(NosService.class).getOriginUrlFromShortUrl(url).setCallback( + new RequestCallbackWrapper() { + + @Override + public void onResult(int code, String result, Throwable exception) { + if (TextUtils.isEmpty(result)) { + result = url; + } + final String thumbUrl = makeAvatarThumbNosUrl(result, thumbSize); + loadImage(thumbUrl, defaultResId, thumbSize); + } + }); + } + } + + /** + * ImageLoader异步加载 + */ + private void loadImage(final String url, final int defaultResId, final int thumbSize) { + RequestOptions requestOptions = new RequestOptions().centerCrop().placeholder(defaultResId) + .error(defaultResId).override(thumbSize, + thumbSize); + Glide.with(getContext().getApplicationContext()).asBitmap().load(url).apply(requestOptions) + .into(this); + } + /** + * 生成头像缩略图NOS URL地址(用作ImageLoader缓存的key) + */ + private static String makeAvatarThumbNosUrl(final String url, final int thumbSize) { + if (TextUtils.isEmpty(url)) { + return url; + } + return thumbSize > 0 ? NosThumbImageUtil.makeImageThumbUrl(url, + NosThumbParam.ThumbType.Crop, + thumbSize, thumbSize) : url; + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/CommentExpandableListView.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CommentExpandableListView.java new file mode 100644 index 0000000..1fffc0f --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CommentExpandableListView.java @@ -0,0 +1,105 @@ +package cn.shangyu.gdxzExpert.widget; + +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.view.View; +import android.widget.ExpandableListView; + +import androidx.core.view.NestedScrollingChild; +import androidx.core.view.NestedScrollingChildHelper; + +/** + * Author: Moos + * E-mail: moosphon@gmail.com + * Date: 18/4/20. + * Desc: 自定义ExpandableListView,解决与CoordinatorLayout滑动冲突问题 + */ + +public class CommentExpandableListView extends ExpandableListView implements NestedScrollingChild { + private NestedScrollingChildHelper mScrollingChildHelper; + + + public CommentExpandableListView(Context context, AttributeSet attrs) { + super(context, attrs); + mScrollingChildHelper = new NestedScrollingChildHelper(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setNestedScrollingEnabled(true); + } + + } + + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + + } + + @Override + public void setNestedScrollingEnabled(boolean enabled) { + mScrollingChildHelper.setNestedScrollingEnabled(enabled); + } + + @Override + public boolean isNestedScrollingEnabled() { + return mScrollingChildHelper.isNestedScrollingEnabled(); + } + + @Override + public boolean startNestedScroll(int axes) { + return mScrollingChildHelper.startNestedScroll(axes); + } + + @Override + public void stopNestedScroll() { + mScrollingChildHelper.stopNestedScroll(); + } + + @Override + public boolean hasNestedScrollingParent() { + return mScrollingChildHelper.hasNestedScrollingParent(); + } + + @Override + public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, + int dyUnconsumed, int[] offsetInWindow) { + return mScrollingChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, + dxUnconsumed, dyUnconsumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { + return mScrollingChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow); + } + + @Override + public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) { + return mScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed); + } + + @Override + public boolean dispatchNestedPreFling(float velocityX, float velocityY) { + return mScrollingChildHelper.dispatchNestedPreFling(velocityX, velocityY); + } + + @Override + public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) { + super.onNestedPreScroll(target, dx, dy, consumed); + + } + + public void scroll(int groupIndex, int childIndex) { + int position = 0; + for (int i = 0; i < groupIndex; i++) { + position++; + if (isGroupExpanded(i)){ + position = position + getExpandableListAdapter().getChildrenCount(i); + } + } + position++; + position = position + childIndex; + super.smoothScrollToPosition(position); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomClearEditText.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomClearEditText.java new file mode 100644 index 0000000..676def0 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomClearEditText.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.cloopen.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.widget; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.text.Editable; +import android.text.TextWatcher; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.EditText; +import cn.shangyu.gdxzExpert.R; + +/**带有删除的搜索输入框 + *

    Title: CCPClearEditText

    + *

    Description:

    + *

    Copyright: Copyright (c) 2014

    + *

    Company: Beijing Speedtong Information Technology Co.,Ltd

    + * @author Jorstin Chan + * @date 2014-4-6 + * @version 1.0 + */ +public class CustomClearEditText extends EditText implements View.OnTouchListener , View.OnFocusChangeListener{ + + final Drawable mClear = getResources().getDrawable(R.drawable.search_clear); + /** + * @param context + */ + public CustomClearEditText(Context context) { + super(context); + initCCPClearEditTextRef(); + } + + /** + * @param context + * @param attrs + */ + public CustomClearEditText(Context context, AttributeSet attrs) { + super(context, attrs); + initCCPClearEditTextRef(); + } + + /** + * @param context + * @param attrs + * @param defStyle + */ + public CustomClearEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + initCCPClearEditTextRef(); + } + + private void initCCPClearEditTextRef() { + + mClear.setBounds(0, 0, mClear.getIntrinsicHeight(), mClear.getIntrinsicHeight()); + + doClearDrawable(); + setHeight(mClear.getIntrinsicHeight() + 5 * getResources().getDimensionPixelSize(R.dimen.OneDPPadding)); + setOnTouchListener(this); + addTextChangedListener(new TextWatcher() { + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + doClearDrawable(); + } + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) { + } + + @Override + public void afterTextChanged(Editable s) { + } + }); + + setOnFocusChangeListener(this); + } + + /** + * + */ + private void doClearDrawable() { + if("".equals(getText().toString()) || !isFocused()) { + setClearDrawableNull(); + return; + } + setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], mClear, getCompoundDrawables()[3]); + } + + /** + * + */ + private void setClearDrawableNull() { + setCompoundDrawables(getCompoundDrawables()[0], getCompoundDrawables()[1], null, getCompoundDrawables()[3]); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + + if(getCompoundDrawables()[2] == null) { + return false; + } + + if((event.getAction() != MotionEvent.ACTION_UP) + || event.getX() <= (getWidth() - getPaddingRight() - mClear.getIntrinsicWidth())) { + return false; + + } + getText().clear(); + + return false; + } + + @Override + public void onFocusChange(View v, boolean hasFocus) { + doClearDrawable(); + } +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomToast.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomToast.java new file mode 100644 index 0000000..91330db --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomToast.java @@ -0,0 +1,62 @@ +package cn.shangyu.gdxzExpert.widget; + +import android.content.Context; +import android.view.Gravity; +import android.view.View; +import android.widget.TextView; +import android.widget.Toast; +import cn.shangyu.gdxzExpert.R; + +/** + * + * 类名称:CustomToast + * 类描述:自定义的吐司 + * 创建人:苏三元 + * 时间:2015-9-2 上午11:36:57 + * 版权:河南商宇科技有限公司--版权所有 (c) 2015 + * + */ +public class CustomToast extends Toast { + + private TextView textView; + private String text; + private View view; + private int time; + private Context context; + + /** + * + * 创建一个新的实例 CustomToast. + * @param context 上下文 + * @param text 吐司内容 + * @param time 显示时间LENGTH_LONG=1或者LENGTH_SHORT=0 + */ + public static CustomToast show(Context context,String text,int time){ + return new CustomToast(context,text,time); + } + /** + * + * 创建一个新的实例 CustomToast. + * @param context 上下文 + * @param text 吐司内容 + * @param time 显示时间LENGTH_LONG=1或者LENGTH_SHORT=0 + */ + public CustomToast(Context context,String text,int time) { + super(context); + this.context = context; + this.text = text; + this.time = time; + init(); + } + + private void init() { + view = View.inflate(context, R.layout.custom_toast, null); + setView(view); + textView = (TextView) view.findViewById(R.id.textView); + textView.setText(text); + setGravity(Gravity.CENTER_HORIZONTAL, 0, 0); + setDuration(time); + show(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomerDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomerDialog.java new file mode 100644 index 0000000..7c01ca5 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/CustomerDialog.java @@ -0,0 +1,84 @@ +package cn.shangyu.gdxzExpert.widget; + +import android.app.Dialog; +import android.content.Context; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.TextView; +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.R.style; + +/** + * + * CustomerDialog.java + * @author ssy + * @date 2015-9-6 下午7:53:06 + * Copyright (C) 2015 河南商宇科技有限公司 + * + * 功能说明:重写弹窗,有标题有内容,有确定取消的按钮 + */ +public class CustomerDialog extends Dialog{ + + private LayoutInflater layoutInflater; + private View view; + + private TextView titleTv; + private TextView contentTv; + + private Button okBtn; + private Button cancelBtn; + + public CustomerDialog(Context context){ + super(context, style.MyDialogStyle);// +// this.layoutInflater=LayoutInflater.from(context); + + view=View.inflate(context, R.layout.update_dialog, null); + + titleTv=(TextView) view.findViewById(R.id.tv_title); + contentTv=(TextView) view.findViewById(R.id.tv_message); + + okBtn=(Button) view.findViewById(R.id.bt_dialog_ok); + cancelBtn=(Button) view.findViewById(R.id.bt_dialog_cancle); + + setContentView(view); + } + + @Override + public void setContentView(View view) { + + super.setContentView(view); + } + + public void setTitle(CharSequence title){ + if (!TextUtils.isEmpty(title)) { + titleTv.setText(title); + } + } + + public void setContent(CharSequence content){ + contentTv.setText(content); + } + + public void setOkBtnOnclickListener(View.OnClickListener listener){ + okBtn.setOnClickListener(listener); + } + + public void setCancelBtnOnclickListener(View.OnClickListener listener){ + cancelBtn.setOnClickListener(listener); + } + + @Override + public void dismiss() { + + super.dismiss(); + } + + @Override + public void show() { + + super.show(); + } + +} diff --git a/app/src/main/java/cn/shangyu/gdxzExpert/widget/ECAlertDialog.java b/app/src/main/java/cn/shangyu/gdxzExpert/widget/ECAlertDialog.java new file mode 100644 index 0000000..af0f931 --- /dev/null +++ b/app/src/main/java/cn/shangyu/gdxzExpert/widget/ECAlertDialog.java @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2013 The CCP project authors. All Rights Reserved. + * + * Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + * that can be found in the LICENSE file in the root of the web site. + * + * http://www.yuntongxun.com + * + * An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ +package cn.shangyu.gdxzExpert.widget; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.view.inputmethod.InputMethodManager; +import android.widget.Button; +import android.widget.TextView; + +import com.gyf.immersionbar.ImmersionBar; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import cn.shangyu.gdxzExpert.R; +import cn.shangyu.gdxzExpert.utils.LogUtil; + +/** + * 对话框 + * + * @author Jorstin Chan@容联•云通讯 + * @date 2015-1-3 + * @version 4.0 + */ +public class ECAlertDialog extends Dialog implements View.OnClickListener { + + public static final String TAG = "ECDemo.ECAlertDialog"; + /** 左边按钮 */ + public static final int BUTTON_NEGATIVE = 0; + /** 中间按钮 */ + public static final int BUTTON_NEUTRAL = 1; + /** 右边按钮 */ + public static final int BUTTON_POSITIVE = 2; + private boolean mDismiss = true; + private boolean mCancelable = true; + private boolean mCanceledOnTouchOutside = false; + private List